add filters
This commit is contained in:
@@ -110,9 +110,14 @@ export const fetchArticles = createAsyncThunk(
|
||||
try {
|
||||
const params: any = { page, pageSize };
|
||||
if (tags && tags.length > 0) params.tags = tags;
|
||||
|
||||
const response = await axios.get<ArticlesResponse>('/articles', {
|
||||
params,
|
||||
paramsSerializer: {
|
||||
indexes: null,
|
||||
},
|
||||
});
|
||||
|
||||
return response.data;
|
||||
} catch (err: any) {
|
||||
return rejectWithValue(
|
||||
|
||||
@@ -71,7 +71,12 @@ export const fetchMissions = createAsyncThunk(
|
||||
try {
|
||||
const params: any = { page, pageSize };
|
||||
if (tags.length) params.tags = tags;
|
||||
const response = await axios.get('/missions', { params });
|
||||
const response = await axios.get('/missions', {
|
||||
params,
|
||||
paramsSerializer: {
|
||||
indexes: null,
|
||||
},
|
||||
});
|
||||
return response.data; // { missions, hasNextPage }
|
||||
} catch (err: any) {
|
||||
return rejectWithValue(
|
||||
|
||||
@@ -10,6 +10,18 @@ interface StorState {
|
||||
group: {
|
||||
groupFilter: string;
|
||||
};
|
||||
articles: {
|
||||
articleTagFilter: string[];
|
||||
filterName: string;
|
||||
};
|
||||
contests: {
|
||||
contestsTagFilter: string[];
|
||||
filterName: string;
|
||||
};
|
||||
missions: {
|
||||
missionsTagFilter: string[];
|
||||
filterName: string;
|
||||
};
|
||||
}
|
||||
|
||||
// Инициализация состояния
|
||||
@@ -22,6 +34,18 @@ const initialState: StorState = {
|
||||
group: {
|
||||
groupFilter: '',
|
||||
},
|
||||
articles: {
|
||||
articleTagFilter: [],
|
||||
filterName: '',
|
||||
},
|
||||
contests: {
|
||||
contestsTagFilter: [],
|
||||
filterName: '',
|
||||
},
|
||||
missions: {
|
||||
missionsTagFilter: [],
|
||||
filterName: '',
|
||||
},
|
||||
};
|
||||
|
||||
// Slice
|
||||
@@ -29,32 +53,63 @@ const storeSlice = createSlice({
|
||||
name: 'store',
|
||||
initialState,
|
||||
reducers: {
|
||||
setMenuActivePage: (state, activePage: PayloadAction<string>) => {
|
||||
state.menu.activePage = activePage.payload;
|
||||
setMenuActivePage: (state, action: PayloadAction<string>) => {
|
||||
state.menu.activePage = action.payload;
|
||||
},
|
||||
setMenuActiveProfilePage: (
|
||||
state,
|
||||
activeProfilePage: PayloadAction<string>,
|
||||
) => {
|
||||
state.menu.activeProfilePage = activeProfilePage.payload;
|
||||
setMenuActiveProfilePage: (state, action: PayloadAction<string>) => {
|
||||
state.menu.activeProfilePage = action.payload;
|
||||
},
|
||||
setMenuActiveGroupPage: (
|
||||
state,
|
||||
activeGroupPage: PayloadAction<string>,
|
||||
) => {
|
||||
state.menu.activeGroupPage = activeGroupPage.payload;
|
||||
setMenuActiveGroupPage: (state, action: PayloadAction<string>) => {
|
||||
state.menu.activeGroupPage = action.payload;
|
||||
},
|
||||
setGroupFilter: (state, groupFilter: PayloadAction<string>) => {
|
||||
state.group.groupFilter = groupFilter.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;
|
||||
|
||||
Reference in New Issue
Block a user