diff --git a/client/src/components/event-request/EventRequestList.js b/client/src/components/event-request/EventRequestList.js
index ae3f068..3d4eb9d 100644
--- a/client/src/components/event-request/EventRequestList.js
+++ b/client/src/components/event-request/EventRequestList.js
@@ -1,7 +1,7 @@
import React, {useState, useEffect} from "react";
import { useNavigate } from "react-router-dom";
import { AuthService, EventsService, CustomerService, ResourceService, EventRequestsService } from "../../services";
-import { Spinner, Breadcrumb, BreadcrumbItem, Tabs, Tab } from "react-bootstrap";
+import { Spinner, Breadcrumb, BreadcrumbItem, Tabs, Tab, Dropdown } from "react-bootstrap";
import { Columns, Download, Filter, PencilSquare, PersonSquare, Plus } from "react-bootstrap-icons";
import { ManageTable, Export } from "../../shared/components";
@@ -15,6 +15,10 @@ const EventRequestList = () => {
const [comments, setComments] = useState({});
const [keyword, setKeyword] = useState('');
const [selectedItems, setSelectedItems] = useState([]);
+ const [showFilterDropdown, setShowFilterDropdown] = useState(false);
+ const [requestTypeFilter, setRequestTypeFilter] = useState('');
+ const [transportationSupportFilter, setTransportationSupportFilter] = useState('');
+ const [newPatientFilter, setNewPatientFilter] = useState('');
const [columns, setColumns] = useState([
{
key: 'customer_display',
@@ -97,13 +101,26 @@ const EventRequestList = () => {
const filterRequestsFun = (item, statusParam, keywordParam) => {
const normalizedKeyword = `${keywordParam || ''}`.toLowerCase().trim();
+ const normalizedRequestTypeFilter = `${requestTypeFilter || ''}`.toLowerCase().trim();
+ const normalizedTransportationFilter = `${transportationSupportFilter || ''}`.toLowerCase().trim();
+ const normalizedNewPatientFilter = `${newPatientFilter || ''}`.toLowerCase().trim();
const statusLabel = getStatusLabel(item?.status || '');
const completeBy = item?.edit_history?.[item?.edit_history?.length - 1]?.employee || '';
+ const itemRequestType = `${item?.type || ''}`.toLowerCase().trim();
+ const itemTransportation = `${item?.transportation || ''}`.toLowerCase().trim();
+ const itemNewPatient = `${item?.np || ''}`.toLowerCase().trim();
+
+ const isMatchingStructuredFilters =
+ (!normalizedRequestTypeFilter || itemRequestType === normalizedRequestTypeFilter) &&
+ (!normalizedTransportationFilter || itemTransportation === normalizedTransportationFilter) &&
+ (!normalizedNewPatientFilter || itemNewPatient === normalizedNewPatientFilter);
+
if (!normalizedKeyword) {
- return item?.status === statusParam;
+ return item?.status === statusParam && isMatchingStructuredFilters;
}
return (
item?.status === statusParam &&
+ isMatchingStructuredFilters &&
(
item?.customer_display?.toLowerCase()?.includes(normalizedKeyword) ||
item?.source?.toLowerCase()?.includes(normalizedKeyword) ||
@@ -275,6 +292,66 @@ const EventRequestList = () => {
source: EventRequestsService.sourceList.find((item) => item?.value === eventRequest?.source)?.label || eventRequest?.source,
complete_by: eventRequest?.edit_history && eventRequest?.edit_history[eventRequest?.edit_history?.length - 1]?.employee || ''
}));
+ const requestTypeOptions = [...new Set(eventRequests.map((item) => `${item?.type || ''}`.trim()).filter(Boolean))];
+ const transportationSupportOptions = [...new Set(eventRequests.map((item) => `${item?.transportation || ''}`.trim()).filter(Boolean))];
+ const newPatientOptions = [...new Set(eventRequests.map((item) => `${item?.np || ''}`.trim()).filter(Boolean))];
+
+ const cleanFilterAndClose = () => {
+ setRequestTypeFilter('');
+ setTransportationSupportFilter('');
+ setNewPatientFilter('');
+ setShowFilterDropdown(false);
+ };
+
+ const applyFilterAndClose = () => {
+ setShowFilterDropdown(false);
+ };
+
+ const customFilterMenu = React.forwardRef(
+ ({ children, style, className, 'aria-labelledby': labeledBy }, ref) => (
+
+
Filter By
+
+
+
Request Type
+
+
+
+
+
+
Transportation Support
+
+
+
+
+
+
New Patient
+
+
+
+
+
+
+
+
+
+
+ )
+ );
const table = (statusParam, keywordParam) =>
@@ -356,7 +433,19 @@ const EventRequestList = () => {
setKeyword(e.currentTarget.value)} />
-
+
setShowFilterDropdown(isOpen)}
+ autoClose={false}
+ >
+
+ Filter
+
+
+
{AuthService.canEditAppointmentRequests() &&
}
{
const [resources, setResources] = useState([]);
const [fromDate, setFromDate] = useState(new Date());
const [toDate, setToDate] = useState(new Date(new Date().setMonth(new Date().getMonth() + 6)));
- const [selectedResource, setSelectedResource] = useState(null);
- const [selectedCustomer, setSelectedCustomer] = useState(null);
const [filteredEvents, setFilteredEvents] = useState(events);
const [showDeletedItems, setShowDeletedItems] = useState(false);
const [showFilterDropdown, setShowFilterDropdown] = useState(false);
+ const [customerTypeFilter, setCustomerTypeFilter] = useState('');
+ const [programTypeFilter, setProgramTypeFilter] = useState('');
+ const [paySourceFilter, setPaySourceFilter] = useState('');
+ const [languageSupportFilter, setLanguageSupportFilter] = useState('');
+ const [transportationSupportFilter, setTransportationSupportFilter] = useState('');
+ const [eyesOnFilter, setEyesOnFilter] = useState('');
+ const [newPatientFilter, setNewPatientFilter] = useState('');
+ const [doctorOrderFilter, setDoctorOrderFilter] = useState('');
+ const [fastingRequiredFilter, setFastingRequiredFilter] = useState('');
+ const [idNeededFilter, setIdNeededFilter] = useState('');
+ const [needMedicationListFilter, setNeedMedicationListFilter] = useState('');
const [columns, setColumns] = useState([
{
key: 'customer_name',
@@ -230,24 +238,34 @@ const EventsMultipleList = () => {
useEffect(() => {
setFilteredEvents(events?.filter((event) => {
- if (selectedResource && selectedResource.label !== '' && selectedResource.value !== '') {
- if (selectedResource?.label?.replaceAll(' ', '').replaceAll('*', '').replaceAll('*', '').includes(event.provider?.replaceAll(' ', '').replaceAll('*', '').replaceAll('*', ''))
- || event.provider?.replaceAll(' ', '').replaceAll('*', '').replaceAll('*', '').includes(selectedResource?.label?.replaceAll(' ', '').replaceAll('*', '').replaceAll('*', ''))) {
- return event;
- }
- } else {
- return event;
- }
- }).filter((event => {
- if (selectedCustomer && selectedCustomer !== '' && selectedCustomer.value !== '') {
- if ((event.customer_name || '').toLowerCase().includes((selectedCustomer?.label || '').toLowerCase())) {
- return event;
- }
- } else {
- return event;
- }
- })));
- }, [selectedResource, selectedCustomer, events]);
+ return (
+ (!customerTypeFilter || event?.customer_type === customerTypeFilter) &&
+ (!programTypeFilter || event?.program_type === programTypeFilter) &&
+ (!paySourceFilter || event?.pay_source === paySourceFilter) &&
+ (!languageSupportFilter || event?.language_support === languageSupportFilter) &&
+ (!transportationSupportFilter || event?.transportation_support === transportationSupportFilter) &&
+ (!eyesOnFilter || event?.eyes_on === eyesOnFilter) &&
+ (!newPatientFilter || event?.new_patient === newPatientFilter) &&
+ (!doctorOrderFilter || event?.doctor_order === doctorOrderFilter) &&
+ (!fastingRequiredFilter || event?.fasting_required === fastingRequiredFilter) &&
+ (!idNeededFilter || event?.id_needed === idNeededFilter) &&
+ (!needMedicationListFilter || event?.need_medication_list === needMedicationListFilter)
+ );
+ }));
+ }, [
+ events,
+ customerTypeFilter,
+ programTypeFilter,
+ paySourceFilter,
+ languageSupportFilter,
+ transportationSupportFilter,
+ eyesOnFilter,
+ newPatientFilter,
+ doctorOrderFilter,
+ fastingRequiredFilter,
+ idNeededFilter,
+ needMedicationListFilter
+ ]);
@@ -470,8 +488,17 @@ const EventsMultipleList = () => {
;
const cleanFilterAndClose = () => {
- setSelectedCustomer(null);
- setSelectedResource(null);
+ setCustomerTypeFilter('');
+ setProgramTypeFilter('');
+ setPaySourceFilter('');
+ setLanguageSupportFilter('');
+ setTransportationSupportFilter('');
+ setEyesOnFilter('');
+ setNewPatientFilter('');
+ setDoctorOrderFilter('');
+ setFastingRequiredFilter('');
+ setIdNeededFilter('');
+ setNeedMedicationListFilter('');
setShowFilterDropdown(false);
}
@@ -490,11 +517,25 @@ const EventsMultipleList = () => {
return row;
});
+ const getUniqueOptions = (key) => {
+ return [...new Set(events.map((event) => `${event?.[key] || ''}`.trim()).filter(Boolean))];
+ };
+
+ const customerTypeOptions = getUniqueOptions('customer_type');
+ const programTypeOptions = getUniqueOptions('program_type');
+ const paySourceOptions = getUniqueOptions('pay_source');
+ const languageSupportOptions = getUniqueOptions('language_support');
+ const transportationSupportOptions = getUniqueOptions('transportation_support');
+ const eyesOnOptions = getUniqueOptions('eyes_on');
+ const newPatientOptions = getUniqueOptions('new_patient');
+ const doctorOrderOptions = getUniqueOptions('doctor_order');
+ const fastingRequiredOptions = getUniqueOptions('fasting_required');
+ const idNeededOptions = getUniqueOptions('id_needed');
+ const needMedicationListOptions = getUniqueOptions('need_medication_list');
+
const customMenu = React.forwardRef(
({ children, style, className, 'aria-labelledby': labeledBy }, ref) => {
- const [value, setValue] = useState('');
-
return (
{
Filter By
-
Customer
-
+
Customer Type
+
+
+
+
Program Type
+
-
Provider
-
+
Pay Source
+
+
+
+
Language Support
+
+
+
+
+
+
Transportation Support
+
+
+
+
Eyes-On
+
+
+
+
+
+
New Patient
+
+
+
+
Doctor's Order
+
+
+
+
+
+
Fasting Required
+
+
+
+
ID Needed
+
+
+
+
+
+
Need Medication List
+