aboutsummaryrefslogtreecommitdiff
path: root/jb-ui/src/models/cashoutMethodsSlice.ts
blob: 92c03da052edd896f41dc83e0050beefd0d36326 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { CashoutMethodOut } from "@/api_fsb";
import type { RootState } from "@/store";
import { createSlice, createEntityAdapter } from "@reduxjs/toolkit";

// Entity adapter for normalized storage
const cashoutMethodsAdapter = createEntityAdapter({
  selectId: (model: CashoutMethodOut) => model.id!,
  sortComparer: (a, b) => {
    return (b.min_value ?? 0) - (a.min_value ?? 0);
  },
});

const cashoutMethodsSlice = createSlice({
  name: "cashoutMethods",
  initialState: cashoutMethodsAdapter.getInitialState(),

  reducers: {
    addCashoutMethod: cashoutMethodsAdapter.addOne,
    addCashoutMethods: cashoutMethodsAdapter.addMany,
    upsertCashoutMethod: cashoutMethodsAdapter.upsertOne, // Add or Update
  },
});

export const { addCashoutMethod, addCashoutMethods, upsertCashoutMethod } =
  cashoutMethodsSlice.actions;

export const cashoutMethodsSelectors = cashoutMethodsAdapter.getSelectors(
  (state: RootState) => state.cashoutMethods,
);

export const selectAllCashoutMethods = (
  state: RootState,
): CashoutMethodOut[] => {
  return cashoutMethodsSelectors.selectAll(state) ?? [];
};

export default cashoutMethodsSlice.reducer;