UNPKG

@lumina-study/user-settings-redux

Version:

Redux store for Lumina Study user settings with unstorage persistence

54 lines 2.04 kB
import { configureStore } from '@reduxjs/toolkit'; import userSettingsReducer, { setUserSettings } from './userSettingsSlice'; import { createPersistenceMiddleware, loadPersistedSettings, } from './persistenceMiddleware'; /** * Creates and initializes the Redux store for user settings * * This function: * 1. Creates a Redux store with the userSettings reducer * 2. Adds persistence middleware using the provided unstorage driver * 3. Loads any existing persisted settings from storage * 4. Initializes the store with the loaded settings (if any) * * @param options - Configuration options including the storage driver * @returns A promise that resolves to the configured Redux store * * @example * ```typescript * import { createStorage } from 'unstorage'; * import localStorageDriver from 'unstorage/drivers/localstorage'; * import { createUserSettingsStore } from '@lumina-study/user-settings-redux'; * * const storage = createStorage({ * driver: localStorageDriver({ base: 'app:' }) * }); * * const store = await createUserSettingsStore({ storage }); * ``` */ export async function createUserSettingsStore(options) { const { storage, devTools = true } = options; // Create the persistence middleware const persistenceMiddleware = createPersistenceMiddleware(storage); // Create the store const store = configureStore({ reducer: { userSettings: userSettingsReducer, }, middleware: getDefaultMiddleware => getDefaultMiddleware({ // Configure serialization check to ignore Storage objects serializableCheck: { ignoredActions: [], ignoredPaths: [], }, }).concat(persistenceMiddleware), devTools, }); // Load persisted settings and initialize the store const persistedSettings = await loadPersistedSettings(storage); if (persistedSettings) { store.dispatch(setUserSettings(persistedSettings)); } return store; } //# sourceMappingURL=store.js.map