From 5a0a2a6d7188cf34680d441c4cff9a1a53cef056 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2025 16:28:58 +0700 Subject: [PATCH] member and kyc --- src/components/ui/DataTable.tsx | 11 +- src/pages/groups/ManageGroups.tsx | 2 +- src/pages/members/kyc/Kyc.tsx | 8 +- .../manage-members/CustomerDetailModal.tsx | 136 ++++++++++++++++-- .../members/manage-members/ManageMembers.tsx | 31 +++- 5 files changed, 154 insertions(+), 34 deletions(-) diff --git a/src/components/ui/DataTable.tsx b/src/components/ui/DataTable.tsx index 1f35929..8908c92 100644 --- a/src/components/ui/DataTable.tsx +++ b/src/components/ui/DataTable.tsx @@ -43,10 +43,10 @@ interface DataTableProps { export function DataTable({ columns, data, - createGroup, + createData, onUpdate, onDelete -}: DataTableProps & { createGroup?: () => void }) { +}: DataTableProps & { createData?: () => void }) { const [columnFilters, setColumnFilters] = useState([]); const [sorting, setSorting] = useState([]); @@ -74,12 +74,7 @@ export function DataTable({ onChange={(event) => table.getColumn('name')?.setFilterValue(event.target.value)} className="max-w-sm" /> - - {createGroup && ( - - )} + {/* */}
diff --git a/src/pages/groups/ManageGroups.tsx b/src/pages/groups/ManageGroups.tsx index 70d1b41..cbd9fe0 100644 --- a/src/pages/groups/ManageGroups.tsx +++ b/src/pages/groups/ManageGroups.tsx @@ -145,7 +145,7 @@ const ManageGroups = () => { onNo={() => setDialogOpen(false)} />

Groups

- +
diff --git a/src/pages/members/kyc/Kyc.tsx b/src/pages/members/kyc/Kyc.tsx index ab4d62a..aa57d52 100644 --- a/src/pages/members/kyc/Kyc.tsx +++ b/src/pages/members/kyc/Kyc.tsx @@ -87,8 +87,8 @@ const Kyc = () => { } const handleYes = async () => { - let userLogin: any = await getUser(); - let updateData: any = member; + const userLogin: any = await getUser(); + const updateData: any = member; const customerId = member.id; updateData.updated_by = userLogin.data ? userLogin.data.id : '' let today = new Date(); @@ -100,6 +100,8 @@ const Kyc = () => { delete updateData.latitude; delete updateData.created_at; delete updateData.no; + delete updateData.destinationGroup; + delete updateData.statusApproval; delete updateData.group_id; delete updateData.group_name; delete updateData.group_description; @@ -140,7 +142,7 @@ const Kyc = () => { onNo={() => setDialogOpen(false)} /> + handleSubmit={handleSubmit} initialData={member} viewStats={true} page={"kyc"}/>

Manage Member KYC

diff --git a/src/pages/members/manage-members/CustomerDetailModal.tsx b/src/pages/members/manage-members/CustomerDetailModal.tsx index 8bf051b..00c5dd1 100644 --- a/src/pages/members/manage-members/CustomerDetailModal.tsx +++ b/src/pages/members/manage-members/CustomerDetailModal.tsx @@ -1,4 +1,5 @@ import React, { useState, useEffect } from "react"; +import axios from 'axios'; import { Dialog, DialogActions, @@ -14,21 +15,114 @@ import { } from "@mui/material"; import Divider from '@mui/material/Divider'; import { initialMember } from "./Columns"; +import { apiConfig } from '@/config/api.config'; +const BASE_URL_MASTER_DATA = apiConfig.service_master_data; -const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStats, handleReject }: any) => { +const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStats, handleReject, page }: any) => { const [formData, setFormData] = useState(initialData || initialMember); const [viewOnly, setViewOnly] = useState(viewStats || false); + const [municipios, setMunicipios] = useState([]); + const [aldeias, setAldeias] = useState([]); + const [postoAdm, setPostoAdm] = useState([]); + const [sucos, setSucos] = useState([]); useEffect(() => { setFormData(initialData || {}); // Sync formData when initialData changes + fetchMasterData() }, [initialData]); + async function fetchMasterData() { + try { + let getMunicipios = await axios.get(`${BASE_URL_MASTER_DATA}/municipios/list`, { + params: { + limit: 50, + page: 1, + with_deleted: false, + order_field: 'name', + order_direction: 'ASC', + } + }); + setMunicipios(getMunicipios.data.data.list) + let getPostoAdms = await axios.get(`${BASE_URL_MASTER_DATA}/postoadms/list`, { + params: { + limit: 50, + page: 1, + with_deleted: false, + order_field: 'name', + order_direction: 'ASC', + } + }); + setPostoAdm(getPostoAdms.data.data.list) + let getSucos = await axios.get(`${BASE_URL_MASTER_DATA}/sucos/list`, { + params: { + limit: 50, + page: 1, + with_deleted: false, + order_field: 'name', + order_direction: 'ASC', + } + }); + setSucos(getSucos.data.data.list) + let getAldeias = await axios.get(`${BASE_URL_MASTER_DATA}/aldeias/list`, { + params: { + limit: 50, + page: 1, + with_deleted: false, + order_field: 'name', + order_direction: 'ASC', + } + }); + setAldeias(getAldeias.data.data.list) + } catch (error) { + console.log(error); + } + } - const handleChange = (e: any) => { + const handleChange = async (e: any) => { const { name, value } = e.target; + if (name === 'municipio' || name === 'posto_adms' || name === 'suco') await getMasterAfter(name, value); setFormData({ ...formData, [name]: value }); }; + async function getMasterAfter(name: string, id: any) { + if (name === 'municipio') { + let getMunicipiosPosto = await axios.get(`${BASE_URL_MASTER_DATA}/municipios/postoadms/${id}`, { + params: { + limit: 50, + page: 1, + with_deleted: false, + order_field: 'name', + order_direction: 'ASC', + } + }); + setPostoAdm(getMunicipiosPosto.data.data) + } + if (name === 'posto_adms') { + let getPostoSuco = await axios.get(`${BASE_URL_MASTER_DATA}/postoadms/sucos/${id}`, { + params: { + limit: 50, + page: 1, + with_deleted: false, + order_field: 'name', + order_direction: 'ASC', + } + }); + setSucos(getPostoSuco.data.data) + } + if (name === 'suco') { + let getSucoAldeias = await axios.get(`${BASE_URL_MASTER_DATA}/sucos/aldeias/${id}`, { + params: { + limit: 50, + page: 1, + with_deleted: false, + order_field: 'name', + order_direction: 'ASC', + } + }); + setAldeias(getSucoAldeias.data.data) + } + } + const onSubmit = () => { handleSubmit(formData); handleClose(); @@ -102,32 +196,44 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStat Municipio Posto - + { + postoAdm ? postoAdm.map((el: any) => ( + {el.posto_adms_name || el.name} + )) : "" + } Suco - + { + sucos ? sucos.map((el: any) => ( + {el.sucos_name || el.name} + )) : "" + } Aldeia - + { + aldeias ? aldeias.map((el: any) => ( + {el.name} + )) : "" + } @@ -141,12 +247,12 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStat { - formData.isneedapproval == 1 ? ( + formData.isneedapproval == 1 && page === 'kyc' ? ( ) : ('') }
diff --git a/src/pages/members/manage-members/ManageMembers.tsx b/src/pages/members/manage-members/ManageMembers.tsx index d81ed20..044b05d 100644 --- a/src/pages/members/manage-members/ManageMembers.tsx +++ b/src/pages/members/manage-members/ManageMembers.tsx @@ -6,9 +6,11 @@ import axios from 'axios'; import CustomerDialog from './CustomerDetailModal'; import ConfirmDialog from '@/components/confirm'; import { useAuthContext } from '@/auth'; +import { ScreenLoader } from '@/components'; const BASE_URL = apiConfig.service_customer; const ManageMembers = () => { + const [loading, setLoading] = useState(false); const [members, setMembers] = useState([]); const [member, setMember] = useState(initialMember); const [isDialogOpen, setIsDialogOpen] = useState(false); @@ -18,7 +20,9 @@ const ManageMembers = () => { const { getUser } = useAuthContext(); useEffect(() => { + setLoading(true) fetchGroups() + setLoading(false) }, []); async function fetchGroups() { @@ -46,20 +50,26 @@ const ManageMembers = () => { } const handleUpdate = (data: any) => { + setDialogType('update'); setMember(data) setIsDialogOpen(true) } + function createMember() { + setDialogType('create'); + setMember(initialMember); + 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; + const userLogin: any = await getUser(); + const updateData: any = member; + const customerId = member.id; updateData.updated_by = userLogin.data ? userLogin.data.id : '' let today = new Date(); updateData.updated_at = today.toString(); @@ -70,6 +80,8 @@ const ManageMembers = () => { delete updateData.latitude; delete updateData.created_at; delete updateData.no; + delete updateData.destinationGroup; + delete updateData.statusApproval; delete updateData.group_id; delete updateData.group_name; delete updateData.group_description; @@ -81,15 +93,20 @@ const ManageMembers = () => { delete updateData.group_deleted_by; delete updateData.group_deleted_at; try { - await axios.put(`${BASE_URL}/customer/update/${customerId}`, updateData) + if (dialogType === 'update') await axios.put(`${BASE_URL}/customer/update/${customerId}`, updateData) + // if (dialogType === 'create') await axios.post(`${BASE_URL}/customers/create`, member) await fetchGroups(); + setDialogOpen(false) setIsDialogOpen(false) } catch (error: any) { alert(error.message) + setDialogOpen(false) setIsDialogOpen(false) } } + if (loading) return () + return (
@@ -97,13 +114,13 @@ const ManageMembers = () => { 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 Members

- +
);