diff --git a/src/features/GetFonts/index.ts b/src/features/GetFonts/index.ts index a57bb5f..5784ac7 100644 --- a/src/features/GetFonts/index.ts +++ b/src/features/GetFonts/index.ts @@ -1,19 +1,25 @@ +export { mapManagerToParams } from './lib'; + export { + /** + * Filter Manager + */ createFilterManager, type FilterManager, - mapManagerToParams, -} from './lib'; - -export { filtersStore } from './model/state/filters.svelte'; -export { filterManager } from './model/state/manager.svelte'; - -export { + filterManager, + /** + * Filter Store + */ + filtersStore, + /** + * Sort Store + */ SORT_MAP, SORT_OPTIONS, type SortApiValue, type SortOption, sortStore, -} from './model/store/sortStore.svelte'; +} from './model'; export { FilterControls, diff --git a/src/features/GetFonts/lib/index.ts b/src/features/GetFonts/lib/index.ts index e271659..1b7ac28 100644 --- a/src/features/GetFonts/lib/index.ts +++ b/src/features/GetFonts/lib/index.ts @@ -1,6 +1 @@ -export { - createFilterManager, - type FilterManager, -} from './filterManager/filterManager.svelte'; - export { mapManagerToParams } from './mapper/mapManagerToParams'; diff --git a/src/features/GetFonts/lib/mapper/mapManagerToParams.ts b/src/features/GetFonts/lib/mapper/mapManagerToParams.ts index c016683..1f7581f 100644 --- a/src/features/GetFonts/lib/mapper/mapManagerToParams.ts +++ b/src/features/GetFonts/lib/mapper/mapManagerToParams.ts @@ -1,5 +1,5 @@ import type { ProxyFontsParams } from '$entities/Font/api'; -import type { FilterManager } from '../filterManager/filterManager.svelte'; +import type { FilterManager } from '../../model'; /** * Maps filter manager to proxy API parameters. diff --git a/src/features/GetFonts/model/index.ts b/src/features/GetFonts/model/index.ts index d3ed458..bb81d5d 100644 --- a/src/features/GetFonts/model/index.ts +++ b/src/features/GetFonts/model/index.ts @@ -23,11 +23,19 @@ export { * Main filter controller */ export { + /** + * Factory for constructing a filter manager instance + */ + createFilterManager, + /** + * Reactive interface returned by `createFilterManager` + */ + type FilterManager, /** * High-level manager for syncing search and filters */ filterManager, -} from './state/manager.svelte'; +} from './state/filterManager/filterManager.svelte'; /** * Side-effect import: installs the global filterManager+sortStore → fontStore diff --git a/src/features/GetFonts/model/state/bindings.svelte.ts b/src/features/GetFonts/model/state/bindings.svelte.ts index ab17a10..b1351eb 100644 --- a/src/features/GetFonts/model/state/bindings.svelte.ts +++ b/src/features/GetFonts/model/state/bindings.svelte.ts @@ -13,8 +13,8 @@ import { fontStore } from '$entities/Font'; import { untrack } from 'svelte'; import { mapManagerToParams } from '../../lib/mapper/mapManagerToParams'; import { sortStore } from '../store/sortStore.svelte'; +import { filterManager } from './filterManager/filterManager.svelte'; import { filtersStore } from './filters.svelte'; -import { filterManager } from './manager.svelte'; $effect.root(() => { /** diff --git a/src/features/GetFonts/lib/filterManager/filterManager.svelte.ts b/src/features/GetFonts/model/state/filterManager/filterManager.svelte.ts similarity index 82% rename from src/features/GetFonts/lib/filterManager/filterManager.svelte.ts rename to src/features/GetFonts/model/state/filterManager/filterManager.svelte.ts index 4857efc..af4879c 100644 --- a/src/features/GetFonts/lib/filterManager/filterManager.svelte.ts +++ b/src/features/GetFonts/model/state/filterManager/filterManager.svelte.ts @@ -1,9 +1,12 @@ /** - * Filter manager for font filtering + * Filter manager factory and singleton. * - * Manages multiple filter groups (providers, categories, subsets) - * with debounced search input. Provides reactive state for filter - * selections and convenience methods for bulk operations. + * Owns multiple filter groups (providers, categories, subsets) plus a + * debounced search input. Provides reactive state for filter selections + * and convenience methods for bulk operations. + * + * The factory (`createFilterManager`) is exported for tests; the app + * consumes the `filterManager` singleton at the bottom of this file. * * @example * ```ts @@ -25,7 +28,7 @@ import { createDebouncedState } from '$shared/lib/helpers'; import type { FilterConfig, FilterGroupConfig, -} from '../../model'; +} from '../../types/filter'; /** * Creates a filter manager instance @@ -123,3 +126,15 @@ export function createFilterManager(config: FilterConfig< } export type FilterManager = ReturnType; + +/** + * App-wide filter manager singleton. + * + * Constructed with empty groups; the filtersStore → filterManager wiring + * lives in `./bindings.svelte` and populates groups once backend filter + * metadata arrives. + */ +export const filterManager = createFilterManager({ + queryValue: '', + groups: [], +}); diff --git a/src/features/GetFonts/lib/filterManager/filterManager.test.ts b/src/features/GetFonts/model/state/filterManager/filterManager.test.ts similarity index 100% rename from src/features/GetFonts/lib/filterManager/filterManager.test.ts rename to src/features/GetFonts/model/state/filterManager/filterManager.test.ts diff --git a/src/features/GetFonts/model/state/manager.svelte.ts b/src/features/GetFonts/model/state/manager.svelte.ts deleted file mode 100644 index ed495dc..0000000 --- a/src/features/GetFonts/model/state/manager.svelte.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Filter manager singleton. - * - * Constructed with empty groups; the filtersStore → filterManager wiring - * lives in `./bindings.svelte` and populates groups once the backend - * filter metadata arrives. - */ - -import { createFilterManager } from '../../lib/filterManager/filterManager.svelte'; - -export const filterManager = createFilterManager({ - queryValue: '', - groups: [], -});