@nwon/react-mui-hook-form 1.0.8 → 1.0.10

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.
@@ -5,4 +5,4 @@ import { InputAutocompleteProps } from "./InputAutocompleteInterfaces";
5
5
  *
6
6
  * @throws Error when FormContext is null.
7
7
  */
8
- export declare const InputAutocomplete: ({ formField, selectableOptions, multiSelect, noOptions, autoCompleteProps, }: InputAutocompleteProps) => JSX.Element;
8
+ export declare const InputAutocomplete: ({ formField, selectableOptions, noOptions, autoCompleteProps, checkboxesForMultiselect: renderCheckboxes, }: InputAutocompleteProps) => JSX.Element;
@@ -1,22 +1,17 @@
1
1
  import { AutocompleteProps, TextFieldProps } from "@mui/material";
2
2
  import { FormField, LabeledValue } from "../../inputTypes";
3
- interface InputAutocompleteBaseProps {
3
+ export interface InputAutocompleteProps {
4
4
  formField: FormField;
5
5
  selectableOptions: LabeledValue[];
6
6
  /**
7
7
  * Text that is displayed when there are no more options.
8
8
  */
9
9
  noOptions: string;
10
+ autoCompleteProps?: Partial<MuiAutoCompleteMultipleProps> | Partial<MuiAutoCompleteMultipleProps>;
11
+ /**
12
+ * Renders checkboxes next to the options.
13
+ */
14
+ checkboxesForMultiselect?: boolean;
10
15
  }
11
- export type MuiAutoCompleteNonMultipleProps = Omit<AutocompleteProps<TextFieldProps, false, undefined, undefined>, "multiple">;
12
- export type MuiAutoCompleteMultipleProps = Omit<AutocompleteProps<TextFieldProps, true, undefined, undefined>, "multiple">;
13
- interface InputAutocompleteMultipleProps extends InputAutocompleteBaseProps {
14
- multiSelect: true;
15
- autoCompleteProps?: MuiAutoCompleteMultipleProps;
16
- }
17
- interface InputAutocompleteNonMultipleProps extends InputAutocompleteBaseProps {
18
- multiSelect: false;
19
- autoCompleteProps?: MuiAutoCompleteNonMultipleProps;
20
- }
21
- export type InputAutocompleteProps = InputAutocompleteNonMultipleProps | InputAutocompleteMultipleProps;
22
- export {};
16
+ export type MuiAutoCompleteNonMultipleProps = AutocompleteProps<TextFieldProps, false, undefined, undefined>;
17
+ export type MuiAutoCompleteMultipleProps = AutocompleteProps<TextFieldProps, true, undefined, undefined>;
@@ -29,4 +29,4 @@ export { useHookFormContext } from "./formHelper/useHookFormContext";
29
29
  export { useMergedFormField } from "./formHelper/useMergedFormField";
30
30
  export { useSortedOptionsWithGroup } from "./formHelper/useSortedOptionsWithGroup";
31
31
  export { useTranslateString } from "./formHelper/useTranslateString";
32
- export type { FormField, FormFieldTranslated, LabeledValue, TranslatedValidate, } from "./inputTypes";
32
+ export type { FormField, FormFieldTranslated, LabeledValue, LabeledValueWithGrouping, TranslatedValidate, } from "./inputTypes";
@@ -4,4 +4,4 @@
4
4
  export { LoadingButton, LoadingButtonState, loadingButtonStateFromFormState, loadingButtonStateFromReactQueryMutationStatus, useLoadingButtonStateFromFormContext, } from "./LoadingButton";
5
5
  export type { LoadingButtonProps } from "./LoadingButton";
6
6
  export { HookFormProvider, InputAutocomplete, InputCheckbox, InputDatePicker, InputDateTimePicker, InputEmail, InputPasswordSet, InputRadio, InputSelect, InputSelectFromEnum, InputText, getFormError, syncSubmit, useHookForm, useHookFormContext, useMergedFormField, useSortedOptionsWithGroup, useTranslateString, } from "./formFields";
7
- export type { FieldNameGetter, FormField, FormFieldTranslated, FormReturn, FormSubmitHandler, FormSubmitHandlerAsync, InputAutocompleteProps, InputCheckboxProps, InputDatePickerProps, InputDateTimePickerProps, InputEmailProps, InputPasswordSetProps, InputRadioProps, InputSelectFromEnumProps, InputSelectProps, InputTextProps, LabeledValue, TranslatedString, TranslatedValidate, } from "./formFields/";
7
+ export type { FieldNameGetter, FormField, FormFieldTranslated, FormReturn, FormSubmitHandler, FormSubmitHandlerAsync, InputAutocompleteProps, InputCheckboxProps, InputDatePickerProps, InputDateTimePickerProps, InputEmailProps, InputPasswordSetProps, InputRadioProps, InputSelectFromEnumProps, InputSelectProps, InputTextProps, LabeledValue, LabeledValueWithGrouping, TranslatedString, TranslatedValidate, } from "./formFields/";
@@ -12,10 +12,12 @@ function ___$insertStyle(css) {
12
12
  import { LoadingButton as LoadingButton$1 } from '@mui/lab';
13
13
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
14
14
  import { useFormContext, FormProvider, useFormState, Controller, useForm } from 'react-hook-form';
15
- import { useFormControl, FormControl, InputLabel, OutlinedInput, FormHelperText, Autocomplete, TextField, FormControlLabel, Checkbox, Box, FormLabel, RadioGroup, Radio, Select, MenuItem, Stack, Tooltip, ListSubheader } from '@mui/material';
15
+ import { useFormControl, FormControl, InputLabel, OutlinedInput, FormHelperText, Autocomplete, Checkbox, TextField, FormControlLabel, Box, FormLabel, RadioGroup, Radio, Select, MenuItem, Stack, Tooltip, ListSubheader } from '@mui/material';
16
16
  import { uppercaseFirstLetter, assertTruthy, objectHasKey, rethrow } from '@nvon/baseline';
17
17
  import { useCallback, useMemo, useState, createElement } from 'react';
18
18
  import { t } from 'i18next';
19
+ import CheckBoxIcon from '@mui/icons-material/CheckBox';
20
+ import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';
19
21
  import { DatePicker, DateTimePicker } from '@mui/x-date-pickers';
20
22
  import { identity } from 'lodash-es';
21
23
 
@@ -283,12 +285,23 @@ const InputPasswordSet = ({
283
285
  });
284
286
  };
285
287
 
288
+ const icon = /*#__PURE__*/jsx(CheckBoxOutlineBlankIcon, {
289
+ fontSize: "small"
290
+ });
291
+ const checkedIcon = /*#__PURE__*/jsx(CheckBoxIcon, {
292
+ fontSize: "small"
293
+ });
294
+ /**
295
+ * Renders a MUI autocomplete input that is embedded in a react hook form context.
296
+ *
297
+ * @throws Error when FormContext is null.
298
+ */
286
299
  const InputAutocomplete = ({
287
300
  formField,
288
301
  selectableOptions,
289
- multiSelect,
290
302
  noOptions,
291
- autoCompleteProps
303
+ autoCompleteProps,
304
+ checkboxesForMultiselect: renderCheckboxes
292
305
  }) => {
293
306
  const form = useFormContext();
294
307
  if (!form) {
@@ -310,6 +323,7 @@ const InputAutocomplete = ({
310
323
  validate
311
324
  } = useMergedFormField(formField, formField.t);
312
325
  const value = watch(name);
326
+ const multiSelect = !!autoCompleteProps?.multiple;
313
327
  let valueToUse = value;
314
328
  if (!value) {
315
329
  valueToUse = multiSelect ? [] : "";
@@ -320,12 +334,14 @@ const InputAutocomplete = ({
320
334
  validate,
321
335
  disabled: muiFormControl?.disabled
322
336
  });
323
- const currentValue = useMemo(() => multiSelect ? selectableOptions.filter(o => {
324
- if (Array.isArray(valueToUse)) {
325
- return valueToUse.includes(o.value);
326
- }
327
- return valueToUse;
328
- }) : valueToUse, [multiSelect, selectableOptions, valueToUse]);
337
+ const currentValue = useMemo(() => {
338
+ return multiSelect ? selectableOptions.filter(o => {
339
+ if (Array.isArray(valueToUse)) {
340
+ return valueToUse.includes(o.value);
341
+ }
342
+ return selectableOptions.find(option => option.value === valueToUse);
343
+ }) : selectableOptions.find(option => option.value === valueToUse);
344
+ }, [multiSelect, selectableOptions, valueToUse]);
329
345
  return /*#__PURE__*/jsxs(FormControl, {
330
346
  error: !!error,
331
347
  required: required,
@@ -333,8 +349,19 @@ const InputAutocomplete = ({
333
349
  children: [/*#__PURE__*/jsx(Autocomplete, {
334
350
  options: selectableOptions,
335
351
  multiple: multiSelect,
336
- value: currentValue,
352
+ value: currentValue || "",
337
353
  label: label,
354
+ renderOption: multiSelect && renderCheckboxes ? (liProps, option) => /*#__PURE__*/jsxs("li", {
355
+ ...liProps,
356
+ children: [/*#__PURE__*/jsx(Checkbox, {
357
+ icon: icon,
358
+ checkedIcon: checkedIcon,
359
+ sx: {
360
+ mr: 2
361
+ },
362
+ checked: Array.isArray(currentValue) ? !!currentValue.find(item => item.value === option.label) : false
363
+ }), option.label]
364
+ }) : undefined,
338
365
  ...props,
339
366
  getOptionLabel: o => {
340
367
  if (objectHasKey(o, "label")) {
@@ -345,7 +372,7 @@ const InputAutocomplete = ({
345
372
  onChange: (e, selectedOption) => {
346
373
  if (Array.isArray(selectedOption)) {
347
374
  setValue(name, selectedOption.map(o => o.value));
348
- } else {
375
+ } else if (selectedOption) {
349
376
  setValue(name, selectedOption.value);
350
377
  }
351
378
  },
@@ -1 +1 @@
1
- {"version":3,"file":"packageExports.js","sources":["../../src/LoadingButton/LoadingButtonInterfaces.ts","../../src/LoadingButton/LoadingButton.tsx","../../src/LoadingButton/getLoadingButtonState.ts","../../src/formFields/HookFormProvider.tsx","../../src/formFields/errorMessages.ts","../../src/formFields/formHelper/getFormError.ts","../../src/formFields/formHelper/useTranslateString.ts","../../src/formFields/formHelper/useMergedFormField.ts","../../src/formFields/baseTypes/InputText/InputText.tsx","../../src/formFields/InputEmail/InputEmail.tsx","../../src/formFields/InputPasswordSet/InputPasswordSet.tsx","../../src/formFields/baseTypes/InputAutocomplete/InputAutocomplete.tsx","../../src/formFields/baseTypes/InputCheckbox/InputCheckbox.tsx","../../src/formFields/baseTypes/InputDatePicker/InputDatePicker.tsx","../../src/formFields/baseTypes/InputDateTimePicker/InputDateTimePicker.tsx","../../src/formFields/baseTypes/InputRadio/InputRadio.tsx","../../src/formFields/formHelper/useSortedOptionsWithGroup.ts","../../src/formFields/baseTypes/InputSelect/InputSelect.tsx","../../src/formFields/baseTypes/InputSelectFromEnum/InputSelectFromEnum.tsx","../../src/formFields/formHelper/syncSubmit.ts","../../src/formFields/formHelper/useHookForm.ts","../../src/formFields/formHelper/useHookFormContext.ts"],"sourcesContent":["import { LoadingButtonProps as MuiLoadingButtonProps } from \"@mui/lab\";\nimport { ReactElement } from \"react\";\n\nexport enum LoadingButtonState {\n Idle = \"idle\",\n Loading = \"loading\",\n Success = \"success\",\n}\n\ntype SelectedButtonProps = Omit<MuiLoadingButtonProps, \"children\">;\n\nexport interface LoadingButtonProps {\n buttonState: LoadingButtonState;\n /**\n * Button label.\n */\n buttonText: string;\n /**\n * Button label that is displayed on success.\n */\n buttonTextSuccess?: string;\n /**\n * Provide an icon that is displayed in front of the text\n * when state is successful.\n */\n successIcon?: JSX.Element | ReactElement;\n /**\n * Adjust the button when the state is any other than successful.\n */\n loadingButtonProps?: SelectedButtonProps;\n /**\n * Adjust the button when the state is successful.\n */\n loadingButtonPropsPropsSuccess?: SelectedButtonProps;\n}\n","import { LoadingButton as MuiLoadingButton } from \"@mui/lab\";\nimport {\n LoadingButtonProps,\n LoadingButtonState,\n} from \"./LoadingButtonInterfaces\";\n\n/**\n * A loading button component.\n */\nexport const LoadingButton = ({\n buttonText,\n buttonTextSuccess,\n loadingButtonProps,\n loadingButtonPropsPropsSuccess,\n buttonState,\n successIcon,\n}: LoadingButtonProps): JSX.Element => {\n const isSuccess = buttonState === LoadingButtonState.Success;\n\n const propsToSpread = isSuccess\n ? loadingButtonPropsPropsSuccess\n : loadingButtonProps;\n\n return (\n <MuiLoadingButton\n loading={buttonState === LoadingButtonState.Loading}\n disabled={buttonState !== LoadingButtonState.Idle}\n {...propsToSpread}\n >\n {buttonState === LoadingButtonState.Success ? (\n <>\n {successIcon ? successIcon : null}\n\n {buttonTextSuccess ? buttonTextSuccess : buttonText}\n </>\n ) : (\n buttonText\n )}\n </MuiLoadingButton>\n );\n};\n","import { FormState, useFormContext } from \"react-hook-form\";\nimport { LoadingButtonState } from \"./LoadingButtonInterfaces\";\n\n/**\n * Redefinition of mutation status defined by react query. By doing this\n * we don't need to import react-query in the package.\n */\ndeclare type MutationStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\n\n/**\n * Get loading button state from react-query mutation status.\n */\nexport const loadingButtonStateFromReactQueryMutationStatus = (\n mutationStatus: MutationStatus\n): LoadingButtonState => {\n const mapStatus: Record<MutationStatus, LoadingButtonState> = {\n idle: LoadingButtonState.Idle,\n error: LoadingButtonState.Idle,\n success: LoadingButtonState.Success,\n loading: LoadingButtonState.Loading,\n };\n\n return mapStatus[mutationStatus];\n};\n\n/**\n * Get loading button state from a react-hook-form context.\n */\nexport const useLoadingButtonStateFromFormContext = (): LoadingButtonState => {\n const formContext = useFormContext();\n\n return loadingButtonStateFromFormState(formContext.formState);\n};\n\n/**\n * Get loading button state from a react-hook-form state.\n */\nexport const loadingButtonStateFromFormState = (\n // we are not interested in the value types FormState holds\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formState: FormState<any>\n): LoadingButtonState => {\n if (formState.isSubmitting) {\n return LoadingButtonState.Loading;\n }\n\n if (formState.isDirty) {\n return LoadingButtonState.Idle;\n }\n\n if (formState.isSubmitSuccessful) {\n return LoadingButtonState.Success;\n }\n\n return LoadingButtonState.Idle;\n};\n","import { FormProvider } from \"react-hook-form\";\n\n/**\n * Reexport of FormProvider.\n *\n * This became necessary as context is not available when the FormProvider is initialized outside of the package. Most likely this is some kind of instance mismatch.\n */\nexport const HookFormProvider = FormProvider;\n","export const formContextNull =\n \"FormContext is null. This should not happen. You may need to use the HookFormProvider instead of the FormProvider exported by react-hook-form\";\n","import { AnyObject } from \"@nvon/baseline\";\nimport { FieldError, FormState } from \"react-hook-form\";\n\n/**\n * Get the field errors for a (possibly nested) field name.\n *\n * Checking `formState.errors[fieldName]` only works if fieldName is not a path\n * (e.g. Does not include dots).\n *\n * Did not find a built-in way to do this … there might be one though.\n */\nexport const getFormError = (\n errors: FormState<AnyObject>[\"errors\"],\n fieldName: string\n): FieldError | undefined => {\n const nestedKeys = fieldName.split(\".\");\n\n //\n // To my best knowledge, this works as expected.\n //\n // It recursively walks the error object by the given keys\n // until the lowest level is reached, or undefined returned.\n //\n // Typescript is just not very happy with the dynamic nature of this,\n // hence the errors.\n //\n\n /* eslint-disable @typescript-eslint/ban-ts-comment,@typescript-eslint/no-unsafe-return */\n // @ts-expect-error\n return nestedKeys.reduce(\n // @ts-expect-error\n (errorObj: FieldError | undefined, pathKey) => errorObj?.[pathKey],\n errors\n );\n /* eslint-enable */\n};\n","import { t, TFunction } from \"i18next\";\nimport { useCallback } from \"react\";\nimport { TranslatedString } from \"../TranslatedString\";\n\n/**\n * Return a function which turns our TranslatedString into a plain string.\n *\n * @throws Error if no t was provided but a translated string.\n */\nexport const useTranslateString = (): ((\n input: TranslatedString | string,\n t?: TFunction\n) => string) => {\n if (!t) {\n throw Error(\n \"If you pass in a translated validate function you need to provide a t\"\n );\n }\n\n return useCallback((input: TranslatedString | string) => {\n return typeof input === \"string\" ? input : input(t);\n }, []);\n};\n","import { uppercaseFirstLetter } from \"@nvon/baseline\";\nimport { TFunction } from \"i18next\";\nimport { useMemo } from \"react\";\nimport { RegisterOptions } from \"react-hook-form\";\nimport {\n FormField,\n FormFieldTranslated,\n TranslatedValidate,\n} from \"../inputTypes\";\nimport { useTranslateString } from \"./useTranslateString\";\n\n/**\n * Merge a form field with defaults.\n */\nexport const useMergedFormField = (\n /**\n * Form fields, typically those passed into a component.\n *\n */\n formField: FormField,\n t?: TFunction,\n /**\n * Additional defaults. Duplicate values will be overridden by the formField.\n */\n formFieldDefaults?: Partial<FormField>\n): FormFieldTranslated => {\n const translate = useTranslateString();\n\n const merged = useMemo(() => {\n const builtInDefaults = {\n label: uppercaseFirstLetter(formField.name),\n required: false,\n requiredErrorMessage: \"Please fill in required information\",\n validate: undefined,\n };\n\n return {\n ...builtInDefaults,\n ...formFieldDefaults,\n ...formField,\n };\n }, [formField, formFieldDefaults]);\n\n const withPlainStrings = useMemo(() => {\n // Translating the validate function is a bit tricky,\n // since it can be an object in both cases.\n const validate = (() => {\n if (\n typeof merged.validate === \"object\" &&\n typeof merged.validate.translated === \"function\"\n ) {\n if (!t) {\n throw Error(\n \"If you pass in a translated validate function you need to provide a t\"\n );\n }\n\n return (merged.validate.translated as TranslatedValidate)(t);\n }\n\n return merged.validate;\n })() as RegisterOptions[\"validate\"]; // This should be fine. Not sure why TS is complaining.\n\n return {\n ...merged,\n label: translate(merged.label, t),\n requiredErrorMessage: translate(merged.requiredErrorMessage, t),\n validate,\n };\n }, [merged, t, translate]);\n\n return withPlainStrings;\n};\n","import {\n FormControl,\n FormHelperText,\n InputLabel,\n OutlinedInput,\n OutlinedInputProps,\n useFormControl,\n} from \"@mui/material\";\nimport { useFormContext } from \"react-hook-form\";\nimport { formContextNull } from \"../../errorMessages\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField } from \"../../inputTypes\";\n\nexport interface InputTextProps {\n formField: FormField;\n textFieldProps?: Omit<OutlinedInputProps, \"required\" | \"label\">;\n}\n\n/**\n * Renders a MUI input text fields that is embedded in a react\n * hook form context.\n *\n * @throws Error when FormContext is null.\n */\nexport const InputText = ({\n formField,\n textFieldProps,\n}: InputTextProps): JSX.Element | null => {\n const form = useFormContext();\n const muiFormControl = useFormControl();\n\n const { label, name, required, requiredErrorMessage, validate } =\n useMergedFormField(formField, formField.t);\n\n if (!form) {\n throw Error(formContextNull);\n }\n\n const { register, formState } = form;\n const error = getFormError(formState.errors, formField.name);\n\n return (\n <FormControl\n error={!!error}\n required={required}\n disabled={muiFormControl?.disabled}\n >\n <InputLabel required={required}>{label}</InputLabel>\n\n <OutlinedInput\n {...register(name, {\n required: required ? requiredErrorMessage : false,\n validate,\n disabled: muiFormControl?.disabled,\n })}\n required={required}\n label={label}\n {...textFieldProps}\n />\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n );\n};\n","import { InputText, InputTextProps } from \"../baseTypes/InputText/InputText\";\nimport { useMergedFormField } from \"../formHelper/useMergedFormField\";\nimport { FormField } from \"../inputTypes\";\n\nexport interface InputEmailProps {\n formField: FormField;\n textFieldProps?: InputTextProps[\"textFieldProps\"];\n}\n\n/**\n * Renders a MUI input for an email address that is embedded in a react hook form context.\n */\nexport const InputEmail = (props: InputEmailProps): JSX.Element => {\n const merged = useMergedFormField(\n props.formField,\n props.formField.t,\n formDefaults\n );\n\n return (\n <InputText\n textFieldProps={{\n type: \"email\",\n ...props.textFieldProps,\n }}\n formField={merged}\n />\n );\n};\n\nconst formDefaults: Omit<FormField, \"name\" | \"t\"> = {\n required: true,\n validate: (emailInput: string) => {\n if (emailInput.match(/.@./)) {\n return true;\n }\n\n return \"E-Mail address invalid\";\n },\n};\n","import { useCallback } from \"react\";\nimport {\n RegisterOptions,\n useFormContext,\n ValidateResult,\n} from \"react-hook-form\";\nimport { InputText } from \"../baseTypes/InputText/InputText\";\nimport { useMergedFormField } from \"../formHelper/useMergedFormField\";\nimport { InputPasswordSetProps } from \"./InputPasswordSetInterfaces\";\n\n/**\n * Two fields for setting a password set: input & validation.\n *\n * Checks for equality of both.\n */\nexport const InputPasswordSet = ({\n passwordField,\n passwordValidationField,\n doNotMatchError,\n}: InputPasswordSetProps): JSX.Element => {\n const { watch } = useFormContext();\n\n const passwordFieldMerged = useMergedFormField(\n passwordField,\n passwordField.t,\n { required: true }\n );\n const validationFieldMerged = useMergedFormField(\n passwordValidationField,\n passwordValidationField.t,\n { required: true }\n );\n\n const validatePasswordMatch: RegisterOptions[\"validate\"] = useCallback(\n (value: string): ValidateResult => {\n const passwordValue = watch(passwordFieldMerged.name) as string;\n\n return value === passwordValue || doNotMatchError;\n },\n [doNotMatchError, passwordFieldMerged.name, watch]\n );\n\n return (\n <>\n <InputText\n formField={passwordFieldMerged}\n textFieldProps={{\n type: \"password\",\n }}\n />\n\n <InputText\n formField={{\n ...validationFieldMerged,\n validate: validatePasswordMatch,\n t: passwordValidationField.t,\n }}\n textFieldProps={{\n type: \"password\",\n }}\n />\n </>\n );\n};\n","import {\n Autocomplete,\n FormControl,\n FormHelperText,\n TextField,\n useFormControl,\n} from \"@mui/material\";\nimport { assertTruthy, objectHasKey } from \"@nvon/baseline\";\nimport { useMemo } from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { formContextNull } from \"../../errorMessages\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField, LabeledValue } from \"../../inputTypes\";\nimport { InputAutocompleteProps } from \"./InputAutocompleteInterfaces\";\n\n/**\n * Renders a MUI autocomplete input that is embedded in a react hook form context.\n *\n * @throws Error when FormContext is null.\n */\nexport const InputAutocomplete = ({\n formField,\n selectableOptions,\n multiSelect,\n noOptions,\n autoCompleteProps,\n}: InputAutocompleteProps): JSX.Element => {\n const form = useFormContext();\n\n if (!form) {\n throw Error(formContextNull);\n }\n\n const { register, watch, formState, setValue } = form;\n\n const error = getFormError(formState.errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required, requiredErrorMessage, validate }: FormField =\n useMergedFormField(formField, formField.t);\n\n const value = watch(name) as string | number | string[] | undefined;\n\n let valueToUse = value;\n if (!value) {\n valueToUse = multiSelect ? [] : \"\";\n }\n\n assertTruthy(\n [\"string\", \"number\", \"object\"].includes(typeof valueToUse),\n \"Value for select input has unexpected type\"\n );\n\n const props = register(name, {\n required: required ? requiredErrorMessage : false,\n validate,\n disabled: muiFormControl?.disabled,\n });\n\n const currentValue = useMemo(\n () =>\n multiSelect\n ? selectableOptions.filter((o) => {\n if (Array.isArray(valueToUse)) {\n return valueToUse.includes(o.value as never);\n }\n\n return valueToUse;\n })\n : valueToUse,\n [multiSelect, selectableOptions, valueToUse]\n );\n\n return (\n <FormControl\n error={!!error}\n required={required}\n disabled={muiFormControl?.disabled}\n >\n <Autocomplete\n options={selectableOptions}\n multiple={multiSelect}\n value={currentValue}\n label={label}\n {...props}\n getOptionLabel={(o) => {\n if (objectHasKey(o, \"label\")) {\n return o.label;\n }\n\n return \"\";\n }}\n onChange={(e, selectedOption: LabeledValue | LabeledValue[]) => {\n if (Array.isArray(selectedOption)) {\n setValue(\n name,\n selectedOption.map((o) => o.value)\n );\n } else {\n setValue(name, selectedOption.value);\n }\n }}\n noOptionsText={noOptions}\n renderInput={(params) => (\n <TextField {...params} label={label} variant=\"outlined\" />\n )}\n // need to parse this as any in order to get no typing errors\n // for multiselect\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n {...(autoCompleteProps as any)}\n />\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n );\n};\n","import {\n Checkbox,\n CheckboxProps,\n FormControl,\n FormControlLabel,\n FormControlLabelProps,\n FormHelperText,\n useFormControl,\n} from \"@mui/material\";\nimport { ChangeEvent, useCallback } from \"react\";\nimport { useFormContext, useFormState } from \"react-hook-form\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField } from \"../../inputTypes\";\n\nexport interface InputCheckboxProps {\n formField: FormField;\n checkboxProps?: Omit<CheckboxProps, \"checked\">;\n formControlLabelProps?: Omit<FormControlLabelProps, \"control\" | \"label\">;\n /**\n * In contrast to other FormFields,\n * the checkbox supports jsx elements as a label.\n *\n * If this is provided, formField.label will be ignored.\n */\n jsxLabel?: JSX.Element;\n}\n\n/**\n * Input for Checking a box indicating acceptance of something.\n */\nexport const InputCheckbox = ({\n formField,\n jsxLabel,\n checkboxProps,\n formControlLabelProps,\n}: InputCheckboxProps): JSX.Element => {\n const { register, watch, setValue } = useFormContext();\n const { errors } = useFormState();\n\n const error = getFormError(errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required, requiredErrorMessage, validate }: FormField =\n useMergedFormField(formField);\n\n const changeEv = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n setValue(name, e.target.checked, {\n shouldValidate: true,\n shouldDirty: true,\n shouldTouch: true,\n });\n },\n [name, setValue]\n );\n\n const id = `rvo-input-checkbox-${name}`;\n\n const registered = register(name, {\n required: required ? requiredErrorMessage : false,\n onChange: changeEv,\n validate,\n disabled: muiFormControl?.disabled,\n });\n\n const value = (watch(name, false) as boolean | undefined) ?? false;\n\n return (\n <FormControl error={!!error} disabled={muiFormControl?.disabled}>\n <FormControlLabel\n required={jsxLabel ? false : required} // If jsxLabel is set, we don't want to show the asterisk.\n control={\n <Checkbox\n checked={value}\n aria-labelledby={id}\n {...registered}\n {...checkboxProps}\n />\n }\n label={jsxLabel ?? label}\n {...formControlLabelProps}\n />\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n );\n};\n","import {\n Box,\n FormControl,\n FormHelperText,\n TextField,\n TextFieldProps,\n useFormControl,\n} from \"@mui/material\";\nimport {\n DatePicker,\n DatePickerProps as MuiDatePickerProps,\n} from \"@mui/x-date-pickers\";\nimport { useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField } from \"../../inputTypes\";\n\n/**\n * Mangled version of the original DatePickerProps type\n * from @mui/x-date-pickers.\n */\ninterface DatePickerProps\n extends Omit<\n MuiDatePickerProps<TextFieldProps, Date>,\n \"label\" | \"onChange\" | \"disabled\" | \"value\" | \"renderInput\"\n > {\n renderInput?: MuiDatePickerProps<TextFieldProps, Date>[\"renderInput\"];\n}\n\nexport interface InputDatePickerProps {\n formField: FormField;\n datePickerProps?: DatePickerProps;\n}\n\n/**\n * A Datetime picker that works with react hook form.\n */\nexport const InputDatePicker = ({\n formField,\n datePickerProps,\n}: InputDatePickerProps): JSX.Element => {\n const { formState, control } = useFormContext();\n const error = getFormError(formState.errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required } = useMergedFormField(formField);\n\n const [date, setDate] = useState<Date>(new Date());\n\n return (\n <Box>\n <FormControl\n error={!!error}\n required={required}\n disabled={muiFormControl?.disabled}\n >\n <Controller\n name={name}\n defaultValue={date}\n control={control}\n render={({ field: { onChange, ...restField } }) => (\n <DatePicker\n label={label}\n onChange={(event: Date | null) => {\n onChange(event);\n\n if (event) {\n setDate(event);\n }\n }}\n disabled={muiFormControl?.disabled}\n renderInput={\n datePickerProps?.renderInput\n ? datePickerProps.renderInput\n : (params) => <TextField required={required} {...params} />\n }\n {...restField}\n {...datePickerProps}\n />\n )}\n />\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n </Box>\n );\n};\n","import {\n Box,\n FormControl,\n FormHelperText,\n TextField,\n TextFieldProps,\n useFormControl,\n} from \"@mui/material\";\nimport {\n DateTimePicker,\n DateTimePickerProps as MuiDateTimePickerProps,\n} from \"@mui/x-date-pickers\";\nimport { useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField } from \"../../inputTypes\";\n\n/**\n * Mangled version of the original DateTimePickerProps type\n * from @mui/x-date-pickers.\n */\ninterface DateTimePickerProps\n extends Omit<\n MuiDateTimePickerProps<TextFieldProps, Date>,\n \"label\" | \"onChange\" | \"disabled\" | \"value\" | \"renderInput\"\n > {\n renderInput?: MuiDateTimePickerProps<TextFieldProps, Date>[\"renderInput\"];\n}\n\nexport interface InputDateTimePickerProps {\n formField: FormField;\n dateTimePickerProps?: DateTimePickerProps;\n}\n\n/**\n * A Datetime picker that works with react hook form.\n */\nexport const InputDateTimePicker = ({\n formField,\n dateTimePickerProps,\n}: InputDateTimePickerProps): JSX.Element => {\n const { formState, control } = useFormContext();\n const error = getFormError(formState.errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required } = useMergedFormField(formField);\n\n const [date, setDate] = useState<Date>(new Date());\n\n return (\n <Box>\n <FormControl\n error={!!error}\n required={required}\n disabled={muiFormControl?.disabled}\n >\n <Controller\n name={name}\n defaultValue={date}\n control={control}\n render={({ field: { onChange, ...restField } }) => (\n <DateTimePicker\n label={label}\n ampm={\n dateTimePickerProps?.ampm ? dateTimePickerProps.ampm : false\n }\n onChange={(event: Date | null) => {\n onChange(event);\n\n if (event) {\n setDate(event);\n }\n }}\n disabled={muiFormControl?.disabled}\n renderInput={\n dateTimePickerProps?.renderInput\n ? dateTimePickerProps?.renderInput\n : (params) => <TextField required={required} {...params} />\n }\n {...restField}\n {...dateTimePickerProps}\n />\n )}\n />\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n </Box>\n );\n};\n","import {\n FormControl,\n FormControlLabel,\n FormControlLabelProps,\n FormHelperText,\n FormLabel,\n Radio,\n RadioGroup,\n RadioGroupProps,\n useFormControl,\n} from \"@mui/material\";\nimport { assertTruthy } from \"@nvon/baseline\";\nimport { ChangeEvent, useCallback } from \"react\";\nimport { useFormContext, useFormState } from \"react-hook-form\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField, LabeledValue } from \"../../inputTypes\";\n\nexport interface InputRadioProps {\n formField: FormField;\n selectableOptions: LabeledValue[];\n formControlLabelProps?: FormControlLabelProps;\n radioGroupProps?: RadioGroupProps;\n}\n\n/**\n * Input for selecting between a list of options using radio buttons.\n */\nexport const InputRadio = ({\n formField,\n selectableOptions,\n formControlLabelProps,\n radioGroupProps,\n}: InputRadioProps): JSX.Element => {\n const { register, watch, setValue } = useFormContext();\n const { errors } = useFormState();\n\n const error = getFormError(errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required, requiredErrorMessage, validate }: FormField =\n useMergedFormField(formField);\n\n const changeEv = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n setValue(name, e.target.value, {\n shouldValidate: true,\n shouldDirty: true,\n shouldTouch: true,\n });\n },\n [name, setValue]\n );\n\n const value = (watch(name) as string | number | undefined) ?? \"\";\n\n assertTruthy(\n [\"string\", \"number\"].includes(typeof value),\n \"Value for select input has unexpected type\"\n );\n\n const id = `rvo-input-radio-${name}`;\n\n const registered = register(name, {\n required: required ? requiredErrorMessage : false,\n onChange: changeEv,\n validate,\n disabled: muiFormControl?.disabled,\n });\n\n return (\n <FormControl error={!!error} disabled={muiFormControl?.disabled}>\n <FormLabel id={id} required={required}>\n {label}\n </FormLabel>\n\n <RadioGroup value={value} aria-labelledby={id} {...radioGroupProps}>\n {selectableOptions?.map((option) => {\n return (\n <FormControlLabel\n {...registered}\n key={option.value}\n value={option.value}\n control={<Radio />}\n label={option.label}\n {...formControlLabelProps}\n />\n );\n })}\n </RadioGroup>\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n );\n};\n","import { useMemo } from \"react\";\nimport { LabeledValueWithGrouping } from \"../inputTypes\";\n\n/**\n * Sorts the options by group and value.\n */\nexport const useSortedOptionsWithGroup = (\n selectableOptions: LabeledValueWithGrouping[]\n): LabeledValueWithGrouping[] => {\n return useMemo(\n () =>\n selectableOptions.sort((a, b) => {\n if (a.group == undefined && !!b.group) {\n return -1;\n }\n\n if (a.group && b.group && a.group < b.group) {\n return -1;\n }\n\n if (a.group == b.group && b.value > a.value) {\n return 1;\n }\n\n return 0;\n }),\n [selectableOptions]\n );\n};\n","import {\n Box,\n FormControl,\n FormHelperText,\n InputLabel,\n ListSubheader,\n MenuItem,\n Select,\n SelectProps,\n Stack,\n Tooltip,\n useFormControl,\n} from \"@mui/material\";\nimport { assertTruthy } from \"@nvon/baseline\";\nimport { useFormContext } from \"react-hook-form\";\nimport { formContextNull } from \"../../errorMessages\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { useSortedOptionsWithGroup } from \"../../formHelper/useSortedOptionsWithGroup\";\nimport { FormField, LabeledValueWithGrouping } from \"../../inputTypes\";\n\nexport interface InputSelectProps {\n formField: FormField;\n selectableOptions: LabeledValueWithGrouping[];\n placeholderText: string;\n selectComponentProps?: Omit<\n SelectProps,\n \"labelId\" | \"error\" | \"label\" | \"value\"\n >;\n /**\n * Element that is rendered in the end of a select item and holds\n * a tooltip with the disabled message for this option.\n *\n * If none is given the element is disabled without rendering a tooltip.\n */\n tooltipHolder?: JSX.Element;\n}\n\n/**\n * Renders a MUI select based that is embedded in a react hook\n * form context.\n *\n * @throws Error when FormContext is null.\n */\nexport const InputSelect = ({\n formField,\n selectableOptions,\n placeholderText,\n selectComponentProps,\n tooltipHolder,\n}: InputSelectProps): JSX.Element => {\n const form = useFormContext();\n\n if (!form) {\n throw Error(formContextNull);\n }\n\n const { register, watch, formState } = form;\n\n const error = getFormError(formState.errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required, requiredErrorMessage, validate }: FormField =\n useMergedFormField(formField, formField.t);\n\n const defaultValue = selectComponentProps?.multiple ? [] : \"\";\n\n const value =\n (watch(name) as string | number | undefined | string[] | number[]) ??\n defaultValue;\n\n if (selectComponentProps?.multiple && value) {\n assertTruthy(\n Array.isArray(value),\n \"Value for multiple select need to be an array or undefined\"\n );\n } else if (value) {\n assertTruthy(\n [\"string\", \"number\"].includes(typeof value),\n \"Value for select input has unexpected type\"\n );\n }\n\n const id = `input-select-${name}`;\n const sortedOptions = useSortedOptionsWithGroup(selectableOptions);\n\n return (\n <FormControl\n error={!!error}\n required={required}\n disabled={muiFormControl?.disabled}\n >\n <InputLabel id={id} required={required}>\n {label}\n </InputLabel>\n\n <Select\n labelId={id}\n {...selectComponentProps}\n error={!!formState.errors[name]}\n label={label}\n value={value}\n {...register(name, {\n required: required ? requiredErrorMessage : false,\n validate,\n disabled: muiFormControl?.disabled,\n })}\n >\n <MenuItem value=\"\">\n <em>{placeholderText}</em>\n </MenuItem>\n\n {sortedOptions?.map((option, index) => {\n const optionBefore = sortedOptions[index - 1];\n const showGroup =\n (optionBefore || index == 0) &&\n option.group &&\n optionBefore?.group !== option.group;\n const disabledText =\n typeof option.disabled === \"string\" ? option.disabled : undefined;\n const isDisabled = !!disabledText || !!option.disabled;\n\n const menuItem = (\n <MenuItem\n key={option.label}\n value={option.value}\n disabled={isDisabled}\n title={\n typeof option.disabled === \"string\"\n ? option.disabled\n : undefined\n }\n selected={value === option.value}\n >\n {option.label}\n </MenuItem>\n );\n\n const wrappedMenuItem = disabledText ? (\n <Box sx={{ position: \"relative\" }}>\n {menuItem}\n\n <Stack\n direction=\"column\"\n justifyContent={\"center\"}\n spacing={1}\n sx={{\n position: \"absolute\",\n right: (th) => th.spacing(0.5),\n top: 0,\n bottom: 0,\n }}\n >\n {tooltipHolder ? (\n <Tooltip title={disabledText}>{tooltipHolder}</Tooltip>\n ) : null}\n </Stack>\n </Box>\n ) : (\n menuItem\n );\n\n return showGroup\n ? [\n <ListSubheader key={option.group}>\n {option.group}\n </ListSubheader>,\n wrappedMenuItem,\n ]\n : wrappedMenuItem;\n })}\n </Select>\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n );\n};\n","import { assertTruthy } from \"@nvon/baseline\";\nimport { useMemo } from \"react\";\nimport { LabeledValue } from \"../../inputTypes\";\nimport { InputSelect } from \"../InputSelect/InputSelect\";\nimport { InputSelectFromEnumProps } from \"./InputSelectFromEnumInterfaces\";\n\n/**\n * Renders a MUI select based on an enum that is embedded in a react hook form context.\n */\nexport const InputSelectFromEnum = <EnumType extends Record<string, string>>(\n props: InputSelectFromEnumProps<EnumType>\n): JSX.Element => {\n const { enumData, formField } = props;\n const translateFunction = formField.t;\n\n const options: LabeledValue[] = useMemo(() => {\n return Object.entries(enumData.enumToUse).map(([, value]) => {\n const label = enumData.labelsForEnum[value];\n\n assertTruthy(label, \"Could not find a label for value\" + value);\n\n if (typeof label === \"string\") {\n return { label, value };\n }\n\n assertTruthy(\n translateFunction,\n \"If you want to use translated labels you need to provide a translate function in the HookFormProvider.\"\n );\n\n return {\n label: label(translateFunction),\n value,\n };\n });\n }, [enumData.enumToUse, enumData.labelsForEnum, translateFunction]);\n\n return (\n <InputSelect {...props} selectableOptions={options} formField={formField} />\n );\n};\n","import { rethrow } from \"@nvon/baseline\";\nimport { FormEvent } from \"react\";\n\nexport type FormSubmitHandlerAsync = (event?: FormEvent) => Promise<void>;\nexport type FormSubmitHandler = (event?: FormEvent) => void;\n\n/**\n * Turn an async submitHandler into a synchronous one.\n *\n * Reasoning:\n * - we're often talking to the API during form submission. The onSubmit handler will be returning a Promise in this case.\n * - the `form` element, per definition, always expects a synchronous function.\n * - creating on inline function in every form is a bit clumsy, and does not look clean.\n *\n * Then/catch cases should be properly handled by the submit handler itself,\n * the catch supplied here is only a last safety net against an \"unhandled promise rejection\" error.\n */\nexport const syncSubmit = (\n asyncSubmitHandler: FormSubmitHandlerAsync\n): FormSubmitHandler => {\n return (e) => {\n asyncSubmitHandler(e).catch(rethrow);\n };\n};\n","import { identity } from \"lodash-es\";\nimport {\n FieldPath,\n FieldValues,\n useForm,\n UseFormProps,\n UseFormReturn,\n} from \"react-hook-form\";\n\n/**\n * Gets a TypeScript-validated field name.\n */\nexport type FieldNameGetter<TFieldValues extends FieldValues> = (\n fieldName: FieldPath<TFieldValues>\n) => FieldPath<TFieldValues>;\n\n/**\n * Not sure what this represents,\n * but it's the seconds generic argument in RHFs type declarations.\n *\n * Using any here seems fine so far.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ReactHookFormContext = any;\n\n/**\n * The react-hook-form useForm returnType,\n * amended with our custom function to validate a field name.\n */\nexport type FormReturn<TFieldValues extends FieldValues> = UseFormReturn<\n TFieldValues,\n ReactHookFormContext\n> & {\n fieldName: FieldNameGetter<TFieldValues>;\n};\n\n/**\n * Wrapper around react-hook-form's useForm.\n *\n * Should behave like the original function, only exposing a \"fieldName\"\n * function on top which is used to validate field names.\n */\nexport const useHookForm = <TFieldValues extends FieldValues>(\n props?: UseFormProps<TFieldValues, ReactHookFormContext>\n): FormReturn<TFieldValues> => {\n const form = useForm<TFieldValues>(props);\n\n return {\n ...form,\n fieldName: identity,\n };\n};\n","import { identity } from \"lodash-es\";\nimport { FieldValues, useFormContext } from \"react-hook-form\";\nimport { FormReturn } from \"./useHookForm\";\n\n/**\n * Wrapper around react-hook-form's useFormContext.\n *\n * Should behave like the original function, only exposing a \"fieldName\"\n * function on top which is used to validate field names.\n */\nexport const useHookFormContext = <\n TFieldValues extends FieldValues\n>(): FormReturn<TFieldValues> => {\n const form = useFormContext<TFieldValues>();\n\n return {\n ...form,\n fieldName: identity,\n };\n};\n"],"names":["LoadingButtonState","LoadingButton","buttonText","buttonTextSuccess","loadingButtonProps","loadingButtonPropsPropsSuccess","buttonState","successIcon","isSuccess","Success","propsToSpread","_jsx","MuiLoadingButton","loading","Loading","disabled","Idle","children","_jsxs","_Fragment","loadingButtonStateFromReactQueryMutationStatus","mutationStatus","mapStatus","idle","error","success","useLoadingButtonStateFromFormContext","formContext","useFormContext","loadingButtonStateFromFormState","formState","isSubmitting","isDirty","isSubmitSuccessful","HookFormProvider","FormProvider","formContextNull","getFormError","errors","fieldName","nestedKeys","split","reduce","errorObj","pathKey","useTranslateString","t","Error","useCallback","input","useMergedFormField","formField","formFieldDefaults","translate","merged","useMemo","builtInDefaults","label","uppercaseFirstLetter","name","required","requiredErrorMessage","validate","undefined","withPlainStrings","translated","InputText","textFieldProps","form","muiFormControl","useFormControl","register","FormControl","InputLabel","OutlinedInput","message","FormHelperText","InputEmail","props","formDefaults","type","emailInput","match","InputPasswordSet","passwordField","passwordValidationField","doNotMatchError","watch","passwordFieldMerged","validationFieldMerged","validatePasswordMatch","value","passwordValue","InputAutocomplete","selectableOptions","multiSelect","noOptions","autoCompleteProps","setValue","valueToUse","assertTruthy","includes","currentValue","filter","o","Array","isArray","Autocomplete","options","multiple","getOptionLabel","objectHasKey","onChange","e","selectedOption","map","noOptionsText","renderInput","params","TextField","variant","InputCheckbox","jsxLabel","checkboxProps","formControlLabelProps","useFormState","changeEv","target","checked","shouldValidate","shouldDirty","shouldTouch","id","registered","FormControlLabel","control","Checkbox","InputDatePicker","datePickerProps","date","setDate","useState","Date","Box","Controller","defaultValue","render","field","restField","DatePicker","event","InputDateTimePicker","dateTimePickerProps","DateTimePicker","ampm","InputRadio","radioGroupProps","FormLabel","RadioGroup","option","_createElement","key","Radio","useSortedOptionsWithGroup","sort","a","b","group","InputSelect","placeholderText","selectComponentProps","tooltipHolder","sortedOptions","Select","labelId","MenuItem","index","optionBefore","showGroup","disabledText","isDisabled","menuItem","title","selected","wrappedMenuItem","sx","position","Stack","direction","justifyContent","spacing","right","th","top","bottom","Tooltip","ListSubheader","InputSelectFromEnum","enumData","translateFunction","Object","entries","enumToUse","labelsForEnum","syncSubmit","asyncSubmitHandler","catch","rethrow","useHookForm","useForm","identity","useHookFormContext"],"mappings":"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"}
1
+ {"version":3,"file":"packageExports.js","sources":["../../src/LoadingButton/LoadingButtonInterfaces.ts","../../src/LoadingButton/LoadingButton.tsx","../../src/LoadingButton/getLoadingButtonState.ts","../../src/formFields/HookFormProvider.tsx","../../src/formFields/errorMessages.ts","../../src/formFields/formHelper/getFormError.ts","../../src/formFields/formHelper/useTranslateString.ts","../../src/formFields/formHelper/useMergedFormField.ts","../../src/formFields/baseTypes/InputText/InputText.tsx","../../src/formFields/InputEmail/InputEmail.tsx","../../src/formFields/InputPasswordSet/InputPasswordSet.tsx","../../src/formFields/baseTypes/InputAutocomplete/InputAutocomplete.tsx","../../src/formFields/baseTypes/InputCheckbox/InputCheckbox.tsx","../../src/formFields/baseTypes/InputDatePicker/InputDatePicker.tsx","../../src/formFields/baseTypes/InputDateTimePicker/InputDateTimePicker.tsx","../../src/formFields/baseTypes/InputRadio/InputRadio.tsx","../../src/formFields/formHelper/useSortedOptionsWithGroup.ts","../../src/formFields/baseTypes/InputSelect/InputSelect.tsx","../../src/formFields/baseTypes/InputSelectFromEnum/InputSelectFromEnum.tsx","../../src/formFields/formHelper/syncSubmit.ts","../../src/formFields/formHelper/useHookForm.ts","../../src/formFields/formHelper/useHookFormContext.ts"],"sourcesContent":["import { LoadingButtonProps as MuiLoadingButtonProps } from \"@mui/lab\";\nimport { ReactElement } from \"react\";\n\nexport enum LoadingButtonState {\n Idle = \"idle\",\n Loading = \"loading\",\n Success = \"success\",\n}\n\ntype SelectedButtonProps = Omit<MuiLoadingButtonProps, \"children\">;\n\nexport interface LoadingButtonProps {\n buttonState: LoadingButtonState;\n /**\n * Button label.\n */\n buttonText: string;\n /**\n * Button label that is displayed on success.\n */\n buttonTextSuccess?: string;\n /**\n * Provide an icon that is displayed in front of the text\n * when state is successful.\n */\n successIcon?: JSX.Element | ReactElement;\n /**\n * Adjust the button when the state is any other than successful.\n */\n loadingButtonProps?: SelectedButtonProps;\n /**\n * Adjust the button when the state is successful.\n */\n loadingButtonPropsPropsSuccess?: SelectedButtonProps;\n}\n","import { LoadingButton as MuiLoadingButton } from \"@mui/lab\";\nimport {\n LoadingButtonProps,\n LoadingButtonState,\n} from \"./LoadingButtonInterfaces\";\n\n/**\n * A loading button component.\n */\nexport const LoadingButton = ({\n buttonText,\n buttonTextSuccess,\n loadingButtonProps,\n loadingButtonPropsPropsSuccess,\n buttonState,\n successIcon,\n}: LoadingButtonProps): JSX.Element => {\n const isSuccess = buttonState === LoadingButtonState.Success;\n\n const propsToSpread = isSuccess\n ? loadingButtonPropsPropsSuccess\n : loadingButtonProps;\n\n return (\n <MuiLoadingButton\n loading={buttonState === LoadingButtonState.Loading}\n disabled={buttonState !== LoadingButtonState.Idle}\n {...propsToSpread}\n >\n {buttonState === LoadingButtonState.Success ? (\n <>\n {successIcon ? successIcon : null}\n\n {buttonTextSuccess ? buttonTextSuccess : buttonText}\n </>\n ) : (\n buttonText\n )}\n </MuiLoadingButton>\n );\n};\n","import { FormState, useFormContext } from \"react-hook-form\";\nimport { LoadingButtonState } from \"./LoadingButtonInterfaces\";\n\n/**\n * Redefinition of mutation status defined by react query. By doing this\n * we don't need to import react-query in the package.\n */\ndeclare type MutationStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\n\n/**\n * Get loading button state from react-query mutation status.\n */\nexport const loadingButtonStateFromReactQueryMutationStatus = (\n mutationStatus: MutationStatus\n): LoadingButtonState => {\n const mapStatus: Record<MutationStatus, LoadingButtonState> = {\n idle: LoadingButtonState.Idle,\n error: LoadingButtonState.Idle,\n success: LoadingButtonState.Success,\n loading: LoadingButtonState.Loading,\n };\n\n return mapStatus[mutationStatus];\n};\n\n/**\n * Get loading button state from a react-hook-form context.\n */\nexport const useLoadingButtonStateFromFormContext = (): LoadingButtonState => {\n const formContext = useFormContext();\n\n return loadingButtonStateFromFormState(formContext.formState);\n};\n\n/**\n * Get loading button state from a react-hook-form state.\n */\nexport const loadingButtonStateFromFormState = (\n // we are not interested in the value types FormState holds\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formState: FormState<any>\n): LoadingButtonState => {\n if (formState.isSubmitting) {\n return LoadingButtonState.Loading;\n }\n\n if (formState.isDirty) {\n return LoadingButtonState.Idle;\n }\n\n if (formState.isSubmitSuccessful) {\n return LoadingButtonState.Success;\n }\n\n return LoadingButtonState.Idle;\n};\n","import { FormProvider } from \"react-hook-form\";\n\n/**\n * Reexport of FormProvider.\n *\n * This became necessary as context is not available when the FormProvider is initialized outside of the package. Most likely this is some kind of instance mismatch.\n */\nexport const HookFormProvider = FormProvider;\n","export const formContextNull =\n \"FormContext is null. This should not happen. You may need to use the HookFormProvider instead of the FormProvider exported by react-hook-form\";\n","import { AnyObject } from \"@nvon/baseline\";\nimport { FieldError, FormState } from \"react-hook-form\";\n\n/**\n * Get the field errors for a (possibly nested) field name.\n *\n * Checking `formState.errors[fieldName]` only works if fieldName is not a path\n * (e.g. Does not include dots).\n *\n * Did not find a built-in way to do this … there might be one though.\n */\nexport const getFormError = (\n errors: FormState<AnyObject>[\"errors\"],\n fieldName: string\n): FieldError | undefined => {\n const nestedKeys = fieldName.split(\".\");\n\n //\n // To my best knowledge, this works as expected.\n //\n // It recursively walks the error object by the given keys\n // until the lowest level is reached, or undefined returned.\n //\n // Typescript is just not very happy with the dynamic nature of this,\n // hence the errors.\n //\n\n /* eslint-disable @typescript-eslint/ban-ts-comment,@typescript-eslint/no-unsafe-return */\n // @ts-expect-error\n return nestedKeys.reduce(\n // @ts-expect-error\n (errorObj: FieldError | undefined, pathKey) => errorObj?.[pathKey],\n errors\n );\n /* eslint-enable */\n};\n","import { t, TFunction } from \"i18next\";\nimport { useCallback } from \"react\";\nimport { TranslatedString } from \"../TranslatedString\";\n\n/**\n * Return a function which turns our TranslatedString into a plain string.\n *\n * @throws Error if no t was provided but a translated string.\n */\nexport const useTranslateString = (): ((\n input: TranslatedString | string,\n t?: TFunction\n) => string) => {\n if (!t) {\n throw Error(\n \"If you pass in a translated validate function you need to provide a t\"\n );\n }\n\n return useCallback((input: TranslatedString | string) => {\n return typeof input === \"string\" ? input : input(t);\n }, []);\n};\n","import { uppercaseFirstLetter } from \"@nvon/baseline\";\nimport { TFunction } from \"i18next\";\nimport { useMemo } from \"react\";\nimport { RegisterOptions } from \"react-hook-form\";\nimport {\n FormField,\n FormFieldTranslated,\n TranslatedValidate,\n} from \"../inputTypes\";\nimport { useTranslateString } from \"./useTranslateString\";\n\n/**\n * Merge a form field with defaults.\n */\nexport const useMergedFormField = (\n /**\n * Form fields, typically those passed into a component.\n *\n */\n formField: FormField,\n t?: TFunction,\n /**\n * Additional defaults. Duplicate values will be overridden by the formField.\n */\n formFieldDefaults?: Partial<FormField>\n): FormFieldTranslated => {\n const translate = useTranslateString();\n\n const merged = useMemo(() => {\n const builtInDefaults = {\n label: uppercaseFirstLetter(formField.name),\n required: false,\n requiredErrorMessage: \"Please fill in required information\",\n validate: undefined,\n };\n\n return {\n ...builtInDefaults,\n ...formFieldDefaults,\n ...formField,\n };\n }, [formField, formFieldDefaults]);\n\n const withPlainStrings = useMemo(() => {\n // Translating the validate function is a bit tricky,\n // since it can be an object in both cases.\n const validate = (() => {\n if (\n typeof merged.validate === \"object\" &&\n typeof merged.validate.translated === \"function\"\n ) {\n if (!t) {\n throw Error(\n \"If you pass in a translated validate function you need to provide a t\"\n );\n }\n\n return (merged.validate.translated as TranslatedValidate)(t);\n }\n\n return merged.validate;\n })() as RegisterOptions[\"validate\"]; // This should be fine. Not sure why TS is complaining.\n\n return {\n ...merged,\n label: translate(merged.label, t),\n requiredErrorMessage: translate(merged.requiredErrorMessage, t),\n validate,\n };\n }, [merged, t, translate]);\n\n return withPlainStrings;\n};\n","import {\n FormControl,\n FormHelperText,\n InputLabel,\n OutlinedInput,\n OutlinedInputProps,\n useFormControl,\n} from \"@mui/material\";\nimport { useFormContext } from \"react-hook-form\";\nimport { formContextNull } from \"../../errorMessages\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField } from \"../../inputTypes\";\n\nexport interface InputTextProps {\n formField: FormField;\n textFieldProps?: Omit<OutlinedInputProps, \"required\" | \"label\">;\n}\n\n/**\n * Renders a MUI input text fields that is embedded in a react\n * hook form context.\n *\n * @throws Error when FormContext is null.\n */\nexport const InputText = ({\n formField,\n textFieldProps,\n}: InputTextProps): JSX.Element | null => {\n const form = useFormContext();\n const muiFormControl = useFormControl();\n\n const { label, name, required, requiredErrorMessage, validate } =\n useMergedFormField(formField, formField.t);\n\n if (!form) {\n throw Error(formContextNull);\n }\n\n const { register, formState } = form;\n const error = getFormError(formState.errors, formField.name);\n\n return (\n <FormControl\n error={!!error}\n required={required}\n disabled={muiFormControl?.disabled}\n >\n <InputLabel required={required}>{label}</InputLabel>\n\n <OutlinedInput\n {...register(name, {\n required: required ? requiredErrorMessage : false,\n validate,\n disabled: muiFormControl?.disabled,\n })}\n required={required}\n label={label}\n {...textFieldProps}\n />\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n );\n};\n","import { InputText, InputTextProps } from \"../baseTypes/InputText/InputText\";\nimport { useMergedFormField } from \"../formHelper/useMergedFormField\";\nimport { FormField } from \"../inputTypes\";\n\nexport interface InputEmailProps {\n formField: FormField;\n textFieldProps?: InputTextProps[\"textFieldProps\"];\n}\n\n/**\n * Renders a MUI input for an email address that is embedded in a react hook form context.\n */\nexport const InputEmail = (props: InputEmailProps): JSX.Element => {\n const merged = useMergedFormField(\n props.formField,\n props.formField.t,\n formDefaults\n );\n\n return (\n <InputText\n textFieldProps={{\n type: \"email\",\n ...props.textFieldProps,\n }}\n formField={merged}\n />\n );\n};\n\nconst formDefaults: Omit<FormField, \"name\" | \"t\"> = {\n required: true,\n validate: (emailInput: string) => {\n if (emailInput.match(/.@./)) {\n return true;\n }\n\n return \"E-Mail address invalid\";\n },\n};\n","import { useCallback } from \"react\";\nimport {\n RegisterOptions,\n useFormContext,\n ValidateResult,\n} from \"react-hook-form\";\nimport { InputText } from \"../baseTypes/InputText/InputText\";\nimport { useMergedFormField } from \"../formHelper/useMergedFormField\";\nimport { InputPasswordSetProps } from \"./InputPasswordSetInterfaces\";\n\n/**\n * Two fields for setting a password set: input & validation.\n *\n * Checks for equality of both.\n */\nexport const InputPasswordSet = ({\n passwordField,\n passwordValidationField,\n doNotMatchError,\n}: InputPasswordSetProps): JSX.Element => {\n const { watch } = useFormContext();\n\n const passwordFieldMerged = useMergedFormField(\n passwordField,\n passwordField.t,\n { required: true }\n );\n const validationFieldMerged = useMergedFormField(\n passwordValidationField,\n passwordValidationField.t,\n { required: true }\n );\n\n const validatePasswordMatch: RegisterOptions[\"validate\"] = useCallback(\n (value: string): ValidateResult => {\n const passwordValue = watch(passwordFieldMerged.name) as string;\n\n return value === passwordValue || doNotMatchError;\n },\n [doNotMatchError, passwordFieldMerged.name, watch]\n );\n\n return (\n <>\n <InputText\n formField={passwordFieldMerged}\n textFieldProps={{\n type: \"password\",\n }}\n />\n\n <InputText\n formField={{\n ...validationFieldMerged,\n validate: validatePasswordMatch,\n t: passwordValidationField.t,\n }}\n textFieldProps={{\n type: \"password\",\n }}\n />\n </>\n );\n};\n","import CheckBoxIcon from \"@mui/icons-material/CheckBox\";\nimport CheckBoxOutlineBlankIcon from \"@mui/icons-material/CheckBoxOutlineBlank\";\nimport {\n Autocomplete,\n Checkbox,\n FormControl,\n FormHelperText,\n TextField,\n useFormControl,\n} from \"@mui/material\";\nimport { assertTruthy, objectHasKey } from \"@nvon/baseline\";\nimport { useMemo } from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { formContextNull } from \"../../errorMessages\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField, LabeledValue } from \"../../inputTypes\";\nimport { InputAutocompleteProps } from \"./InputAutocompleteInterfaces\";\n\nconst icon = <CheckBoxOutlineBlankIcon fontSize=\"small\" />;\nconst checkedIcon = <CheckBoxIcon fontSize=\"small\" />;\n\n/**\n * Renders a MUI autocomplete input that is embedded in a react hook form context.\n *\n * @throws Error when FormContext is null.\n */\nexport const InputAutocomplete = ({\n formField,\n selectableOptions,\n noOptions,\n autoCompleteProps,\n checkboxesForMultiselect: renderCheckboxes,\n}: InputAutocompleteProps): JSX.Element => {\n const form = useFormContext();\n\n if (!form) {\n throw Error(formContextNull);\n }\n\n const { register, watch, formState, setValue } = form;\n\n const error = getFormError(formState.errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required, requiredErrorMessage, validate }: FormField =\n useMergedFormField(formField, formField.t);\n\n const value = watch(name) as\n | string\n | number\n | string[]\n | number[]\n | undefined;\n\n const multiSelect = !!autoCompleteProps?.multiple;\n\n let valueToUse = value;\n if (!value) {\n valueToUse = multiSelect ? [] : \"\";\n }\n\n assertTruthy(\n [\"string\", \"number\", \"object\"].includes(typeof valueToUse),\n \"Value for select input has unexpected type\"\n );\n\n const props = register(name, {\n required: required ? requiredErrorMessage : false,\n validate,\n disabled: muiFormControl?.disabled,\n });\n\n const currentValue = useMemo(() => {\n return multiSelect\n ? selectableOptions.filter((o) => {\n if (Array.isArray(valueToUse)) {\n return valueToUse.includes(o.value as never);\n }\n\n return selectableOptions.find(\n (option) => option.value === valueToUse\n );\n })\n : selectableOptions.find((option) => option.value === valueToUse);\n }, [multiSelect, selectableOptions, valueToUse]);\n\n return (\n <FormControl\n error={!!error}\n required={required}\n disabled={muiFormControl?.disabled}\n >\n <Autocomplete\n options={selectableOptions}\n multiple={multiSelect}\n value={currentValue || \"\"}\n label={label}\n renderOption={\n multiSelect && renderCheckboxes\n ? (liProps, option: LabeledValue) => (\n <li {...liProps}>\n <Checkbox\n icon={icon}\n checkedIcon={checkedIcon}\n sx={{ mr: 2 }}\n checked={\n Array.isArray(currentValue)\n ? !!currentValue.find(\n (item) => item.value === option.label\n )\n : false\n }\n />\n\n {option.label}\n </li>\n )\n : undefined\n }\n {...props}\n getOptionLabel={(o) => {\n if (objectHasKey(o, \"label\")) {\n return o.label;\n }\n\n return \"\";\n }}\n onChange={(e, selectedOption: LabeledValue | LabeledValue[]) => {\n if (Array.isArray(selectedOption)) {\n setValue(\n name,\n selectedOption.map((o) => o.value)\n );\n } else if (selectedOption) {\n setValue(name, selectedOption.value);\n }\n }}\n noOptionsText={noOptions}\n renderInput={(params) => (\n <TextField {...params} label={label} variant=\"outlined\" />\n )}\n // need to parse this as any in order to get no typing errors\n // for multiselect\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n {...(autoCompleteProps as any)}\n />\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n );\n};\n","import {\n Checkbox,\n CheckboxProps,\n FormControl,\n FormControlLabel,\n FormControlLabelProps,\n FormHelperText,\n useFormControl,\n} from \"@mui/material\";\nimport { ChangeEvent, useCallback } from \"react\";\nimport { useFormContext, useFormState } from \"react-hook-form\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField } from \"../../inputTypes\";\n\nexport interface InputCheckboxProps {\n formField: FormField;\n checkboxProps?: Omit<CheckboxProps, \"checked\">;\n formControlLabelProps?: Omit<FormControlLabelProps, \"control\" | \"label\">;\n /**\n * In contrast to other FormFields,\n * the checkbox supports jsx elements as a label.\n *\n * If this is provided, formField.label will be ignored.\n */\n jsxLabel?: JSX.Element;\n}\n\n/**\n * Input for Checking a box indicating acceptance of something.\n */\nexport const InputCheckbox = ({\n formField,\n jsxLabel,\n checkboxProps,\n formControlLabelProps,\n}: InputCheckboxProps): JSX.Element => {\n const { register, watch, setValue } = useFormContext();\n const { errors } = useFormState();\n\n const error = getFormError(errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required, requiredErrorMessage, validate }: FormField =\n useMergedFormField(formField);\n\n const changeEv = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n setValue(name, e.target.checked, {\n shouldValidate: true,\n shouldDirty: true,\n shouldTouch: true,\n });\n },\n [name, setValue]\n );\n\n const id = `rvo-input-checkbox-${name}`;\n\n const registered = register(name, {\n required: required ? requiredErrorMessage : false,\n onChange: changeEv,\n validate,\n disabled: muiFormControl?.disabled,\n });\n\n const value = (watch(name, false) as boolean | undefined) ?? false;\n\n return (\n <FormControl error={!!error} disabled={muiFormControl?.disabled}>\n <FormControlLabel\n required={jsxLabel ? false : required} // If jsxLabel is set, we don't want to show the asterisk.\n control={\n <Checkbox\n checked={value}\n aria-labelledby={id}\n {...registered}\n {...checkboxProps}\n />\n }\n label={jsxLabel ?? label}\n {...formControlLabelProps}\n />\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n );\n};\n","import {\n Box,\n FormControl,\n FormHelperText,\n TextField,\n TextFieldProps,\n useFormControl,\n} from \"@mui/material\";\nimport {\n DatePicker,\n DatePickerProps as MuiDatePickerProps,\n} from \"@mui/x-date-pickers\";\nimport { useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField } from \"../../inputTypes\";\n\n/**\n * Mangled version of the original DatePickerProps type\n * from @mui/x-date-pickers.\n */\ninterface DatePickerProps\n extends Omit<\n MuiDatePickerProps<TextFieldProps, Date>,\n \"label\" | \"onChange\" | \"disabled\" | \"value\" | \"renderInput\"\n > {\n renderInput?: MuiDatePickerProps<TextFieldProps, Date>[\"renderInput\"];\n}\n\nexport interface InputDatePickerProps {\n formField: FormField;\n datePickerProps?: DatePickerProps;\n}\n\n/**\n * A Datetime picker that works with react hook form.\n */\nexport const InputDatePicker = ({\n formField,\n datePickerProps,\n}: InputDatePickerProps): JSX.Element => {\n const { formState, control } = useFormContext();\n const error = getFormError(formState.errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required } = useMergedFormField(formField);\n\n const [date, setDate] = useState<Date>(new Date());\n\n return (\n <Box>\n <FormControl\n error={!!error}\n required={required}\n disabled={muiFormControl?.disabled}\n >\n <Controller\n name={name}\n defaultValue={date}\n control={control}\n render={({ field: { onChange, ...restField } }) => (\n <DatePicker\n label={label}\n onChange={(event: Date | null) => {\n onChange(event);\n\n if (event) {\n setDate(event);\n }\n }}\n disabled={muiFormControl?.disabled}\n renderInput={\n datePickerProps?.renderInput\n ? datePickerProps.renderInput\n : (params) => <TextField required={required} {...params} />\n }\n {...restField}\n {...datePickerProps}\n />\n )}\n />\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n </Box>\n );\n};\n","import {\n Box,\n FormControl,\n FormHelperText,\n TextField,\n TextFieldProps,\n useFormControl,\n} from \"@mui/material\";\nimport {\n DateTimePicker,\n DateTimePickerProps as MuiDateTimePickerProps,\n} from \"@mui/x-date-pickers\";\nimport { useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField } from \"../../inputTypes\";\n\n/**\n * Mangled version of the original DateTimePickerProps type\n * from @mui/x-date-pickers.\n */\ninterface DateTimePickerProps\n extends Omit<\n MuiDateTimePickerProps<TextFieldProps, Date>,\n \"label\" | \"onChange\" | \"disabled\" | \"value\" | \"renderInput\"\n > {\n renderInput?: MuiDateTimePickerProps<TextFieldProps, Date>[\"renderInput\"];\n}\n\nexport interface InputDateTimePickerProps {\n formField: FormField;\n dateTimePickerProps?: DateTimePickerProps;\n}\n\n/**\n * A Datetime picker that works with react hook form.\n */\nexport const InputDateTimePicker = ({\n formField,\n dateTimePickerProps,\n}: InputDateTimePickerProps): JSX.Element => {\n const { formState, control } = useFormContext();\n const error = getFormError(formState.errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required } = useMergedFormField(formField);\n\n const [date, setDate] = useState<Date>(new Date());\n\n return (\n <Box>\n <FormControl\n error={!!error}\n required={required}\n disabled={muiFormControl?.disabled}\n >\n <Controller\n name={name}\n defaultValue={date}\n control={control}\n render={({ field: { onChange, ...restField } }) => (\n <DateTimePicker\n label={label}\n ampm={\n dateTimePickerProps?.ampm ? dateTimePickerProps.ampm : false\n }\n onChange={(event: Date | null) => {\n onChange(event);\n\n if (event) {\n setDate(event);\n }\n }}\n disabled={muiFormControl?.disabled}\n renderInput={\n dateTimePickerProps?.renderInput\n ? dateTimePickerProps?.renderInput\n : (params) => <TextField required={required} {...params} />\n }\n {...restField}\n {...dateTimePickerProps}\n />\n )}\n />\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n </Box>\n );\n};\n","import {\n FormControl,\n FormControlLabel,\n FormControlLabelProps,\n FormHelperText,\n FormLabel,\n Radio,\n RadioGroup,\n RadioGroupProps,\n useFormControl,\n} from \"@mui/material\";\nimport { assertTruthy } from \"@nvon/baseline\";\nimport { ChangeEvent, useCallback } from \"react\";\nimport { useFormContext, useFormState } from \"react-hook-form\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { FormField, LabeledValue } from \"../../inputTypes\";\n\nexport interface InputRadioProps {\n formField: FormField;\n selectableOptions: LabeledValue[];\n formControlLabelProps?: FormControlLabelProps;\n radioGroupProps?: RadioGroupProps;\n}\n\n/**\n * Input for selecting between a list of options using radio buttons.\n */\nexport const InputRadio = ({\n formField,\n selectableOptions,\n formControlLabelProps,\n radioGroupProps,\n}: InputRadioProps): JSX.Element => {\n const { register, watch, setValue } = useFormContext();\n const { errors } = useFormState();\n\n const error = getFormError(errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required, requiredErrorMessage, validate }: FormField =\n useMergedFormField(formField);\n\n const changeEv = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n setValue(name, e.target.value, {\n shouldValidate: true,\n shouldDirty: true,\n shouldTouch: true,\n });\n },\n [name, setValue]\n );\n\n const value = (watch(name) as string | number | undefined) ?? \"\";\n\n assertTruthy(\n [\"string\", \"number\"].includes(typeof value),\n \"Value for select input has unexpected type\"\n );\n\n const id = `rvo-input-radio-${name}`;\n\n const registered = register(name, {\n required: required ? requiredErrorMessage : false,\n onChange: changeEv,\n validate,\n disabled: muiFormControl?.disabled,\n });\n\n return (\n <FormControl error={!!error} disabled={muiFormControl?.disabled}>\n <FormLabel id={id} required={required}>\n {label}\n </FormLabel>\n\n <RadioGroup value={value} aria-labelledby={id} {...radioGroupProps}>\n {selectableOptions?.map((option) => {\n return (\n <FormControlLabel\n {...registered}\n key={option.value}\n value={option.value}\n control={<Radio />}\n label={option.label}\n {...formControlLabelProps}\n />\n );\n })}\n </RadioGroup>\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n );\n};\n","import { useMemo } from \"react\";\nimport { LabeledValueWithGrouping } from \"../inputTypes\";\n\n/**\n * Sorts the options by group and value.\n */\nexport const useSortedOptionsWithGroup = (\n selectableOptions: LabeledValueWithGrouping[]\n): LabeledValueWithGrouping[] => {\n return useMemo(\n () =>\n selectableOptions.sort((a, b) => {\n if (a.group == undefined && !!b.group) {\n return -1;\n }\n\n if (a.group && b.group && a.group < b.group) {\n return -1;\n }\n\n if (a.group == b.group && b.value > a.value) {\n return 1;\n }\n\n return 0;\n }),\n [selectableOptions]\n );\n};\n","import {\n Box,\n FormControl,\n FormHelperText,\n InputLabel,\n ListSubheader,\n MenuItem,\n Select,\n SelectProps,\n Stack,\n Tooltip,\n useFormControl,\n} from \"@mui/material\";\nimport { assertTruthy } from \"@nvon/baseline\";\nimport { useFormContext } from \"react-hook-form\";\nimport { formContextNull } from \"../../errorMessages\";\nimport { getFormError } from \"../../formHelper/getFormError\";\nimport { useMergedFormField } from \"../../formHelper/useMergedFormField\";\nimport { useSortedOptionsWithGroup } from \"../../formHelper/useSortedOptionsWithGroup\";\nimport { FormField, LabeledValueWithGrouping } from \"../../inputTypes\";\n\nexport interface InputSelectProps {\n formField: FormField;\n selectableOptions: LabeledValueWithGrouping[];\n placeholderText: string;\n selectComponentProps?: Omit<\n SelectProps,\n \"labelId\" | \"error\" | \"label\" | \"value\"\n >;\n /**\n * Element that is rendered in the end of a select item and holds\n * a tooltip with the disabled message for this option.\n *\n * If none is given the element is disabled without rendering a tooltip.\n */\n tooltipHolder?: JSX.Element;\n}\n\n/**\n * Renders a MUI select based that is embedded in a react hook\n * form context.\n *\n * @throws Error when FormContext is null.\n */\nexport const InputSelect = ({\n formField,\n selectableOptions,\n placeholderText,\n selectComponentProps,\n tooltipHolder,\n}: InputSelectProps): JSX.Element => {\n const form = useFormContext();\n\n if (!form) {\n throw Error(formContextNull);\n }\n\n const { register, watch, formState } = form;\n\n const error = getFormError(formState.errors, formField.name);\n const muiFormControl = useFormControl();\n\n const { label, name, required, requiredErrorMessage, validate }: FormField =\n useMergedFormField(formField, formField.t);\n\n const defaultValue = selectComponentProps?.multiple ? [] : \"\";\n\n const value =\n (watch(name) as string | number | undefined | string[] | number[]) ??\n defaultValue;\n\n if (selectComponentProps?.multiple && value) {\n assertTruthy(\n Array.isArray(value),\n \"Value for multiple select need to be an array or undefined\"\n );\n } else if (value) {\n assertTruthy(\n [\"string\", \"number\"].includes(typeof value),\n \"Value for select input has unexpected type\"\n );\n }\n\n const id = `input-select-${name}`;\n const sortedOptions = useSortedOptionsWithGroup(selectableOptions);\n\n return (\n <FormControl\n error={!!error}\n required={required}\n disabled={muiFormControl?.disabled}\n >\n <InputLabel id={id} required={required}>\n {label}\n </InputLabel>\n\n <Select\n labelId={id}\n {...selectComponentProps}\n error={!!formState.errors[name]}\n label={label}\n value={value}\n {...register(name, {\n required: required ? requiredErrorMessage : false,\n validate,\n disabled: muiFormControl?.disabled,\n })}\n >\n <MenuItem value=\"\">\n <em>{placeholderText}</em>\n </MenuItem>\n\n {sortedOptions?.map((option, index) => {\n const optionBefore = sortedOptions[index - 1];\n const showGroup =\n (optionBefore || index == 0) &&\n option.group &&\n optionBefore?.group !== option.group;\n const disabledText =\n typeof option.disabled === \"string\" ? option.disabled : undefined;\n const isDisabled = !!disabledText || !!option.disabled;\n\n const menuItem = (\n <MenuItem\n key={option.label}\n value={option.value}\n disabled={isDisabled}\n title={\n typeof option.disabled === \"string\"\n ? option.disabled\n : undefined\n }\n selected={value === option.value}\n >\n {option.label}\n </MenuItem>\n );\n\n const wrappedMenuItem = disabledText ? (\n <Box sx={{ position: \"relative\" }}>\n {menuItem}\n\n <Stack\n direction=\"column\"\n justifyContent={\"center\"}\n spacing={1}\n sx={{\n position: \"absolute\",\n right: (th) => th.spacing(0.5),\n top: 0,\n bottom: 0,\n }}\n >\n {tooltipHolder ? (\n <Tooltip title={disabledText}>{tooltipHolder}</Tooltip>\n ) : null}\n </Stack>\n </Box>\n ) : (\n menuItem\n );\n\n return showGroup\n ? [\n <ListSubheader key={option.group}>\n {option.group}\n </ListSubheader>,\n wrappedMenuItem,\n ]\n : wrappedMenuItem;\n })}\n </Select>\n\n {error?.message && <FormHelperText>{error?.message}</FormHelperText>}\n </FormControl>\n );\n};\n","import { assertTruthy } from \"@nvon/baseline\";\nimport { useMemo } from \"react\";\nimport { LabeledValue } from \"../../inputTypes\";\nimport { InputSelect } from \"../InputSelect/InputSelect\";\nimport { InputSelectFromEnumProps } from \"./InputSelectFromEnumInterfaces\";\n\n/**\n * Renders a MUI select based on an enum that is embedded in a react hook form context.\n */\nexport const InputSelectFromEnum = <EnumType extends Record<string, string>>(\n props: InputSelectFromEnumProps<EnumType>\n): JSX.Element => {\n const { enumData, formField } = props;\n const translateFunction = formField.t;\n\n const options: LabeledValue[] = useMemo(() => {\n return Object.entries(enumData.enumToUse).map(([, value]) => {\n const label = enumData.labelsForEnum[value];\n\n assertTruthy(label, \"Could not find a label for value\" + value);\n\n if (typeof label === \"string\") {\n return { label, value };\n }\n\n assertTruthy(\n translateFunction,\n \"If you want to use translated labels you need to provide a translate function in the HookFormProvider.\"\n );\n\n return {\n label: label(translateFunction),\n value,\n };\n });\n }, [enumData.enumToUse, enumData.labelsForEnum, translateFunction]);\n\n return (\n <InputSelect {...props} selectableOptions={options} formField={formField} />\n );\n};\n","import { rethrow } from \"@nvon/baseline\";\nimport { FormEvent } from \"react\";\n\nexport type FormSubmitHandlerAsync = (event?: FormEvent) => Promise<void>;\nexport type FormSubmitHandler = (event?: FormEvent) => void;\n\n/**\n * Turn an async submitHandler into a synchronous one.\n *\n * Reasoning:\n * - we're often talking to the API during form submission. The onSubmit handler will be returning a Promise in this case.\n * - the `form` element, per definition, always expects a synchronous function.\n * - creating on inline function in every form is a bit clumsy, and does not look clean.\n *\n * Then/catch cases should be properly handled by the submit handler itself,\n * the catch supplied here is only a last safety net against an \"unhandled promise rejection\" error.\n */\nexport const syncSubmit = (\n asyncSubmitHandler: FormSubmitHandlerAsync\n): FormSubmitHandler => {\n return (e) => {\n asyncSubmitHandler(e).catch(rethrow);\n };\n};\n","import { identity } from \"lodash-es\";\nimport {\n FieldPath,\n FieldValues,\n useForm,\n UseFormProps,\n UseFormReturn,\n} from \"react-hook-form\";\n\n/**\n * Gets a TypeScript-validated field name.\n */\nexport type FieldNameGetter<TFieldValues extends FieldValues> = (\n fieldName: FieldPath<TFieldValues>\n) => FieldPath<TFieldValues>;\n\n/**\n * Not sure what this represents,\n * but it's the seconds generic argument in RHFs type declarations.\n *\n * Using any here seems fine so far.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ReactHookFormContext = any;\n\n/**\n * The react-hook-form useForm returnType,\n * amended with our custom function to validate a field name.\n */\nexport type FormReturn<TFieldValues extends FieldValues> = UseFormReturn<\n TFieldValues,\n ReactHookFormContext\n> & {\n fieldName: FieldNameGetter<TFieldValues>;\n};\n\n/**\n * Wrapper around react-hook-form's useForm.\n *\n * Should behave like the original function, only exposing a \"fieldName\"\n * function on top which is used to validate field names.\n */\nexport const useHookForm = <TFieldValues extends FieldValues>(\n props?: UseFormProps<TFieldValues, ReactHookFormContext>\n): FormReturn<TFieldValues> => {\n const form = useForm<TFieldValues>(props);\n\n return {\n ...form,\n fieldName: identity,\n };\n};\n","import { identity } from \"lodash-es\";\nimport { FieldValues, useFormContext } from \"react-hook-form\";\nimport { FormReturn } from \"./useHookForm\";\n\n/**\n * Wrapper around react-hook-form's useFormContext.\n *\n * Should behave like the original function, only exposing a \"fieldName\"\n * function on top which is used to validate field names.\n */\nexport const useHookFormContext = <\n TFieldValues extends FieldValues\n>(): FormReturn<TFieldValues> => {\n const form = useFormContext<TFieldValues>();\n\n return {\n ...form,\n fieldName: identity,\n };\n};\n"],"names":["LoadingButtonState","LoadingButton","buttonText","buttonTextSuccess","loadingButtonProps","loadingButtonPropsPropsSuccess","buttonState","successIcon","isSuccess","Success","propsToSpread","_jsx","MuiLoadingButton","loading","Loading","disabled","Idle","children","_jsxs","_Fragment","loadingButtonStateFromReactQueryMutationStatus","mutationStatus","mapStatus","idle","error","success","useLoadingButtonStateFromFormContext","formContext","useFormContext","loadingButtonStateFromFormState","formState","isSubmitting","isDirty","isSubmitSuccessful","HookFormProvider","FormProvider","formContextNull","getFormError","errors","fieldName","nestedKeys","split","reduce","errorObj","pathKey","useTranslateString","t","Error","useCallback","input","useMergedFormField","formField","formFieldDefaults","translate","merged","useMemo","builtInDefaults","label","uppercaseFirstLetter","name","required","requiredErrorMessage","validate","undefined","withPlainStrings","translated","InputText","textFieldProps","form","muiFormControl","useFormControl","register","FormControl","InputLabel","OutlinedInput","message","FormHelperText","InputEmail","props","formDefaults","type","emailInput","match","InputPasswordSet","passwordField","passwordValidationField","doNotMatchError","watch","passwordFieldMerged","validationFieldMerged","validatePasswordMatch","value","passwordValue","icon","CheckBoxOutlineBlankIcon","fontSize","checkedIcon","CheckBoxIcon","InputAutocomplete","selectableOptions","noOptions","autoCompleteProps","checkboxesForMultiselect","renderCheckboxes","setValue","multiSelect","multiple","valueToUse","assertTruthy","includes","currentValue","filter","o","Array","isArray","find","option","Autocomplete","options","renderOption","liProps","Checkbox","sx","mr","checked","item","getOptionLabel","objectHasKey","onChange","e","selectedOption","map","noOptionsText","renderInput","params","TextField","variant","InputCheckbox","jsxLabel","checkboxProps","formControlLabelProps","useFormState","changeEv","target","shouldValidate","shouldDirty","shouldTouch","id","registered","FormControlLabel","control","InputDatePicker","datePickerProps","date","setDate","useState","Date","Box","Controller","defaultValue","render","field","restField","DatePicker","event","InputDateTimePicker","dateTimePickerProps","DateTimePicker","ampm","InputRadio","radioGroupProps","FormLabel","RadioGroup","_createElement","key","Radio","useSortedOptionsWithGroup","sort","a","b","group","InputSelect","placeholderText","selectComponentProps","tooltipHolder","sortedOptions","Select","labelId","MenuItem","index","optionBefore","showGroup","disabledText","isDisabled","menuItem","title","selected","wrappedMenuItem","position","Stack","direction","justifyContent","spacing","right","th","top","bottom","Tooltip","ListSubheader","InputSelectFromEnum","enumData","translateFunction","Object","entries","enumToUse","labelsForEnum","syncSubmit","asyncSubmitHandler","catch","rethrow","useHookForm","useForm","identity","useHookFormContext"],"mappings":"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"}
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@nwon/react-mui-hook-form","version":"1.0.8","type":"module","keywords":["react","MUI","React Hook Form","forms","typescript"],"repository":{"type":"git","url":"https://gitlab.com/nwon-group/nwon-tooling/npm-packages/react-mui-hook-form"},"description":"Making react forms easy - A connection of MUI and React Hook Form","types":"dist/packageExports.d.ts","main":"dist/packageExports.js","cracoConfig":"craco.config.cjs","scripts":{},"files":["dist","readme.md","license"],"author":"NWON","license":"MIT","devDependencies":{"@babel/core":"^7.21.3","@babel/plugin-transform-runtime":"^7.21.0","@babel/preset-flow":"^7.18.6","@babel/preset-react":"^7.18.6","@craco/craco":"^6.4.3","@nvon/eslint-config":"^1.21.1","@nvon/node-toolbox":"^0.20.4","@rollup/plugin-babel":"^6.0.3","@types/lodash-es":"^4.17.6","@types/node":"^18.11.11","@types/react-dom":">=17.0.0","@types/webpack":"^4.41.32","cross-env":"^7.0.3","npm":"^9.5.0","react-scripts":"^4.0.3","rimraf":"^3.0.2","rollup":"^3.19.1","rollup-plugin-sass":"^1.12.17","rollup-plugin-typescript2":"^0.34.1","typescript":"^4.9.5"},"dependencies":{"@babel/runtime":"^7.21.0","@mui/lab":"^5.0.0-alpha.134","@mui/material":"^5.13.5","@mui/x-date-pickers":"^5.0.20","@nvon/baseline":"^0.33.0","dayjs":"^1.11.10","fuse.js":"^6.5.3","i18next":"^22.4.10","lodash-es":"^4.17.21","react-hook-form":"^7.41.3","react-i18next":"^11.18.5"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]}}
1
+ {"name":"@nwon/react-mui-hook-form","version":"1.0.10","type":"module","keywords":["react","MUI","React Hook Form","forms","typescript"],"repository":{"type":"git","url":"https://gitlab.com/nwon-group/nwon-tooling/npm-packages/react-mui-hook-form"},"description":"Making react forms easy - A connection of MUI and React Hook Form","types":"dist/packageExports.d.ts","main":"dist/packageExports.js","cracoConfig":"craco.config.cjs","scripts":{},"files":["dist","readme.md","license"],"author":"NWON","license":"MIT","devDependencies":{"@babel/core":"^7.21.3","@babel/plugin-transform-runtime":"^7.21.0","@babel/preset-flow":"^7.18.6","@babel/preset-react":"^7.18.6","@craco/craco":"^6.4.3","@nvon/eslint-config":"^1.21.1","@nvon/node-toolbox":"^0.20.4","@rollup/plugin-babel":"^6.0.3","@types/lodash-es":"^4.17.6","@types/node":"^18.11.11","@types/react-dom":">=17.0.0","@types/webpack":"^4.41.32","cross-env":"^7.0.3","npm":"^9.5.0","react-scripts":"^4.0.3","rimraf":"^3.0.2","rollup":"^3.19.1","rollup-plugin-sass":"^1.12.17","rollup-plugin-typescript2":"^0.34.1","typescript":"^4.9.5"},"dependencies":{"@babel/runtime":"^7.21.0","@mui/icons-material":"^5.15.10","@mui/lab":"^5.0.0-alpha.134","@mui/material":"^5.13.5","@mui/x-date-pickers":"^5.0.20","@nvon/baseline":"^0.33.0","dayjs":"^1.11.10","fuse.js":"^6.5.3","i18next":"^22.4.10","lodash-es":"^4.17.21","react-hook-form":"^7.41.3","react-i18next":"^11.18.5"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]}}