import { createSlice, PayloadAction } from '@reduxjs/toolkit'; // Типы данных interface StorState { menu: { activePage: string; activeProfilePage: string; activeGroupPage: string; }; group: { groupFilter: string; }; articles: { articleTagFilter: string[]; filterName: string; }; contests: { contestsTagFilter: string[]; filterName: string; }; missions: { missionsTagFilter: string[]; filterName: string; }; } // Инициализация состояния const initialState: StorState = { menu: { activePage: '', activeProfilePage: '', activeGroupPage: '', }, group: { groupFilter: '', }, articles: { articleTagFilter: [], filterName: '', }, contests: { contestsTagFilter: [], filterName: '', }, missions: { missionsTagFilter: [], filterName: '', }, }; // Slice const storeSlice = createSlice({ name: 'store', initialState, reducers: { setMenuActivePage: (state, action: PayloadAction) => { state.menu.activePage = action.payload; }, setMenuActiveProfilePage: (state, action: PayloadAction) => { state.menu.activeProfilePage = action.payload; }, setMenuActiveGroupPage: (state, action: PayloadAction) => { state.menu.activeGroupPage = action.payload; }, setGroupFilter: (state, action: PayloadAction) => { state.group.groupFilter = action.payload; }, // ---------- ARTICLES ---------- setArticlesTagFilter: (state, action: PayloadAction) => { state.articles.articleTagFilter = action.payload; }, setArticlesNameFilter: (state, action: PayloadAction) => { state.articles.filterName = action.payload; }, // ---------- CONTESTS ---------- setContestsTagFilter: (state, action: PayloadAction) => { state.contests.contestsTagFilter = action.payload; }, setContestsNameFilter: (state, action: PayloadAction) => { state.contests.filterName = action.payload; }, // ---------- MISSIONS ---------- setMissionsTagFilter: (state, action: PayloadAction) => { state.missions.missionsTagFilter = action.payload; }, setMissionsNameFilter: (state, action: PayloadAction) => { state.missions.filterName = action.payload; }, }, }); export const { // menu setMenuActivePage, setMenuActiveProfilePage, setMenuActiveGroupPage, setGroupFilter, // articles setArticlesTagFilter, setArticlesNameFilter, // contests setContestsTagFilter, setContestsNameFilter, // missions setMissionsTagFilter, setMissionsNameFilter, } = storeSlice.actions; export const storeReducer = storeSlice.reducer;