diff --git a/src/features/GetFonts/model/index.ts b/src/features/GetFonts/model/index.ts index 2c8f3c8..d3ed458 100644 --- a/src/features/GetFonts/model/index.ts +++ b/src/features/GetFonts/model/index.ts @@ -29,6 +29,12 @@ export { filterManager, } from './state/manager.svelte'; +/** + * Side-effect import: installs the global filterManager+sortStore → fontStore + * bridge on first import of this feature barrel. No exports. + */ +import './state/bindings.svelte'; + /** * Sorting logic */ diff --git a/src/features/GetFonts/model/state/bindings.svelte.ts b/src/features/GetFonts/model/state/bindings.svelte.ts new file mode 100644 index 0000000..c5f4905 --- /dev/null +++ b/src/features/GetFonts/model/state/bindings.svelte.ts @@ -0,0 +1,36 @@ +/** + * Bridges feature-level UI state (filterManager + sortStore) to the + * entity-level fontStore query params. + * + * Centralizing this here means consumers (Search, FontSearch, + * FilterControls, etc.) bind to the manager/store directly without + * each repeating the same mapping effect. The bridge is a singleton + * concern — it tracks singleton state and writes to a singleton query + * observer, so it lives at module scope, not in any individual widget. + */ + +import { fontStore } from '$entities/Font'; +import { untrack } from 'svelte'; +import { mapManagerToParams } from '../../lib/mapper/mapManagerToParams'; +import { sortStore } from '../store/sortStore.svelte'; +import { filterManager } from './manager.svelte'; + +$effect.root(() => { + /** + * Mirror filter selections + debounced search query into fontStore params. + * untrack the write so fontStore's internal $state reads don't feed back + * into this effect's dependency graph. + */ + $effect(() => { + const params = mapManagerToParams(filterManager); + untrack(() => fontStore.setParams(params)); + }); + + /** + * Mirror sort selection into fontStore. + */ + $effect(() => { + const apiSort = sortStore.apiValue; + untrack(() => fontStore.setSort(apiSort)); + }); +}); diff --git a/src/features/GetFonts/ui/FiltersControl/FilterControls.svelte b/src/features/GetFonts/ui/FiltersControl/FilterControls.svelte index 5187324..e9af16b 100644 --- a/src/features/GetFonts/ui/FiltersControl/FilterControls.svelte +++ b/src/features/GetFonts/ui/FiltersControl/FilterControls.svelte @@ -4,16 +4,12 @@ Sits below the filter list, separated by a top border. -->