@kenyaemr/esm-service-queues-app 7.0.3-pre.80 → 7.0.3-pre.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/routes.json CHANGED
@@ -1 +1 @@
1
- {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"webservices.rest":"^2.2.0","queue":"^2.4.0-0"},"extensions":[{"name":"outpatient-side-nav-ext","component":"outpatientSideNav","slot":"outpatient-sidebar-slot","online":true,"offline":true},{"name":"service-queues-dashboard-link","component":"serviceQueuesDashboardLink","slot":"homepage-dashboard-slot","meta":{"name":"service-queues","slot":"service-queues-dashboard-slot","title":"Service queues"},"online":true,"offline":true},{"name":"queue-table-by-status-menu-dashboard-link","component":"queueTableByStatusMenu","meta":{"name":"service-queues","slot":"service-queues-dashboard-slot","title":"Service queues"},"online":true,"offline":true},{"component":"root","name":"service-queues-dashboard","slot":"service-queues-dashboard-slot"},{"name":"edit-queue-entry-status-modal","component":"editQueueEntryStatusModal"},{"name":"patient-info-banner-slot","component":"patientInfoBannerSlot"},{"name":"remove-queue-entry","component":"removeQueueEntry"},{"name":"clear-all-queue-entries","component":"clearAllQueueEntries"},{"name":"add-visit-to-queue-modal","component":"addVisitToQueueModal"},{"name":"transition-queue-entry-status-modal","component":"transitionQueueEntryStatusModal"},{"name":"previous-visit-summary-widget","component":"pastVisitSummary","slot":"previous-visit-summary-slot"},{"name":"add-provider-to-room-modal","component":"addProviderToRoomModal"},{"name":"transition-queue-entry-modal","component":"transitionQueueEntryModal"},{"name":"edit-queue-entry-modal","component":"editQueueEntryModal"},{"name":"undo-transition-queue-entry-modal","component":"undoTransitionQueueEntryModal"},{"name":"void-queue-entry-modal","component":"voidQueueEntryModal"},{"name":"end-queue-entry-modal","component":"endQueueEntryModal"},{"name":"active-visits-row-actions","component":"activeVisitsRowActions","slot":"queue-table-serve-patient-slot"},{"name":"visit-form-queue-fields","component":"visitFormQueueFields","slot":"visit-form-queue-slot"}],"workspaces":[{"name":"service-queues-service-form","title":"addNewQueueService","component":"addNewQueueServiceWorkspace","type":"service-queues"},{"name":"service-queues-room-form","title":"addNewQueueServiceRoom","component":"addNewQueueServiceRoomWorkspace","type":"service-queues"},{"name":"service-queues-linelist-filter","title":"filter","component":"queueLinelistFilterWorkspace","type":"service-queues"},{"name":"service-queues-patient-search","title":"searchPatient","component":"patientSearchWorkspace","type":"service-queues"}],"version":"7.0.3-pre.80"}
1
+ {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"webservices.rest":"^2.2.0","queue":"^2.4.0-0"},"extensions":[{"name":"outpatient-side-nav-ext","component":"outpatientSideNav","slot":"outpatient-sidebar-slot","online":true,"offline":true},{"name":"service-queues-dashboard-link","component":"serviceQueuesDashboardLink","slot":"homepage-dashboard-slot","meta":{"name":"service-queues","slot":"service-queues-dashboard-slot","title":"Service queues"},"online":true,"offline":true},{"name":"queue-table-by-status-menu-dashboard-link","component":"queueTableByStatusMenu","meta":{"name":"service-queues","slot":"service-queues-dashboard-slot","title":"Service queues"},"online":true,"offline":true},{"component":"root","name":"service-queues-dashboard","slot":"service-queues-dashboard-slot"},{"name":"edit-queue-entry-status-modal","component":"editQueueEntryStatusModal"},{"name":"patient-info-banner-slot","component":"patientInfoBannerSlot"},{"name":"remove-queue-entry","component":"removeQueueEntry"},{"name":"clear-all-queue-entries","component":"clearAllQueueEntries"},{"name":"add-visit-to-queue-modal","component":"addVisitToQueueModal"},{"name":"transition-queue-entry-status-modal","component":"transitionQueueEntryStatusModal"},{"name":"previous-visit-summary-widget","component":"pastVisitSummary","slot":"previous-visit-summary-slot"},{"name":"add-provider-to-room-modal","component":"addProviderToRoomModal"},{"name":"transition-queue-entry-modal","component":"transitionQueueEntryModal"},{"name":"edit-queue-entry-modal","component":"editQueueEntryModal"},{"name":"undo-transition-queue-entry-modal","component":"undoTransitionQueueEntryModal"},{"name":"void-queue-entry-modal","component":"voidQueueEntryModal"},{"name":"end-queue-entry-modal","component":"endQueueEntryModal"},{"name":"active-visits-row-actions","component":"activeVisitsRowActions","slot":"queue-table-serve-patient-slot"},{"name":"visit-form-queue-fields","component":"visitFormQueueFields","slot":"visit-form-queue-slot"}],"workspaces":[{"name":"service-queues-service-form","title":"addNewQueueService","component":"addNewQueueServiceWorkspace","type":"service-queues"},{"name":"service-queues-room-form","title":"addNewQueueServiceRoom","component":"addNewQueueServiceRoomWorkspace","type":"service-queues"},{"name":"service-queues-linelist-filter","title":"filter","component":"queueLinelistFilterWorkspace","type":"service-queues"},{"name":"service-queues-patient-search","title":"searchPatient","component":"patientSearchWorkspace","type":"service-queues"}],"version":"7.0.3-pre.85"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kenyaemr/esm-service-queues-app",
3
- "version": "7.0.3-pre.80",
3
+ "version": "7.0.3-pre.85",
4
4
  "description": "Outpatient front-end module for the OpenMRS SPA",
