sos-portal-components-react 0.3.4 → 0.5.0
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/CHANGELOG.md +180 -145
- package/README.md +255 -233
- package/dist/PortalCurrentSubject.d.ts +29 -0
- package/dist/PortalCurrentSubject.d.ts.map +1 -0
- package/dist/PortalCurrentSubject.js +62 -0
- package/dist/PortalCurrentSubject.js.map +1 -0
- package/dist/PortalHeader.d.ts +10 -0
- package/dist/PortalHeader.d.ts.map +1 -0
- package/dist/PortalHeader.js +11 -0
- package/dist/PortalHeader.js.map +1 -0
- package/dist/PortalSettingsPanel.d.ts +8 -0
- package/dist/PortalSettingsPanel.d.ts.map +1 -0
- package/dist/PortalSettingsPanel.js +10 -0
- package/dist/PortalSettingsPanel.js.map +1 -0
- package/dist/care/AnimalCardArtifact.d.ts +42 -0
- package/dist/care/AnimalCardArtifact.d.ts.map +1 -0
- package/dist/care/AnimalCardArtifact.js +32 -0
- package/dist/care/AnimalCardArtifact.js.map +1 -0
- package/dist/care/BrowserRealtimeCallPanel.d.ts +39 -0
- package/dist/care/BrowserRealtimeCallPanel.d.ts.map +1 -0
- package/dist/care/BrowserRealtimeCallPanel.js +43 -0
- package/dist/care/BrowserRealtimeCallPanel.js.map +1 -0
- package/dist/care/CardPreview.d.ts +6 -0
- package/dist/care/CardPreview.d.ts.map +1 -0
- package/dist/care/CardPreview.js +6 -0
- package/dist/care/CardPreview.js.map +1 -0
- package/dist/care/CommunicationsWorkspace.d.ts +18 -0
- package/dist/care/CommunicationsWorkspace.d.ts.map +1 -0
- package/dist/care/CommunicationsWorkspace.js +13 -0
- package/dist/care/CommunicationsWorkspace.js.map +1 -0
- package/dist/care/EmergencyTaskHub.d.ts +27 -0
- package/dist/care/EmergencyTaskHub.d.ts.map +1 -0
- package/dist/care/EmergencyTaskHub.js +25 -0
- package/dist/care/EmergencyTaskHub.js.map +1 -0
- package/dist/care/LegalMarkdownDocument.d.ts +6 -0
- package/dist/care/LegalMarkdownDocument.d.ts.map +1 -0
- package/dist/care/LegalMarkdownDocument.js +57 -0
- package/dist/care/LegalMarkdownDocument.js.map +1 -0
- package/dist/care/NotificationComposer.d.ts +49 -0
- package/dist/care/NotificationComposer.d.ts.map +1 -0
- package/dist/care/NotificationComposer.js +83 -0
- package/dist/care/NotificationComposer.js.map +1 -0
- package/dist/care/ProtectedIndexEmergencyData.d.ts +32 -0
- package/dist/care/ProtectedIndexEmergencyData.d.ts.map +1 -0
- package/dist/care/ProtectedIndexEmergencyData.js +13 -0
- package/dist/care/ProtectedIndexEmergencyData.js.map +1 -0
- package/dist/care/SelectedSubjectWorkspace.d.ts +32 -0
- package/dist/care/SelectedSubjectWorkspace.d.ts.map +1 -0
- package/dist/care/SelectedSubjectWorkspace.js +32 -0
- package/dist/care/SelectedSubjectWorkspace.js.map +1 -0
- package/dist/care/SoschainWorkspace.d.ts +119 -0
- package/dist/care/SoschainWorkspace.d.ts.map +1 -0
- package/dist/care/SoschainWorkspace.js +61 -0
- package/dist/care/SoschainWorkspace.js.map +1 -0
- package/dist/care/SubjectCommunicationCenter.d.ts +45 -0
- package/dist/care/SubjectCommunicationCenter.d.ts.map +1 -0
- package/dist/care/SubjectCommunicationCenter.js +40 -0
- package/dist/care/SubjectCommunicationCenter.js.map +1 -0
- package/dist/care/SubjectDemographicsFields.d.ts +42 -0
- package/dist/care/SubjectDemographicsFields.d.ts.map +1 -0
- package/dist/care/SubjectDemographicsFields.js +71 -0
- package/dist/care/SubjectDemographicsFields.js.map +1 -0
- package/dist/care/SubjectSectionIndex.d.ts +22 -0
- package/dist/care/SubjectSectionIndex.d.ts.map +1 -0
- package/dist/care/SubjectSectionIndex.js +34 -0
- package/dist/care/SubjectSectionIndex.js.map +1 -0
- package/dist/care/SubjectWorkspace.d.ts +29 -0
- package/dist/care/SubjectWorkspace.d.ts.map +1 -0
- package/dist/care/SubjectWorkspace.js +59 -0
- package/dist/care/SubjectWorkspace.js.map +1 -0
- package/dist/care/care.css +215 -0
- package/dist/care/index.d.ts +16 -0
- package/dist/care/index.d.ts.map +1 -0
- package/dist/care/index.js +16 -0
- package/dist/care/index.js.map +1 -0
- package/dist/care/notification-bff-client.d.ts +44 -0
- package/dist/care/notification-bff-client.d.ts.map +1 -0
- package/dist/care/notification-bff-client.js +89 -0
- package/dist/care/notification-bff-client.js.map +1 -0
- package/dist/clinical/BrowserClinicalSpeechInput.d.ts +25 -0
- package/dist/clinical/BrowserClinicalSpeechInput.d.ts.map +1 -0
- package/dist/clinical/BrowserClinicalSpeechInput.js +32 -0
- package/dist/clinical/BrowserClinicalSpeechInput.js.map +1 -0
- package/dist/clinical/ClinicalActionButton.d.ts +9 -0
- package/dist/clinical/ClinicalActionButton.d.ts.map +1 -0
- package/dist/clinical/ClinicalActionButton.js +13 -0
- package/dist/clinical/ClinicalActionButton.js.map +1 -0
- package/dist/clinical/ClinicalArtifactEditor.d.ts +147 -0
- package/dist/clinical/ClinicalArtifactEditor.d.ts.map +1 -0
- package/dist/clinical/ClinicalArtifactEditor.js +382 -0
- package/dist/clinical/ClinicalArtifactEditor.js.map +1 -0
- package/dist/clinical/ClinicalArtifactEditorV2.d.ts +77 -0
- package/dist/clinical/ClinicalArtifactEditorV2.d.ts.map +1 -0
- package/dist/clinical/ClinicalArtifactEditorV2.js +89 -0
- package/dist/clinical/ClinicalArtifactEditorV2.js.map +1 -0
- package/dist/clinical/ClinicalArtifactPropertiesV2.d.ts +83 -0
- package/dist/clinical/ClinicalArtifactPropertiesV2.d.ts.map +1 -0
- package/dist/clinical/ClinicalArtifactPropertiesV2.js +46 -0
- package/dist/clinical/ClinicalArtifactPropertiesV2.js.map +1 -0
- package/dist/clinical/ClinicalBundleDraftEditor.d.ts +99 -0
- package/dist/clinical/ClinicalBundleDraftEditor.d.ts.map +1 -0
- package/dist/clinical/ClinicalBundleDraftEditor.js +225 -0
- package/dist/clinical/ClinicalBundleDraftEditor.js.map +1 -0
- package/dist/clinical/ClinicalEditorLayer.d.ts +8 -0
- package/dist/clinical/ClinicalEditorLayer.d.ts.map +1 -0
- package/dist/clinical/ClinicalEditorLayer.js +12 -0
- package/dist/clinical/ClinicalEditorLayer.js.map +1 -0
- package/dist/clinical/ClinicalSectionSummary.d.ts +36 -0
- package/dist/clinical/ClinicalSectionSummary.d.ts.map +1 -0
- package/dist/clinical/ClinicalSectionSummary.js +24 -0
- package/dist/clinical/ClinicalSectionSummary.js.map +1 -0
- package/dist/clinical/ClinicalSpeechInput.d.ts +58 -0
- package/dist/clinical/ClinicalSpeechInput.d.ts.map +1 -0
- package/dist/clinical/ClinicalSpeechInput.js +84 -0
- package/dist/clinical/ClinicalSpeechInput.js.map +1 -0
- package/dist/clinical/ClinicalTimeline.d.ts +52 -0
- package/dist/clinical/ClinicalTimeline.d.ts.map +1 -0
- package/dist/clinical/ClinicalTimeline.js +48 -0
- package/dist/clinical/ClinicalTimeline.js.map +1 -0
- package/dist/clinical/ImmunizationArtifactEditorV2.d.ts +15 -0
- package/dist/clinical/ImmunizationArtifactEditorV2.d.ts.map +1 -0
- package/dist/clinical/ImmunizationArtifactEditorV2.js +62 -0
- package/dist/clinical/ImmunizationArtifactEditorV2.js.map +1 -0
- package/dist/clinical/IpsBundleSummary.d.ts +34 -0
- package/dist/clinical/IpsBundleSummary.d.ts.map +1 -0
- package/dist/clinical/IpsBundleSummary.js +75 -0
- package/dist/clinical/IpsBundleSummary.js.map +1 -0
- package/dist/clinical/SchemaClinicalArtifactEditorV2.d.ts +11 -0
- package/dist/clinical/SchemaClinicalArtifactEditorV2.d.ts.map +1 -0
- package/dist/clinical/SchemaClinicalArtifactEditorV2.js +62 -0
- package/dist/clinical/SchemaClinicalArtifactEditorV2.js.map +1 -0
- package/dist/clinical/clinical.css +148 -0
- package/dist/clinical/index.d.ts +14 -0
- package/dist/clinical/index.d.ts.map +1 -0
- package/dist/clinical/index.js +14 -0
- package/dist/clinical/index.js.map +1 -0
- package/dist/encounter-journey.css +91 -91
- package/dist/identity/AnimalIdentityDetailsV2.d.ts +43 -0
- package/dist/identity/AnimalIdentityDetailsV2.d.ts.map +1 -0
- package/dist/identity/AnimalIdentityDetailsV2.js +9 -0
- package/dist/identity/AnimalIdentityDetailsV2.js.map +1 -0
- package/dist/identity/AnimalIdentityOnboarding.d.ts +91 -0
- package/dist/identity/AnimalIdentityOnboarding.d.ts.map +1 -0
- package/dist/identity/AnimalIdentityOnboarding.js +73 -0
- package/dist/identity/AnimalIdentityOnboarding.js.map +1 -0
- package/dist/identity/AnimalIdentityOnboardingV2.d.ts +56 -0
- package/dist/identity/AnimalIdentityOnboardingV2.d.ts.map +1 -0
- package/dist/identity/AnimalIdentityOnboardingV2.js +174 -0
- package/dist/identity/AnimalIdentityOnboardingV2.js.map +1 -0
- package/dist/identity/current-subject.css +11 -0
- package/dist/identity/identity.css +64 -0
- package/dist/identity/index.d.ts +9 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +10 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/preferences.d.ts +12 -0
- package/dist/preferences.d.ts.map +1 -0
- package/dist/preferences.js +57 -0
- package/dist/preferences.js.map +1 -0
- package/dist/styles.css +24 -0
- package/dist/usePortalUiPreferences.d.ts +9 -0
- package/dist/usePortalUiPreferences.d.ts.map +1 -0
- package/dist/usePortalUiPreferences.js +39 -0
- package/dist/usePortalUiPreferences.js.map +1 -0
- package/package.json +127 -110
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { clinicalArtifactEditorClaimsFromFhirR4, clinicalArtifactFhirR4ToFlat, clinicalArtifactCodedOptionsForClaim, composeFhirDateTimeFromLocalParts, splitFhirDateTimeForInput, } from 'fhir-data-utils-ts';
|
|
5
|
+
import { buildMultichannelOperationBundle, MultichannelOperationMode, readMultichannelOperationFromBundle, selectMultichannelOperationClaimValues, } from 'sos-data-utils-ts/multichannel-operation-schemas';
|
|
6
|
+
import { ClinicalEditorLayer } from './ClinicalEditorLayer.js';
|
|
7
|
+
import { ClinicalSpeechInputButton } from './ClinicalSpeechInput.js';
|
|
8
|
+
/**
|
|
9
|
+
* Shared human/animal clinical editor. The host owns authorization, transport,
|
|
10
|
+
* persistence and terminology service access. A successful form submission is
|
|
11
|
+
* published only after the host returns a fresh provider readback Bundle.
|
|
12
|
+
*/
|
|
13
|
+
/** @deprecated Use ClinicalBundleDraftEditorV2 for every new clinical authoring flow. */
|
|
14
|
+
export function ClinicalArtifactEditor({ request, schema, operationSchema, authoringContext, copy, locale = 'en', timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone, taxonomyId, fieldLabel, resourceTypeLabel, searchTerminology, loadTerminologySources, saveArtifact, onCancel, onReadback, }) {
|
|
15
|
+
const titleId = useId();
|
|
16
|
+
const descriptionId = useId();
|
|
17
|
+
const acceptedClaims = useMemo(() => operationSchema
|
|
18
|
+
? Object.keys(operationSchema.properties.claims?.properties ?? {})
|
|
19
|
+
: [...schema.requiredClaims, ...schema.optionalClaims], [operationSchema, schema.optionalClaims, schema.requiredClaims]);
|
|
20
|
+
const fields = useMemo(() => acceptedClaims
|
|
21
|
+
.filter((claim) => !claim.endsWith('.section') && !claim.endsWith('.user-selected'))
|
|
22
|
+
.filter((claim) => !isHiddenCodingCompanion(request.resourceType, claim, acceptedClaims)), [acceptedClaims, request.resourceType]);
|
|
23
|
+
const requiredClaims = useMemo(() => new Set(operationSchema?.properties.claims?.required ?? schema.requiredClaims), [operationSchema, schema.requiredClaims]);
|
|
24
|
+
const [claims, setClaims] = useState(() => {
|
|
25
|
+
const operationId = operationSchema?.['x-operation-id'];
|
|
26
|
+
const initialBundleClaims = request.initialBundle && operationId
|
|
27
|
+
? readMultichannelOperationFromBundle(operationId, request.initialBundle, {
|
|
28
|
+
operation: request.mode === 'update' ? MultichannelOperationMode.Update : MultichannelOperationMode.Create,
|
|
29
|
+
...(request.artifactId === undefined ? {} : { resourceId: request.artifactId }),
|
|
30
|
+
...(request.ifMatch === undefined ? {} : { ifMatch: request.ifMatch }),
|
|
31
|
+
}).claims
|
|
32
|
+
: {};
|
|
33
|
+
const initialResourceClaims = request.initialResource
|
|
34
|
+
? operationId
|
|
35
|
+
? selectMultichannelOperationClaimValues(operationId, clinicalArtifactFhirR4ToFlat(request.initialResource))
|
|
36
|
+
: clinicalArtifactEditorClaimsFromFhirR4(request.initialResource, {
|
|
37
|
+
resourceType: request.resourceType,
|
|
38
|
+
sectionCode: schema.sectionCode ?? request.sectionCode,
|
|
39
|
+
requiredClaims: schema.requiredClaims,
|
|
40
|
+
optionalClaims: schema.optionalClaims,
|
|
41
|
+
terminologyTextClaims: schema.terminologyTextClaims ?? [],
|
|
42
|
+
initialClaims: schema.initialClaims ?? defaultClaims(request.resourceType),
|
|
43
|
+
})
|
|
44
|
+
: {};
|
|
45
|
+
return {
|
|
46
|
+
...(operationSchema ? jsonSchemaDefaultClaims(operationSchema) : defaultClaims(request.resourceType)),
|
|
47
|
+
...schema.initialClaims,
|
|
48
|
+
...stringClaims(initialBundleClaims),
|
|
49
|
+
...stringClaims(initialResourceClaims),
|
|
50
|
+
...Object.fromEntries(Object.entries(request.initialClaims ?? {}).map(([claim, value]) => [claim, String(value ?? '')])),
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
const [activeTerminologyClaim, setActiveTerminologyClaim] = useState();
|
|
54
|
+
const [candidates, setCandidates] = useState([]);
|
|
55
|
+
const [terminologyBusy, setTerminologyBusy] = useState(false);
|
|
56
|
+
const [terminologyError, setTerminologyError] = useState(false);
|
|
57
|
+
const [terminologySources, setTerminologySources] = useState([]);
|
|
58
|
+
const [selectedTerminologySources, setSelectedTerminologySources] = useState([]);
|
|
59
|
+
const [terminologySourcesClaim, setTerminologySourcesClaim] = useState('');
|
|
60
|
+
const [saving, setSaving] = useState(false);
|
|
61
|
+
const [attachments, setAttachments] = useState(request.initialAttachments ?? []);
|
|
62
|
+
const [error, setError] = useState('');
|
|
63
|
+
const [pending, setPending] = useState('');
|
|
64
|
+
const draftId = useRef(request.artifactId ?? crypto.randomUUID());
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (!activeTerminologyClaim || !loadTerminologySources)
|
|
67
|
+
return;
|
|
68
|
+
const codeClaim = terminologyCodeClaim(request.resourceType, activeTerminologyClaim);
|
|
69
|
+
let current = true;
|
|
70
|
+
setTerminologySourcesClaim('');
|
|
71
|
+
void loadTerminologySources({ resourceType: request.resourceType, claim: codeClaim, language: locale, ...(taxonomyId === undefined ? {} : { taxonomyId }) }).then((sources) => {
|
|
72
|
+
if (!current)
|
|
73
|
+
return;
|
|
74
|
+
setTerminologySources(sources);
|
|
75
|
+
const defaults = sources.filter(source => source.default).map(source => source.id);
|
|
76
|
+
setSelectedTerminologySources(defaults.length ? defaults : sources[0] ? [sources[0].id] : []);
|
|
77
|
+
setTerminologySourcesClaim(activeTerminologyClaim);
|
|
78
|
+
}).catch(() => {
|
|
79
|
+
if (current) {
|
|
80
|
+
setTerminologySources([]);
|
|
81
|
+
setSelectedTerminologySources([]);
|
|
82
|
+
setTerminologySourcesClaim(activeTerminologyClaim);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
return () => { current = false; };
|
|
86
|
+
}, [activeTerminologyClaim, loadTerminologySources, locale, request.resourceType, taxonomyId]);
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
if (!activeTerminologyClaim || !searchTerminology)
|
|
89
|
+
return;
|
|
90
|
+
if (loadTerminologySources && terminologySourcesClaim !== activeTerminologyClaim)
|
|
91
|
+
return;
|
|
92
|
+
const sourceText = claims[activeTerminologyClaim]?.trim() ?? '';
|
|
93
|
+
if (sourceText.length < 2) {
|
|
94
|
+
setCandidates([]);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const codeClaim = terminologyCodeClaim(request.resourceType, activeTerminologyClaim);
|
|
98
|
+
let current = true;
|
|
99
|
+
setTerminologyBusy(true);
|
|
100
|
+
setTerminologyError(false);
|
|
101
|
+
const timer = window.setTimeout(() => {
|
|
102
|
+
void searchTerminology({
|
|
103
|
+
resourceType: request.resourceType,
|
|
104
|
+
claim: codeClaim,
|
|
105
|
+
language: locale,
|
|
106
|
+
text: sourceText,
|
|
107
|
+
...(taxonomyId === undefined ? {} : { taxonomyId }),
|
|
108
|
+
limit: 20,
|
|
109
|
+
...(selectedTerminologySources.length ? { sources: selectedTerminologySources } : {}),
|
|
110
|
+
}).then((nextCandidates) => {
|
|
111
|
+
if (current)
|
|
112
|
+
setCandidates(nextCandidates);
|
|
113
|
+
}).catch(() => {
|
|
114
|
+
if (current) {
|
|
115
|
+
setCandidates([]);
|
|
116
|
+
setTerminologyError(true);
|
|
117
|
+
}
|
|
118
|
+
}).finally(() => {
|
|
119
|
+
if (current)
|
|
120
|
+
setTerminologyBusy(false);
|
|
121
|
+
});
|
|
122
|
+
}, 250);
|
|
123
|
+
return () => { current = false; window.clearTimeout(timer); };
|
|
124
|
+
}, [activeTerminologyClaim, claims, loadTerminologySources, locale, request.resourceType, searchTerminology, selectedTerminologySources, taxonomyId, terminologySourcesClaim]);
|
|
125
|
+
async function submit() {
|
|
126
|
+
setSaving(true);
|
|
127
|
+
setError('');
|
|
128
|
+
try {
|
|
129
|
+
const result = await saveArtifact({
|
|
130
|
+
resourceType: request.resourceType,
|
|
131
|
+
id: draftId.current,
|
|
132
|
+
sectionCode: request.sectionCode,
|
|
133
|
+
mode: request.mode,
|
|
134
|
+
claims,
|
|
135
|
+
attachments,
|
|
136
|
+
...(operationSchema ? buildOperationDraft(operationSchema, authoringContext, request, draftId.current, claims) : {}),
|
|
137
|
+
});
|
|
138
|
+
if (!result)
|
|
139
|
+
throw new Error(copy.readbackMissing);
|
|
140
|
+
if (isSaveOutcome(result)) {
|
|
141
|
+
if (result.state === 'confirmed') {
|
|
142
|
+
setPending('');
|
|
143
|
+
onReadback(result.bundle);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (result.state === 'rejected')
|
|
147
|
+
throw new Error(result.message);
|
|
148
|
+
setPending(result.message || copy.pending || copy.readbackMissing);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
setPending('');
|
|
152
|
+
onReadback(result);
|
|
153
|
+
}
|
|
154
|
+
catch (reason) {
|
|
155
|
+
setError(reason instanceof Error ? reason.message : String(reason));
|
|
156
|
+
}
|
|
157
|
+
finally {
|
|
158
|
+
setSaving(false);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function toggleTerminologySource(sourceId, selected) {
|
|
162
|
+
setSelectedTerminologySources(current => {
|
|
163
|
+
const next = selected ? [...new Set([...current, sourceId])] : current.filter(candidate => candidate !== sourceId);
|
|
164
|
+
return next.length ? next : current;
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return _jsx(ClinicalEditorLayer, { onDismiss: onCancel, children: _jsxs("section", { className: "uhcp-clinical-editor", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": descriptionId, children: [_jsxs("header", { children: [_jsxs("div", { children: [_jsx("h2", { id: titleId, children: copy.title }), _jsxs("p", { className: "uhcp-clinical-editor-resource-type", children: [copy.resourceType || 'FHIR resource', ": ", resourceTypeLabel || request.resourceType] }), _jsx("p", { id: descriptionId, children: copy.description })] }), _jsx("button", { type: "button", onClick: onCancel, "aria-label": copy.close, children: "\u00D7" })] }), _jsxs("form", { onSubmit: (event) => { event.preventDefault(); void submit(); }, children: [fields.map((claim) => {
|
|
168
|
+
const parameter = claim.slice(request.resourceType.length + 1);
|
|
169
|
+
const label = fieldLabel(claim);
|
|
170
|
+
const terminologyEnabled = Boolean(searchTerminology && terminologyCodeClaim(request.resourceType, claim));
|
|
171
|
+
const inputId = `${titleId}-${claim}`;
|
|
172
|
+
const value = claims[claim] ?? '';
|
|
173
|
+
const codedOptions = clinicalArtifactCodedOptionsForClaim(claim, locale);
|
|
174
|
+
const schemaNode = operationSchema?.properties.claims?.properties?.[claim];
|
|
175
|
+
const update = (event) => {
|
|
176
|
+
setClaims((current) => ({ ...current, [claim]: event.target.value }));
|
|
177
|
+
if (terminologyEnabled)
|
|
178
|
+
setActiveTerminologyClaim(claim);
|
|
179
|
+
};
|
|
180
|
+
if (isDateTimeSchemaNode(schemaNode))
|
|
181
|
+
return _jsx(ClinicalDateTimeClaimField, { label: label, required: requiredClaims.has(claim), value: value, timeZone: timeZone, labels: copy.dateTime ?? DEFAULT_DATE_TIME_LABELS, onChange: (nextValue) => setClaims((current) => ({ ...current, [claim]: nextValue })) }, claim);
|
|
182
|
+
const fieldClassName = `uhcp-clinical-editor-field${isMultiline(parameter) ? ' uhcp-clinical-editor-wide' : ''}`;
|
|
183
|
+
const appendTranscript = (transcript) => {
|
|
184
|
+
setClaims((current) => ({
|
|
185
|
+
...current,
|
|
186
|
+
[claim]: [current[claim]?.trim(), transcript].filter(Boolean).join(' '),
|
|
187
|
+
}));
|
|
188
|
+
if (terminologyEnabled)
|
|
189
|
+
setActiveTerminologyClaim(claim);
|
|
190
|
+
};
|
|
191
|
+
return _jsxs("div", { className: fieldClassName, children: [_jsxs("span", { className: "uhcp-clinical-editor-field-heading", children: [_jsxs("label", { htmlFor: inputId, children: [label, requiredClaims.has(claim) ? ' *' : ''] }), isSpeechCompatibleField(parameter, schemaNode, codedOptions.length > 0) ? _jsx(ClinicalSpeechInputButton, { resourceType: request.resourceType, claim: claim, locale: locale, fieldLabel: label, onTranscript: appendTranscript }) : null] }), codedOptions.length ? _jsxs("select", { id: inputId, "aria-label": label, value: value, required: requiredClaims.has(claim), onChange: update, children: [!requiredClaims.has(claim) ? _jsx("option", { value: "" }) : null, codedOptions.map((option) => _jsx("option", { value: option.code, children: option.label }, option.code))] }) : isMultiline(parameter) ? _jsx("textarea", { id: inputId, "aria-label": label, value: value, required: requiredClaims.has(claim), rows: 3, onChange: update })
|
|
192
|
+
: _jsx("input", { id: inputId, "aria-label": label, value: value, required: requiredClaims.has(claim), type: fieldInputType(parameter, operationSchema?.properties.claims?.properties?.[claim]), onChange: update }), terminologyEnabled && activeTerminologyClaim === claim ? _jsxs("div", { className: "uhcp-terminology-results", children: [terminologySources.length ? _jsxs("details", { className: "uhcp-terminology-source-picker", children: [_jsxs("summary", { children: [copy.terminologySources || 'Coding systems', ": ", terminologySources.filter(source => selectedTerminologySources.includes(source.id)).map(source => source.label || source.id).join(', ')] }), _jsxs("fieldset", { "aria-label": copy.terminologySources || 'Coding systems', children: [_jsx("legend", { className: "uhcp-sr-only", children: copy.terminologySources || 'Coding systems' }), terminologySources.map(source => _jsxs("label", { children: [_jsx("input", { type: "checkbox", checked: selectedTerminologySources.includes(source.id), onChange: event => toggleTerminologySource(source.id, event.currentTarget.checked) }), _jsx("span", { children: source.label || source.id })] }, source.id))] })] }) : null, terminologyBusy ? _jsx("small", { role: "status", children: copy.terminologyLoading }) : null, terminologyError ? _jsx("small", { role: "alert", children: copy.terminologyUnavailable }) : null, candidates.length ? _jsx("ul", { children: candidates.map((candidate) => _jsx("li", { children: _jsxs("button", { type: "button", onClick: () => {
|
|
193
|
+
setClaims((current) => selectedCodingClaims(request.resourceType, claim, candidate, acceptedClaims, current));
|
|
194
|
+
setCandidates([]);
|
|
195
|
+
setActiveTerminologyClaim(undefined);
|
|
196
|
+
}, children: [candidate.display, _jsxs("small", { children: [candidate.system, " \u00B7 ", candidate.code] })] }) }, `${candidate.system}|${candidate.code}`)) }) : null] }) : null] }, claim);
|
|
197
|
+
}), _jsxs("fieldset", { className: "uhcp-clinical-editor-attachments", children: [_jsx("legend", { children: copy.attachments || 'Documents' }), _jsxs("label", { children: [_jsx("span", { children: copy.addAttachments || 'Add PDF or image' }), _jsx("input", { type: "file", multiple: true, accept: "application/pdf,image/png,image/jpeg,.pdf,.png,.jpg,.jpeg", "aria-label": copy.addAttachments || 'Add PDF or image', onChange: (event) => {
|
|
198
|
+
const files = [...(event.currentTarget.files ?? [])];
|
|
199
|
+
event.currentTarget.value = '';
|
|
200
|
+
void Promise.all(files.map(readClinicalAttachment)).then((next) => {
|
|
201
|
+
setAttachments((current) => [...current, ...next]);
|
|
202
|
+
}).catch((reason) => setError(reason instanceof Error ? reason.message : String(reason)));
|
|
203
|
+
} })] }), attachments.length ? _jsx("ul", { children: attachments.map((attachment) => _jsxs("li", { children: [_jsx("span", { children: attachment.name }), _jsx("button", { type: "button", "aria-label": `${copy.removeAttachment || 'Remove document'} ${attachment.name}`, onClick: () => setAttachments(current => current.filter(candidate => candidate.id !== attachment.id)), children: "\u00D7" })] }, attachment.id)) }) : null] }), error ? _jsx("p", { className: "uhcp-clinical-editor-error", role: "alert", children: error }) : null, pending ? _jsx("p", { className: "uhcp-clinical-editor-pending", role: "status", children: copy.pending || pending }) : null, _jsxs("footer", { children: [_jsx("button", { type: "button", onClick: onCancel, children: copy.cancel }), _jsx("button", { type: "submit", disabled: saving, children: saving ? copy.saving : pending ? (copy.retry || copy.save) : copy.save })] })] })] }) });
|
|
204
|
+
}
|
|
205
|
+
export async function readClinicalAttachment(file) {
|
|
206
|
+
const contentType = normalizeClinicalAttachmentType(file);
|
|
207
|
+
const bytes = new Uint8Array(await readFileBytes(file));
|
|
208
|
+
const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', bytes));
|
|
209
|
+
return Object.freeze({
|
|
210
|
+
id: crypto.randomUUID(),
|
|
211
|
+
name: file.name,
|
|
212
|
+
contentType,
|
|
213
|
+
contentHash: `sha256:${hex(digest)}`,
|
|
214
|
+
dataBase64: bytesToBase64(bytes),
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
function normalizeClinicalAttachmentType(file) {
|
|
218
|
+
if (file.type === 'application/pdf' || file.type === 'image/png' || file.type === 'image/jpeg')
|
|
219
|
+
return file.type;
|
|
220
|
+
const extension = file.name.toLowerCase().split('.').pop();
|
|
221
|
+
if (extension === 'pdf')
|
|
222
|
+
return 'application/pdf';
|
|
223
|
+
if (extension === 'png')
|
|
224
|
+
return 'image/png';
|
|
225
|
+
if (extension === 'jpg' || extension === 'jpeg')
|
|
226
|
+
return 'image/jpeg';
|
|
227
|
+
throw new TypeError('clinical_attachment_type_unsupported');
|
|
228
|
+
}
|
|
229
|
+
function readFileBytes(file) {
|
|
230
|
+
return new Promise((resolve, reject) => {
|
|
231
|
+
const reader = new FileReader();
|
|
232
|
+
reader.onerror = () => reject(reader.error ?? new Error('clinical_attachment_read_failed'));
|
|
233
|
+
reader.onload = () => reader.result instanceof ArrayBuffer ? resolve(reader.result) : reject(new Error('clinical_attachment_read_failed'));
|
|
234
|
+
reader.readAsArrayBuffer(file);
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
function bytesToBase64(bytes) {
|
|
238
|
+
let binary = '';
|
|
239
|
+
for (let index = 0; index < bytes.length; index += 1)
|
|
240
|
+
binary += String.fromCharCode(bytes[index] ?? 0);
|
|
241
|
+
return btoa(binary);
|
|
242
|
+
}
|
|
243
|
+
function hex(bytes) {
|
|
244
|
+
return [...bytes].map(value => value.toString(16).padStart(2, '0')).join('');
|
|
245
|
+
}
|
|
246
|
+
const DEFAULT_DATE_TIME_LABELS = Object.freeze({
|
|
247
|
+
date: 'Date',
|
|
248
|
+
time: 'Time',
|
|
249
|
+
useToday: 'Use today',
|
|
250
|
+
useCurrentTime: 'Use current time',
|
|
251
|
+
});
|
|
252
|
+
function ClinicalDateTimeClaimField({ label, required, value, timeZone, labels, onChange }) {
|
|
253
|
+
const [parts, setParts] = useState(() => splitTemporalClaim(value, timeZone));
|
|
254
|
+
const current = splitFhirDateTimeForInput(new Date(), timeZone);
|
|
255
|
+
const update = (next) => {
|
|
256
|
+
setParts(next);
|
|
257
|
+
onChange(composeTemporalClaim(next, timeZone));
|
|
258
|
+
};
|
|
259
|
+
return _jsxs("fieldset", { className: "uhcp-clinical-editor-date-time", children: [_jsxs("legend", { children: [label, required ? ' *' : ''] }), _jsxs("label", { children: [_jsx("span", { children: labels.date }), _jsx("input", { "aria-label": `${label}: ${labels.date}`, required: required, type: "date", value: parts.date, onChange: (event) => update({ ...parts, date: event.target.value }) })] }), _jsx("button", { type: "button", title: labels.useToday, "aria-label": `${labels.useToday}: ${label}`, onClick: () => update({ ...parts, date: current.date }), children: "\u25C9" }), _jsxs("label", { children: [_jsx("span", { children: labels.time }), _jsx("input", { "aria-label": `${label}: ${labels.time}`, type: "time", step: "1", value: parts.time, onChange: (event) => update({ ...parts, time: event.target.value }) })] }), _jsx("button", { type: "button", title: labels.useCurrentTime, "aria-label": `${labels.useCurrentTime}: ${label}`, onClick: () => update({ ...parts, time: current.time }), children: "\u25F7" })] });
|
|
260
|
+
}
|
|
261
|
+
function splitTemporalClaim(value, timeZone) {
|
|
262
|
+
if (!value)
|
|
263
|
+
return { date: '', time: '' };
|
|
264
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(value))
|
|
265
|
+
return { date: value, time: '' };
|
|
266
|
+
try {
|
|
267
|
+
return splitFhirDateTimeForInput(value, timeZone);
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
return { date: '', time: '' };
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
function composeTemporalClaim(parts, timeZone) {
|
|
274
|
+
if (!parts.date)
|
|
275
|
+
return '';
|
|
276
|
+
if (!parts.time)
|
|
277
|
+
return parts.date;
|
|
278
|
+
return composeFhirDateTimeFromLocalParts({ ...parts, timeZone });
|
|
279
|
+
}
|
|
280
|
+
function isDateTimeSchemaNode(schemaNode) {
|
|
281
|
+
return schemaNode?.format === 'date-time' || schemaNode?.format === 'fhir-date-time';
|
|
282
|
+
}
|
|
283
|
+
function isSpeechCompatibleField(parameter, schemaNode, hasCodedOptions = false) {
|
|
284
|
+
if (hasCodedOptions)
|
|
285
|
+
return false;
|
|
286
|
+
if (schemaNode?.type === 'number' || schemaNode?.type === 'integer' || schemaNode?.type === 'boolean')
|
|
287
|
+
return false;
|
|
288
|
+
return fieldInputType(parameter, schemaNode) === 'text';
|
|
289
|
+
}
|
|
290
|
+
function isSaveOutcome(value) {
|
|
291
|
+
return typeof value === 'object' && value !== null && 'state' in value;
|
|
292
|
+
}
|
|
293
|
+
function buildOperationDraft(operationSchema, authoringContext, request, resourceId, claims) {
|
|
294
|
+
if (!authoringContext)
|
|
295
|
+
throw new TypeError('clinical_artifact_authoring_context_required');
|
|
296
|
+
const operationId = operationSchema['x-operation-id'];
|
|
297
|
+
const operation = request.mode === 'update' ? MultichannelOperationMode.Update : MultichannelOperationMode.Create;
|
|
298
|
+
const operationValues = {
|
|
299
|
+
operation,
|
|
300
|
+
resourceId,
|
|
301
|
+
...authoringContext,
|
|
302
|
+
...(request.ifMatch ? { ifMatch: request.ifMatch } : {}),
|
|
303
|
+
claims: coerceClaimsFromJsonSchema(operationSchema, claims),
|
|
304
|
+
};
|
|
305
|
+
return Object.freeze({
|
|
306
|
+
operationValues,
|
|
307
|
+
changesBundle: buildMultichannelOperationBundle(operationId, operationValues),
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
function coerceClaimsFromJsonSchema(schema, claims) {
|
|
311
|
+
const properties = schema.properties.claims?.properties ?? {};
|
|
312
|
+
return Object.freeze(Object.fromEntries(Object.entries(claims)
|
|
313
|
+
.filter(([claim, value]) => properties[claim] && value !== '')
|
|
314
|
+
.map(([claim, value]) => [claim, properties[claim]?.type === 'number' ? Number(value) : value])));
|
|
315
|
+
}
|
|
316
|
+
function stringClaims(claims) {
|
|
317
|
+
return Object.fromEntries(Object.entries(claims).map(([claim, value]) => [claim, String(value ?? '')]));
|
|
318
|
+
}
|
|
319
|
+
function jsonSchemaDefaultClaims(schema) {
|
|
320
|
+
return Object.fromEntries(Object.entries(schema.properties.claims?.properties ?? {})
|
|
321
|
+
.filter(([, node]) => node.default !== undefined)
|
|
322
|
+
.map(([claim, node]) => [claim, String(node.default)]));
|
|
323
|
+
}
|
|
324
|
+
function defaultClaims(resourceType) {
|
|
325
|
+
if (resourceType === 'Immunization')
|
|
326
|
+
return { 'Immunization.status': 'completed' };
|
|
327
|
+
if (resourceType === 'Observation' || resourceType === 'DiagnosticReport')
|
|
328
|
+
return { [`${resourceType}.status`]: 'final' };
|
|
329
|
+
if (resourceType === 'Procedure')
|
|
330
|
+
return { [`${resourceType}.status`]: 'completed' };
|
|
331
|
+
if (resourceType === 'Condition' || resourceType === 'AllergyIntolerance')
|
|
332
|
+
return { [`${resourceType}.clinical-status`]: 'active' };
|
|
333
|
+
return {};
|
|
334
|
+
}
|
|
335
|
+
function terminologyCodeClaim(resourceType, inputClaim) {
|
|
336
|
+
const parameter = inputClaim.slice(resourceType.length + 1);
|
|
337
|
+
// `code-text` is the generic primary-concept alias. Immunization deliberately
|
|
338
|
+
// uses `vaccine-code-text` so vaccine product and target disease remain two
|
|
339
|
+
// independent coded concepts throughout editing and FHIR projection.
|
|
340
|
+
if (parameter === 'code-text')
|
|
341
|
+
return `${resourceType}.code`;
|
|
342
|
+
if (parameter.endsWith('-code-text'))
|
|
343
|
+
return `${resourceType}.${parameter.slice(0, -5)}`;
|
|
344
|
+
if (resourceType === 'MedicationStatement' && parameter === 'medication-text')
|
|
345
|
+
return 'MedicationStatement.code';
|
|
346
|
+
if (parameter === 'target-disease' || parameter.endsWith('-code') || parameter === 'code')
|
|
347
|
+
return inputClaim;
|
|
348
|
+
return '';
|
|
349
|
+
}
|
|
350
|
+
function isHiddenCodingCompanion(resourceType, claim, acceptedClaims) {
|
|
351
|
+
if (claim.endsWith('-display') && acceptedClaims.includes(`${claim.slice(0, -8)}-text`))
|
|
352
|
+
return true;
|
|
353
|
+
if (acceptedClaims.includes(`${claim}-text`))
|
|
354
|
+
return true;
|
|
355
|
+
const canonicalCodingClaim = claim.replace(/-(?:system|value)$/, '');
|
|
356
|
+
if (canonicalCodingClaim !== claim && acceptedClaims.includes(canonicalCodingClaim) && acceptedClaims.includes(`${canonicalCodingClaim}-text`))
|
|
357
|
+
return true;
|
|
358
|
+
return resourceType === 'MedicationStatement' && claim === 'MedicationStatement.code'
|
|
359
|
+
&& acceptedClaims.includes('MedicationStatement.medication-text');
|
|
360
|
+
}
|
|
361
|
+
function selectedCodingClaims(resourceType, inputClaim, candidate, acceptedClaims, current) {
|
|
362
|
+
const codeClaim = terminologyCodeClaim(resourceType, inputClaim);
|
|
363
|
+
const next = { ...current, [inputClaim]: current[inputClaim] || candidate.text || candidate.display };
|
|
364
|
+
if (acceptedClaims.includes(codeClaim))
|
|
365
|
+
next[codeClaim] = `${candidate.system}|${candidate.code}`;
|
|
366
|
+
const displayClaim = `${codeClaim}-display`;
|
|
367
|
+
if (acceptedClaims.includes(displayClaim))
|
|
368
|
+
next[displayClaim] = candidate.display;
|
|
369
|
+
return next;
|
|
370
|
+
}
|
|
371
|
+
function isMultiline(parameter) { return /note|description|summary|instruction|outcome|reference-range-text/.test(parameter); }
|
|
372
|
+
function humanize(value) { return value ? value.charAt(0).toUpperCase() + value.slice(1).replaceAll('_', ' ') : value; }
|
|
373
|
+
function fieldInputType(parameter, schemaNode) {
|
|
374
|
+
if (schemaNode)
|
|
375
|
+
return schemaNode.type === 'number' || schemaNode.type === 'integer' ? 'number' : 'text';
|
|
376
|
+
if (/(?:^|-)number$|frequency$|dose-sequence$/.test(parameter))
|
|
377
|
+
return 'number';
|
|
378
|
+
// FHIR date/search fields may carry a partial date or a complete dateTime
|
|
379
|
+
// with timezone. HTML date inputs silently truncate or reject those values.
|
|
380
|
+
return 'text';
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=ClinicalArtifactEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClinicalArtifactEditor.js","sourceRoot":"","sources":["../../src/clinical/ClinicalArtifactEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { ClinicalResourceBundleLike } from 'fhir-data-utils-ts/clinical-resource-view';
|
|
2
|
+
import { type ClinicalPropertyOptionV2 } from './ClinicalArtifactPropertiesV2.js';
|
|
3
|
+
import type { ClinicalArtifactAuthoringContext, ClinicalArtifactDraft, ClinicalArtifactEditorRequest, ClinicalArtifactSaveOutcome, ClinicalTerminologyCandidate, ClinicalTerminologySearch, ClinicalTerminologySourceSearch } from './ClinicalArtifactEditor.js';
|
|
4
|
+
export type ClinicalArtifactRelatedEntryV2 = Readonly<{
|
|
5
|
+
entryId: string;
|
|
6
|
+
resourceType: string;
|
|
7
|
+
claims: Readonly<Record<string, string>>;
|
|
8
|
+
sectionCode?: string;
|
|
9
|
+
}>;
|
|
10
|
+
export type ClinicalArtifactDraftV2 = ClinicalArtifactDraft & Readonly<{
|
|
11
|
+
relatedEntries?: readonly ClinicalArtifactRelatedEntryV2[];
|
|
12
|
+
}>;
|
|
13
|
+
export type ClinicalArtifactFieldV2 = Readonly<{
|
|
14
|
+
claim: string;
|
|
15
|
+
kind: 'text' | 'date' | 'date-time' | 'positive-integer' | 'coded-select' | 'coded-concept' | 'documents';
|
|
16
|
+
required?: boolean;
|
|
17
|
+
transient?: boolean;
|
|
18
|
+
options?: readonly ClinicalPropertyOptionV2[];
|
|
19
|
+
textClaim?: string;
|
|
20
|
+
codeClaim?: string;
|
|
21
|
+
displayClaim?: string;
|
|
22
|
+
}>;
|
|
23
|
+
export type ClinicalArtifactEditorCopyV2 = Readonly<{
|
|
24
|
+
title: string;
|
|
25
|
+
description: string;
|
|
26
|
+
resourceType?: string;
|
|
27
|
+
save: string;
|
|
28
|
+
saving: string;
|
|
29
|
+
cancel: string;
|
|
30
|
+
close: string;
|
|
31
|
+
terminologyLoading: string;
|
|
32
|
+
terminologyUnavailable: string;
|
|
33
|
+
terminologyEmpty?: string;
|
|
34
|
+
terminologySources: string;
|
|
35
|
+
readbackMissing: string;
|
|
36
|
+
addField: string;
|
|
37
|
+
chooseField: string;
|
|
38
|
+
addSelectedField: string;
|
|
39
|
+
removeField: string;
|
|
40
|
+
searchTerminology: string;
|
|
41
|
+
clearCoding: string;
|
|
42
|
+
selectCandidate: string;
|
|
43
|
+
canonicalCode: string;
|
|
44
|
+
canonicalDisplay: string;
|
|
45
|
+
codingRequired: string;
|
|
46
|
+
documents: string;
|
|
47
|
+
addDocuments: string;
|
|
48
|
+
removeDocument: string;
|
|
49
|
+
date: string;
|
|
50
|
+
time: string;
|
|
51
|
+
useToday: string;
|
|
52
|
+
useCurrentTime: string;
|
|
53
|
+
}>;
|
|
54
|
+
export type ClinicalArtifactEditorV2Props = Readonly<{
|
|
55
|
+
request: ClinicalArtifactEditorRequest;
|
|
56
|
+
authoringContext: ClinicalArtifactAuthoringContext;
|
|
57
|
+
copy: ClinicalArtifactEditorCopyV2;
|
|
58
|
+
fields: readonly ClinicalArtifactFieldV2[];
|
|
59
|
+
initialVisibleClaims: readonly string[];
|
|
60
|
+
initialClaims?: Readonly<Record<string, string>>;
|
|
61
|
+
locale?: string;
|
|
62
|
+
timeZone?: string;
|
|
63
|
+
taxonomyId?: string;
|
|
64
|
+
fieldLabel: (claim: string) => string;
|
|
65
|
+
resourceTypeLabel?: string;
|
|
66
|
+
searchTerminology?: (input: ClinicalTerminologySearch) => Promise<readonly ClinicalTerminologyCandidate[]>;
|
|
67
|
+
loadTerminologySources?: ClinicalTerminologySourceSearch;
|
|
68
|
+
validate?: (claims: Readonly<Record<string, string>>) => void;
|
|
69
|
+
buildRelatedEntries?: (claims: Readonly<Record<string, string>>, draftId: string) => readonly ClinicalArtifactRelatedEntryV2[];
|
|
70
|
+
saveArtifact: (draft: ClinicalArtifactDraftV2) => Promise<ClinicalResourceBundleLike | ClinicalArtifactSaveOutcome | undefined>;
|
|
71
|
+
onCancel: () => void;
|
|
72
|
+
onReadback: (bundle: ClinicalResourceBundleLike) => void;
|
|
73
|
+
}>;
|
|
74
|
+
/** Progressive reusable V2 shell. Resource rules are supplied by a specialized editor. */
|
|
75
|
+
/** @deprecated Use ClinicalBundleDraftEditorV2 for every new clinical authoring flow. */
|
|
76
|
+
export declare function ClinicalArtifactEditorV2({ request, authoringContext, copy, fields, initialVisibleClaims, initialClaims, locale, timeZone, taxonomyId, fieldLabel, resourceTypeLabel, searchTerminology, loadTerminologySources, validate, buildRelatedEntries, saveArtifact, onCancel, onReadback }: ClinicalArtifactEditorV2Props): import("react").JSX.Element;
|
|
77
|
+
//# sourceMappingURL=ClinicalArtifactEditorV2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClinicalArtifactEditorV2.d.ts","sourceRoot":"","sources":["../../src/clinical/ClinicalArtifactEditorV2.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useId, useRef, useState } from 'react';
|
|
4
|
+
import { ClinicalEditorLayer } from './ClinicalEditorLayer.js';
|
|
5
|
+
import { readClinicalAttachment } from './ClinicalArtifactEditor.js';
|
|
6
|
+
import { CodedConceptPropertyV2, CodedSelectPropertyV2, DateTimePropertyV2, DocumentReferencesPropertyV2, OptionalFieldsV2, PositiveIntegerPropertyV2, } from './ClinicalArtifactPropertiesV2.js';
|
|
7
|
+
import { clinicalArtifactSubjectClaims } from 'fhir-data-utils-ts';
|
|
8
|
+
/** Progressive reusable V2 shell. Resource rules are supplied by a specialized editor. */
|
|
9
|
+
/** @deprecated Use ClinicalBundleDraftEditorV2 for every new clinical authoring flow. */
|
|
10
|
+
export function ClinicalArtifactEditorV2({ request, authoringContext, copy, fields, initialVisibleClaims, initialClaims = {}, locale = 'en', timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone, taxonomyId, fieldLabel, resourceTypeLabel, searchTerminology, loadTerminologySources, validate, buildRelatedEntries, saveArtifact, onCancel, onReadback }) {
|
|
11
|
+
const titleId = useId();
|
|
12
|
+
const [claims, setClaims] = useState({ ...initialClaims, ...stringClaims(request.initialClaims) });
|
|
13
|
+
const [visibleClaims, setVisibleClaims] = useState(() => [...new Set([...initialVisibleClaims, ...Object.keys(request.initialClaims ?? {}).filter(claim => fields.some(field => field.claim === claim))])]);
|
|
14
|
+
const [selectedOptional, setSelectedOptional] = useState('');
|
|
15
|
+
const [saving, setSaving] = useState(false);
|
|
16
|
+
const [attachments, setAttachments] = useState(request.initialAttachments ?? []);
|
|
17
|
+
const [error, setError] = useState('');
|
|
18
|
+
const draftId = useRef(request.artifactId ?? crypto.randomUUID());
|
|
19
|
+
const optional = fields.filter(field => !field.required && !visibleClaims.includes(field.claim)).map(field => ({ value: field.claim, label: fieldLabel(field.claim) }));
|
|
20
|
+
const update = (claim, value) => setClaims(current => ({ ...current, [claim]: value }));
|
|
21
|
+
async function submit() {
|
|
22
|
+
setError('');
|
|
23
|
+
try {
|
|
24
|
+
for (const field of fields) {
|
|
25
|
+
if (field.required && field.kind === 'coded-concept' && field.codeClaim && !claims[field.codeClaim]) {
|
|
26
|
+
throw new TypeError(copy.codingRequired);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
validate?.(claims);
|
|
30
|
+
setSaving(true);
|
|
31
|
+
const draft = {
|
|
32
|
+
resourceType: request.resourceType,
|
|
33
|
+
id: draftId.current,
|
|
34
|
+
sectionCode: request.sectionCode,
|
|
35
|
+
mode: request.mode,
|
|
36
|
+
claims: {
|
|
37
|
+
...clinicalArtifactSubjectClaims(request.resourceType, authoringContext.subjectReference),
|
|
38
|
+
...cleanClaims(claims, fields),
|
|
39
|
+
},
|
|
40
|
+
attachments,
|
|
41
|
+
relatedEntries: buildRelatedEntries?.(claims, draftId.current) ?? [],
|
|
42
|
+
};
|
|
43
|
+
const result = await saveArtifact(draft);
|
|
44
|
+
if (!result)
|
|
45
|
+
throw new Error(copy.readbackMissing);
|
|
46
|
+
if ('state' in result) {
|
|
47
|
+
if (result.state === 'confirmed')
|
|
48
|
+
onReadback(result.bundle);
|
|
49
|
+
else if (result.state === 'rejected')
|
|
50
|
+
throw new Error(result.message);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
onReadback(result);
|
|
54
|
+
}
|
|
55
|
+
catch (reason) {
|
|
56
|
+
setError(reason instanceof Error ? reason.message : String(reason));
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
setSaving(false);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return _jsx(ClinicalEditorLayer, { onDismiss: onCancel, children: _jsxs("section", { className: "uhcp-clinical-editor uhcp-clinical-editor-v2", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, children: [_jsxs("header", { children: [_jsxs("div", { children: [_jsxs("h2", { id: titleId, children: [copy.title, " ", resourceTypeLabel || request.resourceType] }), _jsx("p", { children: copy.description })] }), _jsx("button", { type: "button", "aria-label": copy.close, onClick: onCancel, children: "\u00D7" })] }), _jsxs("form", { onSubmit: event => { event.preventDefault(); void submit(); }, children: [fields.filter(field => visibleClaims.includes(field.claim)).map(field => _jsxs("div", { className: "uhcp-progressive-field-v2", children: [!field.required ? _jsx("button", { type: "button", className: "uhcp-remove-field-v2", "aria-label": `${copy.removeField}: ${fieldLabel(field.claim)}`, onClick: () => { setVisibleClaims(current => current.filter(claim => claim !== field.claim)); if (field.kind === 'documents')
|
|
63
|
+
setAttachments([]); setClaims(current => { const next = { ...current }; delete next[field.claim]; if (field.codeClaim)
|
|
64
|
+
delete next[field.codeClaim]; if (field.displayClaim)
|
|
65
|
+
delete next[field.displayClaim]; return next; }); }, children: "\u00D7" }) : null, field.kind === 'documents' ? _jsx(DocumentReferencesPropertyV2, { copy: copy, attachments: attachments, onFiles: files => { void Promise.all(files.map(readClinicalAttachment)).then(next => setAttachments(current => [...current, ...next])).catch(reason => setError(reason instanceof Error ? reason.message : String(reason))); }, onRemove: id => setAttachments(current => current.filter(attachment => attachment.id !== id)) })
|
|
66
|
+
: _jsx(ClinicalProperty, { field: field, label: fieldLabel(field.claim), resourceType: request.resourceType, value: claims[field.claim] ?? '', claims: claims, locale: locale, timeZone: timeZone, ...(taxonomyId === undefined ? {} : { taxonomyId }), copy: copy, update: update, ...(searchTerminology === undefined ? {} : { searchTerminology }), ...(loadTerminologySources === undefined ? {} : { loadTerminologySources }) })] }, field.claim)), _jsx(OptionalFieldsV2, { label: copy.addField, choose: copy.chooseField, add: copy.addSelectedField, options: optional, value: selectedOptional, onValueChange: setSelectedOptional, onAdd: () => { if (!selectedOptional)
|
|
67
|
+
return; setVisibleClaims(current => [...current, selectedOptional]); setSelectedOptional(''); } }), error ? _jsx("p", { className: "uhcp-clinical-editor-error", role: "alert", children: error }) : null, _jsxs("footer", { children: [_jsx("button", { className: "uhcp-clinical-editor-submit", type: "submit", disabled: saving, children: saving ? copy.saving : copy.save }), _jsx("button", { className: "uhcp-clinical-editor-cancel", type: "button", onClick: onCancel, children: copy.cancel })] })] })] }) });
|
|
68
|
+
}
|
|
69
|
+
function ClinicalProperty({ field, label, resourceType, value, claims, locale, timeZone, taxonomyId, copy, update, searchTerminology, loadTerminologySources }) {
|
|
70
|
+
if (field.kind === 'date-time')
|
|
71
|
+
return _jsx(DateTimePropertyV2, { label: label, value: value, required: Boolean(field.required), locale: locale, timeZone: timeZone, copy: copy, onChange: next => update(field.claim, next) });
|
|
72
|
+
if (field.kind === 'date')
|
|
73
|
+
return _jsxs("label", { className: "uhcp-clinical-property-v2", children: [label, field.required ? ' *' : '', _jsx("input", { "aria-label": label, type: "date", required: Boolean(field.required), value: value, onChange: event => update(field.claim, event.currentTarget.value) })] });
|
|
74
|
+
if (field.kind === 'positive-integer')
|
|
75
|
+
return _jsx(PositiveIntegerPropertyV2, { label: label, value: value, required: Boolean(field.required), onChange: next => update(field.claim, next) });
|
|
76
|
+
if (field.kind === 'coded-select')
|
|
77
|
+
return _jsx(CodedSelectPropertyV2, { label: label, value: value, required: Boolean(field.required), options: field.options ?? [], onChange: next => update(field.claim, next) });
|
|
78
|
+
if (field.kind === 'coded-concept' && field.codeClaim)
|
|
79
|
+
return _jsx(CodedConceptPropertyV2, { resourceType: resourceType, ...(field.textClaim === undefined ? {} : { textClaim: field.textClaim }), codeClaim: field.codeClaim, ...(field.displayClaim === undefined ? {} : { displayClaim: field.displayClaim }), label: label, locale: locale, ...(taxonomyId === undefined ? {} : { taxonomyId }), text: field.textClaim ? claims[field.textClaim] ?? '' : '', code: claims[field.codeClaim] ?? '', display: field.displayClaim ? claims[field.displayClaim] ?? '' : '', required: Boolean(field.required), copy: copy, ...(searchTerminology === undefined ? {} : { searchTerminology }), ...(loadTerminologySources === undefined ? {} : { loadTerminologySources }), onChange: next => { if (field.textClaim)
|
|
80
|
+
update(field.textClaim, next.text); update(field.codeClaim, next.code); if (field.displayClaim)
|
|
81
|
+
update(field.displayClaim, next.display); } });
|
|
82
|
+
return _jsxs("label", { className: "uhcp-clinical-property-v2", children: [label, field.required ? ' *' : '', _jsx("input", { "aria-label": label, required: Boolean(field.required), value: value, onChange: event => update(field.claim, event.currentTarget.value) })] });
|
|
83
|
+
}
|
|
84
|
+
function stringClaims(value) { return Object.fromEntries(Object.entries(value ?? {}).map(([claim, item]) => [claim, String(item ?? '')])); }
|
|
85
|
+
function cleanClaims(value, fields) {
|
|
86
|
+
const transient = new Set(fields.filter(field => field.transient).map(field => field.claim));
|
|
87
|
+
return Object.fromEntries(Object.entries(value).filter(([claim, item]) => item !== '' && !transient.has(claim)));
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=ClinicalArtifactEditorV2.js.map
|