'use client'; import { CustomerService } from '../../../../demo/service/CustomerService'; import { ProductService } from '../../../../demo/service/ProductService'; import { FilterMatchMode, FilterOperator } from 'primereact/api'; import { Button } from 'primereact/button'; import { Calendar } from 'primereact/calendar'; import { Column, ColumnFilterApplyTemplateOptions, ColumnFilterClearTemplateOptions, ColumnFilterElementTemplateOptions } from 'primereact/column'; import { DataTable, DataTableExpandedRows, DataTableFilterMeta } from 'primereact/datatable'; import { Dropdown } from 'primereact/dropdown'; import { InputNumber } from 'primereact/inputnumber'; import { InputText } from 'primereact/inputtext'; import { MultiSelect } from 'primereact/multiselect'; import { ProgressBar } from 'primereact/progressbar'; import { Rating } from 'primereact/rating'; import { Slider } from 'primereact/slider'; import { ToggleButton } from 'primereact/togglebutton'; import { TriStateCheckbox } from 'primereact/tristatecheckbox'; import { classNames } from 'primereact/utils'; import React, { useEffect, useState } from 'react'; import type { Demo } from '@/types'; const TableDemo = () => { const [customers1, setCustomers1] = useState([]); const [customers2, setCustomers2] = useState([]); const [customers3, setCustomers3] = useState([]); const [filters1, setFilters1] = useState({}); const [loading1, setLoading1] = useState(true); const [loading2, setLoading2] = useState(true); const [idFrozen, setIdFrozen] = useState(false); const [products, setProducts] = useState([]); const [globalFilterValue1, setGlobalFilterValue1] = useState(''); const [expandedRows, setExpandedRows] = useState([]); const [allExpanded, setAllExpanded] = useState(false); const representatives = [ { name: 'Amy Elsner', image: 'amyelsner.png' }, { name: 'Anna Fali', image: 'annafali.png' }, { name: 'Asiya Javayant', image: 'asiyajavayant.png' }, { name: 'Bernardo Dominic', image: 'bernardodominic.png' }, { name: 'Elwin Sharvill', image: 'elwinsharvill.png' }, { name: 'Ioni Bowcher', image: 'ionibowcher.png' }, { name: 'Ivan Magalhaes', image: 'ivanmagalhaes.png' }, { name: 'Onyama Limba', image: 'onyamalimba.png' }, { name: 'Stephen Shaw', image: 'stephenshaw.png' }, { name: 'XuXue Feng', image: 'xuxuefeng.png' } ]; const statuses = ['unqualified', 'qualified', 'new', 'negotiation', 'renewal', 'proposal']; const clearFilter1 = () => { initFilters1(); }; const onGlobalFilterChange1 = (e: React.ChangeEvent) => { const value = e.target.value; let _filters1 = { ...filters1 }; (_filters1['global'] as any).value = value; setFilters1(_filters1); setGlobalFilterValue1(value); }; const renderHeader1 = () => { return (
); }; useEffect(() => { setLoading2(true); CustomerService.getCustomersLarge().then((data) => { setCustomers1(getCustomers(data)); setLoading1(false); }); CustomerService.getCustomersLarge().then((data) => { setCustomers2(getCustomers(data)); setLoading2(false); }); CustomerService.getCustomersMedium().then((data) => setCustomers3(data)); ProductService.getProductsWithOrdersSmall().then((data) => setProducts(data)); initFilters1(); }, []); const balanceTemplate = (rowData: Demo.Customer) => { return (
{formatCurrency(rowData.balance as number)}
); }; const getCustomers = (data: Demo.Customer[]) => { return [...(data || [])].map((d) => { d.date = new Date(d.date); return d; }); }; const formatDate = (value: Date) => { return value.toLocaleDateString('en-US', { day: '2-digit', month: '2-digit', year: 'numeric' }); }; const formatCurrency = (value: number) => { return value.toLocaleString('en-US', { style: 'currency', currency: 'USD' }); }; const initFilters1 = () => { setFilters1({ global: { value: null, matchMode: FilterMatchMode.CONTAINS }, name: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, 'country.name': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, representative: { value: null, matchMode: FilterMatchMode.IN }, date: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, balance: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, status: { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, activity: { value: null, matchMode: FilterMatchMode.BETWEEN }, verified: { value: null, matchMode: FilterMatchMode.EQUALS } }); setGlobalFilterValue1(''); }; const countryBodyTemplate = (rowData: Demo.Customer) => { return ( flag {rowData.country.name} ); }; const filterClearTemplate = (options: ColumnFilterClearTemplateOptions) => { return ; }; const filterApplyTemplate = (options: ColumnFilterApplyTemplateOptions) => { return ; }; const representativeBodyTemplate = (rowData: Demo.Customer) => { const representative = rowData.representative; return ( {representative.name} ((e.target as HTMLImageElement).src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} width={32} style={{ verticalAlign: 'middle' }} /> {representative.name} ); }; const representativeFilterTemplate = (options: ColumnFilterElementTemplateOptions) => { return ( <>
Agent Picker
options.filterCallback(e.value)} optionLabel="name" placeholder="Any" className="p-column-filter" /> ); }; const representativesItemTemplate = (option: any) => { return (
{option.name} {option.name}
); }; const dateBodyTemplate = (rowData: Demo.Customer) => { return formatDate(rowData.date); }; const dateFilterTemplate = (options: ColumnFilterElementTemplateOptions) => { return options.filterCallback(e.value, options.index)} dateFormat="mm/dd/yy" placeholder="mm/dd/yyyy" mask="99/99/9999" />; }; const balanceBodyTemplate = (rowData: Demo.Customer) => { return formatCurrency(rowData.balance as number); }; const balanceFilterTemplate = (options: ColumnFilterElementTemplateOptions) => { return options.filterCallback(e.value, options.index)} mode="currency" currency="USD" locale="en-US" />; }; const statusBodyTemplate = (rowData: Demo.Customer) => { return {rowData.status}; }; const statusFilterTemplate = (options: ColumnFilterElementTemplateOptions) => { return options.filterCallback(e.value, options.index)} itemTemplate={statusItemTemplate} placeholder="Select a Status" className="p-column-filter" showClear />; }; const statusItemTemplate = (option: any) => { return {option}; }; const activityBodyTemplate = (rowData: Demo.Customer) => { return ; }; const activityFilterTemplate = (options: ColumnFilterElementTemplateOptions) => { return ( options.filterCallback(e.value)} range className="m-3">
{options.value ? options.value[0] : 0} {options.value ? options.value[1] : 100}
); }; const verifiedBodyTemplate = (rowData: Demo.Customer) => { return ( ); }; const verifiedFilterTemplate = (options: ColumnFilterElementTemplateOptions) => { return options.filterCallback(e.value)} />; }; const toggleAll = () => { if (allExpanded) collapseAll(); else expandAll(); }; const expandAll = () => { let _expandedRows = {} as { [key: string]: boolean }; products.forEach((p) => (_expandedRows[`${p.id}`] = true)); setExpandedRows(_expandedRows); setAllExpanded(true); }; const collapseAll = () => { setExpandedRows([]); setAllExpanded(false); }; const amountBodyTemplate = (rowData: Demo.Customer) => { return formatCurrency(rowData.amount as number); }; const statusOrderBodyTemplate = (rowData: Demo.Customer) => { return {rowData.status}; }; const searchBodyTemplate = () => { return