mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-26 13:00:39 +03:00
Refactor location naming
This commit is contained in:
parent
de2c73efd4
commit
04e108df11
|
@ -3,8 +3,8 @@ import { useIntl } from 'react-intl';
|
||||||
|
|
||||||
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
|
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
|
||||||
import SearchBar from '@/components/ui/SearchBar';
|
import SearchBar from '@/components/ui/SearchBar';
|
||||||
import { useLibrary } from '@/context/LibraryContext';
|
|
||||||
import { useConceptOptions } from '@/context/ConceptOptionsContext';
|
import { useConceptOptions } from '@/context/ConceptOptionsContext';
|
||||||
|
import { useLibrary } from '@/context/LibraryContext';
|
||||||
import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library';
|
import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library';
|
||||||
import { ILibraryFilter } from '@/models/miscellaneous';
|
import { ILibraryFilter } from '@/models/miscellaneous';
|
||||||
|
|
||||||
|
|
|
@ -92,8 +92,8 @@ export const LibraryState = ({ children }: LibraryStateProps) => {
|
||||||
if (!filter.folderMode && filter.head) {
|
if (!filter.folderMode && filter.head) {
|
||||||
result = result.filter(item => item.location.startsWith(filter.head!));
|
result = result.filter(item => item.location.startsWith(filter.head!));
|
||||||
}
|
}
|
||||||
if (filter.folderMode && filter.folder) {
|
if (filter.folderMode && filter.location) {
|
||||||
result = result.filter(item => item.location == filter.folder);
|
result = result.filter(item => item.location == filter.location);
|
||||||
}
|
}
|
||||||
if (filter.type) {
|
if (filter.type) {
|
||||||
result = result.filter(item => item.item_type === filter.type);
|
result = result.filter(item => item.item_type === filter.type);
|
||||||
|
|
|
@ -144,11 +144,10 @@ export interface ILibraryFilter {
|
||||||
type?: LibraryItemType;
|
type?: LibraryItemType;
|
||||||
query?: string;
|
query?: string;
|
||||||
|
|
||||||
|
folderMode?: boolean;
|
||||||
path?: string;
|
path?: string;
|
||||||
head?: LocationHead;
|
head?: LocationHead;
|
||||||
|
location?: string;
|
||||||
folderMode?: boolean;
|
|
||||||
folder?: string;
|
|
||||||
|
|
||||||
isVisible?: boolean;
|
isVisible?: boolean;
|
||||||
isOwned?: boolean;
|
isOwned?: boolean;
|
||||||
|
|
|
@ -14,7 +14,7 @@ import { toggleTristateFlag } from '@/utils/utils';
|
||||||
|
|
||||||
import TableLibraryItems from './TableLibraryItems';
|
import TableLibraryItems from './TableLibraryItems';
|
||||||
import ToolbarSearch from './ToolbarSearch';
|
import ToolbarSearch from './ToolbarSearch';
|
||||||
import ViewSideFolders from './ViewSideFolders';
|
import ViewSideLocation from './ViewSideLocation';
|
||||||
|
|
||||||
function LibraryPage() {
|
function LibraryPage() {
|
||||||
const library = useLibrary();
|
const library = useLibrary();
|
||||||
|
@ -26,7 +26,7 @@ function LibraryPage() {
|
||||||
|
|
||||||
const [head, setHead] = useLocalStorage<LocationHead | undefined>(storage.librarySearchHead, undefined);
|
const [head, setHead] = useLocalStorage<LocationHead | undefined>(storage.librarySearchHead, undefined);
|
||||||
const [folderMode, setFolderMode] = useLocalStorage<boolean>(storage.librarySearchFolderMode, true);
|
const [folderMode, setFolderMode] = useLocalStorage<boolean>(storage.librarySearchFolderMode, true);
|
||||||
const [folder, setFolder] = useLocalStorage<string>(storage.librarySearchFolder, '');
|
const [location, setLocation] = useLocalStorage<string>(storage.librarySearchLocation, '');
|
||||||
const [isVisible, setIsVisible] = useLocalStorage<boolean | undefined>(storage.librarySearchVisible, true);
|
const [isVisible, setIsVisible] = useLocalStorage<boolean | undefined>(storage.librarySearchVisible, true);
|
||||||
const [isSubscribed, setIsSubscribed] = useLocalStorage<boolean | undefined>(
|
const [isSubscribed, setIsSubscribed] = useLocalStorage<boolean | undefined>(
|
||||||
storage.librarySearchSubscribed,
|
storage.librarySearchSubscribed,
|
||||||
|
@ -45,9 +45,9 @@ function LibraryPage() {
|
||||||
isSubscribed: user ? isSubscribed : undefined,
|
isSubscribed: user ? isSubscribed : undefined,
|
||||||
isVisible: user ? isVisible : true,
|
isVisible: user ? isVisible : true,
|
||||||
folderMode: folderMode,
|
folderMode: folderMode,
|
||||||
folder: folder
|
location: location
|
||||||
}),
|
}),
|
||||||
[head, path, query, isEditor, isOwned, isSubscribed, isVisible, user, folderMode, folder]
|
[head, path, query, isEditor, isOwned, isSubscribed, isVisible, user, folderMode, location]
|
||||||
);
|
);
|
||||||
|
|
||||||
const hasCustomFilter = useMemo(
|
const hasCustomFilter = useMemo(
|
||||||
|
@ -59,7 +59,7 @@ function LibraryPage() {
|
||||||
filter.isOwned !== undefined ||
|
filter.isOwned !== undefined ||
|
||||||
filter.isSubscribed !== undefined ||
|
filter.isSubscribed !== undefined ||
|
||||||
filter.isVisible !== true ||
|
filter.isVisible !== true ||
|
||||||
!!filter.folder,
|
!!filter.location,
|
||||||
[filter]
|
[filter]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -81,13 +81,13 @@ function LibraryPage() {
|
||||||
setIsSubscribed(undefined);
|
setIsSubscribed(undefined);
|
||||||
setIsOwned(undefined);
|
setIsOwned(undefined);
|
||||||
setIsEditor(undefined);
|
setIsEditor(undefined);
|
||||||
setFolder('');
|
setLocation('');
|
||||||
}, [setHead, setIsVisible, setIsSubscribed, setIsOwned, setIsEditor, setFolder]);
|
}, [setHead, setIsVisible, setIsSubscribed, setIsOwned, setIsEditor, setLocation]);
|
||||||
|
|
||||||
const view = useMemo(
|
const viewLibrary = useMemo(
|
||||||
() => (
|
() => (
|
||||||
<TableLibraryItems
|
<TableLibraryItems
|
||||||
resetQuery={resetFilter} // prettier: split lines
|
resetQuery={resetFilter}
|
||||||
items={items}
|
items={items}
|
||||||
folderMode={folderMode}
|
folderMode={folderMode}
|
||||||
toggleFolderMode={toggleFolderMode}
|
toggleFolderMode={toggleFolderMode}
|
||||||
|
@ -96,6 +96,18 @@ function LibraryPage() {
|
||||||
[resetFilter, items, folderMode, toggleFolderMode]
|
[resetFilter, items, folderMode, toggleFolderMode]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const viewLocations = useMemo(
|
||||||
|
() => (
|
||||||
|
<ViewSideLocation
|
||||||
|
active={location}
|
||||||
|
setActive={setLocation}
|
||||||
|
folderTree={library.folders}
|
||||||
|
toggleFolderMode={toggleFolderMode}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
[location, library.folders, setLocation, toggleFolderMode]
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DataLoader
|
<DataLoader
|
||||||
id='library-page' // prettier: split lines
|
id='library-page' // prettier: split lines
|
||||||
|
@ -127,17 +139,8 @@ function LibraryPage() {
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div className='flex'>
|
<div className='flex'>
|
||||||
<AnimatePresence initial={false}>
|
<AnimatePresence initial={false}>{folderMode ? viewLocations : null}</AnimatePresence>
|
||||||
{folderMode ? (
|
{viewLibrary}
|
||||||
<ViewSideFolders
|
|
||||||
currentFolder={folder} // prettier: split-lines
|
|
||||||
setFolder={setFolder}
|
|
||||||
folders={library.folders}
|
|
||||||
toggleFolderMode={toggleFolderMode}
|
|
||||||
/>
|
|
||||||
) : null}
|
|
||||||
</AnimatePresence>
|
|
||||||
{view}
|
|
||||||
</div>
|
</div>
|
||||||
</DataLoader>
|
</DataLoader>
|
||||||
);
|
);
|
||||||
|
|
|
@ -161,7 +161,7 @@ function TableLibraryItems({ items, resetQuery, folderMode, toggleFolderMode }:
|
||||||
columns={columns}
|
columns={columns}
|
||||||
data={items}
|
data={items}
|
||||||
headPosition='0'
|
headPosition='0'
|
||||||
className={clsx('text-xs sm:text-sm cc-scroll-y', { 'border-l border-b': folderMode })}
|
className={clsx('text-xs sm:text-sm cc-scroll-y h-fit', { 'border-l border-b': folderMode })}
|
||||||
style={{ maxHeight: tableHeight }}
|
style={{ maxHeight: tableHeight }}
|
||||||
noDataComponent={
|
noDataComponent={
|
||||||
<FlexColumn className='dense p-3 items-center min-h-[6rem]'>
|
<FlexColumn className='dense p-3 items-center min-h-[6rem]'>
|
||||||
|
|
|
@ -14,14 +14,14 @@ import { animateSideView } from '@/styling/animations';
|
||||||
import { PARAMETER, prefixes } from '@/utils/constants';
|
import { PARAMETER, prefixes } from '@/utils/constants';
|
||||||
import { information } from '@/utils/labels';
|
import { information } from '@/utils/labels';
|
||||||
|
|
||||||
interface ViewSideFoldersProps {
|
interface ViewSideLocationProps {
|
||||||
folders: FolderTree;
|
folderTree: FolderTree;
|
||||||
currentFolder: string;
|
active: string;
|
||||||
setFolder: React.Dispatch<React.SetStateAction<string>>;
|
setActive: React.Dispatch<React.SetStateAction<string>>;
|
||||||
toggleFolderMode: () => void;
|
toggleFolderMode: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
function ViewSideFolders({ folders, currentFolder, setFolder, toggleFolderMode }: ViewSideFoldersProps) {
|
function ViewSideLocation({ folderTree, active, setActive: setActive, toggleFolderMode }: ViewSideLocationProps) {
|
||||||
const handleClickFolder = useCallback(
|
const handleClickFolder = useCallback(
|
||||||
(event: CProps.EventMouse, target: FolderNode) => {
|
(event: CProps.EventMouse, target: FolderNode) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
@ -32,10 +32,10 @@ function ViewSideFolders({ folders, currentFolder, setFolder, toggleFolderMode }
|
||||||
.then(() => toast.success(information.pathReady))
|
.then(() => toast.success(information.pathReady))
|
||||||
.catch(console.error);
|
.catch(console.error);
|
||||||
} else {
|
} else {
|
||||||
setFolder(target.getPath());
|
setActive(target.getPath());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[setFolder]
|
[setActive]
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -59,8 +59,8 @@ function ViewSideFolders({ folders, currentFolder, setFolder, toggleFolderMode }
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<SelectLocation
|
<SelectLocation
|
||||||
value={currentFolder}
|
value={active}
|
||||||
folderTree={folders}
|
folderTree={folderTree}
|
||||||
prefix={prefixes.folders_list}
|
prefix={prefixes.folders_list}
|
||||||
onClick={handleClickFolder}
|
onClick={handleClickFolder}
|
||||||
/>
|
/>
|
||||||
|
@ -68,4 +68,4 @@ function ViewSideFolders({ folders, currentFolder, setFolder, toggleFolderMode }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default ViewSideFolders;
|
export default ViewSideLocation;
|
|
@ -95,7 +95,7 @@ export const storage = {
|
||||||
|
|
||||||
librarySearchHead: 'library.search.head',
|
librarySearchHead: 'library.search.head',
|
||||||
librarySearchFolderMode: 'library.search.folder_mode',
|
librarySearchFolderMode: 'library.search.folder_mode',
|
||||||
librarySearchFolder: 'library.search.folder',
|
librarySearchLocation: 'library.search.location',
|
||||||
librarySearchVisible: 'library.search.visible',
|
librarySearchVisible: 'library.search.visible',
|
||||||
librarySearchOwned: 'library.search.owned',
|
librarySearchOwned: 'library.search.owned',
|
||||||
librarySearchSubscribed: 'library.search.subscribed',
|
librarySearchSubscribed: 'library.search.subscribed',
|
||||||
|
|
Loading…
Reference in New Issue
Block a user