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 (
-  |
+  |
{member.name} |
|
- {
- !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) {