1
0
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:
plt
2019-07-16 10:15:31 +08:00
104 changed files with 943 additions and 359 deletions

View File

@@ -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});
});
}

View File

@@ -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);
});
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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({

View File

@@ -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);
});
}

View File

@@ -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);
});
}

View File

@@ -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

View File

@@ -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);
});
}

View File

@@ -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);
});
}

View File

@@ -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);
});
});
}

View File

@@ -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

View File

@@ -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);
});
}

View File

@@ -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({

View File

@@ -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() {

View File

@@ -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);
});
}

View File

@@ -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);
});
}

View File

@@ -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);
});
}

View File

@@ -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);
});
}

View File

@@ -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);
});
}

View File

@@ -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 });
});
}

View File

@@ -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);
});
}

View File

@@ -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);
});
}

View File

@@ -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) => {

View File

@@ -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.');

View File

@@ -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);
});
}

View File

@@ -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({

View File

@@ -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});
});
}

View File

@@ -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);
});
}

View File

@@ -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);
});
}
}

View File

@@ -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);
});
}
}

View 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;

View File

@@ -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);
});
}

View File

@@ -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});
});
}
}

View File

@@ -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);
});
}

View File

@@ -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