mirror of
https://github.com/kmc7468/arkvault.git
synced 2026-03-22 07:16:55 +09:00
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import {
|
|
getDirectoryInfo,
|
|
getFileInfo,
|
|
type LocalDirectoryInfo,
|
|
type FileInfo,
|
|
type LocalCategoryInfo,
|
|
} from "$lib/modules/filesystem";
|
|
import { HybridPromise } from "$lib/utils";
|
|
import { trpc } from "$trpc/client";
|
|
|
|
export interface SearchFilter {
|
|
ancestorId: DirectoryId;
|
|
inFavorites: boolean;
|
|
categories: { info: LocalCategoryInfo; type: "include" | "exclude" }[];
|
|
}
|
|
|
|
export interface SearchResult {
|
|
directories: LocalDirectoryInfo[];
|
|
files: FileInfo[];
|
|
}
|
|
|
|
export const requestSearch = async (filter: SearchFilter, masterKey: CryptoKey) => {
|
|
const { directories: directoriesRaw, files: filesRaw } = await trpc().search.search.query({
|
|
ancestor: filter.ancestorId,
|
|
inFavorites: filter.inFavorites,
|
|
includeCategories: filter.categories
|
|
.filter(({ type }) => type === "include")
|
|
.map(({ info }) => info.id),
|
|
excludeCategories: filter.categories
|
|
.filter(({ type }) => type === "exclude")
|
|
.map(({ info }) => info.id),
|
|
});
|
|
const [directories, files] = await HybridPromise.all([
|
|
HybridPromise.all(
|
|
directoriesRaw.map((directory) =>
|
|
getDirectoryInfo(directory.id, masterKey, { serverResponse: directory }),
|
|
),
|
|
),
|
|
HybridPromise.all(
|
|
filesRaw.map((file) => getFileInfo(file.id, masterKey, { serverResponse: file })),
|
|
),
|
|
]);
|
|
return { directories, files } as SearchResult;
|
|
};
|