1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-05 00:43:53 +00:00
Files
seahub/frontend/src/components/file-chooser/repo-list-wrapper.jsx
Aries 69e40146c4 Improve/move dirent dialog UI (#6786)
* update move dialog and search input

* update move dialog ui

* clean up code

* update code

---------

Co-authored-by: renjie-run <rj.aiyayao@gmail.com>
2024-09-23 09:48:43 +08:00

171 lines
6.2 KiB
JavaScript

import React from 'react';
import PropTypes from 'prop-types';
import RepoListView from './repo-list-view';
import RecentlyUsedListView from './recently-used-list-view';
import { gettext } from '../../utils/constants';
export const MODE_TYPE_MAP = {
CURRENT_AND_OTHER_REPOS: 'current_repo_and_other_repos',
ONLY_CURRENT_LIBRARY: 'only_current_library',
ONLY_ALL_REPOS: 'only_all_repos',
ONLY_OTHER_LIBRARIES: 'only_other_libraries',
RECENTLY_USED: 'recently_used',
};
const RepoListWrapper = (props) => {
const {
mode, isShowFile, fileSuffixes, currentPath, isBrowsing, browsingPath, isCurrentRepoShow, currentRepoInfo, selectedRepo,
selectedPath, isOtherRepoShow, selectedItemInfo, repoList,
} = props;
const renderRecentlyUsed = () => {
const recentlyUsedList = JSON.parse(localStorage.getItem('recently-used-list')) || [];
return (
<div className="list-view">
<RecentlyUsedListView
recentlyUsedList={recentlyUsedList}
onDirentItemClick={props.handleClickDirent}
/>
</div>
);
};
const onScroll = (event) => {
event.stopPropagation();
};
return (
<div className='file-chooser-scroll-wrapper' onScroll={onScroll}>
<div className="file-chooser-container user-select-none">
{mode === MODE_TYPE_MAP.CURRENT_AND_OTHER_REPOS && (
<>
<div className="list-view">
<div className="file-chooser-list-view-header">
<span className={`item-toggle sf3-font ${isCurrentRepoShow ? 'sf3-font-down' : 'sf3-font-down rotate-270 d-inline-block'}`} onClick={props.onCurrentRepoToggle}></span>
<span className="library">{gettext('Current Library')}</span>
</div>
{(isCurrentRepoShow && currentRepoInfo) &&
<RepoListView
initToShowChildren
currentRepoInfo={currentRepoInfo}
currentPath={currentPath}
selectedRepo={selectedRepo}
selectedPath={selectedPath}
isShowFile={isShowFile}
fileSuffixes={fileSuffixes}
selectedItemInfo={selectedItemInfo}
onRepoItemClick={props.handleClickRepo}
onDirentItemClick={props.handleClickDirent}
/>
}
</div>
<div className="list-view">
<div className="file-chooser-list-view-header">
<span className={`item-toggle sf3-font ${isOtherRepoShow ? 'sf3-font-down' : 'sf3-font-down rotate-270 d-inline-block'}`} onClick={props.onOtherRepoToggle}></span>
<span className="library">{gettext('Other Libraries')}</span>
</div>
{isOtherRepoShow &&
<RepoListView
initToShowChildren
repoList={repoList}
selectedRepo={selectedRepo}
selectedPath={selectedPath}
isShowFile={isShowFile}
fileSuffixes={fileSuffixes}
selectedItemInfo={selectedItemInfo}
onRepoItemClick={props.handleClickRepo}
onDirentItemClick={props.handleClickDirent}
/>
}
</div>
</>
)}
{mode === MODE_TYPE_MAP.ONLY_CURRENT_LIBRARY && (
<div className="list-view">
<RepoListView
initToShowChildren
currentRepoInfo={currentRepoInfo}
currentPath={currentPath}
selectedRepo={selectedRepo}
selectedPath={selectedPath}
isShowFile={isShowFile}
fileSuffixes={fileSuffixes}
selectedItemInfo={selectedItemInfo}
isBrowsing={isBrowsing}
browsingPath={browsingPath}
onRepoItemClick={props.handleClickRepo}
onDirentItemClick={props.handleClickDirent}
/>
</div>
)}
{mode === MODE_TYPE_MAP.ONLY_ALL_REPOS && (
<div className="file-chooser-container">
<div className="list-view">
<div className="file-chooser-list-view-header">
<span className="item-toggle sf3-font sf3-font-down"></span>
<span className="library">{gettext('Libraries')}</span>
</div>
<RepoListView
initToShowChildren={false}
repoList={repoList}
selectedRepo={selectedRepo}
selectedPath={selectedPath}
isShowFile={isShowFile}
fileSuffixes={fileSuffixes}
selectedItemInfo={selectedItemInfo}
onRepoItemClick={props.handleClickRepo}
onDirentItemClick={props.handleClickDirent}
/>
</div>
</div>
)}
{mode === MODE_TYPE_MAP.ONLY_OTHER_LIBRARIES && (
<div className="list-view">
<RepoListView
initToShowChildren={false}
repoList={repoList}
selectedRepo={selectedRepo}
selectedPath={selectedPath}
isShowFile={isShowFile}
fileSuffixes={fileSuffixes}
selectedItemInfo={selectedItemInfo}
isBrowsing={isBrowsing}
browsingPath={browsingPath}
onRepoItemClick={props.handleClickRepo}
onDirentItemClick={props.handleClickDirent}
/>
</div>
)}
{mode === MODE_TYPE_MAP.RECENTLY_USED && renderRecentlyUsed()}
</div>
</div>
);
};
RepoListWrapper.propTypes = {
mode: PropTypes.string,
currentPath: PropTypes.string,
isShowFile: PropTypes.bool,
fileSuffixes: PropTypes.array,
isBrowsing: PropTypes.bool,
browsingPath: PropTypes.string,
selectedItemInfo: PropTypes.object,
currentRepoInfo: PropTypes.object,
selectedRepo: PropTypes.object,
isCurrentRepoShow: PropTypes.bool,
isOtherRepoShow: PropTypes.bool,
selectedPath: PropTypes.string,
repoList: PropTypes.array,
onCurrentRepoToggle: PropTypes.func,
onOtherRepoToggle: PropTypes.func,
handleClickRepo: PropTypes.func,
handleClickDirent: PropTypes.func,
};
RepoListWrapper.defaultProps = {
isShowFile: false,
fileSuffixes: [],
};
export default RepoListWrapper;