즐겨찾기 검색 필터를 재귀적으로 동작하도록 변경

This commit is contained in:
static
2026-01-18 16:16:38 +09:00
parent 2f6d35c335
commit 3b0cfd5a92
5 changed files with 112 additions and 41 deletions

View File

@@ -37,8 +37,8 @@
includeImages: false,
includeVideos: false,
includeDirectories: false,
searchInFavorites: false,
searchInDirectory: false,
searchInFavorites: false,
categories: [],
});
let hasCategoryFilter = $derived(filters.categories.length > 0);
@@ -47,7 +47,6 @@
filters.includeImages ||
filters.includeVideos ||
filters.includeDirectories ||
filters.searchInFavorites ||
filters.name.trim().length > 0,
);
@@ -84,9 +83,7 @@
return sortEntries(
[...directories, ...files].filter(
(entry) =>
(!nameFilter || searchString(entry.name, nameFilter)) &&
(!filters.searchInFavorites || entry.isFavorite),
(entry) => !nameFilter || searchString(entry.name, nameFilter),
),
);
});
@@ -145,6 +142,7 @@
// Svelte sucks
hasAnyFilter;
filters.searchInDirectory;
filters.searchInFavorites;
filters.categories.length;
if (untrack(() => isRestoredFromSnapshot)) {
@@ -156,6 +154,7 @@
requestSearch(
{
ancestorId: filters.searchInDirectory ? data.directoryId! : "root",
inFavorites: filters.searchInFavorites,
categories: filters.categories,
},
$masterKeyStore?.get(1)?.key!,
@@ -216,7 +215,12 @@
</div>
{#if hasAnyFilter}
<div class="flex flex-grow flex-col space-y-2 bg-white p-4">
<p class="text-lg font-bold text-gray-800">검색 결과</p>
<p class="text-lg font-bold text-gray-800">
검색 결과
{#if result.length > 0}
{" "}({result.length}개)
{/if}
</p>
{#if result.length > 0}
<RowVirtualizer
count={result.length}

View File

@@ -10,6 +10,7 @@ import { trpc } from "$trpc/client";
export interface SearchFilter {
ancestorId: DirectoryId;
inFavorites: boolean;
categories: { info: LocalCategoryInfo; type: "include" | "exclude" }[];
}
@@ -21,6 +22,7 @@ export interface SearchResult {
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),