1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-02 15:38:15 +00:00

show repos who are used in dialog recently (#7001)

* show repos who are used in dialog recently

* optimize code

* update RecentlyUsedListView props

---------

Co-authored-by: zhouwenxuan <aries@Mac.local>
This commit is contained in:
Aries
2024-11-09 16:48:46 +08:00
committed by GitHub
parent f316cbd2a8
commit a6fea93637
5 changed files with 51 additions and 23 deletions

View File

@@ -95,7 +95,7 @@ class MoveDirent extends React.Component {
return; return;
} }
this.props.onItemsMove(repo, selectedPath); this.props.onItemsMove(repo, selectedPath, true);
this.toggle(); this.toggle();
}; };
@@ -131,7 +131,7 @@ class MoveDirent extends React.Component {
return; return;
} }
this.props.onItemMove(repo, this.props.dirent, selectedPath, this.props.path); this.props.onItemMove(repo, this.props.dirent, selectedPath, this.props.path, true);
this.toggle(); this.toggle();
}; };

View File

@@ -1,7 +1,12 @@
import React from 'react'; import React from 'react';
import { Utils } from '../../utils/utils';
const RecentlyUsedListItem = ({ item, isSelected, onItemClick }) => { const RecentlyUsedListItem = ({ item, isSelected, onItemClick }) => {
const title = item.path === '/' ? item.path : item.path.split('/').pop(); if (!item || typeof item.path !== 'string') {
return '';
}
const title = Utils.getFileName(item.path);
const handleItemClick = () => { const handleItemClick = () => {
onItemClick(item.repo, item.path); onItemClick(item.repo, item.path);

View File

@@ -1,9 +1,26 @@
import React, { useState } from 'react'; import React, { useState, useMemo } from 'react';
import PropTypes from 'prop-types';
import RecentlyUsedListItem from './recently-used-list-item'; import RecentlyUsedListItem from './recently-used-list-item';
const RecentlyUsedListView = ({ recentlyUsedList, onDirentItemClick }) => { const RecentlyUsedListView = ({ currentRepoInfo, repoList, onDirentItemClick }) => {
const [selectedItem, setSelectedItem] = useState(null); const [selectedItem, setSelectedItem] = useState(null);
const recentlyUsedList = useMemo(() => {
const list = JSON.parse(localStorage.getItem('recently-used-list')) || [];
const allRepos = [...repoList, currentRepoInfo];
// list: [{repo_id: 'xxx', path: 'xxx'}, ...], replace repo_id with repo object
return list
.map(item => {
const repo = allRepos.find(repo => repo.repo_id === item.repo_id);
if (repo) {
return { path: item.path, repo: repo };
}
return null;
})
.filter(item => item !== null);
}, [currentRepoInfo, repoList]);
const onItemClick = (repo, path) => { const onItemClick = (repo, path) => {
setSelectedItem(path); setSelectedItem(path);
onDirentItemClick(repo, path); onDirentItemClick(repo, path);
@@ -25,4 +42,10 @@ const RecentlyUsedListView = ({ recentlyUsedList, onDirentItemClick }) => {
); );
}; };
RecentlyUsedListView.propTypes = {
currentRepoInfo: PropTypes.object.isRequired,
repoList: PropTypes.array.isRequired,
onDirentItemClick: PropTypes.func.isRequired,
};
export default RecentlyUsedListView; export default RecentlyUsedListView;

View File

@@ -23,18 +23,6 @@ const RepoListWrapper = (props) => {
searchStatus, searchResults, onSearchedItemClick, onSearchedItemDoubleClick, selectedSearchedRepo, newFolderName searchStatus, searchResults, onSearchedItemClick, onSearchedItemDoubleClick, selectedSearchedRepo, newFolderName
} = props; } = 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) => { const onScroll = (event) => {
event.stopPropagation(); event.stopPropagation();
}; };
@@ -164,7 +152,15 @@ const RepoListWrapper = (props) => {
/> />
</div> </div>
)} )}
{mode === MODE_TYPE_MAP.RECENTLY_USED && renderRecentlyUsed()} {mode === MODE_TYPE_MAP.RECENTLY_USED && (
<div className="list-view">
<RecentlyUsedListView
currentRepoInfo={currentRepoInfo}
repoList={repoList}
onDirentItemClick={props.handleClickDirent}
/>
</div>
)}
{mode === MODE_TYPE_MAP.SEARCH_RESULTS && ( {mode === MODE_TYPE_MAP.SEARCH_RESULTS && (
<div className="list-view"> <div className="list-view">
{renderSearchResults()} {renderSearchResults()}

View File

@@ -740,7 +740,7 @@ class LibContentView extends React.Component {
updateRecentlyUsedRepos = (repo, destPath) => { updateRecentlyUsedRepos = (repo, destPath) => {
const recentlyUsed = JSON.parse(localStorage.getItem('recently-used-list')) || []; const recentlyUsed = JSON.parse(localStorage.getItem('recently-used-list')) || [];
const updatedRecentlyUsed = [{ repo: repo, path: destPath }, ...recentlyUsed.filter(item => item.path !== destPath)]; const updatedRecentlyUsed = [{ repo_id: repo.repo_id, path: destPath }, ...recentlyUsed.filter(item => item.path !== destPath)];
const seen = new Set(); const seen = new Set();
const filteredRecentlyUsed = updatedRecentlyUsed.filter(item => { const filteredRecentlyUsed = updatedRecentlyUsed.filter(item => {
@@ -760,7 +760,7 @@ class LibContentView extends React.Component {
}; };
// toolbar operations // toolbar operations
onMoveItems = (destRepo, destDirentPath) => { onMoveItems = (destRepo, destDirentPath, moveByDialog = false) => {
let repoID = this.props.repoID; let repoID = this.props.repoID;
let selectedDirentList = this.state.selectedDirentList; let selectedDirentList = this.state.selectedDirentList;
@@ -798,7 +798,9 @@ class LibContentView extends React.Component {
toaster.success(message); toaster.success(message);
} }
this.updateRecentlyUsedRepos(destRepo, destDirentPath); if (moveByDialog) {
this.updateRecentlyUsedRepos(destRepo, destDirentPath);
}
}).catch((error) => { }).catch((error) => {
if (!error.response.data.lib_need_decrypt) { if (!error.response.data.lib_need_decrypt) {
@@ -1242,7 +1244,7 @@ class LibContentView extends React.Component {
}; };
// list operations // list operations
onMoveItem = (destRepo, dirent, moveToDirentPath, nodeParentPath) => { onMoveItem = (destRepo, dirent, moveToDirentPath, nodeParentPath, moveByDialog = false) => {
this.updateCurrentNotExistDirent(dirent); this.updateCurrentNotExistDirent(dirent);
let repoID = this.props.repoID; let repoID = this.props.repoID;
// just for view list state // just for view list state
@@ -1287,7 +1289,9 @@ class LibContentView extends React.Component {
toaster.success(message); toaster.success(message);
} }
this.updateRecentlyUsedRepos(destRepo, moveToDirentPath); if (moveByDialog) {
this.updateRecentlyUsedRepos(destRepo, moveToDirentPath);
}
}).catch((error) => { }).catch((error) => {
if (!error.response.data.lib_need_decrypt) { if (!error.response.data.lib_need_decrypt) {