import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; import { Link } from '@reach/router'; import { Utils } from '../../utils/utils.js'; import { seafileAPI } from '../../utils/seafile-api'; import MainPanelTopbar from './main-panel-topbar'; import ModalPortal from '../../components/modal-portal'; import AddDepartDialog from '../../components/dialog/org-add-department-dialog'; import DeleteDepartDialog from '../../components/dialog/org-delete-department-dialog'; import SetGroupQuotaDialog from '../../components/dialog/org-set-group-quota-dialog'; import RenameDepartmentDialog from '../../components/dialog/org-rename-department-dialog'; import OpMenu from '../../components/dialog/op-menu'; import { siteRoot, gettext, orgID, lang } from '../../utils/constants'; import '../../css/org-department-item.css'; moment.locale(lang); class OrgDepartmentsList extends React.Component { constructor(props) { super(props); this.state = { groups: null, groupID: '', groupName: '', showDeleteDepartDialog: false, showSetGroupQuotaDialog: false, isShowAddDepartDialog: false, isItemFreezed: false, }; } componentDidMount() { this.listDepartGroups(); } listDepartGroups = () => { seafileAPI.orgAdminListDepartGroups(orgID).then(res => { this.setState({ groups: res.data.data }); }); } onFreezedItem = () => { this.setState({isItemFreezed: true}); } onUnfreezedItem = () => { this.setState({isItemFreezed: false}); } onDepartmentNameChanged = (dept) => { this.setState({ groups: this.state.groups.map(item => { if (item.id == dept.id) { item.name = dept.name; } return item; }) }); } showDeleteDepartDialog = (group) => { this.setState({ showDeleteDepartDialog: true, groupID: group.id, groupName: group.name }); } showSetGroupQuotaDialog = (groupID) => { this.setState({ showSetGroupQuotaDialog: true, groupID: groupID }); } toggleAddDepartDialog = () => { this.setState({ isShowAddDepartDialog: !this.state.isShowAddDepartDialog}); } toggleCancel = () => { this.setState({ showDeleteDepartDialog: false, showSetGroupQuotaDialog: false, }); } onDepartChanged = () => { this.listDepartGroups(); } render() { const groups = this.state.groups; const topbarChildren = ( {gettext('New Department')} {this.state.isShowAddDepartDialog && ( )} ); return ( {gettext('Departments')} {groups && groups.length > 0 ? {gettext('Name')} {gettext('Created At')} {gettext('Quota')} {groups.map((group, index) => { return( ); })} : {gettext('No departments')} } {this.state.showDeleteDepartDialog && ( )} {this.state.showSetGroupQuotaDialog && ( )} ); } } class GroupItem extends React.Component { constructor(props) { super(props); this.state = { highlight: false, isOpIconShown: false, isRenameDialogOpen: false, }; } onMouseEnter = () => { if (!this.props.isItemFreezed) { this.setState({ isOpIconShown: true, highlight: true }); } } onMouseLeave = () => { if (!this.props.isItemFreezed) { this.setState({ isOpIconShown: false, highlight: false }); } } translateOperations = (item) => { let translateResult = ''; switch(item) { case 'Rename': translateResult = gettext('Rename'); break; case 'Delete': translateResult = gettext('Delete'); break; default: break; } return translateResult; } onMenuItemClick = (operation) => { const { group } = this.props; switch(operation) { case 'Rename': this.toggleRenameDialog(); break; case 'Delete': this.props.showDeleteDepartDialog(group); break; default: break; } } onUnfreezedItem = () => { this.setState({ highlight: false, isOpIconShow: false }); this.props.onUnfreezedItem(); } toggleRenameDialog = () => { this.setState({ isRenameDialogOpen: !this.state.isRenameDialogOpen }); } render() { const group = this.props.group; const { highlight, isOpIconShown, isRenameDialogOpen } = this.state; const newHref = siteRoot+ 'org/departmentadmin/groups/' + group.id + '/'; return ( {group.name} {moment(group.created_at).fromNow()} {Utils.bytesToSize(group.quota)}{' '} {isOpIconShown && } {isRenameDialogOpen && ( )} ); } } const GroupItemPropTypes = { group: PropTypes.object.isRequired, isItemFreezed: PropTypes.bool.isRequired, onFreezedItem: PropTypes.func.isRequired, onUnfreezedItem: PropTypes.func.isRequired, onDepartmentNameChanged: PropTypes.func.isRequired, showSetGroupQuotaDialog: PropTypes.func.isRequired, showDeleteDepartDialog: PropTypes.func.isRequired, }; GroupItem.propTypes = GroupItemPropTypes; export default OrgDepartmentsList;
{gettext('No departments')}