feat(createFilterStore): create reusable function that creates store object for different filters

This commit is contained in:
Ilia Mashkov
2026-01-02 11:13:22 +03:00
parent 4a283213d4
commit 1ecbc9b9d7

View File

@@ -1,4 +1,4 @@
import { derived, Readable, Writable, writable } from 'svelte/store'; import { derived, type Readable, type Writable, writable } from 'svelte/store';
export interface Category { export interface Category {
/** /**
@@ -12,7 +12,7 @@ export interface Category {
/** /**
* Category selected state * Category selected state
*/ */
selected: boolean; selected?: boolean;
} }
export interface FilterModel { export interface FilterModel {
@@ -35,6 +35,11 @@ export interface FilterStore<T extends FilterModel> extends Writable<T> {
* @returns Readable store with filter data * @returns Readable store with filter data
*/ */
getStore: () => Readable<T>; getStore: () => Readable<T>;
/**
* Get all categories.
* @returns Readable store with categories
*/
getAllCategories: () => Readable<Category[]>;
/** /**
* Get the selected categories. * Get the selected categories.
* @returns Readable store with selected categories * @returns Readable store with selected categories
@@ -83,7 +88,7 @@ export interface FilterStore<T extends FilterModel> extends Writable<T> {
* @returns FilterStore<T> * @returns FilterStore<T>
*/ */
export function createFilterStore<T extends FilterModel>( export function createFilterStore<T extends FilterModel>(
initialState: T, initialState?: T,
): FilterStore<T> { ): FilterStore<T> {
const { subscribe, set, update } = writable<T>(initialState); const { subscribe, set, update } = writable<T>(initialState);
@@ -103,6 +108,14 @@ export function createFilterStore<T extends FilterModel>(
subscribe, subscribe,
}; };
}, },
/**
* Get the filtered categories.
*/
getAllCategories: () => {
return derived({ subscribe }, $store => {
return $store.categories;
});
},
/** /**
* Get the selected categories. * Get the selected categories.
*/ */