@medplum/react 0.10.0 → 0.10.2
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/CodeableConceptInput.d.ts +1 -1
- package/dist/cjs/CodingInput.d.ts +1 -1
- package/dist/cjs/DiagnosticReportDisplay.d.ts +0 -1
- package/dist/cjs/ResourceHistoryTable.d.ts +0 -1
- package/dist/cjs/StatusBadge.d.ts +0 -1
- package/dist/cjs/ValueSetAutocomplete.d.ts +1 -1
- package/dist/cjs/index.d.ts +0 -7
- package/dist/cjs/index.js +125 -121
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.min.js +1 -1
- package/dist/cjs/index.min.js.map +1 -1
- package/dist/cjs/stories/{Tabs.stories.d.ts → CodeInput.stories.d.ts} +1 -1
- package/dist/{esm/stories/Tabs.stories.d.ts → cjs/stories/CodeableConceptInput.stories.d.ts} +1 -1
- package/dist/cjs/stories/PlanDefinitionBuilder.stories.d.ts +2 -0
- package/dist/cjs/stories/RequestGroupDisplay.stories.d.ts +1 -0
- package/dist/cjs/stories/ResourceTable.stories.d.ts +4 -0
- package/dist/cjs/stories/covid19.d.ts +15 -0
- package/dist/cjs/styles.css +7 -195
- package/dist/esm/CodeInput.js +2 -2
- package/dist/esm/CodeInput.js.map +1 -1
- package/dist/esm/CodeableConceptInput.d.ts +1 -1
- package/dist/esm/CodeableConceptInput.js +1 -1
- package/dist/esm/CodeableConceptInput.js.map +1 -1
- package/dist/esm/CodingInput.d.ts +1 -1
- package/dist/esm/CodingInput.js +1 -1
- package/dist/esm/CodingInput.js.map +1 -1
- package/dist/esm/DiagnosticReportDisplay.d.ts +0 -1
- package/dist/esm/DiagnosticReportDisplay.js +6 -2
- package/dist/esm/DiagnosticReportDisplay.js.map +1 -1
- package/dist/esm/ResourceHistoryTable.d.ts +0 -1
- package/dist/esm/ResourceHistoryTable.js +2 -1
- package/dist/esm/ResourceHistoryTable.js.map +1 -1
- package/dist/esm/ResourceInput.js +6 -1
- package/dist/esm/ResourceInput.js.map +1 -1
- package/dist/esm/ResourceTimeline.js +11 -9
- package/dist/esm/ResourceTimeline.js.map +1 -1
- package/dist/esm/SearchFilterEditor.js +4 -3
- package/dist/esm/SearchFilterEditor.js.map +1 -1
- package/dist/esm/StatusBadge.d.ts +0 -1
- package/dist/esm/StatusBadge.js +55 -1
- package/dist/esm/StatusBadge.js.map +1 -1
- package/dist/esm/ValueSetAutocomplete.d.ts +1 -1
- package/dist/esm/ValueSetAutocomplete.js +48 -40
- package/dist/esm/ValueSetAutocomplete.js.map +1 -1
- package/dist/esm/index.d.ts +0 -7
- package/dist/esm/index.js +0 -7
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +1 -1
- package/dist/esm/index.min.js.map +1 -1
- package/dist/esm/stories/CodeInput.stories.d.ts +6 -0
- package/dist/esm/stories/CodeableConceptInput.stories.d.ts +6 -0
- package/dist/esm/stories/PlanDefinitionBuilder.stories.d.ts +2 -0
- package/dist/esm/stories/RequestGroupDisplay.stories.d.ts +1 -0
- package/dist/esm/stories/ResourceTable.stories.d.ts +4 -0
- package/dist/esm/stories/covid19.d.ts +15 -0
- package/dist/esm/styles.css +7 -195
- package/package.json +6 -5
- package/dist/cjs/FooterLinks.d.ts +0 -6
- package/dist/cjs/Scrollable.d.ts +0 -9
- package/dist/cjs/Tab.d.ts +0 -12
- package/dist/cjs/TabList.d.ts +0 -10
- package/dist/cjs/TabPanel.d.ts +0 -6
- package/dist/cjs/TabSwitch.d.ts +0 -6
- package/dist/cjs/TitleBar.d.ts +0 -6
- package/dist/esm/FooterLinks.d.ts +0 -6
- package/dist/esm/FooterLinks.js +0 -8
- package/dist/esm/FooterLinks.js.map +0 -1
- package/dist/esm/Scrollable.d.ts +0 -9
- package/dist/esm/Scrollable.js +0 -12
- package/dist/esm/Scrollable.js.map +0 -1
- package/dist/esm/Tab.d.ts +0 -12
- package/dist/esm/Tab.js +0 -19
- package/dist/esm/Tab.js.map +0 -1
- package/dist/esm/TabList.d.ts +0 -10
- package/dist/esm/TabList.js +0 -23
- package/dist/esm/TabList.js.map +0 -1
- package/dist/esm/TabPanel.d.ts +0 -6
- package/dist/esm/TabPanel.js +0 -8
- package/dist/esm/TabPanel.js.map +0 -1
- package/dist/esm/TabSwitch.d.ts +0 -6
- package/dist/esm/TabSwitch.js +0 -16
- package/dist/esm/TabSwitch.js.map +0 -1
- package/dist/esm/TitleBar.d.ts +0 -6
- package/dist/esm/TitleBar.js +0 -8
- package/dist/esm/TitleBar.js.map +0 -1
|
@@ -5,6 +5,6 @@ export interface CodeableConceptInputProps {
|
|
|
5
5
|
name: string;
|
|
6
6
|
placeholder?: string;
|
|
7
7
|
defaultValue?: CodeableConcept;
|
|
8
|
-
onChange?: (value: CodeableConcept) => void;
|
|
8
|
+
onChange?: (value: CodeableConcept | undefined) => void;
|
|
9
9
|
}
|
|
10
10
|
export declare function CodeableConceptInput(props: CodeableConceptInputProps): JSX.Element;
|
|
@@ -5,6 +5,6 @@ export interface CodingInputProps {
|
|
|
5
5
|
name: string;
|
|
6
6
|
placeholder?: string;
|
|
7
7
|
defaultValue?: Coding;
|
|
8
|
-
onChange?: (value: Coding) => void;
|
|
8
|
+
onChange?: (value: Coding | undefined) => void;
|
|
9
9
|
}
|
|
10
10
|
export declare function CodingInput(props: CodingInputProps): JSX.Element;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { DiagnosticReport, Observation, Reference } from '@medplum/fhirtypes';
|
|
3
3
|
import './DiagnosticReportDisplay.css';
|
|
4
|
-
import './Table.css';
|
|
5
4
|
export interface DiagnosticReportDisplayProps {
|
|
6
5
|
value?: DiagnosticReport | Reference<DiagnosticReport>;
|
|
7
6
|
}
|
|
@@ -5,6 +5,6 @@ export interface ValueSetAutocompleteProps {
|
|
|
5
5
|
name: string;
|
|
6
6
|
placeholder?: string;
|
|
7
7
|
defaultValue?: ValueSetExpansionContains;
|
|
8
|
-
onChange?: (value: ValueSetExpansionContains) => void;
|
|
8
|
+
onChange?: (value: ValueSetExpansionContains | undefined) => void;
|
|
9
9
|
}
|
|
10
10
|
export declare function ValueSetAutocomplete(props: ValueSetAutocompleteProps): JSX.Element;
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -23,7 +23,6 @@ export * from './Document';
|
|
|
23
23
|
export * from './EncounterTimeline';
|
|
24
24
|
export * from './ErrorBoundary';
|
|
25
25
|
export * from './FhirPathTable';
|
|
26
|
-
export * from './FooterLinks';
|
|
27
26
|
export * from './Form';
|
|
28
27
|
export * from './FormSection';
|
|
29
28
|
export * from './FormUtils';
|
|
@@ -57,19 +56,13 @@ export * from './ResourcePropertyInput';
|
|
|
57
56
|
export * from './ResourceTable';
|
|
58
57
|
export * from './ResourceTimeline';
|
|
59
58
|
export * from './Scheduler';
|
|
60
|
-
export * from './Scrollable';
|
|
61
59
|
export * from './SearchControl';
|
|
62
60
|
export * from './SearchFieldEditor';
|
|
63
61
|
export * from './SearchFilterEditor';
|
|
64
62
|
export * from './SearchUtils';
|
|
65
63
|
export * from './ServiceRequestTimeline';
|
|
66
64
|
export * from './StatusBadge';
|
|
67
|
-
export * from './Tab';
|
|
68
|
-
export * from './TabList';
|
|
69
|
-
export * from './TabPanel';
|
|
70
|
-
export * from './TabSwitch';
|
|
71
65
|
export * from './Timeline';
|
|
72
|
-
export * from './TitleBar';
|
|
73
66
|
export * from './useResource';
|
|
74
67
|
export * from './utils';
|
|
75
68
|
export * from './utils/date';
|
package/dist/cjs/index.js
CHANGED
|
@@ -1228,51 +1228,59 @@
|
|
|
1228
1228
|
return (React__default["default"].createElement(core$1.TextInput, { name: props.name, placeholder: "Annotation text", defaultValue: value.text, onChange: (e) => setText(e.currentTarget.value) }));
|
|
1229
1229
|
}
|
|
1230
1230
|
|
|
1231
|
+
function valueSetElementToAutocompleteItem(element) {
|
|
1232
|
+
return {
|
|
1233
|
+
value: element.code,
|
|
1234
|
+
label: getDisplay(element),
|
|
1235
|
+
element,
|
|
1236
|
+
};
|
|
1237
|
+
}
|
|
1231
1238
|
function ValueSetAutocomplete(props) {
|
|
1232
1239
|
const medplum = useMedplum();
|
|
1233
|
-
const defaultValue = props
|
|
1234
|
-
const [
|
|
1235
|
-
const [
|
|
1236
|
-
const
|
|
1237
|
-
|
|
1238
|
-
|
|
1240
|
+
const { property, defaultValue } = props;
|
|
1241
|
+
const [textValues, setTextValues] = React.useState(defaultValue ? [defaultValue.code] : []);
|
|
1242
|
+
const [data, setData] = React.useState(defaultValue ? [valueSetElementToAutocompleteItem(defaultValue)] : []);
|
|
1243
|
+
const dataRef = React.useRef();
|
|
1244
|
+
dataRef.current = data;
|
|
1245
|
+
const loadValues = React.useCallback((input) => __awaiter(this, void 0, void 0, function* () {
|
|
1239
1246
|
var _a, _b;
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
}
|
|
1249
|
-
function handleChange(val) {
|
|
1250
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
1251
|
-
setText(val);
|
|
1252
|
-
return loadValues(val);
|
|
1253
|
-
});
|
|
1254
|
-
}
|
|
1255
|
-
function handleSelect(item) {
|
|
1256
|
-
setValue(item.element);
|
|
1257
|
-
setText(item.value);
|
|
1258
|
-
setData([]);
|
|
1259
|
-
if (props.onChange) {
|
|
1260
|
-
props.onChange(item.element);
|
|
1247
|
+
const system = (_a = property.binding) === null || _a === void 0 ? void 0 : _a.valueSet;
|
|
1248
|
+
const valueSet = yield medplum.searchValueSet(system, input);
|
|
1249
|
+
const valueSetElements = (_b = valueSet.expansion) === null || _b === void 0 ? void 0 : _b.contains;
|
|
1250
|
+
const newData = [...dataRef.current];
|
|
1251
|
+
for (const valueSetElement of valueSetElements) {
|
|
1252
|
+
if (!newData.some((item) => item.value === valueSetElement.code)) {
|
|
1253
|
+
newData.push(valueSetElementToAutocompleteItem(valueSetElement));
|
|
1254
|
+
}
|
|
1261
1255
|
}
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
if (
|
|
1271
|
-
|
|
1256
|
+
setData(newData);
|
|
1257
|
+
}), [medplum, property, dataRef]);
|
|
1258
|
+
function handleChange(values) {
|
|
1259
|
+
setTextValues(values);
|
|
1260
|
+
const textValue = values[0];
|
|
1261
|
+
let currentItem = undefined;
|
|
1262
|
+
if (textValue) {
|
|
1263
|
+
currentItem = dataRef.current.find((item) => item.value === values[0]);
|
|
1264
|
+
if (!currentItem) {
|
|
1265
|
+
const newElement = { code: textValue, display: textValue };
|
|
1266
|
+
currentItem = valueSetElementToAutocompleteItem(newElement);
|
|
1267
|
+
setData([...dataRef.current, currentItem]);
|
|
1272
1268
|
}
|
|
1273
1269
|
}
|
|
1270
|
+
if (props.onChange) {
|
|
1271
|
+
props.onChange(currentItem === null || currentItem === void 0 ? void 0 : currentItem.element);
|
|
1272
|
+
}
|
|
1274
1273
|
}
|
|
1275
|
-
|
|
1274
|
+
React.useEffect(() => {
|
|
1275
|
+
loadValues('').catch(console.log);
|
|
1276
|
+
}, [loadValues]);
|
|
1277
|
+
return (React__default["default"].createElement(core$1.MultiSelect, { data: data, placeholder: props.placeholder, searchable: true, creatable: true, clearable: true, value: textValues, filter: (value, selected, item) => {
|
|
1278
|
+
var _a, _b;
|
|
1279
|
+
return !!(textValues.length === 0 &&
|
|
1280
|
+
!selected &&
|
|
1281
|
+
(((_a = item.element.display) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(value.toLowerCase().trim())) ||
|
|
1282
|
+
((_b = item.element.code) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes(value.toLowerCase().trim()))));
|
|
1283
|
+
}, onChange: handleChange, getCreateLabel: (query) => `+ Create ${query}`, onCreate: (query) => valueSetElementToAutocompleteItem({ code: query, display: query }) }));
|
|
1276
1284
|
}
|
|
1277
1285
|
function getDisplay(item) {
|
|
1278
1286
|
return item.display || item.code || '';
|
|
@@ -1281,7 +1289,7 @@
|
|
|
1281
1289
|
function CodeableConceptInput(props) {
|
|
1282
1290
|
const [value, setValue] = React.useState(props.defaultValue);
|
|
1283
1291
|
function handleChange(newValue) {
|
|
1284
|
-
const newConcept = valueSetElementToCodeableConcept(newValue);
|
|
1292
|
+
const newConcept = newValue && valueSetElementToCodeableConcept(newValue);
|
|
1285
1293
|
setValue(newConcept);
|
|
1286
1294
|
if (props.onChange) {
|
|
1287
1295
|
props.onChange(newConcept);
|
|
@@ -1322,16 +1330,16 @@
|
|
|
1322
1330
|
return (React__default["default"].createElement(ValueSetAutocomplete, { property: props.property, name: props.name, placeholder: props.placeholder, defaultValue: codeToValueSetElement(value), onChange: handleChange }));
|
|
1323
1331
|
}
|
|
1324
1332
|
function codeToValueSetElement(code) {
|
|
1325
|
-
return { code };
|
|
1333
|
+
return code ? { code } : undefined;
|
|
1326
1334
|
}
|
|
1327
1335
|
function valueSetElementToCode(element) {
|
|
1328
|
-
return element.code;
|
|
1336
|
+
return element === null || element === void 0 ? void 0 : element.code;
|
|
1329
1337
|
}
|
|
1330
1338
|
|
|
1331
1339
|
function CodingInput(props) {
|
|
1332
1340
|
const [value, setValue] = React.useState(props.defaultValue);
|
|
1333
1341
|
function handleChange(newValue) {
|
|
1334
|
-
const newConcept = valueSetElementToCoding(newValue);
|
|
1342
|
+
const newConcept = newValue && valueSetElementToCoding(newValue);
|
|
1335
1343
|
setValue(newConcept);
|
|
1336
1344
|
if (props.onChange) {
|
|
1337
1345
|
props.onChange(newConcept);
|
|
@@ -1636,6 +1644,11 @@
|
|
|
1636
1644
|
const [value, setValue] = React.useState(defaultValue ? core.getDisplayString(defaultValue) : '');
|
|
1637
1645
|
const [loading, setLoading] = React.useState(false);
|
|
1638
1646
|
const [data, setData] = React.useState([]);
|
|
1647
|
+
React.useEffect(() => {
|
|
1648
|
+
if (defaultValue) {
|
|
1649
|
+
setValue(core.getDisplayString(defaultValue));
|
|
1650
|
+
}
|
|
1651
|
+
}, [defaultValue, setValue]);
|
|
1639
1652
|
function loadValues(input) {
|
|
1640
1653
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1641
1654
|
setLoading(true);
|
|
@@ -2058,7 +2071,7 @@
|
|
|
2058
2071
|
}
|
|
2059
2072
|
function ObservationTable(props) {
|
|
2060
2073
|
var _a;
|
|
2061
|
-
return (React__default["default"].createElement(
|
|
2074
|
+
return (React__default["default"].createElement(core$1.Table, { withBorder: true, withColumnBorders: true },
|
|
2062
2075
|
React__default["default"].createElement("thead", null,
|
|
2063
2076
|
React__default["default"].createElement("tr", null,
|
|
2064
2077
|
React__default["default"].createElement("th", null, "Test"),
|
|
@@ -2107,6 +2120,9 @@
|
|
|
2107
2120
|
if (!range) {
|
|
2108
2121
|
return null;
|
|
2109
2122
|
}
|
|
2123
|
+
if (range.text) {
|
|
2124
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, range.text);
|
|
2125
|
+
}
|
|
2110
2126
|
return React__default["default"].createElement(RangeDisplay, { value: range });
|
|
2111
2127
|
}
|
|
2112
2128
|
/**
|
|
@@ -2118,7 +2134,7 @@
|
|
|
2118
2134
|
function isCritical(observation) {
|
|
2119
2135
|
var _a, _b, _c, _d;
|
|
2120
2136
|
const code = (_d = (_c = (_b = (_a = observation.interpretation) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.coding) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.code;
|
|
2121
|
-
return code === 'AA' || code === 'LL' || code === 'HH';
|
|
2137
|
+
return code === 'AA' || code === 'LL' || code === 'HH' || code === 'RR';
|
|
2122
2138
|
}
|
|
2123
2139
|
|
|
2124
2140
|
function ResourceDiffTable(props) {
|
|
@@ -2187,14 +2203,6 @@
|
|
|
2187
2203
|
return (React__default["default"].createElement(BackboneElementDisplay, { value: { type: value.resourceType, value }, ignoreMissingValues: props.ignoreMissingValues }));
|
|
2188
2204
|
}
|
|
2189
2205
|
|
|
2190
|
-
function Scrollable(props) {
|
|
2191
|
-
const containerHeight = props.height || '100%';
|
|
2192
|
-
const contentHeight = props.height ? props.height + 25 : '100%';
|
|
2193
|
-
const className = 'medplum-scrollable-content' + (props.className ? ` ${props.className}` : '');
|
|
2194
|
-
return (React__default["default"].createElement("div", { className: "medplum-scrollable-container", style: { height: containerHeight } },
|
|
2195
|
-
React__default["default"].createElement("div", { className: className, role: props.role, style: { height: contentHeight } }, props.children)));
|
|
2196
|
-
}
|
|
2197
|
-
|
|
2198
2206
|
/**
|
|
2199
2207
|
* ErrorBoundary is a React component that handles errors in its child components.
|
|
2200
2208
|
* See: https://reactjs.org/docs/error-boundaries.html
|
|
@@ -2422,10 +2430,13 @@
|
|
|
2422
2430
|
input.focus();
|
|
2423
2431
|
}
|
|
2424
2432
|
} },
|
|
2425
|
-
React__default["default"].createElement(core$1.Group, { noWrap: true },
|
|
2433
|
+
React__default["default"].createElement(core$1.Group, { spacing: "xs", noWrap: true, style: { width: '100%' } },
|
|
2426
2434
|
React__default["default"].createElement(ResourceAvatar, { value: sender }),
|
|
2427
|
-
React__default["default"].createElement(core$1.TextInput, { name: "text",
|
|
2428
|
-
|
|
2435
|
+
React__default["default"].createElement(core$1.TextInput, { name: "text", ref: inputRef, placeholder: "Add comment", style: { width: '100%', maxWidth: 300 } }),
|
|
2436
|
+
React__default["default"].createElement(core$1.ActionIcon, { type: "submit", radius: "xl", color: "blue", variant: "filled" },
|
|
2437
|
+
React__default["default"].createElement(icons.IconMessage, { size: 16 })),
|
|
2438
|
+
React__default["default"].createElement(AttachmentButton, { onUpload: createMedia }, (props) => (React__default["default"].createElement(core$1.ActionIcon, Object.assign({}, props, { radius: "xl", color: "blue", variant: "filled" }),
|
|
2439
|
+
React__default["default"].createElement(icons.IconCloudUpload, { size: 16 }))))))))),
|
|
2429
2440
|
items.map((item) => {
|
|
2430
2441
|
var _a;
|
|
2431
2442
|
if (item.resourceType === resource.resourceType && item.id === resource.id) {
|
|
@@ -2498,7 +2509,7 @@
|
|
|
2498
2509
|
}
|
|
2499
2510
|
function AuditEventTimelineItem(props) {
|
|
2500
2511
|
return (React__default["default"].createElement(TimelineItem, { resource: props.resource, padding: true, popupMenuItems: React__default["default"].createElement(TimelineItemPopupMenu, Object.assign({}, props)) },
|
|
2501
|
-
React__default["default"].createElement(
|
|
2512
|
+
React__default["default"].createElement(core$1.ScrollArea, null,
|
|
2502
2513
|
React__default["default"].createElement("pre", null, props.resource.outcomeDesc))));
|
|
2503
2514
|
}
|
|
2504
2515
|
function DiagnosticReportTimelineItem(props) {
|
|
@@ -3455,7 +3466,8 @@
|
|
|
3455
3466
|
}
|
|
3456
3467
|
}),
|
|
3457
3468
|
React__default["default"].createElement(FilterRowInput, { resourceType: resourceType, searchParams: searchParams, okText: "Add", onOk: onAddFilter })))),
|
|
3458
|
-
React__default["default"].createElement(core$1.
|
|
3469
|
+
React__default["default"].createElement(core$1.Group, { position: "right", mt: "xl" },
|
|
3470
|
+
React__default["default"].createElement(core$1.Button, { onClick: () => props.onOk(searchRef.current) }, "OK"))));
|
|
3459
3471
|
}
|
|
3460
3472
|
function FilterRowDisplay(props) {
|
|
3461
3473
|
const { filter } = props;
|
|
@@ -3487,7 +3499,7 @@
|
|
|
3487
3499
|
return (React__default["default"].createElement("tr", null,
|
|
3488
3500
|
React__default["default"].createElement("td", null,
|
|
3489
3501
|
React__default["default"].createElement(core$1.NativeSelect, { "data-testid": "filter-field", defaultValue: valueRef.current.code, onChange: (e) => setFilterCode(e.currentTarget.value), data: Object.keys(props.searchParams).map((param) => ({ value: param, label: buildFieldNameString(param) })) })),
|
|
3490
|
-
React__default["default"].createElement("td", null, operators && (React__default["default"].createElement(core$1.NativeSelect, { "data-testid": "filter-operation", defaultValue: value.operator, onChange: (e) => setFilterOperator(e.currentTarget.value), data: operators.map((op) => ({ value: op, label: getOpString(op) })) }))),
|
|
3502
|
+
React__default["default"].createElement("td", null, operators && (React__default["default"].createElement(core$1.NativeSelect, { "data-testid": "filter-operation", defaultValue: value.operator, onChange: (e) => setFilterOperator(e.currentTarget.value), data: ['', ...operators.map((op) => ({ value: op, label: getOpString(op) }))] }))),
|
|
3491
3503
|
React__default["default"].createElement("td", null, searchParam && value.operator && (React__default["default"].createElement(SearchFilterValueInput, { resourceType: props.resourceType, searchParam: searchParam, defaultValue: value.value, onChange: setFilterValue }))),
|
|
3492
3504
|
React__default["default"].createElement("td", null,
|
|
3493
3505
|
value.code && value.operator && value.value && (React__default["default"].createElement(core$1.Button, { compact: true, variant: "outline", onClick: () => {
|
|
@@ -4006,10 +4018,6 @@
|
|
|
4006
4018
|
}
|
|
4007
4019
|
const MemoizedFhirPathTable = React__default["default"].memo(FhirPathTable);
|
|
4008
4020
|
|
|
4009
|
-
function FooterLinks(props) {
|
|
4010
|
-
return React__default["default"].createElement("div", { className: "medplum-footer" }, props.children);
|
|
4011
|
-
}
|
|
4012
|
-
|
|
4013
4021
|
const searches = [
|
|
4014
4022
|
'$/_history',
|
|
4015
4023
|
'Communication?subject=$',
|
|
@@ -4725,8 +4733,61 @@
|
|
|
4725
4733
|
return options.map((option) => (Object.assign(Object.assign({}, option), { id: option.id || generateId() })));
|
|
4726
4734
|
}
|
|
4727
4735
|
|
|
4736
|
+
/*
|
|
4737
|
+
* Request status: https://hl7.org/fhir/valueset-request-status.html
|
|
4738
|
+
* draft, active, on-hold, revoked, completed, entered-in-error, unknown
|
|
4739
|
+
*
|
|
4740
|
+
* Publication status: https://hl7.org/fhir/valueset-publication-status.html
|
|
4741
|
+
* draft, active, retired, unknown
|
|
4742
|
+
*
|
|
4743
|
+
* Observation status: https://www.hl7.org/fhir/valueset-observation-status.html
|
|
4744
|
+
* registered, preliminary, final, amended, cancelled, entered-in-error, unknown
|
|
4745
|
+
*
|
|
4746
|
+
* DiagnosticReport status: https://hl7.org/fhir/valueset-diagnostic-report-status.html
|
|
4747
|
+
* registered, preliminary, final, amended, corrected, appended, cancelled, entered-in-error, unknown
|
|
4748
|
+
*
|
|
4749
|
+
* Task status: https://hl7.org/fhir/valueset-task-status.html
|
|
4750
|
+
* draft, requested, received, accepted, rejected, ready, cancelled, in-progress, on-hold, failed, completed, entered-in-error
|
|
4751
|
+
*
|
|
4752
|
+
* Appointment status: https://www.hl7.org/fhir/valueset-appointmentstatus.html
|
|
4753
|
+
* proposed, pending, booked, arrived, fulfilled, cancelled, noshow, entered-in-error, chcked-in, waitlist
|
|
4754
|
+
*/
|
|
4755
|
+
const statusToColor = {
|
|
4756
|
+
draft: 'blue',
|
|
4757
|
+
active: 'blue',
|
|
4758
|
+
'on-hold': 'yellow',
|
|
4759
|
+
revoked: 'red',
|
|
4760
|
+
completed: 'green',
|
|
4761
|
+
'entered-in-error': 'red',
|
|
4762
|
+
unknown: 'gray',
|
|
4763
|
+
retired: 'gray',
|
|
4764
|
+
registered: 'blue',
|
|
4765
|
+
preliminary: 'blue',
|
|
4766
|
+
final: 'green',
|
|
4767
|
+
amended: 'yellow',
|
|
4768
|
+
cancelled: 'red',
|
|
4769
|
+
requested: 'blue',
|
|
4770
|
+
received: 'blue',
|
|
4771
|
+
accepted: 'blue',
|
|
4772
|
+
rejected: 'red',
|
|
4773
|
+
ready: 'blue',
|
|
4774
|
+
'in-progress': 'blue',
|
|
4775
|
+
failed: 'red',
|
|
4776
|
+
proposed: 'blue',
|
|
4777
|
+
pending: 'blue',
|
|
4778
|
+
booked: 'blue',
|
|
4779
|
+
arrived: 'blue',
|
|
4780
|
+
fulfilled: 'green',
|
|
4781
|
+
noshow: 'red',
|
|
4782
|
+
'checked-in': 'blue',
|
|
4783
|
+
waitlist: 'gray',
|
|
4784
|
+
routine: 'gray',
|
|
4785
|
+
urgent: 'red',
|
|
4786
|
+
asap: 'red',
|
|
4787
|
+
stat: 'red',
|
|
4788
|
+
};
|
|
4728
4789
|
function StatusBadge(props) {
|
|
4729
|
-
return React__default["default"].createElement(
|
|
4790
|
+
return React__default["default"].createElement(core$1.Badge, { color: statusToColor[props.status] }, props.status);
|
|
4730
4791
|
}
|
|
4731
4792
|
|
|
4732
4793
|
function RequestGroupDisplay(props) {
|
|
@@ -5071,7 +5132,7 @@
|
|
|
5071
5132
|
if (!value) {
|
|
5072
5133
|
return React__default["default"].createElement("div", null, "Loading...");
|
|
5073
5134
|
}
|
|
5074
|
-
return (React__default["default"].createElement(
|
|
5135
|
+
return (React__default["default"].createElement(core$1.Table, { withBorder: true, withColumnBorders: true },
|
|
5075
5136
|
React__default["default"].createElement("thead", null,
|
|
5076
5137
|
React__default["default"].createElement("tr", null,
|
|
5077
5138
|
React__default["default"].createElement("th", null, "Author"),
|
|
@@ -5311,56 +5372,6 @@
|
|
|
5311
5372
|
}) }));
|
|
5312
5373
|
}
|
|
5313
5374
|
|
|
5314
|
-
function Tab(props) {
|
|
5315
|
-
let className = 'medplum-tab';
|
|
5316
|
-
if (props.selected) {
|
|
5317
|
-
className += ' selected';
|
|
5318
|
-
}
|
|
5319
|
-
function clickHandler(e) {
|
|
5320
|
-
killEvent(e);
|
|
5321
|
-
// The onClick prop is set by TabBar as parent component.
|
|
5322
|
-
// Using Tab outside of a TabBar is unsupported.
|
|
5323
|
-
props.onClick(props.name, e.button);
|
|
5324
|
-
}
|
|
5325
|
-
return (React__default["default"].createElement("a", { href: `#${props.name}`, role: "tab", "aria-selected": props.selected, className: className, onClick: clickHandler, onAuxClick: clickHandler }, props.label));
|
|
5326
|
-
}
|
|
5327
|
-
|
|
5328
|
-
function TabList(props) {
|
|
5329
|
-
return (React__default["default"].createElement(Scrollable, { className: "medplum-surface", height: 50 },
|
|
5330
|
-
React__default["default"].createElement("div", { role: "tablist", className: "medplum-tablist" },
|
|
5331
|
-
React__default["default"].createElement("div", { className: "medplum-tablist-foreground" }, React__default["default"].Children.map(props.children, (child, tabIndex) => {
|
|
5332
|
-
if (React__default["default"].isValidElement(child) && child.type === Tab) {
|
|
5333
|
-
return React__default["default"].cloneElement(child, {
|
|
5334
|
-
selected: child.props.name === props.value,
|
|
5335
|
-
onClick: props.onChange,
|
|
5336
|
-
tabIndex,
|
|
5337
|
-
});
|
|
5338
|
-
}
|
|
5339
|
-
else {
|
|
5340
|
-
return null;
|
|
5341
|
-
}
|
|
5342
|
-
})))));
|
|
5343
|
-
}
|
|
5344
|
-
|
|
5345
|
-
function TabPanel(props) {
|
|
5346
|
-
return React__default["default"].createElement("div", { role: "tabpanel" }, props.children);
|
|
5347
|
-
}
|
|
5348
|
-
|
|
5349
|
-
function TabSwitch(props) {
|
|
5350
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].Children.map(props.children, (child) => {
|
|
5351
|
-
if (React__default["default"].isValidElement(child) && child.type === TabPanel && child.props.name === props.value) {
|
|
5352
|
-
return child;
|
|
5353
|
-
}
|
|
5354
|
-
else {
|
|
5355
|
-
return null;
|
|
5356
|
-
}
|
|
5357
|
-
})));
|
|
5358
|
-
}
|
|
5359
|
-
|
|
5360
|
-
function TitleBar(props) {
|
|
5361
|
-
return React__default["default"].createElement("div", { className: "medplum-title-bar" }, props.children);
|
|
5362
|
-
}
|
|
5363
|
-
|
|
5364
5375
|
exports.AddressDisplay = AddressDisplay;
|
|
5365
5376
|
exports.AddressInput = AddressInput;
|
|
5366
5377
|
exports.AttachmentArrayDisplay = AttachmentArrayDisplay;
|
|
@@ -5387,7 +5398,6 @@
|
|
|
5387
5398
|
exports.EncounterTimeline = EncounterTimeline;
|
|
5388
5399
|
exports.ErrorBoundary = ErrorBoundary;
|
|
5389
5400
|
exports.FhirPathTable = FhirPathTable;
|
|
5390
|
-
exports.FooterLinks = FooterLinks;
|
|
5391
5401
|
exports.Form = Form;
|
|
5392
5402
|
exports.FormSection = FormSection;
|
|
5393
5403
|
exports.HumanNameDisplay = HumanNameDisplay;
|
|
@@ -5424,7 +5434,6 @@
|
|
|
5424
5434
|
exports.ResourceTable = ResourceTable;
|
|
5425
5435
|
exports.ResourceTimeline = ResourceTimeline;
|
|
5426
5436
|
exports.Scheduler = Scheduler;
|
|
5427
|
-
exports.Scrollable = Scrollable;
|
|
5428
5437
|
exports.SearchChangeEvent = SearchChangeEvent;
|
|
5429
5438
|
exports.SearchClickEvent = SearchClickEvent;
|
|
5430
5439
|
exports.SearchControl = SearchControl;
|
|
@@ -5434,13 +5443,8 @@
|
|
|
5434
5443
|
exports.ServiceRequestTimeline = ServiceRequestTimeline;
|
|
5435
5444
|
exports.SignInForm = SignInForm;
|
|
5436
5445
|
exports.StatusBadge = StatusBadge;
|
|
5437
|
-
exports.Tab = Tab;
|
|
5438
|
-
exports.TabList = TabList;
|
|
5439
|
-
exports.TabPanel = TabPanel;
|
|
5440
|
-
exports.TabSwitch = TabSwitch;
|
|
5441
5446
|
exports.Timeline = Timeline;
|
|
5442
5447
|
exports.TimelineItem = TimelineItem;
|
|
5443
|
-
exports.TitleBar = TitleBar;
|
|
5444
5448
|
exports.addDateEqualsFilter = addDateEqualsFilter;
|
|
5445
5449
|
exports.addDateFilter = addDateFilter;
|
|
5446
5450
|
exports.addDateFilterBetween = addDateFilterBetween;
|