1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-04 16:31:13 +00:00

[dir view] added an icon button to toggle between displaying/hiding the dirent tree panel (#6093)

This commit is contained in:
llj
2024-05-16 20:14:26 +08:00
committed by GitHub
parent 6bd8d6dade
commit a78f8e97a2
7 changed files with 56 additions and 25 deletions

View File

@@ -15,6 +15,7 @@ const propTypes = {
repoID: PropTypes.string.isRequired, repoID: PropTypes.string.isRequired,
isViewFile: PropTypes.bool, isViewFile: PropTypes.bool,
fileTags: PropTypes.array.isRequired, fileTags: PropTypes.array.isRequired,
toggleTreePanel: PropTypes.func.isRequired
}; };
class DirPath extends React.Component { class DirPath extends React.Component {
@@ -78,6 +79,7 @@ class DirPath extends React.Component {
return ( return (
<div className="path-container"> <div className="path-container">
<button className="op-btn mr-2" onClick={this.props.toggleTreePanel}><span className="sf3-font-side-bar sf3-font"></span></button>
{this.props.pathPrefix && this.props.pathPrefix.map((item, index) => { {this.props.pathPrefix && this.props.pathPrefix.map((item, index) => {
return ( return (
<Fragment key={index}> <Fragment key={index}>

View File

@@ -17,6 +17,7 @@ const propTypes = {
updateUsedRepoTags: PropTypes.func.isRequired, updateUsedRepoTags: PropTypes.func.isRequired,
fileTags: PropTypes.array.isRequired, fileTags: PropTypes.array.isRequired,
onDeleteRepoTag: PropTypes.func.isRequired, onDeleteRepoTag: PropTypes.func.isRequired,
toggleTreePanel: PropTypes.func.isRequired,
direntList: PropTypes.array, direntList: PropTypes.array,
sortBy: PropTypes.string, sortBy: PropTypes.string,
sortOrder: PropTypes.string, sortOrder: PropTypes.string,
@@ -51,6 +52,7 @@ class CurDirPath extends React.Component {
repoID={this.props.repoID} repoID={this.props.repoID}
isViewFile={this.props.isViewFile} isViewFile={this.props.isViewFile}
fileTags={this.props.fileTags} fileTags={this.props.fileTags}
toggleTreePanel={this.props.toggleTreePanel}
/> />
{isDesktop && {isDesktop &&
<DirTool <DirTool

View File

@@ -6,6 +6,7 @@ import DirListView from './dir-list-view';
import DirGridView from './dir-grid-view'; import DirGridView from './dir-grid-view';
const propTypes = { const propTypes = {
isTreePanelShown: PropTypes.bool.isRequired,
currentMode: PropTypes.string.isRequired, currentMode: PropTypes.string.isRequired,
path: PropTypes.string.isRequired, path: PropTypes.string.isRequired,
repoID: PropTypes.string.isRequired, repoID: PropTypes.string.isRequired,
@@ -146,35 +147,39 @@ class DirColumnView extends React.Component {
} }
render() { render() {
const { currentMode } = this.props; const { currentMode, isTreePanelShown } = this.props;
const onResizeMove = this.state.inResizing ? this.onResizeMouseMove : null; const onResizeMove = this.state.inResizing ? this.onResizeMouseMove : null;
const select = this.state.inResizing ? 'none' : ''; const select = this.state.inResizing ? 'none' : '';
const mainFlex = '1 0 ' + (1 - this.state.navRate - 0.05) * 100 + '%'; const mainFlex = '1 0 ' + (1 - this.state.navRate - 0.05) * 100 + '%';
return ( return (
<div className="dir-colunm-view" onMouseMove={onResizeMove} onMouseUp={this.onResizeMouseUp} ref="viewModeContainer"> <div className="dir-colunm-view" onMouseMove={onResizeMove} onMouseUp={this.onResizeMouseUp} ref="viewModeContainer">
<DirColumnNav {isTreePanelShown && (
currentPath={this.props.path} <>
userPerm={this.props.userPerm} <DirColumnNav
isTreeDataLoading={this.props.isTreeDataLoading} currentPath={this.props.path}
treeData={this.props.treeData} userPerm={this.props.userPerm}
currentNode={this.props.currentNode} isTreeDataLoading={this.props.isTreeDataLoading}
onNodeClick={this.props.onNodeClick} treeData={this.props.treeData}
onNodeCollapse={this.props.onNodeCollapse} currentNode={this.props.currentNode}
onNodeExpanded={this.props.onNodeExpanded} onNodeClick={this.props.onNodeClick}
onAddFolderNode={this.props.onAddFolderNode} onNodeCollapse={this.props.onNodeCollapse}
onAddFileNode={this.props.onAddFileNode} onNodeExpanded={this.props.onNodeExpanded}
onRenameNode={this.props.onRenameNode} onAddFolderNode={this.props.onAddFolderNode}
onDeleteNode={this.props.onDeleteNode} onAddFileNode={this.props.onAddFileNode}
repoID={this.props.repoID} onRenameNode={this.props.onRenameNode}
navRate={this.state.navRate} onDeleteNode={this.props.onDeleteNode}
inResizing={this.state.inResizing} repoID={this.props.repoID}
currentRepoInfo={this.props.currentRepoInfo} navRate={this.state.navRate}
onItemMove={this.props.onItemMove} inResizing={this.state.inResizing}
onItemCopy={this.props.onItemCopy} currentRepoInfo={this.props.currentRepoInfo}
selectedDirentList={this.props.selectedDirentList} onItemMove={this.props.onItemMove}
onItemsMove={this.props.onItemsMove} onItemCopy={this.props.onItemCopy}
/> selectedDirentList={this.props.selectedDirentList}
<div className="dir-content-resize" onMouseDown={this.onResizeMouseDown}></div> onItemsMove={this.props.onItemsMove}
/>
<div className="dir-content-resize" onMouseDown={this.onResizeMouseDown}></div>
</>
)}
<div className="dir-content-main" style={{userSelect: select, flex: mainFlex}} onScroll={this.props.isViewFile ? () => {} : this.props.onItemsScroll}> <div className="dir-content-main" style={{userSelect: select, flex: mainFlex}} onScroll={this.props.isViewFile ? () => {} : this.props.onItemsScroll}>
{this.props.isViewFile ? ( {this.props.isViewFile ? (
<DirColumnFile <DirColumnFile

View File

@@ -94,7 +94,7 @@
.cur-view-path { .cur-view-path {
position: relative; /* for the ':after' */ position: relative; /* for the ':after' */
padding: 8px 16px; padding: 8px 16px;
max-height: 40px; max-height: 48px;
background: #fff; background: #fff;
display: flex; display: flex;
align-items: center; align-items: center;

View File

@@ -225,3 +225,15 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.op-btn {
background: #fff;
border: 1px solid #dbdbdb;
border-radius: 3px;
height: 32px;
padding: 0 .5rem;
}
.op-btn:hover {
background: #f5f5f5;
}

View File

@@ -11,6 +11,7 @@ import '../../css/lib-content-view.css';
const propTypes = { const propTypes = {
pathPrefix: PropTypes.array.isRequired, pathPrefix: PropTypes.array.isRequired,
isTreePanelShown: PropTypes.bool.isRequired, isTreePanelShown: PropTypes.bool.isRequired,
toggleTreePanel: PropTypes.func.isRequired,
currentMode: PropTypes.string.isRequired, currentMode: PropTypes.string.isRequired,
path: PropTypes.string.isRequired, path: PropTypes.string.isRequired,
pathExist: PropTypes.bool.isRequired, pathExist: PropTypes.bool.isRequired,
@@ -186,12 +187,14 @@ class LibContentContainer extends React.Component {
sortBy={this.props.sortBy} sortBy={this.props.sortBy}
sortOrder={this.props.sortOrder} sortOrder={this.props.sortOrder}
sortItems={this.props.sortItems} sortItems={this.props.sortItems}
toggleTreePanel={this.props.toggleTreePanel}
/> />
</div> </div>
<div className={`cur-view-content lib-content-container ${this.props.isTreePanelShown ? 'view-mode-container' : ''}`} onScroll={this.onItemsScroll}> <div className={`cur-view-content lib-content-container ${this.props.isTreePanelShown ? 'view-mode-container' : ''}`} onScroll={this.onItemsScroll}>
{!this.props.pathExist && this.errMessage} {!this.props.pathExist && this.errMessage}
{this.props.pathExist && ( {this.props.pathExist && (
<DirColumnView <DirColumnView
isTreePanelShown={this.props.isTreePanelShown}
currentMode={this.props.currentMode} currentMode={this.props.currentMode}
path={this.props.path} path={this.props.path}
repoID={repoID} repoID={repoID}

View File

@@ -1945,6 +1945,12 @@ class LibContentView extends React.Component {
e.preventDefault(); e.preventDefault();
}; };
toggleTreePanel = () => {
this.setState({
isTreePanelShown: !this.state.isTreePanelShown
});
};
render() { render() {
if (this.state.libNeedDecrypt) { if (this.state.libNeedDecrypt) {
return ( return (
@@ -2046,6 +2052,7 @@ class LibContentView extends React.Component {
<LibContentContainer <LibContentContainer
pathPrefix={this.props.pathPrefix} pathPrefix={this.props.pathPrefix}
isTreePanelShown={this.state.isTreePanelShown} isTreePanelShown={this.state.isTreePanelShown}
toggleTreePanel={this.toggleTreePanel}
currentMode={this.state.currentMode} currentMode={this.state.currentMode}
path={this.state.path} path={this.state.path}
pathExist={this.state.pathExist} pathExist={this.state.pathExist}