@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.
- package/.husky/pre-commit +1 -1
- package/.husky/pre-push +2 -0
- package/dist/14.js +1 -1
- package/dist/14.js.map +1 -1
- package/dist/574.js +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/openmrs-esm-stock-management-app.js.buildmanifest.json +9 -9
- package/dist/routes.json +1 -1
- package/package.json +1 -1
- package/src/stock-lookups/stock-lookups.resource.ts +18 -18
- package/src/stock-sources/stock-sources-filter/stock-sources-filter.component.tsx +13 -10
- package/src/stock-sources/stock-sources-items-table.test.tsx +21 -1
- package/translations/en.json +3 -0
@@ -30,9 +30,9 @@
|
|
30
30
|
"initial": false,
|
31
31
|
"entry": false,
|
32
32
|
"recorded": false,
|
33
|
-
"size":
|
33
|
+
"size": 1236498,
|
34
34
|
"sizes": {
|
35
|
-
"javascript":
|
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": "
|
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":
|
255
|
+
"size": 5613043,
|
256
256
|
"sizes": {
|
257
257
|
"consume-shared": 210,
|
258
|
-
"javascript":
|
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": "
|
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":
|
469
|
+
"size": 13639,
|
470
470
|
"sizes": {
|
471
|
-
"javascript":
|
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": "
|
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.
|
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,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 {
|
21
|
-
import {
|
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
|
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 (
|
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="
|
35
|
-
|
36
|
-
|
37
|
-
itemToString={(item) => (item ? item.display : 'Not Set')}
|
38
|
-
|
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
|
-
|
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', () => {
|
package/translations/en.json
CHANGED
@@ -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",
|