diff --git a/.gitignore b/.gitignore index 7c146d5..edc2fb7 100644 --- a/.gitignore +++ b/.gitignore @@ -22,5 +22,4 @@ dist-ssr *.njsproj *.sln *.sw? -**/src/*.js -yarn.lock \ No newline at end of file +**/src/*.js \ No newline at end of file diff --git a/src/components/ui/DataTable.tsx b/src/components/ui/DataTable.tsx index aab44c5..fdae0a8 100644 --- a/src/components/ui/DataTable.tsx +++ b/src/components/ui/DataTable.tsx @@ -114,11 +114,15 @@ export function DataTable({ onClick={() => onUpdate(row.original)}> Update - + { + onDelete ? ( + + ) : ('') + } diff --git a/src/pages/groups/ManageGroups.tsx b/src/pages/groups/ManageGroups.tsx index 2ede523..ca7eb67 100644 --- a/src/pages/groups/ManageGroups.tsx +++ b/src/pages/groups/ManageGroups.tsx @@ -3,7 +3,7 @@ import { columns, Group } from './Column'; import { apiConfig } from '@/config/api.config'; import axios, { AxiosResponse } from 'axios'; import { DialogContent, MenuItem, Radio, RadioGroup, FormControlLabel, FormControl, - Dialog, DialogActions, DialogTitle, Typography, Button, Box } from '@mui/material'; + Dialog, DialogTitle, Typography, Button, Box } from '@mui/material'; import { useState, useEffect } from 'react'; // import IconButton from '@mui/material/IconButton'; import CloseIcon from '@mui/icons-material/Close'; @@ -27,7 +27,7 @@ const ManageGroups = () => { const [isDialogOpen, setIsDialogOpen] = useState(false); const [dataGroup, setDataGroup] = useState([]); const [formData, setFormData] = useState(initGroup); - const [pageIndex, setPageIndex] = useState(0); + const [pageIndex, setPageIndex] = useState(1); const [pageSize, setPageSize] = useState(10); const [dialogType, setDialogType] = useState(''); const [dialogOpen, setDialogOpen] = useState(false); @@ -40,8 +40,8 @@ const ManageGroups = () => { try { let groups = await axios.get(`${BASE_URL}/groups/list`, { params: { - limit: 10, - page: 1, + limit: pageSize, + page: pageIndex, with_deleted: false, order_field: 'name', order_direction: 'ASC' @@ -128,10 +128,6 @@ const ManageGroups = () => { } }; - const handleNo = () => { - setDialogOpen(false); - }; - return (
@@ -141,11 +137,11 @@ const ManageGroups = () => { title="Confirm Action" content={`Are you sure you want to `+( dialogType === 'create' ? "create?" : ( dialogType === 'update' ? "update?" : "delete?"))} onYes={handleYes} - onNo={handleNo} + onNo={() => setDialogOpen(false)} />

Groups

- +
Create New Group @@ -191,51 +187,6 @@ const ManageGroups = () => { onChange={handleChange} />
- {/*
- - -
-
- - -
*/} - {/*
- - - -
*/}
diff --git a/src/pages/members/manage-members/Columns.tsx b/src/pages/members/manage-members/Columns.tsx index c217e7f..a452d55 100644 --- a/src/pages/members/manage-members/Columns.tsx +++ b/src/pages/members/manage-members/Columns.tsx @@ -10,24 +10,24 @@ import { ColumnDef } from '@tanstack/react-table'; import { ArrowUpDown, MoreHorizontal } from 'lucide-react'; export type Members = { - id: number; + // id: number; username: number; - name: string; + fullname: string; group: string; email: string; - createdDate: Date; + created_at: Date; }; export const columns: ColumnDef[] = [ { - accessorKey: 'id', + accessorKey: 'no', header: ({ column }) => { return ( ); @@ -55,7 +55,7 @@ export const columns: ColumnDef[] = [ variant="ghost" onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')} > - Name + Fullname ); @@ -76,7 +76,7 @@ export const columns: ColumnDef[] = [ } }, { - accessorKey: 'createdDate', + accessorKey: 'created_at', header: ({ column }) => { return ( ); }, - cell: ({ row }) => new Date(row.original.createdDate).toLocaleDateString() + cell: ({ row }) => new Date(row.original.created_at).toLocaleDateString() }, { id: 'actions', @@ -97,23 +97,72 @@ export const columns: ColumnDef[] = [ return ( - + {/* - - + */} + {/* Actions navigator.clipboard.writeText(dataMembers.id.toString())} > Copy account ID - {/* */} - + */} ); } } ]; + +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/manage-members/CustomerDetailModal.tsx b/src/pages/members/manage-members/CustomerDetailModal.tsx new file mode 100644 index 0000000..5b66ece --- /dev/null +++ b/src/pages/members/manage-members/CustomerDetailModal.tsx @@ -0,0 +1,126 @@ +import React, { useState, useEffect } from "react"; +import { + Dialog, + DialogActions, + DialogContent, + DialogTitle, + TextField, + Button, + MenuItem, + Select, + InputLabel, + FormControl, + Typography +} from "@mui/material"; +import Divider from '@mui/material/Divider'; +import { initialMember } from "./Columns"; + +const CustomerDialog = ({ open, handleClose, handleSubmit, initialData }: any) => { + const [formData, setFormData] = useState(initialData || initialMember); + + useEffect(() => { + setFormData(initialData || {}); // Sync formData when initialData changes + }, [initialData]); + + + const handleChange = (e: any) => { + const { name, value } = e.target; + setFormData({ ...formData, [name]: value }); + }; + + const onSubmit = () => { + handleSubmit(formData); + handleClose(); + }; + + function generateDate(date: any, type: any) { + if (!date) return '' + const today = new Date(date); + if (type === 'datetime') return today.toISOString().replace('T', ' ').substring(0, 19); + return today.toISOString().split('T')[0]; + } + + return ( + + Customer Form + +
+ Customer Data + Created: {generateDate(formData.created_at, 'datetime')} +
+ + + + + + + + + + Gender + + + + + + + {/* */} + {/* */} + + Status + + + + + Municipio + + + + + Posto + + + + + Suco + + + + + Aldeia + + + + + Bank + + + +
+ + + + +
+ ); +}; + +export default CustomerDialog; diff --git a/src/pages/members/manage-members/ManageMembers.tsx b/src/pages/members/manage-members/ManageMembers.tsx index 4787a6a..b7e4e17 100644 --- a/src/pages/members/manage-members/ManageMembers.tsx +++ b/src/pages/members/manage-members/ManageMembers.tsx @@ -3,37 +3,18 @@ import { apiConfig } from '@/config/api.config'; import { columns, Members } from './Columns'; import { useState, useEffect } from 'react'; import axios from 'axios'; +import CustomerDialog from './CustomerDetailModal'; +import { initialMember } from "./Columns"; +import ConfirmDialog from '@/components/confirm'; const BASE_URL = apiConfig.service_customer; -const dataMembers: Members[] = [ - { - id: 37026, - username: 67076807158, - name: 'Jumentino Carlos Luis da Costa', - group: 'REGULER', - email: 'Jumentinocldacoata@gmail.com', - createdDate: new Date('2025-02-21') - }, - { - id: 37027, - username: 67071827345, - name: 'Diego Costa', - group: 'REGULER', - email: 'DiegoCosta@gmail.com', - createdDate: new Date('2025-02-21') - }, - { - id: 37028, - username: 56123764212, - name: 'Luis Da Vista', - group: 'SUPERVISOR', - email: 'LuisdaVista@gmail.com', - createdDate: new Date('2024-01-21') - } -]; - const ManageMembers = () => { 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); useEffect(() => { fetchGroups() @@ -47,30 +28,60 @@ const ManageMembers = () => { page: 1, with_deleted: false, order_field: 'fullname', - order_direction: 'ASC' + order_direction: 'ASC', + // type: "Reguler" } }); - setMembers(groups.data.data.list) + let temp = 1 + let resGroups = groups.data.data.list.map((el: any) => { + el.no = temp++ + el.name = el.fullname + return el + }) + setMembers(resGroups) } catch (error: any) { alert(error.message) console.log(error); } } - const handleUpdate = (member: any) => { - console.log(members); - + const handleUpdate = (data: any) => { + console.log(data); + setMember(data) + setIsDialogOpen(true) } - const handleDelete = (member: any) => { - + async function handleSubmit(data: any) { + setDialogType('update') + console.log(data); + setMember(data) + setDialogOpen(true) + } + + const handleYes = async () => { + try { + await axios.put(`${BASE_URL}/customer/update/${member.id}`, member) + setIsDialogOpen(false) + } catch (error: any) { + alert(error.message) + setIsDialogOpen(false) + } } 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 Members

- +
);