diff options
Diffstat (limited to 'jb-ui/src/models/cashoutMethodsSlice.ts')
| -rw-r--r-- | jb-ui/src/models/cashoutMethodsSlice.ts | 58 |
1 files changed, 52 insertions, 6 deletions
diff --git a/jb-ui/src/models/cashoutMethodsSlice.ts b/jb-ui/src/models/cashoutMethodsSlice.ts index 92c03da..080cb04 100644 --- a/jb-ui/src/models/cashoutMethodsSlice.ts +++ b/jb-ui/src/models/cashoutMethodsSlice.ts @@ -1,23 +1,69 @@ -import { CashoutMethodOut } from "@/api_fsb"; +import { WalletApi, CashoutMethodOut } from "@/api_fsb"; import type { RootState } from "@/store"; -import { createSlice, createEntityAdapter } from "@reduxjs/toolkit"; +import { + PayloadAction, + createSlice, + createEntityAdapter, +} from "@reduxjs/toolkit"; +import { bpid } from "@/lib/utils"; +import { createAsyncThunk } 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); + return (a.min_value ?? 0) - (b.min_value ?? 0); }, }); +export const fetchCashoutMethods = createAsyncThunk( + "cashoutMethodsSlice/fetchCashoutMethods", + async (bpuid: string) => { + console.log("cashoutMethodsSlice/fetchCashoutMethods"); + const res = + await new WalletApi().getCashoutMethodsProductIdCashoutMethodsGet( + bpid, + bpuid, + ); + return res.data.cashout_methods as CashoutMethodOut[]; + }, +); + +interface CashoutMethodClientState { + is_active?: boolean; + is_expanded?: boolean; +} + +const withClientDefaults = (method: CashoutMethodOut): CashoutMethodEntity => ({ + ...method, + is_active: false, + is_expanded: false, +}); + +type CashoutMethodEntity = CashoutMethodOut & CashoutMethodClientState; + const cashoutMethodsSlice = createSlice({ name: "cashoutMethods", initialState: cashoutMethodsAdapter.getInitialState(), reducers: { - addCashoutMethod: cashoutMethodsAdapter.addOne, - addCashoutMethods: cashoutMethodsAdapter.addMany, - upsertCashoutMethod: cashoutMethodsAdapter.upsertOne, // Add or Update + addCashoutMethod: (state, action: PayloadAction<CashoutMethodOut>) => { + cashoutMethodsAdapter.addOne(state, withClientDefaults(action.payload)); + }, + + addCashoutMethods: (state, action: PayloadAction<CashoutMethodOut[]>) => { + cashoutMethodsAdapter.addMany( + state, + action.payload.map(withClientDefaults), + ); + }, + + upsertCashoutMethod: (state, action: PayloadAction<CashoutMethodOut>) => { + cashoutMethodsAdapter.upsertOne( + state, + withClientDefaults(action.payload), + ); + }, }, }); |
