@strapi/admin 5.31.0 → 5.31.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.
Files changed (73) hide show
  1. package/dist/admin/admin/src/components/Form.js +9 -0
  2. package/dist/admin/admin/src/components/Form.js.map +1 -1
  3. package/dist/admin/admin/src/components/Form.mjs +9 -0
  4. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/FormInputs/Time.js +1 -1
  6. package/dist/admin/admin/src/components/FormInputs/Time.js.map +1 -1
  7. package/dist/admin/admin/src/components/FormInputs/Time.mjs +1 -1
  8. package/dist/admin/admin/src/components/FormInputs/Time.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/LeftMenu.js +16 -8
  10. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  11. package/dist/admin/admin/src/components/LeftMenu.mjs +17 -9
  12. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js +3 -2
  14. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js.map +1 -1
  15. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs +3 -2
  16. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js +64 -37
  18. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js.map +1 -1
  19. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.mjs +65 -38
  20. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/SubNav.js +1 -0
  22. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  23. package/dist/admin/admin/src/components/SubNav.mjs +1 -0
  24. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  25. package/dist/admin/admin/src/hooks/useWarnIfUnsavedChanges.js +21 -0
  26. package/dist/admin/admin/src/hooks/useWarnIfUnsavedChanges.js.map +1 -0
  27. package/dist/admin/admin/src/hooks/useWarnIfUnsavedChanges.mjs +19 -0
  28. package/dist/admin/admin/src/hooks/useWarnIfUnsavedChanges.mjs.map +1 -0
  29. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js +1 -1
  30. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js.map +1 -1
  31. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs +1 -1
  32. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs.map +1 -1
  33. package/dist/admin/admin/src/translations/en.json.js +2 -1
  34. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  35. package/dist/admin/admin/src/translations/en.json.mjs +2 -1
  36. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  37. package/dist/admin/admin/src/translations/es.json.js +1 -0
  38. package/dist/admin/admin/src/translations/es.json.js.map +1 -1
  39. package/dist/admin/admin/src/translations/es.json.mjs +1 -0
  40. package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
  41. package/dist/admin/admin/src/translations/fr.json.js +1 -0
  42. package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
  43. package/dist/admin/admin/src/translations/fr.json.mjs +1 -0
  44. package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
  45. package/dist/admin/admin/src/translations/tr.json.js +1 -1
  46. package/dist/admin/admin/src/translations/tr.json.mjs +1 -1
  47. package/dist/admin/src/components/MainNav/NavBurgerMenu.d.ts +3 -2
  48. package/dist/admin/src/hooks/useWarnIfUnsavedChanges.d.ts +1 -0
  49. package/dist/ee/server/src/controllers/admin.d.ts +6 -2
  50. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  51. package/dist/ee/server/src/controllers/index.d.ts +6 -2
  52. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  53. package/dist/ee/server/src/index.d.ts +6 -2
  54. package/dist/ee/server/src/index.d.ts.map +1 -1
  55. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +1 -1
  56. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  57. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +1 -1
  58. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  59. package/dist/server/ee/server/src/controllers/admin.js +11 -3
  60. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  61. package/dist/server/ee/server/src/controllers/admin.mjs +11 -3
  62. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  63. package/dist/server/server/src/controllers/admin.js +3 -2
  64. package/dist/server/server/src/controllers/admin.js.map +1 -1
  65. package/dist/server/server/src/controllers/admin.mjs +3 -2
  66. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  67. package/dist/server/src/controllers/admin.d.ts +3 -1
  68. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  69. package/dist/server/src/controllers/index.d.ts +3 -1
  70. package/dist/server/src/controllers/index.d.ts.map +1 -1
  71. package/dist/server/src/index.d.ts +3 -1
  72. package/dist/server/src/index.d.ts.map +1 -1
  73. package/package.json +8 -7
@@ -9,6 +9,7 @@ var immer = require('immer');
9
9
  var isEqual = require('lodash/isEqual');
10
10
  var reactIntl = require('react-intl');
11
11
  var reactRouterDom = require('react-router-dom');
12
+ var useWarnIfUnsavedChanges = require('../hooks/useWarnIfUnsavedChanges.js');
12
13
  var objects = require('../utils/objects.js');
13
14
  var Context = require('./Context.js');
14
15
 
@@ -499,6 +500,11 @@ const isErrorMessageDescriptor = (object)=>{
499
500
  const { formatMessage } = reactIntl.useIntl();
500
501
  const modified = useForm('Blocker', (state)=>state.modified);
501
502
  const isSubmitting = useForm('Blocker', (state)=>state.isSubmitting);
503
+ // this is trigering a native browser prompt on page unload
504
+ // We aren't able to use our Dialog component in that scenario
505
+ // so we fallback to the native browser one when the user is trying to close/refresh the tab/browser
506
+ // This hook will be triggered on dev mode because of the live reloads but it's fine as it's only for that scenario
507
+ useWarnIfUnsavedChanges.useWarnIfUnsavedChanges(modified && !isSubmitting);
502
508
  const blocker = reactRouterDom.useBlocker(({ currentLocation, nextLocation })=>{
503
509
  return !isSubmitting && modified && (currentLocation.pathname !== nextLocation.pathname || currentLocation.search !== nextLocation.search);
504
510
  });
@@ -526,6 +532,7 @@ const isErrorMessageDescriptor = (object)=>{
526
532
  height: "24px",
527
533
  fill: "danger600"
528
534
  }),
