guild_front/src/redux/projectsTrackerSlice.js

95 lines
2.7 KiB
JavaScript
Raw Normal View History

2023-04-28 14:56:59 +03:00
import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
2023-05-03 16:47:20 +03:00
import { apiRequest } from "../api/request";
2023-03-22 21:48:06 +03:00
const initialState = {
2023-04-28 14:56:59 +03:00
projects: [],
2023-05-02 18:51:19 +03:00
projectBoard: {},
2023-05-03 16:47:20 +03:00
toggleTab: 1,
modalType: "",
2023-05-05 00:50:48 +03:00
boardLoader: false
2023-03-22 21:48:06 +03:00
};
2023-05-03 16:47:20 +03:00
export const setProjectBoardFetch = createAsyncThunk("userInfo", (id) =>
apiRequest(`/project/get-project?project_id=${id}&expand=columns`)
2023-04-28 14:56:59 +03:00
);
2023-03-22 21:48:06 +03:00
export const projectsTrackerSlice = createSlice({
name: "projectsTracker",
initialState,
reducers: {
2023-04-28 14:56:59 +03:00
setAllProjects: (state, action) => {
2023-05-03 16:47:20 +03:00
state.projects = action.payload;
2023-04-28 14:56:59 +03:00
},
2023-03-23 16:43:37 +03:00
setProject: (state, action) => {
2023-04-28 14:56:59 +03:00
state.projects.push(action.payload);
2023-03-22 21:48:06 +03:00
},
2023-05-02 18:51:19 +03:00
setToggleTab: (state, action) => {
2023-05-03 16:47:20 +03:00
state.toggleTab = action.payload;
2023-05-02 18:51:19 +03:00
},
2023-04-28 18:29:13 +03:00
deleteProject: (state, action) => {
2023-05-08 00:41:39 +03:00
state.projects.forEach((project) => {
if (project.id === action.payload.id) {
project.status = 10
}
})
2023-04-28 18:29:13 +03:00
},
2023-05-05 00:50:48 +03:00
activeLoader: (state) => {
state.boardLoader = true
},
2023-04-28 14:56:59 +03:00
moveProjectTask: (state, action) => {
state.projectBoard.columns.forEach((column, index) => {
2023-04-28 14:56:59 +03:00
if (column.id === action.payload.columnId) {
2023-05-03 16:47:20 +03:00
column.tasks.push(action.payload.startWrapperIndex.task);
2023-04-28 18:29:13 +03:00
apiRequest(`/task/update-task`, {
2023-05-03 16:47:20 +03:00
method: "PUT",
2023-04-28 18:29:13 +03:00
data: {
task_id: action.payload.startWrapperIndex.task.id,
2023-05-03 16:47:20 +03:00
column_id: column.id,
},
}).then((res) => {});
2023-04-28 14:56:59 +03:00
}
if (column.id === action.payload.startWrapperIndex.index) {
2023-05-03 16:47:20 +03:00
state.projectBoard.columns[index].tasks = column.tasks.filter(
(task) => task.id !== action.payload.startWrapperIndex.task.id
);
2023-04-28 14:56:59 +03:00
}
2023-05-03 16:47:20 +03:00
});
},
2023-05-08 00:41:39 +03:00
editProjectName: (state, action) => {
state.projects.forEach((project) => {
if (project.id === action.payload.id) {
project.name = action.payload.name
}
})
},
2023-05-03 16:47:20 +03:00
modalToggle: (state, action) => {
state.modalType = action.payload;
},
2023-03-22 21:48:06 +03:00
},
2023-04-28 14:56:59 +03:00
extraReducers: {
[setProjectBoardFetch.fulfilled]: (state, action) => {
2023-05-03 16:47:20 +03:00
state.projectBoard = action.payload;
2023-05-05 00:50:48 +03:00
state.boardLoader = false
2023-05-03 16:47:20 +03:00
},
},
2023-03-22 21:48:06 +03:00
});
2023-05-03 16:47:20 +03:00
export const {
setProject,
deleteProject,
setAllProjects,
moveProjectTask,
setToggleTab,
modalToggle,
2023-05-08 00:41:39 +03:00
activeLoader,
editProjectName
2023-05-03 16:47:20 +03:00
} = projectsTrackerSlice.actions;
2023-03-22 21:48:06 +03:00
2023-04-28 14:56:59 +03:00
export const getProjects = (state) => state.tracker.projects;
export const getProjectBoard = (state) => state.tracker.projectBoard;
2023-05-03 16:47:20 +03:00
export const getToggleTab = (state) => state.tracker.toggleTab;
export const getValueModalType = (state) => state.tracker.modalType;
2023-05-05 00:50:48 +03:00
export const getBoarderLoader = (state) => state.tracker.boardLoader
2023-03-22 21:48:06 +03:00
export default projectsTrackerSlice.reducer;