2023-04-28 14:56:59 +03:00
|
|
|
import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
|
|
|
|
import {apiRequest} from "../api/request";
|
2023-03-22 21:48:06 +03:00
|
|
|
|
|
|
|
const initialState = {
|
2023-04-28 14:56:59 +03:00
|
|
|
projects: [],
|
|
|
|
projectBoard: {}
|
2023-03-22 21:48:06 +03:00
|
|
|
};
|
|
|
|
|
2023-04-28 14:56:59 +03:00
|
|
|
export const setProjectBoardFetch = createAsyncThunk(
|
|
|
|
'userInfo',
|
|
|
|
(id) =>
|
|
|
|
apiRequest(`/project/get-project?project_id=${id}&expand=columns`)
|
|
|
|
);
|
|
|
|
|
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) => {
|
|
|
|
state.projects = action.payload
|
|
|
|
},
|
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-04-28 14:56:59 +03:00
|
|
|
moveProjectTask: (state, action) => {
|
2023-04-28 16:15:46 +03:00
|
|
|
state.projectBoard.columns.forEach((column, index) => {
|
2023-04-28 14:56:59 +03:00
|
|
|
if (column.id === action.payload.columnId) {
|
|
|
|
column.tasks.push(action.payload.startWrapperIndex.task)
|
|
|
|
}
|
|
|
|
if (column.id === action.payload.startWrapperIndex.index) {
|
2023-04-28 16:15:46 +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-03-22 21:48:06 +03:00
|
|
|
},
|
2023-04-28 14:56:59 +03:00
|
|
|
extraReducers: {
|
|
|
|
[setProjectBoardFetch.fulfilled]: (state, action) => {
|
|
|
|
state.projectBoard = action.payload
|
|
|
|
}
|
|
|
|
}
|
2023-03-22 21:48:06 +03:00
|
|
|
});
|
|
|
|
|
2023-04-28 14:56:59 +03:00
|
|
|
export const { setProject, setAllProjects, moveProjectTask } = 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-03-22 21:48:06 +03:00
|
|
|
|
|
|
|
export default projectsTrackerSlice.reducer;
|