feature/sidebar #8

Merged
ilia merged 50 commits from feature/sidebar into main 2026-01-03 10:56:23 +00:00
2 changed files with 52 additions and 0 deletions
Showing only changes of commit fdb8c38b7f - Show all commits

View File

@@ -0,0 +1,17 @@
/**
* Model of state for CategoryFilter
*/
export interface CategoryFilterStateModel {
/**
* Search query
*/
searchQuery?: string;
/**
* Categories
*/
categories: string[];
/**
* Selected categories
*/
selectedCategories: string[];
}

View File

@@ -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<CategoryFilterStateModel>(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,
}));
},
};