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:
@@ -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}>
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
|
@@ -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}
|
||||||
|
@@ -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}
|
||||||
|
Reference in New Issue
Block a user