diff --git a/frontend/src/components/dialog/org-add-member-dialog.js b/frontend/src/components/dialog/org-add-member-dialog.js index 136d6faa6d..32cc386ff6 100644 --- a/frontend/src/components/dialog/org-add-member-dialog.js +++ b/frontend/src/components/dialog/org-add-member-dialog.js @@ -30,15 +30,13 @@ class AddMemberDialog extends React.Component { if (!this.state.selectedOption) return; const email = this.state.selectedOption.email; this.refs.orgSelect.clearSelect(); - this.setState({ errorMsg: [] }); + this.setState({ errMessage: [] }); seafileAPI.orgAdminAddDepartGroupUser(orgID, this.props.groupID, email).then((res) => { - if (res.data.failed) { - this.setState({ errorMsg: res.data.failed[0] }); + this.setState({ selectedOption: null }); + if (res.data.failed.length > 0) { + this.setState({ errMessage: res.data.failed[0].error_msg }); } - this.setState({ - selectedOption: null, - }); - if (res.data.success) { + if (res.data.success.length > 0) { this.props.onMemberChanged(); this.props.toggle(); } diff --git a/frontend/src/pages/org-admin/index.js b/frontend/src/pages/org-admin/index.js index 42d6bc4b00..a9bc4f1992 100644 --- a/frontend/src/pages/org-admin/index.js +++ b/frontend/src/pages/org-admin/index.js @@ -34,6 +34,9 @@ class Org extends React.Component { isShowAddOrgUserDialog: false, isShowAddOrgAdminDialog: false, isInviteUserDialogOpen: false, + isShowAddDepartDialog: false, + isShowAddMemberDialog: false, + isShowAddRepoDialog: false, currentTab: 'users', }; } @@ -70,8 +73,19 @@ class Org extends React.Component { this.setState({isInviteUserDialogOpen: !this.state.isInviteUserDialogOpen}); } - render() { + toggleAddDepartDialog = () => { + this.setState({ isShowAddDepartDialog: !this.state.isShowAddDepartDialog}); + } + toggleAddMemberDialog = () => { + this.setState({ isShowAddMemberDialog: !this.state.isShowAddMemberDialog }); + } + + toggleAddRepoDialog = () => { + this.setState({ isShowAddRepoDialog: !this.state.isShowAddRepoDialog }); + } + + render() { let { isSidePanelClosed, currentTab, isShowAddOrgUserDialog, isShowAddOrgAdminDialog, isInviteUserDialogOpen } = this.state; let href = window.location.href; let newPath = 'groups/'; @@ -81,7 +95,15 @@ class Org extends React.Component { return (
- + - - + +
@@ -45,6 +47,18 @@ class MainPanel extends Component { {gettext('Add admin')} } + {this.props.currentTab === 'departmentadmin' && + + {!groupID && } + {groupID && } + {groupID && } + {groupID && } + + }
diff --git a/frontend/src/pages/org-admin/org-department-item.js b/frontend/src/pages/org-admin/org-department-item.js index dde49685d5..b32003aae5 100644 --- a/frontend/src/pages/org-admin/org-department-item.js +++ b/frontend/src/pages/org-admin/org-department-item.js @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { seafileAPI } from '../../utils/seafile-api'; import { Utils } from '../../utils/utils.js'; -import { serviceURL, mediaUrl, gettext, orgID } from '../../utils/constants'; +import { serviceURL, gettext, orgID } from '../../utils/constants'; import OrgDepartmentsList from './org-departments-list'; import ModalPortal from '../../components/modal-portal'; import AddMemberDialog from '../../components/dialog/org-add-member-dialog'; @@ -23,14 +23,12 @@ class OrgDepartmentItem extends React.Component { ancestorGroups: [], deletedMember: {}, deletedRepo: {}, - showAddMemberDialog: false, showDeleteMemberDialog: false, - showAddRepoDialog: false, showDeleteRepoDialog: false, isItemFreezed: false, groupID: null, groupName: '', - } + }; } listOrgGroupRepo = (groupID) => { @@ -52,27 +50,17 @@ class OrgDepartmentItem extends React.Component { }); } - showAddMemberDialog = () => { - this.setState({ showAddMemberDialog: true }); - } - showDeleteMemberDialog = (member) => { this.setState({ showDeleteMemberDialog: true, deletedMember: member }); } - showAddRepoDialog = () => { - this.setState({ showAddRepoDialog: true }); - } - showDeleteRepoDialog = (repo) => { this.setState({ showDeleteRepoDialog: true, deletedRepo: repo }); } toggleCancel = () => { this.setState({ - showAddMemberDialog: false, showDeleteMemberDialog: false, - showAddRepoDialog: false, showDeleteRepoDialog: false, }); } @@ -109,25 +97,29 @@ class OrgDepartmentItem extends React.Component {
-

- { this.state.groupID ? - {gettext('Departments')} - : {gettext('Departments')} - } - { - this.state.ancestorGroups.map(ancestor => { +
+

+ {this.state.groupID ? + {gettext('Departments')} + : {gettext('Departments')} + } + {this.state.ancestorGroups.map(ancestor => { let newHref = serviceURL + '/org/departmentadmin/groups/' + ancestor.id + '/'; return ( {' / '}{ancestor.name} ); - }) - } - { this.state.groupID && {' / '}{this.state.groupName} } -

+ })} + {this.state.groupID && {' / '}{this.state.groupName}} +

+
- +
@@ -135,12 +127,9 @@ class OrgDepartmentItem extends React.Component {

{gettext('Members')}

-
- -
- {(members && members.length === 1 && members[0].role === "Owner") ? + {(members && members.length === 1 && members[0].role === 'Owner') ?

{gettext('No members')}

: @@ -157,7 +146,6 @@ class OrgDepartmentItem extends React.Component {

{gettext('Libraries')}

-
- -
{ repos.length > 0 ?
@@ -228,19 +213,19 @@ class OrgDepartmentItem extends React.Component { /> )} - {this.state.showAddMemberDialog && ( + {this.props.isShowAddMemberDialog && ( )} - {this.state.showAddRepoDialog && ( + {this.props.isShowAddRepoDialog && ( @@ -252,6 +237,17 @@ class OrgDepartmentItem extends React.Component { } } +const OrgDepartmentItemPropTypes = { + isShowAddDepartDialog: PropTypes.bool.isRequired, + isShowAddMemberDialog: PropTypes.bool.isRequired, + isShowAddRepoDialog: PropTypes.bool.isRequired, + toggleAddDepartDialog: PropTypes.func.isRequired, + toggleAddMemberDialog: PropTypes.func.isRequired, + toggleAddRepoDialog: PropTypes.func.isRequired, +}; + +OrgDepartmentItem.propTypes = OrgDepartmentItemPropTypes; + class MemberItem extends React.Component { @@ -295,7 +291,7 @@ class MemberItem extends React.Component { if (member.role === 'Owner') return null; return (
- + - { - !this.props.isItemFreezed ? - : - } + {!this.props.isItemFreezed ? + : + } ); } } const MemberItemPropTypes = { + member: PropTypes.object.isRequired, isItemFreezed: PropTypes.bool.isRequired, onMemberChanged: PropTypes.func.isRequired, showDeleteMemberDialog: PropTypes.func.isRequired, diff --git a/frontend/src/pages/org-admin/org-departments-list.js b/frontend/src/pages/org-admin/org-departments-list.js index d657d8c83d..c38b751778 100644 --- a/frontend/src/pages/org-admin/org-departments-list.js +++ b/frontend/src/pages/org-admin/org-departments-list.js @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; import { seafileAPI } from '../../utils/seafile-api'; -import { siteRoot, serviceURL, gettext, orgID, lang } from '../../utils/constants'; +import { serviceURL, gettext, orgID, lang } from '../../utils/constants'; import { Utils } from '../../utils/utils.js'; import ModalPortal from '../../components/modal-portal'; import AddDepartDialog from '../../components/dialog/org-add-department-dialog'; @@ -20,7 +20,6 @@ class OrgDepartmentsList extends React.Component { groups: null, groupID: -1, groupName: '', - showAddDepartDialog: false, showDeleteDepartDialog: false, showSetGroupQuotaDialog: false, }; @@ -29,23 +28,15 @@ class OrgDepartmentsList extends React.Component { listDepartGroups = () => { if (this.props.groupID) { seafileAPI.orgAdminListGroupInfo(orgID, this.props.groupID, true).then(res => { - this.setState({ - groups: res.data.groups - }); + this.setState({ groups: res.data.groups }); }); } else { seafileAPI.orgAdminListDepartGroups(orgID).then(res => { - this.setState({ - groups: res.data.data - }); + this.setState({ groups: res.data.data }); }); } } - showAddDepartDialog = () => { - this.setState({ showAddDepartDialog: true }); - } - showDeleteDepartDialog = (group) => { this.setState({ showDeleteDepartDialog: true, groupID: group.id, groupName: group.name }); } @@ -56,7 +47,6 @@ class OrgDepartmentsList extends React.Component { toggleCancel = () => { this.setState({ - showAddDepartDialog: false, showDeleteDepartDialog: false, showSetGroupQuotaDialog: false, }); @@ -74,16 +64,12 @@ class OrgDepartmentsList extends React.Component { const groups = this.state.groups; let isSub = this.props.groupID ? true : false; let header = isSub ? gettext('Sub-departments') : gettext('Departments'); - let headerButton = isSub ? gettext('New Sub-department') : gettext('New Department'); let noGroup = isSub ? gettext('No sub-departments') : gettext('No departments'); return (

{header}

-
- -
{groups && groups.length > 0 ? @@ -115,13 +101,13 @@ class OrgDepartmentsList extends React.Component { }
- {this.state.showAddDepartDialog && ( + {this.props.isShowAddDepartDialog && ( )} @@ -151,6 +137,14 @@ class OrgDepartmentsList extends React.Component { } } +const OrgDepartmentsListPropTypes = { + isShowAddDepartDialog: PropTypes.bool.isRequired, + toggleAddDepartDialog: PropTypes.func.isRequired, +}; + +OrgDepartmentsList.propTypes = OrgDepartmentsListPropTypes; + + class GroupItem extends React.Component { constructor(props) {
member-headermember-header {member.name} - - + +