@luscii-healthtech/web-ui 2.20.0 → 2.20.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.
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import { type FieldValues } from "react-hook-form/dist/index.ie11";
2
3
  import { FormProps, GenericFormProps } from "./form.types";
3
4
  /**
4
5
  * Create a straight forward Form, which takes away the 'overhead' of react-hook-form.
@@ -8,7 +9,7 @@ import { FormProps, GenericFormProps } from "./form.types";
8
9
  *
9
10
  * TODO: make the buttons configurable.
10
11
  */
11
- export declare function GenericForm<TFieldValues>({ fields, onValid, onError, defaultValues, }: GenericFormProps<TFieldValues>): JSX.Element;
12
+ export declare function GenericForm<TFieldValues extends FieldValues>({ fields, onValid, onError, defaultValues, }: GenericFormProps<TFieldValues>): JSX.Element;
12
13
  /**
13
14
  * Creates a Form based on the fields input.
14
15
  *
@@ -16,4 +17,4 @@ export declare function GenericForm<TFieldValues>({ fields, onValid, onError, de
16
17
  *
17
18
  * This allows you to use and modify the useFormReturn before injecting it here.
18
19
  */
19
- export declare function Form<TFieldValues, TContext>({ fields, useFormReturn, }: FormProps<TFieldValues, TContext>): JSX.Element;
20
+ export declare function Form<TFieldValues extends FieldValues>({ fields, useFormReturn, }: FormProps<TFieldValues>): JSX.Element;
@@ -1,3 +1,3 @@
1
- import { FieldErrors, RegisterOptions } from "react-hook-form";
1
+ import { FieldErrors, RegisterOptions } from "react-hook-form/dist/index.ie11";
2
2
  export declare const hasError: (name?: string, errors?: FieldErrors) => boolean;
3
3
  export declare const isRequired: (options?: RegisterOptions) => boolean;
@@ -1,4 +1,4 @@
1
- import { Control, DeepPartial, FieldErrors, FieldPath, FieldValues, RegisterOptions, SubmitErrorHandler, SubmitHandler, UseFormReturn } from "react-hook-form";
1
+ import { Control, DeepPartial, FieldErrors, FieldName, FieldValues, RegisterOptions, SubmitErrorHandler, SubmitHandler, UnpackNestedValue, UseFormMethods as UseFormReturn } from "react-hook-form/dist/index.ie11";
2
2
  import React, { HTMLInputTypeAttribute } from "react";
3
3
  import { InputProps } from "../Input/Input";
4
4
  import { RadioGroupProps } from "../RadioGroup/RadioGroupV2";
@@ -9,14 +9,14 @@ export interface GenericFormProps<TFieldValues extends FieldValues> {
9
9
  fields: FormFieldProps<TFieldValues>[];
10
10
  onValid: SubmitHandler<TFieldValues>;
11
11
  onError?: SubmitErrorHandler<TFieldValues>;
12
- defaultValues?: DeepPartial<TFieldValues>;
12
+ defaultValues?: UnpackNestedValue<DeepPartial<TFieldValues>>;
13
13
  }
