From e098da2dbbe796e6a65d533cde22d6453e9ea7c0 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Tue, 13 Jan 2026 19:52:36 +0300 Subject: [PATCH] feat(filterManager): add debouced state support and move manager --- .../lib/filterManager/filterManager.svelte.ts | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) rename src/features/{FilterFonts => GetFonts}/lib/filterManager/filterManager.svelte.ts (63%) diff --git a/src/features/FilterFonts/lib/filterManager/filterManager.svelte.ts b/src/features/GetFonts/lib/filterManager/filterManager.svelte.ts similarity index 63% rename from src/features/FilterFonts/lib/filterManager/filterManager.svelte.ts rename to src/features/GetFonts/lib/filterManager/filterManager.svelte.ts index 739dc0f..28528c6 100644 --- a/src/features/FilterFonts/lib/filterManager/filterManager.svelte.ts +++ b/src/features/GetFonts/lib/filterManager/filterManager.svelte.ts @@ -1,13 +1,16 @@ import { createFilter } from '$shared/lib'; -import type { FilterGroupConfig } from '../../model/const/types/common'; +import { createDebouncedState } from '$shared/lib/helpers'; +import type { FilterConfig } from '../../model'; /** * Create a filter manager instance. */ -export function createFilterManager(configs: FilterGroupConfig[]) { +export function createFilterManager(config: FilterConfig) { + const search = createDebouncedState(config.queryValue ?? ''); + // Create filter instances upfront const groups = $state( - configs.map(config => ({ + config.groups.map(config => ({ id: config.id, label: config.label, instance: createFilter({ properties: config.properties }), @@ -20,6 +23,21 @@ export function createFilterManager(configs: FilterGroupC ); return { + // Getter for queryValue (immediate value for UI) + get queryValue() { + return search.immediate; + }, + + // Setter for queryValue + set queryValue(value) { + search.immediate = value; + }, + + // Getter for queryValue (debounced value for logic) + get debouncedQueryValue() { + return search.debounced; + }, + // Direct array reference (reactive) get groups() { return groups;