From e01a7464602afd3a75c6fc286721f7a8b04895db Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Sat, 3 Jan 2026 13:54:27 +0300 Subject: [PATCH] feat(FilterFonts): join all the filters in one feature --- src/features/CategoryFilter/index.ts | 7 -- src/features/CategoryFilter/model/state.ts | 40 ----------- src/features/FilterFonts/index.ts | 5 ++ src/features/FilterFonts/model/const/const.ts | 70 +++++++++++++++++++ .../clearAllFilters/clearAllFilters.ts | 9 +++ .../model/stores}/categoryFilterStore.ts | 10 +-- .../model/stores}/providersFilterStore.ts | 10 +-- .../model/stores}/subsetsFilterStore.ts | 10 +-- src/features/ProvidersFilter/index.ts | 7 -- src/features/ProvidersFilter/model/state.ts | 20 ------ src/features/SubsetsFilter/index.ts | 7 -- src/features/SubsetsFilter/model/state.ts | 36 ---------- src/widgets/FiltersSidebar/ui/Filters.svelte | 6 +- 13 files changed, 102 insertions(+), 135 deletions(-) delete mode 100644 src/features/CategoryFilter/index.ts delete mode 100644 src/features/CategoryFilter/model/state.ts create mode 100644 src/features/FilterFonts/index.ts create mode 100644 src/features/FilterFonts/model/const/const.ts create mode 100644 src/features/FilterFonts/model/services/clearAllFilters/clearAllFilters.ts rename src/features/{CategoryFilter/store => FilterFonts/model/stores}/categoryFilterStore.ts (51%) rename src/features/{ProvidersFilter/store => FilterFonts/model/stores}/providersFilterStore.ts (52%) rename src/features/{SubsetsFilter/store => FilterFonts/model/stores}/subsetsFilterStore.ts (51%) delete mode 100644 src/features/ProvidersFilter/index.ts delete mode 100644 src/features/ProvidersFilter/model/state.ts delete mode 100644 src/features/SubsetsFilter/index.ts delete mode 100644 src/features/SubsetsFilter/model/state.ts diff --git a/src/features/CategoryFilter/index.ts b/src/features/CategoryFilter/index.ts deleted file mode 100644 index e3fe061..0000000 --- a/src/features/CategoryFilter/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { FONT_CATEGORIES } from './model/state'; -import { categoryFilterStore } from './store/categoryFilterStore'; - -export { - categoryFilterStore, - FONT_CATEGORIES, -}; diff --git a/src/features/CategoryFilter/model/state.ts b/src/features/CategoryFilter/model/state.ts deleted file mode 100644 index 47f0e29..0000000 --- a/src/features/CategoryFilter/model/state.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { - FilterModel, - Property, -} from '$shared/store/createFilterStore'; - -/** - * Model of state for CategoryFilter - */ -export type CategoryFilterModel = FilterModel; - -export const FONT_CATEGORIES: Property[] = [ - { - id: 'serif', - name: 'Serif', - }, - { - id: 'sans-serif', - name: 'Sans-serif', - }, - { - id: 'display', - name: 'Display', - }, - { - id: 'handwriting', - name: 'Handwriting', - }, - { - id: 'monospace', - name: 'Monospace', - }, - { - id: 'script', - name: 'Script', - }, - { - id: 'slab', - name: 'Slab', - }, -] as const; diff --git a/src/features/FilterFonts/index.ts b/src/features/FilterFonts/index.ts new file mode 100644 index 0000000..3fc1009 --- /dev/null +++ b/src/features/FilterFonts/index.ts @@ -0,0 +1,5 @@ +export { categoryFilterStore } from './model/stores/categoryFilterStore'; +export { providersFilterStore } from './model/stores/providersFilterStore'; +export { subsetsFilterStore } from './model/stores/subsetsFilterStore'; + +export { clearAllFilters } from './model/services/clearAllFilters/clearAllFilters'; diff --git a/src/features/FilterFonts/model/const/const.ts b/src/features/FilterFonts/model/const/const.ts new file mode 100644 index 0000000..fbf9088 --- /dev/null +++ b/src/features/FilterFonts/model/const/const.ts @@ -0,0 +1,70 @@ +import type { Property } from '$shared/store/createFilterStore'; + +export const FONT_CATEGORIES: Property[] = [ + { + id: 'serif', + name: 'Serif', + }, + { + id: 'sans-serif', + name: 'Sans-serif', + }, + { + id: 'display', + name: 'Display', + }, + { + id: 'handwriting', + name: 'Handwriting', + }, + { + id: 'monospace', + name: 'Monospace', + }, + { + id: 'script', + name: 'Script', + }, + { + id: 'slab', + name: 'Slab', + }, +] as const; + +export const FONT_PROVIDERS: Property[] = [ + { + id: 'google', + name: 'Google Fonts', + }, + { + id: 'fontshare', + name: 'Fontshare', + }, +] as const; + +export const FONT_SUBSETS: Property[] = [ + { + id: 'latin', + name: 'Latin', + }, + { + id: 'latin-ext', + name: 'Latin Extended', + }, + { + id: 'cyrillic', + name: 'Cyrillic', + }, + { + id: 'greek', + name: 'Greek', + }, + { + id: 'arabic', + name: 'Arabic', + }, + { + id: 'devanagari', + name: 'Devanagari', + }, +] as const; diff --git a/src/features/FilterFonts/model/services/clearAllFilters/clearAllFilters.ts b/src/features/FilterFonts/model/services/clearAllFilters/clearAllFilters.ts new file mode 100644 index 0000000..260077c --- /dev/null +++ b/src/features/FilterFonts/model/services/clearAllFilters/clearAllFilters.ts @@ -0,0 +1,9 @@ +import { categoryFilterStore } from '../../stores/categoryFilterStore'; +import { providersFilterStore } from '../../stores/providersFilterStore'; +import { subsetsFilterStore } from '../../stores/subsetsFilterStore'; + +export function clearAllFilters() { + categoryFilterStore.deselectAllProperties(); + providersFilterStore.deselectAllProperties(); + subsetsFilterStore.deselectAllProperties(); +} diff --git a/src/features/CategoryFilter/store/categoryFilterStore.ts b/src/features/FilterFonts/model/stores/categoryFilterStore.ts similarity index 51% rename from src/features/CategoryFilter/store/categoryFilterStore.ts rename to src/features/FilterFonts/model/stores/categoryFilterStore.ts index 723dfe8..60448c4 100644 --- a/src/features/CategoryFilter/store/categoryFilterStore.ts +++ b/src/features/FilterFonts/model/stores/categoryFilterStore.ts @@ -1,13 +1,13 @@ -import { createFilterStore } from '$shared/store/createFilterStore'; import { - type CategoryFilterModel, - FONT_CATEGORIES, -} from '../model/state'; + type FilterModel, + createFilterStore, +} from '$shared/store/createFilterStore'; +import { FONT_CATEGORIES } from '../const/const'; /** * Initial state for CategoryFilter */ -export const initialState: CategoryFilterModel = { +export const initialState: FilterModel = { searchQuery: '', properties: FONT_CATEGORIES, }; diff --git a/src/features/ProvidersFilter/store/providersFilterStore.ts b/src/features/FilterFonts/model/stores/providersFilterStore.ts similarity index 52% rename from src/features/ProvidersFilter/store/providersFilterStore.ts rename to src/features/FilterFonts/model/stores/providersFilterStore.ts index 532d4a5..489a202 100644 --- a/src/features/ProvidersFilter/store/providersFilterStore.ts +++ b/src/features/FilterFonts/model/stores/providersFilterStore.ts @@ -1,13 +1,13 @@ -import { createFilterStore } from '$shared/store/createFilterStore'; import { - FONT_PROVIDERS, - type ProvidersFilterModel, -} from '../model/state'; + type FilterModel, + createFilterStore, +} from '$shared/store/createFilterStore'; +import { FONT_PROVIDERS } from '../const/const'; /** * Initial state for ProvidersFilter */ -export const initialState: ProvidersFilterModel = { +export const initialState: FilterModel = { searchQuery: '', properties: FONT_PROVIDERS, }; diff --git a/src/features/SubsetsFilter/store/subsetsFilterStore.ts b/src/features/FilterFonts/model/stores/subsetsFilterStore.ts similarity index 51% rename from src/features/SubsetsFilter/store/subsetsFilterStore.ts rename to src/features/FilterFonts/model/stores/subsetsFilterStore.ts index c616e46..1df9378 100644 --- a/src/features/SubsetsFilter/store/subsetsFilterStore.ts +++ b/src/features/FilterFonts/model/stores/subsetsFilterStore.ts @@ -1,13 +1,13 @@ -import { createFilterStore } from '$shared/store/createFilterStore'; import { - FONT_SUBSETS, - type SubsetsFilterModel, -} from '../model/state'; + type FilterModel, + createFilterStore, +} from '$shared/store/createFilterStore'; +import { FONT_SUBSETS } from '../const/const'; /** * Initial state for SubsetsFilter */ -export const initialState: SubsetsFilterModel = { +const initialState: FilterModel = { searchQuery: '', properties: FONT_SUBSETS, }; diff --git a/src/features/ProvidersFilter/index.ts b/src/features/ProvidersFilter/index.ts deleted file mode 100644 index f4436e7..0000000 --- a/src/features/ProvidersFilter/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { FONT_PROVIDERS } from './model/state'; -import { providersFilterStore } from './store/providersFilterStore'; - -export { - FONT_PROVIDERS, - providersFilterStore, -}; diff --git a/src/features/ProvidersFilter/model/state.ts b/src/features/ProvidersFilter/model/state.ts deleted file mode 100644 index be8ebc5..0000000 --- a/src/features/ProvidersFilter/model/state.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { - FilterModel, - Property, -} from '$shared/store/createFilterStore'; - -/** - * Model of state for ProvidersFilter - */ -export type ProvidersFilterModel = FilterModel; - -export const FONT_PROVIDERS: Property[] = [ - { - id: 'google', - name: 'Google Fonts', - }, - { - id: 'fontshare', - name: 'Fontshare', - }, -] as const; diff --git a/src/features/SubsetsFilter/index.ts b/src/features/SubsetsFilter/index.ts deleted file mode 100644 index b87f5ba..0000000 --- a/src/features/SubsetsFilter/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { FONT_SUBSETS } from './model/state'; -import { subsetsFilterStore } from './store/subsetsFilterStore'; - -export { - FONT_SUBSETS, - subsetsFilterStore, -}; diff --git a/src/features/SubsetsFilter/model/state.ts b/src/features/SubsetsFilter/model/state.ts deleted file mode 100644 index c02f51e..0000000 --- a/src/features/SubsetsFilter/model/state.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { - FilterModel, - Property, -} from '$shared/store/createFilterStore'; - -/** - * Model of state for SubsetsFilter - */ -export type SubsetsFilterModel = FilterModel; - -export const FONT_SUBSETS: Property[] = [ - { - id: 'latin', - name: 'Latin', - }, - { - id: 'latin-ext', - name: 'Latin Extended', - }, - { - id: 'cyrillic', - name: 'Cyrillic', - }, - { - id: 'greek', - name: 'Greek', - }, - { - id: 'arabic', - name: 'Arabic', - }, - { - id: 'devanagari', - name: 'Devanagari', - }, -] as const; diff --git a/src/widgets/FiltersSidebar/ui/Filters.svelte b/src/widgets/FiltersSidebar/ui/Filters.svelte index 6a6af11..a42ee3a 100644 --- a/src/widgets/FiltersSidebar/ui/Filters.svelte +++ b/src/widgets/FiltersSidebar/ui/Filters.svelte @@ -12,9 +12,9 @@ * Uses $derived for reactive access to filter states, ensuring UI updates * when selections change through any means (sidebar, programmatically, etc.). */ -import { categoryFilterStore } from '$features/CategoryFilter'; -import { providersFilterStore } from '$features/ProvidersFilter'; -import { subsetsFilterStore } from '$features/SubsetsFilter'; +import { categoryFilterStore } from '$features/FilterFonts'; +import { providersFilterStore } from '$features/FilterFonts'; +import { subsetsFilterStore } from '$features/FilterFonts'; import CheckboxFilter from '$shared/ui/CheckboxFilter/CheckboxFilter.svelte'; /** Reactive properties from providers filter store */