Загрузка данных


// 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;