diff --git a/app/Services/CorporateMemberService.php b/app/Services/CorporateMemberService.php index 5b08ac9f..fbde85b3 100644 --- a/app/Services/CorporateMemberService.php +++ b/app/Services/CorporateMemberService.php @@ -203,6 +203,12 @@ class CorporateMemberService ->whereHas('employeds', function ($query) use ($corporateId) { $query->where('corporate_id', $corporateId); }) + ->when($request->input('search'), function ($query, $search) { + $query->where(function ($query) use ($search) { + $query->orWhere('member_id', 'like', "%" . $search . "%") + ->orWhere('name', 'like', "%" . $search . "%"); + }); + }) ->when($request->has('orderBy'), function ($query) use ($request) { $orderBy = match ($request->input('orderBy')) { 'memberId' => 'member_id', diff --git a/frontend/client-portal/src/@types/table.ts b/frontend/client-portal/src/@types/table.ts index 72700787..7b1e9c0d 100644 --- a/frontend/client-portal/src/@types/table.ts +++ b/frontend/client-portal/src/@types/table.ts @@ -84,6 +84,7 @@ export type TableListProps = { }; searchs?: { useSearchs: boolean; + fullWidth?: boolean; searchText: string; setSearchText: Dispatch>; handleSearchSubmit: (event: FormEvent) => void; diff --git a/frontend/client-portal/src/components/Table.tsx b/frontend/client-portal/src/components/Table.tsx index 9feb4a64..e1fe5f21 100644 --- a/frontend/client-portal/src/components/Table.tsx +++ b/frontend/client-portal/src/components/Table.tsx @@ -1,5 +1,4 @@ /* ---------------------------------- @mui ---------------------------------- */ -import { styled } from '@mui/material/styles'; import { Paper, Table as TableContent, @@ -12,49 +11,23 @@ import { Button, TableSortLabel, Box, - Card, Grid, FormControl, InputLabel, Select, MenuItem, - SelectChangeEvent, - Stack, + InputAdornment, Typography, - LinearProgress, - linearProgressClasses, } from '@mui/material'; import { visuallyHidden } from '@mui/utils'; -/* ---------------------------------- axios --------------------------------- */ -import axios from '../utils/axios'; /* ---------------------------------- react --------------------------------- */ -import { Fragment, useContext, useEffect, useState } from 'react'; -import { useSearchParams } from 'react-router-dom'; +import { Fragment } from 'react'; /* -------------------------------- component ------------------------------- */ import BaseTablePagination from './BaseTablePagination'; -/* ---------------------------------- theme --------------------------------- */ -import palette from '../theme/palette'; /* ---------------------------------- utils --------------------------------- */ -import { UserCurrentCorporateContext } from '../contexts/UserCurrentCorporate'; -import { fSplit } from '../utils/formatNumber'; -import { Download, Search as SearchIcon, Upload } from '@mui/icons-material'; +import { Download, Search as SearchIcon } from '@mui/icons-material'; /* ---------------------------------- types --------------------------------- */ -import { DivisionDataProps, Order, PaginationTableProps, TableListProps } from '../@types/table'; -import { InputAdornment } from '@mui/material'; -import GetAppIcon from '@mui/icons-material/GetApp'; -/* --------------------------------- styled --------------------------------- */ -const BorderLinearProgress = styled(LinearProgress)(({ theme }) => ({ - height: 10, - borderRadius: 6, - [`&.${linearProgressClasses.colorPrimary}`]: { - backgroundColor: '#D1F1F1', - }, - [`& .${linearProgressClasses.bar}`]: { - borderRadius: 6, - backgroundColor: theme.palette.primary.main, - }, -})); -/* -------------------------------------------------------------------------- */ +import { DivisionDataProps, StatusDataProps, TableListProps } from '../@types/table'; export default function Table({ headCells, @@ -136,7 +109,7 @@ export default function Table({ const parameters = Object.fromEntries([ ...params.searchParams.entries(), ['page', newPage + 1], - ['per_page', paginations.rowsPerPage] + ['per_page', paginations.rowsPerPage], ]); paginations.setPage(newPage); await new Promise((resolve) => setTimeout(resolve, 500)); @@ -161,96 +134,95 @@ export default function Table({ return ( // - - {/* Field 1 */} - - - {filters && filters.useFilter ? ( - - - - Division - - - - + + {/* Field 1 */} + + + {filters && filters.useFilter ? ( + + + + Division + + + + +
+ searchs?.setSearchText(event.target.value)} + value={searchs?.searchText} + fullWidth + /> + +
+
+ ) : null} + + {searchs && searchs.useSearchs ? ( + + {filterStatus && filterStatus.useFilter ? ( +
searchs.setSearchText(event.target.value)} value={searchs.searchText} fullWidth + InputProps={{ + startAdornment: ( + + + + ), + }} + placeholder="Search Name or Member ID... " />
-
- ) : null } - - {searchs && searchs.useSearchs ? ( - - {filterStatus && filterStatus.useFilter ? ( - -
- searchs.setSearchText(event.target.value)} - value={searchs.searchText} - fullWidth - InputProps={{ - startAdornment: ( - - - - ), - }} - placeholder="Search Name or Member ID... " - /> - + ) : ( + +
+ searchs.setSearchText(event.target.value)} + value={searchs.searchText} + fullWidth + InputProps={{ + startAdornment: ( + + + + ), + }} + placeholder="Search Name or Member ID... " + /> +
- ) : - -
- searchs.setSearchText(event.target.value)} - value={searchs.searchText} - fullWidth - InputProps={{ - startAdornment: ( - - - - ), - }} - placeholder="Search Name or Member ID... " - /> - -
- } - -
- ) : null } + )} +
+ ) : null} - {/* Start date */} - {filterStartDate && filterStartDate.useFilter ? ( - + {/* Start date */} + {filterStartDate && filterStartDate.useFilter ? ( +
({ />
- ) : null } + ) : null} - {/* End Date */} + {/* End Date */} - {filterEndDate && filterEndDate.useFilter ? ( - + {filterEndDate && filterEndDate.useFilter ? ( +
({ />
- ) : null } + ) : null} - {/* Filter status */} - {filterStatus && filterStatus.useFilter ? ( - - - Status - - - - ) : null } + {/* Filter status */} + {filterStatus && filterStatus.useFilter ? ( + + + Status + + + + ) : null} - {/* Export Report */} - - {exportReport && exportReport.useExport ? ( - - - - - - ) : null } - -
+ {/* Export Report */} + {exportReport && exportReport.useExport ? ( + + + + + + ) : null}
- {/* End Field 1 */} - {/* Field 2 */} - - {/* Table */} - - - {/* Table Header */} - - {/* End Table Header */} - {/* Table Body */} - - {loadings.isLoading && rows.length >= 1 ? ( - - - Loading . . . - - - ) : rows && rows.length >= 1 ? ( - rows.map((row, rowIndex) => ( - - {headCells && - //@ts-ignore - headCells.map((head, headIndex) => ( - //@ts-ignore - - {row[head.id]} - - ))} - - )) - ) : ( - - - No Data Found - - - )} - - {/* End Table Body */} - - - {/* End Table */} - - {/* Pagination */} - - {/* End Pagination */} - - {/* End Field 2 */}
+ {/* End Field 1 */} + {/* Field 2 */} + + {/* Table */} + + + {/* Table Header */} + + {/* End Table Header */} + {/* Table Body */} + + {loadings.isLoading && rows && rows.length >= 1 ? ( + + + Loading . . . + + + ) : rows && rows.length >= 1 ? ( + rows.map((row, rowIndex) => ( + + {headCells && + //@ts-ignore + headCells.map((head, headIndex) => ( + //@ts-ignore + + {row[head.id]} + + ))} + + )) + ) : ( + + + No Data Found + + + )} + + {/* End Table Body */} + + + {/* End Table */} + + {/* Pagination */} + + {/* End Pagination */} + + {/* End Field 2 */} +
//
); } diff --git a/frontend/client-portal/src/layouts/dashboard/index.tsx b/frontend/client-portal/src/layouts/dashboard/index.tsx index e14aa6b7..d26e66da 100644 --- a/frontend/client-portal/src/layouts/dashboard/index.tsx +++ b/frontend/client-portal/src/layouts/dashboard/index.tsx @@ -60,9 +60,8 @@ export default function DashboardLayout() { const [corporateValue, setCorporateValue] = useLocalStorage( 'corporateValue', - user.corporate ? `${user.corporate.id}` : '' + user && user.corporate ? `${user.corporate.id}` : '' ); - const value = { corporateValue, setCorporateValue }; if (verticalLayout) { return ( @@ -96,7 +95,7 @@ export default function DashboardLayout() { } return ( - + (); @@ -257,8 +258,6 @@ export default function Index() { (async () => { setIsLoading(true); - await new Promise((resolve) => setTimeout(resolve, 250)); - const parameters = Object.keys(appliedParams).length !== 0 ? appliedParams @@ -270,10 +269,12 @@ export default function Index() { params: { ...parameters }, }); - // console.log('member', corporateMembers); const corporateTopUpLimit = await axios.get(`${corporateValue}/topup`); - setSearchParams(parameters); + if (pathname === '/dashboard') { + setSearchParams(parameters); + } + setPolicyData({ limit: corporatePolicyLimit.data.data, topUpLimit: corporateTopUpLimit.data.data, @@ -325,10 +326,10 @@ export default function Index() { ), /* action: ( - - - - ), */ + + + + ), */ })) ); setPaginationTable(corporateMembers.data); diff --git a/frontend/client-portal/src/pages/EmployeeData/List.tsx b/frontend/client-portal/src/pages/EmployeeData/List.tsx index 52ebde3f..54a0f468 100644 --- a/frontend/client-portal/src/pages/EmployeeData/List.tsx +++ b/frontend/client-portal/src/pages/EmployeeData/List.tsx @@ -85,6 +85,31 @@ export default function List() { /* -------------------------------------------------------------------------- */ + /* ------------------------------ handle search ----------------------------- */ + const [searchText, setSearchText] = useState(''); + + const handleSearchSubmit = async (event: React.FormEvent) => { + event.preventDefault(); + + if (searchText === '') { + searchParams.delete('search'); + const params = Object.fromEntries([...searchParams.entries()]); + setAppliedParams(params); + } else { + const params = Object.fromEntries([...searchParams.entries(), ['search', searchText]]); + setAppliedParams(params); + } + }; + + const searchs = { + useSearchs: true, + fullWidth: true, + searchText: searchText, + setSearchText: setSearchText, + handleSearchSubmit: handleSearchSubmit, + }; + /* -------------------------------------------------------------------------- */ + /* -------------------------------- headCell -------------------------------- */ const headCells: HeadCell[] = [ { @@ -146,11 +171,6 @@ export default function List() { setData( response.data.data.map((obj: any) => ({ ...obj, - // memberId: - // - // , status: obj.status === 1 ? ( @@ -200,7 +220,7 @@ export default function List() { paginations={paginations} loadings={loadings} params={params} - // searchs={searchs} + searchs={searchs} // filters={filters} />