import React, { Component, Fragment } from 'react'; import moment from 'moment'; import { Utils } from '../../../utils/utils'; import { seafileAPI } from '../../../utils/seafile-api'; import { siteRoot, gettext } from '../../../utils/constants'; import toaster from '../../../components/toast'; import EmptyTip from '../../../components/empty-tip'; import Loading from '../../../components/loading'; import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog'; import MainPanelTopbar from '../main-panel-topbar'; import UserLink from '../user-link'; import OrgNav from './org-nav'; class Content extends Component { constructor(props) { super(props); } render() { const { loading, errorMsg, items } = this.props; if (loading) { return ; } else if (errorMsg) { return

{errorMsg}

; } else { const emptyTip = (

{gettext('No groups')}

); const table = ( {items.map((item, index) => { return (); })}
{gettext('Name')} {gettext('Creator')} {gettext('Created At')} {/* Operations */}
); return items.length ? table : emptyTip; } } } class Item extends Component { constructor(props) { super(props); this.state = { isOpIconShown: false, isDeleteDialogOpen: false }; } handleMouseEnter = () => { this.setState({isOpIconShown: true}); } handleMouseLeave = () => { this.setState({isOpIconShown: false}); } toggleDeleteDialog = (e) => { if (e) { e.preventDefault(); } this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen}); } deleteGroup = () => { this.toggleDeleteDialog(); this.props.deleteGroup(this.props.item.group_id); } render() { const { item } = this.props; const { isOpIconShown, isDeleteDialogOpen } = this.state; const itemName = '' + Utils.HTMLescape(item.group_name) + ''; const deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?').replace('{placeholder}', itemName); const groupUrl = item.parent_group_id == 0 ? `${siteRoot}sys/groups/${item.group_id}/libraries/` : `${siteRoot}sysadmin/#address-book/groups/${item.group_id}/`; return ( {item.group_name} {moment(item.created_at).format('YYYY-MM-DD HH:mm:ss')} {isDeleteDialogOpen && } ); } } class OrgGroups extends Component { constructor(props) { super(props); this.state = { loading: true, errorMsg: '', orgName: '', groupList: [] }; } componentDidMount () { seafileAPI.sysAdminGetOrg(this.props.orgID).then((res) => { this.setState({ orgName: res.data.org_name }); }); seafileAPI.sysAdminListOrgGroups(this.props.orgID).then((res) => { this.setState({ loading: false, groupList: res.data.group_list }); }).catch((error) => { this.setState({ loading: false, errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403 }); }); } deleteGroup = (groupID) => { seafileAPI.sysAdminDismissGroupByID(groupID).then(res => { let newGroupList = this.state.groupList.filter(item => { return item.group_id != groupID; }); this.setState({groupList: newGroupList}); toaster.success(gettext('Successfully deleted 1 item.')); }).catch((error) => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); } render() { return (
); } } export default OrgGroups;