From fdb8c38b7f6d7064ad1b8eeac1f1845ea21870b0 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Thu, 1 Jan 2026 13:11:38 +0300 Subject: [PATCH] feature: Create template for CategoryFilter store --- src/features/CategoryFilter/model/state.ts | 17 +++++++++ .../store/categoryFilterStore.ts | 35 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 src/features/CategoryFilter/model/state.ts create mode 100644 src/features/CategoryFilter/store/categoryFilterStore.ts diff --git a/src/features/CategoryFilter/model/state.ts b/src/features/CategoryFilter/model/state.ts new file mode 100644 index 0000000..71d4cb5 --- /dev/null +++ b/src/features/CategoryFilter/model/state.ts @@ -0,0 +1,17 @@ +/** + * Model of state for CategoryFilter + */ +export interface CategoryFilterStateModel { + /** + * Search query + */ + searchQuery?: string; + /** + * Categories + */ + categories: string[]; + /** + * Selected categories + */ + selectedCategories: string[]; +} diff --git a/src/features/CategoryFilter/store/categoryFilterStore.ts b/src/features/CategoryFilter/store/categoryFilterStore.ts new file mode 100644 index 0000000..b1cd804 --- /dev/null +++ b/src/features/CategoryFilter/store/categoryFilterStore.ts @@ -0,0 +1,35 @@ +import { writable } from 'svelte/store'; +import type { CategoryFilterStateModel } from '../model/state'; + +/** + * Initial state for CategoryFilter + */ +export const initialState: CategoryFilterStateModel = { + searchQuery: '', + categories: [], + selectedCategories: [], +}; + +const { subscribe, set, update } = writable(initialState); + +export const categoryFilterStore = { + subscribe, + set, + update, + + /** + * Update the search query filter. + * + * @param searchQuery - Search text (undefined to clear) + * + * Learning Note: + * We use update() to modify the store based on current state. + * This is like a Redux reducer but without the boilerplate! + */ + setSearchQuery: (searchQuery: string | undefined) => { + update(state => ({ + ...state, + searchQuery: searchQuery || undefined, + })); + }, +};