|
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;
|
|
|