import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; import { Link } from '@gatsbyjs/reach-router'; import { seafileAPI } from '../../../utils/seafile-api'; import { Utils } from '../../../utils/utils'; import toaster from '../../../components/toast'; import MainPanelTopbar from '../main-panel-topbar'; import ModalPortal from '../../../components/modal-portal'; import AddDepartmentDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-department-dialog'; import RenameDepartmentDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-rename-department-dialog'; import AddMemberDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-member-dialog'; import AddRepoDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-repo-dialog'; import { siteRoot, gettext, lang } from '../../../utils/constants'; import '../../../css/org-department-item.css'; moment.locale(lang); const DepartmentDetailPropTypes = { groupID: PropTypes.string, currentItem: PropTypes.string.isRequired, onAddNewDepartment: PropTypes.func, onAddNewMembers: PropTypes.func, onAddNewRepo: PropTypes.func, children: PropTypes.object }; class Department extends React.Component { constructor(props) { super(props); this.state = { groupName: '', ancestorGroups: [], isShowAddDepartmentDialog: false, isShowAddMemberDialog: false, isShowRenameDepartmentDialog: false, isShowAddRepoDialog: false }; this.navItems = [ {name: 'subDepartments', urlPart: '/', text: gettext('Sub-departments')}, {name: 'members', urlPart: '/members/', text: gettext('Members')}, {name: 'repos', urlPart: '/libraries/', text: gettext('Libraries')} ]; } componentDidMount() { const groupID = this.props.groupID; this.getDepartmentInfo(groupID); } componentWillReceiveProps(nextProps) { if (this.props.groupID !== nextProps.groupID) { this.getDepartmentInfo(nextProps.groupID); } } getDepartmentInfo = (groupID) => { seafileAPI.sysAdminGetDepartmentInfo(groupID, true).then(res => { this.setState({ ancestorGroups: res.data.ancestor_groups, groupName: res.data.name, }); }).catch(error => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); } onDepartmentNameChanged = (dept) => { this.setState({ groupName: dept.name }); } toggleRenameDepartmentDialog = () => { this.setState({ isShowRenameDepartmentDialog: !this.state.isShowRenameDepartmentDialog }); } toggleAddRepoDialog = () => { this.setState({ isShowAddRepoDialog: !this.state.isShowAddRepoDialog }); } toggleAddMemberDialog = () => { this.setState({ isShowAddMemberDialog: !this.state.isShowAddMemberDialog }); } toggleAddDepartmentDialog = () => { this.setState({ isShowAddDepartmentDialog: !this.state.isShowAddDepartmentDialog}); } render() { const { groupID, currentItem } = this.props; const { groupName } = this.state; const topBtn = 'btn btn-secondary operation-item'; const topbarChildren = ( {groupID && {gettext('Rename Department')} {currentItem == 'subDepartments' && {gettext('New Sub-department')}} {currentItem == 'members' && {gettext('Add Member')}} {currentItem == 'repos' && {gettext('New Library')}} } {this.state.isShowRenameDepartmentDialog && ( )} {this.state.isShowAddMemberDialog && ( )} {this.state.isShowAddRepoDialog && ( )} {this.state.isShowAddDepartmentDialog && ( )} ); return ( {topbarChildren} {groupID ? {gettext('Departments')} : {gettext('Departments')} } {this.state.ancestorGroups.map(ancestor => { let newHref = siteRoot + 'sys/departments/' + ancestor.id + '/'; return {' / '}{ancestor.name}; })} {groupID && {' / '}{groupName}} {this.navItems.map((item, index) => { return ( {item.text} ); })} {this.props.children} ); } } Department.propTypes = DepartmentDetailPropTypes; export default Department;