This commit is contained in:
chamikaJ
2025-04-17 18:28:54 +05:30
parent f583291d8a
commit 8825b0410a
2837 changed files with 241385 additions and 127578 deletions

View File

@@ -0,0 +1,63 @@
import { projectsApiService } from '@/api/projects/projects.api.service';
import { IProjectViewModel } from '@/types/project/projectViewModel.types';
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
interface IProjectDrawerState {
isProjectDrawerOpen: boolean;
projectId: string | null;
projectLoading: boolean;
project: IProjectViewModel | null;
}
const initialState: IProjectDrawerState = {
isProjectDrawerOpen: false,
projectId: null,
projectLoading: false,
project: null,
};
export const fetchProjectData = createAsyncThunk(
'project/fetchProjectData',
async (projectId: string, { rejectWithValue, dispatch }) => {
try {
const response = await projectsApiService.getProject(projectId);
return response.body;
} catch (error) {
return rejectWithValue(error instanceof Error ? error.message : 'Failed to fetch project');
}
}
);
const projectDrawerSlice = createSlice({
name: 'projectDrawer',
initialState,
reducers: {
toggleProjectDrawer: state => {
state.isProjectDrawerOpen = !state.isProjectDrawerOpen;
},
setProjectId: (state, action) => {
state.projectId = action.payload;
},
setProjectData: (state, action) => {
state.project = action.payload;
},
},
extraReducers: builder => {
builder
.addCase(fetchProjectData.pending, state => {
state.projectLoading = true;
})
.addCase(fetchProjectData.fulfilled, (state, action) => {
state.project = action.payload;
state.projectLoading = false;
})
.addCase(fetchProjectData.rejected, state => {
state.projectLoading = false;
});
},
});
export const { toggleProjectDrawer, setProjectId, setProjectData } = projectDrawerSlice.actions;
export default projectDrawerSlice.reducer;