14
- export interface FormProps<TFieldValues extends FieldValues, TContext> {
14
+ export interface FormProps<TFieldValues extends FieldValues> {
15
15
  fields: FormFieldProps<TFieldValues>[];
16
- useFormReturn: UseFormReturn<TFieldValues, TContext>;
16
+ useFormReturn: UseFormReturn<TFieldValues>;
17
17
  }
18
- interface FormFieldGenericProps<TFieldType, TFieldValues> extends FormFieldDecoratorProps {
19
- name: FieldPath<TFieldValues>;
18
+ interface FormFieldGenericProps<TFieldType> extends FormFieldDecoratorProps {
19
+ name: FieldName<FieldValues>;
20
20
  options?: RegisterOptions;
21
21
  fieldProps?: TFieldType;
22
22
  }
@@ -25,24 +25,24 @@ export interface FormFieldDecoratorProps {
25
25
  info?: string;
26
26
  decoratorClassname?: string;
27
27
  }
28
- export declare type FormFieldProps<TFieldValues> = FormFieldInputProps<TFieldValues> | FormFieldSelectProps<TFieldValues> | FormFieldImagePickerProps<TFieldValues> | FormFieldRadioGroupProps<TFieldValues> | FormFieldRowProps<TFieldValues>;
29
- export interface FormFieldRowProps<TFieldValues> extends Record<keyof FormFieldGenericProps<never, TFieldValues>, never> {
28
+ export declare type FormFieldProps<TFieldValues> = FormFieldInputProps | FormFieldSelectProps | FormFieldImagePickerProps | FormFieldRadioGroupProps | FormFieldRowProps<TFieldValues>;
29
+ export interface FormFieldRowProps<TFieldValues> extends Record<keyof FormFieldGenericProps<never>, never> {
30
30
  type: "row";
31
31
  key: string;
32
32
  fields: FormFieldProps<TFieldValues>[];
33
33
  }
34
- export interface FormFieldInputProps<TFieldValues> extends FormFieldGenericProps<Omit<InputProps, "name">, TFieldValues> {
34
+ export interface FormFieldInputProps extends FormFieldGenericProps<Omit<InputProps, "name">> {
35
35
  type: AllowedTextInputTypes;
36
36
  }
37
- export interface FormFieldRadioGroupProps<TFieldValues> extends FormFieldGenericProps<Omit<RadioGroupProps, "name">, TFieldValues> {
37
+ export interface FormFieldRadioGroupProps extends FormFieldGenericProps<Omit<RadioGroupProps, "name">> {
38
38
  type: "radioGroup";
39
39
  }
40
- export interface FormFieldSelectProps<TFieldValues> extends FormFieldGenericProps<SelectProps, TFieldValues> {
40
+ export interface FormFieldSelectProps extends FormFieldGenericProps<SelectProps> {
41
41
  type: "select";
42
42
  fieldProps: SelectProps;
43
43
  }
44
44
  declare type ImagePickerFieldProps = Omit<ImagePickerProps, "name" | "handleChange"> & Partial<Pick<ImagePickerProps, "handleChange">>;
45
- export interface FormFieldImagePickerProps<TFieldValues> extends FormFieldGenericProps<ImagePickerFieldProps, TFieldValues> {
45
+ export interface FormFieldImagePickerProps extends FormFieldGenericProps<ImagePickerFieldProps> {
46
46
  type: "imagePicker";
47
47
  fieldProps: ImagePickerFieldProps;
48
48
  }
@@ -58,6 +58,8 @@ export interface FormInputProps extends Omit<InputProps, "name">, FormFieldDecor
58
58
  type: Extract<HTMLInputTypeAttribute, "email" | "number" | "password" | "text">;
59
59
  }
60
60
  export interface FormRadioGroupProps extends Omit<RadioGroupProps, "name">, FormFieldDecoratorWithGeneratedProps {
61
+ control: Control;
62
+ rules?: Exclude<RegisterOptions, "valueAsNumber" | "valueAsDate" | "setValueAs">;
61
63
  }
62
64
  export interface FormSelectProps extends Omit<SelectProps, "name">, FormFieldDecoratorWithGeneratedProps {
63
65
  control: Control;
@@ -10,7 +10,7 @@ export declare const INPUT_TYPES: Record<string, AllowedTextInputTypes>;
10
10
  declare type CustomHTMLInputProps = Omit<React.HTMLProps<HTMLInputElement>, "onChange" | "ref"> & {
11
11
  isError?: boolean;
12
12
  };
13
- declare type FakeEventTarget = {
13
+ export declare type FakeEventTarget = {
14
14
  target: {
15
15
  value: string;
16
16
  name: string;
@@ -27,7 +27,29 @@ export interface InputProps extends CustomHTMLInputProps {
27
27
  withPrefix?: string;
28
28
  withSuffix?: string;
29
29
  icon?: React.VoidFunctionComponent<IconProps>;
30
- onChange?: (event: FakeEventTarget) => void;
30
+ /**
31
+ * Check the `asFormField` prop of this component to understand why this signature.
32
+ */
33
+ onChange?: (event: FakeEventTarget | string) => void;
34
+ /**
35
+ * ### TO BE USED WHEN INSIDE REACT-HOOK-FORM
36
+ *
37
+ * react-hook-form uses the onChange event differently.
38
+ * Instead of passing an `event` object, it uses the value itself from the callback.
39
+ *
40
+ * So we need to use this flag to determine how to call the onChange callback.
41
+ *
42
+ * @example
43
+ *
44
+ * // In react-hook-forms:
45
+ *
46
+ * onChange({target: { name: 'myInput' }, value: 'text'}) // -> this whole object will be set as the value
47
+ *
48
+ * // so instead do:
49
+ *
50
+ * onChange('text') // -> 🤝
51
+ */
52
+ asFormField?: boolean;
31
53
  }
32
54
  declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
33
55
  export default Input;
@@ -1517,10 +1517,6 @@ video {
1517
1517
  max-height: 19.5rem;
1518
1518
  }
1519
1519
 
1520
- .max-h-120 {
1521
- max-height: 30rem;
1522
- }
1523
-
1524
1520
  .max-h-135 {
1525
1521
  max-height: 33.75rem;
1526
1522
  }
@@ -28,7 +28,7 @@ var draftToHtml = _interopDefault(require('draftjs-to-html'));
28
28
  var htmlToDraft = _interopDefault(require('html-to-draftjs'));
29
29
  require('react-draft-wysiwyg/dist/react-draft-wysiwyg.css');
30
30
  var pick = _interopDefault(require('lodash/pick'));
31
- var reactHookForm = require('react-hook-form');
31
+ var index_ie11 = require('react-hook-form/dist/index.ie11');
32
32
  var errorMessage = require('@hookform/error-message');
33
33
  var reactLazyLoadImageComponent = require('react-lazy-load-image-component');
34
34
 
@@ -1354,7 +1354,7 @@ var SearchIcon = function SearchIcon(props) {
1354
1354
  var css_248z$5 = ".input::-ms-clear {\n display: none;\n}";
1355
1355
  styleInject(css_248z$5);
1356
1356
 
1357
- var _excluded$3 = ["withSuffix", "withPrefix", "className", "clearable", "type", "isDisabled", "icon", "name", "value", "onChange", "isError"];
1357
+ var _excluded$3 = ["withSuffix", "withPrefix", "className", "clearable", "type", "isDisabled", "icon", "name", "value", "onChange", "isError", "asFormField"];
1358
1358
  // Don't know why yet but it can be fixed later.
1359
1359
 
1360
1360
  var INPUT_TYPES = {
@@ -1381,6 +1381,7 @@ var Input = /*#__PURE__*/React__default.forwardRef(function (_ref, ref) {
1381
1381
  value = _ref$value === void 0 ? "" : _ref$value,
1382
1382
  onChange = _ref.onChange,
1383
1383
  isError = _ref.isError,
1384
+ asFormField = _ref.asFormField,
1384
1385
  otherProps = _objectWithoutPropertiesLoose(_ref, _excluded$3);
1385
1386
 
1386
1387
  var hasNoExtraContent = withPrefix === "" && withSuffix === "";
@@ -1411,7 +1412,7 @@ var Input = /*#__PURE__*/React__default.forwardRef(function (_ref, ref) {
1411
1412
  var handleChangeEvent = function handleChangeEvent(event) {
1412
1413
  setInnerValue(event.currentTarget.value); // This allows backwards compatibility with our usages of the input
1413
1414
 
1414
- onChange == null ? void 0 : onChange({
1415
+ onChange == null ? void 0 : onChange(asFormField ? event.currentTarget.value : {
1415
1416
  target: {
1416
1417
  name: name || "",
1417
1418
  value: event.currentTarget.value
@@ -1691,7 +1692,7 @@ var AccordionList = function AccordionList(_ref) {
1691
1692
  value: searchString,
1692
1693
  placeholder: searchPlaceholder,
1693
1694
  onChange: function onChange(e) {
1694
- return setSearchString(e.currentTarget.value);
1695
+ setSearchString(typeof e === "string" ? e : e.currentTarget.value);
1695
1696
  }
1696
1697
  }), buttonProps && /*#__PURE__*/React__default.createElement("div", null, /*#__PURE__*/React__default.createElement(SecondaryButton, _extends({}, buttonProps)))), filteredAccordionItems.length ? /*#__PURE__*/React__default.createElement(Accordion, _extends({}, accordionProps, {
1697
1698
  items: filteredAccordionItems
@@ -6222,27 +6223,29 @@ var FormInput = /*#__PURE__*/React__default.forwardRef(function (_ref, innerRef)
6222
6223
  label: label,
6223
6224
  info: info,
6224
6225
  decoratorClassname: decoratorClassname
6225
- }, /*#__PURE__*/React__default.createElement(reactHookForm.Controller, {
6226
+ }, /*#__PURE__*/React__default.createElement(index_ie11.Controller, {
6226
6227
  name: name,
6227
6228
  control: control,
6228
6229
  rules: rules,
6229
- render: function render(_ref2) {
6230
- var field = _ref2.field;
6230
+ render: function render(field) {
6231
6231
  return /*#__PURE__*/React__default.createElement(Input, _extends({}, fieldProps, field, {
6232
6232
  isError: hasError(name, fieldErrors),
6233
+ asFormField: true,
6233
6234
  ref: innerRef
6234
6235
  }));
6235
6236
  }
6236
6237
  }));
6237
6238
  });
6238
6239
 
6239
- var _excluded$n = ["name", "fieldErrors", "fieldRequired", "label", "info", "decoratorClassname"];
6240
+ var _excluded$n = ["control", "name", "rules", "fieldErrors", "fieldRequired", "label", "info", "decoratorClassname"];
6240
6241
  /**
6241
6242
  * Radio Group that can be used in any react-hook-form context.
6242
6243
  */
6243
6244
 
6244
6245
  var FormRadioGroup = /*#__PURE__*/React__default.forwardRef(function (_ref, innerRef) {
6245
- var name = _ref.name,
6246
+ var control = _ref.control,
6247
+ name = _ref.name,
6248
+ rules = _ref.rules,
6246
6249
  fieldErrors = _ref.fieldErrors,
6247
6250
  fieldRequired = _ref.fieldRequired,
6248
6251
  label = _ref.label,
@@ -6257,11 +6260,22 @@ var FormRadioGroup = /*#__PURE__*/React__default.forwardRef(function (_ref, inne
6257
6260
  label: label,
6258
6261
  info: info,
6259
6262
  decoratorClassname: decoratorClassname
6260
- }, /*#__PURE__*/React__default.createElement(RadioGroupV2, _extends({}, fieldProps, {
6261
- isError: hasError(name, fieldErrors),
6262
- ref: innerRef,
6263
- name: name
6264
- })));
6263
+ }, /*#__PURE__*/React__default.createElement(index_ie11.Controller, {
6264
+ name: name,
6265
+ control: control,
6266
+ rules: rules,
6267
+ render: function render(_ref2) {
6268
+ var onChange = _ref2.onChange,
6269
+ value = _ref2.value;
6270
+ return /*#__PURE__*/React__default.createElement(RadioGroupV2, _extends({}, fieldProps, {
6271
+ isError: hasError(name, fieldErrors),
6272
+ ref: innerRef,
6273
+ name: name,
6274
+ onChange: onChange,
6275
+ defaultValue: value
6276
+ }));
6277
+ }
6278
+ }));
6265
6279
  });
6266
6280
 
6267
6281
  var _excluded$o = ["control", "name", "rules", "fieldErrors", "fieldRequired", "label", "info", "decoratorClassname"];
@@ -6284,12 +6298,11 @@ var FormSelect = /*#__PURE__*/React__default.forwardRef(function (_ref, innerRef
6284
6298
  label: label,
6285
6299
  info: info,
6286
6300
  decoratorClassname: decoratorClassname
6287
- }, /*#__PURE__*/React__default.createElement(reactHookForm.Controller, {
6301
+ }, /*#__PURE__*/React__default.createElement(index_ie11.Controller, {
6288
6302
  name: name,
6289
6303
  control: control,
6290
6304
  rules: rules,
6291
- render: function render(_ref2) {
6292
- var field = _ref2.field;
6305
+ render: function render(field) {
6293
6306
  return /*#__PURE__*/React__default.createElement(Select, _extends({}, selectProps, field, {
6294
6307
  isError: hasError(name, fieldErrors),
6295
6308
  ref: innerRef
@@ -6424,9 +6437,7 @@ var ImagePickerInner = function ImagePickerInner(_ref) {
6424
6437
  }, [preselectedImage]);
6425
6438
 
6426
6439
  var handleSearchChange = function handleSearchChange(event) {
6427
- var _event$target$value;
6428
-
6429
- var searchQuery = (_event$target$value = event.target.value) != null ? _event$target$value : "";
6440
+ var searchQuery = event.target.value;
6430
6441
  setSearch(searchQuery);
6431
6442
  setFilteredCategories(categories.filter(function (category) {
6432
6443
  return isSubstring(category.folder, searchQuery);
@@ -6585,6 +6596,7 @@ var ImagePickerInner = function ImagePickerInner(_ref) {
6585
6596
  }))), /*#__PURE__*/React__default.createElement(ModalBase, {
6586
6597
  size: "wide",
6587
6598
  onCloseClick: handleCloseModal,
6599
+ scrollableContent: true,
6588
6600
  footerTrailingComponents: {
6589
6601
  primaryButtonProps: {
6590
6602
  onClick: handleConfirmSelection,
@@ -6604,7 +6616,7 @@ var ImagePickerInner = function ImagePickerInner(_ref) {
6604
6616
  placeholder: localisation.search,
6605
6617
  onChange: handleSearchChange
6606
6618
  }), /*#__PURE__*/React__default.createElement("div", {
6607
- className: "flex flex-row flex-wrap items-center w-full overflow-y-auto max-h-120"
6619
+ className: "flex flex-row flex-wrap items-center w-full"
6608
6620
  }, filteredCategories == null ? void 0 : filteredCategories.map(function (category) {
6609
6621
  return /*#__PURE__*/React__default.createElement(ImageCategory, {
6610
6622
  category: category,
@@ -6644,14 +6656,13 @@ var FormImagePicker = /*#__PURE__*/React__default.forwardRef(function (_ref, inn
6644
6656
  label: label,
6645
6657
  info: info,
6646
6658
  decoratorClassname: decoratorClassname
6647
- }, /*#__PURE__*/React__default.createElement(reactHookForm.Controller, {
6659
+ }, /*#__PURE__*/React__default.createElement(index_ie11.Controller, {
6648
6660
  name: name,
6649
6661
  control: control,
6650
6662
  rules: rules,
6651
- render: function render(_ref2) {
6663
+ render: function render(field) {
6652
6664
  var _field$value;
6653
6665
 
6654
- var field = _ref2.field;
6655
6666
  React.useEffect(function () {
6656
6667
  if (fieldProps.preselectedImage && !field.value) {
6657
6668
  field.onChange({
@@ -6664,7 +6675,8 @@ var FormImagePicker = /*#__PURE__*/React__default.forwardRef(function (_ref, inn
6664
6675
  }, []);
6665
6676
  return /*#__PURE__*/React__default.createElement(ImagePicker, _extends({}, fieldProps, field, {
6666
6677
  handleChange: function handleChange(e) {
6667
- field.onChange(e);
6678
+ // On react-hook-forms v6, the onChange event wants the value only, not the event object.
6679
+ field.onChange(e.target.value);
6668
6680
  fieldProps == null ? void 0 : fieldProps.handleChange == null ? void 0 : fieldProps.handleChange(e);
6669
6681
  },
6670
6682
  preselectedImage: (_field$value = field.value) != null ? _field$value : fieldProps.preselectedImage,
@@ -6688,7 +6700,7 @@ function GenericForm(_ref) {
6688
6700
  onValid = _ref.onValid,
6689
6701
  onError = _ref.onError,
6690
6702
  defaultValues = _ref.defaultValues;
6691
- var useFormReturn = reactHookForm.useForm({
6703
+ var useFormReturn = index_ie11.useForm({
6692
6704
  criteriaMode: "all",
6693
6705
  defaultValues: defaultValues
6694
6706
  });
@@ -6733,8 +6745,7 @@ function FormFieldMapper(formFieldProps, useFormReturn) {
6733
6745
  _formFieldProps$field = formFieldProps.fieldProps,
6734
6746
  fieldProps = _formFieldProps$field === void 0 ? {} : _formFieldProps$field;
6735
6747
  var decoratorProps = pick(formFieldProps, ["label", "info", "decoratorClassname"]);
6736
- var register = useFormReturn.register,
6737
- control = useFormReturn.control,
6748
+ var control = useFormReturn.control,
6738
6749
  errors = useFormReturn.formState.errors;
6739
6750
 
6740
6751
  switch (type) {
@@ -6788,12 +6799,18 @@ function FormFieldMapper(formFieldProps, useFormReturn) {
6788
6799
  }));
6789
6800
 
6790
6801
  case "radioGroup":
6791
- return /*#__PURE__*/React__default.createElement(FormRadioGroup, _extends({
6792
- key: name
6793
- }, decoratorProps, {
6794
- fieldRequired: isRequired(options),
6795
- fieldErrors: errors
6796
- }, fieldProps, register(name, options)));
6802
+ {
6803
+ return /*#__PURE__*/React__default.createElement(FormRadioGroup, _extends({
6804
+ key: name
6805
+ }, decoratorProps, {
6806
+ fieldRequired: isRequired(options),
6807
+ fieldErrors: errors
6808
+ }, fieldProps, {
6809
+ name: name,
6810
+ rules: options,
6811
+ control: control
6812
+ }));
6813
+ }
6797
6814
 
6798
6815
  default:
6799
6816
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null);