fix member n kyc
This commit is contained in:
@ -46,7 +46,7 @@ export async function doSaveLogActivity(payload: SaveLogsParams): Promise<Action
|
|||||||
throw new Error(response.data.message ?? 'Failed to save log');
|
throw new Error(response.data.message ?? 'Failed to save log');
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('Success Create logs with params =>', dtParams);
|
// console.log('Success Create logs with params =>', dtParams);
|
||||||
|
|
||||||
return { status: true, message: 'Success logs users' };
|
return { status: true, message: 'Success logs users' };
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
|
|||||||
@ -252,14 +252,14 @@ const DashboardHomePage = () => {
|
|||||||
<Card
|
<Card
|
||||||
title="Registered Users"
|
title="Registered Users"
|
||||||
total={responseStatisticCard?.data.total_registered ?? 0}
|
total={responseStatisticCard?.data.total_registered ?? 0}
|
||||||
growth={responseStatisticCard?.data.registered_last_week.percent ?? 0}
|
growth={parseFloat((responseStatisticCard?.data?.registered_last_week.percent ?? 0).toFixed(2)) ?? 0}
|
||||||
surplus={responseStatisticCard?.data.registered_last_week.surplus ?? false}
|
surplus={responseStatisticCard?.data.registered_last_week.surplus ?? false}
|
||||||
icon="test"
|
icon="test"
|
||||||
/>
|
/>
|
||||||
<Card
|
<Card
|
||||||
title="Unregistered Users"
|
title="Unregistered Users"
|
||||||
total={responseStatisticCard?.data.total_unregistered ?? 0}
|
total={responseStatisticCard?.data.total_unregistered ?? 0}
|
||||||
growth={responseStatisticCard?.data.unregistered_last_week.percent ?? 0}
|
growth={parseFloat((responseStatisticCard?.data?.unregistered_last_week.percent ?? 0).toFixed(2)) ?? 0}
|
||||||
surplus={responseStatisticCard?.data.unregistered_last_week.surplus ?? false}
|
surplus={responseStatisticCard?.data.unregistered_last_week.surplus ?? false}
|
||||||
icon="test"
|
icon="test"
|
||||||
|
|
||||||
@ -267,28 +267,28 @@ const DashboardHomePage = () => {
|
|||||||
<Card
|
<Card
|
||||||
title="Total Cash-in"
|
title="Total Cash-in"
|
||||||
total={responseStatisticCard?.data.total_cash_in ?? 0}
|
total={responseStatisticCard?.data.total_cash_in ?? 0}
|
||||||
growth={responseStatisticCard?.data.cash_in_last_week.percent ?? 0}
|
growth={parseFloat((responseStatisticCard?.data?.cash_in_last_week.percent ?? 0).toFixed(2))?? 0}
|
||||||
surplus={responseStatisticCard?.data.cash_in_last_week.surplus ?? false}
|
surplus={responseStatisticCard?.data.cash_in_last_week.surplus ?? false}
|
||||||
icon="test"
|
icon="test"
|
||||||
/>
|
/>
|
||||||
<Card
|
<Card
|
||||||
title="Total Cash-out"
|
title="Total Cash-out"
|
||||||
total={responseStatisticCard?.data.total_cash_out ?? 0}
|
total={responseStatisticCard?.data.total_cash_out ?? 0}
|
||||||
growth={responseStatisticCard?.data.cash_out_last_week.percent ?? 0}
|
growth={parseFloat((responseStatisticCard?.data?.cash_out_last_week.percent ?? 0).toFixed(2)) ?? 0}
|
||||||
surplus={responseStatisticCard?.data.cash_out_last_week.surplus ?? false}
|
surplus={responseStatisticCard?.data.cash_out_last_week.surplus ?? false}
|
||||||
icon="test"
|
icon="test"
|
||||||
/>
|
/>
|
||||||
<Card
|
<Card
|
||||||
title="Active Event"
|
title="Active Event"
|
||||||
total={responseStatisticCard?.data.total_event ?? 0}
|
total={responseStatisticCard?.data.total_event ?? 0}
|
||||||
growth={responseStatisticCard?.data.event_last_week.percent ?? 0}
|
growth={parseFloat((responseStatisticCard?.data?.event_last_week.percent ?? 0).toFixed(2)) ?? 0}
|
||||||
surplus={responseStatisticCard?.data.event_last_week.surplus ?? false}
|
surplus={responseStatisticCard?.data.event_last_week.surplus ?? false}
|
||||||
icon="test"
|
icon="test"
|
||||||
/>
|
/>
|
||||||
<Card
|
<Card
|
||||||
title="Total Billing"
|
title="Total Billing"
|
||||||
total={responseStatisticCard?.data.total_billing ?? 0}
|
total={responseStatisticCard?.data.total_billing ?? 0}
|
||||||
growth={responseStatisticCard?.data.billing_last_week.percent ?? 0}
|
growth={parseFloat((responseStatisticCard?.data?.billing_last_week.percent ?? 0).toFixed(2)) ?? 0}
|
||||||
surplus={responseStatisticCard?.data.billing_last_week.surplus ?? false}
|
surplus={responseStatisticCard?.data.billing_last_week.surplus ?? false}
|
||||||
icon='test'
|
icon='test'
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -42,6 +42,7 @@ const TransactionPieChart = ({ startdate, enddate }: Props) => {
|
|||||||
{ name: 'Topup', value: parseFloat((responseTransactionValue?.data?.U ?? 0).toFixed(2)), color: '#9f7aea' },
|
{ name: 'Topup', value: parseFloat((responseTransactionValue?.data?.U ?? 0).toFixed(2)), color: '#9f7aea' },
|
||||||
{ name: 'Purchase', value: parseFloat((responseTransactionValue?.data?.P ?? 0).toFixed(2)), color: '#baf7c5' },
|
{ name: 'Purchase', value: parseFloat((responseTransactionValue?.data?.P ?? 0).toFixed(2)), color: '#baf7c5' },
|
||||||
{ name: 'Withdraw', value: parseFloat((responseTransactionValue?.data?.W ?? 0).toFixed(2)), color: '#f56565' },
|
{ name: 'Withdraw', value: parseFloat((responseTransactionValue?.data?.W ?? 0).toFixed(2)), color: '#f56565' },
|
||||||
|
{ name: 'Top Up Partner', value: parseFloat((responseTransactionValue?.data?.N ?? 0).toFixed(2)), color: '#f7fa52' },
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -61,6 +61,9 @@ const TransactionValue = ({ startdate, enddate }: Props) => {
|
|||||||
case "R":
|
case "R":
|
||||||
type = "Return";
|
type = "Return";
|
||||||
break;
|
break;
|
||||||
|
case "N":
|
||||||
|
type = "Top Up Partner";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
type = "Unknown";
|
type = "Unknown";
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -235,7 +235,7 @@ const ManageGroups = () => {
|
|||||||
<DataGridProvider
|
<DataGridProvider
|
||||||
data={dataGroup}
|
data={dataGroup}
|
||||||
columns={getColumns(handleUpdate)}
|
columns={getColumns(handleUpdate)}
|
||||||
pagination={{ size: 25 }}
|
pagination={{ size: 10 }}
|
||||||
toolbar={
|
toolbar={
|
||||||
<ListToolBar
|
<ListToolBar
|
||||||
createGroup={createGroup}
|
createGroup={createGroup}
|
||||||
|
|||||||
@ -180,7 +180,7 @@ const ManageWalletContextProvider = ({ children }: { children: React.ReactNode }
|
|||||||
<Toaster expand visibleToasts={9} duration={3000} />
|
<Toaster expand visibleToasts={9} duration={3000} />
|
||||||
<DataGridProvider
|
<DataGridProvider
|
||||||
columns={columns}
|
columns={columns}
|
||||||
pagination={{ size: 25 }}
|
pagination={{ size: 10 }}
|
||||||
toolbar={<ListToolbar />}
|
toolbar={<ListToolbar />}
|
||||||
layout={{ card: true }}
|
layout={{ card: true }}
|
||||||
sorting={[{ id: 'wallets.created_at', desc: true }]}
|
sorting={[{ id: 'wallets.created_at', desc: true }]}
|
||||||
|
|||||||
@ -97,7 +97,7 @@ const EditDialog = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const data = response.data;
|
const data = response.data;
|
||||||
console.log('Fetched data:', data);
|
// console.log('Fetched data:', data);
|
||||||
|
|
||||||
setReviewNotes(data.review_notes || '');
|
setReviewNotes(data.review_notes || '');
|
||||||
|
|
||||||
|
|||||||
@ -92,7 +92,7 @@ const ManageFeedbackMemberProvider = ({ children }: { children: React.ReactNode
|
|||||||
const columns = useMemo<ColumnDef<any>[]>(
|
const columns = useMemo<ColumnDef<any>[]>(
|
||||||
() => [
|
() => [
|
||||||
{
|
{
|
||||||
accessorFn: (row) => row.customerid,
|
accessorFn: (row) => row.fullname,
|
||||||
id: 'customer_id',
|
id: 'customer_id',
|
||||||
header: ({ column }) => <DataGridColumnHeader title="Customer Name" column={column} />,
|
header: ({ column }) => <DataGridColumnHeader title="Customer Name" column={column} />,
|
||||||
enableSorting: false,
|
enableSorting: false,
|
||||||
|
|||||||
@ -22,7 +22,7 @@ const ManageKycDeletion = () => {
|
|||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
<Link underline="none" color="inherit">
|
<Link underline="none" color="inherit">
|
||||||
<span className="text-sm">History Disbursement</span>
|
<span className="text-sm">Manage KYC Deletion</span>
|
||||||
</Link>
|
</Link>
|
||||||
</Breadcrumbs>
|
</Breadcrumbs>
|
||||||
<div className="grid gap-5 lg:gap-7.5">
|
<div className="grid gap-5 lg:gap-7.5">
|
||||||
|
|||||||
@ -126,7 +126,7 @@ const ManageKycDeletionContextProvider = ({ children }: { children: React.ReactN
|
|||||||
order_direction: 'DESC',
|
order_direction: 'DESC',
|
||||||
filter: JSON.stringify(formattedFilter)
|
filter: JSON.stringify(formattedFilter)
|
||||||
});
|
});
|
||||||
|
|
||||||
setManageKyc(response?.data.list);
|
setManageKyc(response?.data.list);
|
||||||
return { data: response?.data.list, totalCount: response?.data.total_count };
|
return { data: response?.data.list, totalCount: response?.data.total_count };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@ -246,7 +246,7 @@ const Kyc = () => {
|
|||||||
)}
|
)}
|
||||||
<DataGridProvider
|
<DataGridProvider
|
||||||
data={members}
|
data={members}
|
||||||
pagination={{ size: 25 }}
|
pagination={{ size: 10 }}
|
||||||
columns={getColumns(handleUpdate)}
|
columns={getColumns(handleUpdate)}
|
||||||
layout={{ card: true }}
|
layout={{ card: true }}
|
||||||
sorting={[{ id: 'created_at', desc: true }]}
|
sorting={[{ id: 'created_at', desc: true }]}
|
||||||
|
|||||||
@ -266,7 +266,7 @@ const ManageMembers = () => {
|
|||||||
)}
|
)}
|
||||||
<DataGridProvider
|
<DataGridProvider
|
||||||
data={members}
|
data={members}
|
||||||
pagination={{ size: 25 }}
|
pagination={{ size: 10 }}
|
||||||
columns={getColumns(handleUpdate)}
|
columns={getColumns(handleUpdate)}
|
||||||
layout={{ card: true }}
|
layout={{ card: true }}
|
||||||
serverSide={false}
|
serverSide={false}
|
||||||
|
|||||||
@ -292,7 +292,7 @@ const ManageMenusContextProvider = ({ children }: { children: React.ReactNode })
|
|||||||
|
|
||||||
<DataGridProvider
|
<DataGridProvider
|
||||||
columns={columns}
|
columns={columns}
|
||||||
pagination={{ size: 25 }}
|
pagination={{ size: 10 }}
|
||||||
toolbar={<ListToolbar />}
|
toolbar={<ListToolbar />}
|
||||||
layout={{ card: true }}
|
layout={{ card: true }}
|
||||||
sorting={[{ id: 'created_at', desc: true }]}
|
sorting={[{ id: 'created_at', desc: true }]}
|
||||||
|
|||||||
@ -144,6 +144,7 @@ const ListToolbar = () => {
|
|||||||
<SelectItem value="W">WITHDRAW</SelectItem>
|
<SelectItem value="W">WITHDRAW</SelectItem>
|
||||||
<SelectItem value="U">TOP UP</SelectItem>
|
<SelectItem value="U">TOP UP</SelectItem>
|
||||||
<SelectItem value="R">RETURN</SelectItem>
|
<SelectItem value="R">RETURN</SelectItem>
|
||||||
|
<SelectItem value='N'>TOP UP PARTNER</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
|
|
||||||
|
|||||||
@ -70,6 +70,7 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => {
|
|||||||
case 'W': return 'WITHDRAW';
|
case 'W': return 'WITHDRAW';
|
||||||
case 'U': return 'TOP UP';
|
case 'U': return 'TOP UP';
|
||||||
case 'R': return 'RETURN';
|
case 'R': return 'RETURN';
|
||||||
|
case 'N': return 'TOP UP PARTNER';
|
||||||
default: return '_';
|
default: return '_';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -25,7 +25,14 @@ import { useCallApi } from '@/hooks';
|
|||||||
import { doSaveLogActivity } from '@/actions/GlobalActions';
|
import { doSaveLogActivity } from '@/actions/GlobalActions';
|
||||||
import { getAuth } from '@/auth';
|
import { getAuth } from '@/auth';
|
||||||
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
|
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
|
||||||
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command';
|
import {
|
||||||
|
Command,
|
||||||
|
CommandEmpty,
|
||||||
|
CommandGroup,
|
||||||
|
CommandInput,
|
||||||
|
CommandItem,
|
||||||
|
CommandList
|
||||||
|
} from '@/components/ui/command';
|
||||||
|
|
||||||
const API_URL = apiConfig.service_transaction;
|
const API_URL = apiConfig.service_transaction;
|
||||||
const API_URL_MASTER_DATA = apiConfig.service_master_data;
|
const API_URL_MASTER_DATA = apiConfig.service_master_data;
|
||||||
@ -178,9 +185,9 @@ const EditFeeDialog = () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (response?.status) {
|
if (response?.status) {
|
||||||
toast.success('Successfully updated transfer fee');
|
|
||||||
reload();
|
reload();
|
||||||
handleEditFeeDialog(false, null);
|
handleEditFeeDialog(false, null);
|
||||||
|
toast.success('Successfully updated transfer fee');
|
||||||
const createActivity = {
|
const createActivity = {
|
||||||
module: 'Manage Transfer Fee',
|
module: 'Manage Transfer Fee',
|
||||||
description: `Edit Transfer Fee => ${formField.name}`,
|
description: `Edit Transfer Fee => ${formField.name}`,
|
||||||
@ -197,7 +204,7 @@ const EditFeeDialog = () => {
|
|||||||
setIsSubmitting(false);
|
setIsSubmitting(false);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[formField, selectedTransferFee, PutData, reload, handleEditFeeDialog]
|
[formField, selectedTransferFee, handleEditFeeDialog]
|
||||||
);
|
);
|
||||||
|
|
||||||
const fetchWallets = useCallback(async () => {
|
const fetchWallets = useCallback(async () => {
|
||||||
@ -315,7 +322,7 @@ const EditFeeDialog = () => {
|
|||||||
updated_by: parsedUser?.username,
|
updated_by: parsedUser?.username,
|
||||||
updated_at: new Date().toISOString().slice(0, 19).replace('T', ' ')
|
updated_at: new Date().toISOString().slice(0, 19).replace('T', ' ')
|
||||||
});
|
});
|
||||||
|
|
||||||
if (response.data.transaction_type?.name) {
|
if (response.data.transaction_type?.name) {
|
||||||
setTransactionTypeName(response.data.transaction_type.name);
|
setTransactionTypeName(response.data.transaction_type.name);
|
||||||
}
|
}
|
||||||
@ -421,7 +428,7 @@ const EditFeeDialog = () => {
|
|||||||
</Alert>
|
</Alert>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{isLoadingTransferFee ? (
|
{isLoadingTransferFee ? (
|
||||||
<div className="flex flex-col items-center justify-center p-8">
|
<div className="flex flex-col items-center justify-center p-8">
|
||||||
<div className="animate-pulse flex space-x-4 w-full">
|
<div className="animate-pulse flex space-x-4 w-full">
|
||||||
@ -458,14 +465,14 @@ const EditFeeDialog = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<input
|
<input
|
||||||
type="hidden"
|
type="hidden"
|
||||||
name="transaction_type"
|
name="transaction_type"
|
||||||
value={formField.transaction_type}
|
value={formField.transaction_type}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Transfer Fee Name <span className="text-red-500">*</span>
|
Transfer Fee Name <span className="text-red-500">*</span>
|
||||||
@ -480,7 +487,7 @@ const EditFeeDialog = () => {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Description <span className="text-red-500">*</span>
|
Description <span className="text-red-500">*</span>
|
||||||
@ -495,7 +502,7 @@ const EditFeeDialog = () => {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">Minimum Amount</label>
|
<label className="form-label">Minimum Amount</label>
|
||||||
<NumericFormat
|
<NumericFormat
|
||||||
@ -513,7 +520,7 @@ const EditFeeDialog = () => {
|
|||||||
placeholder="Enter Minimum Amount"
|
placeholder="Enter Minimum Amount"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">Maximum Amount</label>
|
<label className="form-label">Maximum Amount</label>
|
||||||
<NumericFormat
|
<NumericFormat
|
||||||
@ -531,7 +538,7 @@ const EditFeeDialog = () => {
|
|||||||
placeholder="Enter Maximum Amount"
|
placeholder="Enter Maximum Amount"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Period Start <span className="text-red-500">*</span>
|
Period Start <span className="text-red-500">*</span>
|
||||||
@ -546,7 +553,7 @@ const EditFeeDialog = () => {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Period End <span className="text-red-500">*</span>
|
Period End <span className="text-red-500">*</span>
|
||||||
@ -561,7 +568,7 @@ const EditFeeDialog = () => {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">Deduct Amount</label>
|
<label className="form-label">Deduct Amount</label>
|
||||||
<NumericFormat
|
<NumericFormat
|
||||||
@ -579,7 +586,7 @@ const EditFeeDialog = () => {
|
|||||||
placeholder="Enter Deduct Amount"
|
placeholder="Enter Deduct Amount"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">Deduct Percentage</label>
|
<label className="form-label">Deduct Percentage</label>
|
||||||
<NumericFormat
|
<NumericFormat
|
||||||
@ -597,7 +604,7 @@ const EditFeeDialog = () => {
|
|||||||
placeholder="Enter Deduct Percentage"
|
placeholder="Enter Deduct Percentage"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">Fee Amount</label>
|
<label className="form-label">Fee Amount</label>
|
||||||
<NumericFormat
|
<NumericFormat
|
||||||
@ -615,7 +622,7 @@ const EditFeeDialog = () => {
|
|||||||
placeholder="Enter Fee Amount"
|
placeholder="Enter Fee Amount"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Deduct From <span className="text-red-500">*</span>
|
Deduct From <span className="text-red-500">*</span>
|
||||||
@ -633,7 +640,7 @@ const EditFeeDialog = () => {
|
|||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Deduct From Destination <span className="text-red-500">*</span>
|
Deduct From Destination <span className="text-red-500">*</span>
|
||||||
@ -646,7 +653,7 @@ const EditFeeDialog = () => {
|
|||||||
isLoadingWallets
|
isLoadingWallets
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Credit To <span className="text-red-500">*</span>
|
Credit To <span className="text-red-500">*</span>
|
||||||
@ -672,74 +679,81 @@ const EditFeeDialog = () => {
|
|||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{formField.credit_to === 'I' && (
|
{formField.credit_to === 'I' && (
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Credit Destination <span className="text-red-500">*</span>
|
Credit Destination <span className="text-red-500">*</span>
|
||||||
</label>
|
</label>
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<div
|
<div
|
||||||
className="flex w-full items-center justify-between rounded-md border border-input bg-transparent px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 cursor-pointer"
|
className="flex w-full items-center justify-between rounded-md border border-input bg-transparent px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 cursor-pointer"
|
||||||
onClick={() => setOpen(!open)}
|
onClick={() => setOpen(!open)}
|
||||||
>
|
>
|
||||||
<span className="truncate">
|
<span className="truncate">
|
||||||
{customers.find(customer => customer.id === formField.credit_destination)?.username || 'Search customer...'}
|
{customers.find(
|
||||||
</span>
|
(customer) => customer.id === formField.credit_destination
|
||||||
<path d="m6 9 6 6 6-6"></path>
|
)?.username || 'Search customer...'}
|
||||||
</div>
|
</span>
|
||||||
|
<path d="m6 9 6 6 6-6"></path>
|
||||||
{open && (
|
</div>
|
||||||
<div className="absolute left-0 right-0 top-full z-50 mt-1 max-h-52 overflow-auto rounded-md border border-gray-200 bg-white shadow-lg">
|
|
||||||
<div className="sticky top-0 bg-white p-2 border-b">
|
|
||||||
<Input
|
|
||||||
className="h-8 text-sm"
|
|
||||||
type="text"
|
|
||||||
placeholder="Search customer..."
|
|
||||||
value={customerSearchTerm}
|
|
||||||
onChange={(e) => setCustomerSearchTerm(e.target.value)}
|
|
||||||
autoComplete="off"
|
|
||||||
onClick={(e) => e.stopPropagation()}
|
|
||||||
autoFocus
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{customers
|
|
||||||
.filter(customer =>
|
|
||||||
customer.username.toLowerCase().includes(customerSearchTerm.toLowerCase()) ||
|
|
||||||
customer.msisdn.includes(customerSearchTerm)
|
|
||||||
)
|
|
||||||
.map(customer => (
|
|
||||||
<div
|
|
||||||
key={customer.id}
|
|
||||||
className="cursor-pointer px-3 py-1.5 text-sm hover:bg-gray-100"
|
|
||||||
onClick={() => {
|
|
||||||
setFormField({
|
|
||||||
...formField,
|
|
||||||
credit_destination: customer.id
|
|
||||||
});
|
|
||||||
setOpen(false);
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{customer.username}
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
{customers.filter(customer =>
|
|
||||||
customer.username.toLowerCase().includes(customerSearchTerm.toLowerCase()) ||
|
|
||||||
customer.msisdn.includes(customerSearchTerm)
|
|
||||||
).length === 0 && (
|
|
||||||
<div className="px-3 py-2 text-sm text-gray-500">No customer found</div>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
|
{open && (
|
||||||
|
<div className="absolute left-0 right-0 top-full z-50 mt-1 max-h-52 overflow-auto rounded-md border border-gray-200 bg-white shadow-lg">
|
||||||
|
<div className="sticky top-0 bg-white p-2 border-b">
|
||||||
|
<Input
|
||||||
|
className="h-8 text-sm"
|
||||||
|
type="text"
|
||||||
|
placeholder="Search customer..."
|
||||||
|
value={customerSearchTerm}
|
||||||
|
onChange={(e) => setCustomerSearchTerm(e.target.value)}
|
||||||
|
autoComplete="off"
|
||||||
|
onClick={(e) => e.stopPropagation()}
|
||||||
|
autoFocus
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{customers
|
||||||
|
.filter(
|
||||||
|
(customer) =>
|
||||||
|
customer.username
|
||||||
|
.toLowerCase()
|
||||||
|
.includes(customerSearchTerm.toLowerCase()) ||
|
||||||
|
customer.msisdn.includes(customerSearchTerm)
|
||||||
|
)
|
||||||
|
.map((customer) => (
|
||||||
|
<div
|
||||||
|
key={customer.id}
|
||||||
|
className="cursor-pointer px-3 py-1.5 text-sm hover:bg-gray-100"
|
||||||
|
onClick={() => {
|
||||||
|
setFormField({
|
||||||
|
...formField,
|
||||||
|
credit_destination: customer.id
|
||||||
|
});
|
||||||
|
setOpen(false);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{customer.username}
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
{customers.filter(
|
||||||
|
(customer) =>
|
||||||
|
customer.username
|
||||||
|
.toLowerCase()
|
||||||
|
.includes(customerSearchTerm.toLowerCase()) ||
|
||||||
|
customer.msisdn.includes(customerSearchTerm)
|
||||||
|
).length === 0 && (
|
||||||
|
<div className="px-3 py-2 text-sm text-gray-500">
|
||||||
|
No customer found
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Credit Destination Account <span className="text-red-500">*</span>
|
Credit Destination Account <span className="text-red-500">*</span>
|
||||||
@ -752,7 +766,7 @@ const EditFeeDialog = () => {
|
|||||||
isLoadingWallets
|
isLoadingWallets
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Status <span className="text-red-500">*</span>
|
Status <span className="text-red-500">*</span>
|
||||||
@ -770,14 +784,16 @@ const EditFeeDialog = () => {
|
|||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Status Include <span className="text-red-500">*</span>
|
Status Include <span className="text-red-500">*</span>
|
||||||
</label>
|
</label>
|
||||||
<Select
|
<Select
|
||||||
value={formField.status_include}
|
value={formField.status_include}
|
||||||
onValueChange={(value) => setFormField({ ...formField, status_include: value })}
|
onValueChange={(value) =>
|
||||||
|
setFormField({ ...formField, status_include: value })
|
||||||
|
}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="Select Status" />
|
<SelectValue placeholder="Select Status" />
|
||||||
@ -788,7 +804,7 @@ const EditFeeDialog = () => {
|
|||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<label className="form-label">
|
<label className="form-label">
|
||||||
Priority <span className="text-red-500">*</span>
|
Priority <span className="text-red-500">*</span>
|
||||||
@ -806,13 +822,9 @@ const EditFeeDialog = () => {
|
|||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="flex justify-end pt-2.5 gap-5">
|
<div className="flex justify-end pt-2.5 gap-5">
|
||||||
<Button
|
<Button variant={'outline'} type="button" onClick={resetForm}>
|
||||||
variant={'outline'}
|
|
||||||
type="button"
|
|
||||||
onClick={resetForm}
|
|
||||||
>
|
|
||||||
Reset
|
Reset
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
@ -839,4 +851,4 @@ const EditFeeDialog = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export {EditFeeDialog};
|
export { EditFeeDialog };
|
||||||
|
|||||||
@ -378,7 +378,7 @@ const ManageTransferFeeContextProvider = ({
|
|||||||
transactionTypeId
|
transactionTypeId
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Toaster expand visibleToasts={9} duration={3000} />
|
{/* <Toaster expand visibleToasts={9} duration={3000} /> */}
|
||||||
<DataGridProvider
|
<DataGridProvider
|
||||||
columns={columns}
|
columns={columns}
|
||||||
pagination={{ size: 10 }}
|
pagination={{ size: 10 }}
|
||||||
|
|||||||
Reference in New Issue
Block a user