@tellescope/react-components 1.204.2 → 1.206.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.
Files changed (53) hide show
  1. package/lib/cjs/Forms/form_responses.d.ts +6 -2
  2. package/lib/cjs/Forms/form_responses.d.ts.map +1 -1
  3. package/lib/cjs/Forms/form_responses.js +8 -7
  4. package/lib/cjs/Forms/form_responses.js.map +1 -1
  5. package/lib/cjs/Forms/forms.d.ts +4 -1
  6. package/lib/cjs/Forms/forms.d.ts.map +1 -1
  7. package/lib/cjs/Forms/forms.js +6 -6
  8. package/lib/cjs/Forms/forms.js.map +1 -1
  9. package/lib/cjs/Forms/hooks.d.ts.map +1 -1
  10. package/lib/cjs/Forms/hooks.js +10 -2
  11. package/lib/cjs/Forms/hooks.js.map +1 -1
  12. package/lib/cjs/Forms/inputs.d.ts +8 -3
  13. package/lib/cjs/Forms/inputs.d.ts.map +1 -1
  14. package/lib/cjs/Forms/inputs.js +53 -35
  15. package/lib/cjs/Forms/inputs.js.map +1 -1
  16. package/lib/cjs/displays.d.ts +2 -0
  17. package/lib/cjs/displays.d.ts.map +1 -1
  18. package/lib/cjs/displays.js.map +1 -1
  19. package/lib/cjs/layout.d.ts +2 -1
  20. package/lib/cjs/layout.d.ts.map +1 -1
  21. package/lib/cjs/layout.js +2 -2
  22. package/lib/cjs/layout.js.map +1 -1
  23. package/lib/esm/Forms/form_responses.d.ts +6 -2
  24. package/lib/esm/Forms/form_responses.d.ts.map +1 -1
  25. package/lib/esm/Forms/form_responses.js +8 -7
  26. package/lib/esm/Forms/form_responses.js.map +1 -1
  27. package/lib/esm/Forms/forms.d.ts +4 -1
  28. package/lib/esm/Forms/forms.d.ts.map +1 -1
  29. package/lib/esm/Forms/forms.js +6 -6
  30. package/lib/esm/Forms/forms.js.map +1 -1
  31. package/lib/esm/Forms/hooks.d.ts.map +1 -1
  32. package/lib/esm/Forms/hooks.js +10 -2
  33. package/lib/esm/Forms/hooks.js.map +1 -1
  34. package/lib/esm/Forms/inputs.d.ts +8 -3
  35. package/lib/esm/Forms/inputs.d.ts.map +1 -1
  36. package/lib/esm/Forms/inputs.js +54 -36
  37. package/lib/esm/Forms/inputs.js.map +1 -1
  38. package/lib/esm/displays.d.ts +2 -0
  39. package/lib/esm/displays.d.ts.map +1 -1
  40. package/lib/esm/displays.js.map +1 -1
  41. package/lib/esm/layout.d.ts +2 -1
  42. package/lib/esm/layout.d.ts.map +1 -1
  43. package/lib/esm/layout.js +2 -2
  44. package/lib/esm/layout.js.map +1 -1
  45. package/lib/esm/state.d.ts +8 -8
  46. package/lib/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +9 -9
  48. package/src/Forms/form_responses.tsx +9 -8
  49. package/src/Forms/forms.tsx +9 -1
  50. package/src/Forms/hooks.tsx +9 -2
  51. package/src/Forms/inputs.tsx +41 -7
  52. package/src/displays.tsx +2 -0
  53. package/src/layout.tsx +3 -2
@@ -75,7 +75,7 @@ import axios from "axios";
75
75
  import { Autocomplete, Box, Button, Checkbox, Chip, Divider, FormControl, FormControlLabel, FormLabel, Grid, InputLabel, MenuItem, Radio, RadioGroup, Select, TextField, Typography } from "@mui/material";
76
76
  import { useDropzone } from "react-dropzone";
