fixing managemember
This commit is contained in:
@ -3,7 +3,6 @@ import { apiConfig } from '@/config/api.config';
|
|||||||
import { getColumns, Members, initialMember } from './Columns';
|
import { getColumns, Members, initialMember } from './Columns';
|
||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
// import CustomerDialog from './CustomerDetailModal';
|
|
||||||
import DetailMember from './blocks/DetailMember';
|
import DetailMember from './blocks/DetailMember';
|
||||||
import ConfirmDialog from '@/components/confirm';
|
import ConfirmDialog from '@/components/confirm';
|
||||||
import { useAuthContext } from '@/auth';
|
import { useAuthContext } from '@/auth';
|
||||||
@ -15,6 +14,7 @@ const BASE_URL_MASTER_DATA = apiConfig.service_master_data;
|
|||||||
const BASE_URL = apiConfig.service_customer;
|
const BASE_URL = apiConfig.service_customer;
|
||||||
import { Helmet } from 'react-helmet';
|
import { Helmet } from 'react-helmet';
|
||||||
import ListToolbar from './blocks/ListToolBar';
|
import ListToolbar from './blocks/ListToolBar';
|
||||||
|
import { RefreshCw } from 'lucide-react';
|
||||||
const ManageMembers = () => {
|
const ManageMembers = () => {
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const [members, setMembers] = useState([]);
|
const [members, setMembers] = useState([]);
|
||||||
@ -24,6 +24,7 @@ const ManageMembers = () => {
|
|||||||
const [isDialogOpen, setIsDialogOpen] = useState(false);
|
const [isDialogOpen, setIsDialogOpen] = useState(false);
|
||||||
const [dialogOpen, setDialogOpen] = useState(false);
|
const [dialogOpen, setDialogOpen] = useState(false);
|
||||||
const [dialogType, setDialogType] = useState('');
|
const [dialogType, setDialogType] = useState('');
|
||||||
|
const [isReloading, setIsReloading] = useState(false);
|
||||||
const closeDialog = () => {
|
const closeDialog = () => {
|
||||||
setIsDialogOpen(false);
|
setIsDialogOpen(false);
|
||||||
setMember(initialMember);
|
setMember(initialMember);
|
||||||
@ -36,7 +37,7 @@ const ManageMembers = () => {
|
|||||||
setLoading(false);
|
setLoading(false);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
async function fetchCustomers() {
|
async function fetchCustomers(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
let customers = await axios.get(`${BASE_URL}/customer/list`, {
|
let customers = await axios.get(`${BASE_URL}/customer/list`, {
|
||||||
params: {
|
params: {
|
||||||
@ -71,9 +72,13 @@ const ManageMembers = () => {
|
|||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
toast.error(error.message);
|
toast.error(error.message);
|
||||||
console.log(error);
|
console.log(error);
|
||||||
|
} finally {
|
||||||
|
setLoading(false)
|
||||||
|
setIsReloading(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const handleUpdate = (data: any) => {
|
const handleUpdate = (data: any) => {
|
||||||
setDialogType('update');
|
setDialogType('update');
|
||||||
setSelectedMember(data.id);
|
setSelectedMember(data.id);
|
||||||
@ -92,7 +97,10 @@ const ManageMembers = () => {
|
|||||||
setMember(data);
|
setMember(data);
|
||||||
setDialogOpen(true);
|
setDialogOpen(true);
|
||||||
}
|
}
|
||||||
|
const handleReload = () => {
|
||||||
|
setIsReloading(true);
|
||||||
|
fetchCustomers();
|
||||||
|
};
|
||||||
const handleYes = async () => {
|
const handleYes = async () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
const userLogin: any = await getUser();
|
const userLogin: any = await getUser();
|
||||||
@ -225,20 +233,29 @@ const ManageMembers = () => {
|
|||||||
</Link>
|
</Link>
|
||||||
</Breadcrumbs>
|
</Breadcrumbs>
|
||||||
{/* <div className="w-full overflow-x-auto px-4"> */}
|
{/* <div className="w-full overflow-x-auto px-4"> */}
|
||||||
<div className="grid gap-5 lg:gap-7.5 mt-5">
|
|
||||||
<DataGridProvider
|
<div className="grid gap-5 lg:gap-7.5 mt-5 relative">
|
||||||
data={members}
|
{isReloading && (
|
||||||
pagination={{ size: 25 }}
|
<div className="absolute inset-0 bg-white/70 z-10 flex items-center justify-center">
|
||||||
columns={getColumns(handleUpdate)}
|
<div className="flex flex-col items-center">
|
||||||
layout={{ card: true }}
|
<RefreshCw className="animate-spin h-8 w-8 text-slate-500 mb-2" />
|
||||||
serverSide={false}
|
<span className="text-slate-500 font-medium">Refreshing data...</span>
|
||||||
toolbar={<ListToolbar createMember={createMember} />}
|
</div>
|
||||||
onRowSelectionChange={(selected, table: any) => {
|
</div>
|
||||||
const selectedRow = table.getSelectedRowModel().rows[0];
|
)}
|
||||||
if (selectedRow) handleUpdate(selectedRow.original);
|
<DataGridProvider
|
||||||
}}
|
data={members}
|
||||||
></DataGridProvider>
|
pagination={{ size: 20 }}
|
||||||
</div>
|
columns={getColumns(handleUpdate)}
|
||||||
|
layout={{ card: true }}
|
||||||
|
serverSide={false}
|
||||||
|
toolbar={<ListToolbar createMember={createMember} onReload={handleReload} isReloading={isReloading} />}
|
||||||
|
onRowSelectionChange={(selected, table: any) => {
|
||||||
|
const selectedRow = table.getSelectedRowModel().rows[0];
|
||||||
|
if (selectedRow) handleUpdate(selectedRow.original);
|
||||||
|
}}
|
||||||
|
></DataGridProvider>
|
||||||
|
</div>
|
||||||
{/* </div> */}
|
{/* </div> */}
|
||||||
</Container>
|
</Container>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@ -1,12 +1,20 @@
|
|||||||
import { DefaultTooltip, KeenIcon, useDataGrid } from '@/components';
|
|
||||||
import { Button } from '@/components/ui/button';
|
import { Button } from '@/components/ui/button';
|
||||||
|
import { UserPlus } from 'lucide-react';
|
||||||
|
import { KeenIcon, useDataGrid } from '@/components';
|
||||||
|
import { DefaultTooltip } from '@/components';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
|
|
||||||
const ListToolbar = ({ createMember }: { createMember: () => void }) => {
|
interface ListToolbarProps {
|
||||||
const { table, reload } = useDataGrid();
|
createMember: () => void;
|
||||||
const [usernameFilter, setUsernameFilter] = useState('');
|
onReload: () => void;
|
||||||
const [emailFilter, setEmailFilter] = useState('');
|
isReloading: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ListToolbar = ({ createMember, onReload, isReloading }: ListToolbarProps) => {
|
||||||
|
|
||||||
|
const [emailFilter, setEmailFilter] = useState('');
|
||||||
|
const [usernameFilter, setUsernameFilter] = useState('');
|
||||||
|
const {table}=useDataGrid();
|
||||||
const handleUsernameChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
const handleUsernameChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
setUsernameFilter(e.target.value);
|
setUsernameFilter(e.target.value);
|
||||||
table.getColumn('username')?.setFilterValue(e.target.value);
|
table.getColumn('username')?.setFilterValue(e.target.value);
|
||||||
@ -34,9 +42,20 @@ const ListToolbar = ({ createMember }: { createMember: () => void }) => {
|
|||||||
<Button variant="outline" className="h-7.5 text-[0.8rem]" onClick={createMember}>
|
<Button variant="outline" className="h-7.5 text-[0.8rem]" onClick={createMember}>
|
||||||
Add Data
|
Add Data
|
||||||
</Button>
|
</Button>
|
||||||
<DefaultTooltip title={'Refresh'} placement={'top'}>
|
<DefaultTooltip title={isReloading ? 'Refreshing...' : 'Refresh'} placement={'top'}>
|
||||||
<Button variant="outline" className="h-7.5" onClick={() => reload()}>
|
<Button
|
||||||
<KeenIcon icon="arrows-circle" />
|
variant="outline"
|
||||||
|
className="h-7.5"
|
||||||
|
onClick={onReload}
|
||||||
|
disabled={isReloading}
|
||||||
|
>
|
||||||
|
{isReloading ? (
|
||||||
|
<div className="animate-spin">
|
||||||
|
<KeenIcon icon="arrows-circle" />
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<KeenIcon icon="arrows-circle" />
|
||||||
|
)}
|
||||||
</Button>
|
</Button>
|
||||||
</DefaultTooltip>
|
</DefaultTooltip>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -12,6 +12,7 @@ const ListToolbar = () => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const timer = setTimeout(() => {
|
const timer = setTimeout(() => {
|
||||||
table.getColumn('name')?.setFilterValue(searchValue);
|
table.getColumn('name')?.setFilterValue(searchValue);
|
||||||
|
table.setPageIndex(0);
|
||||||
}, 200);
|
}, 200);
|
||||||
|
|
||||||
return () => clearTimeout(timer);
|
return () => clearTimeout(timer);
|
||||||
|
|||||||
Reference in New Issue
Block a user