aboutsummaryrefslogtreecommitdiff
path: root/jb-ui/src/models/cashoutMethodsSlice.ts
diff options
context:
space:
mode:
Diffstat (limited to 'jb-ui/src/models/cashoutMethodsSlice.ts')
-rw-r--r--jb-ui/src/models/cashoutMethodsSlice.ts58
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),
+ );
+ },
},
});