77
77
  import { CANVAS_TITLE, EMOTII_TITLE, INSURANCE_RELATIONSHIPS, INSURANCE_RELATIONSHIPS_CANVAS, PRIMARY_HEX, RELATIONSHIP_TYPES, TELLESCOPE_GENDERS } from "@tellescope/constants";
78
- import { MM_DD_YYYY_to_YYYY_MM_DD, capture_is_supported, downloadFile, first_letter_capitalized, form_response_value_to_string, getLocalTimezone, getPublicFileURL, mm_dd_yyyy, replace_enduser_template_values, truncate_string, user_display_name } from "@tellescope/utilities";
78
+ import { MM_DD_YYYY_to_YYYY_MM_DD, capture_is_supported, downloadFile, emit_gtm_event, first_letter_capitalized, form_response_value_to_string, getLocalTimezone, getPublicFileURL, mm_dd_yyyy, replace_enduser_template_values, truncate_string, user_display_name } from "@tellescope/utilities";
79
79
  import { VALID_STATES, emailValidator, phoneValidator } from "@tellescope/validation";
80
80
  import Slider from '@mui/material/Slider';
81
81
  import LinearProgress from '@mui/material/LinearProgress';
@@ -318,7 +318,7 @@ export var NumberInput = function (_a) {
318
318
  };
319
319
  export var InsuranceInput = function (_a) {
320
320
  var _b, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
321
- var field = _a.field, value = _a.value, onChange = _a.onChange, form = _a.form, responses = _a.responses, enduser = _a.enduser, props = __rest(_a, ["field", "value", "onChange", "form", "responses", "enduser"]);
321
+ var field = _a.field, onDatabaseSelect = _a.onDatabaseSelect, value = _a.value, onChange = _a.onChange, form = _a.form, responses = _a.responses, enduser = _a.enduser, props = __rest(_a, ["field", "onDatabaseSelect", "value", "onChange", "form", "responses", "enduser"]);
322
322
  var session = useResolvedSession();
323
323
  var _t = useState([]), payers = _t[0], setPayers = _t[1];
324
324
  var _u = useState(''), query = _u[0], setQuery = _u[1];
@@ -357,6 +357,7 @@ export var InsuranceInput = function (_a) {
357
357
  name: ((_e = (_d = c.values.find(function (v) { var _a, _b; return ((_b = (_a = v.label) === null || _a === void 0 ? void 0 : _a.trim()) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'name'; })) === null || _d === void 0 ? void 0 : _d.value) === null || _e === void 0 ? void 0 : _e.toString()) || '',
358
358
  state: ((_g = (_f = c.values.find(function (v) { var _a, _b; return ((_b = (_a = v.label) === null || _a === void 0 ? void 0 : _a.trim()) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'state'; })) === null || _f === void 0 ? void 0 : _f.value) === null || _g === void 0 ? void 0 : _g.toString()) || '',
359
359
  type: ((_j = (_h = c.values.find(function (v) { var _a, _b; return ((_b = (_a = v.label) === null || _a === void 0 ? void 0 : _a.trim()) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'type'; })) === null || _h === void 0 ? void 0 : _h.value) === null || _j === void 0 ? void 0 : _j.toString()) || '',
360
+ databaseRecord: c,
360
361
  });
361
362
  })
362
363
  .filter(function (c) { return !c.state || !state || (c.state === state); }));
@@ -401,11 +402,15 @@ export var InsuranceInput = function (_a) {
401
402
  setQuery(v);
402
403
  } }
