CreatorCenter_OOIN/src/store/slices/discoverySlice.js

99 lines
2.9 KiB
JavaScript
Raw Normal View History

2025-05-15 10:42:39 +08:00
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
2025-05-27 00:55:28 +08:00
import api from '@/services/api';
import { setNotificationBarMessage } from './notificationBarSlice';
2025-05-15 10:42:39 +08:00
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',
},
];
2025-05-27 00:55:28 +08:00
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);
}
}
);
2025-05-15 10:42:39 +08:00
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;
2025-05-27 00:55:28 +08:00
})
.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;
2025-05-15 10:42:39 +08:00
});
},
});
export const {} = discoverySlice.actions;
export default discoverySlice.reducer;