From c56554600f3158cc3f7a14834aa07022ec45cab2 Mon Sep 17 00:00:00 2001 From: Wikzyy Date: Mon, 10 Mar 2025 14:27:37 +0700 Subject: [PATCH 1/5] add props onUpdate and onDelete. but not use function yet --- src/pages/account/manage-account/ManageAccount.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pages/account/manage-account/ManageAccount.tsx b/src/pages/account/manage-account/ManageAccount.tsx index b2a5f31..784a20e 100644 --- a/src/pages/account/manage-account/ManageAccount.tsx +++ b/src/pages/account/manage-account/ManageAccount.tsx @@ -1,10 +1,10 @@ import { apiConfig } from '@/config/api.config'; import { Account, columns } from './Columns'; -import { DataTable } from '@/components/ui/DataTable'; import axios from 'axios'; import { useEffect, useState } from 'react'; import { getData } from '@/utils'; import { useCallApi } from '@/hooks'; +import { DataTable } from '@/components/ui/DataTable'; const API_URL = apiConfig.service_dashboard; @@ -74,7 +74,12 @@ const ManageAccount = () => {

Manage Account

- + console.log('Callback update')} + onDelete={() => console.log('Callback delete')} + />
); From 949fd72c0494cb5fb2c451787053398dfc54bc52 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2025 17:50:49 +0700 Subject: [PATCH 2/5] approval member --- .env | 1 + src/pages/members/kyc/Kyc.tsx | 12 +- .../manage-members/CustomerDetailModal.tsx | 178 ++++++++++-------- .../members/manage-members/ManageMembers.tsx | 1 - 4 files changed, 113 insertions(+), 79 deletions(-) diff --git a/.env b/.env index 053bf82..04d3402 100644 --- a/.env +++ b/.env @@ -3,4 +3,5 @@ VITE_APP_VERSION=1=9.1.1 GENERATE_SOURCEMAP=false VITE_APP_API_URL=https://tpay.shiblysolution.id/api +# VITE_APP_API_URL=http://0.0.0.0:4001/api VITE_ENV=default \ No newline at end of file diff --git a/src/pages/members/kyc/Kyc.tsx b/src/pages/members/kyc/Kyc.tsx index 77f4074..fa1a7e2 100644 --- a/src/pages/members/kyc/Kyc.tsx +++ b/src/pages/members/kyc/Kyc.tsx @@ -6,6 +6,7 @@ import { ManageKycContextProvider } from './hooks'; import { columns, initialMember } from '../manage-members/Columns'; import { useAuthContext } from '@/auth'; import { apiConfig } from '@/config/api.config'; +import ConfirmDialog from '@/components/confirm'; import axios from 'axios'; const BASE_URL = apiConfig.service_customer; import CustomerDialog from '../manage-members/CustomerDetailModal'; @@ -52,7 +53,7 @@ const Kyc = () => { with_deleted: false, order_field: 'fullname', order_direction: 'ASC', - // type: "Reguler" + type: "kyc" } }); let temp = 1 @@ -105,6 +106,7 @@ const Kyc = () => { delete updateData.group_deleted_at; try { await axios.put(`${BASE_URL}/customer/update/${customerId}`, updateData) + if (updateData.isneedapproval == 1) await axios.post(`${BASE_URL}/customer/approve`, {customerid: customerId}) await fetchGroups(); setIsDialogOpen(false) } catch (error: any) { @@ -116,6 +118,14 @@ const Kyc = () => { return (
+ setDialogOpen(false)} + title="Confirm Action" + content={`Are you sure you want to `+( dialogType === 'create' ? "create?" : ( dialogType === 'update' ? "update?" : "delete?"))} + onYes={handleYes} + onNo={() => setDialogOpen(false)} + />

Manage Member KYC

