diff --git a/frontend/src/components/dialog/move-dirent-dialog.js b/frontend/src/components/dialog/move-dirent-dialog.js index 014e5852cf..889d1fdb6d 100644 --- a/frontend/src/components/dialog/move-dirent-dialog.js +++ b/frontend/src/components/dialog/move-dirent-dialog.js @@ -95,7 +95,7 @@ class MoveDirent extends React.Component { return; } - this.props.onItemsMove(repo, selectedPath); + this.props.onItemsMove(repo, selectedPath, true); this.toggle(); }; @@ -131,7 +131,7 @@ class MoveDirent extends React.Component { 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(); }; diff --git a/frontend/src/components/file-chooser/recently-used-list-item.js b/frontend/src/components/file-chooser/recently-used-list-item.js index d73f2bebab..b92bbbb99b 100644 --- a/frontend/src/components/file-chooser/recently-used-list-item.js +++ b/frontend/src/components/file-chooser/recently-used-list-item.js @@ -1,7 +1,12 @@ import React from 'react'; +import { Utils } from '../../utils/utils'; 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 = () => { onItemClick(item.repo, item.path); diff --git a/frontend/src/components/file-chooser/recently-used-list-view.js b/frontend/src/components/file-chooser/recently-used-list-view.js index 18ff113cfb..74d77ad20b 100644 --- a/frontend/src/components/file-chooser/recently-used-list-view.js +++ b/frontend/src/components/file-chooser/recently-used-list-view.js @@ -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'; -const RecentlyUsedListView = ({ recentlyUsedList, onDirentItemClick }) => { +const RecentlyUsedListView = ({ currentRepoInfo, repoList, onDirentItemClick }) => { 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) => { setSelectedItem(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; diff --git a/frontend/src/components/file-chooser/repo-list-wrapper.js b/frontend/src/components/file-chooser/repo-list-wrapper.js index ff4b38aad2..7e5586fa50 100644 --- a/frontend/src/components/file-chooser/repo-list-wrapper.js +++ b/frontend/src/components/file-chooser/repo-list-wrapper.js @@ -23,18 +23,6 @@ const RepoListWrapper = (props) => { searchStatus, searchResults, onSearchedItemClick, onSearchedItemDoubleClick, selectedSearchedRepo, newFolderName } = props; - const renderRecentlyUsed = () => { - const recentlyUsedList = JSON.parse(localStorage.getItem('recently-used-list')) || []; - return ( -
- -
- ); - }; - const onScroll = (event) => { event.stopPropagation(); }; @@ -164,7 +152,15 @@ const RepoListWrapper = (props) => { /> )} - {mode === MODE_TYPE_MAP.RECENTLY_USED && renderRecentlyUsed()} + {mode === MODE_TYPE_MAP.RECENTLY_USED && ( +
+ +
+ )} {mode === MODE_TYPE_MAP.SEARCH_RESULTS && (
{renderSearchResults()} diff --git a/frontend/src/pages/lib-content-view/lib-content-view.js b/frontend/src/pages/lib-content-view/lib-content-view.js index 29f0a5a4a3..0644616056 100644 --- a/frontend/src/pages/lib-content-view/lib-content-view.js +++ b/frontend/src/pages/lib-content-view/lib-content-view.js @@ -740,7 +740,7 @@ class LibContentView extends React.Component { updateRecentlyUsedRepos = (repo, destPath) => { 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 filteredRecentlyUsed = updatedRecentlyUsed.filter(item => { @@ -760,7 +760,7 @@ class LibContentView extends React.Component { }; // toolbar operations - onMoveItems = (destRepo, destDirentPath) => { + onMoveItems = (destRepo, destDirentPath, moveByDialog = false) => { let repoID = this.props.repoID; let selectedDirentList = this.state.selectedDirentList; @@ -798,7 +798,9 @@ class LibContentView extends React.Component { toaster.success(message); } - this.updateRecentlyUsedRepos(destRepo, destDirentPath); + if (moveByDialog) { + this.updateRecentlyUsedRepos(destRepo, destDirentPath); + } }).catch((error) => { if (!error.response.data.lib_need_decrypt) { @@ -1242,7 +1244,7 @@ class LibContentView extends React.Component { }; // list operations - onMoveItem = (destRepo, dirent, moveToDirentPath, nodeParentPath) => { + onMoveItem = (destRepo, dirent, moveToDirentPath, nodeParentPath, moveByDialog = false) => { this.updateCurrentNotExistDirent(dirent); let repoID = this.props.repoID; // just for view list state @@ -1287,7 +1289,9 @@ class LibContentView extends React.Component { toaster.success(message); } - this.updateRecentlyUsedRepos(destRepo, moveToDirentPath); + if (moveByDialog) { + this.updateRecentlyUsedRepos(destRepo, moveToDirentPath); + } }).catch((error) => { if (!error.response.data.lib_need_decrypt) {