From f6117743ad85bdabef50c4e56530711f020ff973 Mon Sep 17 00:00:00 2001 From: R Date: Tue, 14 Feb 2023 16:11:08 +0700 Subject: [PATCH] Fix Filter --- .../Api/ClaimRequestController.php | 13 +++- .../sections/dashboard/CardSearchMember.tsx | 2 +- .../src/sections/dashboard/TableList.tsx | 67 +++++++++++++------ 3 files changed, 61 insertions(+), 21 deletions(-) diff --git a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php index bdf39775..5123ebb9 100644 --- a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php @@ -14,10 +14,21 @@ class ClaimRequestController extends Controller * Display a listing of the resource. * @return Renderable */ - public function index() + public function index(request $request) { $claimRequests = ClaimRequest::query() ->with(['member']) + ->when($request->search, function ($q, $search) { + $q->where('code', 'LIKE', "%".$search."%"); + }) + ->when($request->orderBy, function ($q, $orderBy) use ($request) { + if (in_array($orderBy, ['submission_date', 'code'])) { + $q->orderBy($orderBy, $request->order); + } + }) + ->when($request->status, function($q, $status) { + $q->where('status', $status); + }) ->paginate(); return Helper::responseJson($claimRequests); diff --git a/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx b/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx index 32d5ed32..437b37f9 100644 --- a/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx @@ -95,7 +95,7 @@ export default function CardSearchMember() { - { + { setNoPolis(event.target.value) }}> diff --git a/frontend/hospital-portal/src/sections/dashboard/TableList.tsx b/frontend/hospital-portal/src/sections/dashboard/TableList.tsx index 49513571..859be92a 100755 --- a/frontend/hospital-portal/src/sections/dashboard/TableList.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/TableList.tsx @@ -111,7 +111,7 @@ const headCells: readonly HeadCell[] = [ id: 'member.name', align: 'center', label: 'Member', - isSort: true, + isSort: false, }, { id: 'submission_date', @@ -129,7 +129,7 @@ const headCells: readonly HeadCell[] = [ id: 'status', align: 'right', label: 'Status', - isSort: true, + isSort: false, }, ]; @@ -210,21 +210,21 @@ export default function TableList(props: any) { }; /* -------------------------------------------------------------------------- */ - /* ----------------------------- division field ----------------------------- */ - const [divisionValue, setDivisionValue] = useState('all'); - const [divisionData, setDivisionData] = useState([]); + /* ----------------------------- status field ----------------------------- */ + const [filterStatus, setFilterStatus] = useState('All'); + const [statusOptions, setStatusOptions] = useState(['All', 'Requested', 'Approved', 'Declined']); - const handleDivisionChange = (event: SelectChangeEvent) => { - setDivisionValue(event.target.value as string); + const handleStatusChange = (event: SelectChangeEvent) => { + setFilterStatus(event.target.value as string); - if (event.target.value === 'all') { - searchParams.delete('division'); + if (event.target.value === 'All') { + searchParams.delete('status'); const params = Object.fromEntries([...searchParams.entries()]); setAppliedParams(params); } else { const params = Object.fromEntries([ ...searchParams.entries(), - ['division', event.target.value as string], + ['status', event.target.value.toLowerCase() as string], ]); setAppliedParams(params); } @@ -233,10 +233,13 @@ export default function TableList(props: any) { /* ------------------------------ Search field ------------------------------ */ const [searchText, setSearchText] = useState(''); + const [searchStatus, setSearchStatus] = useState('all'); const handleSearchSubmit = async (event: React.FormEvent) => { event.preventDefault(); setIsLoading(true); + + // Filter by Search Text if (searchText === '') { searchParams.delete('search'); const params = Object.fromEntries([...searchParams.entries()]); @@ -245,6 +248,7 @@ export default function TableList(props: any) { const params = Object.fromEntries([...searchParams.entries(), ['search', searchText]]); setAppliedParams(params); } + await new Promise((resolve) => setTimeout(resolve, 500)); setIsLoading(false); }; @@ -292,7 +296,7 @@ export default function TableList(props: any) { : Object.fromEntries([...searchParams.entries(), ['order', order], ['orderBy', orderBy]]); const response = await axios.get(`/claim-requests`, { - params: { ...params, claimMember: false }, + params: { ...params }, }); setSearchParams(params); @@ -330,14 +334,39 @@ export default function TableList(props: any) {
- setSearchText(event.target.value)} - value={searchText} - fullWidth - /> + + + setSearchText(event.target.value)} + value={searchText} + fullWidth + /> + + + + Status + + + + +