5
5
  "browser": "dist/kenyaemr-esm-service-queues-app.js",
6
6
  "main": "src/index.ts",
@@ -3,6 +3,7 @@ import { type QueueEntry, type QueueEntrySearchCriteria } from '../types';
3
3
  import useSWR from 'swr';
4
4
  import { useCallback, useEffect, useMemo, useState } from 'react';
5
5
  import { useSWRConfig } from 'swr/_internal';
6
+ import isEqual from 'lodash-es/isEqual';
6
7
 
7
8
  type QueueEntryResponse = FetchResponse<{
8
9
  results: Array<QueueEntry>;
@@ -84,11 +85,37 @@ export function useQueueEntries(searchCriteria?: QueueEntrySearchCriteria, rep:
84
85
  const [data, setData] = useState<Array<Array<QueueEntry>>>([]);
85
86
  const [totalCount, setTotalCount] = useState<number>();
86
87
  const [currentPage, setCurrentPage] = useState<number>(0);
87
- const [pageUrl, setPageUrl] = useState<string>(getInitialUrl(rep, searchCriteria));
88
+ const [currentSearchCriteria, setCurrentSearchCriteria] = useState(searchCriteria);
89
+ const [currentRep, setCurrentRep] = useState(rep);
90
+ const [pageUrl, setPageUrl] = useState<string>(getInitialUrl(currentRep, currentSearchCriteria));
88
91
  const [error, setError] = useState<Error>();
89
92
  const { mutateQueueEntries } = useMutateQueueEntries();
90
93
  const [waitingForMutate, setWaitingForMutate] = useState(false);
91
94
 
95
+ const refetchAllData = useCallback(
96
+ (newRep: string = currentRep, newSearchCriteria: QueueEntrySearchCriteria = currentSearchCriteria) => {
97
+ setWaitingForMutate(true);
98
+ setCurrentPage(0);
99
+ setPageUrl(getInitialUrl(newRep, newSearchCriteria));
100
+ },
101
+ [currentRep, currentSearchCriteria],
102
+ );
103
+
104
+ // This hook listens to the searchCriteria and rep values and refetches the data when they change.
105
+ useEffect(() => {
106
+ const isSearchCriteriaUpdated = !isEqual(currentSearchCriteria, searchCriteria);
107
+ const isRepUpdated = currentRep !== rep;
108
+ if (isSearchCriteriaUpdated || isRepUpdated) {
109
+ if (isSearchCriteriaUpdated) {
110
+ setCurrentSearchCriteria(searchCriteria);
111
+ }
112
+ if (isRepUpdated) {
113
+ setCurrentRep(rep);
114
+ }
115
+ refetchAllData(rep, searchCriteria);
116
+ }
117
+ }, [searchCriteria, currentSearchCriteria, setCurrentSearchCriteria, currentRep, rep]);
118
+
92
119
  const { data: pageData, isValidating, error: pageError } = useSWR<QueueEntryResponse, Error>(pageUrl, openmrsFetch);
93
120
 
94
121
  useEffect(() => {
@@ -99,10 +126,10 @@ export function useQueueEntries(searchCriteria?: QueueEntrySearchCriteria, rep:
99
126
  }
100
127
  if (pageData && !isValidating && !stillWaitingForMutate) {
101
128
  // We've got results! Time to update the data array and move on to the next page.
102
- if (pageData?.data?.totalCount && pageData?.data?.totalCount !== totalCount) {
129
+ if (pageData?.data?.totalCount > -1 && pageData?.data?.totalCount !== totalCount) {
103
130
  setTotalCount(pageData?.data?.totalCount);
104
131
  }
105
- if (pageData?.data?.results?.length) {
132
+ if (pageData?.data?.results) {
106
133
  const newData = [...data];
107
134
  newData[currentPage] = pageData?.data?.results;
108
135
  setData(newData);
@@ -140,10 +167,8 @@ export function useQueueEntries(searchCriteria?: QueueEntrySearchCriteria, rep:
140
167
  }, [pageError]);
141
168
 
142
169
  const queueUpdateListener = useCallback(() => {
143
- setWaitingForMutate(true);
144
- setCurrentPage(0);
145
- setPageUrl(getInitialUrl(rep, searchCriteria));
146
- }, [rep, searchCriteria]);
170
+ refetchAllData();
171
+ }, [refetchAllData]);
147
172
 
148
173
  useEffect(() => {
149
174
  window.addEventListener('queue-entry-updated', queueUpdateListener);
@@ -157,7 +182,7 @@ export function useQueueEntries(searchCriteria?: QueueEntrySearchCriteria, rep:
157
182
  return {
158
183
  queueEntries,
159
184
  totalCount,
160
- isLoading: !totalCount || (totalCount && queueEntries.length < totalCount),
185
+ isLoading: totalCount === undefined || (totalCount && queueEntries.length < totalCount),
161
186
  isValidating: isValidating || currentPage < data.length,
162
187
  error,
163
188
  mutate: mutateQueueEntries,
@@ -2,8 +2,8 @@ import { getLocale } from '@openmrs/esm-framework';
2
2
  import { useMemo } from 'react';
3
3
  import { useQueues } from './useQueues';
4
4
 
5
- function useQueueServices() {
6
- const { queues, isLoading } = useQueues();
5
+ function useQueueServices(locationUuid?: string) {
6
+ const { queues, isLoading } = useQueues(locationUuid);
7
7
 
8
8
  const results = useMemo(
9
9
  () => ({
@@ -21,7 +21,7 @@ function ClinicMetrics() {
21
21
  const layout = useLayoutType();
22
22
  const mutate = useMutateQueueEntries();
23
23
  const currentQueueLocation = useSelectedQueueLocationUuid();
24
- const { services } = useQueueServices();
24
+ const { services } = useQueueServices(currentQueueLocation);
25
25
  const currentService = useSelectedService();
26
26
  const { serviceCount } = useServiceMetricsCount(currentService?.serviceUuid, currentQueueLocation);
27
27
  const [initialSelectedItem, setInitialSelectItem] = useState(() => {
@@ -66,6 +66,7 @@ function ClinicMetrics() {
66
66
  <Dropdown
67
67
  id="inline"
68
68
  type="inline"
69
+ label={currentService?.serviceDisplay ?? t('all', 'All')}
69
70
  items={[{ display: `${t('all', 'All')}` }, ...(services ?? [])]}
70
71
  itemToString={(item) =>
71
72
  item ? `${item.display} ${item.location?.display ? `- ${item.location.display}` : ''}` : ''
@@ -37,12 +37,17 @@ function DefaultQueueTable() {
37
37
  const selectedService = useSelectedService();
38
38
  const currentLocationUuid = useSelectedQueueLocationUuid();
39
39
  const selectedQueueStatus = useSelectedQueueStatus();
40
- const { queueEntries, isLoading, error, isValidating } = useQueueEntries({
41
- service: selectedService?.serviceUuid,
42
- location: currentLocationUuid,
43
- isEnded: false,
44
- status: selectedQueueStatus?.statusUuid,
45
- });
40
+ const searchCriteria = useMemo(
41
+ () => ({
42
+ service: selectedService?.serviceUuid,
43
+ location: currentLocationUuid,
44
+ isEnded: false,
45
+ status: selectedQueueStatus?.statusUuid,
46
+ }),
47
+ [selectedService?.serviceUuid, currentLocationUuid, selectedQueueStatus?.statusUuid],
48
+ );
49
+ const { queueEntries, isLoading, error, isValidating } = useQueueEntries(searchCriteria);
50
+
46
51
  const { t } = useTranslation();
47
52
 
48
53
  useEffect(() => {
File without changes