diff --git a/src/pages/members/manage-members/CustomerDetailModal.tsx b/src/pages/members/manage-members/CustomerDetailModal.tsx index 1da456f..c227191 100644 --- a/src/pages/members/manage-members/CustomerDetailModal.tsx +++ b/src/pages/members/manage-members/CustomerDetailModal.tsx @@ -12,6 +12,7 @@ import { FormControl, Typography } from "@mui/material"; +import axios from 'axios'; import Divider from '@mui/material/Divider'; import { initialMember } from "./Columns"; @@ -43,85 +44,108 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStat return ( - Customer Form ({viewStats ? 'View' : 'Edit'}) - -
- Customer Data - Created: {generateDate(formData.created_at, 'datetime')} -
- - - - - - - - - - - Gender - - - - - - - {/* */} - {/* */} - - Status - - - - - Municipio - - - - - Posto - - + Customer Form ({viewStats ? 'View' : 'Edit'}) + +
+ Customer Data + Created: {generateDate(formData.created_at, 'datetime')} +
+ { + formData.isneedapproval == 1 ? ( +
+ User Request for approval +
+ ) : ('') + } - - Suco - - + + + + + + + + + + + Gender + + + + Identity Type + + + + + + {/* */} + {/* */} + + Status + + + + + Municipio + + + + + Posto + + - - Aldeia - - - - - Bank - - - -
- - - - -
+ + Suco + + + + + Aldeia + + + + + Bank + + + + + + + + { + formData.isneedapproval == 1 ? ( + + ) : ('') + } + + + ); }; diff --git a/src/pages/members/manage-members/ManageMembers.tsx b/src/pages/members/manage-members/ManageMembers.tsx index 74c061f..d81ed20 100644 --- a/src/pages/members/manage-members/ManageMembers.tsx +++ b/src/pages/members/manage-members/ManageMembers.tsx @@ -30,7 +30,6 @@ const ManageMembers = () => { with_deleted: false, order_field: 'fullname', order_direction: 'ASC', - type: "Reguler" } }); let temp = 1 From d14b219d6f9f76bb960b97ed4c1944e0543797be Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2025 21:41:27 +0700 Subject: [PATCH 3/5] reject member --- src/pages/members/kyc/Columns.tsx | 195 ++++++++++++++++++ src/pages/members/kyc/Kyc.tsx | 30 ++- .../manage-members/CustomerDetailModal.tsx | 12 +- 3 files changed, 222 insertions(+), 15 deletions(-) create mode 100644 src/pages/members/kyc/Columns.tsx diff --git a/src/pages/members/kyc/Columns.tsx b/src/pages/members/kyc/Columns.tsx new file mode 100644 index 0000000..195f62a --- /dev/null +++ b/src/pages/members/kyc/Columns.tsx @@ -0,0 +1,195 @@ +import { Button } from '@/components/ui/button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuTrigger +} from '@/components/ui/dropdown-menu'; +import { ColumnDef } from '@tanstack/react-table'; +import { ArrowUpDown, MoreHorizontal } from 'lucide-react'; + +export type Members = { + // id: number; + username: number; + fullname: string; + group: string; + email: string; + created_at: Date; +}; + +export const columns: ColumnDef[] = [ + { + accessorKey: 'no', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'username', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'name', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'group_name', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'destinationGroup', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'email', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'created_at', + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => new Date(row.original.created_at).toLocaleDateString() + }, + { + accessorKey: 'statusApproval', + header: ({ column }) => { + return ( + + ); + } + }, + { + id: 'actions', + cell: ({ row }) => { + const dataMembers = row.original; + return ( + + + ); + } + } +]; + +export const initialMember = { + id: "", + fullname: "", + email: "", + username: "", + msisdn: "", + password: "", + pin: "", + try_pin: "", + mother_fullname: "", + agent_name: "", + bank_name: "", + bank_account: "", + ibank_number: "", + address: "", + longitude: "", + latitude: "", + nationality: "", + photouser: "", + photomerchant: "", + file_selfie: "", + file_document_id: "", + file_document_id_selfie: "", + file_commercial_license: "", + identity_type: "", + identity_number: "", + license_number: "", + date_birth: "", + gender: "", + status: "N", + isneedapproval: "", + isapproved: "", + approveddate: "", + approvedby: "", + created_by: "", + created_at: "", + updated_by: "", + updated_at: "", + deleted_by: "", + deleted_at: "", + group: "", + point_tier: "", + language: "", + municipio: "", + posto_adms: "", + suco: "", + aldeia: "", + profession: "", +} diff --git a/src/pages/members/kyc/Kyc.tsx b/src/pages/members/kyc/Kyc.tsx index fa1a7e2..b7a957c 100644 --- a/src/pages/members/kyc/Kyc.tsx +++ b/src/pages/members/kyc/Kyc.tsx @@ -3,7 +3,7 @@ import { DataTable } from '@/components/ui/DataTable'; import { Table } from '@tanstack/react-table'; import React, { createContext, useContext, useState, useEffect } from 'react'; import { ManageKycContextProvider } from './hooks'; -import { columns, initialMember } from '../manage-members/Columns'; +import { columns, initialMember } from './Columns'; import { useAuthContext } from '@/auth'; import { apiConfig } from '@/config/api.config'; import ConfirmDialog from '@/components/confirm'; @@ -80,6 +80,12 @@ const Kyc = () => { setDialogOpen(true) } + function handleReject(data: any) { + setDialogType('reject') + setMember(data) + setDialogOpen(true) + } + const handleYes = async () => { let userLogin: any = await getUser(); let updateData: any = member; @@ -105,12 +111,19 @@ const Kyc = () => { delete updateData.group_deleted_by; delete updateData.group_deleted_at; try { - await axios.put(`${BASE_URL}/customer/update/${customerId}`, updateData) - if (updateData.isneedapproval == 1) await axios.post(`${BASE_URL}/customer/approve`, {customerid: customerId}) + if (dialogType === 'reject') { + await axios.put(`${BASE_URL}/customer/reject`, {customerid: customerId}) + } + if (dialogType === 'update') { + await axios.put(`${BASE_URL}/customer/update/${customerId}`, updateData) + if (updateData.isneedapproval == 1) await axios.post(`${BASE_URL}/customer/approve`, {customerid: customerId}) + } await fetchGroups(); + setDialogOpen(false) setIsDialogOpen(false) } catch (error: any) { alert(error.message) + setDialogOpen(false) setIsDialogOpen(false) } } @@ -122,19 +135,14 @@ const Kyc = () => { open={dialogOpen} onClose={() => setDialogOpen(false)} title="Confirm Action" - content={`Are you sure you want to `+( dialogType === 'create' ? "create?" : ( dialogType === 'update' ? "update?" : "delete?"))} + content={`Are you sure you want to ${dialogType}?`} onYes={handleYes} onNo={() => setDialogOpen(false)} /> - +

