@openmrs/esm-stock-management-app 3.0.1-pre.853 → 3.0.1-pre.864

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.
@@ -30,9 +30,9 @@
30
30
  "initial": false,
31
31
  "entry": false,
32
32
  "recorded": false,
33
- "size": 1235998,
33
+ "size": 1236498,
34
34
  "sizes": {
35
- "javascript": 1235830,
35
+ "javascript": 1236330,
36
36
  "consume-shared": 168
37
37
  },
38
38
  "names": [],
@@ -46,7 +46,7 @@
46
46
  "auxiliaryFiles": [
47
47
  "14.js.map"
48
48
  ],
49
- "hash": "f5a48af402e466e9",
49
+ "hash": "d9d4b3c843b1cae5",
50
50
  "childrenByOrder": {}
51
51
  },
52
52
  {
@@ -252,10 +252,10 @@
252
252
  "initial": true,
253
253
  "entry": true,
254
254
  "recorded": false,
255
- "size": 5612543,
255
+ "size": 5613043,
256
256
  "sizes": {
257
257
  "consume-shared": 210,
258
- "javascript": 5591013,
258
+ "javascript": 5591513,
259
259
  "share-init": 210,
260
260
  "runtime": 21110
261
261
  },
@@ -272,7 +272,7 @@
272
272
  "auxiliaryFiles": [
273
273
  "main.js.map"
274
274
  ],
275
- "hash": "c16398c853a201ae",
275
+ "hash": "7949965be8675f6a",
276
276
  "childrenByOrder": {}
277
277
  },
278
278
  {
@@ -466,9 +466,9 @@
466
466
  "initial": false,
467
467
  "entry": false,
468
468
  "recorded": false,
469
- "size": 13491,
469
+ "size": 13639,
470
470
  "sizes": {
471
- "javascript": 13491
471
+ "javascript": 13639
472
472
  },
473
473
  "names": [],
474
474
  "idHints": [],
@@ -480,7 +480,7 @@
480
480
  "574.js"
481
481
  ],
482
482
  "auxiliaryFiles": [],
483
- "hash": "190c255666a90aed",
483
+ "hash": "6dc63a99d2c7bbd8",
484
484
  "childrenByOrder": {}
485
485
  },
