diff --git a/src/pages/master/walletRule/WalletRuleMaster.tsx b/src/pages/master/walletRule/WalletRuleMaster.tsx
new file mode 100644
index 0000000..c98a242
--- /dev/null
+++ b/src/pages/master/walletRule/WalletRuleMaster.tsx
@@ -0,0 +1,32 @@
+import { Container, DataGridInner } from '@/components';
+import { ManageWalletRuleContextProvider } from './hooks/ManageWalletRuleContext';
+import { Breadcrumbs, Link } from '@mui/material';
+
+const WalletRuleMaster = () => {
+ return (
+
+
+ Wallet Rule
+
+
+ Dashboard
+
+
+
+ Master Data
+
+
+
+ Manage Wallet Rule
+
+
+
+
+
+
+
+
+ );
+};
+
+export default WalletRuleMaster;
diff --git a/src/pages/master/walletRule/blocks/ListToolbar.tsx b/src/pages/master/walletRule/blocks/ListToolbar.tsx
new file mode 100644
index 0000000..fb78c55
--- /dev/null
+++ b/src/pages/master/walletRule/blocks/ListToolbar.tsx
@@ -0,0 +1,55 @@
+import { DefaultTooltip, KeenIcon, useDataGrid } from '@/components';
+import { Button } from '@/components/ui/button';
+import { useManageProductsContext } from '../../products/hooks/useManageProductsContext';
+
+const ListToolbar = () => {
+ const { table, reload } = useDataGrid();
+ const { handleAddDialog } = useManageProductsContext();
+
+ return (
+
+
+
+
+
+ {/*
+
+ */}
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default ListToolbar;
diff --git a/src/pages/master/walletRule/hooks/ManageWalletRuleContext.tsx b/src/pages/master/walletRule/hooks/ManageWalletRuleContext.tsx
new file mode 100644
index 0000000..e196eaa
--- /dev/null
+++ b/src/pages/master/walletRule/hooks/ManageWalletRuleContext.tsx
@@ -0,0 +1,240 @@
+import { DataGridColumnHeader, DataGridProvider, KeenIcon } from '@/components';
+import { Toaster } from '@/components/ui/sonner';
+import { apiConfig } from '@/config/api.config';
+import { useCallApi } from '@/hooks';
+import { ColumnDef } from '@tanstack/react-table';
+import React, { createContext, useCallback, useMemo, useState } from 'react';
+import ListToolbar from '../blocks/ListToolbar';
+
+interface WalletRuleProps {
+ name: string;
+ id_currency: string;
+ status: string;
+}
+
+interface ContextProps {
+ walletRules: WalletRuleProps[];
+ showAddDialog: boolean;
+ handleAddDialog: (show: boolean) => void;
+ showEditDialog: boolean;
+ handleEditDialog: (show: boolean, selected_walletRule: string | null) => void;
+ showDeleteDialog: boolean;
+ handleDeleteDialog: (show: boolean, selected_walletRule: string | null) => void;
+ selectedWalletRule: string | null;
+ getWalletRuleLists: (
+ limit: number,
+ page: number,
+ with_deleted: boolean,
+ order_field: any,
+ order_direction: any
+ ) => Promise<{ data: WalletRuleProps[]; totalCount: number } | undefined>;
+}
+
+const initialProps: ContextProps = {
+ walletRules: [],
+ showAddDialog: false,
+ handleAddDialog: (show: boolean) => {},
+ showEditDialog: false,
+ handleEditDialog: (show: boolean, selected_walletRule: string | null) => {},
+ showDeleteDialog: false,
+ handleDeleteDialog: (show: boolean, selected_walletRule: string | null) => {},
+ selectedWalletRule: null,
+ getWalletRuleLists: async () => undefined
+};
+
+const ManageWalletRuleContext = createContext(initialProps);
+const API_URL_WALLET = apiConfig.service_wallet;
+
+const ManageWalletRuleContextProvider = ({ children }: { children: React.ReactNode }) => {
+ const [walletRules, setWalletRules] = useState([]);
+ const [showAddDialog, setShowAddDialog] = useState(false);
+ const [showEditDialog, setShowEditDialog] = useState(false);
+ const [showDeleteDialog, setShowDeleteDialog] = useState(false);
+ const [selectedWalletRule, setSelectedWalletRule] = useState(null);
+ const { GetData } = useCallApi();
+
+ const handleAddDialog = useCallback((show: boolean) => {
+ setShowAddDialog(show);
+ }, []);
+
+ const handleEditDialog = useCallback((show: boolean, selected_walletRule: string | null) => {
+ setShowEditDialog(show);
+ setSelectedWalletRule(show ? selected_walletRule : null);
+ }, []);
+
+ const handleDeleteDialog = useCallback((show: boolean, selected_walletRule: string | null) => {
+ setShowDeleteDialog(show);
+ setSelectedWalletRule(show ? selected_walletRule : null);
+ }, []);
+
+ const columns = useMemo[]>(
+ () => [
+ {
+ accessorFn: (row) => row.ID,
+ id: 'id',
+ header: ({ column }) => ,
+ enableSorting: true,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[100px]'
+ }
+ },
+ {
+ accessorFn: (row) => row.IDWallet,
+ id: 'name',
+ header: ({ column }) => ,
+ enableSorting: true,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[250px]'
+ }
+ },
+ {
+ accessorFn: (row) => row.balance_minimum,
+ id: 'balance_minimum',
+ header: ({ column }) => ,
+ enableSorting: true,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[250px]'
+ }
+ },
+ {
+ accessorFn: (row) => row.balance_maximum,
+ id: 'balance_maximum',
+ header: ({ column }) => ,
+ enableSorting: true,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[250px]'
+ }
+ },
+ {
+ accessorFn: (row) => row.credit_limit,
+ id: 'credit_limit',
+ header: ({ column }) => ,
+ enableSorting: true,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[250px]'
+ }
+ },
+ {
+ accessorFn: (row) => row.max_transaction_per_day,
+ id: 'max_transaction_per_day',
+ header: ({ column }) => (
+
+ ),
+ enableSorting: true,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[250px]'
+ }
+ },
+ {
+ accessorFn: (row) => row.monthly_limit,
+ id: 'monthly_limit',
+ header: ({ column }) => ,
+ enableSorting: true,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[250px]'
+ }
+ },
+ {
+ accessorFn: (row) => row.status,
+ id: 'status',
+ header: ({ column }) => ,
+ enableSorting: true,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[250px]'
+ }
+ },
+ {
+ id: 'actions',
+ header: ({ column }) => ,
+ enableSorting: false,
+ enableHiding: false,
+ cell: (data) => {
+ const row = data.row.original;
+ return (
+ <>
+
+
+ >
+ );
+ },
+ meta: {
+ headerClassName: 'w-[100px]',
+ cellClassName: 'text-center'
+ }
+ }
+ ],
+ []
+ );
+
+ const getWalletRuleLists = async (page: number, limit: number, sorting: any, filter: any) => {
+ try {
+ sorting = sorting.length == 0 ? [{ id: 'name', desc: false }] : sorting;
+ filter = filter.length == 0 ? {} : { any: filter[0].value?.toLowerCase() };
+ const response = await GetData(`${API_URL_WALLET}/dashboard/wallet_rule`, {
+ limit,
+ page: page + 1,
+ with_deleted: false,
+ order_field: sorting[0].id,
+ order_direction: sorting[0].desc == false ? 'ASC' : 'DESC',
+ filter: JSON.stringify(filter)
+ });
+ console.log(response?.data);
+ setWalletRules(response?.data.list);
+ return { data: response?.data.list, totalCount: response?.data.total_count };
+ } catch (error) {
+ console.error('Error fetching Wallet Rule', error);
+ }
+ };
+
+ return (
+
+
+ }
+ layout={{ card: true }}
+ sorting={[{ id: 'id', desc: false }]}
+ serverSide={true}
+ onFetchData={({ pageIndex, pageSize, sorting, columnFilters }) =>
+ getWalletRuleLists(pageIndex, pageSize, sorting, columnFilters)
+ }
+ >
+ {children}
+
+
+ );
+};
+
+export { ManageWalletRuleContext, ManageWalletRuleContextProvider };
+export type { WalletRuleProps };
diff --git a/src/pages/master/walletRule/hooks/useManageWalletRuleContext.tsx b/src/pages/master/walletRule/hooks/useManageWalletRuleContext.tsx
new file mode 100644
index 0000000..5d1c3a7
--- /dev/null
+++ b/src/pages/master/walletRule/hooks/useManageWalletRuleContext.tsx
@@ -0,0 +1,16 @@
+import { useContext } from 'react';
+import { ManageWalletRuleContext } from './ManageWalletRuleContext';
+
+const useManageWalletRuleContext = () => {
+ const context = useContext(ManageWalletRuleContext);
+
+ if (!context) {
+ throw new Error(
+ 'useManageWalletRuleContext must be used within a ManageWalletRuleContextProvider'
+ );
+ }
+
+ return context;
+};
+
+export { useManageWalletRuleContext };
diff --git a/src/routing/AppRoutingSetup.tsx b/src/routing/AppRoutingSetup.tsx
index faa26c7..ace6ab8 100644
--- a/src/routing/AppRoutingSetup.tsx
+++ b/src/routing/AppRoutingSetup.tsx
@@ -35,6 +35,7 @@ import ProductsMaster from '@/pages/master/products/ProductsMaster';
import ProviderMaster from '@/pages/master/provider/ProviderMaster';
import Transaction from '@/pages/transaction/transaction';
import ConversionMaster from '@/pages/master/conversion/ConversionMaster';
+import WalletRuleMaster from '@/pages/master/walletRule/WalletRuleMaster';
const AppRoutingSetup = (): ReactElement => {
return (
@@ -56,6 +57,7 @@ const AppRoutingSetup = (): ReactElement => {
element={}
/>
} />
+ } />
} />