mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-20 19:08:21 +00:00
Merge branch '7.0'
This commit is contained in:
@@ -49,11 +49,8 @@ class AddRelatedFileDialog extends React.Component {
|
||||
this.props.onRelatedFileChange();
|
||||
this.toggle();
|
||||
}).catch((error) => {
|
||||
if (error.response) {
|
||||
this.setState({
|
||||
errMessage: error.response.data.error_msg
|
||||
});
|
||||
}
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
this.setState({errMessage: errMessage});
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -3,6 +3,8 @@ import PropTypes from 'prop-types';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
|
||||
import { seafileAPI } from '../../utils/seafile-api.js';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
import UserSelect from '../user-select.js';
|
||||
import '../../css/add-reviewer-dialog.css';
|
||||
|
||||
@@ -63,6 +65,9 @@ class AddReviewerDialog extends React.Component {
|
||||
if (res.data.success.length > 0) {
|
||||
this.listReviewers();
|
||||
}
|
||||
}).catch(error => {
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
toaster.danger(errorMsg);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -79,6 +84,9 @@ class AddReviewerDialog extends React.Component {
|
||||
}
|
||||
this.setState({ reviewers: newReviewers });
|
||||
}
|
||||
}).catch(error => {
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
toaster.danger(errorMsg);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -83,16 +83,7 @@ class ChangeRepoPasswordDialog extends React.Component {
|
||||
this.props.toggleDialog();
|
||||
toaster.success(gettext('Successfully changed library password.'));
|
||||
}).catch((error) => {
|
||||
let errorMsg = '';
|
||||
if (error.response) {
|
||||
if (error.response.data) {
|
||||
errorMsg = error.response.data.error_msg;
|
||||
} else {
|
||||
errorMsg = gettext('Error');
|
||||
}
|
||||
} else {
|
||||
errorMsg = gettext('Please check the network.');
|
||||
}
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
this.setState({
|
||||
errorMsg: errorMsg,
|
||||
submitBtnDisabled: false
|
||||
|
@@ -4,6 +4,7 @@ import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
|
||||
import Select from 'react-select/lib/Creatable';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
const propTypes = {
|
||||
@@ -46,12 +47,7 @@ class CleanTrash extends React.Component {
|
||||
this.props.refreshTrash();
|
||||
this.props.toggleDialog();
|
||||
}).catch((error) => {
|
||||
let errorMsg = '';
|
||||
if (error.response) {
|
||||
errorMsg = error.response.data.error_msg || gettext('Error');
|
||||
} else {
|
||||
errorMsg = gettext('Please check the network.');
|
||||
}
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
this.setState({
|
||||
formErrorMsg: errorMsg,
|
||||
submitBtnDisabled: false
|
||||
|
@@ -4,6 +4,7 @@ import { Modal, ModalHeader, ModalBody } from 'reactstrap';
|
||||
import moment from 'moment';
|
||||
import { gettext, fileServerRoot } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import Loading from '../loading';
|
||||
|
||||
const propTypes = {
|
||||
@@ -31,12 +32,7 @@ class CommitDetails extends React.Component {
|
||||
commitDetails: res.data
|
||||
});
|
||||
}).catch((error) => {
|
||||
let errorMsg = '';
|
||||
if (error.response) {
|
||||
errorMsg = error.response.data.error || gettext('Error');
|
||||
} else {
|
||||
errorMsg = gettext('Please check the network.');
|
||||
}
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
this.setState({
|
||||
isLoading: false,
|
||||
errorMsg: errorMsg
|
||||
|
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Modal, ModalHeader, ModalBody, ModalFooter, Input, Button } from 'reactstrap';
|
||||
import { Utils } from '../../utils/utils';
|
||||
|
||||
class CreateGroupDialog extends React.Component {
|
||||
|
||||
@@ -46,10 +47,8 @@ class CreateGroupDialog extends React.Component {
|
||||
seafileAPI.createGroup(name).then((res)=> {
|
||||
that.props.onCreateGroup();
|
||||
}).catch((error) => {
|
||||
let errorMsg = gettext(error.response.data.error_msg);
|
||||
this.setState({
|
||||
errorMsg: errorMsg
|
||||
});
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
this.setState({errorMsg: errorMsg});
|
||||
});
|
||||
} else {
|
||||
this.setState({
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
class DismissGroupDialog extends React.Component {
|
||||
|
||||
@@ -14,6 +16,9 @@ class DismissGroupDialog extends React.Component {
|
||||
let that = this;
|
||||
seafileAPI.deleteGroup(this.props.groupID).then((res)=> {
|
||||
that.props.onGroupChanged();
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -6,6 +6,7 @@ import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import RepoTag from '../../models/repo-tag';
|
||||
import CreateTagDialog from './create-tag-dialog';
|
||||
import toaster from '../toast';
|
||||
require('../../css/repo-tag.css');
|
||||
|
||||
const TagItemPropTypes = {
|
||||
@@ -54,6 +55,9 @@ class TagItem extends React.Component {
|
||||
seafileAPI.addFileTag(repoID, filePath, id).then(() => {
|
||||
repoTagIdList = this.getRepoTagIdList();
|
||||
this.props.onFileTagChanged();
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
} else {
|
||||
let fileTag = null;
|
||||
@@ -67,6 +71,9 @@ class TagItem extends React.Component {
|
||||
seafileAPI.deleteFileTag(repoID, fileTag.id).then(() => {
|
||||
repoTagIdList = this.getRepoTagIdList();
|
||||
this.props.onFileTagChanged();
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -121,9 +128,10 @@ class TagList extends React.Component {
|
||||
let repoTag = new RepoTag(item);
|
||||
repotagList.push(repoTag);
|
||||
});
|
||||
this.setState({
|
||||
repotagList: repotagList,
|
||||
});
|
||||
this.setState({repotagList: repotagList});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -186,6 +194,9 @@ class EditFileTagDialog extends React.Component {
|
||||
let {repoID, filePath} = this.props;
|
||||
seafileAPI.addFileTag(repoID, filePath, repoTagID).then(() => {
|
||||
this.props.onFileTagChanged();
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -4,6 +4,7 @@ import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
|
||||
import CreatableSelect from 'react-select/lib/Creatable';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
const propTypes = {
|
||||
@@ -45,12 +46,7 @@ class UpdateRepoCommitLabels extends React.Component {
|
||||
this.props.toggleDialog();
|
||||
toaster.success(gettext('Successfully edited labels.'));
|
||||
}).catch((error) => {
|
||||
let errorMsg = '';
|
||||
if (error.response) {
|
||||
errorMsg = error.response.data.error_msg || gettext('Error');
|
||||
} else {
|
||||
errorMsg = gettext('Please check the network.');
|
||||
}
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
this.setState({
|
||||
formErrorMsg: errorMsg,
|
||||
submitBtnDisabled: false
|
||||
|
@@ -59,12 +59,18 @@ class GenerateShareLink extends React.Component {
|
||||
} else {
|
||||
this.setState({isLoading: false});
|
||||
}
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
if (this.isOfficeFile) {
|
||||
seafileAPI.getFileInfo(repoID, path).then((res) => {
|
||||
if (res.data) {
|
||||
this.setState({fileInfo: res.data});
|
||||
}
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -134,7 +140,8 @@ class GenerateShareLink extends React.Component {
|
||||
let sharedLinkInfo = new SharedLinkInfo(res.data);
|
||||
this.setState({sharedLinkInfo: sharedLinkInfo});
|
||||
}).catch((error) => {
|
||||
toaster.danger(error.response.data.error_msg);
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -170,6 +177,9 @@ class GenerateShareLink extends React.Component {
|
||||
'can_edit': false,
|
||||
'can_download': true
|
||||
};
|
||||
}).catch((error) => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -100,6 +100,9 @@ class GenerateUploadLink extends React.Component {
|
||||
seafileAPI.createUploadLink(repoID, path, password, expireDays).then((res) => {
|
||||
let sharedUploadInfo = new SharedUploadInfo(res.data);
|
||||
this.setState({sharedUploadInfo: sharedUploadInfo});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -164,6 +167,9 @@ class GenerateUploadLink extends React.Component {
|
||||
passwordnew: '',
|
||||
sharedUploadInfo: null,
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -2,9 +2,10 @@ import React from 'react';
|
||||
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
|
||||
import PropTypes from 'prop-types';
|
||||
import toaster from '../toast';
|
||||
import copy from '@seafile/seafile-editor/dist//utils/copy-to-clipboard';
|
||||
import copy from '@seafile/seafile-editor/dist/utils/copy-to-clipboard';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import '../../css/internal-link.css';
|
||||
|
||||
const propTypes = {
|
||||
@@ -38,6 +39,9 @@ class InternalLinkDialog extends React.Component {
|
||||
this.setState({
|
||||
isOpen: true,
|
||||
smartLink: res.data.smart_link
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
|
||||
import CreatableSelect from 'react-select/lib/Creatable';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import Loading from '../loading';
|
||||
import toaster from '../toast';
|
||||
|
||||
@@ -32,12 +33,7 @@ class LabelRepoStateDialog extends React.Component {
|
||||
errorMsg: ''
|
||||
});
|
||||
}).catch((error) => {
|
||||
let errorMsg = '';
|
||||
if (error.response) {
|
||||
errorMsg = error.response.data.error_msg || gettext('Error');
|
||||
} else {
|
||||
errorMsg = gettext('Please check the network.');
|
||||
}
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
this.setState({
|
||||
isLoading: false,
|
||||
errorMsg: errorMsg
|
||||
@@ -72,12 +68,7 @@ class LabelRepoStateDialog extends React.Component {
|
||||
toaster.success(msg);
|
||||
this.props.toggleDialog();
|
||||
}).catch((error) => {
|
||||
let errorMsg = '';
|
||||
if (error.response) {
|
||||
errorMsg = error.response.data.error_msg || gettext('Error');
|
||||
} else {
|
||||
errorMsg = gettext('Please check the network.');
|
||||
}
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
this.setState({
|
||||
formErrorMsg: errorMsg,
|
||||
submitBtnDisabled: false
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';
|
||||
import { gettext, username } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
class LeaveGroupDialog extends React.Component {
|
||||
|
||||
@@ -13,6 +15,9 @@ class LeaveGroupDialog extends React.Component {
|
||||
leaveGroup = () => {
|
||||
seafileAPI.quitGroup(this.props.groupID, username).then((res)=> {
|
||||
this.props.onGroupChanged();
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -1,9 +1,10 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { gettext, enableRepoHistorySetting } from '../../utils/constants';
|
||||
import toaster from '../toast';
|
||||
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Form, FormGroup, Label, Input, Alert } from 'reactstrap';
|
||||
import { gettext, enableRepoHistorySetting } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api.js';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
const propTypes = {
|
||||
itemName: PropTypes.string.isRequired,
|
||||
@@ -36,6 +37,9 @@ class LibHistorySetting extends React.Component {
|
||||
disabled: res.data.keep_days > 0 ? false : true,
|
||||
expireDays: res.data.keep_days > 0 ? res.data.keep_days : 30,
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -53,6 +57,9 @@ class LibHistorySetting extends React.Component {
|
||||
toaster.success(message);
|
||||
this.setState({keepDays: res.data.keep_days});
|
||||
this.props.toggleDialog();
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
} else {
|
||||
this.setState({
|
||||
|
@@ -3,8 +3,9 @@ import PropTypes from 'prop-types';
|
||||
import { Button, ModalHeader, ModalBody, ModalFooter, Table } from 'reactstrap';
|
||||
import Dirent from '../../models/dirent';
|
||||
import { gettext, siteRoot } from '../../utils/constants';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
import '../../css/list-related-file-dialog.css';
|
||||
|
||||
const propTypes = {
|
||||
@@ -31,6 +32,9 @@ class ListRelatedFileDialog extends React.Component {
|
||||
let relatedID = item.related_id;
|
||||
seafileAPI.deleteRelatedFile(repoID, filePath, relatedID).then((res) => {
|
||||
this.props.onRelatedFileChange();
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -53,11 +57,9 @@ class ListRelatedFileDialog extends React.Component {
|
||||
dirent['related_id'] = item.related_id;
|
||||
dirent['link'] = siteRoot + 'lib/' + item.repo_id + '/file' + Utils.encodePath(item.path);
|
||||
direntList.push(dirent);
|
||||
this.setState({
|
||||
direntList: direntList
|
||||
});
|
||||
});
|
||||
});
|
||||
this.setState({direntList: direntList});
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
|
@@ -4,6 +4,7 @@ import { Button, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
import RepoTag from '../../models/repo-tag';
|
||||
|
||||
import '../../css/repo-tag.css';
|
||||
@@ -92,6 +93,9 @@ class ListTagDialog extends React.Component {
|
||||
this.setState({
|
||||
repotagList: repotagList,
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -1,10 +1,11 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
|
||||
import moment from 'moment';
|
||||
import { gettext, siteRoot } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import moment from 'moment';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
const propTypes = {
|
||||
repoID: PropTypes.string.isRequired,
|
||||
@@ -38,6 +39,9 @@ class ListTaggedFilesDialog extends React.Component {
|
||||
this.getTaggedFiles();
|
||||
this.props.updateUsedRepoTags();
|
||||
if (this.props.onFileTagChanged) this.onFileTagChanged(taggedFile);
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -57,6 +61,9 @@ class ListTaggedFilesDialog extends React.Component {
|
||||
this.setState({
|
||||
taggedFileList: taggedFileList,
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -5,6 +5,8 @@ import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Table } from 'react
|
||||
import { seafileAPI } from '../../utils/seafile-api.js';
|
||||
import RoleEditor from '../select-editor/role-editor';
|
||||
import UserSelect from '../user-select.js';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
import '../../css/manage-members-dialog.css';
|
||||
|
||||
const propTypes = {
|
||||
@@ -49,6 +51,9 @@ class ManageMembersDialog extends React.Component {
|
||||
errMessage: res.data.failed
|
||||
});
|
||||
}
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -57,6 +62,9 @@ class ManageMembersDialog extends React.Component {
|
||||
this.setState({
|
||||
groupMembers: res.data
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -177,6 +185,9 @@ class Member extends React.PureComponent {
|
||||
deleteMember = (name) => {
|
||||
seafileAPI.deleteGroupMember(this.props.groupID, name).then((res) => {
|
||||
this.props.onGroupMembersChange();
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -2,6 +2,8 @@ import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Alert } from 'reactstrap';
|
||||
import { gettext, orgID } from '../../utils/constants';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
import UserSelect from '../user-select';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import OrgUserInfo from '../../models/org-user';
|
||||
@@ -35,12 +37,9 @@ class AddOrgAdminDialog extends React.Component {
|
||||
seafileAPI.setOrgAdmin(orgID, userEmail, true).then(res => {
|
||||
let userInfo = new OrgUserInfo(res.data);
|
||||
this.props.onAddedOrgAdmin(userInfo);
|
||||
}).catch((error) => {
|
||||
if (error.response) {
|
||||
this.setState({
|
||||
errMessage: error.response.data.error_msg
|
||||
});
|
||||
}
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -3,6 +3,8 @@ import PropTypes from 'prop-types';
|
||||
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
|
||||
import { gettext, orgID } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
import UserSelect from '../user-select.js';
|
||||
|
||||
const propTypes = {
|
||||
@@ -41,6 +43,9 @@ class AddMemberDialog extends React.Component {
|
||||
this.props.onMemberChanged();
|
||||
this.props.toggle();
|
||||
}
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
||||
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Form, FormGroup, Label } from 'reactstrap';
|
||||
import { gettext, orgID } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
|
||||
const propTypes = {
|
||||
toggle: PropTypes.func.isRequired,
|
||||
@@ -33,7 +34,7 @@ class AddRepoDialog extends React.Component {
|
||||
this.props.toggle();
|
||||
this.props.onRepoChanged();
|
||||
}).catch(error => {
|
||||
let errorMsg = gettext(error.response.data.error_msg);
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
this.setState({ errMessage: errorMsg });
|
||||
});
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
|
||||
import { gettext, orgID } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
const propTypes = {
|
||||
member: PropTypes.object.isRequired,
|
||||
@@ -25,6 +26,9 @@ class DeleteMemberDialog extends React.Component {
|
||||
this.props.onMemberChanged();
|
||||
this.props.toggle();
|
||||
}
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -4,6 +4,7 @@ import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
|
||||
import { gettext, orgID } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
class DeleteRepoDialog extends React.Component {
|
||||
|
||||
@@ -17,6 +18,9 @@ class DeleteRepoDialog extends React.Component {
|
||||
this.props.onRepoChanged();
|
||||
this.props.toggle();
|
||||
}
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -3,6 +3,8 @@ import PropTypes from 'prop-types';
|
||||
import { Modal, ModalHeader, ModalBody } from 'reactstrap';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
const propTypes = {
|
||||
repoID: PropTypes.string.isRequired,
|
||||
@@ -36,7 +38,10 @@ class FileUpdateDetailDialog extends React.Component {
|
||||
newfile: this.state.newfile.concat(res.data.new),
|
||||
removed: this.state.removed.concat(res.data.removed),
|
||||
});
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
})
|
||||
}
|
||||
|
||||
renderContentItem = (items) => {
|
||||
|
@@ -3,6 +3,8 @@ import PropTypes from 'prop-types';
|
||||
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, InputGroupAddon, InputGroup } from 'reactstrap';
|
||||
import { gettext, orgID } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
const propTypes = {
|
||||
toggle: PropTypes.func.isRequired,
|
||||
@@ -35,6 +37,9 @@ class SetGroupQuotaDialog extends React.Component {
|
||||
seafileAPI.orgAdminSetGroupQuota(orgID, this.props.groupID, newQuota).then((res) => {
|
||||
this.props.toggle();
|
||||
this.props.onDepartChanged();
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
} else {
|
||||
const err = gettext('Quota is invalid.');
|
||||
|
@@ -5,6 +5,8 @@ import MarkdownViewer from '@seafile/seafile-editor/dist/viewer/markdown-viewer'
|
||||
import Loading from '../../components/loading';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
const propTypes = {
|
||||
repoID: PropTypes.string.isRequired,
|
||||
@@ -32,6 +34,9 @@ class ReadmeDialog extends React.Component {
|
||||
isLoading: false,
|
||||
});
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -3,6 +3,8 @@ import PropTypes from 'prop-types';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Modal, ModalHeader, ModalBody, ModalFooter, Input, Button } from 'reactstrap';
|
||||
import Utils from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
class RenameGroupDialog extends React.Component {
|
||||
|
||||
@@ -34,6 +36,9 @@ class RenameGroupDialog extends React.Component {
|
||||
seafileAPI.renameGroup(this.props.groupID, name).then((res)=> {
|
||||
that.props.loadGroup(this.props.groupID);
|
||||
that.props.onGroupChanged(res.data.id);
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
this.setState({
|
||||
|
@@ -4,6 +4,7 @@ import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Alert } from 'react
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import FileChooser from '../file-chooser/file-chooser';
|
||||
import { Utils } from '../../utils/utils';
|
||||
|
||||
const propTypes = {
|
||||
sharedToken: PropTypes.string.isRequired,
|
||||
@@ -27,11 +28,8 @@ class SaveSharedFileDialog extends React.Component {
|
||||
this.props.toggleCancel();
|
||||
this.props.handleSaveSharedFile();
|
||||
}).catch((error) => {
|
||||
if (error.response) {
|
||||
this.setState({
|
||||
errMessage: error.response.data.error_msg
|
||||
});
|
||||
}
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
this.setState({errMessage: errMessage});
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -8,6 +8,8 @@ import GenerateShareLink from './generate-share-link';
|
||||
import GenerateUploadLink from './generate-upload-link';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import Loading from '../loading';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
import '../../css/share-link-dialog.css';
|
||||
|
||||
const propTypes = {
|
||||
@@ -40,6 +42,9 @@ class ShareDialog extends React.Component {
|
||||
isRepoJudgemented: true,
|
||||
isRepoOwner: isRepoOwner,
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -5,6 +5,8 @@ import Select from 'react-select';
|
||||
import makeAnimated from 'react-select/lib/animated';
|
||||
import { gettext, isPro } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api.js';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
import SharePermissionEditor from '../select-editor/share-permission-editor';
|
||||
|
||||
class GroupItem extends React.Component {
|
||||
@@ -140,6 +142,9 @@ class ShareToGroup extends React.Component {
|
||||
obj.label = res.data[i].name;
|
||||
this.options.push(obj);
|
||||
}
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -152,6 +157,9 @@ class ShareToGroup extends React.Component {
|
||||
sharedItems: res.data
|
||||
});
|
||||
}
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -194,6 +202,9 @@ class ShareToGroup extends React.Component {
|
||||
selectedOption: null,
|
||||
permission: 'rw',
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
} else {
|
||||
seafileAPI.shareFolder(repoID, path, 'group', this.state.permission, groups).then(res => {
|
||||
@@ -210,6 +221,9 @@ class ShareToGroup extends React.Component {
|
||||
selectedOption: null,
|
||||
permission: 'rw'
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -222,12 +236,18 @@ class ShareToGroup extends React.Component {
|
||||
this.setState({
|
||||
sharedItems: this.state.sharedItems.filter(item => { return item.group_info.id !== groupID; })
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
} else {
|
||||
seafileAPI.deleteShareToGroupItem(repoID, path, 'group', groupID).then(() => {
|
||||
this.setState({
|
||||
sharedItems: this.state.sharedItems.filter(item => { return item.group_info.id !== groupID; })
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -239,10 +259,16 @@ class ShareToGroup extends React.Component {
|
||||
if (this.props.isGroupOwnedRepo) {
|
||||
seafileAPI.modifyGroupOwnedRepoGroupSharedPermission(repoID, permission, groupID).then(() => {
|
||||
this.updateSharedItems(item, permission);
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
} else {
|
||||
seafileAPI.updateShareToGroupItemPermission(repoID, path, 'group', groupID, permission).then(() => {
|
||||
this.updateSharedItems(item, permission);
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -3,6 +3,8 @@ import PropTypes from 'prop-types';
|
||||
import {gettext, isPro, canInvitePeople, siteRoot} from '../../utils/constants';
|
||||
import { Button } from 'reactstrap';
|
||||
import { seafileAPI } from '../../utils/seafile-api.js';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
import UserSelect from '../user-select';
|
||||
import SharePermissionEditor from '../select-editor/share-permission-editor';
|
||||
import '../../css/invitations.css';
|
||||
@@ -127,6 +129,9 @@ class ShareToUser extends React.Component {
|
||||
if(res.data.length !== 0) {
|
||||
this.setState({sharedItems: res.data});
|
||||
}
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -215,12 +220,18 @@ class ShareToUser extends React.Component {
|
||||
this.setState({
|
||||
sharedItems: this.state.sharedItems.filter( item => { return item.user_info.name !== username; })
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
} else {
|
||||
seafileAPI.deleteShareToUserItem(repoID, path, 'user', username).then(res => {
|
||||
this.setState({
|
||||
sharedItems: this.state.sharedItems.filter( item => { return item.user_info.name !== username; })
|
||||
});
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -232,10 +243,16 @@ class ShareToUser extends React.Component {
|
||||
if (this.props.isGroupOwnedRepo) {
|
||||
seafileAPI.modifyGroupOwnedRepoUserSharedPermission(repoID, permission, username).then(() => {
|
||||
this.updateSharedItems(item, permission);
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
} else {
|
||||
seafileAPI.updateShareToUserItemPermission(repoID, path, 'user', username, permission).then(() => {
|
||||
this.updateSharedItems(item, permission);
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
65
frontend/src/components/dialog/sort-options.js
Normal file
65
frontend/src/components/dialog/sort-options.js
Normal file
@@ -0,0 +1,65 @@
|
||||
import React, { Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Modal, ModalBody } from 'reactstrap';
|
||||
import { gettext } from '../../utils/constants';
|
||||
|
||||
const propTypes = {
|
||||
toggleDialog: PropTypes.func.isRequired,
|
||||
sortBy: PropTypes.string.isRequired,
|
||||
sortOrder: PropTypes.string.isRequired,
|
||||
sortList: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
class SortOptions extends React.Component {
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.sortOptions = [
|
||||
{id: 'sort-option-1', value: 'name-asc', text: gettext('By name ascending')},
|
||||
{id: 'sort-option-2', value: 'name-desc', text: gettext('By name descending')},
|
||||
{id: 'sort-option-3', value: 'size-asc', text: gettext('By size ascending')},
|
||||
{id: 'sort-option-4', value: 'size-desc', text: gettext('By size descending')},
|
||||
{id: 'sort-option-5', value: 'time-asc', text: gettext('By time ascending')},
|
||||
{id: 'sort-option-6', value: 'time-desc', text: gettext('By time descending')}
|
||||
];
|
||||
const { sortBy, sortOrder } = this.props;
|
||||
this.state = {
|
||||
currentOption: `${sortBy}-${sortOrder}`
|
||||
};
|
||||
}
|
||||
|
||||
switchOption = (e) => {
|
||||
if (!e.target.checked) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
currentOption: e.target.value
|
||||
});
|
||||
|
||||
const [sortBy, sortOrder] = e.target.value.split('-');
|
||||
this.props.sortList(sortBy, sortOrder);
|
||||
this.props.toggleDialog();
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<Modal isOpen={true} toggle={this.props.toggleDialog}>
|
||||
<ModalBody>
|
||||
{this.sortOptions.map((item, index) => {
|
||||
return (
|
||||
<Fragment key={index}>
|
||||
<input id={item.id} className="align-middle" type="radio" name="sort-options" value={item.value} checked={this.state.currentOption == item.value} onChange={this.switchOption} />
|
||||
<label htmlFor={item.id} className="align-middle m-2">{item.text}</label><br />
|
||||
</Fragment>
|
||||
);
|
||||
})}
|
||||
</ModalBody>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
SortOptions.propTypes = propTypes;
|
||||
|
||||
export default SortOptions;
|
@@ -5,6 +5,8 @@ import Select from 'react-select';
|
||||
import makeAnimated from 'react-select/lib/animated';
|
||||
import { seafileAPI } from '../../utils/seafile-api.js';
|
||||
import { gettext, isPro } from '../../utils/constants';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
import UserSelect from '../user-select';
|
||||
|
||||
const propTypes = {
|
||||
@@ -42,6 +44,9 @@ class TransferDialog extends React.Component {
|
||||
obj.label = res.data[i].name;
|
||||
this.options.push(obj);
|
||||
}
|
||||
}).catch(error => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -4,6 +4,7 @@ import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api.js';
|
||||
import UserSelect from '../user-select';
|
||||
import { Utils } from '../../utils/utils';
|
||||
|
||||
import '../../css/transfer-group-dialog.css';
|
||||
|
||||
@@ -38,11 +39,8 @@ class TransferGroupDialog extends React.Component {
|
||||
seafileAPI.transferGroup(this.props.groupID, email).then((res) => {
|
||||
this.props.toggleTransferGroupDialog();
|
||||
}).catch((error) => {
|
||||
if (error.response) {
|
||||
this.setState({
|
||||
errMessage: error.response.data.error_msg
|
||||
});
|
||||
}
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
this.setState({errMessage: errMessage});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -3,6 +3,8 @@ import PropTypes from 'prop-types';
|
||||
import { Button, ModalHeader, ModalBody, ModalFooter, Input } from 'reactstrap';
|
||||
import { gettext } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../toast';
|
||||
|
||||
const propTypes = {
|
||||
currentTag: PropTypes.object,
|
||||
@@ -50,6 +52,9 @@ class UpdateTagDialog extends React.Component {
|
||||
seafileAPI.updateRepoTag(repoID, tag_id, name, color).then(() => {
|
||||
this.props.toggleCancel();
|
||||
this.props.updateUsedRepoTags();
|
||||
}).catch((error) => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -73,6 +78,9 @@ class UpdateTagDialog extends React.Component {
|
||||
if (res.data.success === 'true') {
|
||||
this.props.onDeleteRepoTag(tag.id);
|
||||
}
|
||||
}).catch((error) => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
||||
import { Modal, ModalHeader, ModalBody } from 'reactstrap';
|
||||
import { gettext, fileServerRoot } from '../../utils/constants';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import Loading from '../loading';
|
||||
|
||||
const propTypes = {
|
||||
@@ -43,12 +44,7 @@ class ZipDownloadDialog extends React.Component {
|
||||
this.queryZipProgress();
|
||||
interval = setInterval(this.queryZipProgress, 1000);
|
||||
}).catch((error) => {
|
||||
let errorMsg = '';
|
||||
if (error.response) {
|
||||
errorMsg = error.response.data.error_msg || gettext('Error');
|
||||
} else {
|
||||
errorMsg = gettext('Please check the network.');
|
||||
}
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
this.setState({
|
||||
isLoading: false,
|
||||
errorMsg: errorMsg
|
||||
@@ -70,12 +66,7 @@ class ZipDownloadDialog extends React.Component {
|
||||
}
|
||||
}).catch((error) => {
|
||||
clearInterval(interval);
|
||||
let errorMsg = '';
|
||||
if (error.response) {
|
||||
errorMsg = gettext('Error');
|
||||
} else {
|
||||
errorMsg = gettext('Please check the network.');
|
||||
}
|
||||
let errorMsg = Utils.getErrorMsg(error);
|
||||
this.setState({
|
||||
isLoading: false,
|
||||
errorMsg: errorMsg
|
||||
|
Reference in New Issue
Block a user