Manage Member KYC

- - {/* -
- -
-
*/}
); diff --git a/src/pages/members/manage-members/CustomerDetailModal.tsx b/src/pages/members/manage-members/CustomerDetailModal.tsx index c227191..8bf051b 100644 --- a/src/pages/members/manage-members/CustomerDetailModal.tsx +++ b/src/pages/members/manage-members/CustomerDetailModal.tsx @@ -12,11 +12,10 @@ import { FormControl, Typography } from "@mui/material"; -import axios from 'axios'; import Divider from '@mui/material/Divider'; import { initialMember } from "./Columns"; -const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStats }: any) => { +const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStats, handleReject }: any) => { const [formData, setFormData] = useState(initialData || initialMember); const [viewOnly, setViewOnly] = useState(viewStats || false); @@ -35,6 +34,11 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStat handleClose(); }; + const onReject = () => { + handleReject(formData); + handleClose(); + } + function generateDate(date: any, type: any) { if (!date) return '' const today = new Date(date); @@ -44,7 +48,7 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStat return ( - Customer Form ({viewStats ? 'View' : 'Edit'}) + Customer Form ({viewOnly ? 'View' : 'Edit'})
Customer Data @@ -138,7 +142,7 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStat { formData.isneedapproval == 1 ? ( - + ) : ('') }