Author SHA1 Message Date
Joe_Peach 6ef1e381e4 Merge pull request 'Feat/api logic' (#1) from feat/api-logic into dev
Reviewed-on: #1
2026-09-25 16:54:22 +00:00
Joe_Peach 3a530300ba create slice and store 2026-09-25 18:40:34 +03:00
Joe_Peach 9de3b363be wrote request 2026-09-25 18:40:00 +03:00
4 changed files with 83 additions and 2 deletions

No files matched your search

+5
View File
@@ -3,3 +3,8 @@ export interface Request{
text: string;
files: File[];
}
export interface Response{
test: string;
files: File[];
}
+15
View File
@@ -1 +1,16 @@
import apiClient from "../config/client";
import { Request, Response } from "../model/common";
export async function createRequest(data: Request): Promise<Response> {
const formData = new FormData();
formData.append("id", data.id.toString());
formData.append("text", data.text);
data.files.forEach((file) => {
formData.append("files", file);
});
const response = await apiClient.post<Response>("/request", formData);
return response;
}
+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
}
});