// store/index.ts
import { configureStore } from '@reduxjs/toolkit';
import spreadsheetReducer from './slices/spreadsheetSlice';
import documentsReducer from './slices/documentsSlice';
import uiReducer from './slices/uiSlice';
import authReducer from './slices/authSlice';
import { autoSaveMiddleware } from './middleware/autoSaveMiddleware';
// ФУНКЦИЯ ДЛЯ ЗАГРУЗКИ СОСТОЯНИЯ ИЗ localStorage
const loadState = () => {
try {
const serializedState = localStorage.getItem('redux_state');
if (serializedState === null) {
return undefined;
}
return JSON.parse(serializedState);
} catch (err) {
return undefined;
}
};
// ФУНКЦИЯ ДЛЯ СОХРАНЕНИЯ СОСТОЯНИЯ
const saveState = (state: RootState) => {
try {
const serializedState = JSON.stringify({
auth: state.auth // СОХРАНЯЕМ ТОЛЬКО АВТОРИЗАЦИЮ
});
localStorage.setItem('redux_state', serializedState);
} catch (err) {
console.error('Failed to save state:', err);
}
};
const preloadedState = loadState();
export const store = configureStore({
reducer: {
spreadsheet: spreadsheetReducer,
documents: documentsReducer,
ui: uiReducer,
auth: authReducer
},
preloadedState,
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware({
serializableCheck: false
}).concat(autoSaveMiddleware)
});
// ПОДПИСЫВАЕМСЯ НА ИЗМЕНЕНИЯ STORE
store.subscribe(() => {
saveState(store.getState());
});
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;