From ff665e1d26e268d7e912c85fef50e4ef2791ff57 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Fri, 2 Jan 2026 20:06:35 +0300 Subject: [PATCH] feature: add filters for providers and font subsets --- src/entities/Font/model/font.ts | 61 ------------------- src/features/ProvidersFilter/index.ts | 7 +++ src/features/ProvidersFilter/model/state.ts | 20 ++++++ .../store/providersFilterStore.ts | 18 ++++++ src/features/SubsetsFilter/index.ts | 7 +++ src/features/SubsetsFilter/model/state.ts | 36 +++++++++++ .../SubsetsFilter/store/subsetsFilterStore.ts | 18 ++++++ 7 files changed, 106 insertions(+), 61 deletions(-) create mode 100644 src/features/ProvidersFilter/index.ts create mode 100644 src/features/ProvidersFilter/model/state.ts create mode 100644 src/features/ProvidersFilter/store/providersFilterStore.ts create mode 100644 src/features/SubsetsFilter/index.ts create mode 100644 src/features/SubsetsFilter/model/state.ts create mode 100644 src/features/SubsetsFilter/store/subsetsFilterStore.ts diff --git a/src/entities/Font/model/font.ts b/src/entities/Font/model/font.ts index 59935f0..a7bd329 100644 --- a/src/entities/Font/model/font.ts +++ b/src/entities/Font/model/font.ts @@ -5,73 +5,12 @@ import type { Category } from '$shared/store/createFilterStore'; */ export type FontCategory = 'sans-serif' | 'serif' | 'display' | 'handwriting' | 'monospace'; -export const FONT_CATEGORIES: Category[] = [ - { - id: 'sans-serif', - name: 'Sans-serif', - }, - { - id: 'serif', - name: 'Serif', - }, - { - id: 'display', - name: 'Display', - }, - { - id: 'handwriting', - name: 'Handwriting', - }, - { - id: 'monospace', - name: 'Monospace', - }, -] as const; - /** * Font provider */ export type FontProvider = 'google' | 'fontshare'; -export const FONT_PROVIDERS: Category[] = [ - { - id: 'google', - name: 'Google Fonts', - }, - { - id: 'fontshare', - name: 'Fontshare', - }, -] as const; - /** * Font subset */ export type FontSubset = 'latin' | 'latin-ext' | 'cyrillic' | 'greek' | 'arabic' | 'devanagari'; - -export const FONT_SUBSETS: Category[] = [ - { - 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/ProvidersFilter/index.ts b/src/features/ProvidersFilter/index.ts new file mode 100644 index 0000000..f4436e7 --- /dev/null +++ b/src/features/ProvidersFilter/index.ts @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..d7b4aa6 --- /dev/null +++ b/src/features/ProvidersFilter/model/state.ts @@ -0,0 +1,20 @@ +import type { + Category, + FilterModel, +} from '$shared/store/createFilterStore'; + +/** + * Model of state for ProvidersFilter + */ +export type ProvidersFilterModel = FilterModel; + +export const FONT_PROVIDERS: Category[] = [ + { + id: 'google', + name: 'Google Fonts', + }, + { + id: 'fontshare', + name: 'Fontshare', + }, +] as const; diff --git a/src/features/ProvidersFilter/store/providersFilterStore.ts b/src/features/ProvidersFilter/store/providersFilterStore.ts new file mode 100644 index 0000000..8b652ba --- /dev/null +++ b/src/features/ProvidersFilter/store/providersFilterStore.ts @@ -0,0 +1,18 @@ +import { createFilterStore } from '$shared/store/createFilterStore'; +import { + FONT_PROVIDERS, + type ProvidersFilterModel, +} from '../model/state'; + +/** + * Initial state for ProvidersFilter + */ +export const initialState: ProvidersFilterModel = { + searchQuery: '', + categories: FONT_PROVIDERS, +}; + +/** + * ProvidersFilter store + */ +export const providersFilterStore = createFilterStore(initialState); diff --git a/src/features/SubsetsFilter/index.ts b/src/features/SubsetsFilter/index.ts new file mode 100644 index 0000000..b87f5ba --- /dev/null +++ b/src/features/SubsetsFilter/index.ts @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..af572aa --- /dev/null +++ b/src/features/SubsetsFilter/model/state.ts @@ -0,0 +1,36 @@ +import type { + Category, + FilterModel, +} from '$shared/store/createFilterStore'; + +/** + * Model of state for SubsetsFilter + */ +export type SubsetsFilterModel = FilterModel; + +export const FONT_SUBSETS: Category[] = [ + { + 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/SubsetsFilter/store/subsetsFilterStore.ts b/src/features/SubsetsFilter/store/subsetsFilterStore.ts new file mode 100644 index 0000000..a7992c0 --- /dev/null +++ b/src/features/SubsetsFilter/store/subsetsFilterStore.ts @@ -0,0 +1,18 @@ +import { createFilterStore } from '$shared/store/createFilterStore'; +import { + FONT_SUBSETS, + type SubsetsFilterModel, +} from '../model/state'; + +/** + * Initial state for SubsetsFilter + */ +export const initialState: SubsetsFilterModel = { + searchQuery: '', + categories: FONT_SUBSETS, +}; + +/** + * SubsetsFilter store + */ +export const subsetsFilterStore = createFilterStore(initialState);