49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
import { DayEarning } from '@app-types/index';
|
|
import { mockWeeklyEarnings, mockTodayEarnings } from '@store/mockData/mockEarnings';
|
|
|
|
interface EarningsState {
|
|
todayEarnings: number;
|
|
completedCount: number;
|
|
onlineMinutes: number;
|
|
weeklyData: DayEarning[];
|
|
}
|
|
|
|
const initialState: EarningsState = {
|
|
todayEarnings: mockTodayEarnings.total,
|
|
completedCount: mockTodayEarnings.completedCount,
|
|
onlineMinutes: mockTodayEarnings.onlineMinutes,
|
|
weeklyData: mockWeeklyEarnings,
|
|
};
|
|
|
|
const earningsSlice = createSlice({
|
|
name: 'earnings',
|
|
initialState,
|
|
reducers: {
|
|
addEarning: (state, action: PayloadAction<number>) => {
|
|
state.todayEarnings += action.payload;
|
|
state.completedCount += 1;
|
|
},
|
|
setEarnings: (state, action: PayloadAction<Partial<EarningsState>>) => {
|
|
return { ...state, ...action.payload };
|
|
},
|
|
incrementOnlineMinutes: (state) => {
|
|
state.onlineMinutes += 1;
|
|
},
|
|
resetTodayEarnings: (state) => {
|
|
state.todayEarnings = 0;
|
|
state.completedCount = 0;
|
|
state.onlineMinutes = 0;
|
|
},
|
|
},
|
|
});
|
|
|
|
export const {
|
|
addEarning,
|
|
setEarnings,
|
|
incrementOnlineMinutes,
|
|
resetTodayEarnings,
|
|
} = earningsSlice.actions;
|
|
|
|
export default earningsSlice.reducer;
|