Files
LiquidCode_Frontend/src/redux/slices/store.ts
Виталий Лавшонок 02de330034 add filters
2025-12-10 00:04:20 +03:00

116 lines
3.0 KiB
TypeScript

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<string>) => {
state.menu.activePage = action.payload;
},
setMenuActiveProfilePage: (state, action: PayloadAction<string>) => {
state.menu.activeProfilePage = action.payload;
},
setMenuActiveGroupPage: (state, action: PayloadAction<string>) => {
state.menu.activeGroupPage = action.payload;
},
setGroupFilter: (state, action: PayloadAction<string>) => {
state.group.groupFilter = action.payload;
},
// ---------- ARTICLES ----------
setArticlesTagFilter: (state, action: PayloadAction<string[]>) => {
state.articles.articleTagFilter = action.payload;
},
setArticlesNameFilter: (state, action: PayloadAction<string>) => {
state.articles.filterName = action.payload;
},
// ---------- CONTESTS ----------
setContestsTagFilter: (state, action: PayloadAction<string[]>) => {
state.contests.contestsTagFilter = action.payload;
},
setContestsNameFilter: (state, action: PayloadAction<string>) => {
state.contests.filterName = action.payload;
},
// ---------- MISSIONS ----------
setMissionsTagFilter: (state, action: PayloadAction<string[]>) => {
state.missions.missionsTagFilter = action.payload;
},
setMissionsNameFilter: (state, action: PayloadAction<string>) => {
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;