import { createSlice, createAsyncThunk } from "@reduxjs/toolkit"; import sebnInventory from "../../apis/sebnInventory"; export const searchSap = createAsyncThunk( "search/searchSap", async (thunkAPI) => { const response = await sebnInventory.get( `sap_item/?${thunkAPI.mode}__icontains=${thunkAPI.value}` ); return response.data.results; } ); export const submitItem = createAsyncThunk( "search/submitItem", async (thunkAPI) => { const { area, description, inventory_id, inventory_taking, label_id, name, sap_id, serial_nbr, } = thunkAPI; const response = await sebnInventory.post(`item/`, { area: area, description: description, inventory_taking: inventory_taking, inventory_id: inventory_id, label_id: label_id, name: name, sap_id: sap_id, serial_nbr: serial_nbr, }); return response.data; } ); export const searchSlice = createSlice({ name: "search", initialState: { search_value: "", search_mode: "inventory_id", search_result: [], selected_item: null, history: [], }, reducers: { setSearchMode: (state, action) => { state.search_mode = action.payload; state.selected_item = null; }, setSearchValue: (state, action) => { state.search_value = action.payload; state.selected_item = null; }, setSelectedItem: (state, action) => { state.selected_item = action.payload; state.search_result = []; }, invokeItemForm: (state) => { state.search_value = ""; state.selected_item = { area: "", description: "", inventory_id: null, inventory_taking: null, label_id: "", name: "", sap_id: "", serial_nbr: "", }; }, cancelSubmit: (state) => { state.search_result = []; state.selected_item = null; }, }, extraReducers: { [searchSap.fulfilled]: (state, action) => { state.search_result = action.payload; }, [submitItem.fulfilled]: (state, action) => { state.history.push(action.payload); state.selected_item = null; state.search_value = ""; }, }, }); export const { setSearchMode, setSearchValue, setSelectedItem, cancelSubmit, invokeItemForm, } = searchSlice.actions; export default searchSlice.reducer;