zzz / frontend /src /state /code-slice.ts
ar08's picture
Upload 1040 files
246d201 verified
import { createSlice } from "@reduxjs/toolkit";
export interface FileState {
path: string;
savedContent: string;
unsavedContent: string;
}
export const initialState = {
code: "",
path: "",
refreshID: 0,
fileStates: [] as FileState[],
};
export const codeSlice = createSlice({
name: "code",
initialState,
reducers: {
setCode: (state, action) => {
state.code = action.payload;
},
setActiveFilepath: (state, action) => {
state.path = action.payload;
},
setRefreshID: (state, action) => {
state.refreshID = action.payload;
},
setFileStates: (state, action) => {
state.fileStates = action.payload;
},
addOrUpdateFileState: (state, action) => {
const { path, unsavedContent, savedContent } = action.payload;
const newFileStates = state.fileStates.filter(
(fileState) => fileState.path !== path,
);
newFileStates.push({ path, savedContent, unsavedContent });
state.fileStates = newFileStates;
},
removeFileState: (state, action) => {
const path = action.payload;
state.fileStates = state.fileStates.filter(
(fileState) => fileState.path !== path,
);
},
},
});
export const {
setCode,
setActiveFilepath,
setRefreshID,
addOrUpdateFileState,
removeFileState,
setFileStates,
} = codeSlice.actions;
export default codeSlice.reducer;