WIP: timer set
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import { combineReducers, configureStore } from "@reduxjs/toolkit";
|
||||
import { persistReducer, persistStore } from "redux-persist";
|
||||
import timeReducer from "./slices/timeSlice";
|
||||
|
||||
const noopStorage = {
|
||||
getItem() {
|
||||
return Promise.resolve(null);
|
||||
},
|
||||
setItem() {
|
||||
return Promise.resolve();
|
||||
},
|
||||
removeItem() {
|
||||
return Promise.resolve();
|
||||
},
|
||||
};
|
||||
|
||||
// redux-persist's bundled storage needs `localStorage`, which isn't available
|
||||
// during server-side rendering (and can throw in locked-down browsers), so
|
||||
// this is a minimal storage engine that never touches `redux-persist/lib/storage`.
|
||||
function createLocalStorageEngine() {
|
||||
if (typeof window === "undefined") return noopStorage;
|
||||
try {
|
||||
const testKey = "__by_other_means_storage_test__";
|
||||
window.localStorage.setItem(testKey, testKey);
|
||||
window.localStorage.removeItem(testKey);
|
||||
} catch {
|
||||
return noopStorage;
|
||||
}
|
||||
return {
|
||||
getItem(key: string) {
|
||||
return Promise.resolve(window.localStorage.getItem(key));
|
||||
},
|
||||
setItem(key: string, value: string) {
|
||||
window.localStorage.setItem(key, value);
|
||||
return Promise.resolve();
|
||||
},
|
||||
removeItem(key: string) {
|
||||
window.localStorage.removeItem(key);
|
||||
return Promise.resolve();
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
// Configure which slices to persist
|
||||
const persistConfig = {
|
||||
key: "root",
|
||||
storage: createLocalStorageEngine(),
|
||||
whitelist: ["time"],
|
||||
};
|
||||
|
||||
// Combine all reducers
|
||||
const rootReducer = combineReducers({
|
||||
time: timeReducer,
|
||||
});
|
||||
|
||||
// Create persisted reducer
|
||||
const persistedReducer = persistReducer(persistConfig, rootReducer);
|
||||
|
||||
export const store = configureStore({
|
||||
reducer: persistedReducer,
|
||||
middleware: (getDefaultMiddleware) =>
|
||||
getDefaultMiddleware({
|
||||
serializableCheck: {
|
||||
ignoredActions: ["persist/PERSIST", "persist/REHYDRATE"],
|
||||
},
|
||||
}),
|
||||
});
|
||||
|
||||
export const persistor = persistStore(store);
|
||||
|
||||
// Infer the `RootState`, `AppDispatch`, and `AppStore` types from the store itself
|
||||
export type RootState = ReturnType<typeof store.getState>;
|
||||
// Inferred type: {posts: PostsState, comments: CommentsState, users: UsersState}
|
||||
export type AppDispatch = typeof store.dispatch;
|
||||
export type AppStore = typeof store;
|
||||
Reference in New Issue
Block a user