refactor: Standardize document and folder identification with a new entryKey module.

This commit is contained in:
2025-11-24 23:13:11 +01:00
parent 096c377897
commit 22f0c040a2
12 changed files with 146 additions and 202 deletions
+13 -14
View File
@@ -1,14 +1,13 @@
import { useCallback, useMemo, useState } from 'react';
import type { Dispatch, MutableRefObject, SetStateAction } from 'react';
import { createRootNode, DEFAULT_FOLDER_NAME } from '../../app/workspaceUtils';
import {
DEFAULT_FOLDER_NAME,
createRootNode,
getRowId,
isDocumentRowKey,
isFolderRowKey,
resolveDocumentRowKey,
resolveFolderRowKey,
} from '../../app/workspaceUtils';
getEntryId,
isDocumentEntry,
isFolderEntry,
createDocumentEntryKey,
createFolderEntryKey,
} from '../../app/entryKey';
type Identifier = string | number;
type FolderId = Identifier | 'root';
@@ -118,12 +117,12 @@ const useFolderTree = ({
setCurrentFolder(folderInfo);
const availableDocKeys = docs
.map((doc) => resolveDocumentRowKey(doc?.id as Identifier))
.map((doc) => createDocumentEntryKey(doc?.id as Identifier))
.filter(Boolean);
const availableDocKeySet = new Set(availableDocKeys);
const availableFolderKeys = new Set(
subfolders
.map((folder) => resolveFolderRowKey(folder?.id as Identifier))
.map((folder) => createFolderEntryKey(folder?.id as Identifier))
.filter(Boolean),
);
@@ -132,22 +131,22 @@ const useFolderTree = ({
setSelectedEntries((previous) => {
const previousFolderKeys = previous
.filter(isFolderRowKey)
.filter(isFolderEntry)
.filter((key) => availableFolderKeys.has(key));
const previousDocKeys = previous.filter(isDocumentRowKey);
const previousDocKeys = previous.filter(isDocumentEntry);
nextDocKeys = previousDocKeys.filter((key) => availableDocKeySet.has(key));
mergedSelection = [...previousFolderKeys, ...nextDocKeys];
return mergedSelection;
});
const nextFocus = (() => {
const currentFocusedKey = resolveDocumentRowKey(focusedDocumentId);
const currentFocusedKey = createDocumentEntryKey(focusedDocumentId);
if (currentFocusedKey && availableDocKeySet.has(currentFocusedKey)) {
return focusedDocumentId;
}
if (nextDocKeys.length) {
const lastDocKey = nextDocKeys[nextDocKeys.length - 1];
return getRowId(lastDocKey) || null;
return getEntryId(lastDocKey) || null;
}
return null;
})();