import { combineReducers, configureStore, createAction, } from "@reduxjs/toolkit"; import token, { actions as tokenActions, selectToken } from "./token"; import questionnaire, { actions as questionnaireActions, selectQuestionnaire, } from "./questionnaire"; import user, { actions as userActions, selectUser } from "./user"; import form, { actions as formActions, selectors as formSelectors, } from "./form"; import aura, { actions as auraActions } from "./aura"; import paywalls, { actions as paywallsActions } from "./paywalls"; import siteConfig, { selectHome, selectOpenAiToken, actions as siteConfigActions, } from "./siteConfig"; import onboardingConfig, { selectOnboarding, selectOnboardingBreath, selectOnboardingCompatibility, selectOnboardingHome, selectOnboardingNavbarFooter, actions as onboardingConfigActions, } from "./onboarding"; import payment, { actions as paymentActions, selectActiveProduct, selectIsDiscount, selectStripeButton, selectSubscriptionReceipt, } from "./payment"; import subscriptionPlans, { actions as subscriptionPlasActions, selectPlanById, } from "./subscriptionPlan"; import status, { actions as userStatusActions, selectStatus } from "./status"; import compatibility, { actions as compatibilityActions, selectSelfName, } from "./compatibility"; import userConfig, { actions as userConfigActions, selectUserDeviceType, selectIsShowTryApp, selectIsForceShortPath, } from "./userConfig"; import compatibilities, { actions as compatibilitiesActions, selectCompatibilities, } from "./compatibilities"; import userCallbacks, { actions as userCallbacksActions, } from "./userCallbacks"; import { loadStore, backupStore } from "./storageHelper"; import { selectAuraCoordinates } from "./aura"; import { selectSelectedPrice } from "./payment"; import { selectRightUser, selectCategoryId } from "./compatibility"; import { selectUserCallbacksDescription, selectUserCallbacksPrevStat, } from "./userCallbacks"; import palmistry, { actions as palmistryActions, selectPalmistryFingers, selectPalmistryLines, } from "./palmistry"; import { selectPaywallsIsMustUpdate, selectPaywalls } from "./paywalls"; import privacyPolicy, { actions as privacyPolicyActions, selectPrivacyPolicy } from "./privacyPolicy"; import personalVideo, { actions as personalVideoActions, selectPersonalVideo } from "./personalVideo"; const preloadedState = loadStore(); export const actions = { token: tokenActions, user: userActions, form: formActions, status: userStatusActions, subscriptionPlan: subscriptionPlasActions, aura: auraActions, paywalls: paywallsActions, siteConfig: siteConfigActions, compatibility: compatibilityActions, compatibilities: compatibilitiesActions, payment: paymentActions, userCallbacks: userCallbacksActions, onboardingConfig: onboardingConfigActions, questionnaire: questionnaireActions, userConfig: userConfigActions, palmistry: palmistryActions, privacyPolicy: privacyPolicyActions, personalVideo: personalVideoActions, reset: createAction("reset"), }; export const selectors = { selectToken, selectUser, selectStatus, selectPlanById, selectAuraCoordinates, selectRightUser, selectSelfName, selectCategoryId, selectSelectedPrice, selectActiveProduct, selectUserCallbacksDescription, selectUserCallbacksPrevStat, selectHome, selectIsDiscount, selectSubscriptionReceipt, selectOnboarding, selectOnboardingHome, selectOnboardingCompatibility, selectOnboardingBreath, selectOnboardingNavbarFooter, selectCompatibilities, selectQuestionnaire, selectUserDeviceType, selectIsShowTryApp, selectIsForceShortPath, selectOpenAiToken, selectPalmistryLines, selectPalmistryFingers, selectPaywalls, selectPaywallsIsMustUpdate, selectPrivacyPolicy, selectStripeButton, selectPersonalVideo, ...formSelectors, }; export const reducer = combineReducers({ token, user, form, status, subscriptionPlans, aura, payment, compatibility, compatibilities, userCallbacks, siteConfig, onboardingConfig, questionnaire, userConfig, palmistry, paywalls, privacyPolicy, personalVideo }); export type RootState = ReturnType; export const store = configureStore({ reducer, preloadedState, devTools: import.meta.env.DEV, }); export type AppDispatch = typeof store.dispatch; export type StoreType = typeof store; export const unsubscribe = backupStore(store);