535
+ textAlign: "center",
529
536
  children: formatMessage({
530
537
  id: 'global.prompt.unsaved',
531
538
  defaultMessage: 'You have unsaved changes, are you sure you want to leave?'
@@ -536,6 +543,7 @@ const isErrorMessageDescriptor = (object)=>{
536
543
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Cancel, {
537
544
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
538
545
  variant: "tertiary",
546
+ fullWidth: true,
539
547
  children: formatMessage({
540
548
  id: 'app.components.Button.cancel',
541
549
  defaultMessage: 'Cancel'
@@ -548,6 +556,7 @@ const isErrorMessageDescriptor = (object)=>{
548
556
  blocker.proceed();
549
557
  },
550
558
  variant: "danger",
559
+ fullWidth: true,
551
560
  children: formatMessage({
552
561
  id: 'app.components.Button.confirm',
553
562
  defaultMessage: 'Confirm'
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","sources":["../../../../../admin/src/components/Form.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n type BoxProps,\n Button,\n Dialog,\n useCallbackRef,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { produce } from 'immer';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl, type MessageDescriptor, type PrimitiveType } from 'react-intl';\nimport { useBlocker } from 'react-router-dom';\n\nimport { getIn, setIn } from '../utils/objects';\n\nimport { createContext } from './Context';\n\nimport type {\n InputProps as InputPropsImpl,\n StringProps,\n EnumerationProps,\n} from './FormInputs/types';\nimport type * as Yup from 'yup';\n\n/* -------------------------------------------------------------------------------------------------\n * FormContext\n * -----------------------------------------------------------------------------------------------*/\ntype InputProps = InputPropsImpl | StringProps | EnumerationProps;\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\ninterface FormValues {\n [field: string]: any;\n}\n\ninterface FormContextValue<TFormValues extends FormValues = FormValues>\n extends FormState<TFormValues> {\n disabled: boolean;\n initialValues: TFormValues;\n modified: boolean;\n /**\n * The default behaviour is to add the row to the end of the array, if you want to add it to a\n * specific index you can pass the index.\n */\n addFieldRow: (field: string, value: any, addAtIndex?: number) => void;\n moveFieldRow: (field: string, fromIndex: number, toIndex: number) => void;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: any) => void;\n /*\n * The default behaviour is to remove the last row, if you want to remove a specific index you can\n * pass the index.\n */\n removeFieldRow: (field: string, removeAtIndex?: number) => void;\n resetForm: (newInitialValues?: TFormValues) => void;\n setErrors: (errors: FormErrors<TFormValues>) => void;\n setSubmitting: (isSubmitting: boolean) => void;\n setValues: (values: TFormValues) => void;\n validate: (\n shouldSetErrors?: boolean,\n options?: Record<string, string>\n ) => Promise<\n { data: TFormValues; errors?: never } | { data?: never; errors: FormErrors<TFormValues> }\n >;\n}\n\n/**\n * @internal\n * @description We use this just to warn people that they're using the useForm\n * methods outside of a Form component, but we don't want to throw an error\n * because otherwise the DocumentActions list cannot be rendered in our list-view.\n */\nconst ERR_MSG =\n 'The Form Component has not been initialised, ensure you are using this hook within a Form component';\n\nconst [FormProvider, useForm] = createContext<FormContextValue>('Form', {\n disabled: false,\n errors: {},\n initialValues: {},\n isSubmitting: false,\n modified: false,\n addFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n moveFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n onChange: () => {\n throw new Error(ERR_MSG);\n },\n removeFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n resetForm: () => {\n throw new Error(ERR_MSG);\n },\n setErrors: () => {\n throw new Error(ERR_MSG);\n },\n setValues: () => {\n throw new Error(ERR_MSG);\n },\n setSubmitting: () => {\n throw new Error(ERR_MSG);\n },\n validate: async () => {\n throw new Error(ERR_MSG);\n },\n values: {},\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Form\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormHelpers<TFormValues extends FormValues = FormValues>\n extends Pick<FormContextValue<TFormValues>, 'setErrors' | 'setValues' | 'resetForm'> {}\n\ninterface FormProps<TFormValues extends FormValues = FormValues>\n extends Partial<Pick<FormContextValue<TFormValues>, 'disabled' | 'initialValues'>>,\n Pick<BoxProps, 'width' | 'height'> {\n children:\n | React.ReactNode\n | ((\n props: Pick<\n FormContextValue<TFormValues>,\n | 'disabled'\n | 'errors'\n | 'isSubmitting'\n | 'modified'\n | 'values'\n | 'resetForm'\n | 'onChange'\n | 'setErrors'\n >\n ) => React.ReactNode);\n method: 'POST' | 'PUT';\n onSubmit?: (values: TFormValues, helpers: FormHelpers<TFormValues>) => Promise<void> | void;\n // TODO: type the return value for a validation schema func from Yup.\n validationSchema?: Yup.AnySchema;\n initialErrors?: FormErrors<TFormValues>;\n // NOTE: we don't know what return type it can be here\n validate?: (values: TFormValues, options: Record<string, string>) => Promise<any>;\n}\n\n/**\n * @alpha\n * @description A form component that handles form state, validation and submission.\n * It can additionally handle nested fields and arrays. To access the data you can either\n * use the generic useForm hook or the useField hook when providing the name of your field.\n */\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ disabled = false, method, onSubmit, initialErrors, ...props }, ref) => {\n const formRef = React.useRef<HTMLFormElement>(null!);\n const initialValues = React.useRef(props.initialValues ?? {});\n const [state, dispatch] = React.useReducer(reducer, {\n errors: initialErrors ?? {},\n isSubmitting: false,\n values: props.initialValues ?? {},\n });\n\n React.useEffect(() => {\n /**\n * ONLY update the initialValues if the prop has changed.\n */\n if (!isEqual(initialValues.current, props.initialValues)) {\n initialValues.current = props.initialValues ?? {};\n\n dispatch({\n type: 'SET_INITIAL_VALUES',\n payload: props.initialValues ?? {},\n });\n }\n }, [props.initialValues]);\n\n const setErrors = React.useCallback((errors: FormErrors) => {\n dispatch({\n type: 'SET_ERRORS',\n payload: errors,\n });\n }, []);\n\n const setValues = React.useCallback((values: FormValues) => {\n dispatch({\n type: 'SET_VALUES',\n payload: values,\n });\n }, []);\n\n React.useEffect(() => {\n if (Object.keys(state.errors).length === 0) return;\n\n /**\n * Small timeout to ensure the form has been\n * rendered before we try to focus on the first\n */\n const ref = setTimeout(() => {\n const [firstError] = formRef.current.querySelectorAll('[data-strapi-field-error]');\n\n if (firstError) {\n const errorId = firstError.getAttribute('id');\n const formElementInError = formRef.current.querySelector(\n `[aria-describedby=\"${errorId}\"]`\n );\n\n if (formElementInError && formElementInError instanceof HTMLElement) {\n formElementInError.focus();\n }\n }\n });\n\n return () => clearTimeout(ref);\n }, [state.errors]);\n\n /**\n * Uses the provided validation schema\n */\n const validate = React.useCallback(\n async (shouldSetErrors: boolean = true, options: Record<string, string> = {}) => {\n setErrors({});\n\n if (!props.validationSchema && !props.validate) {\n return { data: state.values };\n }\n\n try {\n let data;\n if (props.validationSchema) {\n data = await props.validationSchema.validate(state.values, { abortEarly: false });\n } else if (props.validate) {\n data = await props.validate(state.values, options);\n } else {\n throw new Error('No validation schema or validate function provided');\n }\n\n return { data };\n } catch (err) {\n if (isErrorYupValidationError(err)) {\n const errors = getYupValidationErrors(err);\n\n if (shouldSetErrors) {\n setErrors(errors);\n }\n\n return { errors };\n } else {\n // We throw any other errors\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: An unhandled error was caught during validation in <Form validationSchema />`,\n err\n );\n }\n\n throw err;\n }\n }\n },\n [props, setErrors, state.values]\n );\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (!onSubmit) {\n return;\n }\n\n dispatch({\n type: 'SUBMIT_ATTEMPT',\n });\n\n try {\n const { data, errors } = await validate();\n\n if (errors) {\n setErrors(errors);\n\n throw new Error('Submission failed');\n }\n\n await onSubmit(data, {\n setErrors,\n setValues,\n resetForm,\n });\n\n dispatch({\n type: 'SUBMIT_SUCCESS',\n });\n } catch (err) {\n dispatch({\n type: 'SUBMIT_FAILURE',\n });\n\n if (err instanceof Error && err.message === 'Submission failed') {\n return;\n }\n }\n };\n\n const modified = React.useMemo(\n () => !isEqual(initialValues.current, state.values),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [state.values, initialValues.current]\n );\n\n const handleChange: FormContextValue['onChange'] = useCallbackRef((eventOrPath, v) => {\n if (typeof eventOrPath === 'string') {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field: eventOrPath,\n value: v,\n },\n });\n\n return;\n }\n\n const target = eventOrPath.target || eventOrPath.currentTarget;\n\n const { type, name, id, value, options, multiple } = target;\n\n const field = name || id;\n\n if (!field && process.env.NODE_ENV !== 'production') {\n console.warn(\n `\\`onChange\\` was called with an event, but you forgot to pass a \\`name\\` or \\`id'\\` attribute to your input. The field to update cannot be determined`\n );\n }\n\n /**\n * Because we handle any field from this function, we run through a series\n * of checks to understand how to use the value.\n */\n let val;\n\n if (/number|range/.test(type)) {\n const parsed = parseFloat(value);\n // If the value isn't a number for whatever reason, don't let it through because that will break the API.\n val = isNaN(parsed) ? '' : parsed;\n } else if (/checkbox/.test(type)) {\n // Get & invert the current value of the checkbox.\n val = !getIn(state.values, field);\n } else if (options && multiple) {\n // This will handle native select elements incl. ones with mulitple options.\n val = Array.from<HTMLOptionElement>(options)\n .filter((el) => el.selected)\n .map((el) => el.value);\n } else {\n // NOTE: reset value to null so it failes required checks.\n // The API only considers a required field invalid if the value is null|undefined, to differentiate from min 1\n if (value === '') {\n val = null;\n } else {\n val = value;\n }\n }\n\n if (field) {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field,\n value: val,\n },\n });\n }\n });\n\n const addFieldRow: FormContextValue['addFieldRow'] = React.useCallback(\n (field, value, addAtIndex) => {\n dispatch({\n type: 'ADD_FIELD_ROW',\n payload: {\n field,\n value,\n addAtIndex,\n },\n });\n },\n []\n );\n\n const removeFieldRow: FormContextValue['removeFieldRow'] = React.useCallback(\n (field, removeAtIndex) => {\n dispatch({\n type: 'REMOVE_FIELD_ROW',\n payload: {\n field,\n removeAtIndex,\n },\n });\n },\n []\n );\n\n const moveFieldRow: FormContextValue['moveFieldRow'] = React.useCallback(\n (field, fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_FIELD_ROW',\n payload: {\n field,\n fromIndex,\n toIndex,\n },\n });\n },\n []\n );\n\n const resetForm: FormContextValue['resetForm'] = React.useCallback((newInitialValues) => {\n if (newInitialValues) {\n initialValues.current = newInitialValues;\n }\n dispatch({\n type: 'RESET_FORM',\n payload: {\n errors: {},\n isSubmitting: false,\n values: initialValues.current,\n },\n });\n }, []);\n\n const setSubmitting = React.useCallback((isSubmitting: boolean) => {\n dispatch({ type: 'SET_ISSUBMITTING', payload: isSubmitting });\n }, []);\n\n const composedRefs = useComposedRefs(formRef, ref);\n\n return (\n <Box\n tag=\"form\"\n ref={composedRefs}\n method={method}\n noValidate\n onSubmit={handleSubmit}\n width={props.width}\n height={props.height}\n >\n <FormProvider\n disabled={disabled}\n onChange={handleChange}\n initialValues={initialValues.current}\n modified={modified}\n addFieldRow={addFieldRow}\n moveFieldRow={moveFieldRow}\n removeFieldRow={removeFieldRow}\n resetForm={resetForm}\n setErrors={setErrors}\n setValues={setValues}\n setSubmitting={setSubmitting}\n validate={validate}\n {...state}\n >\n {typeof props.children === 'function'\n ? props.children({\n modified,\n disabled,\n onChange: handleChange,\n ...state,\n setErrors,\n resetForm,\n })\n : props.children}\n </FormProvider>\n </Box>\n );\n }\n) as <TFormValues extends FormValues>(\n p: FormProps<TFormValues> & { ref?: React.Ref<HTMLFormElement> }\n) => React.ReactElement; // we've cast this because we need the generic to infer the type of the form values.\n\n/**\n * @internal\n * @description Checks if the error is a Yup validation error.\n */\nconst isErrorYupValidationError = (err: any): err is Yup.ValidationError =>\n typeof err === 'object' &&\n err !== null &&\n 'name' in err &&\n typeof err.name === 'string' &&\n err.name === 'ValidationError';\n\n/* -------------------------------------------------------------------------------------------------\n * getYupValidationErrors\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description handy utility to convert a yup validation error into a form\n * error object. To be used elsewhere.\n */\nconst getYupValidationErrors = (err: Yup.ValidationError): FormErrors => {\n let errors: FormErrors = {};\n\n if (err.inner) {\n if (err.inner.length === 0) {\n return setIn(errors, err.path!, err.message);\n }\n for (const error of err.inner) {\n if (!getIn(errors, error.path!)) {\n errors = setIn(errors, error.path!, error.message);\n }\n }\n }\n\n return errors;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ntype FormErrors<TFormValues extends FormValues = FormValues> = {\n // is it a repeatable component or dynamic zone?\n [Key in keyof TFormValues]?: TFormValues[Key] extends any[]\n ? TFormValues[Key][number] extends object\n ? FormErrors<TFormValues[Key][number]>[] | string | string[]\n : string // this would let us support errors for the dynamic zone or repeatable component not the components within.\n : TFormValues[Key] extends object // is it a regular component?\n ? FormErrors<TFormValues[Key]> // handles nested components\n : string | TranslationMessage; // otherwise its just a field or a translation message.\n};\n\ninterface FormState<TFormValues extends FormValues = FormValues> {\n /**\n * TODO: make this a better type explaining errors could be nested because it follows the same\n * structure as the values.\n */\n errors: FormErrors<TFormValues>;\n isSubmitting: boolean;\n values: TFormValues;\n}\n\ntype FormActions<TFormValues extends FormValues = FormValues> =\n | { type: 'SUBMIT_ATTEMPT' }\n | { type: 'SUBMIT_FAILURE' }\n | { type: 'SUBMIT_SUCCESS' }\n | { type: 'SET_FIELD_VALUE'; payload: { field: string; value: any } }\n | { type: 'ADD_FIELD_ROW'; payload: { field: string; value: any; addAtIndex?: number } }\n | { type: 'REMOVE_FIELD_ROW'; payload: { field: string; removeAtIndex?: number } }\n | { type: 'MOVE_FIELD_ROW'; payload: { field: string; fromIndex: number; toIndex: number } }\n | { type: 'SET_ERRORS'; payload: FormErrors<TFormValues> }\n | { type: 'SET_ISSUBMITTING'; payload: boolean }\n | { type: 'SET_INITIAL_VALUES'; payload: TFormValues }\n | { type: 'SET_VALUES'; payload: TFormValues }\n | { type: 'RESET_FORM'; payload: FormState<TFormValues> };\n\nconst reducer = <TFormValues extends FormValues = FormValues>(\n state: FormState<TFormValues>,\n action: FormActions<TFormValues>\n) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'SET_INITIAL_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SET_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SUBMIT_ATTEMPT':\n draft.isSubmitting = true;\n break;\n case 'SUBMIT_FAILURE':\n draft.isSubmitting = false;\n break;\n case 'SUBMIT_SUCCESS':\n draft.isSubmitting = false;\n break;\n case 'SET_FIELD_VALUE':\n draft.values = setIn(state.values, action.payload.field, action.payload.value);\n break;\n case 'ADD_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.addAtIndex;\n\n if (position === undefined) {\n position = currentField.length;\n } else if (position < 0) {\n position = 0;\n }\n\n const [key] = generateNKeysBetween(\n position > 0 ? currentField.at(position - 1)?.__temp_key__ : null,\n currentField.at(position)?.__temp_key__,\n 1\n );\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n currentField.toSpliced(position, 0, {\n ...action.payload.value,\n __temp_key__: key,\n })\n );\n\n break;\n }\n case 'MOVE_FIELD_ROW': {\n const { field, fromIndex, toIndex } = action.payload;\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = [...(getIn(state.values, field, []) as Array<any>)];\n const currentRow = currentField[fromIndex];\n\n const startKey =\n fromIndex > toIndex\n ? currentField[toIndex - 1]?.__temp_key__\n : currentField[toIndex]?.__temp_key__;\n const endKey =\n fromIndex > toIndex\n ? currentField[toIndex]?.__temp_key__\n : currentField[toIndex + 1]?.__temp_key__;\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n currentField.splice(fromIndex, 1);\n currentField.splice(toIndex, 0, { ...currentRow, __temp_key__: newKey });\n\n draft.values = setIn(state.values, field, currentField);\n\n break;\n }\n case 'REMOVE_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.removeAtIndex;\n\n if (position === undefined) {\n position = currentField.length - 1;\n } else if (position < 0) {\n position = 0;\n }\n\n /**\n * filter out empty values from the array, the setIn function only deletes the value\n * when we pass undefined as opposed to \"removing\" it from said array.\n */\n const newValue = setIn(currentField, position.toString(), undefined).filter(\n (val: unknown) => val\n );\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n newValue.length > 0 ? newValue : []\n );\n\n break;\n }\n case 'SET_ERRORS':\n if (!isEqual(state.errors, action.payload)) {\n // @ts-expect-error – TODO: figure out why this fails a TS check.\n draft.errors = action.payload;\n }\n break;\n case 'SET_ISSUBMITTING':\n draft.isSubmitting = action.payload;\n break;\n case 'RESET_FORM':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload.values;\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.errors = action.payload.errors;\n draft.isSubmitting = action.payload.isSubmitting;\n break;\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * useField\n * -----------------------------------------------------------------------------------------------*/\ninterface FieldValue<TValue = any> {\n error?: string;\n initialValue: TValue;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: TValue) => void;\n value: TValue;\n rawError?: any;\n}\n\nfunction useField<TValue = any>(path: string): FieldValue<TValue | undefined> {\n const { formatMessage } = useIntl();\n\n const initialValue = useForm(\n 'useField',\n (state) => getIn(state.initialValues, path) as FieldValue<TValue>['initialValue']\n );\n\n const value = useForm(\n 'useField',\n (state) => getIn(state.values, path) as FieldValue<TValue>['value']\n );\n\n const handleChange = useForm('useField', (state) => state.onChange);\n\n const rawError = useForm('useField', (state) => getIn(state.errors, path));\n\n const error = useForm('useField', (state) => {\n const error = getIn(state.errors, path);\n\n if (isErrorMessageDescriptor(error)) {\n const { values, ...message } = error;\n return formatMessage(message, values);\n }\n\n return error;\n });\n\n return {\n initialValue,\n /**\n * Errors can be a string, or a MessageDescriptor, so we need to handle both cases.\n * If it's anything else, we don't return it.\n */\n rawError,\n error: isErrorMessageDescriptor(error)\n ? formatMessage(\n {\n id: error.id,\n defaultMessage: error.defaultMessage,\n },\n error.values\n )\n : typeof error === 'string'\n ? error\n : undefined,\n onChange: handleChange,\n value: value,\n };\n}\n\nconst isErrorMessageDescriptor = (object?: object): object is TranslationMessage => {\n return (\n typeof object === 'object' &&\n object !== null &&\n !Array.isArray(object) &&\n 'id' in object &&\n 'defaultMessage' in object\n );\n};\n\n/**\n * Props for the Blocker component.\n * @param onProceed Function to be called when the user confirms the action that triggered the blocker.\n * @param onCancel Function to be called when the user cancels the action that triggered the blocker.\n */\ninterface BlockerProps {\n onProceed?: () => void;\n onCancel?: () => void;\n}\n/* -------------------------------------------------------------------------------------------------\n * Blocker\n * -----------------------------------------------------------------------------------------------*/\nconst Blocker = ({ onProceed = () => {}, onCancel = () => {} }: BlockerProps) => {\n const { formatMessage } = useIntl();\n const modified = useForm('Blocker', (state) => state.modified);\n const isSubmitting = useForm('Blocker', (state) => state.isSubmitting);\n\n const blocker = useBlocker(({ currentLocation, nextLocation }) => {\n return (\n !isSubmitting &&\n modified &&\n (currentLocation.pathname !== nextLocation.pathname ||\n currentLocation.search !== nextLocation.search)\n );\n });\n\n if (blocker.state === 'blocked') {\n const handleCancel = (isOpen: boolean) => {\n if (!isOpen) {\n onCancel();\n blocker.reset();\n }\n };\n\n return (\n <Dialog.Root open onOpenChange={handleCancel}>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n </Dialog.Header>\n <Dialog.Body icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}>\n {formatMessage({\n id: 'global.prompt.unsaved',\n defaultMessage: 'You have unsaved changes, are you sure you want to leave?',\n })}\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button\n onClick={() => {\n onProceed();\n blocker.proceed();\n }}\n variant=\"danger\"\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n }\n\n return null;\n};\n\nexport { Form, Blocker, useField, useForm, getYupValidationErrors };\nexport type {\n FormErrors,\n FormHelpers,\n FormProps,\n FormValues,\n FormContextValue,\n FormState,\n FieldValue,\n InputProps,\n};\n"],"names":["ERR_MSG","FormProvider","useForm","createContext","disabled","errors","initialValues","isSubmitting","modified","addFieldRow","Error","moveFieldRow","onChange","removeFieldRow","resetForm","setErrors","setValues","setSubmitting","validate","values","Form","React","forwardRef","method","onSubmit","initialErrors","props","ref","formRef","useRef","state","dispatch","useReducer","reducer","useEffect","isEqual","current","type","payload","useCallback","Object","keys","length","setTimeout","firstError","querySelectorAll","errorId","getAttribute","formElementInError","querySelector","HTMLElement","focus","clearTimeout","shouldSetErrors","options","validationSchema","data","abortEarly","err","isErrorYupValidationError","getYupValidationErrors","process","env","NODE_ENV","console","warn","handleSubmit","e","stopPropagation","preventDefault","message","useMemo","handleChange","useCallbackRef","eventOrPath","v","field","value","target","currentTarget","name","id","multiple","val","test","parsed","parseFloat","isNaN","getIn","Array","from","filter","el","selected","map","addAtIndex","removeAtIndex","fromIndex","toIndex","newInitialValues","composedRefs","useComposedRefs","_jsx","Box","tag","noValidate","width","height","children","inner","setIn","path","error","action","produce","draft","currentField","position","undefined","key","generateNKeysBetween","at","__temp_key__","toSpliced","currentRow","startKey","endKey","newKey","splice","newValue","toString","useField","formatMessage","useIntl","initialValue","rawError","isErrorMessageDescriptor","defaultMessage","object","isArray","Blocker","onProceed","onCancel","blocker","useBlocker","currentLocation","nextLocation","pathname","search","handleCancel","isOpen","reset","Dialog","Root","open","onOpenChange","_jsxs","Content","Header","Body","icon","WarningCircle","fill","Footer","Cancel","Button","variant","onClick","proceed"],"mappings":"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"}
1
+ {"version":3,"file":"Form.js","sources":["../../../../../admin/src/components/Form.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n type BoxProps,\n Button,\n Dialog,\n useCallbackRef,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { produce } from 'immer';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl, type MessageDescriptor, type PrimitiveType } from 'react-intl';\nimport { useBlocker } from 'react-router-dom';\n\nimport { useWarnIfUnsavedChanges } from '../hooks/useWarnIfUnsavedChanges';\nimport { getIn, setIn } from '../utils/objects';\n\nimport { createContext } from './Context';\n\nimport type {\n InputProps as InputPropsImpl,\n StringProps,\n EnumerationProps,\n} from './FormInputs/types';\nimport type * as Yup from 'yup';\n\n/* -------------------------------------------------------------------------------------------------\n * FormContext\n * -----------------------------------------------------------------------------------------------*/\ntype InputProps = InputPropsImpl | StringProps | EnumerationProps;\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\ninterface FormValues {\n [field: string]: any;\n}\n\ninterface FormContextValue<TFormValues extends FormValues = FormValues>\n extends FormState<TFormValues> {\n disabled: boolean;\n initialValues: TFormValues;\n modified: boolean;\n /**\n * The default behaviour is to add the row to the end of the array, if you want to add it to a\n * specific index you can pass the index.\n */\n addFieldRow: (field: string, value: any, addAtIndex?: number) => void;\n moveFieldRow: (field: string, fromIndex: number, toIndex: number) => void;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: any) => void;\n /*\n * The default behaviour is to remove the last row, if you want to remove a specific index you can\n * pass the index.\n */\n removeFieldRow: (field: string, removeAtIndex?: number) => void;\n resetForm: (newInitialValues?: TFormValues) => void;\n setErrors: (errors: FormErrors<TFormValues>) => void;\n setSubmitting: (isSubmitting: boolean) => void;\n setValues: (values: TFormValues) => void;\n validate: (\n shouldSetErrors?: boolean,\n options?: Record<string, string>\n ) => Promise<\n { data: TFormValues; errors?: never } | { data?: never; errors: FormErrors<TFormValues> }\n >;\n}\n\n/**\n * @internal\n * @description We use this just to warn people that they're using the useForm\n * methods outside of a Form component, but we don't want to throw an error\n * because otherwise the DocumentActions list cannot be rendered in our list-view.\n */\nconst ERR_MSG =\n 'The Form Component has not been initialised, ensure you are using this hook within a Form component';\n\nconst [FormProvider, useForm] = createContext<FormContextValue>('Form', {\n disabled: false,\n errors: {},\n initialValues: {},\n isSubmitting: false,\n modified: false,\n addFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n moveFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n onChange: () => {\n throw new Error(ERR_MSG);\n },\n removeFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n resetForm: () => {\n throw new Error(ERR_MSG);\n },\n setErrors: () => {\n throw new Error(ERR_MSG);\n },\n setValues: () => {\n throw new Error(ERR_MSG);\n },\n setSubmitting: () => {\n throw new Error(ERR_MSG);\n },\n validate: async () => {\n throw new Error(ERR_MSG);\n },\n values: {},\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Form\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormHelpers<TFormValues extends FormValues = FormValues>\n extends Pick<FormContextValue<TFormValues>, 'setErrors' | 'setValues' | 'resetForm'> {}\n\ninterface FormProps<TFormValues extends FormValues = FormValues>\n extends Partial<Pick<FormContextValue<TFormValues>, 'disabled' | 'initialValues'>>,\n Pick<BoxProps, 'width' | 'height'> {\n children:\n | React.ReactNode\n | ((\n props: Pick<\n FormContextValue<TFormValues>,\n | 'disabled'\n | 'errors'\n | 'isSubmitting'\n | 'modified'\n | 'values'\n | 'resetForm'\n | 'onChange'\n | 'setErrors'\n >\n ) => React.ReactNode);\n method: 'POST' | 'PUT';\n onSubmit?: (values: TFormValues, helpers: FormHelpers<TFormValues>) => Promise<void> | void;\n // TODO: type the return value for a validation schema func from Yup.\n validationSchema?: Yup.AnySchema;\n initialErrors?: FormErrors<TFormValues>;\n // NOTE: we don't know what return type it can be here\n validate?: (values: TFormValues, options: Record<string, string>) => Promise<any>;\n}\n\n/**\n * @alpha\n * @description A form component that handles form state, validation and submission.\n * It can additionally handle nested fields and arrays. To access the data you can either\n * use the generic useForm hook or the useField hook when providing the name of your field.\n */\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ disabled = false, method, onSubmit, initialErrors, ...props }, ref) => {\n const formRef = React.useRef<HTMLFormElement>(null!);\n const initialValues = React.useRef(props.initialValues ?? {});\n const [state, dispatch] = React.useReducer(reducer, {\n errors: initialErrors ?? {},\n isSubmitting: false,\n values: props.initialValues ?? {},\n });\n\n React.useEffect(() => {\n /**\n * ONLY update the initialValues if the prop has changed.\n */\n if (!isEqual(initialValues.current, props.initialValues)) {\n initialValues.current = props.initialValues ?? {};\n\n dispatch({\n type: 'SET_INITIAL_VALUES',\n payload: props.initialValues ?? {},\n });\n }\n }, [props.initialValues]);\n\n const setErrors = React.useCallback((errors: FormErrors) => {\n dispatch({\n type: 'SET_ERRORS',\n payload: errors,\n });\n }, []);\n\n const setValues = React.useCallback((values: FormValues) => {\n dispatch({\n type: 'SET_VALUES',\n payload: values,\n });\n }, []);\n\n React.useEffect(() => {\n if (Object.keys(state.errors).length === 0) return;\n\n /**\n * Small timeout to ensure the form has been\n * rendered before we try to focus on the first\n */\n const ref = setTimeout(() => {\n const [firstError] = formRef.current.querySelectorAll('[data-strapi-field-error]');\n\n if (firstError) {\n const errorId = firstError.getAttribute('id');\n const formElementInError = formRef.current.querySelector(\n `[aria-describedby=\"${errorId}\"]`\n );\n\n if (formElementInError && formElementInError instanceof HTMLElement) {\n formElementInError.focus();\n }\n }\n });\n\n return () => clearTimeout(ref);\n }, [state.errors]);\n\n /**\n * Uses the provided validation schema\n */\n const validate = React.useCallback(\n async (shouldSetErrors: boolean = true, options: Record<string, string> = {}) => {\n setErrors({});\n\n if (!props.validationSchema && !props.validate) {\n return { data: state.values };\n }\n\n try {\n let data;\n if (props.validationSchema) {\n data = await props.validationSchema.validate(state.values, { abortEarly: false });\n } else if (props.validate) {\n data = await props.validate(state.values, options);\n } else {\n throw new Error('No validation schema or validate function provided');\n }\n\n return { data };\n } catch (err) {\n if (isErrorYupValidationError(err)) {\n const errors = getYupValidationErrors(err);\n\n if (shouldSetErrors) {\n setErrors(errors);\n }\n\n return { errors };\n } else {\n // We throw any other errors\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: An unhandled error was caught during validation in <Form validationSchema />`,\n err\n );\n }\n\n throw err;\n }\n }\n },\n [props, setErrors, state.values]\n );\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (!onSubmit) {\n return;\n }\n\n dispatch({\n type: 'SUBMIT_ATTEMPT',\n });\n\n try {\n const { data, errors } = await validate();\n\n if (errors) {\n setErrors(errors);\n\n throw new Error('Submission failed');\n }\n\n await onSubmit(data, {\n setErrors,\n setValues,\n resetForm,\n });\n\n dispatch({\n type: 'SUBMIT_SUCCESS',\n });\n } catch (err) {\n dispatch({\n type: 'SUBMIT_FAILURE',\n });\n\n if (err instanceof Error && err.message === 'Submission failed') {\n return;\n }\n }\n };\n\n const modified = React.useMemo(\n () => !isEqual(initialValues.current, state.values),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [state.values, initialValues.current]\n );\n\n const handleChange: FormContextValue['onChange'] = useCallbackRef((eventOrPath, v) => {\n if (typeof eventOrPath === 'string') {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field: eventOrPath,\n value: v,\n },\n });\n\n return;\n }\n\n const target = eventOrPath.target || eventOrPath.currentTarget;\n\n const { type, name, id, value, options, multiple } = target;\n\n const field = name || id;\n\n if (!field && process.env.NODE_ENV !== 'production') {\n console.warn(\n `\\`onChange\\` was called with an event, but you forgot to pass a \\`name\\` or \\`id'\\` attribute to your input. The field to update cannot be determined`\n );\n }\n\n /**\n * Because we handle any field from this function, we run through a series\n * of checks to understand how to use the value.\n */\n let val;\n\n if (/number|range/.test(type)) {\n const parsed = parseFloat(value);\n // If the value isn't a number for whatever reason, don't let it through because that will break the API.\n val = isNaN(parsed) ? '' : parsed;\n } else if (/checkbox/.test(type)) {\n // Get & invert the current value of the checkbox.\n val = !getIn(state.values, field);\n } else if (options && multiple) {\n // This will handle native select elements incl. ones with mulitple options.\n val = Array.from<HTMLOptionElement>(options)\n .filter((el) => el.selected)\n .map((el) => el.value);\n } else {\n // NOTE: reset value to null so it failes required checks.\n // The API only considers a required field invalid if the value is null|undefined, to differentiate from min 1\n if (value === '') {\n val = null;\n } else {\n val = value;\n }\n }\n\n if (field) {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field,\n value: val,\n },\n });\n }\n });\n\n const addFieldRow: FormContextValue['addFieldRow'] = React.useCallback(\n (field, value, addAtIndex) => {\n dispatch({\n type: 'ADD_FIELD_ROW',\n payload: {\n field,\n value,\n addAtIndex,\n },\n });\n },\n []\n );\n\n const removeFieldRow: FormContextValue['removeFieldRow'] = React.useCallback(\n (field, removeAtIndex) => {\n dispatch({\n type: 'REMOVE_FIELD_ROW',\n payload: {\n field,\n removeAtIndex,\n },\n });\n },\n []\n );\n\n const moveFieldRow: FormContextValue['moveFieldRow'] = React.useCallback(\n (field, fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_FIELD_ROW',\n payload: {\n field,\n fromIndex,\n toIndex,\n },\n });\n },\n []\n );\n\n const resetForm: FormContextValue['resetForm'] = React.useCallback((newInitialValues) => {\n if (newInitialValues) {\n initialValues.current = newInitialValues;\n }\n dispatch({\n type: 'RESET_FORM',\n payload: {\n errors: {},\n isSubmitting: false,\n values: initialValues.current,\n },\n });\n }, []);\n\n const setSubmitting = React.useCallback((isSubmitting: boolean) => {\n dispatch({ type: 'SET_ISSUBMITTING', payload: isSubmitting });\n }, []);\n\n const composedRefs = useComposedRefs(formRef, ref);\n\n return (\n <Box\n tag=\"form\"\n ref={composedRefs}\n method={method}\n noValidate\n onSubmit={handleSubmit}\n width={props.width}\n height={props.height}\n >\n <FormProvider\n disabled={disabled}\n onChange={handleChange}\n initialValues={initialValues.current}\n modified={modified}\n addFieldRow={addFieldRow}\n moveFieldRow={moveFieldRow}\n removeFieldRow={removeFieldRow}\n resetForm={resetForm}\n setErrors={setErrors}\n setValues={setValues}\n setSubmitting={setSubmitting}\n validate={validate}\n {...state}\n >\n {typeof props.children === 'function'\n ? props.children({\n modified,\n disabled,\n onChange: handleChange,\n ...state,\n setErrors,\n resetForm,\n })\n : props.children}\n </FormProvider>\n </Box>\n );\n }\n) as <TFormValues extends FormValues>(\n p: FormProps<TFormValues> & { ref?: React.Ref<HTMLFormElement> }\n) => React.ReactElement; // we've cast this because we need the generic to infer the type of the form values.\n\n/**\n * @internal\n * @description Checks if the error is a Yup validation error.\n */\nconst isErrorYupValidationError = (err: any): err is Yup.ValidationError =>\n typeof err === 'object' &&\n err !== null &&\n 'name' in err &&\n typeof err.name === 'string' &&\n err.name === 'ValidationError';\n\n/* -------------------------------------------------------------------------------------------------\n * getYupValidationErrors\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description handy utility to convert a yup validation error into a form\n * error object. To be used elsewhere.\n */\nconst getYupValidationErrors = (err: Yup.ValidationError): FormErrors => {\n let errors: FormErrors = {};\n\n if (err.inner) {\n if (err.inner.length === 0) {\n return setIn(errors, err.path!, err.message);\n }\n for (const error of err.inner) {\n if (!getIn(errors, error.path!)) {\n errors = setIn(errors, error.path!, error.message);\n }\n }\n }\n\n return errors;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ntype FormErrors<TFormValues extends FormValues = FormValues> = {\n // is it a repeatable component or dynamic zone?\n [Key in keyof TFormValues]?: TFormValues[Key] extends any[]\n ? TFormValues[Key][number] extends object\n ? FormErrors<TFormValues[Key][number]>[] | string | string[]\n : string // this would let us support errors for the dynamic zone or repeatable component not the components within.\n : TFormValues[Key] extends object // is it a regular component?\n ? FormErrors<TFormValues[Key]> // handles nested components\n : string | TranslationMessage; // otherwise its just a field or a translation message.\n};\n\ninterface FormState<TFormValues extends FormValues = FormValues> {\n /**\n * TODO: make this a better type explaining errors could be nested because it follows the same\n * structure as the values.\n */\n errors: FormErrors<TFormValues>;\n isSubmitting: boolean;\n values: TFormValues;\n}\n\ntype FormActions<TFormValues extends FormValues = FormValues> =\n | { type: 'SUBMIT_ATTEMPT' }\n | { type: 'SUBMIT_FAILURE' }\n | { type: 'SUBMIT_SUCCESS' }\n | { type: 'SET_FIELD_VALUE'; payload: { field: string; value: any } }\n | { type: 'ADD_FIELD_ROW'; payload: { field: string; value: any; addAtIndex?: number } }\n | { type: 'REMOVE_FIELD_ROW'; payload: { field: string; removeAtIndex?: number } }\n | { type: 'MOVE_FIELD_ROW'; payload: { field: string; fromIndex: number; toIndex: number } }\n | { type: 'SET_ERRORS'; payload: FormErrors<TFormValues> }\n | { type: 'SET_ISSUBMITTING'; payload: boolean }\n | { type: 'SET_INITIAL_VALUES'; payload: TFormValues }\n | { type: 'SET_VALUES'; payload: TFormValues }\n | { type: 'RESET_FORM'; payload: FormState<TFormValues> };\n\nconst reducer = <TFormValues extends FormValues = FormValues>(\n state: FormState<TFormValues>,\n action: FormActions<TFormValues>\n) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'SET_INITIAL_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SET_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SUBMIT_ATTEMPT':\n draft.isSubmitting = true;\n break;\n case 'SUBMIT_FAILURE':\n draft.isSubmitting = false;\n break;\n case 'SUBMIT_SUCCESS':\n draft.isSubmitting = false;\n break;\n case 'SET_FIELD_VALUE':\n draft.values = setIn(state.values, action.payload.field, action.payload.value);\n break;\n case 'ADD_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.addAtIndex;\n\n if (position === undefined) {\n position = currentField.length;\n } else if (position < 0) {\n position = 0;\n }\n\n const [key] = generateNKeysBetween(\n position > 0 ? currentField.at(position - 1)?.__temp_key__ : null,\n currentField.at(position)?.__temp_key__,\n 1\n );\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n currentField.toSpliced(position, 0, {\n ...action.payload.value,\n __temp_key__: key,\n })\n );\n\n break;\n }\n case 'MOVE_FIELD_ROW': {\n const { field, fromIndex, toIndex } = action.payload;\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = [...(getIn(state.values, field, []) as Array<any>)];\n const currentRow = currentField[fromIndex];\n\n const startKey =\n fromIndex > toIndex\n ? currentField[toIndex - 1]?.__temp_key__\n : currentField[toIndex]?.__temp_key__;\n const endKey =\n fromIndex > toIndex\n ? currentField[toIndex]?.__temp_key__\n : currentField[toIndex + 1]?.__temp_key__;\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n currentField.splice(fromIndex, 1);\n currentField.splice(toIndex, 0, { ...currentRow, __temp_key__: newKey });\n\n draft.values = setIn(state.values, field, currentField);\n\n break;\n }\n case 'REMOVE_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.removeAtIndex;\n\n if (position === undefined) {\n position = currentField.length - 1;\n } else if (position < 0) {\n position = 0;\n }\n\n /**\n * filter out empty values from the array, the setIn function only deletes the value\n * when we pass undefined as opposed to \"removing\" it from said array.\n */\n const newValue = setIn(currentField, position.toString(), undefined).filter(\n (val: unknown) => val\n );\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n newValue.length > 0 ? newValue : []\n );\n\n break;\n }\n case 'SET_ERRORS':\n if (!isEqual(state.errors, action.payload)) {\n // @ts-expect-error – TODO: figure out why this fails a TS check.\n draft.errors = action.payload;\n }\n break;\n case 'SET_ISSUBMITTING':\n draft.isSubmitting = action.payload;\n break;\n case 'RESET_FORM':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload.values;\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.errors = action.payload.errors;\n draft.isSubmitting = action.payload.isSubmitting;\n break;\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * useField\n * -----------------------------------------------------------------------------------------------*/\ninterface FieldValue<TValue = any> {\n error?: string;\n initialValue: TValue;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: TValue) => void;\n value: TValue;\n rawError?: any;\n}\n\nfunction useField<TValue = any>(path: string): FieldValue<TValue | undefined> {\n const { formatMessage } = useIntl();\n\n const initialValue = useForm(\n 'useField',\n (state) => getIn(state.initialValues, path) as FieldValue<TValue>['initialValue']\n );\n\n const value = useForm(\n 'useField',\n (state) => getIn(state.values, path) as FieldValue<TValue>['value']\n );\n\n const handleChange = useForm('useField', (state) => state.onChange);\n\n const rawError = useForm('useField', (state) => getIn(state.errors, path));\n\n const error = useForm('useField', (state) => {\n const error = getIn(state.errors, path);\n\n if (isErrorMessageDescriptor(error)) {\n const { values, ...message } = error;\n return formatMessage(message, values);\n }\n\n return error;\n });\n\n return {\n initialValue,\n /**\n * Errors can be a string, or a MessageDescriptor, so we need to handle both cases.\n * If it's anything else, we don't return it.\n */\n rawError,\n error: isErrorMessageDescriptor(error)\n ? formatMessage(\n {\n id: error.id,\n defaultMessage: error.defaultMessage,\n },\n error.values\n )\n : typeof error === 'string'\n ? error\n : undefined,\n onChange: handleChange,\n value: value,\n };\n}\n\nconst isErrorMessageDescriptor = (object?: object): object is TranslationMessage => {\n return (\n typeof object === 'object' &&\n object !== null &&\n !Array.isArray(object) &&\n 'id' in object &&\n 'defaultMessage' in object\n );\n};\n\n/**\n * Props for the Blocker component.\n * @param onProceed Function to be called when the user confirms the action that triggered the blocker.\n * @param onCancel Function to be called when the user cancels the action that triggered the blocker.\n */\ninterface BlockerProps {\n onProceed?: () => void;\n onCancel?: () => void;\n}\n/* -------------------------------------------------------------------------------------------------\n * Blocker\n * -----------------------------------------------------------------------------------------------*/\nconst Blocker = ({ onProceed = () => {}, onCancel = () => {} }: BlockerProps) => {\n const { formatMessage } = useIntl();\n const modified = useForm('Blocker', (state) => state.modified);\n const isSubmitting = useForm('Blocker', (state) => state.isSubmitting);\n\n // this is trigering a native browser prompt on page unload\n // We aren't able to use our Dialog component in that scenario\n // so we fallback to the native browser one when the user is trying to close/refresh the tab/browser\n // This hook will be triggered on dev mode because of the live reloads but it's fine as it's only for that scenario\n useWarnIfUnsavedChanges(modified && !isSubmitting);\n\n const blocker = useBlocker(({ currentLocation, nextLocation }) => {\n return (\n !isSubmitting &&\n modified &&\n (currentLocation.pathname !== nextLocation.pathname ||\n currentLocation.search !== nextLocation.search)\n );\n });\n\n if (blocker.state === 'blocked') {\n const handleCancel = (isOpen: boolean) => {\n if (!isOpen) {\n onCancel();\n blocker.reset();\n }\n };\n\n return (\n <Dialog.Root open onOpenChange={handleCancel}>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n </Dialog.Header>\n <Dialog.Body\n icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}\n textAlign=\"center\"\n >\n {formatMessage({\n id: 'global.prompt.unsaved',\n defaultMessage: 'You have unsaved changes, are you sure you want to leave?',\n })}\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth>\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button\n onClick={() => {\n onProceed();\n blocker.proceed();\n }}\n variant=\"danger\"\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n }\n\n return null;\n};\n\nexport { Form, Blocker, useField, useForm, getYupValidationErrors };\nexport type {\n FormErrors,\n FormHelpers,\n FormProps,\n FormValues,\n FormContextValue,\n FormState,\n FieldValue,\n InputProps,\n};\n"],"names":["ERR_MSG","FormProvider","useForm","createContext","disabled","errors","initialValues","isSubmitting","modified","addFieldRow","Error","moveFieldRow","onChange","removeFieldRow","resetForm","setErrors","setValues","setSubmitting","validate","values","Form","React","forwardRef","method","onSubmit","initialErrors","props","ref","formRef","useRef","state","dispatch","useReducer","reducer","useEffect","isEqual","current","type","payload","useCallback","Object","keys","length","setTimeout","firstError","querySelectorAll","errorId","getAttribute","formElementInError","querySelector","HTMLElement","focus","clearTimeout","shouldSetErrors","options","validationSchema","data","abortEarly","err","isErrorYupValidationError","getYupValidationErrors","process","env","NODE_ENV","console","warn","handleSubmit","e","stopPropagation","preventDefault","message","useMemo","handleChange","useCallbackRef","eventOrPath","v","field","value","target","currentTarget","name","id","multiple","val","test","parsed","parseFloat","isNaN","getIn","Array","from","filter","el","selected","map","addAtIndex","removeAtIndex","fromIndex","toIndex","newInitialValues","composedRefs","useComposedRefs","_jsx","Box","tag","noValidate","width","height","children","inner","setIn","path","error","action","produce","draft","currentField","position","undefined","key","generateNKeysBetween","at","__temp_key__","toSpliced","currentRow","startKey","endKey","newKey","splice","newValue","toString","useField","formatMessage","useIntl","initialValue","rawError","isErrorMessageDescriptor","defaultMessage","object","isArray","Blocker","onProceed","onCancel","useWarnIfUnsavedChanges","blocker","useBlocker","currentLocation","nextLocation","pathname","search","handleCancel","isOpen","reset","Dialog","Root","open","onOpenChange","_jsxs","Content","Header","Body","icon","WarningCircle","fill","textAlign","Footer","Cancel","Button","variant","fullWidth","onClick","proceed"],"mappings":"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"}
@@ -7,6 +7,7 @@ import { produce } from 'immer';
7
7
  import isEqual from 'lodash/isEqual';
8
8
  import { useIntl } from 'react-intl';
9
9
  import { useBlocker } from 'react-router-dom';
10
+ import { useWarnIfUnsavedChanges } from '../hooks/useWarnIfUnsavedChanges.mjs';
10
11
  import { getIn, setIn } from '../utils/objects.mjs';
11
12
  import { createContext } from './Context.mjs';
12
13
 
@@ -478,6 +479,11 @@ const isErrorMessageDescriptor = (object)=>{
478
479
  const { formatMessage } = useIntl();
479
480
  const modified = useForm('Blocker', (state)=>state.modified);
480
481
  const isSubmitting = useForm('Blocker', (state)=>state.isSubmitting);
482
+ // this is trigering a native browser prompt on page unload
483
+ // We aren't able to use our Dialog component in that scenario
484
+ // so we fallback to the native browser one when the user is trying to close/refresh the tab/browser
485
+ // This hook will be triggered on dev mode because of the live reloads but it's fine as it's only for that scenario
486
+ useWarnIfUnsavedChanges(modified && !isSubmitting);
481
487
  const blocker = useBlocker(({ currentLocation, nextLocation })=>{
482
488
  return !isSubmitting && modified && (currentLocation.pathname !== nextLocation.pathname || currentLocation.search !== nextLocation.search);
483
489
  });
@@ -505,6 +511,7 @@ const isErrorMessageDescriptor = (object)=>{
505
511
  height: "24px",
506
512
  fill: "danger600"
507
513
  }),
514
+ textAlign: "center",
508
515
  children: formatMessage({
509
516
  id: 'global.prompt.unsaved',
510
517
  defaultMessage: 'You have unsaved changes, are you sure you want to leave?'
@@ -515,6 +522,7 @@ const isErrorMessageDescriptor = (object)=>{
515
522
  /*#__PURE__*/ jsx(Dialog.Cancel, {
516
523
  children: /*#__PURE__*/ jsx(Button, {
517
524
  variant: "tertiary",
525
+ fullWidth: true,
518
526
  children: formatMessage({
519
527
  id: 'app.components.Button.cancel',
520
528
  defaultMessage: 'Cancel'
@@ -527,6 +535,7 @@ const isErrorMessageDescriptor = (object)=>{
527
535
  blocker.proceed();
528
536
  },
529
537
  variant: "danger",
538
+ fullWidth: true,
530
539
  children: formatMessage({
531
540
  id: 'app.components.Button.confirm',
532
541
  defaultMessage: 'Confirm'
@@ -1 +1 @@
1
- {"version":3,"file":"Form.mjs","sources":["../../../../../admin/src/components/Form.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n type BoxProps,\n Button,\n Dialog,\n useCallbackRef,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { produce } from 'immer';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl, type MessageDescriptor, type PrimitiveType } from 'react-intl';\nimport { useBlocker } from 'react-router-dom';\n\nimport { getIn, setIn } from '../utils/objects';\n\nimport { createContext } from './Context';\n\nimport type {\n InputProps as InputPropsImpl,\n StringProps,\n EnumerationProps,\n} from './FormInputs/types';\nimport type * as Yup from 'yup';\n\n/* -------------------------------------------------------------------------------------------------\n * FormContext\n * -----------------------------------------------------------------------------------------------*/\ntype InputProps = InputPropsImpl | StringProps | EnumerationProps;\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\ninterface FormValues {\n [field: string]: any;\n}\n\ninterface FormContextValue<TFormValues extends FormValues = FormValues>\n extends FormState<TFormValues> {\n disabled: boolean;\n initialValues: TFormValues;\n modified: boolean;\n /**\n * The default behaviour is to add the row to the end of the array, if you want to add it to a\n * specific index you can pass the index.\n */\n addFieldRow: (field: string, value: any, addAtIndex?: number) => void;\n moveFieldRow: (field: string, fromIndex: number, toIndex: number) => void;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: any) => void;\n /*\n * The default behaviour is to remove the last row, if you want to remove a specific index you can\n * pass the index.\n */\n removeFieldRow: (field: string, removeAtIndex?: number) => void;\n resetForm: (newInitialValues?: TFormValues) => void;\n setErrors: (errors: FormErrors<TFormValues>) => void;\n setSubmitting: (isSubmitting: boolean) => void;\n setValues: (values: TFormValues) => void;\n validate: (\n shouldSetErrors?: boolean,\n options?: Record<string, string>\n ) => Promise<\n { data: TFormValues; errors?: never } | { data?: never; errors: FormErrors<TFormValues> }\n >;\n}\n\n/**\n * @internal\n * @description We use this just to warn people that they're using the useForm\n * methods outside of a Form component, but we don't want to throw an error\n * because otherwise the DocumentActions list cannot be rendered in our list-view.\n */\nconst ERR_MSG =\n 'The Form Component has not been initialised, ensure you are using this hook within a Form component';\n\nconst [FormProvider, useForm] = createContext<FormContextValue>('Form', {\n disabled: false,\n errors: {},\n initialValues: {},\n isSubmitting: false,\n modified: false,\n addFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n moveFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n onChange: () => {\n throw new Error(ERR_MSG);\n },\n removeFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n resetForm: () => {\n throw new Error(ERR_MSG);\n },\n setErrors: () => {\n throw new Error(ERR_MSG);\n },\n setValues: () => {\n throw new Error(ERR_MSG);\n },\n setSubmitting: () => {\n throw new Error(ERR_MSG);\n },\n validate: async () => {\n throw new Error(ERR_MSG);\n },\n values: {},\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Form\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormHelpers<TFormValues extends FormValues = FormValues>\n extends Pick<FormContextValue<TFormValues>, 'setErrors' | 'setValues' | 'resetForm'> {}\n\ninterface FormProps<TFormValues extends FormValues = FormValues>\n extends Partial<Pick<FormContextValue<TFormValues>, 'disabled' | 'initialValues'>>,\n Pick<BoxProps, 'width' | 'height'> {\n children:\n | React.ReactNode\n | ((\n props: Pick<\n FormContextValue<TFormValues>,\n | 'disabled'\n | 'errors'\n | 'isSubmitting'\n | 'modified'\n | 'values'\n | 'resetForm'\n | 'onChange'\n | 'setErrors'\n >\n ) => React.ReactNode);\n method: 'POST' | 'PUT';\n onSubmit?: (values: TFormValues, helpers: FormHelpers<TFormValues>) => Promise<void> | void;\n // TODO: type the return value for a validation schema func from Yup.\n validationSchema?: Yup.AnySchema;\n initialErrors?: FormErrors<TFormValues>;\n // NOTE: we don't know what return type it can be here\n validate?: (values: TFormValues, options: Record<string, string>) => Promise<any>;\n}\n\n/**\n * @alpha\n * @description A form component that handles form state, validation and submission.\n * It can additionally handle nested fields and arrays. To access the data you can either\n * use the generic useForm hook or the useField hook when providing the name of your field.\n */\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ disabled = false, method, onSubmit, initialErrors, ...props }, ref) => {\n const formRef = React.useRef<HTMLFormElement>(null!);\n const initialValues = React.useRef(props.initialValues ?? {});\n const [state, dispatch] = React.useReducer(reducer, {\n errors: initialErrors ?? {},\n isSubmitting: false,\n values: props.initialValues ?? {},\n });\n\n React.useEffect(() => {\n /**\n * ONLY update the initialValues if the prop has changed.\n */\n if (!isEqual(initialValues.current, props.initialValues)) {\n initialValues.current = props.initialValues ?? {};\n\n dispatch({\n type: 'SET_INITIAL_VALUES',\n payload: props.initialValues ?? {},\n });\n }\n }, [props.initialValues]);\n\n const setErrors = React.useCallback((errors: FormErrors) => {\n dispatch({\n type: 'SET_ERRORS',\n payload: errors,\n });\n }, []);\n\n const setValues = React.useCallback((values: FormValues) => {\n dispatch({\n type: 'SET_VALUES',\n payload: values,\n });\n }, []);\n\n React.useEffect(() => {\n if (Object.keys(state.errors).length === 0) return;\n\n /**\n * Small timeout to ensure the form has been\n * rendered before we try to focus on the first\n */\n const ref = setTimeout(() => {\n const [firstError] = formRef.current.querySelectorAll('[data-strapi-field-error]');\n\n if (firstError) {\n const errorId = firstError.getAttribute('id');\n const formElementInError = formRef.current.querySelector(\n `[aria-describedby=\"${errorId}\"]`\n );\n\n if (formElementInError && formElementInError instanceof HTMLElement) {\n formElementInError.focus();\n }\n }\n });\n\n return () => clearTimeout(ref);\n }, [state.errors]);\n\n /**\n * Uses the provided validation schema\n */\n const validate = React.useCallback(\n async (shouldSetErrors: boolean = true, options: Record<string, string> = {}) => {\n setErrors({});\n\n if (!props.validationSchema && !props.validate) {\n return { data: state.values };\n }\n\n try {\n let data;\n if (props.validationSchema) {\n data = await props.validationSchema.validate(state.values, { abortEarly: false });\n } else if (props.validate) {\n data = await props.validate(state.values, options);\n } else {\n throw new Error('No validation schema or validate function provided');\n }\n\n return { data };\n } catch (err) {\n if (isErrorYupValidationError(err)) {\n const errors = getYupValidationErrors(err);\n\n if (shouldSetErrors) {\n setErrors(errors);\n }\n\n return { errors };\n } else {\n // We throw any other errors\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: An unhandled error was caught during validation in <Form validationSchema />`,\n err\n );\n }\n\n throw err;\n }\n }\n },\n [props, setErrors, state.values]\n );\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (!onSubmit) {\n return;\n }\n\n dispatch({\n type: 'SUBMIT_ATTEMPT',\n });\n\n try {\n const { data, errors } = await validate();\n\n if (errors) {\n setErrors(errors);\n\n throw new Error('Submission failed');\n }\n\n await onSubmit(data, {\n setErrors,\n setValues,\n resetForm,\n });\n\n dispatch({\n type: 'SUBMIT_SUCCESS',\n });\n } catch (err) {\n dispatch({\n type: 'SUBMIT_FAILURE',\n });\n\n if (err instanceof Error && err.message === 'Submission failed') {\n return;\n }\n }\n };\n\n const modified = React.useMemo(\n () => !isEqual(initialValues.current, state.values),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [state.values, initialValues.current]\n );\n\n const handleChange: FormContextValue['onChange'] = useCallbackRef((eventOrPath, v) => {\n if (typeof eventOrPath === 'string') {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field: eventOrPath,\n value: v,\n },\n });\n\n return;\n }\n\n const target = eventOrPath.target || eventOrPath.currentTarget;\n\n const { type, name, id, value, options, multiple } = target;\n\n const field = name || id;\n\n if (!field && process.env.NODE_ENV !== 'production') {\n console.warn(\n `\\`onChange\\` was called with an event, but you forgot to pass a \\`name\\` or \\`id'\\` attribute to your input. The field to update cannot be determined`\n );\n }\n\n /**\n * Because we handle any field from this function, we run through a series\n * of checks to understand how to use the value.\n */\n let val;\n\n if (/number|range/.test(type)) {\n const parsed = parseFloat(value);\n // If the value isn't a number for whatever reason, don't let it through because that will break the API.\n val = isNaN(parsed) ? '' : parsed;\n } else if (/checkbox/.test(type)) {\n // Get & invert the current value of the checkbox.\n val = !getIn(state.values, field);\n } else if (options && multiple) {\n // This will handle native select elements incl. ones with mulitple options.\n val = Array.from<HTMLOptionElement>(options)\n .filter((el) => el.selected)\n .map((el) => el.value);\n } else {\n // NOTE: reset value to null so it failes required checks.\n // The API only considers a required field invalid if the value is null|undefined, to differentiate from min 1\n if (value === '') {\n val = null;\n } else {\n val = value;\n }\n }\n\n if (field) {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field,\n value: val,\n },\n });\n }\n });\n\n const addFieldRow: FormContextValue['addFieldRow'] = React.useCallback(\n (field, value, addAtIndex) => {\n dispatch({\n type: 'ADD_FIELD_ROW',\n payload: {\n field,\n value,\n addAtIndex,\n },\n });\n },\n []\n );\n\n const removeFieldRow: FormContextValue['removeFieldRow'] = React.useCallback(\n (field, removeAtIndex) => {\n dispatch({\n type: 'REMOVE_FIELD_ROW',\n payload: {\n field,\n removeAtIndex,\n },\n });\n },\n []\n );\n\n const moveFieldRow: FormContextValue['moveFieldRow'] = React.useCallback(\n (field, fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_FIELD_ROW',\n payload: {\n field,\n fromIndex,\n toIndex,\n },\n });\n },\n []\n );\n\n const resetForm: FormContextValue['resetForm'] = React.useCallback((newInitialValues) => {\n if (newInitialValues) {\n initialValues.current = newInitialValues;\n }\n dispatch({\n type: 'RESET_FORM',\n payload: {\n errors: {},\n isSubmitting: false,\n values: initialValues.current,\n },\n });\n }, []);\n\n const setSubmitting = React.useCallback((isSubmitting: boolean) => {\n dispatch({ type: 'SET_ISSUBMITTING', payload: isSubmitting });\n }, []);\n\n const composedRefs = useComposedRefs(formRef, ref);\n\n return (\n <Box\n tag=\"form\"\n ref={composedRefs}\n method={method}\n noValidate\n onSubmit={handleSubmit}\n width={props.width}\n height={props.height}\n >\n <FormProvider\n disabled={disabled}\n onChange={handleChange}\n initialValues={initialValues.current}\n modified={modified}\n addFieldRow={addFieldRow}\n moveFieldRow={moveFieldRow}\n removeFieldRow={removeFieldRow}\n resetForm={resetForm}\n setErrors={setErrors}\n setValues={setValues}\n setSubmitting={setSubmitting}\n validate={validate}\n {...state}\n >\n {typeof props.children === 'function'\n ? props.children({\n modified,\n disabled,\n onChange: handleChange,\n ...state,\n setErrors,\n resetForm,\n })\n : props.children}\n </FormProvider>\n </Box>\n );\n }\n) as <TFormValues extends FormValues>(\n p: FormProps<TFormValues> & { ref?: React.Ref<HTMLFormElement> }\n) => React.ReactElement; // we've cast this because we need the generic to infer the type of the form values.\n\n/**\n * @internal\n * @description Checks if the error is a Yup validation error.\n */\nconst isErrorYupValidationError = (err: any): err is Yup.ValidationError =>\n typeof err === 'object' &&\n err !== null &&\n 'name' in err &&\n typeof err.name === 'string' &&\n err.name === 'ValidationError';\n\n/* -------------------------------------------------------------------------------------------------\n * getYupValidationErrors\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description handy utility to convert a yup validation error into a form\n * error object. To be used elsewhere.\n */\nconst getYupValidationErrors = (err: Yup.ValidationError): FormErrors => {\n let errors: FormErrors = {};\n\n if (err.inner) {\n if (err.inner.length === 0) {\n return setIn(errors, err.path!, err.message);\n }\n for (const error of err.inner) {\n if (!getIn(errors, error.path!)) {\n errors = setIn(errors, error.path!, error.message);\n }\n }\n }\n\n return errors;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ntype FormErrors<TFormValues extends FormValues = FormValues> = {\n // is it a repeatable component or dynamic zone?\n [Key in keyof TFormValues]?: TFormValues[Key] extends any[]\n ? TFormValues[Key][number] extends object\n ? FormErrors<TFormValues[Key][number]>[] | string | string[]\n : string // this would let us support errors for the dynamic zone or repeatable component not the components within.\n : TFormValues[Key] extends object // is it a regular component?\n ? FormErrors<TFormValues[Key]> // handles nested components\n : string | TranslationMessage; // otherwise its just a field or a translation message.\n};\n\ninterface FormState<TFormValues extends FormValues = FormValues> {\n /**\n * TODO: make this a better type explaining errors could be nested because it follows the same\n * structure as the values.\n */\n errors: FormErrors<TFormValues>;\n isSubmitting: boolean;\n values: TFormValues;\n}\n\ntype FormActions<TFormValues extends FormValues = FormValues> =\n | { type: 'SUBMIT_ATTEMPT' }\n | { type: 'SUBMIT_FAILURE' }\n | { type: 'SUBMIT_SUCCESS' }\n | { type: 'SET_FIELD_VALUE'; payload: { field: string; value: any } }\n | { type: 'ADD_FIELD_ROW'; payload: { field: string; value: any; addAtIndex?: number } }\n | { type: 'REMOVE_FIELD_ROW'; payload: { field: string; removeAtIndex?: number } }\n | { type: 'MOVE_FIELD_ROW'; payload: { field: string; fromIndex: number; toIndex: number } }\n | { type: 'SET_ERRORS'; payload: FormErrors<TFormValues> }\n | { type: 'SET_ISSUBMITTING'; payload: boolean }\n | { type: 'SET_INITIAL_VALUES'; payload: TFormValues }\n | { type: 'SET_VALUES'; payload: TFormValues }\n | { type: 'RESET_FORM'; payload: FormState<TFormValues> };\n\nconst reducer = <TFormValues extends FormValues = FormValues>(\n state: FormState<TFormValues>,\n action: FormActions<TFormValues>\n) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'SET_INITIAL_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SET_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SUBMIT_ATTEMPT':\n draft.isSubmitting = true;\n break;\n case 'SUBMIT_FAILURE':\n draft.isSubmitting = false;\n break;\n case 'SUBMIT_SUCCESS':\n draft.isSubmitting = false;\n break;\n case 'SET_FIELD_VALUE':\n draft.values = setIn(state.values, action.payload.field, action.payload.value);\n break;\n case 'ADD_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.addAtIndex;\n\n if (position === undefined) {\n position = currentField.length;\n } else if (position < 0) {\n position = 0;\n }\n\n const [key] = generateNKeysBetween(\n position > 0 ? currentField.at(position - 1)?.__temp_key__ : null,\n currentField.at(position)?.__temp_key__,\n 1\n );\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n currentField.toSpliced(position, 0, {\n ...action.payload.value,\n __temp_key__: key,\n })\n );\n\n break;\n }\n case 'MOVE_FIELD_ROW': {\n const { field, fromIndex, toIndex } = action.payload;\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = [...(getIn(state.values, field, []) as Array<any>)];\n const currentRow = currentField[fromIndex];\n\n const startKey =\n fromIndex > toIndex\n ? currentField[toIndex - 1]?.__temp_key__\n : currentField[toIndex]?.__temp_key__;\n const endKey =\n fromIndex > toIndex\n ? currentField[toIndex]?.__temp_key__\n : currentField[toIndex + 1]?.__temp_key__;\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n currentField.splice(fromIndex, 1);\n currentField.splice(toIndex, 0, { ...currentRow, __temp_key__: newKey });\n\n draft.values = setIn(state.values, field, currentField);\n\n break;\n }\n case 'REMOVE_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.removeAtIndex;\n\n if (position === undefined) {\n position = currentField.length - 1;\n } else if (position < 0) {\n position = 0;\n }\n\n /**\n * filter out empty values from the array, the setIn function only deletes the value\n * when we pass undefined as opposed to \"removing\" it from said array.\n */\n const newValue = setIn(currentField, position.toString(), undefined).filter(\n (val: unknown) => val\n );\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n newValue.length > 0 ? newValue : []\n );\n\n break;\n }\n case 'SET_ERRORS':\n if (!isEqual(state.errors, action.payload)) {\n // @ts-expect-error – TODO: figure out why this fails a TS check.\n draft.errors = action.payload;\n }\n break;\n case 'SET_ISSUBMITTING':\n draft.isSubmitting = action.payload;\n break;\n case 'RESET_FORM':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload.values;\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.errors = action.payload.errors;\n draft.isSubmitting = action.payload.isSubmitting;\n break;\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * useField\n * -----------------------------------------------------------------------------------------------*/\ninterface FieldValue<TValue = any> {\n error?: string;\n initialValue: TValue;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: TValue) => void;\n value: TValue;\n rawError?: any;\n}\n\nfunction useField<TValue = any>(path: string): FieldValue<TValue | undefined> {\n const { formatMessage } = useIntl();\n\n const initialValue = useForm(\n 'useField',\n (state) => getIn(state.initialValues, path) as FieldValue<TValue>['initialValue']\n );\n\n const value = useForm(\n 'useField',\n (state) => getIn(state.values, path) as FieldValue<TValue>['value']\n );\n\n const handleChange = useForm('useField', (state) => state.onChange);\n\n const rawError = useForm('useField', (state) => getIn(state.errors, path));\n\n const error = useForm('useField', (state) => {\n const error = getIn(state.errors, path);\n\n if (isErrorMessageDescriptor(error)) {\n const { values, ...message } = error;\n return formatMessage(message, values);\n }\n\n return error;\n });\n\n return {\n initialValue,\n /**\n * Errors can be a string, or a MessageDescriptor, so we need to handle both cases.\n * If it's anything else, we don't return it.\n */\n rawError,\n error: isErrorMessageDescriptor(error)\n ? formatMessage(\n {\n id: error.id,\n defaultMessage: error.defaultMessage,\n },\n error.values\n )\n : typeof error === 'string'\n ? error\n : undefined,\n onChange: handleChange,\n value: value,\n };\n}\n\nconst isErrorMessageDescriptor = (object?: object): object is TranslationMessage => {\n return (\n typeof object === 'object' &&\n object !== null &&\n !Array.isArray(object) &&\n 'id' in object &&\n 'defaultMessage' in object\n );\n};\n\n/**\n * Props for the Blocker component.\n * @param onProceed Function to be called when the user confirms the action that triggered the blocker.\n * @param onCancel Function to be called when the user cancels the action that triggered the blocker.\n */\ninterface BlockerProps {\n onProceed?: () => void;\n onCancel?: () => void;\n}\n/* -------------------------------------------------------------------------------------------------\n * Blocker\n * -----------------------------------------------------------------------------------------------*/\nconst Blocker = ({ onProceed = () => {}, onCancel = () => {} }: BlockerProps) => {\n const { formatMessage } = useIntl();\n const modified = useForm('Blocker', (state) => state.modified);\n const isSubmitting = useForm('Blocker', (state) => state.isSubmitting);\n\n const blocker = useBlocker(({ currentLocation, nextLocation }) => {\n return (\n !isSubmitting &&\n modified &&\n (currentLocation.pathname !== nextLocation.pathname ||\n currentLocation.search !== nextLocation.search)\n );\n });\n\n if (blocker.state === 'blocked') {\n const handleCancel = (isOpen: boolean) => {\n if (!isOpen) {\n onCancel();\n blocker.reset();\n }\n };\n\n return (\n <Dialog.Root open onOpenChange={handleCancel}>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n </Dialog.Header>\n <Dialog.Body icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}>\n {formatMessage({\n id: 'global.prompt.unsaved',\n defaultMessage: 'You have unsaved changes, are you sure you want to leave?',\n })}\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button\n onClick={() => {\n onProceed();\n blocker.proceed();\n }}\n variant=\"danger\"\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n }\n\n return null;\n};\n\nexport { Form, Blocker, useField, useForm, getYupValidationErrors };\nexport type {\n FormErrors,\n FormHelpers,\n FormProps,\n FormValues,\n FormContextValue,\n FormState,\n FieldValue,\n InputProps,\n};\n"],"names":["ERR_MSG","FormProvider","useForm","createContext","disabled","errors","initialValues","isSubmitting","modified","addFieldRow","Error","moveFieldRow","onChange","removeFieldRow","resetForm","setErrors","setValues","setSubmitting","validate","values","Form","React","forwardRef","method","onSubmit","initialErrors","props","ref","formRef","useRef","state","dispatch","useReducer","reducer","useEffect","isEqual","current","type","payload","useCallback","Object","keys","length","setTimeout","firstError","querySelectorAll","errorId","getAttribute","formElementInError","querySelector","HTMLElement","focus","clearTimeout","shouldSetErrors","options","validationSchema","data","abortEarly","err","isErrorYupValidationError","getYupValidationErrors","process","env","NODE_ENV","console","warn","handleSubmit","e","stopPropagation","preventDefault","message","useMemo","handleChange","useCallbackRef","eventOrPath","v","field","value","target","currentTarget","name","id","multiple","val","test","parsed","parseFloat","isNaN","getIn","Array","from","filter","el","selected","map","addAtIndex","removeAtIndex","fromIndex","toIndex","newInitialValues","composedRefs","useComposedRefs","_jsx","Box","tag","noValidate","width","height","children","inner","setIn","path","error","action","produce","draft","currentField","position","undefined","key","generateNKeysBetween","at","__temp_key__","toSpliced","currentRow","startKey","endKey","newKey","splice","newValue","toString","useField","formatMessage","useIntl","initialValue","rawError","isErrorMessageDescriptor","defaultMessage","object","isArray","Blocker","onProceed","onCancel","blocker","useBlocker","currentLocation","nextLocation","pathname","search","handleCancel","isOpen","reset","Dialog","Root","open","onOpenChange","_jsxs","Content","Header","Body","icon","WarningCircle","fill","Footer","Cancel","Button","variant","onClick","proceed"],"mappings":"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"}
1
+ {"version":3,"file":"Form.mjs","sources":["../../../../../admin/src/components/Form.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n type BoxProps,\n Button,\n Dialog,\n useCallbackRef,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { produce } from 'immer';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl, type MessageDescriptor, type PrimitiveType } from 'react-intl';\nimport { useBlocker } from 'react-router-dom';\n\nimport { useWarnIfUnsavedChanges } from '../hooks/useWarnIfUnsavedChanges';\nimport { getIn, setIn } from '../utils/objects';\n\nimport { createContext } from './Context';\n\nimport type {\n InputProps as InputPropsImpl,\n StringProps,\n EnumerationProps,\n} from './FormInputs/types';\nimport type * as Yup from 'yup';\n\n/* -------------------------------------------------------------------------------------------------\n * FormContext\n * -----------------------------------------------------------------------------------------------*/\ntype InputProps = InputPropsImpl | StringProps | EnumerationProps;\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\ninterface FormValues {\n [field: string]: any;\n}\n\ninterface FormContextValue<TFormValues extends FormValues = FormValues>\n extends FormState<TFormValues> {\n disabled: boolean;\n initialValues: TFormValues;\n modified: boolean;\n /**\n * The default behaviour is to add the row to the end of the array, if you want to add it to a\n * specific index you can pass the index.\n */\n addFieldRow: (field: string, value: any, addAtIndex?: number) => void;\n moveFieldRow: (field: string, fromIndex: number, toIndex: number) => void;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: any) => void;\n /*\n * The default behaviour is to remove the last row, if you want to remove a specific index you can\n * pass the index.\n */\n removeFieldRow: (field: string, removeAtIndex?: number) => void;\n resetForm: (newInitialValues?: TFormValues) => void;\n setErrors: (errors: FormErrors<TFormValues>) => void;\n setSubmitting: (isSubmitting: boolean) => void;\n setValues: (values: TFormValues) => void;\n validate: (\n shouldSetErrors?: boolean,\n options?: Record<string, string>\n ) => Promise<\n { data: TFormValues; errors?: never } | { data?: never; errors: FormErrors<TFormValues> }\n >;\n}\n\n/**\n * @internal\n * @description We use this just to warn people that they're using the useForm\n * methods outside of a Form component, but we don't want to throw an error\n * because otherwise the DocumentActions list cannot be rendered in our list-view.\n */\nconst ERR_MSG =\n 'The Form Component has not been initialised, ensure you are using this hook within a Form component';\n\nconst [FormProvider, useForm] = createContext<FormContextValue>('Form', {\n disabled: false,\n errors: {},\n initialValues: {},\n isSubmitting: false,\n modified: false,\n addFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n moveFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n onChange: () => {\n throw new Error(ERR_MSG);\n },\n removeFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n resetForm: () => {\n throw new Error(ERR_MSG);\n },\n setErrors: () => {\n throw new Error(ERR_MSG);\n },\n setValues: () => {\n throw new Error(ERR_MSG);\n },\n setSubmitting: () => {\n throw new Error(ERR_MSG);\n },\n validate: async () => {\n throw new Error(ERR_MSG);\n },\n values: {},\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Form\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormHelpers<TFormValues extends FormValues = FormValues>\n extends Pick<FormContextValue<TFormValues>, 'setErrors' | 'setValues' | 'resetForm'> {}\n\ninterface FormProps<TFormValues extends FormValues = FormValues>\n extends Partial<Pick<FormContextValue<TFormValues>, 'disabled' | 'initialValues'>>,\n Pick<BoxProps, 'width' | 'height'> {\n children:\n | React.ReactNode\n | ((\n props: Pick<\n FormContextValue<TFormValues>,\n | 'disabled'\n | 'errors'\n | 'isSubmitting'\n | 'modified'\n | 'values'\n | 'resetForm'\n | 'onChange'\n | 'setErrors'\n >\n ) => React.ReactNode);\n method: 'POST' | 'PUT';\n onSubmit?: (values: TFormValues, helpers: FormHelpers<TFormValues>) => Promise<void> | void;\n // TODO: type the return value for a validation schema func from Yup.\n validationSchema?: Yup.AnySchema;\n initialErrors?: FormErrors<TFormValues>;\n // NOTE: we don't know what return type it can be here\n validate?: (values: TFormValues, options: Record<string, string>) => Promise<any>;\n}\n\n/**\n * @alpha\n * @description A form component that handles form state, validation and submission.\n * It can additionally handle nested fields and arrays. To access the data you can either\n * use the generic useForm hook or the useField hook when providing the name of your field.\n */\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ disabled = false, method, onSubmit, initialErrors, ...props }, ref) => {\n const formRef = React.useRef<HTMLFormElement>(null!);\n const initialValues = React.useRef(props.initialValues ?? {});\n const [state, dispatch] = React.useReducer(reducer, {\n errors: initialErrors ?? {},\n isSubmitting: false,\n values: props.initialValues ?? {},\n });\n\n React.useEffect(() => {\n /**\n * ONLY update the initialValues if the prop has changed.\n */\n if (!isEqual(initialValues.current, props.initialValues)) {\n initialValues.current = props.initialValues ?? {};\n\n dispatch({\n type: 'SET_INITIAL_VALUES',\n payload: props.initialValues ?? {},\n });\n }\n }, [props.initialValues]);\n\n const setErrors = React.useCallback((errors: FormErrors) => {\n dispatch({\n type: 'SET_ERRORS',\n payload: errors,\n });\n }, []);\n\n const setValues = React.useCallback((values: FormValues) => {\n dispatch({\n type: 'SET_VALUES',\n payload: values,\n });\n }, []);\n\n React.useEffect(() => {\n if (Object.keys(state.errors).length === 0) return;\n\n /**\n * Small timeout to ensure the form has been\n * rendered before we try to focus on the first\n */\n const ref = setTimeout(() => {\n const [firstError] = formRef.current.querySelectorAll('[data-strapi-field-error]');\n\n if (firstError) {\n const errorId = firstError.getAttribute('id');\n const formElementInError = formRef.current.querySelector(\n `[aria-describedby=\"${errorId}\"]`\n );\n\n if (formElementInError && formElementInError instanceof HTMLElement) {\n formElementInError.focus();\n }\n }\n });\n\n return () => clearTimeout(ref);\n }, [state.errors]);\n\n /**\n * Uses the provided validation schema\n */\n const validate = React.useCallback(\n async (shouldSetErrors: boolean = true, options: Record<string, string> = {}) => {\n setErrors({});\n\n if (!props.validationSchema && !props.validate) {\n return { data: state.values };\n }\n\n try {\n let data;\n if (props.validationSchema) {\n data = await props.validationSchema.validate(state.values, { abortEarly: false });\n } else if (props.validate) {\n data = await props.validate(state.values, options);\n } else {\n throw new Error('No validation schema or validate function provided');\n }\n\n return { data };\n } catch (err) {\n if (isErrorYupValidationError(err)) {\n const errors = getYupValidationErrors(err);\n\n if (shouldSetErrors) {\n setErrors(errors);\n }\n\n return { errors };\n } else {\n // We throw any other errors\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: An unhandled error was caught during validation in <Form validationSchema />`,\n err\n );\n }\n\n throw err;\n }\n }\n },\n [props, setErrors, state.values]\n );\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (!onSubmit) {\n return;\n }\n\n dispatch({\n type: 'SUBMIT_ATTEMPT',\n });\n\n try {\n const { data, errors } = await validate();\n\n if (errors) {\n setErrors(errors);\n\n throw new Error('Submission failed');\n }\n\n await onSubmit(data, {\n setErrors,\n setValues,\n resetForm,\n });\n\n dispatch({\n type: 'SUBMIT_SUCCESS',\n });\n } catch (err) {\n dispatch({\n type: 'SUBMIT_FAILURE',\n });\n\n if (err instanceof Error && err.message === 'Submission failed') {\n return;\n }\n }\n };\n\n const modified = React.useMemo(\n () => !isEqual(initialValues.current, state.values),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [state.values, initialValues.current]\n );\n\n const handleChange: FormContextValue['onChange'] = useCallbackRef((eventOrPath, v) => {\n if (typeof eventOrPath === 'string') {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field: eventOrPath,\n value: v,\n },\n });\n\n return;\n }\n\n const target = eventOrPath.target || eventOrPath.currentTarget;\n\n const { type, name, id, value, options, multiple } = target;\n\n const field = name || id;\n\n if (!field && process.env.NODE_ENV !== 'production') {\n console.warn(\n `\\`onChange\\` was called with an event, but you forgot to pass a \\`name\\` or \\`id'\\` attribute to your input. The field to update cannot be determined`\n );\n }\n\n /**\n * Because we handle any field from this function, we run through a series\n * of checks to understand how to use the value.\n */\n let val;\n\n if (/number|range/.test(type)) {\n const parsed = parseFloat(value);\n // If the value isn't a number for whatever reason, don't let it through because that will break the API.\n val = isNaN(parsed) ? '' : parsed;\n } else if (/checkbox/.test(type)) {\n // Get & invert the current value of the checkbox.\n val = !getIn(state.values, field);\n } else if (options && multiple) {\n // This will handle native select elements incl. ones with mulitple options.\n val = Array.from<HTMLOptionElement>(options)\n .filter((el) => el.selected)\n .map((el) => el.value);\n } else {\n // NOTE: reset value to null so it failes required checks.\n // The API only considers a required field invalid if the value is null|undefined, to differentiate from min 1\n if (value === '') {\n val = null;\n } else {\n val = value;\n }\n }\n\n if (field) {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field,\n value: val,\n },\n });\n }\n });\n\n const addFieldRow: FormContextValue['addFieldRow'] = React.useCallback(\n (field, value, addAtIndex) => {\n dispatch({\n type: 'ADD_FIELD_ROW',\n payload: {\n field,\n value,\n addAtIndex,\n },\n });\n },\n []\n );\n\n const removeFieldRow: FormContextValue['removeFieldRow'] = React.useCallback(\n (field, removeAtIndex) => {\n dispatch({\n type: 'REMOVE_FIELD_ROW',\n payload: {\n field,\n removeAtIndex,\n },\n });\n },\n []\n );\n\n const moveFieldRow: FormContextValue['moveFieldRow'] = React.useCallback(\n (field, fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_FIELD_ROW',\n payload: {\n field,\n fromIndex,\n toIndex,\n },\n });\n },\n []\n );\n\n const resetForm: FormContextValue['resetForm'] = React.useCallback((newInitialValues) => {\n if (newInitialValues) {\n initialValues.current = newInitialValues;\n }\n dispatch({\n type: 'RESET_FORM',\n payload: {\n errors: {},\n isSubmitting: false,\n values: initialValues.current,\n },\n });\n }, []);\n\n const setSubmitting = React.useCallback((isSubmitting: boolean) => {\n dispatch({ type: 'SET_ISSUBMITTING', payload: isSubmitting });\n }, []);\n\n const composedRefs = useComposedRefs(formRef, ref);\n\n return (\n <Box\n tag=\"form\"\n ref={composedRefs}\n method={method}\n noValidate\n onSubmit={handleSubmit}\n width={props.width}\n height={props.height}\n >\n <FormProvider\n disabled={disabled}\n onChange={handleChange}\n initialValues={initialValues.current}\n modified={modified}\n addFieldRow={addFieldRow}\n moveFieldRow={moveFieldRow}\n removeFieldRow={removeFieldRow}\n resetForm={resetForm}\n setErrors={setErrors}\n setValues={setValues}\n setSubmitting={setSubmitting}\n validate={validate}\n {...state}\n >\n {typeof props.children === 'function'\n ? props.children({\n modified,\n disabled,\n onChange: handleChange,\n ...state,\n setErrors,\n resetForm,\n })\n : props.children}\n </FormProvider>\n </Box>\n );\n }\n) as <TFormValues extends FormValues>(\n p: FormProps<TFormValues> & { ref?: React.Ref<HTMLFormElement> }\n) => React.ReactElement; // we've cast this because we need the generic to infer the type of the form values.\n\n/**\n * @internal\n * @description Checks if the error is a Yup validation error.\n */\nconst isErrorYupValidationError = (err: any): err is Yup.ValidationError =>\n typeof err === 'object' &&\n err !== null &&\n 'name' in err &&\n typeof err.name === 'string' &&\n err.name === 'ValidationError';\n\n/* -------------------------------------------------------------------------------------------------\n * getYupValidationErrors\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description handy utility to convert a yup validation error into a form\n * error object. To be used elsewhere.\n */\nconst getYupValidationErrors = (err: Yup.ValidationError): FormErrors => {\n let errors: FormErrors = {};\n\n if (err.inner) {\n if (err.inner.length === 0) {\n return setIn(errors, err.path!, err.message);\n }\n for (const error of err.inner) {\n if (!getIn(errors, error.path!)) {\n errors = setIn(errors, error.path!, error.message);\n }\n }\n }\n\n return errors;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ntype FormErrors<TFormValues extends FormValues = FormValues> = {\n // is it a repeatable component or dynamic zone?\n [Key in keyof TFormValues]?: TFormValues[Key] extends any[]\n ? TFormValues[Key][number] extends object\n ? FormErrors<TFormValues[Key][number]>[] | string | string[]\n : string // this would let us support errors for the dynamic zone or repeatable component not the components within.\n : TFormValues[Key] extends object // is it a regular component?\n ? FormErrors<TFormValues[Key]> // handles nested components\n : string | TranslationMessage; // otherwise its just a field or a translation message.\n};\n\ninterface FormState<TFormValues extends FormValues = FormValues> {\n /**\n * TODO: make this a better type explaining errors could be nested because it follows the same\n * structure as the values.\n */\n errors: FormErrors<TFormValues>;\n isSubmitting: boolean;\n values: TFormValues;\n}\n\ntype FormActions<TFormValues extends FormValues = FormValues> =\n | { type: 'SUBMIT_ATTEMPT' }\n | { type: 'SUBMIT_FAILURE' }\n | { type: 'SUBMIT_SUCCESS' }\n | { type: 'SET_FIELD_VALUE'; payload: { field: string; value: any } }\n | { type: 'ADD_FIELD_ROW'; payload: { field: string; value: any; addAtIndex?: number } }\n | { type: 'REMOVE_FIELD_ROW'; payload: { field: string; removeAtIndex?: number } }\n | { type: 'MOVE_FIELD_ROW'; payload: { field: string; fromIndex: number; toIndex: number } }\n | { type: 'SET_ERRORS'; payload: FormErrors<TFormValues> }\n | { type: 'SET_ISSUBMITTING'; payload: boolean }\n | { type: 'SET_INITIAL_VALUES'; payload: TFormValues }\n | { type: 'SET_VALUES'; payload: TFormValues }\n | { type: 'RESET_FORM'; payload: FormState<TFormValues> };\n\nconst reducer = <TFormValues extends FormValues = FormValues>(\n state: FormState<TFormValues>,\n action: FormActions<TFormValues>\n) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'SET_INITIAL_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SET_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SUBMIT_ATTEMPT':\n draft.isSubmitting = true;\n break;\n case 'SUBMIT_FAILURE':\n draft.isSubmitting = false;\n break;\n case 'SUBMIT_SUCCESS':\n draft.isSubmitting = false;\n break;\n case 'SET_FIELD_VALUE':\n draft.values = setIn(state.values, action.payload.field, action.payload.value);\n break;\n case 'ADD_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.addAtIndex;\n\n if (position === undefined) {\n position = currentField.length;\n } else if (position < 0) {\n position = 0;\n }\n\n const [key] = generateNKeysBetween(\n position > 0 ? currentField.at(position - 1)?.__temp_key__ : null,\n currentField.at(position)?.__temp_key__,\n 1\n );\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n currentField.toSpliced(position, 0, {\n ...action.payload.value,\n __temp_key__: key,\n })\n );\n\n break;\n }\n case 'MOVE_FIELD_ROW': {\n const { field, fromIndex, toIndex } = action.payload;\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = [...(getIn(state.values, field, []) as Array<any>)];\n const currentRow = currentField[fromIndex];\n\n const startKey =\n fromIndex > toIndex\n ? currentField[toIndex - 1]?.__temp_key__\n : currentField[toIndex]?.__temp_key__;\n const endKey =\n fromIndex > toIndex\n ? currentField[toIndex]?.__temp_key__\n : currentField[toIndex + 1]?.__temp_key__;\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n currentField.splice(fromIndex, 1);\n currentField.splice(toIndex, 0, { ...currentRow, __temp_key__: newKey });\n\n draft.values = setIn(state.values, field, currentField);\n\n break;\n }\n case 'REMOVE_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.removeAtIndex;\n\n if (position === undefined) {\n position = currentField.length - 1;\n } else if (position < 0) {\n position = 0;\n }\n\n /**\n * filter out empty values from the array, the setIn function only deletes the value\n * when we pass undefined as opposed to \"removing\" it from said array.\n */\n const newValue = setIn(currentField, position.toString(), undefined).filter(\n (val: unknown) => val\n );\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n newValue.length > 0 ? newValue : []\n );\n\n break;\n }\n case 'SET_ERRORS':\n if (!isEqual(state.errors, action.payload)) {\n // @ts-expect-error – TODO: figure out why this fails a TS check.\n draft.errors = action.payload;\n }\n break;\n case 'SET_ISSUBMITTING':\n draft.isSubmitting = action.payload;\n break;\n case 'RESET_FORM':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload.values;\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.errors = action.payload.errors;\n draft.isSubmitting = action.payload.isSubmitting;\n break;\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * useField\n * -----------------------------------------------------------------------------------------------*/\ninterface FieldValue<TValue = any> {\n error?: string;\n initialValue: TValue;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: TValue) => void;\n value: TValue;\n rawError?: any;\n}\n\nfunction useField<TValue = any>(path: string): FieldValue<TValue | undefined> {\n const { formatMessage } = useIntl();\n\n const initialValue = useForm(\n 'useField',\n (state) => getIn(state.initialValues, path) as FieldValue<TValue>['initialValue']\n );\n\n const value = useForm(\n 'useField',\n (state) => getIn(state.values, path) as FieldValue<TValue>['value']\n );\n\n const handleChange = useForm('useField', (state) => state.onChange);\n\n const rawError = useForm('useField', (state) => getIn(state.errors, path));\n\n const error = useForm('useField', (state) => {\n const error = getIn(state.errors, path);\n\n if (isErrorMessageDescriptor(error)) {\n const { values, ...message } = error;\n return formatMessage(message, values);\n }\n\n return error;\n });\n\n return {\n initialValue,\n /**\n * Errors can be a string, or a MessageDescriptor, so we need to handle both cases.\n * If it's anything else, we don't return it.\n */\n rawError,\n error: isErrorMessageDescriptor(error)\n ? formatMessage(\n {\n id: error.id,\n defaultMessage: error.defaultMessage,\n },\n error.values\n )\n : typeof error === 'string'\n ? error\n : undefined,\n onChange: handleChange,\n value: value,\n };\n}\n\nconst isErrorMessageDescriptor = (object?: object): object is TranslationMessage => {\n return (\n typeof object === 'object' &&\n object !== null &&\n !Array.isArray(object) &&\n 'id' in object &&\n 'defaultMessage' in object\n );\n};\n\n/**\n * Props for the Blocker component.\n * @param onProceed Function to be called when the user confirms the action that triggered the blocker.\n * @param onCancel Function to be called when the user cancels the action that triggered the blocker.\n */\ninterface BlockerProps {\n onProceed?: () => void;\n onCancel?: () => void;\n}\n/* -------------------------------------------------------------------------------------------------\n * Blocker\n * -----------------------------------------------------------------------------------------------*/\nconst Blocker = ({ onProceed = () => {}, onCancel = () => {} }: BlockerProps) => {\n const { formatMessage } = useIntl();\n const modified = useForm('Blocker', (state) => state.modified);\n const isSubmitting = useForm('Blocker', (state) => state.isSubmitting);\n\n // this is trigering a native browser prompt on page unload\n // We aren't able to use our Dialog component in that scenario\n // so we fallback to the native browser one when the user is trying to close/refresh the tab/browser\n // This hook will be triggered on dev mode because of the live reloads but it's fine as it's only for that scenario\n useWarnIfUnsavedChanges(modified && !isSubmitting);\n\n const blocker = useBlocker(({ currentLocation, nextLocation }) => {\n return (\n !isSubmitting &&\n modified &&\n (currentLocation.pathname !== nextLocation.pathname ||\n currentLocation.search !== nextLocation.search)\n );\n });\n\n if (blocker.state === 'blocked') {\n const handleCancel = (isOpen: boolean) => {\n if (!isOpen) {\n onCancel();\n blocker.reset();\n }\n };\n\n return (\n <Dialog.Root open onOpenChange={handleCancel}>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n </Dialog.Header>\n <Dialog.Body\n icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}\n textAlign=\"center\"\n >\n {formatMessage({\n id: 'global.prompt.unsaved',\n defaultMessage: 'You have unsaved changes, are you sure you want to leave?',\n })}\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth>\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button\n onClick={() => {\n onProceed();\n blocker.proceed();\n }}\n variant=\"danger\"\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n }\n\n return null;\n};\n\nexport { Form, Blocker, useField, useForm, getYupValidationErrors };\nexport type {\n FormErrors,\n FormHelpers,\n FormProps,\n FormValues,\n FormContextValue,\n FormState,\n FieldValue,\n InputProps,\n};\n"],"names":["ERR_MSG","FormProvider","useForm","createContext","disabled","errors","initialValues","isSubmitting","modified","addFieldRow","Error","moveFieldRow","onChange","removeFieldRow","resetForm","setErrors","setValues","setSubmitting","validate","values","Form","React","forwardRef","method","onSubmit","initialErrors","props","ref","formRef","useRef","state","dispatch","useReducer","reducer","useEffect","isEqual","current","type","payload","useCallback","Object","keys","length","setTimeout","firstError","querySelectorAll","errorId","getAttribute","formElementInError","querySelector","HTMLElement","focus","clearTimeout","shouldSetErrors","options","validationSchema","data","abortEarly","err","isErrorYupValidationError","getYupValidationErrors","process","env","NODE_ENV","console","warn","handleSubmit","e","stopPropagation","preventDefault","message","useMemo","handleChange","useCallbackRef","eventOrPath","v","field","value","target","currentTarget","name","id","multiple","val","test","parsed","parseFloat","isNaN","getIn","Array","from","filter","el","selected","map","addAtIndex","removeAtIndex","fromIndex","toIndex","newInitialValues","composedRefs","useComposedRefs","_jsx","Box","tag","noValidate","width","height","children","inner","setIn","path","error","action","produce","draft","currentField","position","undefined","key","generateNKeysBetween","at","__temp_key__","toSpliced","currentRow","startKey","endKey","newKey","splice","newValue","toString","useField","formatMessage","useIntl","initialValue","rawError","isErrorMessageDescriptor","defaultMessage","object","isArray","Blocker","onProceed","onCancel","useWarnIfUnsavedChanges","blocker","useBlocker","currentLocation","nextLocation","pathname","search","handleCancel","isOpen","reset","Dialog","Root","open","onOpenChange","_jsxs","Content","Header","Body","icon","WarningCircle","fill","textAlign","Footer","Cancel","Button","variant","fullWidth","onClick","proceed"],"mappings":"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"}
@@ -31,7 +31,7 @@ const TimeInput = /*#__PURE__*/ React.forwardRef(({ name, required, label, hint,
31
31
  onChange: (time)=>{
32
32
  field.onChange(name, `${time}:00.000`);
33
33
  },
34
- onClear: ()=>field.onChange(name, undefined),
34
+ onClear: ()=>field.onChange(name, null),
35
35
  value: field.value ?? '',
36
36
  ...props
37
37
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"Time.js","sources":["../../../../../../admin/src/components/FormInputs/Time.tsx"],"sourcesContent":["import { forwardRef, memo } from 'react';\n\nimport { TimePicker, useComposedRefs, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { InputProps } from './types';\n\nconst TimeInput = forwardRef<HTMLInputElement, InputProps>(\n ({ name, required, label, hint, labelAction, ...props }, ref) => {\n const { formatMessage } = useIntl();\n const field = useField<string>(name);\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <TimePicker\n ref={composedRefs}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onChange={(time) => {\n field.onChange(name, `${time}:00.000`);\n }}\n onClear={() => field.onChange(name, undefined)}\n value={field.value ?? ''}\n {...props}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\nconst MemoizedTimeInput = memo(TimeInput);\n\nexport { MemoizedTimeInput as TimeInput };\n"],"names":["TimeInput","forwardRef","name","required","label","hint","labelAction","props","ref","formatMessage","useIntl","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","_jsxs","Field","Root","error","_jsx","Label","action","TimePicker","clearLabel","id","defaultMessage","onChange","time","onClear","undefined","value","Hint","Error","MemoizedTimeInput","memo"],"mappings":";;;;;;;;;AAUA,MAAMA,0BAAYC,gBAChB,CAAA,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGC,OAAO,EAAEC,GAAAA,GAAAA;IACvD,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,QAAQC,aAAiBV,CAAAA,IAAAA,CAAAA;AAC/B,IAAA,MAAMW,WAAWC,qCAAqCZ,CAAAA,IAAAA,CAAAA;IAEtD,MAAMa,YAAAA,GAAeC,6BAAgBR,GAAKK,EAAAA,QAAAA,CAAAA;IAE1C,qBACEI,eAAA,CAACC,mBAAMC,IAAI,EAAA;AAACC,QAAAA,KAAAA,EAAOT,MAAMS,KAAK;QAAElB,IAAMA,EAAAA,IAAAA;QAAMG,IAAMA,EAAAA,IAAAA;QAAMF,QAAUA,EAAAA,QAAAA;;AAChE,0BAAAkB,cAAA,CAACH,mBAAMI,KAAK,EAAA;gBAACC,MAAQjB,EAAAA,WAAAA;AAAcF,gBAAAA,QAAAA,EAAAA;;0BACnCiB,cAACG,CAAAA,uBAAAA,EAAAA;gBACChB,GAAKO,EAAAA,YAAAA;AACLU,gBAAAA,UAAAA,EAAYhB,aAAc,CAAA;oBAAEiB,EAAI,EAAA,YAAA;oBAAcC,cAAgB,EAAA;AAAQ,iBAAA,CAAA;AACtEC,gBAAAA,QAAAA,EAAU,CAACC,IAAAA,GAAAA;AACTlB,oBAAAA,KAAAA,CAAMiB,QAAQ,CAAC1B,IAAAA,EAAM,CAAG2B,EAAAA,IAAAA,CAAK,OAAO,CAAC,CAAA;AACvC,iBAAA;AACAC,gBAAAA,OAAAA,EAAS,IAAMnB,KAAAA,CAAMiB,QAAQ,CAAC1B,IAAM6B,EAAAA,SAAAA,CAAAA;gBACpCC,KAAOrB,EAAAA,KAAAA,CAAMqB,KAAK,IAAI,EAAA;AACrB,gBAAA,GAAGzB;;AAEN,0BAAAc,cAAA,CAACH,mBAAMe,IAAI,EAAA,EAAA,CAAA;AACX,0BAAAZ,cAAA,CAACH,mBAAMgB,KAAK,EAAA,EAAA;;;AAGlB,CAAA,CAAA;AAGF,MAAMC,kCAAoBC,UAAKpC,CAAAA,SAAAA;;;;"}
1
+ {"version":3,"file":"Time.js","sources":["../../../../../../admin/src/components/FormInputs/Time.tsx"],"sourcesContent":["import { forwardRef, memo } from 'react';\n\nimport { TimePicker, useComposedRefs, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { InputProps } from './types';\n\nconst TimeInput = forwardRef<HTMLInputElement, InputProps>(\n ({ name, required, label, hint, labelAction, ...props }, ref) => {\n const { formatMessage } = useIntl();\n const field = useField<string | null>(name);\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <TimePicker\n ref={composedRefs}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onChange={(time) => {\n field.onChange(name, `${time}:00.000`);\n }}\n onClear={() => field.onChange(name, null)}\n value={field.value ?? ''}\n {...props}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\nconst MemoizedTimeInput = memo(TimeInput);\n\nexport { MemoizedTimeInput as TimeInput };\n"],"names":["TimeInput","forwardRef","name","required","label","hint","labelAction","props","ref","formatMessage","useIntl","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","_jsxs","Field","Root","error","_jsx","Label","action","TimePicker","clearLabel","id","defaultMessage","onChange","time","onClear","value","Hint","Error","MemoizedTimeInput","memo"],"mappings":";;;;;;;;;AAUA,MAAMA,0BAAYC,gBAChB,CAAA,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGC,OAAO,EAAEC,GAAAA,GAAAA;IACvD,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,QAAQC,aAAwBV,CAAAA,IAAAA,CAAAA;AACtC,IAAA,MAAMW,WAAWC,qCAAqCZ,CAAAA,IAAAA,CAAAA;IAEtD,MAAMa,YAAAA,GAAeC,6BAAgBR,GAAKK,EAAAA,QAAAA,CAAAA;IAE1C,qBACEI,eAAA,CAACC,mBAAMC,IAAI,EAAA;AAACC,QAAAA,KAAAA,EAAOT,MAAMS,KAAK;QAAElB,IAAMA,EAAAA,IAAAA;QAAMG,IAAMA,EAAAA,IAAAA;QAAMF,QAAUA,EAAAA,QAAAA;;AAChE,0BAAAkB,cAAA,CAACH,mBAAMI,KAAK,EAAA;gBAACC,MAAQjB,EAAAA,WAAAA;AAAcF,gBAAAA,QAAAA,EAAAA;;0BACnCiB,cAACG,CAAAA,uBAAAA,EAAAA;gBACChB,GAAKO,EAAAA,YAAAA;AACLU,gBAAAA,UAAAA,EAAYhB,aAAc,CAAA;oBAAEiB,EAAI,EAAA,YAAA;oBAAcC,cAAgB,EAAA;AAAQ,iBAAA,CAAA;AACtEC,gBAAAA,QAAAA,EAAU,CAACC,IAAAA,GAAAA;AACTlB,oBAAAA,KAAAA,CAAMiB,QAAQ,CAAC1B,IAAAA,EAAM,CAAG2B,EAAAA,IAAAA,CAAK,OAAO,CAAC,CAAA;AACvC,iBAAA;AACAC,gBAAAA,OAAAA,EAAS,IAAMnB,KAAAA,CAAMiB,QAAQ,CAAC1B,IAAM,EAAA,IAAA,CAAA;gBACpC6B,KAAOpB,EAAAA,KAAAA,CAAMoB,KAAK,IAAI,EAAA;AACrB,gBAAA,GAAGxB;;AAEN,0BAAAc,cAAA,CAACH,mBAAMc,IAAI,EAAA,EAAA,CAAA;AACX,0BAAAX,cAAA,CAACH,mBAAMe,KAAK,EAAA,EAAA;;;AAGlB,CAAA,CAAA;AAGF,MAAMC,kCAAoBC,UAAKnC,CAAAA,SAAAA;;;;"}
@@ -29,7 +29,7 @@ const TimeInput = /*#__PURE__*/ forwardRef(({ name, required, label, hint, label
29
29
  onChange: (time)=>{
30
30
  field.onChange(name, `${time}:00.000`);
31
31
  },
32
- onClear: ()=>field.onChange(name, undefined),
32
+ onClear: ()=>field.onChange(name, null),
33
33
  value: field.value ?? '',
34
34
  ...props
35
35
  }),