Skip to content

Commit

Permalink
Merge branch 'main' into revise-patient-list-view-designs
Browse files Browse the repository at this point in the history
  • Loading branch information
sharon2719 committed May 23, 2024
2 parents 5a7c425 + 417b099 commit 3385c74
Show file tree
Hide file tree
Showing 10 changed files with 86 additions and 121 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ import {
snomedCodeSystem,
supplyMgSnomedCode,
} from '../../../helpers/utils';
import { TypeOfGroup, UnitOfMeasure } from '../../ProductForm/utils';
import { UnitOfMeasure } from '../../ProductForm/utils';
import { GroupFormFields } from '../../ProductForm/types';
import { R4GroupTypeCodes } from '@opensrp/fhir-helpers';

export const defaultCharacteristic = {
code: {
Expand Down Expand Up @@ -55,7 +56,7 @@ export const validationRulesFactory = (t: TFunction) => {
{ required: true, message: t('Required') },
] as Rule[],
[active]: [{ type: 'boolean' }, { required: true, message: t('Required') }] as Rule[],
[type]: [{ type: 'enum', enum: Object.values(TypeOfGroup), required: true }] as Rule[],
[type]: [{ type: 'enum', enum: Object.values(R4GroupTypeCodes), required: true }] as Rule[],
[unitOfMeasure]: [
{ type: 'enum', enum: Object.values(UnitOfMeasure), required: true },
] as Rule[],
Expand Down Expand Up @@ -133,7 +134,7 @@ export const generateGroupPayload = (
];

if (type) {
payload.type = type as TypeOfGroup;
payload.type = type as R4GroupTypeCodes;
}

if (unitOfMeasure) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import { Helmet } from 'react-helmet';
import { CommodityForm } from '../../ProductForm';
import { useParams } from 'react-router';
import { LIST_COMMODITY_URL, unitOfMeasure } from '../../../constants';
import { LIST_COMMODITY_URL, type, unitOfMeasure } from '../../../constants';
import { Spin } from 'antd';
import { BodyLayout } from '@opensrp/react-utils';
import { BrokenPage } from '@opensrp/react-utils';
Expand Down Expand Up @@ -73,7 +73,7 @@ export const CommodityAddEdit = (props: GroupAddEditProps) => {
{ group: IGroup; binary?: IBinary; binaryChanged: boolean },
EusmGroupFormFields
>
hidden={[unitOfMeasure]}
hidden={[unitOfMeasure, type]}
fhirBaseUrl={fhirBaseUrl}
initialValues={initialValues}
cancelUrl={LIST_COMMODITY_URL}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`renders correctly: A catch all 1`] = `"Create commodityCommodity IdIdentifierEnter commodity nameMaterial numberSelect commodity statusActiveDisabledSelect commodity TypeSelect commodity typeSelect the unit of measureSelect the unit of measureAttractive itemYesNoIs it thereIs it in good conditionIs it being used appropriatelyAccountability period (in months)Photo of the productUploadsaveCancel"`;
exports[`renders correctly: A catch all 1`] = `"Create commodityCommodity IdIdentifierEnter commodity nameMaterial numberSelect commodity statusActiveDisabledSelect commodity TypeSubstanceSelect the unit of measureSelect the unit of measureAttractive itemYesNoIs it thereIs it in good conditionIs it being used appropriatelyAccountability period (in months)Photo of the productUploadsaveCancel"`;

exports[`renders correctly: active radio button 1`] = `
<input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import userEvent from '@testing-library/user-event';
import * as notifications from '@opensrp/notifications';
import { photoUploadCharacteristicCode } from '../../../../helpers/utils';
import { cloneDeep } from 'lodash';
import { fillSearchableSelect } from '../../Default/tests/test-utils';

jest.mock('@opensrp/notifications', () => ({
__esModule: true,
Expand Down Expand Up @@ -193,7 +192,7 @@ test('form validation works', async () => {
const errorNodes = [...document.querySelectorAll('.ant-form-item-explain-error')];
const errorMsgs = errorNodes.map((node) => node.textContent);

expect(errorMsgs).toEqual(['Required', 'Required', "'type' is required", 'Required']);
expect(errorMsgs).toEqual(['Required', 'Required', 'Required']);
});

it('can create new commodity', async () => {
Expand Down Expand Up @@ -264,16 +263,6 @@ it('can create new commodity', async () => {
// confirm upload button is no longer visible
await waitForElementToBeRemoved(screen.getByTestId('upload-button'));

// simulate value selection for type
const groupTypeSelectConfig = {
selectId: 'type',
searchOptionText: 'sub',
fullOptionText: 'Substance',
beforeFilterOptions: ['Medication', 'Device', 'Substance'],
afterFilterOptions: ['Substance'],
};
fillSearchableSelect(groupTypeSelectConfig);

fireEvent.click(screen.getByRole('button', { name: /Save/i }));

await waitFor(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ import {
unitOfMeasureCharacteristic,
smartRegisterCodeSystem,
} from '../../../helpers/utils';
import { TypeOfGroup } from '../../ProductForm/utils';
import { GroupFormFields } from '../../ProductForm/types';
import { GroupCharacteristic } from '@smile-cdr/fhirts/dist/FHIR-R4/classes/groupCharacteristic';
import { IBinary } from '@smile-cdr/fhirts/dist/FHIR-R4/interfaces/IBinary';
import { UploadFile } from 'antd';
import { Coding } from '@smile-cdr/fhirts/dist/FHIR-R4/classes/coding';
import { R4GroupTypeCodes } from '@opensrp/fhir-helpers';

export type EusmGroupFormFields = GroupFormFields<{ group: IGroup; binary?: IBinary }>;

Expand Down Expand Up @@ -91,7 +91,7 @@ export const validationRulesFactory = (t: TFunction) => {
{ required: true, message: t('Required') },
] as Rule[],
[active]: [{ type: 'boolean' }, { required: true, message: t('Required') }] as Rule[],
[type]: [{ type: 'enum', enum: Object.values(TypeOfGroup), required: true }] as Rule[],
[type]: [{ type: 'enum', enum: Object.values(R4GroupTypeCodes), required: true }] as Rule[],
[isAttractiveItem]: [{ type: 'boolean' }] as Rule[],
[availability]: [{ type: 'string' }, { required: true, message: t('Required') }] as Rule[],
[condition]: [{ type: 'string' }] as Rule[],
Expand Down Expand Up @@ -333,7 +333,11 @@ export async function getProductImagePayload(
*/
export const getGroupFormFields = (obj?: IGroup, binary?: IBinary): EusmGroupFormFields => {
if (!obj) {
return { initialObject: { group: { code: defaultCode } }, active: true } as EusmGroupFormFields;
return {
initialObject: { group: { code: defaultCode } },
active: true,
type: R4GroupTypeCodes.SUBSTANCE,
} as EusmGroupFormFields;
}
const { id, name, active, identifier, type } = obj;

Expand Down Expand Up @@ -391,7 +395,7 @@ export const getGroupFormFields = (obj?: IGroup, binary?: IBinary): EusmGroupFor
materialNumber: get(identifierObj, '0.value'),
active,
name,
type,
type: type ?? R4GroupTypeCodes.SUBSTANCE,
...formFieldsFromCharacteristics,
productImage: productImageFromUrl,
};
Expand Down Expand Up @@ -471,7 +475,7 @@ export const generateGroupPayload = async (
}

if (type) {
payload.type = type as TypeOfGroup;
payload.type = type as R4GroupTypeCodes;
}

const existingCharacteristics = initialGroupObject?.characteristic ?? [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ export const productCharacteristics = [
coding: [
{
code: '33467722',
display: 'Quantity ',
display: 'Quantity',
system: 'http://smartregister.org/codes',
},
],
Expand Down Expand Up @@ -1309,7 +1309,7 @@ export const createdInventoryGroup1 = {
{
code: {
coding: [
{ system: 'http://smartregister.org/codes', code: '33467722', display: 'Quantity ' },
{ system: 'http://smartregister.org/codes', code: '33467722', display: 'Quantity' },
],
},
valueQuantity: { value: '20' },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,30 @@ describe('fhir-group-management/src/components/LocationInventory/utils', () => {
const noAttractiveCharacteristic = commodity1.characteristic?.filter(
(char) => char.code.coding?.[0].code !== attractiveCharacteristicCode
);
const newCommodity = {
const nonAttractiveItem = {
...commodity1,
characteristic: noAttractiveCharacteristic,
};
const attractiveItem = {
...commodity1,
characteristic: [
{
code: {
coding: [
{
system: 'http://smartregister.org/codes',
code: '23435363',
display: 'Attractive Item code',
},
],
},
valueBoolean: true,
},
],
};
expect(isAttractiveProduct()).toEqual(false);
expect(isAttractiveProduct(commodity1)).toEqual(true);
expect(isAttractiveProduct(newCommodity)).toEqual(false);
expect(isAttractiveProduct(attractiveItem)).toEqual(true);
expect(isAttractiveProduct(nonAttractiveItem)).toEqual(false);
});

it('get item accounterbility months works as expected', () => {
Expand Down

0 comments on commit 3385c74

Please sign in to comment.