From 5c7c13c47816382b7a006675e564526a99b15bc2 Mon Sep 17 00:00:00 2001 From: llj Date: Wed, 4 Sep 2019 14:21:57 +0800 Subject: [PATCH 1/2] [dir view] updated 'top operation list' for current active dirent (#4046) * [dir view] updated 'top operation list' for current active dirent * added `getDirentOperationList` to utils.js * improved code * [dir view] added operations for current active dirent; bugfix & improvement * [utils] rewrote 'get dirent operation list' & bugfix --- ...e-grid-item-dialog.js => rename-dirent.js} | 3 +- .../dirent-grid-view/dirent-grid-view.js | 106 +------------- .../dirent-list-view/dirent-list-view.js | 92 +------------ .../toolbar/multiple-dir-operation-toolbar.js | 130 ++++++++++++------ .../lib-content-view/lib-content-toolbar.js | 4 + .../lib-content-view/lib-content-view.js | 1 + frontend/src/utils/utils.js | 114 ++++++++++++++- 7 files changed, 216 insertions(+), 234 deletions(-) rename frontend/src/components/dialog/{rename-grid-item-dialog.js => rename-dirent.js} (96%) diff --git a/frontend/src/components/dialog/rename-grid-item-dialog.js b/frontend/src/components/dialog/rename-dirent.js similarity index 96% rename from frontend/src/components/dialog/rename-grid-item-dialog.js rename to frontend/src/components/dialog/rename-dirent.js index 7173b497d6..fb4b11799e 100644 --- a/frontend/src/components/dialog/rename-grid-item-dialog.js +++ b/frontend/src/components/dialog/rename-dirent.js @@ -66,6 +66,7 @@ class Rename extends React.Component { this.setState({errMessage: errMessage}); } else { this.props.onRename(this.state.newName); + this.props.toggleCancel(); } } } @@ -116,7 +117,7 @@ class Rename extends React.Component { {type === 'file' ? gettext('Rename File') : gettext('Rename Folder') }

{type === 'file' ? gettext('New file name'): gettext('New folder name')}

- {this.newInput = input;}} placeholder="newName" value={this.state.newName} onChange={this.handleChange} /> + {this.newInput = input;}} value={this.state.newName} onChange={this.handleChange} /> {this.state.errMessage && {this.state.errMessage}}
diff --git a/frontend/src/components/dirent-grid-view/dirent-grid-view.js b/frontend/src/components/dirent-grid-view/dirent-grid-view.js index f676f81e02..a3bfba35aa 100644 --- a/frontend/src/components/dirent-grid-view/dirent-grid-view.js +++ b/frontend/src/components/dirent-grid-view/dirent-grid-view.js @@ -16,7 +16,7 @@ import CopyDirentDialog from '../dialog/copy-dirent-dialog'; import ShareDialog from '../dialog/share-dialog'; import ZipDownloadDialog from '../dialog/zip-download-dialog'; import EditFileTagDialog from '../dialog/edit-filetag-dialog'; -import Rename from '../../components/dialog/rename-grid-item-dialog'; +import Rename from '../../components/dialog/rename-dirent'; import CreateFile from '../dialog/create-file-dialog'; import CreateFolder from '../dialog/create-folder-dialog'; import LibSubFolderPermissionDialog from '../dialog/lib-sub-folder-permission-dialog'; @@ -150,7 +150,7 @@ class DirentGridView extends React.Component{ this.onLockItem(currentObject); break; case 'Comment': - this.onComnentItem(); + this.onCommentItem(); break; case 'History': this.onHistory(currentObject); @@ -261,7 +261,7 @@ class DirentGridView extends React.Component{ }); } - onComnentItem = () => { + onCommentItem = () => { this.props.showDirentDetail('comments'); } @@ -286,13 +286,9 @@ class DirentGridView extends React.Component{ } onItemRename = (newName) => { - this.setState({ - isRenameDialogShow: !this.state.isRenameDialogShow, - }); this.props.onItemRename(this.state.activeDirent, newName); } - prepareImageItem = (item) => { const useThumbnail = !this.repoEncrypted; const name = item.name; @@ -351,11 +347,7 @@ class DirentGridView extends React.Component{ } checkDuplicatedName = (newName) => { - let direntList = this.props.direntList; - let isDuplicated = direntList.some(object => { - return object.name === newName; - }); - return isDuplicated; + return Utils.checkDuplicatedNameInList(this.props.direntList, newName); } // common contextmenu handle @@ -434,93 +426,9 @@ class DirentGridView extends React.Component{ } getDirentItemMenuList = (dirent, isContextmenu) => { - - let isRepoOwner = this.isRepoOwner; - let currentRepoInfo = this.props.currentRepoInfo; - let can_set_folder_perm = folderPermEnabled && ((isRepoOwner && currentRepoInfo.has_been_shared_out) || currentRepoInfo.is_admin); - - let type = dirent.type; - let permission = dirent.permission; - let showShareBtn = Utils.isHasPermissionToShare(currentRepoInfo, permission, dirent); - let menuList = []; - let contextmenuList = []; - if (isContextmenu) { - let { SHARE, DOWNLOAD, DELETE } = TextTranslation; - - if (showShareBtn) { - contextmenuList = [SHARE]; - } - - if (dirent.permission === 'rw' || dirent.permission === 'r') { - contextmenuList = [...contextmenuList, DOWNLOAD]; - } - - if (dirent.permission === 'rw') { - contextmenuList = [...contextmenuList, DELETE]; - } - - contextmenuList = contextmenuList.length > 0 ? [...contextmenuList, 'Divider'] : []; - } - - let { RENAME, MOVE, COPY, PERMISSION, OPEN_VIA_CLIENT, LOCK, UNLOCK, COMMENT, HISTORY, ACCESS_LOG, TAGS } = TextTranslation; - if (type === 'dir' && permission === 'rw') { - if (can_set_folder_perm) { - menuList = [...contextmenuList, RENAME, MOVE, COPY, 'Divider', PERMISSION, 'Divider', OPEN_VIA_CLIENT]; - } else { - menuList = [...contextmenuList, RENAME, MOVE, COPY, 'Divider', OPEN_VIA_CLIENT]; - } - return menuList; - } - - if (type === 'dir' && permission === 'r') { - menuList = [...contextmenuList]; - menuList = currentRepoInfo.encrypted ? [...menuList, COPY] : menuList.slice(0, menuList.length - 1); - return menuList; - } - - if (type === 'file' && permission === 'rw') { - menuList = [...contextmenuList]; - if (!dirent.is_locked || (dirent.is_locked && dirent.locked_by_me)) { - menuList.push(RENAME); - menuList.push(MOVE); - } - menuList.push(COPY); - menuList.push(TAGS); - if (isPro) { - if (dirent.is_locked) { - if (dirent.locked_by_me || (dirent.lock_owner === 'OnlineOffice' && permission === 'rw')) { - menuList.push(UNLOCK); - } - } else { - menuList.push(LOCK); - } - } - menuList.push('Divider'); - if (enableFileComment) { - menuList.push(COMMENT); - } - menuList.push(HISTORY); - if (isPro && fileAuditEnabled) { - menuList.push(ACCESS_LOG); - } - menuList.push('Divider'); - menuList.push(OPEN_VIA_CLIENT); - return menuList; - } - - if (type === 'file' && permission === 'r') { - menuList = [...contextmenuList]; - if (!currentRepoInfo.encrypted) { - menuList.push(COPY); - } - if (enableFileComment) { - menuList.push(COMMENT); - } - menuList.push(HISTORY); - return menuList; - } - - return []; + const isRepoOwner = this.isRepoOwner; + const currentRepoInfo = this.props.currentRepoInfo; + return Utils.getDirentOperationList(isRepoOwner, currentRepoInfo, dirent, isContextmenu); } render() { diff --git a/frontend/src/components/dirent-list-view/dirent-list-view.js b/frontend/src/components/dirent-list-view/dirent-list-view.js index 7468e6df4b..aa89c23c25 100644 --- a/frontend/src/components/dirent-list-view/dirent-list-view.js +++ b/frontend/src/components/dirent-list-view/dirent-list-view.js @@ -474,95 +474,11 @@ class DirentListView extends React.Component { } getDirentItemMenuList = (dirent, isContextmenu) => { - let isRepoOwner = this.isRepoOwner; - let currentRepoInfo = this.props.currentRepoInfo; - let can_set_folder_perm = folderPermEnabled && ((isRepoOwner && currentRepoInfo.has_been_shared_out) || currentRepoInfo.is_admin); - - let type = dirent.type; - let permission = dirent.permission; - let showShareBtn = Utils.isHasPermissionToShare(currentRepoInfo, permission, dirent); - - let menuList = []; - let contextmenuList = []; - - if (isContextmenu) { - let { SHARE, DOWNLOAD, DELETE } = TextTranslation; - - if (showShareBtn) { - contextmenuList = [SHARE]; - } - - if (dirent.permission === 'rw' || dirent.permission === 'r') { - contextmenuList = [...contextmenuList, DOWNLOAD]; - } - - if (dirent.permission === 'rw') { - contextmenuList = [...contextmenuList, DELETE]; - } - contextmenuList = contextmenuList.length > 0 ? [...contextmenuList, 'Divider'] : []; - } - - let { RENAME, MOVE, COPY, PERMISSION, OPEN_VIA_CLIENT, LOCK, UNLOCK, COMMENT, HISTORY, ACCESS_LOG, TAGS } = TextTranslation; - if (type === 'dir' && permission === 'rw') { - if (can_set_folder_perm) { - menuList = [...contextmenuList, RENAME, MOVE, COPY, 'Divider', PERMISSION, 'Divider', OPEN_VIA_CLIENT]; - } else { - menuList = [...contextmenuList, RENAME, MOVE, COPY, 'Divider', OPEN_VIA_CLIENT]; - } - return menuList; - } - - if (type === 'dir' && permission === 'r') { - menuList = [...contextmenuList]; - menuList = currentRepoInfo.encrypted ? [...menuList, COPY] : menuList.slice(0, menuList.length - 1); - return menuList; - } - - if (type === 'file' && permission === 'rw') { - menuList = [...contextmenuList]; - if (!dirent.is_locked || (dirent.is_locked && dirent.locked_by_me)) { - menuList.push(RENAME); - menuList.push(MOVE); - } - menuList.push(COPY); - menuList.push(TAGS); - if (isPro) { - if (dirent.is_locked) { - if (dirent.locked_by_me || (dirent.lock_owner === 'OnlineOffice' && permission === 'rw')) { - menuList.push(UNLOCK); - } - } else { - menuList.push(LOCK); - } - } - menuList.push('Divider'); - if (enableFileComment) { - menuList.push(COMMENT); - } - menuList.push(HISTORY); - if (isPro && fileAuditEnabled) { - menuList.push(ACCESS_LOG); - } - menuList.push('Divider'); - menuList.push(OPEN_VIA_CLIENT); - return menuList; - } - - if (type === 'file' && permission === 'r') { - menuList = [...contextmenuList]; - if (!currentRepoInfo.encrypted) { - menuList.push(COPY); - } - if (enableFileComment) { - menuList.push(COMMENT); - } - menuList.push(HISTORY); - return menuList; - } - - return []; + const isRepoOwner = this.isRepoOwner; + const currentRepoInfo = this.props.currentRepoInfo; + return Utils.getDirentOperationList(isRepoOwner, currentRepoInfo, dirent, isContextmenu); } - + onTableDragEnter = (e) => { if (Utils.isIEBrower()) { return false; diff --git a/frontend/src/components/toolbar/multiple-dir-operation-toolbar.js b/frontend/src/components/toolbar/multiple-dir-operation-toolbar.js index 8a593ca871..cb8b0e6e07 100644 --- a/frontend/src/components/toolbar/multiple-dir-operation-toolbar.js +++ b/frontend/src/components/toolbar/multiple-dir-operation-toolbar.js @@ -1,7 +1,7 @@ import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { Button, ButtonGroup } from 'reactstrap'; -import { gettext, siteRoot, canGenerateShareLink, isPro, fileAuditEnabled } from '../../utils/constants'; +import { gettext, siteRoot, canGenerateShareLink, isPro, fileAuditEnabled, name } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import { seafileAPI } from '../../utils/seafile-api'; import URLDecorator from '../../utils/url-decorator'; @@ -12,6 +12,9 @@ import ShareDialog from '../dialog/share-dialog'; import RelatedFileDialogs from '../dialog/related-file-dialogs'; import EditFileTagDialog from '../dialog/edit-filetag-dialog'; import ZipDownloadDialog from '../dialog/zip-download-dialog'; +import Rename from '../dialog/rename-dirent'; +import LibSubFolderPermissionDialog from '../dialog/lib-sub-folder-permission-dialog'; + import ModalPortal from '../modal-portal'; import ItemDropdownMenu from '../dropdown-menu/item-dropdown-menu'; import toaster from '../toast'; @@ -51,6 +54,8 @@ class MultipleDirOperationToolbar extends React.Component { multiFileTagList: [], showRelatedFileDialog: false, viewMode: 'list_related_file', + isRenameDialogOpen: false, + isPermissionDialogOpen: false }; } @@ -87,57 +92,63 @@ class MultipleDirOperationToolbar extends React.Component { }); } + checkDuplicatedName = (newName) => { + return Utils.checkDuplicatedNameInList(this.props.direntList, newName); + } + + onItemRename = (newName) => { + const dirent = this.props.selectedDirentList[0]; + this.props.onItemRename(dirent, newName); + } + + onPermissionItem = () => { + this.setState({ + showLibContentViewDialogs: !this.state.showLibContentViewDialogs, + isPermissionDialogOpen: !this.state.isPermissionDialogOpen + }); + } + + onCommentItem = () => { + this.props.showDirentDetail('comments'); + } + getDirentMenuList = (dirent) => { - let menuList = []; - let currentRepoInfo = this.props.currentRepoInfo; - let showShareBtn = Utils.isHasPermissionToShare(currentRepoInfo, dirent.permission, dirent); - - const { SHARE, TAGS, RELATED_FILES, HISTORY, ACCESS_LOG, OPEN_VIA_CLIENT, LOCK, UNLOCK } = TextTranslation; - - if (dirent.type === 'dir') { - if (showShareBtn) { - menuList = [SHARE]; - } - return menuList; - } - - if (dirent.type === 'file') { - let shareBtn = showShareBtn ? [SHARE] : []; - - menuList = [...shareBtn, TAGS, RELATED_FILES, 'Divider', HISTORY, ACCESS_LOG, 'Divider', OPEN_VIA_CLIENT]; - if (!Utils.isMarkdownFile(dirent.name)) { - menuList = menuList.filter(menu => { - return menu !== RELATED_FILES; - }); - } - if (!isPro || !fileAuditEnabled) { - menuList = menuList.filter(menu => { - return menu !== ACCESS_LOG; - }); - } - if (isPro) { - if (dirent.is_locked) { - if (dirent.locked_by_me || (dirent.lock_owner === 'OnlineOffice' && currentRepoInfo.permission === 'rw')) { - menuList.splice(1, 0, UNLOCK); - } - } else { - menuList.splice(1, 0, LOCK); - } - } - return menuList; + const isRepoOwner = this.props.isRepoOwner; + const currentRepoInfo = this.props.currentRepoInfo; + const isContextmenu = true; + let opList = Utils.getDirentOperationList(isRepoOwner, currentRepoInfo, dirent, isContextmenu); + const list = ['Move', 'Copy', 'Delete', 'Download']; + if (dirent.type == 'dir') { + opList = opList.filter((item, index) => { + return list.indexOf(item.key) == -1 && item != 'Divider'; + }); + } else { + opList = opList.filter((item, index) => { + return list.indexOf(item.key) == -1; + }); } + return opList; } onMenuItemClick = (operation) => { const dirents = this.props.selectedDirentList; const dirent = dirents[0]; - switch(operation) { + switch (operation) { case 'Share': this.setState({ showLibContentViewDialogs: true, showShareDialog: true, }); break; + case 'Rename': + this.setState({ + showLibContentViewDialogs: true, + isRenameDialogOpen: true + }); + break; + case 'Permission': + this.onPermissionItem(); + break; case 'Tags': this.listFileTags(dirent); break; @@ -147,6 +158,9 @@ class MultipleDirOperationToolbar extends React.Component { case 'Unlock': this.unlockFile(dirent); break; + case 'Comment': + this.onCommentItem(); + break; case 'Related Files': this.openRelatedFilesDialog(dirent); break; @@ -170,6 +184,7 @@ class MultipleDirOperationToolbar extends React.Component { if (res.data.is_locked) { this.props.updateDirent(dirent, 'is_locked', true); this.props.updateDirent(dirent, 'locked_by_me', true); + this.props.updateDirent(dirent, 'lock_owner_name', name); this.props.unSelectDirent(); } }).catch(error => { @@ -184,6 +199,7 @@ class MultipleDirOperationToolbar extends React.Component { if (!res.data.is_locked) { this.props.updateDirent(dirent, 'is_locked', false); this.props.updateDirent(dirent, 'locked_by_me', false); + this.props.updateDirent(dirent, 'lock_owner_name', ''); this.props.unSelectDirent(); } }).catch(error => { @@ -200,7 +216,6 @@ class MultipleDirOperationToolbar extends React.Component { filePath: filePath }); location.href = url; - this.props.unSelectDirent(); } onHistory = (dirent) => { @@ -250,6 +265,8 @@ class MultipleDirOperationToolbar extends React.Component { showShareDialog: false, showEditFileTagDialog: false, showRelatedFileDialog: false, + isRenameDialogOpen: false, + isPermissionDialogOpen: false, }); } @@ -304,7 +321,9 @@ class MultipleDirOperationToolbar extends React.Component { render() { const { repoID, userPerm } = this.props; - let direntPath = this.getDirentPath(this.props.selectedDirentList[0]); + const dirent = this.props.selectedDirentList[0]; + + let direntPath = this.getDirentPath(dirent); if (userPerm !== 'rw' && userPerm !== 'admin') { return ''; @@ -366,18 +385,39 @@ class MultipleDirOperationToolbar extends React.Component { {this.state.showShareDialog && } + {this.state.isRenameDialogOpen && + + + + } + {this.state.isPermissionDialogOpen && + + + + } {this.state.showEditFileTagDialog && : { + return object.name === targetName; + }); + }, + encodePath: function(path) { // IE8 does not support 'map()' /* @@ -377,6 +384,111 @@ export const Utils = { return title; }, + getFolderOperationList: function(isRepoOwner, currentRepoInfo, dirent, isContextmenu) { + + let list = []; + const { SHARE, DOWNLOAD, DELETE, RENAME, MOVE, COPY, PERMISSION, OPEN_VIA_CLIENT } = TextTranslation; + const permission = dirent.permission; + + if (isContextmenu) { + if (permission == 'rw' || permission == 'r') { + list.push(DOWNLOAD); + } + + if (Utils.isHasPermissionToShare(currentRepoInfo, permission, dirent)) { + list.push(SHARE); + } + + if (permission == 'rw') { + list.push(DELETE, 'Divider'); + } + } + + if (permission == 'rw') { + list.push(RENAME, MOVE, COPY); + if (folderPermEnabled && ((isRepoOwner && currentRepoInfo.has_been_shared_out) || currentRepoInfo.is_admin)) { + list.push('Divider', PERMISSION); + } + list.push('Divider', OPEN_VIA_CLIENT); + } + + if (permission == 'r' && !currentRepoInfo.encrypted) { + list.push(COPY); + } + + return list; + }, + + getFileOperationList: function(currentRepoInfo, dirent, isContextmenu) { + let list = []; + const { SHARE, DOWNLOAD, DELETE, RENAME, MOVE, COPY, TAGS, UNLOCK, LOCK, + COMMENT, HISTORY, ACCESS_LOG, OPEN_VIA_CLIENT } = TextTranslation; + const permission = dirent.permission; + + if (isContextmenu) { + if (permission == 'rw' || permission == 'r') { + list.push(DOWNLOAD); + } + + if (Utils.isHasPermissionToShare(currentRepoInfo, permission, dirent)) { + list.push(SHARE); + } + + if (permission == 'rw') { + if (!dirent.is_locked || (dirent.is_locked && dirent.locked_by_me)) { + list.push(DELETE); + } + } + + list.push('Divider'); + } + + if (permission == 'rw') { + if (!dirent.is_locked || (dirent.is_locked && dirent.locked_by_me)) { + list.push(RENAME, MOVE); + } + list.push(COPY, TAGS); + + if (isPro) { + if (dirent.is_locked) { + if (dirent.locked_by_me || dirent.lock_owner == 'OnlineOffice') { + list.push(UNLOCK); + } + } else { + list.push(LOCK); + } + } + + list.push('Divider'); + if (enableFileComment) { + list.push(COMMENT); + } + list.push(HISTORY); + if (isPro && fileAuditEnabled) { + list.push(ACCESS_LOG); + } + list.push('Divider', OPEN_VIA_CLIENT); + } + + if (permission == 'r') { + if (!currentRepoInfo.encrypted) { + list.push(COPY); + } + if (enableFileComment) { + list.push(COMMENT); + } + list.push(HISTORY); + } + + return list; + }, + + getDirentOperationList: function(isRepoOwner, currentRepoInfo, dirent, isContextmenu) { + return dirent.type == 'dir' ? + Utils.getFolderOperationList(isRepoOwner, currentRepoInfo, dirent, isContextmenu) : + Utils.getFileOperationList(currentRepoInfo, dirent, isContextmenu); + }, + sharePerms: function(permission) { var title; switch(permission) { From 2d4604e71e84590d5b2131d7ff5af2794b8db003 Mon Sep 17 00:00:00 2001 From: Michael An <2331806369@qq.com> Date: Wed, 4 Sep 2019 14:35:05 +0800 Subject: [PATCH 2/2] update seafile-js version (#4050) --- frontend/package-lock.json | 18 +++++++++--------- frontend/package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 598430a35d..35060c2cc6 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -2217,7 +2217,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -2268,7 +2268,7 @@ }, "buffer": { "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { @@ -4297,7 +4297,7 @@ }, "events": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, @@ -11377,9 +11377,9 @@ } }, "seafile-js": { - "version": "0.2.118", - "resolved": "https://registry.npmjs.org/seafile-js/-/seafile-js-0.2.118.tgz", - "integrity": "sha512-0PDLMsCPx5W80Gb1R+4eSCica4/trJdZ1ZHfdaeb1ponTwOk34froPbLI6zT+VimLDwT5FCLWqkehQhi4E0N8g==", + "version": "0.2.120", + "resolved": "https://registry.npmjs.org/seafile-js/-/seafile-js-0.2.120.tgz", + "integrity": "sha512-3TrYkDTh4tC20S7StCetpu+RTXKQma0EUDrJ1iXjlhA8q0u8H8fiGmdl+nJv0D7fYQE9DydwDVyAZAj7aj0Lew==", "requires": { "axios": "^0.18.0", "form-data": "^2.3.2", @@ -12475,7 +12475,7 @@ }, "yargs": { "version": "3.10.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "requires": { @@ -13010,7 +13010,7 @@ }, "load-json-file": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { @@ -13300,7 +13300,7 @@ }, "yargs": { "version": "6.6.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", "dev": true, "requires": { diff --git a/frontend/package.json b/frontend/package.json index e2a721106b..980da476ea 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -36,7 +36,7 @@ "react-responsive": "^6.1.2", "react-select": "^2.4.1", "reactstrap": "^6.4.0", - "seafile-js": "^0.2.118", + "seafile-js": "^0.2.120", "socket.io-client": "^2.2.0", "sw-precache-webpack-plugin": "0.11.4", "unified": "^7.0.0",