1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-20 10:58:33 +00:00

Sys department (#5471)

* [system admin - department] redesigned it (split it into 3 tabs/pages)

* [system admin - department] fixup & improvements; code cleanup
This commit is contained in:
llj
2023-05-15 10:57:46 +08:00
committed by GitHub
parent 57a135b9d5
commit 495141c287
19 changed files with 773 additions and 598 deletions

View File

@@ -8,7 +8,7 @@ const propTypes = {
groupID: PropTypes.string,
parentGroupID: PropTypes.string,
toggle: PropTypes.func.isRequired,
onDepartChanged: PropTypes.func.isRequired,
onAddNewDepartment: PropTypes.func.isRequired
};
class AddDepartDialog extends React.Component {
@@ -30,7 +30,7 @@ class AddDepartDialog extends React.Component {
}
seafileAPI.sysAdminAddNewDepartment(parentGroup, this.state.departName.trim()).then((res) => {
this.props.toggle();
this.props.onDepartChanged();
this.props.onAddNewDepartment(res.data);
}).catch(error => {
let errorMsg = gettext(error.response.data.error_msg);
this.setState({ errMessage: errorMsg });
@@ -80,9 +80,10 @@ class AddDepartDialog extends React.Component {
/>
</FormGroup>
</Form>
{ this.state.errMessage && <p className="error">{this.state.errMessage}</p> }
{this.state.errMessage && <p className="error">{this.state.errMessage}</p>}
</ModalBody>
<ModalFooter>
<Button color="secondary" onClick={this.props.toggle}>{gettext('Cancel')}</Button>
<Button color="primary" onClick={this.handleSubmit}>{gettext('Submit')}</Button>
</ModalFooter>
</Modal>

View File

@@ -10,7 +10,7 @@ import UserSelect from '../../user-select.js';
const propTypes = {
toggle: PropTypes.func.isRequired,
groupID: PropTypes.string.isRequired,
onMemberChanged: PropTypes.func.isRequired
onAddNewMembers: PropTypes.func.isRequired
};
class AddMemberDialog extends React.Component {
@@ -38,7 +38,7 @@ class AddMemberDialog extends React.Component {
this.setState({ errMessage: res.data.failed[0].error_msg });
}
if (res.data.success.length > 0) {
this.props.onMemberChanged();
this.props.onAddNewMembers(res.data.success);
this.props.toggle();
}
}).catch(error => {
@@ -62,8 +62,8 @@ class AddMemberDialog extends React.Component {
{ this.state.errMessage && <p className="error">{this.state.errMessage}</p> }
</ModalBody>
<ModalFooter>
<Button color="primary" onClick={this.handleSubmit}>{gettext('Submit')}</Button>
<Button color="secondary" onClick={this.props.toggle}>{gettext('Cancel')}</Button>
<Button color="primary" onClick={this.handleSubmit}>{gettext('Submit')}</Button>
</ModalFooter>
</Modal>
);

View File

@@ -8,7 +8,7 @@ import { Utils } from '../../../utils/utils';
const propTypes = {
toggle: PropTypes.func.isRequired,
groupID: PropTypes.string.isRequired,
onRepoChanged: PropTypes.func.isRequired,
onAddNewRepo: PropTypes.func.isRequired
};
class AddRepoDialog extends React.Component {
@@ -26,7 +26,7 @@ class AddRepoDialog extends React.Component {
if (isValid) {
seafileAPI.sysAdminAddRepoInDepartment(this.props.groupID, this.state.repoName.trim()).then((res) => {
this.props.toggle();
this.props.onRepoChanged();
this.props.onAddNewRepo(res.data);
}).catch(error => {
let errorMsg = Utils.getErrorMsg(error);
this.setState({ errMessage: errorMsg });
@@ -78,6 +78,7 @@ class AddRepoDialog extends React.Component {
{this.state.errMessage && <p className="error">{this.state.errMessage}</p> }
</ModalBody>
<ModalFooter>
<Button color="secondary" onClick={this.props.toggle}>{gettext('Cancel')}</Button>
<Button color="primary" onClick={this.handleSubmit}>{gettext('Submit')}</Button>
</ModalFooter>
</Modal>

View File

@@ -7,13 +7,12 @@ import { Utils } from '../../../utils/utils';
import toaster from '../../../components/toast';
const propTypes = {
groupName: PropTypes.string,
groupID: PropTypes.number.isRequired,
group: PropTypes.object.isRequired,
toggle: PropTypes.func.isRequired,
onDepartChanged: PropTypes.func.isRequired
onDeleteDepartment: PropTypes.func.isRequired
};
class DeleteDepartDialog extends React.Component {
class DeleteDepartmentDialog extends React.Component {
constructor(props) {
super(props);
@@ -21,8 +20,9 @@ class DeleteDepartDialog extends React.Component {
deleteDepart = () => {
this.props.toggle();
seafileAPI.sysAdminDeleteDepartment(this.props.groupID).then((res) => {
this.props.onDepartChanged();
const { group } = this.props;
seafileAPI.sysAdminDeleteDepartment(group.id).then((res) => {
this.props.onDeleteDepartment(group.id);
}).catch(error => {
let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage);
@@ -30,8 +30,10 @@ class DeleteDepartDialog extends React.Component {
}
render() {
const { group } = this.props;
let tipMessage = gettext('Are you sure you want to delete {placeholder} ?');
tipMessage = tipMessage.replace('{placeholder}', '<span class="op-target">' + Utils.HTMLescape(this.props.groupName) + '</span>');
tipMessage = tipMessage.replace('{placeholder}', '<span class="op-target">' + Utils.HTMLescape(group.name) + '</span>');
return (
<Modal isOpen={true} toggle={this.props.toggle}>
<ModalHeader toggle={this.props.toggle}>{gettext('Delete Department')}</ModalHeader>
@@ -47,6 +49,6 @@ class DeleteDepartDialog extends React.Component {
}
}
DeleteDepartDialog.propTypes = propTypes;
DeleteDepartmentDialog.propTypes = propTypes;
export default DeleteDepartDialog;
export default DeleteDepartmentDialog;

View File

@@ -42,8 +42,8 @@ class DeleteMemberDialog extends React.Component {
<div dangerouslySetInnerHTML={{__html: tipMessage}}></div>
</ModalBody>
<ModalFooter>
<Button color="primary" onClick={this.deleteMember}>{gettext('Delete')}</Button>
<Button color="secondary" onClick={this.props.toggle}>{gettext('Cancel')}</Button>
<Button color="primary" onClick={this.deleteMember}>{gettext('Delete')}</Button>
</ModalFooter>
</Modal>
);

View File

@@ -25,8 +25,9 @@ class DeleteRepoDialog extends React.Component {
}
render() {
const { repo } = this.props;
let tipMessage = gettext('Are you sure you want to delete {placeholder} ?');
tipMessage = tipMessage.replace('{placeholder}', '<span class="op-target">' + Utils.HTMLescape(this.props.repo.name) + '</span>');
tipMessage = tipMessage.replace('{placeholder}', '<span class="op-target">' + Utils.HTMLescape(repo.name || repo.repo_name) + '</span>');
return (
<Modal isOpen={true} toggle={this.props.toggle}>
<ModalHeader toggle={this.props.toggle}>{gettext('Delete Library')}</ModalHeader>
@@ -34,8 +35,8 @@ class DeleteRepoDialog extends React.Component {
<div dangerouslySetInnerHTML={{__html: tipMessage}}></div>
</ModalBody>
<ModalFooter>
<Button color="primary" onClick={this.deleteRepo}>{gettext('Delete')}</Button>
<Button color="secondary" onClick={this.props.toggle}>{gettext('Cancel')}</Button>
<Button color="primary" onClick={this.deleteRepo}>{gettext('Delete')}</Button>
</ModalFooter>
</Modal>
);

View File

@@ -92,6 +92,7 @@ class RenameDepartmentDialog extends React.Component {
{this.state.errMessage && <p className="error">{this.state.errMessage}</p>}
</ModalBody>
<ModalFooter>
<Button color="secondary" onClick={this.props.toggle}>{gettext('Cancel')}</Button>
<Button color="primary" onClick={this.handleSubmit}>{gettext('Submit')}</Button>
</ModalFooter>
</Modal>

View File

@@ -9,7 +9,7 @@ import toaster from '../../toast';
const propTypes = {
toggle: PropTypes.func.isRequired,
groupID: PropTypes.number.isRequired,
onDepartChanged: PropTypes.func.isRequired,
onSetQuota: PropTypes.func.isRequired,
};
class SetGroupQuotaDialog extends React.Component {
@@ -30,7 +30,7 @@ class SetGroupQuotaDialog extends React.Component {
let newQuota = this.state.quota == -2 ? this.state.quota : this.state.quota * 1000000;
seafileAPI.sysAdminUpdateDepartmentQuota(this.props.groupID, newQuota).then((res) => {
this.props.toggle();
this.props.onDepartChanged();
this.props.onSetQuota(res.data);
}).catch(error => {
let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage);
@@ -71,9 +71,10 @@ class SetGroupQuotaDialog extends React.Component {
<br/><span>{gettext('An integer that is greater than 0 or equal to -2.')}</span><br/>
<span>{gettext('Tip: -2 means no limit.')}</span>
</p>
{ this.state.errMessage && <p className="error">{this.state.errMessage}</p> }
{this.state.errMessage && <p className="error">{this.state.errMessage}</p>}
</ModalBody>
<ModalFooter>
<Button color="secondary" onClick={this.props.toggle}>{gettext('Cancel')}</Button>
<Button color="primary" onClick={this.setGroupQuota}>{gettext('Submit')}</Button>
</ModalFooter>
</Modal>