import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'; import api from '@/services/api'; import { setNotificationBarMessage } from './notificationBarSlice'; const mockCreators = [ { id: 1, sessions: 1, creator: 12, shoppableCreators: 12, avgFollowers: 12, avgGMV: 12, avgVideoViews: 12, date: '2021-01-01', }, { id: 2, sessions: 2, creator: 12, shoppableCreators: 12, avgFollowers: 12, avgGMV: 12, avgVideoViews: 12, date: '2021-01-01', }, ]; export const fetchDiscovery = createAsyncThunk( 'discovery/fetchDiscovery', async (searchParams, { rejectWithValue }) => { try { const response = await api.post('/creators/search/', searchParams); if (response.code === 200) { return response.data; } throw new Error(response.message); } catch (error) { dispatch(setNotificationBarMessage({ message: error.message, type: 'error' })); return rejectWithValue(error.message); } } ); export const fetchDiscoveryByMode = createAsyncThunk( 'discovery/fetchDiscoveryByMode', async (params, { rejectWithValue }) => { try { const response = await api.post('/discovery/creators/search_tags/', params); if (response.code === 200) { return response.data; } throw new Error(response.message); } catch (error) { dispatch(setNotificationBarMessage({ message: error.message, type: 'error' })); return rejectWithValue(error.message); } } ); const initialState = { creators: [], status: 'idle', error: null, }; const discoverySlice = createSlice({ name: 'discovery', initialState, reducers: {}, extraReducers: (builder) => { builder .addCase(fetchDiscovery.pending, (state) => { state.status = 'loading'; }) .addCase(fetchDiscovery.fulfilled, (state, action) => { state.status = 'succeeded'; state.creators = action.payload; }) .addCase(fetchDiscovery.rejected, (state, action) => { state.status = 'failed'; state.error = action.error.message; }) .addCase(fetchDiscoveryByMode.pending, (state) => { state.status = 'loading'; }) .addCase(fetchDiscoveryByMode.fulfilled, (state, action) => { state.status = 'succeeded'; state.creators = action.payload; }) .addCase(fetchDiscoveryByMode.rejected, (state, action) => { state.status = 'failed'; state.error = action.error.message; }); }, }); export const {} = discoverySlice.actions; export default discoverySlice.reducer;