From c93e8aa603390b4d5a8843ac858bc04f0af5735f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E9=A1=BA=E5=BC=BA?= Date: Thu, 1 Nov 2018 18:40:18 +0800 Subject: [PATCH] Wiki bug repair (#2492) --- .../dirent-list-view/dirent-list-item.js | 6 ++++- .../dirent-list-view/dirent-list-view.js | 4 +++ .../dirent-list-view/dirent-menu-item.js | 9 ++++--- .../dirent-list-view/dirent-menu.js | 27 +++++++------------ .../components/file-chooser/file-chooser.js | 9 +++++-- frontend/src/components/tree-view/node.js | 4 +++ frontend/src/css/dirent-detail.css | 8 ++++-- .../src/pages/repo-wiki-mode/main-panel.js | 16 +++++++++++ frontend/src/repo-wiki-mode.js | 2 +- media/css/seahub_react.css | 3 ++- 10 files changed, 60 insertions(+), 28 deletions(-) diff --git a/frontend/src/components/dirent-list-view/dirent-list-item.js b/frontend/src/components/dirent-list-view/dirent-list-item.js index a5abd93aa2..1fc1d226c5 100644 --- a/frontend/src/components/dirent-list-view/dirent-list-item.js +++ b/frontend/src/components/dirent-list-view/dirent-list-item.js @@ -22,6 +22,8 @@ const propTypes = { onDirentItemCopy: PropTypes.func.isRequired, onItemDetails: PropTypes.func.isRequired, updateViewList: PropTypes.func.isRequired, + currentRepo: PropTypes.object, + isRepoOwner: PropTypes.bool, }; class DirentListItem extends React.Component { @@ -184,12 +186,12 @@ class DirentListItem extends React.Component { } onRenameMenuItemClick = () => { + this.props.onRenameMenuItemClick(this.props.dirent); this.setState({ isOperationShow: false, isItemMenuShow: false, isRenameing: true, }); - this.props.onRenameMenuItemClick(this.props.dirent); } onRenameConfirm = (newName) => { @@ -349,6 +351,8 @@ class DirentListItem extends React.Component { dirent={this.props.dirent} menuPosition={this.state.menuPosition} onMenuItemClick={this.onItemMenuItemClick} + currentRepo={this.props.currentRepo} + isRepoOwner={this.props.isRepoOwner} /> } 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 1836c9b32a..82b62f0146 100644 --- a/frontend/src/components/dirent-list-view/dirent-list-view.js +++ b/frontend/src/components/dirent-list-view/dirent-list-view.js @@ -20,6 +20,8 @@ const propTypes = { onItemDetails: PropTypes.func.isRequired, updateViewList: PropTypes.func.isRequired, isDirentListLoading: PropTypes.bool.isRequired, + isRepoOwner: PropTypes.bool, + currentRepo: PropTypes.object, }; class DirentListView extends React.Component { @@ -159,6 +161,8 @@ class DirentListView extends React.Component { key={index} dirent={dirent} filePath={this.props.filePath} + currentRepo={this.props.currentRepo} + isRepoOwner={this.props.isRepoOwner} onItemClick={this.props.onItemClick} onRenameMenuItemClick={this.onRenameMenuItemClick} onItemDelete={this.props.onItemDelete} diff --git a/frontend/src/components/dirent-list-view/dirent-menu-item.js b/frontend/src/components/dirent-list-view/dirent-menu-item.js index ca49725b1a..2b346eb0a2 100644 --- a/frontend/src/components/dirent-list-view/dirent-menu-item.js +++ b/frontend/src/components/dirent-list-view/dirent-menu-item.js @@ -16,13 +16,14 @@ class DirentMenuItem extends React.Component { } render() { - let operationName = gettext(this.props.item); + let operation = this.props.item; + let operationMessage = gettext(operation); return ( { - operationName !== 'Divider' ? -
  • - {operationName} + operation !== 'Divider' ? +
  • + {operationMessage}
  • :
  • } diff --git a/frontend/src/components/dirent-list-view/dirent-menu.js b/frontend/src/components/dirent-list-view/dirent-menu.js index 2f80d3d71d..8365ab8e22 100644 --- a/frontend/src/components/dirent-list-view/dirent-menu.js +++ b/frontend/src/components/dirent-list-view/dirent-menu.js @@ -1,14 +1,14 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { seafileAPI } from '../../utils/seafile-api'; -import { repoID, isPro, enableFileComment, fileAuditEnabled, folderPermEnabled} from '../../utils/constants'; -import Repo from '../../models/repo'; +import { isPro, enableFileComment, fileAuditEnabled, folderPermEnabled} from '../../utils/constants'; import DirentMenuItem from './dirent-menu-item'; const propTypes = { dirent: PropTypes.object.isRequired, menuPosition: PropTypes.object.isRequired, onMenuItemClick: PropTypes.func.isRequired, + currentRepo: PropTypes.object.isRequired, + isRepoOwner: PropTypes.bool.isRequired, }; class DirentMenu extends React.Component { @@ -16,32 +16,25 @@ class DirentMenu extends React.Component { constructor(props) { super(props); this.state = { - repo: null, menuList: [], }; - this.is_repo_owner = false; } componentDidMount() { - seafileAPI.getRepoInfo(repoID).then(res => { - let repo = new Repo(res.data); - seafileAPI.getAccountInfo().then(res => { - let user_email = res.data.email; - this.is_repo_owner = repo.owner_email === user_email; - let menuList = this.calculateMenuList(repo); - this.setState({ - repo: repo, - menuList: menuList - }); - }); + let repo = this.props.currentRepo; + let menuList = this.calculateMenuList(repo); + this.setState({ + menuList: menuList }); + } calculateMenuList(repoInfo) { let dirent = this.props.dirent; + let isRepoOwner = this.props.isRepoOwner; let type = dirent.type; let permission = dirent.permission; - let can_set_folder_perm = folderPermEnabled && ((this.is_repo_owner && repoInfo.has_been_shared_out) || repoInfo.is_admin); + let can_set_folder_perm = folderPermEnabled && ((isRepoOwner && repoInfo.has_been_shared_out) || repoInfo.is_admin); if (type === 'dir' && permission === 'rw') { let menuList = []; if (can_set_folder_perm) { diff --git a/frontend/src/components/file-chooser/file-chooser.js b/frontend/src/components/file-chooser/file-chooser.js index 1c8a400ef7..764f5d8c5f 100644 --- a/frontend/src/components/file-chooser/file-chooser.js +++ b/frontend/src/components/file-chooser/file-chooser.js @@ -18,6 +18,7 @@ class FileChooser extends React.Component { super(props); this.state = { hasRequest: false, + isCurrentRepoShow: true, isOtherRepoShow: false, repoList: [], currentRepo: null, @@ -62,6 +63,10 @@ class FileChooser extends React.Component { } } + onCurrentRepoToggle = () => [ + this.setState({isCurrentRepoShow: !this.state.isCurrentRepoShow}) + ] + onDirentItemClick = (repo, filePath) => { this.props.onDirentItemClick(repo, filePath); this.setState({ @@ -83,11 +88,11 @@ class FileChooser extends React.Component {
    - + {gettext('Current Library')}
    { - this.state.currentRepo && + this.state.isCurrentRepoShow && this.state.currentRepo && { + let repo = new Repo(res.data); + seafileAPI.getAccountInfo().then(res => { + let user_email = res.data.email; + let isRepoOwner = repo.owner_email === user_email; + this.setState({ + currentRepo: repo, + isRepoOwner: isRepoOwner, + }); + }); + }); document.addEventListener('click', this.hideOperationMenu); } @@ -296,6 +310,8 @@ class MainPanel extends Component { onItemDetails={this.onItemDetails} updateViewList={this.updateViewList} isDirentListLoading={this.state.isDirentListLoading} + currentRepo={this.state.currentRepo} + isRepoOwner={this.state.isRepoOwner} /> }
    diff --git a/frontend/src/repo-wiki-mode.js b/frontend/src/repo-wiki-mode.js index f71d7ddec2..0cfc895134 100644 --- a/frontend/src/repo-wiki-mode.js +++ b/frontend/src/repo-wiki-mode.js @@ -329,7 +329,7 @@ class Wiki extends Component { onRenameNode = (node, newName) => { let tree = this.state.tree_data.clone(); let filePath = node.path; - if (node.isMarkdown()) { + if (node.isFile()) { editorUtilities.renameFile(filePath, newName).then(res => { let cloneNode = node.clone(); diff --git a/media/css/seahub_react.css b/media/css/seahub_react.css index 7f9c1ea692..40907207ab 100644 --- a/media/css/seahub_react.css +++ b/media/css/seahub_react.css @@ -933,7 +933,8 @@ a.op-icon:focus { vertical-align: middle; } .operation-group-item i:hover { - text-decoration: underline; + padding-bottom: 0.125rem; + border-bottom: 0.125rem solid #f89a68; } .operation-group-item .sf-dropdown-toggle { font-size: 0.85rem;