@lumina-study/user-settings-redux
Version:
Redux store for Lumina Study user settings with unstorage persistence
54 lines • 2.04 kB
JavaScript
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