486
486
  {
package/dist/routes.json CHANGED
@@ -1 +1 @@
1
- {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2","webservices.rest":"^2.24.0"},"extensions":[{"name":"stock-nav-menu","slot":"stock-sidebar-slot","component":"stockNavMenu","online":true,"offline":true},{"name":"overview-db-link","slot":"stock-page-dashboard-slot","component":"stockOverviewLink","meta":{"name":"overview","slot":"overview-dashboard-slot","title":"overview"},"order":0,"online":true,"offline":true},{"name":"stock-overview-db","slot":"overview-dashboard-slot","component":"stockOverview"},{"name":"operations-db-link","slot":"stock-page-dashboard-slot","component":"stockOperationsLink","meta":{"name":"operations","slot":"operations-dashboard-slot","title":"operations"},"order":2,"online":true,"offline":true},{"name":"stock-operations-db","slot":"operations-dashboard-slot","component":"stockOperations"},{"name":"items-db-link","slot":"stock-page-dashboard-slot","component":"stockItemsLink","meta":{"name":"items","slot":"items-dashboard-slot","title":"items"},"order":1,"online":true,"offline":true},{"name":"stock-items-db","slot":"items-dashboard-slot","component":"stockItems"},{"name":"user-scopes-db-link","slot":"stock-page-dashboard-slot","component":"stockUserScopesLink","meta":{"name":"user-scopes","slot":"user-scopes-dashboard-slot","title":"user-scopes"},"order":3,"online":true,"offline":true},{"name":"stock-user-scopes-db","slot":"user-scopes-dashboard-slot","component":"stockUserScopes"},{"name":"sources-db-link","slot":"stock-page-dashboard-slot","component":"stockSourcesLink","meta":{"name":"sources","slot":"sources-dashboard-slot","title":"Sources"},"order":2,"online":true,"offline":true},{"name":"stock-sources-db","slot":"sources-dashboard-slot","component":"stockSources"},{"name":"reports-db-link","slot":"stock-page-dashboard-slot","component":"stockReportsLink","meta":{"name":"reports","slot":"reports-dashboard-slot","title":"Reports"},"order":5,"online":true,"offline":true},{"name":"stock-reports-db","slot":"reports-dashboard-slot","component":"stockReports"},{"name":"settings-db-link","slot":"stock-page-dashboard-slot","component":"stockSettingsLink","meta":{"name":"settings","slot":"settings-dashboard-slot","title":"Settings"},"order":6,"online":true,"offline":true},{"name":"stock-settings-db","slot":"settings-dashboard-slot","component":"stockSettings"},{"name":"stock-management-admin-card-link","slot":"system-admin-page-card-link-slot","component":"stockManagementAdminCardLink"},{"name":"stock-management-app-menu-item","component":"stockManagementAppMenuItem","slot":"app-menu-item-slot","meta":{"name":" Stock Management"}},{"name":"delete-packaging-unit-button","component":"deletePackagingUnitButton"}],"modals":[{"name":"delete-stock-modal","component":"deleteStockModal"},{"name":"delete-stock-user-scope-modal","component":"deleteUserScopeModal"},{"name":"delete-stock-rule-modal","component":"deleteStockRuleModal"},{"name":"delete-packaging-unit-modal","component":"deletePackagingUnitModal"},{"name":"expired-stock-modal","component":"expiredStockModal"},{"name":"import-bulk-stock-items","component":"importBulkStockItemsModal"},{"name":"receiving-stock-modal","component":"receivingStockModal"},{"name":"stock-operation-dialog","component":"stockOperationModal"},{"name":"transactions-print-bincard-preview-modal","component":"transactionBincardPrintPreviewModal"},{"name":"transactions-print-stockcard-preview-modal","component":"transactionStockcardPrintPreviewModal"}],"workspaces":[{"name":"stock-operation-form-workspace","component":"stockOperationFormWorkspace","title":"Stock Operation","type":"form","canMaximize":true,"width":"extra-wide"},{"name":"stock-item-rules-form-workspace","component":"stockItemRulesFormWorkspace","title":"Stock Item Rules","type":"form"},{"name":"stock-item-form-workspace","component":"stockItemFormWorkspace","title":"Stock Items","type":"form","canMaximize":true,"width":"extra-wide"},{"name":"stock-sources-form-workspace","component":"stockSourcesFormWorkspace","title":"Stock Sources","type":"form","canMaximize":true,"width":"extra-wide"},{"name":"stock-location-form-workspace","component":"stockLocationsFormWorkspace","title":"Stock Locations","type":"form","canMaximize":true,"width":"extra-wide"},{"name":"stock-user-role-scopes-form-workspace","component":"stockUserScopesFormWorkspace","title":"User Role Scopes","type":"form","canMaximize":true,"width":"extra-wide"},{"name":"stock-reports-form-workspace","component":"stockReportsFormWorkspace","title":"Reports","type":"form","canMaximize":true,"width":"extra-wide"}],"pages":[{"component":"root","route":"stock-management"}],"version":"3.0.1-pre.853"}
1
+ {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2","webservices.rest":"^2.24.0"},"extensions":[{"name":"stock-nav-menu","slot":"stock-sidebar-slot","component":"stockNavMenu","online":true,"offline":true},{"name":"overview-db-link","slot":"stock-page-dashboard-slot","component":"stockOverviewLink","meta":{"name":"overview","slot":"overview-dashboard-slot","title":"overview"},"order":0,"online":true,"offline":true},{"name":"stock-overview-db","slot":"overview-dashboard-slot","component":"stockOverview"},{"name":"operations-db-link","slot":"stock-page-dashboard-slot","component":"stockOperationsLink","meta":{"name":"operations","slot":"operations-dashboard-slot","title":"operations"},"order":2,"online":true,"offline":true},{"name":"stock-operations-db","slot":"operations-dashboard-slot","component":"stockOperations"},{"name":"items-db-link","slot":"stock-page-dashboard-slot","component":"stockItemsLink","meta":{"name":"items","slot":"items-dashboard-slot","title":"items"},"order":1,"online":true,"offline":true},{"name":"stock-items-db","slot":"items-dashboard-slot","component":"stockItems"},{"name":"user-scopes-db-link","slot":"stock-page-dashboard-slot","component":"stockUserScopesLink","meta":{"name":"user-scopes","slot":"user-scopes-dashboard-slot","title":"user-scopes"},"order":3,"online":true,"offline":true},{"name":"stock-user-scopes-db","slot":"user-scopes-dashboard-slot","component":"stockUserScopes"},{"name":"sources-db-link","slot":"stock-page-dashboard-slot","component":"stockSourcesLink","meta":{"name":"sources","slot":"sources-dashboard-slot","title":"Sources"},"order":2,"online":true,"offline":true},{"name":"stock-sources-db","slot":"sources-dashboard-slot","component":"stockSources"},{"name":"reports-db-link","slot":"stock-page-dashboard-slot","component":"stockReportsLink","meta":{"name":"reports","slot":"reports-dashboard-slot","title":"Reports"},"order":5,"online":true,"offline":true},{"name":"stock-reports-db","slot":"reports-dashboard-slot","component":"stockReports"},{"name":"settings-db-link","slot":"stock-page-dashboard-slot","component":"stockSettingsLink","meta":{"name":"settings","slot":"settings-dashboard-slot","title":"Settings"},"order":6,"online":true,"offline":true},{"name":"stock-settings-db","slot":"settings-dashboard-slot","component":"stockSettings"},{"name":"stock-management-admin-card-link","slot":"system-admin-page-card-link-slot","component":"stockManagementAdminCardLink"},{"name":"stock-management-app-menu-item","component":"stockManagementAppMenuItem","slot":"app-menu-item-slot","meta":{"name":" Stock Management"}},{"name":"delete-packaging-unit-button","component":"deletePackagingUnitButton"}],"modals":[{"name":"delete-stock-modal","component":"deleteStockModal"},{"name":"delete-stock-user-scope-modal","component":"deleteUserScopeModal"},{"name":"delete-stock-rule-modal","component":"deleteStockRuleModal"},{"name":"delete-packaging-unit-modal","component":"deletePackagingUnitModal"},{"name":"expired-stock-modal","component":"expiredStockModal"},{"name":"import-bulk-stock-items","component":"importBulkStockItemsModal"},{"name":"receiving-stock-modal","component":"receivingStockModal"},{"name":"stock-operation-dialog","component":"stockOperationModal"},{"name":"transactions-print-bincard-preview-modal","component":"transactionBincardPrintPreviewModal"},{"name":"transactions-print-stockcard-preview-modal","component":"transactionStockcardPrintPreviewModal"}],"workspaces":[{"name":"stock-operation-form-workspace","component":"stockOperationFormWorkspace","title":"Stock Operation","type":"form","canMaximize":true,"width":"extra-wide"},{"name":"stock-item-rules-form-workspace","component":"stockItemRulesFormWorkspace","title":"Stock Item Rules","type":"form"},{"name":"stock-item-form-workspace","component":"stockItemFormWorkspace","title":"Stock Items","type":"form","canMaximize":true,"width":"extra-wide"},{"name":"stock-sources-form-workspace","component":"stockSourcesFormWorkspace","title":"Stock Sources","type":"form","canMaximize":true,"width":"extra-wide"},{"name":"stock-location-form-workspace","component":"stockLocationsFormWorkspace","title":"Stock Locations","type":"form","canMaximize":true,"width":"extra-wide"},{"name":"stock-user-role-scopes-form-workspace","component":"stockUserScopesFormWorkspace","title":"User Role Scopes","type":"form","canMaximize":true,"width":"extra-wide"},{"name":"stock-reports-form-workspace","component":"stockReportsFormWorkspace","title":"Reports","type":"form","canMaximize":true,"width":"extra-wide"}],"pages":[{"component":"root","route":"stock-management"}],"version":"3.0.1-pre.864"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmrs/esm-stock-management-app",
3
- "version": "3.0.1-pre.853",
3
+ "version": "3.0.1-pre.864",
4
4
  "license": "MPL-2.0",
5
5
  "description": "Stock management microfrontend for OpenMRS 3.x",
6
6
  "browser": "dist/openmrs-esm-stock-management-app.js",
@@ -1,3 +1,6 @@
1
+ import { useMemo } from 'react';
2
+ import { uniqBy } from 'lodash-es';
3
+ import useSWR from 'swr';
1
4
  import {
2
5
  type FetchResponse,
3
6
  type OpenmrsResource,
@@ -6,30 +9,24 @@ import {
6
9
  useSession,
7
10
  restBaseUrl,
8
11
  } from '@openmrs/esm-framework';
9
- import { type ResourceFilterCriteria, toQueryParams } from '../core/api/api';
10
- import { type PageableResult } from '../core/api/types/PageableResult';
11
- import { type OpenMRSLocation, type OpenMRSLocationTag } from '../core/api/types/Location';
12
- import useSWR from 'swr';
13
- import { type Role } from '../core/api/types/identity/Role';
14
- import { type User } from '../core/api/types/identity/User';
15
- import { type StockOperationType } from '../core/api/types/stockOperation/StockOperationType';
16
12
  import { type Concept } from '../core/api/types/concept/Concept';
17
- import { type Party } from '../core/api/types/Party';
18
13
  import { type Drug } from '../core/api/types/concept/Drug';
14
+ import { type OpenMRSLocation, type OpenMRSLocationTag } from '../core/api/types/Location';
15
+ import { type PageableResult } from '../core/api/types/PageableResult';
16
+ import { type Party } from '../core/api/types/Party';
19
17
  import { type Patient } from '../core/api/types/identity/Patient';
20
- import { useMemo } from 'react';
21
- import { uniqBy } from 'lodash-es';
18
+ import { type ResourceFilterCriteria, toQueryParams } from '../core/api/api';
19
+ import { type Role } from '../core/api/types/identity/Role';
20
+ import { type StockOperationType } from '../core/api/types/stockOperation/StockOperationType';
21
+ import { type User } from '../core/api/types/identity/User';
22
22
  import { type UserRoleScope } from '../core/api/types/identity/UserRoleScope';
23
23
 
24
+ export type ConceptFilterCriteria = ResourceFilterCriteria;
25
+ export type DrugFilterCriteria = ResourceFilterCriteria;
26
+ export type LocationFilterCriteria = ResourceFilterCriteria;
24
27
  export type PatientFilterCriteria = ResourceFilterCriteria;
25
-
26
28
  export type UserFilterCriteria = ResourceFilterCriteria;
27
29
 
28
- export type DrugFilterCriteria = ResourceFilterCriteria;
29
-
30
- export type ConceptFilterCriteria = ResourceFilterCriteria;
31
-
32
- export type LocationFilterCriteria = ResourceFilterCriteria;
33
30
  interface FHIRResponse {
34
31
  entry: Array<{ resource: fhir.Location }>;
35
32
  total: number;
@@ -190,10 +187,12 @@ export function useConcept(conceptUuid: string) {
190
187
  data: Concept;
191
188
  },
192
189
  Error
193
- >(conceptUuid ? apiUrl : null, openmrsFetch);
190
+ >(conceptUuid ? apiUrl : null, openmrsFetch, {
191
+ errorRetryCount: 2,
192
+ });
194
193
 
195
194
  return {
196
- items: data?.data,
195
+ items: data?.data || <Concept>{},
197
196
  isLoading,
198
197
  error,
199
198
  };
@@ -208,6 +207,7 @@ export function useParties() {
208
207
  },
209
208
  Error
210
209
  >(apiUrl, openmrsFetch);
210
+
211
211
  return {
212
212
  items: data?.data || <PageableResult<Party>>{},
213
213
  isLoading,
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { useTranslation } from 'react-i18next';
2
3
  import { Dropdown, DropdownSkeleton } from '@carbon/react';
3
4
  import { showSnackbar, useConfig } from '@openmrs/esm-framework';
4
5
  import { type ConfigObject } from '../../config-schema';
@@ -8,8 +9,8 @@ import styles from './stock-sources-filter.scss';
8
9
  const StockSourcesFilter: React.FC<{
9
10
  onFilterChange: (selectedSourceType: string) => void;
10
11
  }> = ({ onFilterChange }) => {
12
+ const { t } = useTranslation();
11
13
  const { stockSourceTypeUUID } = useConfig<ConfigObject>();
12
-
13
14
  const { items, isLoading, error } = useConcept(stockSourceTypeUUID);
14
15
 
15
16
  if (isLoading) {
@@ -18,27 +19,29 @@ const StockSourcesFilter: React.FC<{
18
19
 
19
20
  if (error) {
20
21
  showSnackbar({
21
- title: 'Error fetching stock sources',
22
+ title: t('errorFetchingStockSourceTypes', 'Error fetching stock source types'),
23
+ subtitle: error.message,
22
24
  kind: 'error',
23
25
  isLowContrast: true,
24
26
  });
25
27
  }
26
28
 
27
- if (!items) {
29
+ if (Object.keys(items).length === 0) {
28
30
  return null;
29
31
  }
30
32
 
31
33
  return (
32
34
  <div className={styles.filterContainer}>
33
35
  <Dropdown
34
- id="stockSourcesFiter"
35
- items={[...items.answers]}
36
- initialSelectedItem={items.answers[0]}
37
- itemToString={(item) => (item ? item.display : 'Not Set')}
38
- titleText="Filter: "
39
- type="inline"
40
- size="sm"
36
+ id="stockSourcesFilter"
37
+ initialSelectedItem={items?.answers?.[0]}
38
+ items={[...(items?.answers || [])]}
39
+ itemToString={(item) => (item ? item.display : t('notSet', 'Not Set'))}
40
+ label=""
41
41
  onChange={({ selectedItem }) => onFilterChange(selectedItem?.display)}
42
+ size="sm"
43
+ titleText={t('selectSourceType', 'Select source type')}
44
+ type="inline"
42
45
  />
43
46
  </div>
44
47
  );
@@ -2,9 +2,13 @@ import React from 'react';
2
2
  import userEvent from '@testing-library/user-event';
3
3
  import { renderHook, act, render, screen, waitFor } from '@testing-library/react';
4
4
  import { type StockSource } from '../core/api/types/stockOperation/StockSource';
5
+ import { type Concept } from '../core/api/types/concept/Concept';
6
+ import { useConcept } from '../stock-lookups/stock-lookups.resource';
5
7
  import useStockSourcesPage from './stock-sources-items-table.resource';
6
8
  import StockSourcesItems from './stock-sources-items-table.component';
9
+
7
10
  const mockUseStockSourcesPage = jest.mocked(useStockSourcesPage);
11
+ const mockUseConcept = jest.mocked(useConcept);
8
12
 
9
13
  jest.mock('./stock-sources-items-table.resource', () => ({
10
14
  __esModule: true,
@@ -12,6 +16,10 @@ jest.mock('./stock-sources-items-table.resource', () => ({
12
16
  useStockSourcesPage: jest.fn(),
13
17
  }));
14
18
 
19
+ jest.mock('../stock-lookups/stock-lookups.resource', () => ({
20
+ useConcept: jest.fn(),
21
+ }));
22
+
15
23
  describe('StockSourcesItems', () => {
16
24
  const mockFilter = {};
17
25
  const mockItems = {
@@ -35,7 +43,19 @@ describe('StockSourcesItems', () => {
35
43
  };
36
44
 
37
45
  beforeEach(() => {
38
- mockUseStockSourcesPage.mockClear();
46
+ mockUseConcept.mockReturnValue({
47
+ items: {
48
+ uuid: '1',
49
+ display: 'Source Types',
50
+ answers: [
51
+ { uuid: '1', display: 'All' },
52
+ { uuid: '2', display: 'Internal' },
53
+ { uuid: '3', display: 'External' },
54
+ ] as Concept[],
55
+ } as Concept,
56
+ isLoading: false,
57
+ error: null,
58
+ });
39
59
  });
40
60
 
41
61
  it('should return initial values', () => {
@@ -112,6 +112,7 @@
112
112
  "errorDeletingSource": "Error deleting a source",
113
113
  "errorDeletingUserScope": "Error deleting a user scope",
114
114
  "errorEditingStockItem": "Error editing a stock Item",
115
+ "errorFetchingStockSourceTypes": "Error fetching stock source types",
115
116
  "errorLoadingStockOperation": "Error loading stock operation",
116
117
  "errorLoadingStockOperationTypes": "Error loading stock operation types",
117
118
  "errorPrintingStockOperation": "Error printing stock operation",
@@ -277,10 +278,12 @@
277
278
  "saveStockItemReferenceErrorTitle": "StockItem Reference",
278
279
  "saveStockItemReferenceMessage": "Stock Item Reference saved successfully",
279
280
  "search": "Search",
281
+ "searchStockItems": "Search stock items",
280
282
  "searchStockOperations": "Search stock operations",
281
283
  "searchThisList": "Search this list",
282
284
  "selectFile": "Select file",
283
285
  "SelectOption": "Select an option",
286
+ "selectSourceType": "Select Source Type",
284
287
  "selectTags": "Select tag(s)",
285
288
  "source": "Source",
286
289
  "sourceType": "Source Type",