Skip to content

Commit b7b5c1c

Browse files
committed
Create Eusm edit
1 parent e2069de commit b7b5c1c

File tree

24 files changed

+4007
-3083
lines changed

24 files changed

+4007
-3083
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import React from 'react';
2+
import { Helmet } from 'react-helmet';
3+
import { CommodityForm } from '../../ProductForm';
4+
import { useParams } from 'react-router';
5+
import { accountabilityPeriod, appropriateUsage, availability, condition, groupResourceType, isAttractiveItem, LIST_COMMODITY_URL, materialNumber, productImage } from '../../../constants';
6+
import { Spin } from 'antd';
7+
import { PageHeader } from '@opensrp/react-utils';
8+
import { useQuery } from 'react-query';
9+
import { FHIRServiceClass, BrokenPage } from '@opensrp/react-utils';
10+
import { IGroup } from '@smile-cdr/fhirts/dist/FHIR-R4/interfaces/IGroup';
11+
import { generateGroupPayload, getGroupFormFields, postPutGroup, updateListReferencesFactory, validationRulesFactory } from './utils';
12+
import { useTranslation } from '../../../mls';
13+
14+
export interface GroupAddEditProps {
15+
fhirBaseURL: string;
16+
listId: string;
17+
}
18+
19+
export interface RouteParams {
20+
id?: string;
21+
}
22+
23+
export const CommodityAddEdit = (props: GroupAddEditProps) => {
24+
const { fhirBaseURL: fhirBaseUrl, listId } = props;
25+
26+
const { id: resourceId } = useParams<RouteParams>();
27+
const { t } = useTranslation();
28+
29+
const groupQuery = useQuery(
30+
[groupResourceType, resourceId],
31+
async () =>
32+
new FHIRServiceClass<IGroup>(fhirBaseUrl, groupResourceType).read(resourceId as string),
33+
{
34+
enabled: !!resourceId,
35+
}
36+
);
37+
38+
if (!groupQuery.isIdle && groupQuery.isLoading) {
39+
return <Spin size="large" className="custom-spinner"></Spin>;
40+
}
41+
42+
if (groupQuery.error && !groupQuery.data) {
43+
return <BrokenPage errorMessage={(groupQuery.error as Error).message} />;
44+
}
45+
46+
const initialValues = getGroupFormFields(groupQuery.data);
47+
48+
const pageTitle = groupQuery.data
49+
? t('Edit Commodity | {{name}}', { name: groupQuery.data.name ?? '' })
50+
: t('Create Commodity');
51+
52+
const postSuccess = updateListReferencesFactory(fhirBaseUrl, listId);
53+
54+
return (
55+
<section className="content-section">
56+
<Helmet>
57+
<title>{pageTitle}</title>
58+
</Helmet>
59+
<PageHeader title={pageTitle} />
60+
<div className="bg-white p-5">
61+
<CommodityForm
62+
hidden={[materialNumber, isAttractiveItem, availability, condition, appropriateUsage, accountabilityPeriod, productImage]}
63+
fhirBaseUrl={fhirBaseUrl}
64+
initialValues={initialValues}
65+
cancelUrl={LIST_COMMODITY_URL}
66+
successUrl={LIST_COMMODITY_URL}
67+
postSuccess={postSuccess}
68+
validationRulesFactory={validationRulesFactory}
69+
mutationEffect={async (initialValues, values) => {
70+
const payload = generateGroupPayload(values, initialValues)
71+
return postPutGroup(fhirBaseUrl, payload)
72+
}}
73+
/>
74+
</div>
75+
</section>
76+
);
77+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`renders correctly: active radio button 1`] = `
4+
<input
5+
checked=""
6+
class="ant-radio-input"
7+
type="radio"
8+
value="true"
9+
/>
10+
`;
11+
12+
exports[`renders correctly: disabled radio button 1`] = `
13+
<input
14+
class="ant-radio-input"
15+
type="radio"
16+
value="false"
17+
/>
18+
`;

packages/fhir-group-management/src/components/CommodityAddEdit/tests/fixtures.ts packages/fhir-group-management/src/components/CommodityAddEdit/Default/tests/fixtures.ts

+40
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,20 @@ export const newList = {
116116
entry: [],
117117
};
118118

119+
export const editedList = {
120+
resourceType: 'List',
121+
id: 'list-resource-id',
122+
identifier: [{ use: 'official', value: 'list-resource-id' }],
123+
status: 'current',
124+
mode: 'working',
125+
title: 'Supply Chain commodities',
126+
code: {
127+
coding: [{ system: 'http://ona.io', code: 'supply-chain', display: 'Supply Chain Commodity' }],
128+
text: 'Supply Chain Commodity',
129+
},
130+
entry: [{ item: { reference: 'Group/123' } }],
131+
};
132+
119133
export const createdCommodity1 = {
120134
code: {
121135
coding: [{ system: 'http://snomed.info/sct', code: '386452003', display: 'Supply management' }],
@@ -140,3 +154,29 @@ export const createdCommodity1 = {
140154
},
141155
],
142156
};
157+
158+
export const editedCommodity1 = {
159+
resourceType: 'Group',
160+
id: '567ec5f2-db90-4fac-b578-6e07df3f48de',
161+
identifier: [{ value: '43245245336', use: 'official' }],
162+
active: true,
163+
type: 'device',
164+
actual: false,
165+
code: {
166+
coding: [{ system: 'http://snomed.info/sct', code: '386452003', display: 'Supply management' }],
167+
},
168+
name: 'Paracetamol 100mg TabletsDettol',
169+
characteristic: [
170+
{
171+
code: {
172+
coding: [
173+
{ system: 'http://snomed.info/sct', code: '767524001', display: 'Unit of measure' },
174+
],
175+
},
176+
valueCodeableConcept: {
177+
coding: [{ system: 'http://snomed.info/sct', code: '767525000', display: 'Unit' }],
178+
text: 'Bottles',
179+
},
180+
},
181+
],
182+
};

0 commit comments

Comments
 (0)