From 985ceacb42865399c22707b432440b405a5820ca Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2025 23:04:31 +0700 Subject: [PATCH] member kyc --- .gitignore | 3 +- src/components/ui/DataTable.tsx | 21 ++-- src/pages/groups/Column.tsx | 10 +- src/pages/groups/ManageGroups.tsx | 7 +- src/pages/members/kyc/Kyc.tsx | 97 ++++++++++++++++++- src/pages/members/manage-members/Columns.tsx | 14 +++ .../manage-members/CustomerDetailModal.tsx | 48 ++++----- .../members/manage-members/ManageMembers.tsx | 39 ++++++-- 8 files changed, 188 insertions(+), 51 deletions(-) diff --git a/.gitignore b/.gitignore index edc2fb7..7c146d5 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,5 @@ dist-ssr *.njsproj *.sln *.sw? -**/src/*.js \ No newline at end of file +**/src/*.js +yarn.lock \ No newline at end of file diff --git a/src/components/ui/DataTable.tsx b/src/components/ui/DataTable.tsx index fdae0a8..1f35929 100644 --- a/src/components/ui/DataTable.tsx +++ b/src/components/ui/DataTable.tsx @@ -23,13 +23,14 @@ import { import { useState } from 'react'; import { Input } from './input'; import { Button } from './button'; +import { KeenIcon } from '@/components'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, - DialogTrigger + DialogTrigger, } from './dialog'; interface DataTableProps { @@ -109,18 +110,18 @@ export function DataTable({ ))}
- + + { onDelete ? ( - + ) : ('') }
diff --git a/src/pages/groups/Column.tsx b/src/pages/groups/Column.tsx index 9809155..d796078 100644 --- a/src/pages/groups/Column.tsx +++ b/src/pages/groups/Column.tsx @@ -1,8 +1,8 @@ import { ColumnDef } from '@tanstack/react-table'; export type Group = { - id: number; - createdDate: Date; + no: number; + created_at: Date; name: string; status: string; description: string; @@ -10,13 +10,13 @@ export type Group = { export const columns: ColumnDef[] = [ { - accessorKey: 'id', + accessorKey: 'no', header: 'ID' }, { - accessorKey: 'createdDate', + accessorKey: 'created_at', header: 'Created Date', - cell: ({ row }) => new Date(row.original.createdDate).toLocaleDateString() + cell: ({ row }) => new Date(row.original.created_at).toLocaleDateString() }, { accessorKey: 'name', diff --git a/src/pages/groups/ManageGroups.tsx b/src/pages/groups/ManageGroups.tsx index ca7eb67..70d1b41 100644 --- a/src/pages/groups/ManageGroups.tsx +++ b/src/pages/groups/ManageGroups.tsx @@ -47,7 +47,12 @@ const ManageGroups = () => { order_direction: 'ASC' } }); - setDataGroup(groups.data.data.list) + let temp = 1 + let resGroups = groups.data.data.list.map((el: any) => { + el.no = temp++ + return el + }) + setDataGroup(resGroups) } catch (error: any) { alert(error.message) console.log(error); diff --git a/src/pages/members/kyc/Kyc.tsx b/src/pages/members/kyc/Kyc.tsx index 50fc1a2..77f4074 100644 --- a/src/pages/members/kyc/Kyc.tsx +++ b/src/pages/members/kyc/Kyc.tsx @@ -1,7 +1,14 @@ import { DataGridInner, TDataGridProps } from '@/components'; +import { DataTable } from '@/components/ui/DataTable'; import { Table } from '@tanstack/react-table'; -import React, { createContext, useContext, useState } from 'react'; +import React, { createContext, useContext, useState, useEffect } from 'react'; import { ManageKycContextProvider } from './hooks'; +import { columns, initialMember } from '../manage-members/Columns'; +import { useAuthContext } from '@/auth'; +import { apiConfig } from '@/config/api.config'; +import axios from 'axios'; +const BASE_URL = apiConfig.service_customer; +import CustomerDialog from '../manage-members/CustomerDetailModal'; export interface IDataGridContextProps { props: TDataGridProps; @@ -24,16 +31,100 @@ export const useDataGrid = () => { const Kyc = () => { const [loading, setLoading] = useState(false); + const [members, setMembers] = useState([]); + const [member, setMember] = useState(initialMember); + const [isDialogOpen, setIsDialogOpen] = useState(false); + const [dialogOpen, setDialogOpen] = useState(false); + const [dialogType, setDialogType] = useState(''); + const closeDialog = () => setIsDialogOpen(false); + const { getUser } = useAuthContext(); + + useEffect(() => { + fetchGroups() + }, []); + + async function fetchGroups() { + try { + let groups = await axios.get(`${BASE_URL}/customer/list`, { + params: { + limit: 10, + page: 1, + with_deleted: false, + order_field: 'fullname', + order_direction: 'ASC', + // type: "Reguler" + } + }); + let temp = 1 + let resMembers = groups.data.data.list.map((el: any) => { + el.no = temp++ + el.name = el.fullname + return el + }) + setMembers(resMembers) + } catch (error: any) { + alert(error.message) + console.log(error); + } + } + + const handleUpdate = (data: any) => { + setMember(data) + setIsDialogOpen(true) + } + + async function handleSubmit(data: any) { + setDialogType('update') + setMember(data) + setDialogOpen(true) + } + + const handleYes = async () => { + let userLogin: any = await getUser(); + let updateData: any = member; + let customerId = member.id; + updateData.updated_by = userLogin.data ? userLogin.data.id : '' + let today = new Date(); + updateData.updated_at = today.toString(); + delete updateData.id; + delete updateData.pin; + delete updateData.name; + delete updateData.longitude; + delete updateData.latitude; + delete updateData.created_at; + delete updateData.no; + delete updateData.group_id; + delete updateData.group_name; + delete updateData.group_description; + delete updateData.group_status; + delete updateData.group_created_by; + delete updateData.group_created_at; + delete updateData.group_updated_by; + delete updateData.group_updated_at; + delete updateData.group_deleted_by; + delete updateData.group_deleted_at; + try { + await axios.put(`${BASE_URL}/customer/update/${customerId}`, updateData) + await fetchGroups(); + setIsDialogOpen(false) + } catch (error: any) { + alert(error.message) + setIsDialogOpen(false) + } + } return (
+

Manage Member KYC

- + + + {/*
-
+
*/}
); diff --git a/src/pages/members/manage-members/Columns.tsx b/src/pages/members/manage-members/Columns.tsx index a452d55..8a08b94 100644 --- a/src/pages/members/manage-members/Columns.tsx +++ b/src/pages/members/manage-members/Columns.tsx @@ -61,6 +61,20 @@ export const columns: ColumnDef[] = [ ); } }, + { + accessorKey: 'group_name', + header: ({ column }) => { + return ( + + ); + } + }, { accessorKey: 'email', header: ({ column }) => { diff --git a/src/pages/members/manage-members/CustomerDetailModal.tsx b/src/pages/members/manage-members/CustomerDetailModal.tsx index 5b66ece..1da456f 100644 --- a/src/pages/members/manage-members/CustomerDetailModal.tsx +++ b/src/pages/members/manage-members/CustomerDetailModal.tsx @@ -15,8 +15,9 @@ import { import Divider from '@mui/material/Divider'; import { initialMember } from "./Columns"; -const CustomerDialog = ({ open, handleClose, handleSubmit, initialData }: any) => { +const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStats }: any) => { const [formData, setFormData] = useState(initialData || initialMember); + const [viewOnly, setViewOnly] = useState(viewStats || false); useEffect(() => { setFormData(initialData || {}); // Sync formData when initialData changes @@ -42,36 +43,37 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData }: any) = return ( - Customer Form + Customer Form ({viewStats ? 'View' : 'Edit'})
Customer Data Created: {generateDate(formData.created_at, 'datetime')}
- - - - - - - - + + + + + + + + + Gender - Male Female - - - - + + + + {/* */} {/* */} Status - Active Inactive @@ -79,7 +81,7 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData }: any) = Municipio - Municipio 1 Municipio 2 @@ -87,7 +89,7 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData }: any) = Posto - Posto 1 Posto 2 @@ -95,7 +97,7 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData }: any) = Suco - suco 1 suco 2 @@ -103,7 +105,7 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData }: any) = Aldeia - aldeia 1 aldeia 2 @@ -111,9 +113,9 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData }: any) = Bank - - - + + +
diff --git a/src/pages/members/manage-members/ManageMembers.tsx b/src/pages/members/manage-members/ManageMembers.tsx index b7e4e17..74c061f 100644 --- a/src/pages/members/manage-members/ManageMembers.tsx +++ b/src/pages/members/manage-members/ManageMembers.tsx @@ -1,11 +1,11 @@ import { DataTable } from '@/components/ui/DataTable'; import { apiConfig } from '@/config/api.config'; -import { columns, Members } from './Columns'; +import { columns, Members, initialMember } from './Columns'; import { useState, useEffect } from 'react'; import axios from 'axios'; import CustomerDialog from './CustomerDetailModal'; -import { initialMember } from "./Columns"; import ConfirmDialog from '@/components/confirm'; +import { useAuthContext } from '@/auth'; const BASE_URL = apiConfig.service_customer; const ManageMembers = () => { @@ -15,6 +15,7 @@ const ManageMembers = () => { const [dialogOpen, setDialogOpen] = useState(false); const [dialogType, setDialogType] = useState(''); const closeDialog = () => setIsDialogOpen(false); + const { getUser } = useAuthContext(); useEffect(() => { fetchGroups() @@ -29,16 +30,16 @@ const ManageMembers = () => { with_deleted: false, order_field: 'fullname', order_direction: 'ASC', - // type: "Reguler" + type: "Reguler" } }); let temp = 1 - let resGroups = groups.data.data.list.map((el: any) => { + let resMembers = groups.data.data.list.map((el: any) => { el.no = temp++ el.name = el.fullname return el }) - setMembers(resGroups) + setMembers(resMembers) } catch (error: any) { alert(error.message) console.log(error); @@ -46,21 +47,43 @@ const ManageMembers = () => { } const handleUpdate = (data: any) => { - console.log(data); setMember(data) setIsDialogOpen(true) } async function handleSubmit(data: any) { setDialogType('update') - console.log(data); setMember(data) setDialogOpen(true) } const handleYes = async () => { + let userLogin: any = await getUser(); + let updateData: any = member; + let customerId = member.id; + updateData.updated_by = userLogin.data ? userLogin.data.id : '' + let today = new Date(); + updateData.updated_at = today.toString(); + delete updateData.id; + delete updateData.pin; + delete updateData.name; + delete updateData.longitude; + delete updateData.latitude; + delete updateData.created_at; + delete updateData.no; + delete updateData.group_id; + delete updateData.group_name; + delete updateData.group_description; + delete updateData.group_status; + delete updateData.group_created_by; + delete updateData.group_created_at; + delete updateData.group_updated_by; + delete updateData.group_updated_at; + delete updateData.group_deleted_by; + delete updateData.group_deleted_at; try { - await axios.put(`${BASE_URL}/customer/update/${member.id}`, member) + await axios.put(`${BASE_URL}/customer/update/${customerId}`, updateData) + await fetchGroups(); setIsDialogOpen(false) } catch (error: any) { alert(error.message)