diff options
Diffstat (limited to 'jb-ui/src/models/grlStatsSlice.ts')
| -rw-r--r-- | jb-ui/src/models/grlStatsSlice.ts | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/jb-ui/src/models/grlStatsSlice.ts b/jb-ui/src/models/grlStatsSlice.ts new file mode 100644 index 0000000..9385256 --- /dev/null +++ b/jb-ui/src/models/grlStatsSlice.ts @@ -0,0 +1,54 @@ +import { StatsSnapshot } from "@/api_fsb"; +import { RootState } from "@/store"; +import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit'; + + +const initialState: StatsSnapshot[] = [] + +const grlStatsSlice = createSlice({ + name: 'grlStats', + initialState, + reducers: { + + addStatsData(state, action: PayloadAction<StatsSnapshot>) { + state.push(action.payload); + } + } +}) + +export const { + addStatsData +} = grlStatsSlice.actions; +export default grlStatsSlice.reducer + + +export const selectRecentStats = createSelector( + [ + (state: RootState) => state.stats, + ], + (stats): StatsSnapshot | null => { + const lastStat = stats[stats.length - 1]; + return lastStat ?? null; + } +); + +export const activeUsers = createSelector( + [selectRecentStats], + (recentStats): number | null => { + return recentStats?.active_users_last_24h ?? null; + } +); + +export const activeSurveys = createSelector( + [selectRecentStats], + (recentStats): number | null => { + return recentStats?.live_task_count?.total ?? null; + } +); + +export const maxPayout = createSelector( + [selectRecentStats], + (recentStats): number | null => { + return recentStats?.live_tasks_max_payout?.value ?? null; + } +); |
