mirror of
https://github.com/kmc7468/arkvault.git
synced 2026-02-04 08:06:56 +00:00
하위 카테고리의 파일 표시 여부를 기억하도록 개선
This commit is contained in:
@@ -25,6 +25,7 @@ interface CategoryInfo {
|
||||
parentId: CategoryId;
|
||||
name: string;
|
||||
files: { id: number; isRecursive: boolean }[];
|
||||
isFileRecursive: boolean;
|
||||
}
|
||||
|
||||
const filesystem = new Dexie("filesystem") as Dexie & {
|
||||
@@ -33,11 +34,21 @@ const filesystem = new Dexie("filesystem") as Dexie & {
|
||||
category: EntityTable<CategoryInfo, "id">;
|
||||
};
|
||||
|
||||
filesystem.version(2).stores({
|
||||
directory: "id, parentId",
|
||||
file: "id, parentId",
|
||||
category: "id, parentId",
|
||||
});
|
||||
filesystem
|
||||
.version(3)
|
||||
.stores({
|
||||
directory: "id, parentId",
|
||||
file: "id, parentId",
|
||||
category: "id, parentId",
|
||||
})
|
||||
.upgrade(async (trx) => {
|
||||
await trx
|
||||
.table("category")
|
||||
.toCollection()
|
||||
.modify((category) => {
|
||||
category.isFileRecursive = false;
|
||||
});
|
||||
});
|
||||
|
||||
export const getDirectoryInfos = async (parentId: DirectoryId) => {
|
||||
return await filesystem.directory.where({ parentId }).toArray();
|
||||
@@ -87,6 +98,10 @@ export const storeCategoryInfo = async (categoryInfo: CategoryInfo) => {
|
||||
await filesystem.category.put(categoryInfo);
|
||||
};
|
||||
|
||||
export const updateCategoryInfo = async (id: number, changes: { isFileRecursive?: boolean }) => {
|
||||
await filesystem.category.update(id, changes);
|
||||
};
|
||||
|
||||
export const deleteCategoryInfo = async (id: number) => {
|
||||
await filesystem.category.delete(id);
|
||||
};
|
||||
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
getCategoryInfos as getCategoryInfosFromIndexedDB,
|
||||
getCategoryInfo as getCategoryInfoFromIndexedDB,
|
||||
storeCategoryInfo,
|
||||
updateCategoryInfo as updateCategoryInfoInIndexedDB,
|
||||
deleteCategoryInfo,
|
||||
type DirectoryId,
|
||||
type CategoryId,
|
||||
@@ -62,6 +63,7 @@ export type CategoryInfo =
|
||||
name?: undefined;
|
||||
subCategoryIds: number[];
|
||||
files?: undefined;
|
||||
isFileRecursive?: undefined;
|
||||
}
|
||||
| {
|
||||
id: number;
|
||||
@@ -70,6 +72,7 @@ export type CategoryInfo =
|
||||
name: string;
|
||||
subCategoryIds: number[];
|
||||
files: { id: number; isRecursive: boolean }[];
|
||||
isFileRecursive: boolean;
|
||||
};
|
||||
|
||||
const directoryInfoStore = new Map<DirectoryId, Writable<DirectoryInfo | null>>();
|
||||
@@ -255,7 +258,13 @@ const fetchCategoryInfoFromIndexedDB = async (
|
||||
info.set({ id, subCategoryIds });
|
||||
} else {
|
||||
if (!category) return;
|
||||
info.set({ id, name: category.name, subCategoryIds, files: category.files });
|
||||
info.set({
|
||||
id,
|
||||
name: category.name,
|
||||
subCategoryIds,
|
||||
files: category.files,
|
||||
isFileRecursive: category.isFileRecursive,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -288,20 +297,28 @@ const fetchCategoryInfoFromServer = async (
|
||||
|
||||
const { files }: CategoryFileListResponse = await res.json();
|
||||
const filesMapped = files.map(({ file, isRecursive }) => ({ id: file, isRecursive }));
|
||||
let isFileRecursive: boolean | undefined = undefined;
|
||||
|
||||
info.set({
|
||||
id,
|
||||
dataKey,
|
||||
dataKeyVersion: new Date(metadata!.dekVersion),
|
||||
name,
|
||||
subCategoryIds: subCategories,
|
||||
files: filesMapped,
|
||||
info.update((value) => {
|
||||
const newValue = {
|
||||
isFileRecursive: false,
|
||||
...value,
|
||||
id,
|
||||
dataKey,
|
||||
dataKeyVersion: new Date(metadata!.dekVersion),
|
||||
name,
|
||||
subCategoryIds: subCategories,
|
||||
files: filesMapped,
|
||||
};
|
||||
isFileRecursive = newValue.isFileRecursive;
|
||||
return newValue;
|
||||
});
|
||||
await storeCategoryInfo({
|
||||
id,
|
||||
parentId: metadata!.parent,
|
||||
name,
|
||||
files: filesMapped,
|
||||
isFileRecursive: isFileRecursive!,
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -327,3 +344,17 @@ export const getCategoryInfo = (categoryId: CategoryId, masterKey: CryptoKey) =>
|
||||
fetchCategoryInfo(categoryId, info, masterKey); // Intended
|
||||
return info;
|
||||
};
|
||||
|
||||
export const updateCategoryInfo = async (
|
||||
categoryId: number,
|
||||
changes: { isFileRecursive?: boolean },
|
||||
) => {
|
||||
await updateCategoryInfoInIndexedDB(categoryId, changes);
|
||||
categoryInfoStore.get(categoryId)?.update((value) => {
|
||||
if (!value) return value;
|
||||
if (changes.isFileRecursive !== undefined) {
|
||||
value.isFileRecursive = changes.isFileRecursive;
|
||||
}
|
||||
return value;
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user