403
404
  : function (e, v) {
404
- var _a, _b;
405
+ var _a, _b, _d;
405
406
  if (v) {
406
407
  setQuery(v);
407
408
  }
408
- onChange(__assign(__assign({}, value), { payerName: v || '', payerId: ((_a = payers.find(function (p) { return p.name === v; })) === null || _a === void 0 ? void 0 : _a.id) || '', payerType: ((_b = payers.find(function (p) { return p.name === v; })) === null || _b === void 0 ? void 0 : _b.type) || '' }), field.id);
409
+ var databaseRecord = (_a = payers.find(function (p) { return p.name === v; })) === null || _a === void 0 ? void 0 : _a.databaseRecord;
410
+ if (databaseRecord) {
411
+ onDatabaseSelect === null || onDatabaseSelect === void 0 ? void 0 : onDatabaseSelect([databaseRecord]);
412
+ }
413
+ onChange(__assign(__assign({}, value), { payerName: v || '', payerId: ((_b = payers.find(function (p) { return p.name === v; })) === null || _b === void 0 ? void 0 : _b.id) || '', payerType: ((_d = payers.find(function (p) { return p.name === v; })) === null || _d === void 0 ? void 0 : _d.type) || '' }), field.id);
409
414
  }, renderInput: function (params) {
410
415
  var _a;
411
416
  return (_jsx(TextField, __assign({}, params, { InputProps: __assign(__assign({}, params.InputProps), { sx: defaultInputProps.sx }), required: !field.isOptional, size: "small", label: "Insurer", placeholder: ((_a = field.options) === null || _a === void 0 ? void 0 : _a.dataSource) === CANVAS_TITLE ? "Search insurer..." : "Insurer" })));
@@ -937,7 +942,17 @@ var useDatabaseChoices = function (_a) {
937
942
  preventRefetch[databaseId + field.id + lastId] = false;
938
943
  });
939
944
  }, [session, field, databaseId, renderCount]);
