From 142f3882bb30b50a990ad8c718e8d66bcdd14214 Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Thu, 20 Jun 2024 11:06:47 +0300 Subject: [PATCH] Fix folder naming --- rsconcept/frontend/src/context/LibraryContext.tsx | 3 ++- rsconcept/frontend/src/models/FolderTree.ts | 4 +++- rsconcept/frontend/src/utils/labels.ts | 15 ++++++++++----- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/rsconcept/frontend/src/context/LibraryContext.tsx b/rsconcept/frontend/src/context/LibraryContext.tsx index 48e81743..16e2c11d 100644 --- a/rsconcept/frontend/src/context/LibraryContext.tsx +++ b/rsconcept/frontend/src/context/LibraryContext.tsx @@ -77,11 +77,12 @@ export const LibraryState = ({ children }: LibraryStateProps) => { const [cachedTemplates, setCachedTemplates] = useState([]); const folders = useMemo(() => { - const result = new FolderTree(items.map(item => item.location)); + const result = new FolderTree(); result.addPath(LocationHead.USER, 0); result.addPath(LocationHead.COMMON, 0); result.addPath(LocationHead.LIBRARY, 0); result.addPath(LocationHead.PROJECTS, 0); + items.forEach(item => result.addPath(item.location)); return result; }, [items]); diff --git a/rsconcept/frontend/src/models/FolderTree.ts b/rsconcept/frontend/src/models/FolderTree.ts index ca9d6702..d60a7fe4 100644 --- a/rsconcept/frontend/src/models/FolderTree.ts +++ b/rsconcept/frontend/src/models/FolderTree.ts @@ -102,7 +102,9 @@ export class FolderTree { private visitNode(target: FolderNode, result: FolderNode[]) { result.push(target); - target.children.forEach(child => this.visitNode(child, result)); + [...target.children.keys()] + .sort((a, b) => a.localeCompare(b)) + .forEach(key => this.visitNode(target.children.get(key)!, result)); } addPath(path: string, filesCount: number = 1): FolderNode { diff --git a/rsconcept/frontend/src/utils/labels.ts b/rsconcept/frontend/src/utils/labels.ts index 7f5f267b..ce766cf7 100644 --- a/rsconcept/frontend/src/utils/labels.ts +++ b/rsconcept/frontend/src/utils/labels.ts @@ -8,6 +8,7 @@ import { GraphLayout } from '@/components/ui/GraphUI'; import { FolderNode } from '@/models/FolderTree'; import { GramData, Grammeme, ReferenceType } from '@/models/language'; import { AccessPolicy, LibraryItemType, LocationHead } from '@/models/library'; +import { validateLocation } from '@/models/libraryAPI'; import { CstMatchMode, DependencyMode, GraphColoring, GraphSizing, HelpTopic } from '@/models/miscellaneous'; import { CstClass, CstType, ExpressionStatus, IConstituenta, IRSForm } from '@/models/rsform'; import { @@ -271,10 +272,10 @@ export function describeCstSource(mode: DependencyMode): string { export function labelLocationHead(head: LocationHead): string { // prettier-ignore switch (head) { - case LocationHead.USER: return 'личные (/U)'; - case LocationHead.COMMON: return 'общие (/S)'; - case LocationHead.LIBRARY: return 'примеры (/L)'; - case LocationHead.PROJECTS: return 'проекты (/P)'; + case LocationHead.USER: return '/U : личные'; + case LocationHead.COMMON: return '/S : общие'; + case LocationHead.LIBRARY: return '/L : примеры'; + case LocationHead.PROJECTS: return '/P : проекты'; } } @@ -825,7 +826,11 @@ export function describeAccessMode(mode: UserLevel): string { * Retrieves label for {@link FolderNode}. */ export function labelFolderNode(node: FolderNode): string { - return node.text; + if (node.parent || !validateLocation('/' + node.text)) { + return node.text; + } else { + return labelLocationHead(('/' + node.text) as LocationHead); + } } /**