create slice and store

This commit is contained in:
Joe_Peach committed 2026-09-25 18:40:34 +03:00
1 parent 9de3b363be
commit 3a530300ba
3 files changed
+68 -2

No files matched your search

+5
View File
@@ -2,4 +2,9 @@ export interface Request{
id: number;
text: string;
files: File[];
}
export interface Response{
test: string;
files: File[];
}
+61
View File
@@ -1 +1,62 @@
import {Request, Response} from '../../model/common';
import {createAsyncThunk, createSlice, PayloadAction} from '@reduxjs/toolkit';
import {createRequest} from '../../services/service';
interface RequestState {
files: File[];
text: string;
loading: boolean;
error: string | null;
}
const initialState: RequestState = {
files: [],
text: '',
loading: false,
error: null,
};
export const request = createAsyncThunk(
'request/create',
async (data: Request, {rejectWithValue}) => {
try{
const response = await createRequest(data);
return response;
} catch(error: any){
if(error.response?.data?.detail){
return rejectWithValue(error.response.data.detail);
} else {
return rejectWithValue(error instanceof Error ? error.message : "Ошибка создания запроса");
}
}
}
)
export const requestSlice = createSlice({
name:'requests',
initialState,
reducers: {
clearRequestError(state){
state.error = null;
}
},
extraReducers: (builder) => {
builder.addCase(request.pending, (state) => {
state.loading = true;
state.error = null;
})
builder.addCase(request.fulfilled, (state, action: PayloadAction<Response>) => {
state.loading = false;
state.error = null;
state.files = action.payload.files;
})
builder.addCase(request.rejected, (state, action) => {
state.loading = false;
state.error = (action.payload as string) || action.error.message || "Неизвестная ошибка";
})
}
})
export const {clearRequestError} = requestSlice.actions;
export default requestSlice.reducer;
+2 -2
View File
@@ -1,9 +1,9 @@
import { configureStore } from '@reduxjs/toolkit'
//import requestReducer from './slices/slice'
import requestReducer from './slices/slice'
export const store = configureStore({
reducer: {
//request: requestReducer
request: requestReducer
}
});