From 18930e14263b26e94753bbd74f0c5d149b59a972 Mon Sep 17 00:00:00 2001 From: c00b3r Date: Wed, 12 Mar 2025 11:44:49 +0500 Subject: [PATCH] feat: implement state with effector instead of zustand --- bun.lockb | Bin 283352 -> 284172 bytes package.json | 2 + src/components/Layout/CategoryCounter.tsx | 5 +- .../configurator-store/configurationStore.ts | 66 ++++++++++++++++++ src/stores/useConfigurationStore.ts | 12 +++- src/ui/CheckboxItem.tsx | 44 +++++------- 6 files changed, 99 insertions(+), 30 deletions(-) create mode 100644 src/stores/configurator-store/configurationStore.ts diff --git a/bun.lockb b/bun.lockb index 45b63483e30bbd51d09b3591c977bd645e505322..a131a215a0dfa77f270e59d1ef392d2e1388b98b 100644 GIT binary patch delta 51173 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 BZ{q*} delta 50844 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 diff --git a/package.json b/package.json index 9194cc72..a1a9ac3d 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,8 @@ "@tinymce/tinymce-react": "^5.1.1", "countries-phone-masks": "^1.1.0", "date-fns": "^3.6.0", + "effector": "^23.3.0", + "effector-react": "^23.3.0", "framer-motion": "^11.17.0", "html-react-parser": "^5.1.18", "jose": "^5.9.3", diff --git a/src/components/Layout/CategoryCounter.tsx b/src/components/Layout/CategoryCounter.tsx index a9c23615..e381fd26 100644 --- a/src/components/Layout/CategoryCounter.tsx +++ b/src/components/Layout/CategoryCounter.tsx @@ -1,14 +1,15 @@ import { categories } from '@/consts/categories'; import PlusIcon from '../../../public/icons/plus.svg'; -import { useConfigurationStore } from '@/stores/useConfigurationStore'; import { imagesCategories } from '@/consts/categories'; +import { $configurationStore } from '@/stores/configurator-store/configurationStore'; +import { useUnit } from 'effector-react'; function CategoryCounter({ titleCategory, }: { titleCategory: keyof typeof categories; }) { - const { configuration, setConfiguration } = useConfigurationStore(); + const configuration = useUnit($configurationStore); const arrayCounters = categories[titleCategory]; const isAdvertisementMaterials = Array.isArray(arrayCounters) && diff --git a/src/stores/configurator-store/configurationStore.ts b/src/stores/configurator-store/configurationStore.ts new file mode 100644 index 00000000..636732e7 --- /dev/null +++ b/src/stores/configurator-store/configurationStore.ts @@ -0,0 +1,66 @@ +import { + Ads, + Design, + Details, + Equipment, + ExtraSeasons, + OptionFeatures, + Remote, +} from '../useConfigurationStore'; +import { combine, createStore, createEvent } from 'effector'; + +interface OptionObjectEffector { + allowMultiple: boolean; + opts: T; +} + +export const setEquipment = createEvent(); +export const setDesign = createEvent(); +export const toggleOption = createEvent(); +export const toggleSeason = createEvent(); + +const $equipment = createStore>({ + allowMultiple: false, + opts: 'Настенная панель', +}).on(setEquipment, (state, payload) => ({ ...state, opts: payload })); + +const $details = createStore
(300); + +const $design = createStore>({ + allowMultiple: false, + opts: 'WhiteBox.Квартиры без интерьеров', +}).on(setDesign, (state, payload) => ({ ...state, opts: payload })); + +const $options = createStore>({ + allowMultiple: true, + opts: ['Аватар клиента', 'Интерактивное окно'], +}).on(toggleOption, (state, payload) => ({ + ...state, + opts: state.opts.includes(payload) + ? state.opts.filter((opt) => opt !== payload) + : [...state.opts, payload], +})); + +const $seasons = createStore>({ + allowMultiple: true, + opts: [], +}).on(toggleSeason, (state, payload) => ({ + ...state, + opts: state.opts.includes(payload) + ? state.opts.filter((opt) => opt !== payload) + : [...state.opts, payload], +})); + +const $ads = createStore([0, 1]); + +const $remote = createStore(0); + +export const $configurationStore = combine({ + Оборудование: $equipment, + 'Детальная проработка окружения': $details, + 'Дизайн интерьеров': $design, + Опции: $options, + Сезонность: $seasons, + 'Рекламные материалы': $ads, + 'Удаленная демонстрация': $remote, +}); diff --git a/src/stores/useConfigurationStore.ts b/src/stores/useConfigurationStore.ts index c424abda..24cb33a9 100644 --- a/src/stores/useConfigurationStore.ts +++ b/src/stores/useConfigurationStore.ts @@ -36,12 +36,18 @@ export type OptionFeatures = export type ExtraSeasons = 'Лето' | 'Зима' | 'Весна' | 'Осень'; +export type Details = 300 | 500 | 700 | 1000; + +export type Ads = [number, number]; + +export type Remote = number; + export interface IConfiguration { Оборудование: { allowMultiple: false; opts: Equipment; }; - 'Детальная проработка окружения': 300 | 500 | 700 | 1000; + 'Детальная проработка окружения': Details; 'Дизайн интерьеров': { allowMultiple: false; opts: Design; @@ -54,8 +60,8 @@ export interface IConfiguration { allowMultiple: true; opts: ExtraSeasons[]; }; - 'Рекламные материалы': [number, number]; - 'Удаленная демонстрация': number; + 'Рекламные материалы': Ads; + 'Удаленная демонстрация': Remote; } export const useConfigurationStore = create<{ diff --git a/src/ui/CheckboxItem.tsx b/src/ui/CheckboxItem.tsx index 8d2b7131..3196f6ea 100644 --- a/src/ui/CheckboxItem.tsx +++ b/src/ui/CheckboxItem.tsx @@ -3,11 +3,17 @@ import { Equipment, ExtraSeasons, OptionFeatures, - OptionObject, OptionTitles, - useConfigurationStore, } from '@/stores/useConfigurationStore'; import { PropsWithChildren } from 'react'; +import { useUnit } from 'effector-react'; +import { + $configurationStore, + setEquipment, + setDesign, + toggleOption, + toggleSeason, +} from '@/stores/configurator-store/configurationStore'; function CheckboxItem({ titleCategory, @@ -21,36 +27,24 @@ function CheckboxItem({ item: Equipment | Design | OptionFeatures | ExtraSeasons; className?: string; }>) { - const { configuration, setConfiguration } = useConfigurationStore(); - const { allowMultiple, opts } = configuration[titleCategory] as OptionObject; + const configurator = useUnit($configurationStore); + const { allowMultiple, opts } = configurator[titleCategory]; function handleCheck(item: V[number]) { if (typeof opts === 'number') { return; } - - if (!Array.isArray(opts)) { - setConfiguration({ - ...configuration, - [titleCategory]: { allowMultiple, opts: item }, - }); - } else { - if (opts.includes(item as OptionFeatures & ExtraSeasons)) { - setConfiguration({ - ...configuration, - [titleCategory]: { - allowMultiple, - opts: opts.filter((i) => i !== item), - }, - }); - } else { - setConfiguration({ - ...configuration, - [titleCategory]: { allowMultiple, opts: [...opts, item] }, - }); - } + if (titleCategory === 'Оборудование') { + setEquipment(item as Equipment); + } else if (titleCategory === 'Дизайн интерьеров') { + setDesign(item as Design); + } else if (titleCategory === 'Опции') { + toggleOption(item as OptionFeatures); + } else if (titleCategory === 'Сезонность') { + toggleSeason(item as ExtraSeasons); } } + return (