fhir-react 0.2.4 → 0.3.3
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/.github/workflows/publish_npmjs.yml +20 -0
- package/.storybook/config.js +9 -3
- package/.storybook/presets.js +1 -0
- package/.storybook/preview-head.html +4 -0
- package/README.md +48 -4
- package/build/bootstrap-reboot.min.css +2 -22
- package/build/index.js +38 -3
- package/build/style.css +31 -459
- package/package.json +15 -5
- package/src/assets/common/chevron-right.svg +3 -0
- package/src/assets/containers/AllergyIntolerance/allergy-intolerance.svg +9 -0
- package/src/assets/containers/Appointment/appointment.svg +14 -0
- package/src/assets/containers/CarePlan/care-plan.svg +10 -0
- package/src/assets/containers/CareTeam/care-team.svg +10 -0
- package/src/assets/containers/Claim/claim.svg +6 -0
- package/src/assets/containers/ClaimResponse/claim-response.svg +7 -0
- package/src/assets/containers/Condition/condition.svg +11 -0
- package/src/assets/containers/Device/device.svg +8 -0
- package/src/assets/containers/DiagnosticReport/diagnostic-report.svg +14 -0
- package/src/assets/containers/DocumentReference/document-reference.svg +10 -0
- package/src/assets/containers/Encounter/encounter.svg +10 -0
- package/src/assets/containers/ExplanationOfBenefit/explanation-of-benefit.svg +3 -0
- package/src/assets/containers/FamilyMemberHistory/family-member-history.svg +7 -0
- package/src/assets/containers/Goal/goal.svg +11 -0
- package/src/assets/containers/Immunization/immunization.svg +7 -0
- package/src/assets/containers/List/list.svg +3 -0
- package/src/assets/containers/Location/location.svg +4 -0
- package/src/assets/containers/Medication/medication.svg +5 -0
- package/src/assets/containers/MedicationAdministration/medication-administration.svg +6 -0
- package/src/assets/containers/MedicationKnowledge/medication-knowledge.svg +11 -0
- package/src/assets/containers/MedicationStatement/medication-statement.svg +5 -0
- package/src/assets/containers/Observation/observation.svg +12 -0
- package/src/assets/containers/Practitioner/practitioner.svg +5 -0
- package/src/assets/containers/Procedure/procedure.svg +9 -0
- package/src/assets/containers/Questionnaire/questionnaire.svg +6 -0
- package/src/assets/containers/QuestionnaireResponse/questionnaire-response.svg +6 -0
- package/src/assets/containers/QustionnaireResponse/questionnaire-response.svg +6 -0
- package/src/assets/containers/ResearchStudy/research-study.svg +9 -0
- package/src/assets/containers/ResourceCategory/resource-placeholder.svg +3 -0
- package/src/components/containers/Accordion/Accordion.js +80 -0
- package/src/components/containers/Accordion/Accordion.stories.js +76 -0
- package/src/components/containers/Accordion/index.js +3 -0
- package/src/components/containers/ResourceContainer/ResourceContainer.css +0 -1
- package/src/components/containers/ResourceContainer/ResourceContainer.js +1 -1
- package/src/components/datatypes/AccountBalance/AccountBalance.js +33 -0
- package/src/components/datatypes/AccountBalance/index.js +3 -0
- package/src/components/datatypes/Annotation/Annotation.js +1 -1
- package/src/components/datatypes/Date/Date.js +14 -4
- package/src/components/datatypes/DatePeriod/DatePeriod.js +38 -0
- package/src/components/datatypes/DatePeriod/index.js +3 -0
- package/src/components/datatypes/HeaderIcon/HeaderIcon.js +31 -0
- package/src/components/datatypes/HeaderIcon/index.js +3 -0
- package/src/components/datatypes/HumanName/HumanName.js +6 -21
- package/src/components/datatypes/Reference/Reference.js +3 -6
- package/src/components/resources/AdverseEvent/AdverseEvent.test.js +2 -2
- package/src/components/resources/AllergyIntolerance/AllergyIntolerance.test.js +4 -4
- package/src/components/resources/Appointment/Appointment.js +91 -65
- package/src/components/resources/Appointment/Appointment.test.js +3 -3
- package/src/components/resources/Bundle/Bundle.js +2 -2
- package/src/components/resources/Bundle/Bundle.stories.js +78 -12
- package/src/components/resources/Bundle/Bundle.test.js +3 -0
- package/src/components/resources/CarePlan/CarePlan.test.js +4 -4
- package/src/components/resources/CareTeam/CareTeam.js +13 -14
- package/src/components/resources/CareTeam/CareTeam.test.js +4 -4
- package/src/components/resources/Claim/Claim.test.js +6 -6
- package/src/components/resources/ClaimResponse/ClaimResponse.test.js +6 -6
- package/src/components/resources/Condition/Condition.js +64 -47
- package/src/components/resources/Condition/Condition.stories.js +41 -8
- package/src/components/resources/Condition/Condition.test.js +20 -14
- package/src/components/resources/DiagnosticReport/DiagnosticReport.test.js +5 -7
- package/src/components/resources/DocumentReference/DocumentReference.js +1 -1
- package/src/components/resources/DocumentReference/DocumentReference.test.js +3 -3
- package/src/components/resources/Encounter/Encounter.js +66 -36
- package/src/components/resources/Encounter/EncounterParticipants.js +2 -2
- package/src/components/resources/ExplanationOfBenefit/CareTeam.js +2 -2
- package/src/components/resources/ExplanationOfBenefit/Diagnosis.js +15 -5
- package/src/components/resources/ExplanationOfBenefit/ExplanationOfBenefit.js +285 -203
- package/src/components/resources/ExplanationOfBenefit/ExplanationOfBenefit.test.js +86 -64
- package/src/components/resources/ExplanationOfBenefit/Items.js +2 -2
- package/src/components/resources/ExplanationOfBenefit/PriceLabel.js +20 -0
- package/src/components/resources/ExplanationOfBenefit/Related.js +3 -3
- package/src/components/resources/ExplanationOfBenefit/SupportingInfo.js +32 -6
- package/src/components/resources/ExplanationOfBenefit/TotalGraph.js +68 -0
- package/src/components/resources/ExplanationOfBenefitGraph/ExplanationOfBenefitGraph.js +89 -0
- package/src/components/resources/ExplanationOfBenefitGraph/ExplanationOfBenefitGraph.stories.js +78 -0
- package/src/components/resources/ExplanationOfBenefitGraph/ExplanationOfBenefitGraph.test.js +51 -0
- package/src/components/resources/ExplanationOfBenefitGraph/index.js +3 -0
- package/src/components/resources/Goal/Goal.test.js +1 -1
- package/src/components/resources/Immunization/Immunization.js +125 -94
- package/src/components/resources/Immunization/Immunization.stories.js +23 -4
- package/src/components/resources/Immunization/Immunization.test.js +17 -12
- package/src/components/resources/List/List.test.js +3 -3
- package/src/components/resources/MedicationAdministration/MedicationAdministration.test.js +7 -7
- package/src/components/resources/MedicationDispense/MedicationDispense.test.js +2 -2
- package/src/components/resources/MedicationRequest/MedicationRequest.test.js +4 -4
- package/src/components/resources/Observation/Observation.js +72 -54
- package/src/components/resources/Observation/Observation.test.js +6 -18
- package/src/components/resources/Observation/ObservationGraph.js +159 -55
- package/src/components/resources/Observation/ObservationGraph.test.js +47 -26
- package/src/components/resources/Patient/Patient.js +77 -87
- package/src/components/resources/Patient/Patient.test.js +1 -1
- package/src/components/resources/Practitioner/Practitioner.js +80 -60
- package/src/components/resources/Practitioner/Practitioner.test.js +4 -4
- package/src/components/resources/Procedure/Procedure.js +99 -87
- package/src/components/resources/Procedure/Procedure.stories.js +8 -6
- package/src/components/resources/Procedure/Procedure.test.js +11 -8
- package/src/components/resources/Questionnaire/Questionnaire.test.js +3 -3
- package/src/components/resources/QuestionnaireResponse/QuestionnaireResponse.test.js +5 -5
- package/src/components/resources/ReferralRequest/ReferralRequest.test.js +2 -2
- package/src/components/resources/ResearchStudy/ResearchStudy.test.js +1 -1
- package/src/components/resources/ResourceCategory/ResourceCategory.js +55 -0
- package/src/components/resources/ResourceCategory/ResourceCategory.stories.js +29 -0
- package/src/components/resources/ResourceCategory/ResourceCategory.test.js +101 -0
- package/src/components/resources/ResourceCategory/index.js +3 -0
- package/src/components/supportedFhirResourceList.js +2 -0
- package/src/components/ui/_header.scss +3 -0
- package/src/components/ui/bootstrap-reboot.min.css +2 -22
- package/src/components/ui/index.js +191 -29
- package/src/constants/badge-status.jsx +98 -0
- package/src/fixtures/dstu2/resources/condition/condition.svg +35 -0
- package/src/fixtures/dstu2/resources/immunization/immunization.svg +10 -0
- package/src/fixtures/example-icons.jsx +169 -0
- package/src/fixtures/r4/resources/explanationOfBenefit/c4bbExample.json +18 -2
- package/src/index.js +7 -1
- package/src/style.scss +176 -0
- package/src/utils/formatDate.js +21 -0
- package/src/utils/formatDate.test.js +22 -0
- package/src/utils/getBadgeColor.js +6 -0
- package/src/utils/getBadgeColor.test.js +14 -0
- package/src/utils/isUrl.js +9 -0
- package/src/utils/isUrl.test.js +12 -0
- package/src/utils.js +7 -0
- package/webpack.config.js +10 -1
- package/src/components/datatypes/HumanName/HumanName.css +0 -15
- package/src/components/datatypes/Reference/Reference.css +0 -8
- package/src/components/resources/Observation/ObservationGraph.css +0 -51
- package/src/components/resources/Patient/Patient.css +0 -19
- package/src/components/ui/index.css +0 -123
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { render } from '@testing-library/react';
|
|
3
1
|
import Procedure from './Procedure';
|
|
4
|
-
|
|
2
|
+
import React from 'react';
|
|
5
3
|
import dstu2Example1 from '../../../fixtures/dstu2/resources/procedure/example1.json';
|
|
6
|
-
import stu3Example1 from '../../../fixtures/stu3/resources/procedure/example1.json';
|
|
7
|
-
|
|
8
4
|
import r4Example2 from '../../../fixtures/r4/resources/procedure/example2.json';
|
|
9
5
|
import r4Example3 from '../../../fixtures/r4/resources/procedure/example3.json';
|
|
6
|
+
import { render } from '@testing-library/react';
|
|
7
|
+
import stu3Example1 from '../../../fixtures/stu3/resources/procedure/example1.json';
|
|
8
|
+
|
|
9
|
+
import fhirIcons from '../../../fixtures/example-icons';
|
|
10
10
|
|
|
11
11
|
describe('Procedure should render component correctly', () => {
|
|
12
12
|
it('should render component correctly with DSTU2 source data', () => {
|
|
13
13
|
const defaultProps = {
|
|
14
14
|
fhirResource: dstu2Example1,
|
|
15
|
+
fhirIcons: fhirIcons,
|
|
15
16
|
};
|
|
16
17
|
const { getByTestId } = render(<Procedure {...defaultProps} />);
|
|
17
18
|
|
|
@@ -22,6 +23,7 @@ describe('Procedure should render component correctly', () => {
|
|
|
22
23
|
it('should render component correctly with STU3 source data', () => {
|
|
23
24
|
const defaultProps = {
|
|
24
25
|
fhirResource: stu3Example1,
|
|
26
|
+
fhirIcons: fhirIcons,
|
|
25
27
|
};
|
|
26
28
|
const { getByTestId } = render(<Procedure {...defaultProps} />);
|
|
27
29
|
|
|
@@ -34,6 +36,7 @@ describe('Procedure should render component correctly', () => {
|
|
|
34
36
|
it('should render component that contain extra fields based of STU3 source data', () => {
|
|
35
37
|
const defaultProps = {
|
|
36
38
|
fhirResource: stu3Example1,
|
|
39
|
+
fhirIcons: fhirIcons,
|
|
37
40
|
};
|
|
38
41
|
const { getByTestId } = render(<Procedure {...defaultProps} />);
|
|
39
42
|
|
|
@@ -48,6 +51,7 @@ describe('Procedure should render component correctly', () => {
|
|
|
48
51
|
it('should render component correctly with R4 source data - example 1', () => {
|
|
49
52
|
const defaultProps = {
|
|
50
53
|
fhirResource: r4Example2,
|
|
54
|
+
fhirIcons: fhirIcons,
|
|
51
55
|
};
|
|
52
56
|
const { getByTestId, queryByTestId } = render(
|
|
53
57
|
<Procedure {...defaultProps} />,
|
|
@@ -57,9 +61,7 @@ describe('Procedure should render component correctly', () => {
|
|
|
57
61
|
'Insertion of intracardiac pacemaker (procedure)',
|
|
58
62
|
);
|
|
59
63
|
expect(getByTestId('status').textContent).toEqual('completed');
|
|
60
|
-
expect(getByTestId('
|
|
61
|
-
'on 2015-04-05',
|
|
62
|
-
);
|
|
64
|
+
expect(getByTestId('providedDate').textContent).toEqual('4/5/2015');
|
|
63
65
|
expect(getByTestId('hasCoding').textContent).toContain(
|
|
64
66
|
'Insertion of intracardiac',
|
|
65
67
|
);
|
|
@@ -77,6 +79,7 @@ describe('Procedure should render component correctly', () => {
|
|
|
77
79
|
it('should render component correctly with STU3 source data - example 2', () => {
|
|
78
80
|
const defaultProps = {
|
|
79
81
|
fhirResource: r4Example3,
|
|
82
|
+
fhirIcons: fhirIcons,
|
|
80
83
|
};
|
|
81
84
|
const { getByTestId, queryByTestId } = render(
|
|
82
85
|
<Procedure {...defaultProps} />,
|
|
@@ -58,7 +58,7 @@ describe('Questionnaire should render component correctly', () => {
|
|
|
58
58
|
'Cancer Quality Forum Questionnaire',
|
|
59
59
|
);
|
|
60
60
|
expect(getByTestId('status').textContent).toEqual('draft');
|
|
61
|
-
expect(getByTestId('dateTime').textContent).toEqual('2012
|
|
61
|
+
expect(getByTestId('dateTime').textContent).toEqual('January 2012');
|
|
62
62
|
|
|
63
63
|
// contain id and test of questions of subgroup
|
|
64
64
|
expect(String(getByTestId('linkId-1.1').textContent).trim()).toContain(
|
|
@@ -119,7 +119,7 @@ describe('Questionnaire should render component correctly', () => {
|
|
|
119
119
|
'Cancer Quality Forum Questionnaire',
|
|
120
120
|
);
|
|
121
121
|
expect(getByTestId('status').textContent).toEqual('draft');
|
|
122
|
-
expect(getByTestId('dateTime').textContent).toEqual('2012
|
|
122
|
+
expect(getByTestId('dateTime').textContent).toEqual('January 2012');
|
|
123
123
|
|
|
124
124
|
// contain id and test of questions of subgroup
|
|
125
125
|
expect(String(getByTestId('linkId-1.1').textContent).trim()).toContain(
|
|
@@ -180,7 +180,7 @@ describe('Questionnaire should render component correctly', () => {
|
|
|
180
180
|
'Cancer Quality Forum Questionnaire',
|
|
181
181
|
);
|
|
182
182
|
expect(getByTestId('status').textContent).toEqual('draft');
|
|
183
|
-
expect(getByTestId('dateTime').textContent).toEqual('2012
|
|
183
|
+
expect(getByTestId('dateTime').textContent).toEqual('January 2012');
|
|
184
184
|
|
|
185
185
|
// contain id and test of questions of subgroup
|
|
186
186
|
expect(String(getByTestId('linkId-1.1').textContent).trim()).toContain(
|
|
@@ -23,7 +23,7 @@ describe('QuestionnaireResponse should render component correctly', () => {
|
|
|
23
23
|
'Questionnaire Response',
|
|
24
24
|
);
|
|
25
25
|
expect(getByTestId('status').textContent).toEqual('completed');
|
|
26
|
-
expect(getByTestId('dateTime').textContent).toEqual('2013
|
|
26
|
+
expect(getByTestId('dateTime').textContent).toEqual('6/18/2013');
|
|
27
27
|
expect(getByTestId('subject').textContent).toEqual('RoelPatient/f201');
|
|
28
28
|
expect(getByTestId('author').textContent).toEqual('Practitioner/f201');
|
|
29
29
|
|
|
@@ -34,7 +34,7 @@ describe('QuestionnaireResponse should render component correctly', () => {
|
|
|
34
34
|
'What is your gender?Male ',
|
|
35
35
|
);
|
|
36
36
|
expect(getByTestId('linkId-2.2').textContent).toEqual(
|
|
37
|
-
'What is your date of birth?1960
|
|
37
|
+
'What is your date of birth?3/13/1960 ',
|
|
38
38
|
);
|
|
39
39
|
expect(getByTestId('linkId-2.3').textContent).toEqual(
|
|
40
40
|
'What is your country of birth?The Netherlands ',
|
|
@@ -56,7 +56,7 @@ describe('QuestionnaireResponse should render component correctly', () => {
|
|
|
56
56
|
'Glasgow Coma Score',
|
|
57
57
|
);
|
|
58
58
|
expect(getByTestId('status').textContent).toEqual('completed');
|
|
59
|
-
expect(getByTestId('dateTime').textContent).toEqual('
|
|
59
|
+
expect(getByTestId('dateTime').textContent).toEqual('12/11/2014');
|
|
60
60
|
|
|
61
61
|
expect(getByTestId('linkId-1.1').textContent).toContain('(LA6560-2) ');
|
|
62
62
|
});
|
|
@@ -72,7 +72,7 @@ describe('QuestionnaireResponse should render component correctly', () => {
|
|
|
72
72
|
'Questionnaire Response',
|
|
73
73
|
);
|
|
74
74
|
expect(getByTestId('status').textContent).toEqual('completed');
|
|
75
|
-
expect(getByTestId('dateTime').textContent).toEqual('2013
|
|
75
|
+
expect(getByTestId('dateTime').textContent).toEqual('2/19/2013');
|
|
76
76
|
|
|
77
77
|
expect(getByTestId('answer-nameOfChild-0').textContent).toContain(
|
|
78
78
|
'Cathy Jones',
|
|
@@ -90,7 +90,7 @@ describe('QuestionnaireResponse should render component correctly', () => {
|
|
|
90
90
|
'Questionnaire Response',
|
|
91
91
|
);
|
|
92
92
|
expect(getByTestId('status').textContent).toEqual('completed');
|
|
93
|
-
expect(getByTestId('dateTime').textContent).toEqual('2013
|
|
93
|
+
expect(getByTestId('dateTime').textContent).toEqual('6/18/2013');
|
|
94
94
|
expect(getByTestId('subject').textContent).toEqual('RoelPatient/f201');
|
|
95
95
|
expect(getByTestId('author').textContent).toEqual('Practitioner/f201');
|
|
96
96
|
|
|
@@ -21,7 +21,7 @@ describe('should render ReferralRequest component properly', () => {
|
|
|
21
21
|
expect(getByTestId('typeCoding').textContent).toContain(
|
|
22
22
|
'Referral for service',
|
|
23
23
|
);
|
|
24
|
-
expect(getByTestId('dateSent').textContent).toContain('2014
|
|
24
|
+
expect(getByTestId('dateSent').textContent).toContain('2/14/2014');
|
|
25
25
|
expect(getByTestId('reason').textContent).toContain(
|
|
26
26
|
'For consideration of Grommets',
|
|
27
27
|
);
|
|
@@ -46,7 +46,7 @@ describe('should render ReferralRequest component properly', () => {
|
|
|
46
46
|
expect(getByTestId('typeCoding').textContent).toContain(
|
|
47
47
|
'Patient referral to specialist',
|
|
48
48
|
);
|
|
49
|
-
expect(getByTestId('dateSent').textContent).toContain('2014
|
|
49
|
+
expect(getByTestId('dateSent').textContent).toContain('2/14/2014');
|
|
50
50
|
expect(getByTestId('reason').textContent).toContain(
|
|
51
51
|
'For consideration of Grommets',
|
|
52
52
|
);
|
|
@@ -48,7 +48,7 @@ describe('should render ResearchStudy component properly', () => {
|
|
|
48
48
|
|
|
49
49
|
expect(title).toEqual('Example study');
|
|
50
50
|
expect(status).toEqual('completed');
|
|
51
|
-
expect(period).toEqual('2015
|
|
51
|
+
expect(period).toEqual('2/1/2015 - 2/21/2015');
|
|
52
52
|
expect(category).toEqual('Gene expression (GENE)');
|
|
53
53
|
expect(focus).toEqual('Prostate cancer (PRC)');
|
|
54
54
|
expect(protocol).toEqual('PlanDefinition/pdf1');
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Root, Title } from '../../ui';
|
|
2
|
+
import HeaderIcon from '../../datatypes/HeaderIcon';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
5
|
+
|
|
6
|
+
const ResourceCategory = props => {
|
|
7
|
+
const { title, itemsCount, fhirIcons } = props;
|
|
8
|
+
|
|
9
|
+
const parseNumber = value =>
|
|
10
|
+
/^[1-9]+\d*$/.test(value) ? Number.parseInt(value) : null;
|
|
11
|
+
|
|
12
|
+
const getItemsCountLabel = () =>
|
|
13
|
+
`${parsedItemsCount} ${parsedItemsCount === 1 ? 'item' : 'items'}`;
|
|
14
|
+
|
|
15
|
+
const headerIcon = fhirIcons && fhirIcons['ResourceCategory'];
|
|
16
|
+
const parsedItemsCount = parseNumber(itemsCount);
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<Root name="ResourceCategory">
|
|
20
|
+
<button
|
|
21
|
+
type="button"
|
|
22
|
+
className="btn d-flex align-items-center justify-content-between w-100 py-4 px-4 bg-white"
|
|
23
|
+
>
|
|
24
|
+
<div className="d-flex gap-2">
|
|
25
|
+
<HeaderIcon headerIcon={headerIcon} />
|
|
26
|
+
<Title data-testid="title">{title}</Title>
|
|
27
|
+
</div>
|
|
28
|
+
<div className="d-flex gap-2 align-items-center">
|
|
29
|
+
{parsedItemsCount > 0 && (
|
|
30
|
+
<div
|
|
31
|
+
className="d-flex rounded-pill py-1 px-2 bg-gray-200"
|
|
32
|
+
data-testid="itemsCount"
|
|
33
|
+
>
|
|
34
|
+
<small className="fw-bold text-nowrap ">
|
|
35
|
+
{getItemsCountLabel()}
|
|
36
|
+
</small>
|
|
37
|
+
</div>
|
|
38
|
+
)}
|
|
39
|
+
<img
|
|
40
|
+
src={require('../../../assets/common/chevron-right.svg')}
|
|
41
|
+
alt="chevron"
|
|
42
|
+
style={{ height: 28, width: 28 }}
|
|
43
|
+
/>
|
|
44
|
+
</div>
|
|
45
|
+
</button>
|
|
46
|
+
</Root>
|
|
47
|
+
);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
ResourceCategory.propTypes = {
|
|
51
|
+
title: PropTypes.string.isRequired,
|
|
52
|
+
itemsCount: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export default ResourceCategory;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ResourceCategory from './ResourceCategory';
|
|
3
|
+
import fhirIcons from '../../../fixtures/example-icons';
|
|
4
|
+
|
|
5
|
+
export default { title: 'ResourceCategory' };
|
|
6
|
+
|
|
7
|
+
export const ExampleWithAllProperties = () => {
|
|
8
|
+
return (
|
|
9
|
+
<ResourceCategory
|
|
10
|
+
itemsCount={41}
|
|
11
|
+
title="Resource name"
|
|
12
|
+
fhirIcons={fhirIcons}
|
|
13
|
+
/>
|
|
14
|
+
);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const ExampleWith1Item = () => {
|
|
18
|
+
return (
|
|
19
|
+
<ResourceCategory
|
|
20
|
+
itemsCount={'1'}
|
|
21
|
+
title="Resource name"
|
|
22
|
+
fhirIcons={fhirIcons}
|
|
23
|
+
/>
|
|
24
|
+
);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const ExampleWithoutItemsCount = () => {
|
|
28
|
+
return <ResourceCategory title="Resource name" fhirIcons={fhirIcons} />;
|
|
29
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render } from '@testing-library/react';
|
|
3
|
+
|
|
4
|
+
import fhirIcons from '../../../fixtures/example-icons';
|
|
5
|
+
import ResourceCategory from './ResourceCategory';
|
|
6
|
+
|
|
7
|
+
describe('should render ResourceCategory component properly', () => {
|
|
8
|
+
const placeholderResource = fhirIcons['ResourceCategory'].props;
|
|
9
|
+
|
|
10
|
+
it('should render ResourceCategory component with icon and itemsCount > 1 correctly', () => {
|
|
11
|
+
const defaultProps = {
|
|
12
|
+
fhirIcons: fhirIcons,
|
|
13
|
+
itemsCount: '41',
|
|
14
|
+
title: 'Resource name',
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const { container, getByTestId, getByAltText } = render(
|
|
18
|
+
<ResourceCategory {...defaultProps} />,
|
|
19
|
+
);
|
|
20
|
+
expect(container).not.toBeNull();
|
|
21
|
+
|
|
22
|
+
expect(getByTestId('itemsCount').textContent).toContain('41 items');
|
|
23
|
+
expect(getByTestId('title').textContent).toContain('Resource name');
|
|
24
|
+
const image = getByAltText(placeholderResource.alt);
|
|
25
|
+
expect(image.src).toContain(placeholderResource.src);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('should render ResourceCategory component with icon and itemsCount === 1 correctly', () => {
|
|
29
|
+
const defaultProps = {
|
|
30
|
+
fhirIcons: fhirIcons,
|
|
31
|
+
itemsCount: 1,
|
|
32
|
+
title: 'Resource name',
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const { container, getByTestId, getByAltText } = render(
|
|
36
|
+
<ResourceCategory {...defaultProps} />,
|
|
37
|
+
);
|
|
38
|
+
expect(container).not.toBeNull();
|
|
39
|
+
|
|
40
|
+
expect(getByTestId('itemsCount').textContent).toContain('1 item');
|
|
41
|
+
expect(getByTestId('title').textContent).toContain('Resource name');
|
|
42
|
+
const image = getByAltText(placeholderResource.alt);
|
|
43
|
+
expect(image.src).toContain(placeholderResource.src);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('should render ResourceCategory correctly with negative number passed as itemsCount', () => {
|
|
47
|
+
const defaultProps = {
|
|
48
|
+
fhirIcons: fhirIcons,
|
|
49
|
+
itemsCount: -1,
|
|
50
|
+
title: 'Resource name',
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const { container, getByTestId, getByAltText, queryByTestId } = render(
|
|
54
|
+
<ResourceCategory {...defaultProps} />,
|
|
55
|
+
);
|
|
56
|
+
expect(container).not.toBeNull();
|
|
57
|
+
|
|
58
|
+
const item = queryByTestId('itemsCount');
|
|
59
|
+
expect(item).toBeNull();
|
|
60
|
+
expect(getByTestId('title').textContent).toContain('Resource name');
|
|
61
|
+
const image = getByAltText(placeholderResource.alt);
|
|
62
|
+
expect(image.src).toContain(placeholderResource.src);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('should render ResourceCategory correctly with invalid string passed as itemsCount', () => {
|
|
66
|
+
const defaultProps = {
|
|
67
|
+
fhirIcons: fhirIcons,
|
|
68
|
+
itemsCount: 'asdf1',
|
|
69
|
+
title: 'Resource name',
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const { container, getByTestId, getByAltText, queryByTestId } = render(
|
|
73
|
+
<ResourceCategory {...defaultProps} />,
|
|
74
|
+
);
|
|
75
|
+
expect(container).not.toBeNull();
|
|
76
|
+
const item = queryByTestId('itemsCount');
|
|
77
|
+
expect(item).toBeNull();
|
|
78
|
+
expect(getByTestId('title').textContent).toContain('Resource name');
|
|
79
|
+
const image = getByAltText(placeholderResource.alt);
|
|
80
|
+
expect(image.src).toContain(placeholderResource.src);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('should render ResourceCategory correctly with floating point number passed as text in itemsCount', () => {
|
|
84
|
+
const defaultProps = {
|
|
85
|
+
fhirIcons: fhirIcons,
|
|
86
|
+
itemsCount: '0.5',
|
|
87
|
+
title: 'Resource name',
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const { container, getByTestId, getByAltText, queryByTestId } = render(
|
|
91
|
+
<ResourceCategory {...defaultProps} />,
|
|
92
|
+
);
|
|
93
|
+
expect(container).not.toBeNull();
|
|
94
|
+
|
|
95
|
+
const item = queryByTestId('itemsCount');
|
|
96
|
+
expect(item).toBeNull();
|
|
97
|
+
expect(getByTestId('title').textContent).toContain('Resource name');
|
|
98
|
+
const image = getByAltText(placeholderResource.alt);
|
|
99
|
+
expect(image.src).toContain(placeholderResource.src);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
@@ -37,6 +37,7 @@ import Questionnaire from './resources/Questionnaire';
|
|
|
37
37
|
import QuestionnaireResponse from './resources/QuestionnaireResponse';
|
|
38
38
|
import ReferralRequest from './resources/ReferralRequest';
|
|
39
39
|
import ResearchStudy from './resources/ResearchStudy';
|
|
40
|
+
import ResourceCategory from './resources/ResourceCategory';
|
|
40
41
|
|
|
41
42
|
export {
|
|
42
43
|
Appointment,
|
|
@@ -78,4 +79,5 @@ export {
|
|
|
78
79
|
QuestionnaireResponse,
|
|
79
80
|
ReferralRequest,
|
|
80
81
|
ResearchStudy,
|
|
82
|
+
ResourceCategory,
|
|
81
83
|
};
|
|
@@ -14,23 +14,9 @@
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
.fhir-resource {
|
|
17
|
-
font-family:
|
|
18
|
-
-apple-system,
|
|
19
|
-
BlinkMacSystemFont,
|
|
20
|
-
'Segoe UI',
|
|
21
|
-
Roboto,
|
|
22
|
-
'Helvetica Neue',
|
|
23
|
-
Arial,
|
|
24
|
-
'Noto Sans',
|
|
25
|
-
sans-serif,
|
|
26
|
-
'Apple Color Emoji',
|
|
27
|
-
'Segoe UI Emoji',
|
|
28
|
-
'Segoe UI Symbol',
|
|
29
|
-
'Noto Color Emoji';
|
|
30
17
|
font-size: 1rem;
|
|
31
18
|
font-weight: 400;
|
|
32
19
|
line-height: 1.5;
|
|
33
|
-
color: #212529;
|
|
34
20
|
background-color: #fff;
|
|
35
21
|
-webkit-text-size-adjust: 100%;
|
|
36
22
|
-webkit-tap-highlight-color: transparent;
|
|
@@ -187,14 +173,8 @@ sup {
|
|
|
187
173
|
.fhir-resource kbd,
|
|
188
174
|
.fhir-resource pre,
|
|
189
175
|
.fhir-resource samp {
|
|
190
|
-
font-family:
|
|
191
|
-
|
|
192
|
-
Menlo,
|
|
193
|
-
Monaco,
|
|
194
|
-
Consolas,
|
|
195
|
-
'Liberation Mono',
|
|
196
|
-
'Courier New',
|
|
197
|
-
monospace;
|
|
176
|
+
font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono',
|
|
177
|
+
'Courier New', monospace;
|
|
198
178
|
font-size: 1em;
|
|
199
179
|
}
|
|
200
180
|
|