Fix Filter
This commit is contained in:
@@ -14,10 +14,21 @@ class ClaimRequestController extends Controller
|
|||||||
* Display a listing of the resource.
|
* Display a listing of the resource.
|
||||||
* @return Renderable
|
* @return Renderable
|
||||||
*/
|
*/
|
||||||
public function index()
|
public function index(request $request)
|
||||||
{
|
{
|
||||||
$claimRequests = ClaimRequest::query()
|
$claimRequests = ClaimRequest::query()
|
||||||
->with(['member'])
|
->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();
|
->paginate();
|
||||||
|
|
||||||
return Helper::responseJson($claimRequests);
|
return Helper::responseJson($claimRequests);
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ export default function CardSearchMember() {
|
|||||||
</Typography>
|
</Typography>
|
||||||
</Stack>
|
</Stack>
|
||||||
<Stack gap={2}>
|
<Stack gap={2}>
|
||||||
<TextField variant="outlined" label="Nomor Polis" value={noPolis} onChange={(event) => {
|
<TextField variant="outlined" label="Member ID" value={noPolis} onChange={(event) => {
|
||||||
setNoPolis(event.target.value)
|
setNoPolis(event.target.value)
|
||||||
}}></TextField>
|
}}></TextField>
|
||||||
<LocalizationProvider dateAdapter={AdapterDateFns}>
|
<LocalizationProvider dateAdapter={AdapterDateFns}>
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ const headCells: readonly HeadCell[] = [
|
|||||||
id: 'member.name',
|
id: 'member.name',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
label: 'Member',
|
label: 'Member',
|
||||||
isSort: true,
|
isSort: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'submission_date',
|
id: 'submission_date',
|
||||||
@@ -129,7 +129,7 @@ const headCells: readonly HeadCell[] = [
|
|||||||
id: 'status',
|
id: 'status',
|
||||||
align: 'right',
|
align: 'right',
|
||||||
label: 'Status',
|
label: 'Status',
|
||||||
isSort: true,
|
isSort: false,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -210,21 +210,21 @@ export default function TableList(props: any) {
|
|||||||
};
|
};
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
/* ----------------------------- division field ----------------------------- */
|
/* ----------------------------- status field ----------------------------- */
|
||||||
const [divisionValue, setDivisionValue] = useState('all');
|
const [filterStatus, setFilterStatus] = useState('All');
|
||||||
const [divisionData, setDivisionData] = useState([]);
|
const [statusOptions, setStatusOptions] = useState(['All', 'Requested', 'Approved', 'Declined']);
|
||||||
|
|
||||||
const handleDivisionChange = (event: SelectChangeEvent) => {
|
const handleStatusChange = (event: SelectChangeEvent) => {
|
||||||
setDivisionValue(event.target.value as string);
|
setFilterStatus(event.target.value as string);
|
||||||
|
|
||||||
if (event.target.value === 'all') {
|
if (event.target.value === 'All') {
|
||||||
searchParams.delete('division');
|
searchParams.delete('status');
|
||||||
const params = Object.fromEntries([...searchParams.entries()]);
|
const params = Object.fromEntries([...searchParams.entries()]);
|
||||||
setAppliedParams(params);
|
setAppliedParams(params);
|
||||||
} else {
|
} else {
|
||||||
const params = Object.fromEntries([
|
const params = Object.fromEntries([
|
||||||
...searchParams.entries(),
|
...searchParams.entries(),
|
||||||
['division', event.target.value as string],
|
['status', event.target.value.toLowerCase() as string],
|
||||||
]);
|
]);
|
||||||
setAppliedParams(params);
|
setAppliedParams(params);
|
||||||
}
|
}
|
||||||
@@ -233,10 +233,13 @@ export default function TableList(props: any) {
|
|||||||
|
|
||||||
/* ------------------------------ Search field ------------------------------ */
|
/* ------------------------------ Search field ------------------------------ */
|
||||||
const [searchText, setSearchText] = useState('');
|
const [searchText, setSearchText] = useState('');
|
||||||
|
const [searchStatus, setSearchStatus] = useState('all');
|
||||||
|
|
||||||
const handleSearchSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
|
const handleSearchSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
|
|
||||||
|
// Filter by Search Text
|
||||||
if (searchText === '') {
|
if (searchText === '') {
|
||||||
searchParams.delete('search');
|
searchParams.delete('search');
|
||||||
const params = Object.fromEntries([...searchParams.entries()]);
|
const params = Object.fromEntries([...searchParams.entries()]);
|
||||||
@@ -245,6 +248,7 @@ export default function TableList(props: any) {
|
|||||||
const params = Object.fromEntries([...searchParams.entries(), ['search', searchText]]);
|
const params = Object.fromEntries([...searchParams.entries(), ['search', searchText]]);
|
||||||
setAppliedParams(params);
|
setAppliedParams(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 500));
|
await new Promise((resolve) => setTimeout(resolve, 500));
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
};
|
};
|
||||||
@@ -292,7 +296,7 @@ export default function TableList(props: any) {
|
|||||||
: Object.fromEntries([...searchParams.entries(), ['order', order], ['orderBy', orderBy]]);
|
: Object.fromEntries([...searchParams.entries(), ['order', order], ['orderBy', orderBy]]);
|
||||||
|
|
||||||
const response = await axios.get(`/claim-requests`, {
|
const response = await axios.get(`/claim-requests`, {
|
||||||
params: { ...params, claimMember: false },
|
params: { ...params },
|
||||||
});
|
});
|
||||||
|
|
||||||
setSearchParams(params);
|
setSearchParams(params);
|
||||||
@@ -330,14 +334,39 @@ export default function TableList(props: any) {
|
|||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12}>
|
<Grid item xs={12}>
|
||||||
<form onSubmit={handleSearchSubmit}>
|
<form onSubmit={handleSearchSubmit}>
|
||||||
<TextField
|
<Grid container spacing={2}>
|
||||||
id="search-input"
|
<Grid item xs={9}>
|
||||||
label="Search"
|
<TextField
|
||||||
variant="outlined"
|
id="search-input"
|
||||||
onChange={(event) => setSearchText(event.target.value)}
|
label="Search"
|
||||||
value={searchText}
|
variant="outlined"
|
||||||
fullWidth
|
onChange={(event) => setSearchText(event.target.value)}
|
||||||
/>
|
value={searchText}
|
||||||
|
fullWidth
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
<Grid item xs={3}>
|
||||||
|
<FormControl fullWidth>
|
||||||
|
<InputLabel id="demo-simple-select-label">Status</InputLabel>
|
||||||
|
<Select
|
||||||
|
labelId="demo-simple-select-label"
|
||||||
|
id="demo-simple-select"
|
||||||
|
value={filterStatus}
|
||||||
|
label="Status"
|
||||||
|
onChange={handleStatusChange}
|
||||||
|
sx={{ width: '100%' }}
|
||||||
|
>
|
||||||
|
{statusOptions &&
|
||||||
|
statusOptions.map((option) => (
|
||||||
|
<MenuItem value={option} sx={{ textTransform: 'capitalize' }}>
|
||||||
|
{option}
|
||||||
|
</MenuItem>
|
||||||
|
))}
|
||||||
|
</Select>
|
||||||
|
</FormControl>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
<input type="submit" style={{ display: 'none' }}></input>
|
||||||
</form>
|
</form>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
Reference in New Issue
Block a user