945
+ var addChoice = useCallback(function (record) {
946
+ if (!choicesForDatabase[databaseId]) {
947
+ choicesForDatabase[databaseId] = {
948
+ done: false,
949
+ records: [],
950
+ };
951
+ }
952
+ choicesForDatabase[databaseId].records.push(record);
953
+ }, [choicesForDatabase, databaseId]);
940
954
  return {
955
+ addChoice: addChoice,
941
956
  doneLoading: (_d = (_b = choicesForDatabase[databaseId]) === null || _b === void 0 ? void 0 : _b.done) !== null && _d !== void 0 ? _d : false,
942
957
  choices: __spreadArray(__spreadArray([], (_f = (_e = choicesForDatabase[databaseId]) === null || _e === void 0 ? void 0 : _e.records) !== null && _f !== void 0 ? _f : [], true), (otherAnswers || []).map(function (v) {
943
958
  var _a;
@@ -978,14 +993,14 @@ var get_other_answers = function (_value, typing) {
978
993
  return [];
979
994
  };
980
995
  export var DatabaseSelectInput = function (_a) {
981
- var _b, _d, _e, _f;
982
- var field = _a.field, _value = _a.value, onChange = _a.onChange, onDatabaseSelect = _a.onDatabaseSelect, responses = _a.responses, size = _a.size, disabled = _a.disabled;
983
- var _g = useState(''), typing = _g[0], setTyping = _g[1];
984
- var _h = useDatabaseChoices({
996
+ var _b, _d, _e, _f, _g, _h;
997
+ var AddToDatabase = _a.AddToDatabase, field = _a.field, _value = _a.value, onChange = _a.onChange, onDatabaseSelect = _a.onDatabaseSelect, responses = _a.responses, size = _a.size, disabled = _a.disabled;
998
+ var _j = useState(''), typing = _j[0], setTyping = _j[1];
999
+ var _k = useDatabaseChoices({
985
1000
  databaseId: (_b = field.options) === null || _b === void 0 ? void 0 : _b.databaseId,
986
1001
  field: field,
987
1002
  otherAnswers: get_other_answers(_value, ((_d = field === null || field === void 0 ? void 0 : field.options) === null || _d === void 0 ? void 0 : _d.other) ? typing : undefined),
988
- }), choices = _h.choices, doneLoading = _h.doneLoading;
1003
+ }), addChoice = _k.addChoice, choices = _k.choices, doneLoading = _k.doneLoading;
989
1004
  var value = React.useMemo(function () {
990
1005
  var _a, _b;
991
1006
  try {
@@ -1058,32 +1073,34 @@ export var DatabaseSelectInput = function (_a) {
1058
1073
  }, [field, filteredChoicesWithPotentialDuplicates]);
1059
1074
  if (!doneLoading)
1060
1075
  return _jsx(LinearProgress, {});
1061
- return (_jsx(Autocomplete, { id: field.id, freeSolo: false, size: size, componentsProps: { popper: { sx: { wordBreak: "break-word" } } }, options: filteredChoices, multiple: true, getOptionLabel: function (o) { return (Array.isArray(o) // edge case
1062
- ? ''
1063
- : label_for_database_record(field, o)); }, value: value, disabled: disabled, onChange: function (_, v) {
1064
- var _a, _b, _d, _e;
1065
- if (v.length && onDatabaseSelect) {
1066
- onDatabaseSelect(v);
1067
- }
1068
- return onChange((!((_a = field.options) === null || _a === void 0 ? void 0 : _a.radio)
1069
- ? v.map(function (_v) {
1070
- var _a;
1071
- return ({
1072
- databaseId: (_a = field.options) === null || _a === void 0 ? void 0 : _a.databaseId,
1073
- recordId: _v.id,
1074
- text: label_for_database_record(field, _v),
1075
- });
1076
- })
1077
- : [{
1078
- databaseId: (_b = field.options) === null || _b === void 0 ? void 0 : _b.databaseId,
1079
- recordId: (_e = (_d = v[v.length - 1]) === null || _d === void 0 ? void 0 : _d.id) !== null && _e !== void 0 ? _e : '',
1080
- text: label_for_database_record(field, v[v.length - 1]),
1081
- }]), field.id);
1082
- }, inputValue: typing, onInputChange: function (e, v) { return e && setTyping(v); }, renderInput: function (params) { return _jsx(TextField, __assign({}, params, { InputProps: __assign(__assign({}, params.InputProps), { sx: defaultInputProps.sx }) })); },
1083
- // use custom Chip to ensure very long entries break properly (whitespace: normal)
1084
- renderTags: function (value, getTagProps) {
1085
- return value.map(function (value, index) { return (_jsx(Chip, __assign({ label: _jsx(Typography, __assign({ style: { whiteSpace: 'normal' } }, { children: Array.isArray(value) ? '' : label_for_database_record(field, value) })) }, getTagProps({ index: index }), { sx: { height: "100%", py: 0.5 } }))); });
1086
- } }));
1076
+ return (_jsxs(_Fragment, { children: [_jsx(Autocomplete, { id: field.id, freeSolo: false, size: size, componentsProps: { popper: { sx: { wordBreak: "break-word" } } }, options: filteredChoices, multiple: true, getOptionLabel: function (o) { return (Array.isArray(o) // edge case
1077
+ ? ''
1078
+ : label_for_database_record(field, o)); }, value: value, disabled: disabled, onChange: function (_, v) {
1079
+ var _a, _b, _d, _e, _f;
1080
+ if (v.length && onDatabaseSelect) {
1081
+ onDatabaseSelect(((_a = field.options) === null || _a === void 0 ? void 0 : _a.radio)
1082
+ ? [v[v.length - 1]] // if radio, only last selected
1083
+ : v);
1084
+ }
1085
+ return onChange((!((_b = field.options) === null || _b === void 0 ? void 0 : _b.radio)
1086
+ ? v.map(function (_v) {
1087
+ var _a;
1088
+ return ({
1089
+ databaseId: (_a = field.options) === null || _a === void 0 ? void 0 : _a.databaseId,
1090
+ recordId: _v.id,
1091
+ text: label_for_database_record(field, _v),
1092
+ });
1093
+ })
1094
+ : [{
1095
+ databaseId: (_d = field.options) === null || _d === void 0 ? void 0 : _d.databaseId,
1096
+ recordId: (_f = (_e = v[v.length - 1]) === null || _e === void 0 ? void 0 : _e.id) !== null && _f !== void 0 ? _f : '',
1097
+ text: label_for_database_record(field, v[v.length - 1]),
1098
+ }]), field.id);
1099
+ }, inputValue: typing, onInputChange: function (e, v) { return e && setTyping(v); }, renderInput: function (params) { return _jsx(TextField, __assign({}, params, { InputProps: __assign(__assign({}, params.InputProps), { sx: defaultInputProps.sx }) })); },
1100
+ // use custom Chip to ensure very long entries break properly (whitespace: normal)
1101
+ renderTags: function (value, getTagProps) {
1102
+ return value.map(function (value, index) { return (_jsx(Chip, __assign({ label: _jsx(Typography, __assign({ style: { whiteSpace: 'normal' } }, { children: Array.isArray(value) ? '' : label_for_database_record(field, value) })) }, getTagProps({ index: index }), { sx: { height: "100%", py: 0.5 } }))); });
1103
+ } }), AddToDatabase && ((_g = field === null || field === void 0 ? void 0 : field.options) === null || _g === void 0 ? void 0 : _g.allowAddToDatabase) && (_jsx(AddToDatabase, { databaseId: (_h = field.options) === null || _h === void 0 ? void 0 : _h.databaseId, onAdd: addChoice }))] }));
1087
1104
  };
1088
1105
  var displayTermsCache = undefined;
1089
1106
  var DRUGS_FOR_DISPLAY_TERM = {};
@@ -1549,6 +1566,7 @@ export var AppointmentBookingInput = function (_a) {
1549
1566
  && typeof ((_b = m === null || m === void 0 ? void 0 : m.data) === null || _b === void 0 ? void 0 : _b.bookedEventId) === 'string'
1550
1567
  && (!((_d = m === null || m === void 0 ? void 0 : m.data) === null || _d === void 0 ? void 0 : _d.entropy) || ((_e = m === null || m === void 0 ? void 0 : m.data) === null || _e === void 0 ? void 0 : _e.entropy) === (loaded === null || loaded === void 0 ? void 0 : loaded.entropy))) {
1551
1568
  onChange(m.data.bookedEventId, field.id);
1569
+ emit_gtm_event({ event: 'form_progress', fieldId: field.id, formId: field.formId, title: field.title, status: "Appointment Booked" });
1552
1570
  }
1553
1571
  if (((_f = m === null || m === void 0 ? void 0 : m.data) === null || _f === void 0 ? void 0 : _f.type) === 'CalendarPicker') {
1554
1572
  setHeight(750);
@@ -1565,7 +1583,7 @@ export var AppointmentBookingInput = function (_a) {
1565
1583
  };
1566
1584
  window.addEventListener('message', handleMessage);
1567
1585
  return function () { window.removeEventListener('message', handleMessage); };
1568
- }, [field === null || field === void 0 ? void 0 : field.id, onChange, acknowledgedWarning, value, loaded === null || loaded === void 0 ? void 0 : loaded.entropy]);
1586
+ }, [field === null || field === void 0 ? void 0 : field.id, field === null || field === void 0 ? void 0 : field.formId, field === null || field === void 0 ? void 0 : field.title, onChange, acknowledgedWarning, value, loaded === null || loaded === void 0 ? void 0 : loaded.entropy]);
1569
1587
  if (value) {
1570
1588
  return (_jsxs(Grid, __assign({ container: true, direction: "column", spacing: 1 }, { children: [_jsx(Grid, __assign({ item: true }, { children: _jsxs(Grid, __assign({ container: true, alignItems: "center", wrap: "nowrap" }, { children: [_jsx(CheckCircleOutline, { color: "success" }), _jsx(Typography, __assign({ sx: { ml: 1, fontSize: 20 } }, { children: "Your appointment has been booked" }))] })) })), _jsx(Grid, __assign({ item: true, sx: { maxWidth: 250 } }, { children: _jsx(LoadingButton, { variant: "contained", style: { maxWidth: 250 }, submitText: "Add to Calendar", submittingText: "Downloading...", onClick: function () { return downloadICS({ id: value }); } }) }))] })));
1571
1589
  }