@medplum/react 2.0.0 → 2.0.1
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/dist/cjs/ReferenceRangeEditor/ReferenceRangeEditor.d.ts +1 -2
- package/dist/cjs/ResourceTimeline/ResourceTimeline.d.ts +2 -2
- package/dist/cjs/index.cjs +54 -117
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.min.cjs +1 -1
- package/dist/esm/DefaultResourceTimeline/DefaultResourceTimeline.mjs +6 -18
- package/dist/esm/DefaultResourceTimeline/DefaultResourceTimeline.mjs.map +1 -1
- package/dist/esm/EncounterTimeline/EncounterTimeline.mjs +7 -24
- package/dist/esm/EncounterTimeline/EncounterTimeline.mjs.map +1 -1
- package/dist/esm/PatientTimeline/PatientTimeline.mjs +13 -20
- package/dist/esm/PatientTimeline/PatientTimeline.mjs.map +1 -1
- package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.d.ts +1 -2
- package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.mjs.map +1 -1
- package/dist/esm/ResourcePropertyDisplay/ResourcePropertyDisplay.mjs +2 -2
- package/dist/esm/ResourcePropertyDisplay/ResourcePropertyDisplay.mjs.map +1 -1
- package/dist/esm/ResourcePropertyInput/ResourcePropertyInput.mjs +2 -2
- package/dist/esm/ResourcePropertyInput/ResourcePropertyInput.mjs.map +1 -1
- package/dist/esm/ResourceTimeline/ResourceTimeline.d.ts +2 -2
- package/dist/esm/ResourceTimeline/ResourceTimeline.mjs +19 -24
- package/dist/esm/ResourceTimeline/ResourceTimeline.mjs.map +1 -1
- package/dist/esm/ServiceRequestTimeline/ServiceRequestTimeline.mjs +8 -30
- package/dist/esm/ServiceRequestTimeline/ServiceRequestTimeline.mjs.map +1 -1
- package/dist/esm/index.min.mjs +1 -1
- package/package.json +17 -17
- package/rollup.config.mjs +0 -110
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { ObservationDefinition, ObservationDefinitionQualifiedInterval } from '@medplum/fhirtypes';
|
|
3
|
-
declare const intervalFilters: readonly ["gender", "age", "gestationalAge", "context", "appliesTo"];
|
|
4
3
|
export interface ReferenceRangeEditorProps {
|
|
5
4
|
definition: ObservationDefinition;
|
|
6
5
|
onSubmit: (result: ObservationDefinition) => void;
|
|
7
6
|
}
|
|
8
7
|
type IntervalGroup = {
|
|
9
8
|
id: string;
|
|
10
|
-
filters: Record<
|
|
9
|
+
filters: Record<string, any>;
|
|
11
10
|
intervals: ObservationDefinitionQualifiedInterval[];
|
|
12
11
|
};
|
|
13
12
|
export declare function ReferenceRangeEditor(props: ReferenceRangeEditorProps): JSX.Element;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { ProfileResource } from '@medplum/core';
|
|
2
|
+
import { MedplumClient, ProfileResource } from '@medplum/core';
|
|
3
3
|
import { Attachment, Bundle, Communication, Media, Reference, Resource } from '@medplum/fhirtypes';
|
|
4
4
|
export interface ResourceTimelineProps<T extends Resource> {
|
|
5
5
|
value: T | Reference<T>;
|
|
6
|
-
|
|
6
|
+
loadTimelineResources: (medplum: MedplumClient, resource: T) => Promise<Bundle[]>;
|
|
7
7
|
createCommunication?: (resource: T, sender: ProfileResource, text: string) => Communication;
|
|
8
8
|
createMedia?: (resource: T, operator: ProfileResource, attachment: Attachment) => Media;
|
|
9
9
|
}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1244,7 +1244,7 @@
|
|
|
1244
1244
|
if (!property?.path) {
|
|
1245
1245
|
throw Error(`Displaying property of type ${props.propertyType} requires element definition path`);
|
|
1246
1246
|
}
|
|
1247
|
-
return (React.createElement(BackboneElementDisplay, { value: { type: core.
|
|
1247
|
+
return (React.createElement(BackboneElementDisplay, { value: { type: core.getElementDefinitionTypeName(property), value }, compact: true, ignoreMissingValues: props.ignoreMissingValues }));
|
|
1248
1248
|
}
|
|
1249
1249
|
}
|
|
1250
1250
|
/**
|
|
@@ -2241,7 +2241,7 @@
|
|
|
2241
2241
|
case core.PropertyType.UsageContext:
|
|
2242
2242
|
return (React.createElement(BackboneElementInput, { typeName: propertyType, defaultValue: value, onChange: props.onChange, outcome: props.outcome }));
|
|
2243
2243
|
default:
|
|
2244
|
-
return (React.createElement(BackboneElementInput, { typeName: core.
|
|
2244
|
+
return (React.createElement(BackboneElementInput, { typeName: core.getElementDefinitionTypeName(property), defaultValue: value, onChange: props.onChange, outcome: props.outcome }));
|
|
2245
2245
|
}
|
|
2246
2246
|
}
|
|
2247
2247
|
function getTargetTypes(property) {
|
|
@@ -2799,7 +2799,7 @@
|
|
|
2799
2799
|
const resource = useResource(props.value);
|
|
2800
2800
|
const [history, setHistory] = React.useState();
|
|
2801
2801
|
const [items, setItems] = React.useState([]);
|
|
2802
|
-
const
|
|
2802
|
+
const loadTimelineResources = props.loadTimelineResources;
|
|
2803
2803
|
const itemsRef = React.useRef(items);
|
|
2804
2804
|
itemsRef.current = items;
|
|
2805
2805
|
const loadTimeline = React.useCallback(() => {
|
|
@@ -2808,8 +2808,8 @@
|
|
|
2808
2808
|
setHistory({});
|
|
2809
2809
|
return;
|
|
2810
2810
|
}
|
|
2811
|
-
medplum
|
|
2812
|
-
}, [medplum, resource,
|
|
2811
|
+
loadTimelineResources(medplum, resource).then(handleBatchResponse).catch(console.log);
|
|
2812
|
+
}, [medplum, resource, loadTimelineResources]);
|
|
2813
2813
|
React.useEffect(() => {
|
|
2814
2814
|
loadTimeline();
|
|
2815
2815
|
}, [loadTimeline]);
|
|
@@ -2817,29 +2817,24 @@
|
|
|
2817
2817
|
* Handles a batch request response.
|
|
2818
2818
|
* @param batchResponse The batch response.
|
|
2819
2819
|
*/
|
|
2820
|
-
function handleBatchResponse(
|
|
2820
|
+
function handleBatchResponse(bundles) {
|
|
2821
2821
|
const newItems = [];
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
for (const entry of bundle.entry) {
|
|
2834
|
-
if (entry.resource) {
|
|
2835
|
-
newItems.push(entry.resource);
|
|
2836
|
-
}
|
|
2837
|
-
}
|
|
2822
|
+
for (const bundle of bundles) {
|
|
2823
|
+
if (!bundle) {
|
|
2824
|
+
// User may not have access to all resource types
|
|
2825
|
+
continue;
|
|
2826
|
+
}
|
|
2827
|
+
if (bundle.type === 'history') {
|
|
2828
|
+
setHistory(bundle);
|
|
2829
|
+
}
|
|
2830
|
+
if (bundle.entry) {
|
|
2831
|
+
for (const entry of bundle.entry) {
|
|
2832
|
+
newItems.push(entry.resource);
|
|
2838
2833
|
}
|
|
2839
2834
|
}
|
|
2840
|
-
sortByDateAndPriority(newItems);
|
|
2841
|
-
newItems.reverse();
|
|
2842
2835
|
}
|
|
2836
|
+
sortByDateAndPriority(newItems);
|
|
2837
|
+
newItems.reverse();
|
|
2843
2838
|
setItems(newItems);
|
|
2844
2839
|
}
|
|
2845
2840
|
/**
|
|
@@ -2960,10 +2955,10 @@
|
|
|
2960
2955
|
React.createElement(AttachmentButton, { onUpload: createMedia, onUploadStart: onUploadStart, onUploadProgress: onUploadProgress }, (props) => (React.createElement(core$1.ActionIcon, { ...props, radius: "xl", color: "blue", variant: "filled" },
|
|
2961
2956
|
React.createElement(icons.IconCloudUpload, { size: 16 })))))))),
|
|
2962
2957
|
items.map((item) => {
|
|
2958
|
+
const key = `${item.resourceType}/${item.id}/${item.meta?.versionId}`;
|
|
2963
2959
|
if (item.resourceType === resource.resourceType && item.id === resource.id) {
|
|
2964
|
-
return (React.createElement(HistoryTimelineItem, { key:
|
|
2960
|
+
return (React.createElement(HistoryTimelineItem, { key: key, history: history, resource: item, onDetails: onVersionDetails }));
|
|
2965
2961
|
}
|
|
2966
|
-
const key = `${item.resourceType}/${item.id}`;
|
|
2967
2962
|
switch (item.resourceType) {
|
|
2968
2963
|
case 'AuditEvent':
|
|
2969
2964
|
return React.createElement(AuditEventTimelineItem, { key: key, resource: item, onDetails: onDetails });
|
|
@@ -3052,51 +3047,22 @@
|
|
|
3052
3047
|
}
|
|
3053
3048
|
|
|
3054
3049
|
function DefaultResourceTimeline(props) {
|
|
3055
|
-
return (React.createElement(ResourceTimeline, { value: props.resource,
|
|
3056
|
-
|
|
3057
|
-
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3061
|
-
method: 'GET',
|
|
3062
|
-
url: `${core.getReferenceString(resource)}/_history`,
|
|
3063
|
-
},
|
|
3064
|
-
},
|
|
3065
|
-
{
|
|
3066
|
-
request: {
|
|
3067
|
-
method: 'GET',
|
|
3068
|
-
url: `AuditEvent?entity=${core.getReferenceString(resource)}&_sort=-_lastUpdated`,
|
|
3069
|
-
},
|
|
3070
|
-
},
|
|
3071
|
-
],
|
|
3072
|
-
}) }));
|
|
3050
|
+
return (React.createElement(ResourceTimeline, { value: props.resource, loadTimelineResources: async (medplum, resource) => {
|
|
3051
|
+
return Promise.all([
|
|
3052
|
+
medplum.readHistory(resource.resourceType, resource.id),
|
|
3053
|
+
medplum.search('AuditEvent', '_sort=-_lastUpdated&entity=' + core.getReferenceString(resource)),
|
|
3054
|
+
]);
|
|
3055
|
+
} }));
|
|
3073
3056
|
}
|
|
3074
3057
|
|
|
3075
3058
|
function EncounterTimeline(props) {
|
|
3076
|
-
return (React.createElement(ResourceTimeline, { value: props.encounter,
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
url: `${core.getReferenceString(resource)}/_history`,
|
|
3084
|
-
},
|
|
3085
|
-
},
|
|
3086
|
-
{
|
|
3087
|
-
request: {
|
|
3088
|
-
method: 'GET',
|
|
3089
|
-
url: `Communication?encounter=${core.getReferenceString(resource)}`,
|
|
3090
|
-
},
|
|
3091
|
-
},
|
|
3092
|
-
{
|
|
3093
|
-
request: {
|
|
3094
|
-
method: 'GET',
|
|
3095
|
-
url: `Media?encounter=${core.getReferenceString(resource)}`,
|
|
3096
|
-
},
|
|
3097
|
-
},
|
|
3098
|
-
],
|
|
3099
|
-
}), createCommunication: (resource, sender, text) => ({
|
|
3059
|
+
return (React.createElement(ResourceTimeline, { value: props.encounter, loadTimelineResources: async (medplum, resource) => {
|
|
3060
|
+
return Promise.all([
|
|
3061
|
+
medplum.readHistory('Encounter', resource.id),
|
|
3062
|
+
medplum.search('Communication', 'encounter=' + core.getReferenceString(resource)),
|
|
3063
|
+
medplum.search('Media', 'encounter=' + core.getReferenceString(resource)),
|
|
3064
|
+
]);
|
|
3065
|
+
}, createCommunication: (resource, sender, text) => ({
|
|
3100
3066
|
resourceType: 'Communication',
|
|
3101
3067
|
status: 'completed',
|
|
3102
3068
|
encounter: core.createReference(resource),
|
|
@@ -4569,26 +4535,19 @@
|
|
|
4569
4535
|
}
|
|
4570
4536
|
const MemoizedFhirPathTable = React.memo(FhirPathTable);
|
|
4571
4537
|
|
|
4572
|
-
const searches = [
|
|
4573
|
-
'$/_history',
|
|
4574
|
-
'Communication?subject=$',
|
|
4575
|
-
'Device?patient=$',
|
|
4576
|
-
'DeviceRequest?patient=$',
|
|
4577
|
-
'DiagnosticReport?subject=$',
|
|
4578
|
-
'Media?subject=$',
|
|
4579
|
-
'ServiceRequest?subject=$',
|
|
4580
|
-
];
|
|
4581
4538
|
function PatientTimeline(props) {
|
|
4582
|
-
|
|
4583
|
-
|
|
4584
|
-
|
|
4585
|
-
|
|
4586
|
-
|
|
4587
|
-
|
|
4588
|
-
|
|
4589
|
-
|
|
4590
|
-
|
|
4591
|
-
|
|
4539
|
+
const loadTimelineResources = React.useCallback((medplum, resource) => {
|
|
4540
|
+
return Promise.all([
|
|
4541
|
+
medplum.readHistory('Patient', resource.id),
|
|
4542
|
+
medplum.search('Communication', 'subject=' + core.getReferenceString(resource)),
|
|
4543
|
+
medplum.search('Device', 'patient=' + core.getReferenceString(resource)),
|
|
4544
|
+
medplum.search('DeviceRequest', 'patient=' + core.getReferenceString(resource)),
|
|
4545
|
+
medplum.search('DiagnosticReport', 'subject=' + core.getReferenceString(resource)),
|
|
4546
|
+
medplum.search('Media', 'subject=' + core.getReferenceString(resource)),
|
|
4547
|
+
medplum.search('ServiceRequest', 'subject=' + core.getReferenceString(resource)),
|
|
4548
|
+
]);
|
|
4549
|
+
}, []);
|
|
4550
|
+
return (React.createElement(ResourceTimeline, { value: props.patient, loadTimelineResources: loadTimelineResources, createCommunication: (resource, sender, text) => ({
|
|
4592
4551
|
resourceType: 'Communication',
|
|
4593
4552
|
status: 'completed',
|
|
4594
4553
|
subject: core.createReference(resource),
|
|
@@ -6175,36 +6134,14 @@
|
|
|
6175
6134
|
}
|
|
6176
6135
|
|
|
6177
6136
|
function ServiceRequestTimeline(props) {
|
|
6178
|
-
return (React.createElement(ResourceTimeline, { value: props.serviceRequest,
|
|
6179
|
-
|
|
6180
|
-
|
|
6181
|
-
|
|
6182
|
-
|
|
6183
|
-
|
|
6184
|
-
|
|
6185
|
-
|
|
6186
|
-
},
|
|
6187
|
-
},
|
|
6188
|
-
{
|
|
6189
|
-
request: {
|
|
6190
|
-
method: 'GET',
|
|
6191
|
-
url: `Communication?based-on=${core.getReferenceString(resource)}&_sort=-_lastUpdated`,
|
|
6192
|
-
},
|
|
6193
|
-
},
|
|
6194
|
-
{
|
|
6195
|
-
request: {
|
|
6196
|
-
method: 'GET',
|
|
6197
|
-
url: `Media?_count=100&based-on=${core.getReferenceString(resource)}&_sort=-_lastUpdated`,
|
|
6198
|
-
},
|
|
6199
|
-
},
|
|
6200
|
-
{
|
|
6201
|
-
request: {
|
|
6202
|
-
method: 'GET',
|
|
6203
|
-
url: `DiagnosticReport?based-on=${core.getReferenceString(resource)}&_sort=-_lastUpdated`,
|
|
6204
|
-
},
|
|
6205
|
-
},
|
|
6206
|
-
],
|
|
6207
|
-
}), createCommunication: (resource, sender, text) => ({
|
|
6137
|
+
return (React.createElement(ResourceTimeline, { value: props.serviceRequest, loadTimelineResources: async (medplum, resource) => {
|
|
6138
|
+
return Promise.all([
|
|
6139
|
+
medplum.readHistory('ServiceRequest', resource.id),
|
|
6140
|
+
medplum.search('Communication', 'based-on=' + core.getReferenceString(resource)),
|
|
6141
|
+
medplum.search('Media', '_count=100&based-on=' + core.getReferenceString(resource)),
|
|
6142
|
+
medplum.search('DiagnosticReport', 'based-on=' + core.getReferenceString(resource)),
|
|
6143
|
+
]);
|
|
6144
|
+
}, createCommunication: (resource, sender, text) => ({
|
|
6208
6145
|
resourceType: 'Communication',
|
|
6209
6146
|
status: 'completed',
|
|
6210
6147
|
basedOn: [core.createReference(resource)],
|