@payloadcms/ui 3.32.0-internal.a8b166f → 3.32.0-internal.f2e77bd

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 (57) hide show
  1. package/dist/elements/Autosave/index.d.ts.map +1 -1
  2. package/dist/elements/Autosave/index.js +20 -42
  3. package/dist/elements/Autosave/index.js.map +1 -1
  4. package/dist/elements/ListControls/useQueryPresets.d.ts.map +1 -1
  5. package/dist/elements/ListControls/useQueryPresets.js +10 -1
  6. package/dist/elements/ListControls/useQueryPresets.js.map +1 -1
  7. package/dist/elements/Table/DefaultCell/fields/File/index.d.ts.map +1 -1
  8. package/dist/elements/Table/DefaultCell/fields/File/index.js +7 -19
  9. package/dist/elements/Table/DefaultCell/fields/File/index.js.map +1 -1
  10. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  11. package/dist/elements/Table/DefaultCell/index.js +13 -0
  12. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  13. package/dist/exports/client/index.js +23 -23
  14. package/dist/exports/client/index.js.map +4 -4
  15. package/dist/fields/Array/index.d.ts.map +1 -1
  16. package/dist/fields/Array/index.js +46 -50
  17. package/dist/fields/Array/index.js.map +1 -1
  18. package/dist/fields/Blocks/index.d.ts.map +1 -1
  19. package/dist/fields/Blocks/index.js +46 -50
  20. package/dist/fields/Blocks/index.js.map +1 -1
  21. package/dist/fields/Upload/HasMany/index.d.ts +1 -1
  22. package/dist/fields/Upload/HasMany/index.d.ts.map +1 -1
  23. package/dist/fields/Upload/HasMany/index.js +11 -1
  24. package/dist/fields/Upload/HasMany/index.js.map +1 -1
  25. package/dist/fields/Upload/HasOne/index.d.ts.map +1 -1
  26. package/dist/fields/Upload/HasOne/index.js +12 -2
  27. package/dist/fields/Upload/HasOne/index.js.map +1 -1
  28. package/dist/fields/Upload/RelationshipContent/index.js +28 -27
  29. package/dist/fields/Upload/RelationshipContent/index.js.map +1 -1
  30. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  31. package/dist/forms/Form/fieldReducer.js +51 -8
  32. package/dist/forms/Form/fieldReducer.js.map +1 -1
  33. package/dist/forms/Form/index.d.ts.map +1 -1
  34. package/dist/forms/Form/index.js +56 -42
  35. package/dist/forms/Form/index.js.map +1 -1
  36. package/dist/forms/Form/initContextState.d.ts.map +1 -1
  37. package/dist/forms/Form/initContextState.js +1 -0
  38. package/dist/forms/Form/initContextState.js.map +1 -1
  39. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  40. package/dist/forms/Form/mergeServerFormState.js +24 -6
  41. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  42. package/dist/forms/Form/types.d.ts +5 -0
  43. package/dist/forms/Form/types.d.ts.map +1 -1
  44. package/dist/forms/Form/types.js.map +1 -1
  45. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  46. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +0 -2
  47. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  48. package/dist/hooks/useQueues.d.ts +34 -1
  49. package/dist/hooks/useQueues.d.ts.map +1 -1
  50. package/dist/hooks/useQueues.js +44 -28
  51. package/dist/hooks/useQueues.js.map +1 -1
  52. package/dist/styles.css +1 -1
  53. package/dist/utilities/getBestFitFromSizes.d.ts +25 -0
  54. package/dist/utilities/getBestFitFromSizes.d.ts.map +1 -0
  55. package/dist/utilities/getBestFitFromSizes.js +45 -0
  56. package/dist/utilities/getBestFitFromSizes.js.map +1 -0
  57. package/package.json +5 -5
@@ -106,9 +106,9 @@ export const Form = props => {
106
106
  const abortResetFormRef = useRef(null);
107
107
  const isFirstRenderRef = useRef(true);
108
108
  const fieldsReducer = useReducer(fieldReducer, {}, () => initialState);
109
- const [fields, dispatchFields] = fieldsReducer;
110
- contextRef.current.fields = fields;
111
- const prevFields = useRef(fields);
109
+ const [formState, dispatchFields] = fieldsReducer;
110
+ contextRef.current.fields = formState;
111
+ const prevFormState = useRef(formState);
112
112
  const validateForm = useCallback(async () => {
113
113
  const validatedFieldState = {};
114
114
  let isValid_0 = true;
@@ -483,28 +483,42 @@ export const Form = props => {
483
483
  });
484
484
  setModified(true);
485
485
  }, [dispatchFields, getDataByPath]);
486
+ const moveFieldRow = useCallback(({
487
+ moveFromIndex,
488
+ moveToIndex,
489
+ path: path_4
490
+ }) => {
491
+ dispatchFields({
492
+ type: 'MOVE_ROW',
493
+ moveFromIndex,
494
+ moveToIndex,
495
+ path: path_4
496
+ });
497
+ setModified(true);
498
+ }, [dispatchFields]);
486
499
  const removeFieldRow = useCallback(({
487
- path: path_4,
500
+ path: path_5,
488
501
  rowIndex: rowIndex_0
489
502
  }) => {
490
503
  dispatchFields({
491
504
  type: 'REMOVE_ROW',
492
- path: path_4,
505
+ path: path_5,
493
506
  rowIndex: rowIndex_0
494
507
  });
508
+ setModified(true);
495
509
  }, [dispatchFields]);
496
510
  const replaceFieldRow = useCallback(({
497
511
  blockType: blockType_0,
498
- path: path_5,
512
+ path: path_6,
499
513
  rowIndex: rowIndexArg_0,
500
514
  subFieldState: subFieldState_0
501
515
  }) => {
502
- const currentRows = getDataByPath(path_5);
516
+ const currentRows = getDataByPath(path_6);
503
517
  const rowIndex_1 = rowIndexArg_0 === undefined ? currentRows.length : rowIndexArg_0;
504
518
  dispatchFields({
505
519
  type: 'REPLACE_ROW',
506
520
  blockType: blockType_0,
507
- path: path_5,
521
+ path: path_6,
508
522
  rowIndex: rowIndex_1,
509
523
  subFieldState: subFieldState_0
510
524
  });
@@ -542,6 +556,7 @@ export const Form = props => {
542
556
  contextRef.current.dispatchFields = dispatchFields;
543
557
  contextRef.current.addFieldRow = addFieldRow;
544
558
  contextRef.current.removeFieldRow = removeFieldRow;
559
+ contextRef.current.moveFieldRow = moveFieldRow;
545
560
  contextRef.current.replaceFieldRow = replaceFieldRow;
546
561
  contextRef.current.uuid = uuid;
547
562
  contextRef.current.initializing = initializing;
@@ -574,7 +589,7 @@ export const Form = props => {
574
589
  }, [initialState, dispatchFields]);
575
590
  useThrottledEffect(() => {
576
591
  refreshCookie();
577
- }, 15000, [fields]);
592
+ }, 15000, [formState]);
578
593
  useEffect(() => {
579
594
  contextRef.current = {
580
595
  ...contextRef.current
@@ -583,46 +598,45 @@ export const Form = props => {
583
598
  setModified(false);
584
599
  }, [locale]);
585
600
  const classes = [className, baseClass].filter(Boolean).join(' ');
586
- const executeOnChange = useEffectEvent(async (submitted_0, signal) => {
587
- if (Array.isArray(onChange)) {
588
- let revalidatedFormState_0 = contextRef.current.fields;
589
- for (const onChangeFn of onChange) {
590
- if (signal.aborted) {
601
+ const executeOnChange = useEffectEvent(submitted_0 => {
602
+ queueTask(async () => {
603
+ if (Array.isArray(onChange)) {
604
+ let revalidatedFormState_0 = contextRef.current.fields;
605
+ for (const onChangeFn of onChange) {
606
+ // Edit view default onChange is in packages/ui/src/views/Edit/index.tsx. This onChange usually sends a form state request
607
+ revalidatedFormState_0 = await onChangeFn({
608
+ formState: deepCopyObjectSimpleWithoutReactComponents(contextRef.current.fields),
609
+ submitted: submitted_0
610
+ });
611
+ }
612
+ if (!revalidatedFormState_0) {
591
613
  return;
592
614
  }
593
- // Edit view default onChange is in packages/ui/src/views/Edit/index.tsx. This onChange usually sends a form state request
594
- revalidatedFormState_0 = await onChangeFn({
595
- formState: deepCopyObjectSimpleWithoutReactComponents(contextRef.current.fields),
596
- submitted: submitted_0
597
- });
598
- }
599
- if (!revalidatedFormState_0) {
600
- return;
601
- }
602
- const {
603
- changed,
604
- newState: newState_0
605
- } = mergeServerFormState({
606
- existingState: contextRef.current.fields || {},
607
- incomingState: revalidatedFormState_0
608
- });
609
- if (changed && !signal.aborted) {
610
- prevFields.current = newState_0;
611
- dispatchFields({
612
- type: 'REPLACE_STATE',
613
- optimize: false,
614
- state: newState_0
615
+ const {
616
+ changed,
617
+ newState: newState_0
618
+ } = mergeServerFormState({
619
+ existingState: contextRef.current.fields || {},
620
+ incomingState: revalidatedFormState_0
615
621
  });
622
+ if (changed) {
623
+ prevFormState.current = newState_0;
624
+ dispatchFields({
625
+ type: 'REPLACE_STATE',
626
+ optimize: false,
627
+ state: newState_0
628
+ });
629
+ }
616
630
  }
617
- }
631
+ });
618
632
  });
619
633
  useDebouncedEffect(() => {
620
- if ((isFirstRenderRef.current || !dequal(fields, prevFields.current)) && modified) {
621
- queueTask(async signal_0 => executeOnChange(submitted, signal_0));
634
+ if ((isFirstRenderRef.current || !dequal(formState, prevFormState.current)) && modified) {
635
+ executeOnChange(submitted);
622
636
  }
623
- prevFields.current = fields;
637
+ prevFormState.current = formState;
624
638
  isFirstRenderRef.current = false;
625
- }, [modified, submitted, fields, queueTask], 250);
639
+ }, [modified, submitted, formState], 250);
626
640
  const DocumentFormContextComponent = isDocumentForm ? DocumentFormContext : React.Fragment;
627
641
  const documentFormContextProps = isDocumentForm ? {
628
642
  value: contextRef.current
@@ -641,7 +655,7 @@ export const Form = props => {
641
655
  value: contextRef.current,
642
656
  children: /*#__PURE__*/_jsx(FormWatchContext, {
643
657
  value: {
644
- fields,
658
+ fields: formState,
645
659
  ...contextRef.current
646
660
  },
647
661
  children: /*#__PURE__*/_jsx(SubmittedContext, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["dequal","useRouter","serialize","deepCopyObjectSimpleWithoutReactComponents","getDataByPath","getDataByPathFunc","getSiblingData","getSiblingDataFunc","reduceFieldsToValues","wait","React","useCallback","useEffect","useReducer","useRef","useState","toast","FieldErrorsToast","useDebouncedEffect","useEffectEvent","useQueues","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useLocale","useOperation","useRouteTransition","useServerFunctions","useTranslation","useUploadHandlers","abortAndIgnore","handleAbortRef","requests","BackgroundProcessingContext","DocumentFormContext","FormContext","FormFieldsContext","FormWatchContext","InitializingContext","ModifiedContext","ProcessingContext","SubmittedContext","useDocumentForm","errorMessages","fieldReducer","initContextState","mergeServerFormState","baseClass","Form","props","id","collectionSlug","docPermissions","getDocPreferences","globalSlug","action","beforeSubmit","children","className","disabled","disabledFromProps","disableSuccessStatus","disableValidationOnSubmit","el","handleResponse","initialState","isDocumentForm","isInitializing","initializingFromProps","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","documentForm","code","locale","i18n","t","refreshCookie","user","operation","queueTask","getFormState","startRouteTransition","getUploadHandler","config","setDisabled","isMounted","setIsMounted","modified","setModified","isValid","setIsValid","initializing","setInitializing","processing","setProcessing","backgroundProcessing","setBackgroundProcessing","setSubmitted","formRef","contextRef","abortResetFormRef","isFirstRenderRef","fieldsReducer","fields","dispatchFields","current","prevFields","validateForm","validatedFieldState","data","getData","validationPromises","Object","entries","map","path","field","validatedField","pathSegments","split","passesCondition","validationResult","valid","validate","valueToValidate","value","rows","Array","isArray","blockData","event","preferences","req","payload","siblingData","errorMessage","Promise","all","type","state","submit","options","e","actionArg","methodToUse","overrides","overridesFromArgs","skipValidation","preventDefault","errorToast","successToast","promise","resolve","reject","hasFormSubmitAction","success","error","loading","stopPropagation","revalidatedFormState","serializableFields","reduce","priorOnChange","beforeSubmitFn","result","formState","every","key","formData","createFormData","mergeOverrideData","Boolean","res","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","newFormState","newState","mergedFormState","acceptValues","existingState","incomingState","optimize","push","message","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","_jsx","statusText","console","getFields","getField","file","handler","filename","name","clientUploadContext","updateFilename","JSON","stringify","mimeType","size","dataToSerialize","_payload","indices","nullsAsUndefineds","reset","controller","docPreferences","renderAllFields","schemaPath","signal","replaceState","addFieldRow","blockType","rowIndex","rowIndexArg","subFieldState","newRows","length","removeFieldRow","replaceFieldRow","currentRows","abortOnChange","sanitize","classes","filter","join","executeOnChange","onChangeFn","aborted","changed","DocumentFormContextComponent","Fragment","documentFormContextProps","El","noValidate","ref","Provider","useAllFormFields","useForm","useFormFields","useFormModified","useFormProcessing","useFormSubmitted","useWatchForm"],"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["'use client'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport { type FormState, type PayloadRequest } from 'payload'\nimport {\n deepCopyObjectSimpleWithoutReactComponents,\n getDataByPath as getDataByPathFunc,\n getSiblingData as getSiblingDataFunc,\n reduceFieldsToValues,\n wait,\n} from 'payload/shared'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type {\n CreateFormData,\n Context as FormContextType,\n FormProps,\n GetDataByPath,\n SubmitOptions,\n} from './types.js'\n\nimport { FieldErrorsToast } from '../../elements/Toasts/fieldErrors.js'\nimport { useDebouncedEffect } from '../../hooks/useDebouncedEffect.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useQueues } from '../../hooks/useQueues.js'\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadHandlers } from '../../providers/UploadHandlers/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { requests } from '../../utilities/api.js'\nimport {\n BackgroundProcessingContext,\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useDocumentForm,\n} from './context.js'\nimport { errorMessages } from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport { initContextState } from './initContextState.js'\nimport { mergeServerFormState } from './mergeServerFormState.js'\n\nconst baseClass = 'form'\n\nexport const Form: React.FC<FormProps> = (props) => {\n const { id, collectionSlug, docPermissions, getDocPreferences, globalSlug } = useDocumentInfo()\n\n const {\n action,\n beforeSubmit,\n children,\n className,\n disabled: disabledFromProps,\n disableSuccessStatus,\n disableValidationOnSubmit,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n el,\n handleResponse,\n initialState, // fully formed initial field state\n isDocumentForm,\n isInitializing: initializingFromProps,\n onChange,\n onSubmit,\n onSuccess,\n redirect,\n submitted: submittedFromProps,\n uuid,\n waitForAutocomplete,\n } = props\n\n const method = 'method' in props ? props?.method : undefined\n\n const router = useRouter()\n\n const documentForm = useDocumentForm()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n const { queueTask } = useQueues()\n\n const { getFormState } = useServerFunctions()\n const { startRouteTransition } = useRouteTransition()\n const { getUploadHandler } = useUploadHandlers()\n\n const { config } = useConfig()\n\n const [disabled, setDisabled] = useState(disabledFromProps || false)\n const [isMounted, setIsMounted] = useState(false)\n const [modified, setModified] = useState(false)\n\n /**\n * Tracks wether the form state passes validation.\n * For example the state could be submitted but invalid as field errors have been returned.\n */\n const [isValid, setIsValid] = useState(true)\n const [initializing, setInitializing] = useState(initializingFromProps)\n const [processing, setProcessing] = useState(false)\n const [backgroundProcessing, setBackgroundProcessing] = useState(false)\n\n const [submitted, setSubmitted] = useState(false)\n const formRef = useRef<HTMLFormElement>(null)\n const contextRef = useRef({} as FormContextType)\n const abortResetFormRef = useRef<AbortController>(null)\n const isFirstRenderRef = useRef(true)\n\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\n\n const [fields, dispatchFields] = fieldsReducer\n\n contextRef.current.fields = fields\n\n const prevFields = useRef(fields)\n\n const validateForm = useCallback(async () => {\n const validatedFieldState = {}\n let isValid = true\n\n const data = contextRef.current.getData()\n\n const validationPromises = Object.entries(contextRef.current.fields).map(\n async ([path, field]) => {\n const validatedField = field\n const pathSegments = path ? path.split('.') : []\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = validatedField.valid\n\n if ('validate' in field && typeof field.validate === 'function') {\n let valueToValidate = field.value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = contextRef.current.getDataByPath(path)\n }\n\n validationResult = await field.validate(valueToValidate, {\n ...field,\n id,\n collectionSlug,\n // If there is a parent document form, we can get the data from that form\n blockData: undefined, // Will be expensive to get - not worth to pass to client-side validation, as this can be obtained by the user using `useFormFields()`\n data: documentForm?.getData ? documentForm.getData() : data,\n event: 'submit',\n operation,\n path: pathSegments,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: contextRef.current.getSiblingData(path),\n })\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n } else {\n validatedField.valid = true\n validatedField.errorMessage = undefined\n }\n }\n\n if (validatedField.valid === false) {\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!dequal(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n setIsValid(isValid)\n\n return isValid\n }, [collectionSlug, config, dispatchFields, id, operation, t, user, documentForm])\n\n const submit = useCallback(\n async (options: SubmitOptions = {}, e): Promise<void> => {\n const {\n action: actionArg = action,\n method: methodToUse = method,\n overrides: overridesFromArgs = {},\n skipValidation,\n } = options\n\n if (disabled) {\n if (e) {\n e.preventDefault()\n }\n return\n }\n\n // create new toast promise which will resolve manually later\n let errorToast, successToast\n const promise = new Promise((resolve, reject) => {\n successToast = resolve\n errorToast = reject\n })\n\n const hasFormSubmitAction =\n actionArg || typeof action === 'string' || typeof action === 'function'\n\n if (redirect || disableSuccessStatus || !hasFormSubmitAction) {\n // Do not show submitting toast, as the promise toast may never disappear under these conditions.\n // Instead, make successToast() or errorToast() throw toast.success / toast.error\n successToast = (data) => toast.success(data)\n errorToast = (data) => toast.error(data)\n } else {\n toast.promise(promise, {\n error: (data) => {\n return data as string\n },\n loading: t('general:submitting'),\n success: (data) => {\n return data as string\n },\n })\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n setProcessing(true)\n setDisabled(true)\n\n if (waitForAutocomplete) {\n await wait(100)\n }\n\n // Execute server side validations\n if (Array.isArray(beforeSubmit)) {\n let revalidatedFormState: FormState\n\n const serializableFields = deepCopyObjectSimpleWithoutReactComponents(\n contextRef.current.fields,\n )\n\n await beforeSubmit.reduce(async (priorOnChange, beforeSubmitFn) => {\n await priorOnChange\n\n const result = await beforeSubmitFn({\n formState: serializableFields,\n })\n\n revalidatedFormState = result\n }, Promise.resolve())\n\n const isValid = Object.entries(revalidatedFormState).every(\n ([, field]) => field.valid !== false,\n )\n\n setIsValid(isValid)\n\n if (!isValid) {\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid =\n skipValidation || disableValidationOnSubmit ? true : await contextRef.current.validateForm()\n\n setIsValid(isValid)\n // If not valid, prevent submission\n if (!isValid) {\n errorToast(t('error:correctInvalidFields'))\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n let overrides = {}\n\n if (typeof overridesFromArgs === 'function') {\n overrides = overridesFromArgs(contextRef.current.fields)\n } else if (typeof overridesFromArgs === 'object') {\n overrides = overridesFromArgs\n }\n\n // If submit handler comes through via props, run that\n if (onSubmit) {\n const serializableFields = deepCopyObjectSimpleWithoutReactComponents(\n contextRef.current.fields,\n )\n\n const data = reduceFieldsToValues(serializableFields, true)\n\n for (const [key, value] of Object.entries(overrides)) {\n data[key] = value\n }\n\n onSubmit(serializableFields, data)\n }\n\n if (!hasFormSubmitAction) {\n // No action provided, so we should return. An example where this happens are lexical link drawers. Upon submitting the drawer, we\n // want to close it without submitting the form. Stuff like validation would be handled by lexical before this, through beforeSubmit\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n const formData = await contextRef.current.createFormData(overrides, {\n mergeOverrideData: Boolean(typeof overridesFromArgs !== 'function'),\n })\n\n try {\n let res\n\n if (typeof actionArg === 'string') {\n res = await requests[methodToUse.toLowerCase()](actionArg, {\n body: formData,\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n } else if (typeof action === 'function') {\n res = await action(formData)\n }\n\n setModified(false)\n setDisabled(false)\n\n if (typeof handleResponse === 'function') {\n handleResponse(res, successToast, errorToast)\n return\n }\n\n const contentType = res.headers.get('content-type')\n const isJSON = contentType && contentType.indexOf('application/json') !== -1\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let json: Record<string, any> = {}\n\n if (isJSON) {\n json = await res.json()\n }\n if (res.status < 400) {\n if (typeof onSuccess === 'function') {\n const newFormState = await onSuccess(json)\n if (newFormState) {\n const { newState: mergedFormState } = mergeServerFormState({\n acceptValues: true,\n existingState: contextRef.current.fields || {},\n incomingState: newFormState,\n })\n\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n state: mergedFormState,\n })\n }\n }\n setSubmitted(false)\n setProcessing(false)\n\n if (redirect) {\n startRouteTransition(() => router.push(redirect))\n } else if (!disableSuccessStatus) {\n successToast(json.message || t('general:submissionSuccessful'))\n }\n } else {\n setProcessing(false)\n setSubmitted(true)\n\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n if (json.message) {\n errorToast(json.message)\n return\n }\n\n if (Array.isArray(json.errors)) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs = []\n const newNonFieldErrs = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data?.errors)) {\n err.data?.errors.forEach((dataError) => {\n if (dataError?.path) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n setIsValid(false)\n\n dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n errorToast(<FieldErrorsToast errorMessage={err.message || t('error:unknown')} />)\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n errorToast(message)\n }\n } catch (err) {\n console.error('Error submitting form', err) // eslint-disable-line no-console\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n errorToast(err.message)\n }\n },\n [\n beforeSubmit,\n startRouteTransition,\n action,\n disableSuccessStatus,\n disableValidationOnSubmit,\n disabled,\n dispatchFields,\n handleResponse,\n method,\n onSubmit,\n onSuccess,\n redirect,\n router,\n t,\n i18n,\n waitForAutocomplete,\n ],\n )\n\n const getFields = useCallback(() => contextRef.current.fields, [])\n\n const getField = useCallback((path: string) => contextRef.current.fields[path], [])\n\n const getData = useCallback(() => reduceFieldsToValues(contextRef.current.fields, true), [])\n\n const getSiblingData = useCallback(\n (path: string) => getSiblingDataFunc(contextRef.current.fields, path),\n [],\n )\n\n const getDataByPath = useCallback<GetDataByPath>(\n (path: string) => getDataByPathFunc(contextRef.current.fields, path),\n [],\n )\n\n const createFormData = useCallback<CreateFormData>(\n async (overrides, { mergeOverrideData = true }) => {\n let data = reduceFieldsToValues(contextRef.current.fields, true)\n\n let file = data?.file\n\n if (file) {\n delete data.file\n }\n\n if (mergeOverrideData) {\n data = {\n ...data,\n ...overrides,\n }\n } else {\n data = overrides\n }\n\n const handler = getUploadHandler({ collectionSlug })\n\n if (file && typeof handler === 'function') {\n let filename = file.name\n const clientUploadContext = await handler({\n file,\n updateFilename: (value) => {\n filename = value\n },\n })\n\n file = JSON.stringify({\n clientUploadContext,\n collectionSlug,\n filename,\n mimeType: file.type,\n size: file.size,\n })\n }\n\n const dataToSerialize = {\n _payload: JSON.stringify(data),\n file,\n }\n\n // nullAsUndefineds is important to allow uploads and relationship fields to clear themselves\n const formData = serialize(dataToSerialize, { indices: true, nullsAsUndefineds: false })\n\n return formData\n },\n [collectionSlug, getUploadHandler],\n )\n\n const reset = useCallback(\n async (data: unknown) => {\n const controller = handleAbortRef(abortResetFormRef)\n\n const docPreferences = await getDocPreferences()\n\n const { state: newState } = await getFormState({\n id,\n collectionSlug,\n data,\n docPermissions,\n docPreferences,\n globalSlug,\n locale,\n operation,\n renderAllFields: true,\n schemaPath: collectionSlug ? collectionSlug : globalSlug,\n signal: controller.signal,\n skipValidation: true,\n })\n\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state: newState })\n\n abortResetFormRef.current = null\n },\n [\n collectionSlug,\n dispatchFields,\n globalSlug,\n id,\n operation,\n getFormState,\n docPermissions,\n getDocPreferences,\n locale,\n ],\n )\n\n const replaceState = useCallback(\n (state: FormState) => {\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state })\n },\n [dispatchFields],\n )\n\n const addFieldRow: FormContextType['addFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const newRows: unknown[] = getDataByPath(path) || []\n const rowIndex = rowIndexArg === undefined ? newRows.length : rowIndexArg\n\n // dispatch ADD_ROW that sets requiresRender: true and adds a blank row to local form state.\n // This performs no form state request, as the debounced onChange effect will do that for us.\n dispatchFields({\n type: 'ADD_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n const removeFieldRow: FormContextType['removeFieldRow'] = useCallback(\n ({ path, rowIndex }) => {\n dispatchFields({ type: 'REMOVE_ROW', path, rowIndex })\n },\n [dispatchFields],\n )\n\n const replaceFieldRow: FormContextType['replaceFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const currentRows: unknown[] = getDataByPath(path)\n const rowIndex = rowIndexArg === undefined ? currentRows.length : rowIndexArg\n\n dispatchFields({\n type: 'REPLACE_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n useEffect(() => {\n const abortOnChange = abortResetFormRef.current\n\n return () => {\n abortAndIgnore(abortOnChange)\n }\n }, [])\n\n useEffect(() => {\n if (initializingFromProps !== undefined) {\n setInitializing(initializingFromProps)\n }\n }, [initializingFromProps])\n\n contextRef.current.submit = submit\n contextRef.current.getFields = getFields\n contextRef.current.getField = getField\n contextRef.current.getData = getData\n contextRef.current.getSiblingData = getSiblingData\n contextRef.current.getDataByPath = getDataByPath\n contextRef.current.validateForm = validateForm\n contextRef.current.createFormData = createFormData\n contextRef.current.setModified = setModified\n contextRef.current.setProcessing = setProcessing\n contextRef.current.setBackgroundProcessing = setBackgroundProcessing\n\n contextRef.current.setSubmitted = setSubmitted\n contextRef.current.setIsValid = setIsValid\n contextRef.current.disabled = disabled\n contextRef.current.setDisabled = setDisabled\n contextRef.current.formRef = formRef\n contextRef.current.reset = reset\n contextRef.current.replaceState = replaceState\n contextRef.current.dispatchFields = dispatchFields\n contextRef.current.addFieldRow = addFieldRow\n contextRef.current.removeFieldRow = removeFieldRow\n contextRef.current.replaceFieldRow = replaceFieldRow\n contextRef.current.uuid = uuid\n contextRef.current.initializing = initializing\n contextRef.current.isValid = isValid\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n useEffect(() => {\n if (typeof disabledFromProps === 'boolean') {\n setDisabled(disabledFromProps)\n }\n }, [disabledFromProps])\n\n useEffect(() => {\n if (typeof submittedFromProps === 'boolean') {\n setSubmitted(submittedFromProps)\n }\n }, [submittedFromProps])\n\n useEffect(() => {\n if (initialState) {\n contextRef.current = { ...initContextState } as FormContextType\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n sanitize: true,\n state: initialState,\n })\n }\n }, [initialState, dispatchFields])\n\n useThrottledEffect(\n () => {\n refreshCookie()\n },\n 15000,\n [fields],\n )\n\n useEffect(() => {\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n setModified(false)\n }, [locale])\n\n const classes = [className, baseClass].filter(Boolean).join(' ')\n\n const executeOnChange = useEffectEvent(async (submitted: boolean, signal: AbortSignal) => {\n if (Array.isArray(onChange)) {\n let revalidatedFormState: FormState = contextRef.current.fields\n\n for (const onChangeFn of onChange) {\n if (signal.aborted) {\n return\n }\n\n // Edit view default onChange is in packages/ui/src/views/Edit/index.tsx. This onChange usually sends a form state request\n revalidatedFormState = await onChangeFn({\n formState: deepCopyObjectSimpleWithoutReactComponents(contextRef.current.fields),\n submitted,\n })\n }\n\n if (!revalidatedFormState) {\n return\n }\n\n const { changed, newState } = mergeServerFormState({\n existingState: contextRef.current.fields || {},\n incomingState: revalidatedFormState,\n })\n\n if (changed && !signal.aborted) {\n prevFields.current = newState\n\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n state: newState,\n })\n }\n }\n })\n\n useDebouncedEffect(\n () => {\n if ((isFirstRenderRef.current || !dequal(fields, prevFields.current)) && modified) {\n queueTask(async (signal) => executeOnChange(submitted, signal))\n }\n\n prevFields.current = fields\n isFirstRenderRef.current = false\n },\n [modified, submitted, fields, queueTask],\n 250,\n )\n\n const DocumentFormContextComponent: React.FC<any> = isDocumentForm\n ? DocumentFormContext\n : React.Fragment\n\n const documentFormContextProps = isDocumentForm\n ? {\n value: contextRef.current,\n }\n : {}\n\n const El: 'form' = (el as unknown as 'form') || 'form'\n\n return (\n <El\n action={typeof action === 'function' ? void action : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => void contextRef.current.submit({}, e)}\n ref={formRef}\n >\n <DocumentFormContextComponent {...documentFormContextProps}>\n <FormContext value={contextRef.current}>\n <FormWatchContext\n value={{\n fields,\n ...contextRef.current,\n }}\n >\n <SubmittedContext value={submitted}>\n <InitializingContext value={!isMounted || (isMounted && initializing)}>\n <ProcessingContext value={processing}>\n <BackgroundProcessingContext value={backgroundProcessing}>\n <ModifiedContext value={modified}>\n {/* eslint-disable-next-line @eslint-react/no-context-provider */}\n <FormFieldsContext.Provider value={fieldsReducer}>\n {children}\n </FormFieldsContext.Provider>\n </ModifiedContext>\n </BackgroundProcessingContext>\n </ProcessingContext>\n </InitializingContext>\n </SubmittedContext>\n </FormWatchContext>\n </FormContext>\n </DocumentFormContextComponent>\n </El>\n )\n}\n\nexport {\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useAllFormFields,\n useDocumentForm,\n useForm,\n useFormFields,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n useWatchForm,\n} from './context.js'\n\nexport { FormProps }\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["dequal","useRouter","serialize","deepCopyObjectSimpleWithoutReactComponents","getDataByPath","getDataByPathFunc","getSiblingData","getSiblingDataFunc","reduceFieldsToValues","wait","React","useCallback","useEffect","useReducer","useRef","useState","toast","FieldErrorsToast","useDebouncedEffect","useEffectEvent","useQueues","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useLocale","useOperation","useRouteTransition","useServerFunctions","useTranslation","useUploadHandlers","abortAndIgnore","handleAbortRef","requests","BackgroundProcessingContext","DocumentFormContext","FormContext","FormFieldsContext","FormWatchContext","InitializingContext","ModifiedContext","ProcessingContext","SubmittedContext","useDocumentForm","errorMessages","fieldReducer","initContextState","mergeServerFormState","baseClass","Form","props","id","collectionSlug","docPermissions","getDocPreferences","globalSlug","action","beforeSubmit","children","className","disabled","disabledFromProps","disableSuccessStatus","disableValidationOnSubmit","el","handleResponse","initialState","isDocumentForm","isInitializing","initializingFromProps","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","documentForm","code","locale","i18n","t","refreshCookie","user","operation","queueTask","getFormState","startRouteTransition","getUploadHandler","config","setDisabled","isMounted","setIsMounted","modified","setModified","isValid","setIsValid","initializing","setInitializing","processing","setProcessing","backgroundProcessing","setBackgroundProcessing","setSubmitted","formRef","contextRef","abortResetFormRef","isFirstRenderRef","fieldsReducer","formState","dispatchFields","current","fields","prevFormState","validateForm","validatedFieldState","data","getData","validationPromises","Object","entries","map","path","field","validatedField","pathSegments","split","passesCondition","validationResult","valid","validate","valueToValidate","value","rows","Array","isArray","blockData","event","preferences","req","payload","siblingData","errorMessage","Promise","all","type","state","submit","options","e","actionArg","methodToUse","overrides","overridesFromArgs","skipValidation","preventDefault","errorToast","successToast","promise","resolve","reject","hasFormSubmitAction","success","error","loading","stopPropagation","revalidatedFormState","serializableFields","reduce","priorOnChange","beforeSubmitFn","result","every","key","formData","createFormData","mergeOverrideData","Boolean","res","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","newFormState","newState","mergedFormState","acceptValues","existingState","incomingState","optimize","push","message","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","_jsx","statusText","console","getFields","getField","file","handler","filename","name","clientUploadContext","updateFilename","JSON","stringify","mimeType","size","dataToSerialize","_payload","indices","nullsAsUndefineds","reset","controller","docPreferences","renderAllFields","schemaPath","signal","replaceState","addFieldRow","blockType","rowIndex","rowIndexArg","subFieldState","newRows","length","moveFieldRow","moveFromIndex","moveToIndex","removeFieldRow","replaceFieldRow","currentRows","abortOnChange","sanitize","classes","filter","join","executeOnChange","onChangeFn","changed","DocumentFormContextComponent","Fragment","documentFormContextProps","El","noValidate","ref","Provider","useAllFormFields","useForm","useFormFields","useFormModified","useFormProcessing","useFormSubmitted","useWatchForm"],"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["'use client'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport { type FormState, type PayloadRequest } from 'payload'\nimport {\n deepCopyObjectSimpleWithoutReactComponents,\n getDataByPath as getDataByPathFunc,\n getSiblingData as getSiblingDataFunc,\n reduceFieldsToValues,\n wait,\n} from 'payload/shared'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type {\n CreateFormData,\n Context as FormContextType,\n FormProps,\n GetDataByPath,\n SubmitOptions,\n} from './types.js'\n\nimport { FieldErrorsToast } from '../../elements/Toasts/fieldErrors.js'\nimport { useDebouncedEffect } from '../../hooks/useDebouncedEffect.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useQueues } from '../../hooks/useQueues.js'\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadHandlers } from '../../providers/UploadHandlers/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { requests } from '../../utilities/api.js'\nimport {\n BackgroundProcessingContext,\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useDocumentForm,\n} from './context.js'\nimport { errorMessages } from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport { initContextState } from './initContextState.js'\nimport { mergeServerFormState } from './mergeServerFormState.js'\n\nconst baseClass = 'form'\n\nexport const Form: React.FC<FormProps> = (props) => {\n const { id, collectionSlug, docPermissions, getDocPreferences, globalSlug } = useDocumentInfo()\n\n const {\n action,\n beforeSubmit,\n children,\n className,\n disabled: disabledFromProps,\n disableSuccessStatus,\n disableValidationOnSubmit,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n el,\n handleResponse,\n initialState, // fully formed initial field state\n isDocumentForm,\n isInitializing: initializingFromProps,\n onChange,\n onSubmit,\n onSuccess,\n redirect,\n submitted: submittedFromProps,\n uuid,\n waitForAutocomplete,\n } = props\n\n const method = 'method' in props ? props?.method : undefined\n\n const router = useRouter()\n\n const documentForm = useDocumentForm()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n const { queueTask } = useQueues()\n\n const { getFormState } = useServerFunctions()\n const { startRouteTransition } = useRouteTransition()\n const { getUploadHandler } = useUploadHandlers()\n\n const { config } = useConfig()\n\n const [disabled, setDisabled] = useState(disabledFromProps || false)\n const [isMounted, setIsMounted] = useState(false)\n const [modified, setModified] = useState(false)\n\n /**\n * Tracks wether the form state passes validation.\n * For example the state could be submitted but invalid as field errors have been returned.\n */\n const [isValid, setIsValid] = useState(true)\n const [initializing, setInitializing] = useState(initializingFromProps)\n const [processing, setProcessing] = useState(false)\n const [backgroundProcessing, setBackgroundProcessing] = useState(false)\n\n const [submitted, setSubmitted] = useState(false)\n const formRef = useRef<HTMLFormElement>(null)\n const contextRef = useRef({} as FormContextType)\n const abortResetFormRef = useRef<AbortController>(null)\n const isFirstRenderRef = useRef(true)\n\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\n\n const [formState, dispatchFields] = fieldsReducer\n\n contextRef.current.fields = formState\n\n const prevFormState = useRef(formState)\n\n const validateForm = useCallback(async () => {\n const validatedFieldState = {}\n let isValid = true\n\n const data = contextRef.current.getData()\n\n const validationPromises = Object.entries(contextRef.current.fields).map(\n async ([path, field]) => {\n const validatedField = field\n const pathSegments = path ? path.split('.') : []\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = validatedField.valid\n\n if ('validate' in field && typeof field.validate === 'function') {\n let valueToValidate = field.value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = contextRef.current.getDataByPath(path)\n }\n\n validationResult = await field.validate(valueToValidate, {\n ...field,\n id,\n collectionSlug,\n // If there is a parent document form, we can get the data from that form\n blockData: undefined, // Will be expensive to get - not worth to pass to client-side validation, as this can be obtained by the user using `useFormFields()`\n data: documentForm?.getData ? documentForm.getData() : data,\n event: 'submit',\n operation,\n path: pathSegments,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: contextRef.current.getSiblingData(path),\n })\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n } else {\n validatedField.valid = true\n validatedField.errorMessage = undefined\n }\n }\n\n if (validatedField.valid === false) {\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!dequal(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n setIsValid(isValid)\n\n return isValid\n }, [collectionSlug, config, dispatchFields, id, operation, t, user, documentForm])\n\n const submit = useCallback(\n async (options: SubmitOptions = {}, e): Promise<void> => {\n const {\n action: actionArg = action,\n method: methodToUse = method,\n overrides: overridesFromArgs = {},\n skipValidation,\n } = options\n\n if (disabled) {\n if (e) {\n e.preventDefault()\n }\n return\n }\n\n // create new toast promise which will resolve manually later\n let errorToast, successToast\n const promise = new Promise((resolve, reject) => {\n successToast = resolve\n errorToast = reject\n })\n\n const hasFormSubmitAction =\n actionArg || typeof action === 'string' || typeof action === 'function'\n\n if (redirect || disableSuccessStatus || !hasFormSubmitAction) {\n // Do not show submitting toast, as the promise toast may never disappear under these conditions.\n // Instead, make successToast() or errorToast() throw toast.success / toast.error\n successToast = (data) => toast.success(data)\n errorToast = (data) => toast.error(data)\n } else {\n toast.promise(promise, {\n error: (data) => {\n return data as string\n },\n loading: t('general:submitting'),\n success: (data) => {\n return data as string\n },\n })\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n setProcessing(true)\n setDisabled(true)\n\n if (waitForAutocomplete) {\n await wait(100)\n }\n\n // Execute server side validations\n if (Array.isArray(beforeSubmit)) {\n let revalidatedFormState: FormState\n\n const serializableFields = deepCopyObjectSimpleWithoutReactComponents(\n contextRef.current.fields,\n )\n\n await beforeSubmit.reduce(async (priorOnChange, beforeSubmitFn) => {\n await priorOnChange\n\n const result = await beforeSubmitFn({\n formState: serializableFields,\n })\n\n revalidatedFormState = result\n }, Promise.resolve())\n\n const isValid = Object.entries(revalidatedFormState).every(\n ([, field]) => field.valid !== false,\n )\n\n setIsValid(isValid)\n\n if (!isValid) {\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid =\n skipValidation || disableValidationOnSubmit ? true : await contextRef.current.validateForm()\n\n setIsValid(isValid)\n // If not valid, prevent submission\n if (!isValid) {\n errorToast(t('error:correctInvalidFields'))\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n let overrides = {}\n\n if (typeof overridesFromArgs === 'function') {\n overrides = overridesFromArgs(contextRef.current.fields)\n } else if (typeof overridesFromArgs === 'object') {\n overrides = overridesFromArgs\n }\n\n // If submit handler comes through via props, run that\n if (onSubmit) {\n const serializableFields = deepCopyObjectSimpleWithoutReactComponents(\n contextRef.current.fields,\n )\n\n const data = reduceFieldsToValues(serializableFields, true)\n\n for (const [key, value] of Object.entries(overrides)) {\n data[key] = value\n }\n\n onSubmit(serializableFields, data)\n }\n\n if (!hasFormSubmitAction) {\n // No action provided, so we should return. An example where this happens are lexical link drawers. Upon submitting the drawer, we\n // want to close it without submitting the form. Stuff like validation would be handled by lexical before this, through beforeSubmit\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n const formData = await contextRef.current.createFormData(overrides, {\n mergeOverrideData: Boolean(typeof overridesFromArgs !== 'function'),\n })\n\n try {\n let res\n\n if (typeof actionArg === 'string') {\n res = await requests[methodToUse.toLowerCase()](actionArg, {\n body: formData,\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n } else if (typeof action === 'function') {\n res = await action(formData)\n }\n\n setModified(false)\n setDisabled(false)\n\n if (typeof handleResponse === 'function') {\n handleResponse(res, successToast, errorToast)\n return\n }\n\n const contentType = res.headers.get('content-type')\n const isJSON = contentType && contentType.indexOf('application/json') !== -1\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let json: Record<string, any> = {}\n\n if (isJSON) {\n json = await res.json()\n }\n if (res.status < 400) {\n if (typeof onSuccess === 'function') {\n const newFormState = await onSuccess(json)\n if (newFormState) {\n const { newState: mergedFormState } = mergeServerFormState({\n acceptValues: true,\n existingState: contextRef.current.fields || {},\n incomingState: newFormState,\n })\n\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n state: mergedFormState,\n })\n }\n }\n setSubmitted(false)\n setProcessing(false)\n\n if (redirect) {\n startRouteTransition(() => router.push(redirect))\n } else if (!disableSuccessStatus) {\n successToast(json.message || t('general:submissionSuccessful'))\n }\n } else {\n setProcessing(false)\n setSubmitted(true)\n\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n if (json.message) {\n errorToast(json.message)\n return\n }\n\n if (Array.isArray(json.errors)) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs = []\n const newNonFieldErrs = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data?.errors)) {\n err.data?.errors.forEach((dataError) => {\n if (dataError?.path) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n setIsValid(false)\n\n dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n errorToast(<FieldErrorsToast errorMessage={err.message || t('error:unknown')} />)\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n errorToast(message)\n }\n } catch (err) {\n console.error('Error submitting form', err) // eslint-disable-line no-console\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n errorToast(err.message)\n }\n },\n [\n beforeSubmit,\n startRouteTransition,\n action,\n disableSuccessStatus,\n disableValidationOnSubmit,\n disabled,\n dispatchFields,\n handleResponse,\n method,\n onSubmit,\n onSuccess,\n redirect,\n router,\n t,\n i18n,\n waitForAutocomplete,\n ],\n )\n\n const getFields = useCallback(() => contextRef.current.fields, [])\n\n const getField = useCallback((path: string) => contextRef.current.fields[path], [])\n\n const getData = useCallback(() => reduceFieldsToValues(contextRef.current.fields, true), [])\n\n const getSiblingData = useCallback(\n (path: string) => getSiblingDataFunc(contextRef.current.fields, path),\n [],\n )\n\n const getDataByPath = useCallback<GetDataByPath>(\n (path: string) => getDataByPathFunc(contextRef.current.fields, path),\n [],\n )\n\n const createFormData = useCallback<CreateFormData>(\n async (overrides, { mergeOverrideData = true }) => {\n let data = reduceFieldsToValues(contextRef.current.fields, true)\n\n let file = data?.file\n\n if (file) {\n delete data.file\n }\n\n if (mergeOverrideData) {\n data = {\n ...data,\n ...overrides,\n }\n } else {\n data = overrides\n }\n\n const handler = getUploadHandler({ collectionSlug })\n\n if (file && typeof handler === 'function') {\n let filename = file.name\n const clientUploadContext = await handler({\n file,\n updateFilename: (value) => {\n filename = value\n },\n })\n\n file = JSON.stringify({\n clientUploadContext,\n collectionSlug,\n filename,\n mimeType: file.type,\n size: file.size,\n })\n }\n\n const dataToSerialize = {\n _payload: JSON.stringify(data),\n file,\n }\n\n // nullAsUndefineds is important to allow uploads and relationship fields to clear themselves\n const formData = serialize(dataToSerialize, { indices: true, nullsAsUndefineds: false })\n\n return formData\n },\n [collectionSlug, getUploadHandler],\n )\n\n const reset = useCallback(\n async (data: unknown) => {\n const controller = handleAbortRef(abortResetFormRef)\n\n const docPreferences = await getDocPreferences()\n\n const { state: newState } = await getFormState({\n id,\n collectionSlug,\n data,\n docPermissions,\n docPreferences,\n globalSlug,\n locale,\n operation,\n renderAllFields: true,\n schemaPath: collectionSlug ? collectionSlug : globalSlug,\n signal: controller.signal,\n skipValidation: true,\n })\n\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state: newState })\n\n abortResetFormRef.current = null\n },\n [\n collectionSlug,\n dispatchFields,\n globalSlug,\n id,\n operation,\n getFormState,\n docPermissions,\n getDocPreferences,\n locale,\n ],\n )\n\n const replaceState = useCallback(\n (state: FormState) => {\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state })\n },\n [dispatchFields],\n )\n\n const addFieldRow: FormContextType['addFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const newRows: unknown[] = getDataByPath(path) || []\n const rowIndex = rowIndexArg === undefined ? newRows.length : rowIndexArg\n\n // dispatch ADD_ROW that sets requiresRender: true and adds a blank row to local form state.\n // This performs no form state request, as the debounced onChange effect will do that for us.\n dispatchFields({\n type: 'ADD_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n const moveFieldRow: FormContextType['moveFieldRow'] = useCallback(\n ({ moveFromIndex, moveToIndex, path }) => {\n dispatchFields({\n type: 'MOVE_ROW',\n moveFromIndex,\n moveToIndex,\n path,\n })\n\n setModified(true)\n },\n [dispatchFields],\n )\n\n const removeFieldRow: FormContextType['removeFieldRow'] = useCallback(\n ({ path, rowIndex }) => {\n dispatchFields({ type: 'REMOVE_ROW', path, rowIndex })\n\n setModified(true)\n },\n [dispatchFields],\n )\n\n const replaceFieldRow: FormContextType['replaceFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const currentRows: unknown[] = getDataByPath(path)\n const rowIndex = rowIndexArg === undefined ? currentRows.length : rowIndexArg\n\n dispatchFields({\n type: 'REPLACE_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n useEffect(() => {\n const abortOnChange = abortResetFormRef.current\n\n return () => {\n abortAndIgnore(abortOnChange)\n }\n }, [])\n\n useEffect(() => {\n if (initializingFromProps !== undefined) {\n setInitializing(initializingFromProps)\n }\n }, [initializingFromProps])\n\n contextRef.current.submit = submit\n contextRef.current.getFields = getFields\n contextRef.current.getField = getField\n contextRef.current.getData = getData\n contextRef.current.getSiblingData = getSiblingData\n contextRef.current.getDataByPath = getDataByPath\n contextRef.current.validateForm = validateForm\n contextRef.current.createFormData = createFormData\n contextRef.current.setModified = setModified\n contextRef.current.setProcessing = setProcessing\n contextRef.current.setBackgroundProcessing = setBackgroundProcessing\n\n contextRef.current.setSubmitted = setSubmitted\n contextRef.current.setIsValid = setIsValid\n contextRef.current.disabled = disabled\n contextRef.current.setDisabled = setDisabled\n contextRef.current.formRef = formRef\n contextRef.current.reset = reset\n contextRef.current.replaceState = replaceState\n contextRef.current.dispatchFields = dispatchFields\n contextRef.current.addFieldRow = addFieldRow\n contextRef.current.removeFieldRow = removeFieldRow\n contextRef.current.moveFieldRow = moveFieldRow\n contextRef.current.replaceFieldRow = replaceFieldRow\n contextRef.current.uuid = uuid\n contextRef.current.initializing = initializing\n contextRef.current.isValid = isValid\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n useEffect(() => {\n if (typeof disabledFromProps === 'boolean') {\n setDisabled(disabledFromProps)\n }\n }, [disabledFromProps])\n\n useEffect(() => {\n if (typeof submittedFromProps === 'boolean') {\n setSubmitted(submittedFromProps)\n }\n }, [submittedFromProps])\n\n useEffect(() => {\n if (initialState) {\n contextRef.current = { ...initContextState } as FormContextType\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n sanitize: true,\n state: initialState,\n })\n }\n }, [initialState, dispatchFields])\n\n useThrottledEffect(\n () => {\n refreshCookie()\n },\n 15000,\n [formState],\n )\n\n useEffect(() => {\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n setModified(false)\n }, [locale])\n\n const classes = [className, baseClass].filter(Boolean).join(' ')\n\n const executeOnChange = useEffectEvent((submitted: boolean) => {\n queueTask(async () => {\n if (Array.isArray(onChange)) {\n let revalidatedFormState: FormState = contextRef.current.fields\n\n for (const onChangeFn of onChange) {\n // Edit view default onChange is in packages/ui/src/views/Edit/index.tsx. This onChange usually sends a form state request\n revalidatedFormState = await onChangeFn({\n formState: deepCopyObjectSimpleWithoutReactComponents(contextRef.current.fields),\n submitted,\n })\n }\n\n if (!revalidatedFormState) {\n return\n }\n\n const { changed, newState } = mergeServerFormState({\n existingState: contextRef.current.fields || {},\n incomingState: revalidatedFormState,\n })\n\n if (changed) {\n prevFormState.current = newState\n\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n state: newState,\n })\n }\n }\n })\n })\n\n useDebouncedEffect(\n () => {\n if ((isFirstRenderRef.current || !dequal(formState, prevFormState.current)) && modified) {\n executeOnChange(submitted)\n }\n\n prevFormState.current = formState\n isFirstRenderRef.current = false\n },\n [modified, submitted, formState],\n 250,\n )\n\n const DocumentFormContextComponent: React.FC<any> = isDocumentForm\n ? DocumentFormContext\n : React.Fragment\n\n const documentFormContextProps = isDocumentForm\n ? {\n value: contextRef.current,\n }\n : {}\n\n const El: 'form' = (el as unknown as 'form') || 'form'\n\n return (\n <El\n action={typeof action === 'function' ? void action : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => void contextRef.current.submit({}, e)}\n ref={formRef}\n >\n <DocumentFormContextComponent {...documentFormContextProps}>\n <FormContext value={contextRef.current}>\n <FormWatchContext\n value={{\n fields: formState,\n ...contextRef.current,\n }}\n >\n <SubmittedContext value={submitted}>\n <InitializingContext value={!isMounted || (isMounted && initializing)}>\n <ProcessingContext value={processing}>\n <BackgroundProcessingContext value={backgroundProcessing}>\n <ModifiedContext value={modified}>\n {/* eslint-disable-next-line @eslint-react/no-context-provider */}\n <FormFieldsContext.Provider value={fieldsReducer}>\n {children}\n </FormFieldsContext.Provider>\n </ModifiedContext>\n </BackgroundProcessingContext>\n </ProcessingContext>\n </InitializingContext>\n </SubmittedContext>\n </FormWatchContext>\n </FormContext>\n </DocumentFormContextComponent>\n </El>\n )\n}\n\nexport {\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useAllFormFields,\n useDocumentForm,\n useForm,\n useFormFields,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n useWatchForm,\n} from './context.js'\n\nexport { FormProps }\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"initContextState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/initContextState.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,OAAO,EAUR,MAAM,YAAY,CAAA;AAcnB,eAAO,MAAM,gBAAgB,EAAE,OA4B9B,CAAA"}
1
+ {"version":3,"file":"initContextState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/initContextState.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,OAAO,EAUR,MAAM,YAAY,CAAA;AAcnB,eAAO,MAAM,gBAAgB,EAAE,OA6B9B,CAAA"}
@@ -25,6 +25,7 @@ export const initContextState = {
25
25
  getSiblingData,
26
26
  initializing: undefined,
27
27
  isValid: true,
28
+ moveFieldRow: () => undefined,
28
29
  removeFieldRow: () => undefined,
29
30
  replaceFieldRow: () => undefined,
30
31
  replaceState: () => undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"initContextState.js","names":["submit","undefined","getSiblingData","dispatchFields","validateForm","createFormData","setModified","setProcessing","setBackgroundProcessing","setSubmitted","reset","initContextState","addFieldRow","buildRowErrors","disabled","fields","formRef","getData","getDataByPath","getField","getFields","initializing","isValid","removeFieldRow","replaceFieldRow","replaceState","setDisabled","setIsValid"],"sources":["../../../src/forms/Form/initContextState.ts"],"sourcesContent":["'use client'\nimport type { Data, FormField, FormState } from 'payload'\n\nimport type {\n Context,\n CreateFormData,\n DispatchFields,\n GetSiblingData,\n Reset,\n SetModified,\n SetProcessing,\n SetSubmitted,\n Submit,\n ValidateForm,\n} from './types.js'\n\nconst submit: Submit = () => undefined\nconst getSiblingData: GetSiblingData = () => undefined\nconst dispatchFields: DispatchFields = () => undefined\nconst validateForm: ValidateForm = () => undefined\nconst createFormData: CreateFormData = () => undefined\n\nconst setModified: SetModified = () => undefined\nconst setProcessing: SetProcessing = () => undefined\nconst setBackgroundProcessing: SetProcessing = () => undefined\nconst setSubmitted: SetSubmitted = () => undefined\nconst reset: Reset = () => undefined\n\nexport const initContextState: Context = {\n addFieldRow: () => undefined,\n buildRowErrors: () => undefined,\n createFormData,\n disabled: false,\n dispatchFields,\n fields: {},\n formRef: null,\n getData: (): Data => undefined,\n getDataByPath: () => undefined,\n getField: (): FormField => undefined,\n getFields: (): FormState => ({}),\n getSiblingData,\n initializing: undefined,\n isValid: true,\n removeFieldRow: () => undefined,\n replaceFieldRow: () => undefined,\n replaceState: () => undefined,\n reset,\n setBackgroundProcessing,\n setDisabled: () => undefined,\n setIsValid: () => undefined,\n setModified,\n setProcessing,\n setSubmitted,\n submit,\n\n validateForm,\n}\n"],"mappings":"AAAA;;AAgBA,MAAMA,MAAA,GAAiBA,CAAA,KAAMC,SAAA;AAC7B,MAAMC,cAAA,GAAiCA,CAAA,KAAMD,SAAA;AAC7C,MAAME,cAAA,GAAiCA,CAAA,KAAMF,SAAA;AAC7C,MAAMG,YAAA,GAA6BA,CAAA,KAAMH,SAAA;AACzC,MAAMI,cAAA,GAAiCA,CAAA,KAAMJ,SAAA;AAE7C,MAAMK,WAAA,GAA2BA,CAAA,KAAML,SAAA;AACvC,MAAMM,aAAA,GAA+BA,CAAA,KAAMN,SAAA;AAC3C,MAAMO,uBAAA,GAAyCA,CAAA,KAAMP,SAAA;AACrD,MAAMQ,YAAA,GAA6BA,CAAA,KAAMR,SAAA;AACzC,MAAMS,KAAA,GAAeA,CAAA,KAAMT,SAAA;AAE3B,OAAO,MAAMU,gBAAA,GAA4B;EACvCC,WAAA,EAAaA,CAAA,KAAMX,SAAA;EACnBY,cAAA,EAAgBA,CAAA,KAAMZ,SAAA;EACtBI,cAAA;EACAS,QAAA,EAAU;EACVX,cAAA;EACAY,MAAA,EAAQ,CAAC;EACTC,OAAA,EAAS;EACTC,OAAA,EAASA,CAAA,KAAYhB,SAAA;EACrBiB,aAAA,EAAeA,CAAA,KAAMjB,SAAA;EACrBkB,QAAA,EAAUA,CAAA,KAAiBlB,SAAA;EAC3BmB,SAAA,EAAWA,CAAA,MAAkB,CAAC;EAC9BlB,cAAA;EACAmB,YAAA,EAAcpB,SAAA;EACdqB,OAAA,EAAS;EACTC,cAAA,EAAgBA,CAAA,KAAMtB,SAAA;EACtBuB,eAAA,EAAiBA,CAAA,KAAMvB,SAAA;EACvBwB,YAAA,EAAcA,CAAA,KAAMxB,SAAA;EACpBS,KAAA;EACAF,uBAAA;EACAkB,WAAA,EAAaA,CAAA,KAAMzB,SAAA;EACnB0B,UAAA,EAAYA,CAAA,KAAM1B,SAAA;EAClBK,WAAA;EACAC,aAAA;EACAE,YAAA;EACAT,MAAA;EAEAI;AACF","ignoreList":[]}
1
+ {"version":3,"file":"initContextState.js","names":["submit","undefined","getSiblingData","dispatchFields","validateForm","createFormData","setModified","setProcessing","setBackgroundProcessing","setSubmitted","reset","initContextState","addFieldRow","buildRowErrors","disabled","fields","formRef","getData","getDataByPath","getField","getFields","initializing","isValid","moveFieldRow","removeFieldRow","replaceFieldRow","replaceState","setDisabled","setIsValid"],"sources":["../../../src/forms/Form/initContextState.ts"],"sourcesContent":["'use client'\nimport type { Data, FormField, FormState } from 'payload'\n\nimport type {\n Context,\n CreateFormData,\n DispatchFields,\n GetSiblingData,\n Reset,\n SetModified,\n SetProcessing,\n SetSubmitted,\n Submit,\n ValidateForm,\n} from './types.js'\n\nconst submit: Submit = () => undefined\nconst getSiblingData: GetSiblingData = () => undefined\nconst dispatchFields: DispatchFields = () => undefined\nconst validateForm: ValidateForm = () => undefined\nconst createFormData: CreateFormData = () => undefined\n\nconst setModified: SetModified = () => undefined\nconst setProcessing: SetProcessing = () => undefined\nconst setBackgroundProcessing: SetProcessing = () => undefined\nconst setSubmitted: SetSubmitted = () => undefined\nconst reset: Reset = () => undefined\n\nexport const initContextState: Context = {\n addFieldRow: () => undefined,\n buildRowErrors: () => undefined,\n createFormData,\n disabled: false,\n dispatchFields,\n fields: {},\n formRef: null,\n getData: (): Data => undefined,\n getDataByPath: () => undefined,\n getField: (): FormField => undefined,\n getFields: (): FormState => ({}),\n getSiblingData,\n initializing: undefined,\n isValid: true,\n moveFieldRow: () => undefined,\n removeFieldRow: () => undefined,\n replaceFieldRow: () => undefined,\n replaceState: () => undefined,\n reset,\n setBackgroundProcessing,\n setDisabled: () => undefined,\n setIsValid: () => undefined,\n setModified,\n setProcessing,\n setSubmitted,\n submit,\n\n validateForm,\n}\n"],"mappings":"AAAA;;AAgBA,MAAMA,MAAA,GAAiBA,CAAA,KAAMC,SAAA;AAC7B,MAAMC,cAAA,GAAiCA,CAAA,KAAMD,SAAA;AAC7C,MAAME,cAAA,GAAiCA,CAAA,KAAMF,SAAA;AAC7C,MAAMG,YAAA,GAA6BA,CAAA,KAAMH,SAAA;AACzC,MAAMI,cAAA,GAAiCA,CAAA,KAAMJ,SAAA;AAE7C,MAAMK,WAAA,GAA2BA,CAAA,KAAML,SAAA;AACvC,MAAMM,aAAA,GAA+BA,CAAA,KAAMN,SAAA;AAC3C,MAAMO,uBAAA,GAAyCA,CAAA,KAAMP,SAAA;AACrD,MAAMQ,YAAA,GAA6BA,CAAA,KAAMR,SAAA;AACzC,MAAMS,KAAA,GAAeA,CAAA,KAAMT,SAAA;AAE3B,OAAO,MAAMU,gBAAA,GAA4B;EACvCC,WAAA,EAAaA,CAAA,KAAMX,SAAA;EACnBY,cAAA,EAAgBA,CAAA,KAAMZ,SAAA;EACtBI,cAAA;EACAS,QAAA,EAAU;EACVX,cAAA;EACAY,MAAA,EAAQ,CAAC;EACTC,OAAA,EAAS;EACTC,OAAA,EAASA,CAAA,KAAYhB,SAAA;EACrBiB,aAAA,EAAeA,CAAA,KAAMjB,SAAA;EACrBkB,QAAA,EAAUA,CAAA,KAAiBlB,SAAA;EAC3BmB,SAAA,EAAWA,CAAA,MAAkB,CAAC;EAC9BlB,cAAA;EACAmB,YAAA,EAAcpB,SAAA;EACdqB,OAAA,EAAS;EACTC,YAAA,EAAcA,CAAA,KAAMtB,SAAA;EACpBuB,cAAA,EAAgBA,CAAA,KAAMvB,SAAA;EACtBwB,eAAA,EAAiBA,CAAA,KAAMxB,SAAA;EACvByB,YAAA,EAAcA,CAAA,KAAMzB,SAAA;EACpBS,KAAA;EACAF,uBAAA;EACAmB,WAAA,EAAaA,CAAA,KAAM1B,SAAA;EACnB2B,UAAA,EAAYA,CAAA,KAAM3B,SAAA;EAClBK,WAAA;EACAC,aAAA;EACAE,YAAA;EACAT,MAAA;EAEAI;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"mergeServerFormState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/mergeServerFormState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAA;AAIxC,KAAK,IAAI,GAAG;IACV,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,SAAS,CAAA;IACxB,aAAa,EAAE,SAAS,CAAA;CACzB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,oDAI9B,IAAI,KAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CA+FhD,CAAA"}
1
+ {"version":3,"file":"mergeServerFormState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/mergeServerFormState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAA;AAIxC,KAAK,IAAI,GAAG;IACV,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,SAAS,CAAA;IACxB,aAAa,EAAE,SAAS,CAAA;CACzB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,oDAI9B,IAAI,KAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAuHhD,CAAA"}
@@ -50,18 +50,36 @@ export const mergeServerFormState = ({
50
50
  /**
51
51
  * Handle adding all the remaining props that should be updated in the local form state from the server form state
52
52
  */
53
- serverPropsToAccept.forEach(prop => {
54
- if (!dequal(incomingState[path]?.[prop], newFieldState[prop])) {
53
+ serverPropsToAccept.forEach(propFromServer => {
54
+ if (!dequal(incomingState[path]?.[propFromServer], newFieldState[propFromServer])) {
55
55
  changed = true;
56
56
  fieldChanged = true;
57
- if (!(prop in incomingState[path])) {
57
+ // The `ignoreServerProps` obj is used to prevent the various properties from being overridden across form state requests.
58
+ // This can happen when queueing a form state request with `requiresRender: true` while the another is already processing.
59
+ // For example:
60
+ // 1. One "add row" action will set `requiresRender: true` and dispatch a form state request
61
+ // 2. Another "add row" action will set `requiresRender: true` and queue a form state request
62
+ // 3. The first request will return with `requiresRender: false`
63
+ // 4. The second request will be dispatched with `requiresRender: false` but should be `true`
64
+ // To fix this, only merge the `requiresRender` property if the previous state has not set it to `true`.
65
+ // See the `fieldReducer` function for where this gets set.
66
+ if (newFieldState?.ignoreServerProps?.[propFromServer]) {
67
+ // Remove the ignored prop for the next request
68
+ delete newFieldState.ignoreServerProps[propFromServer];
69
+ // if no keys left, remove the entire object
70
+ if (Object.keys(newFieldState.ignoreServerProps).length === 0) {
71
+ delete newFieldState.ignoreServerProps;
72
+ }
73
+ return;
74
+ }
75
+ if (!(propFromServer in incomingState[path])) {
58
76
  // Regarding excluding the customComponents prop from being deleted: the incoming state might not have been rendered, as rendering components for every form onchange is expensive.
59
77
  // Thus, we simply re-use the initial render state
60
- if (prop !== 'customComponents') {
61
- delete newFieldState[prop];
78
+ if (propFromServer !== 'customComponents') {
79
+ delete newFieldState[propFromServer];
62
80
  }
63
81
  } else {
64
- newFieldState[prop] = incomingState[path][prop];
82
+ newFieldState[propFromServer] = incomingState[path][propFromServer];
65
83
  }
66
84
  }
67
85
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mergeServerFormState.js","names":["dequal","mergeErrorPaths","mergeServerFormState","acceptValues","existingState","incomingState","changed","newState","serverPropsToAccept","push","path","newFieldState","Object","entries","fieldChanged","errorPathsResult","errorPaths","result","filterOptions","forEach","prop","valid","passesCondition","field"],"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["'use client'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { type FormState } from 'payload'\n\nimport { mergeErrorPaths } from './mergeErrorPaths.js'\n\ntype Args = {\n acceptValues?: boolean\n existingState: FormState\n incomingState: FormState\n}\n\n/**\n * Merges certain properties from the server state into the client state. These do not include values,\n * as we do not want to update them on the client like that, which would cause flickering.\n *\n * We want to use this to update the error state, and other properties that are not user input, as the error state\n * is the thing we want to keep in sync with the server (where it's calculated) on the client.\n */\nexport const mergeServerFormState = ({\n acceptValues,\n existingState,\n incomingState,\n}: Args): { changed: boolean; newState: FormState } => {\n let changed = false\n\n const newState = {}\n\n if (existingState) {\n const serverPropsToAccept = [\n 'passesCondition',\n 'valid',\n 'errorMessage',\n 'errorPaths',\n 'rows',\n 'customComponents',\n 'requiresRender',\n ]\n\n if (acceptValues) {\n serverPropsToAccept.push('value')\n serverPropsToAccept.push('initialValue')\n }\n\n for (const [path, newFieldState] of Object.entries(existingState)) {\n if (!incomingState[path]) {\n continue\n }\n let fieldChanged = false\n\n /**\n * Handle error paths\n */\n const errorPathsResult = mergeErrorPaths(\n newFieldState.errorPaths,\n incomingState[path].errorPaths as unknown as string[],\n )\n if (errorPathsResult.result) {\n if (errorPathsResult.changed) {\n changed = errorPathsResult.changed\n }\n newFieldState.errorPaths = errorPathsResult.result\n }\n\n /**\n * Handle filterOptions\n */\n if (incomingState[path]?.filterOptions || newFieldState.filterOptions) {\n if (!dequal(incomingState[path]?.filterOptions, newFieldState.filterOptions)) {\n changed = true\n fieldChanged = true\n newFieldState.filterOptions = incomingState[path].filterOptions\n }\n }\n\n /**\n * Handle adding all the remaining props that should be updated in the local form state from the server form state\n */\n serverPropsToAccept.forEach((prop) => {\n if (!dequal(incomingState[path]?.[prop], newFieldState[prop])) {\n changed = true\n fieldChanged = true\n if (!(prop in incomingState[path])) {\n // Regarding excluding the customComponents prop from being deleted: the incoming state might not have been rendered, as rendering components for every form onchange is expensive.\n // Thus, we simply re-use the initial render state\n if (prop !== 'customComponents') {\n delete newFieldState[prop]\n }\n } else {\n newFieldState[prop] = incomingState[path][prop]\n }\n }\n })\n\n if (newFieldState.valid !== false) {\n newFieldState.valid = true\n }\n if (newFieldState.passesCondition !== false) {\n newFieldState.passesCondition = true\n }\n\n // Conditions don't work if we don't memcopy the new state, as the object references would otherwise be the same\n newState[path] = fieldChanged ? { ...newFieldState } : newFieldState\n }\n\n // Now loop over values that are part of incoming state but not part of existing state, and add them to the new state.\n // This can happen if a new array row was added. In our local state, we simply add out stubbed `array` and `array.[index].id` entries to the local form state.\n // However, all other array sub-fields are not added to the local state - those will be added by the server and may be incoming here.\n\n for (const [path, field] of Object.entries(incomingState)) {\n if (!existingState[path]) {\n changed = true\n newState[path] = field\n }\n }\n }\n\n return { changed, newState }\n}\n"],"mappings":"AAAA;;AACA,SAASA,MAAM,QAAQ,cAAa,CAAC;AAGrC,SAASC,eAAe,QAAQ;AAQhC;;;;;;;AAOA,OAAO,MAAMC,oBAAA,GAAuBA,CAAC;EACnCC,YAAY;EACZC,aAAa;EACbC;AAAa,CACR;EACL,IAAIC,OAAA,GAAU;EAEd,MAAMC,QAAA,GAAW,CAAC;EAElB,IAAIH,aAAA,EAAe;IACjB,MAAMI,mBAAA,GAAsB,CAC1B,mBACA,SACA,gBACA,cACA,QACA,oBACA,iBACD;IAED,IAAIL,YAAA,EAAc;MAChBK,mBAAA,CAAoBC,IAAI,CAAC;MACzBD,mBAAA,CAAoBC,IAAI,CAAC;IAC3B;IAEA,KAAK,MAAM,CAACC,IAAA,EAAMC,aAAA,CAAc,IAAIC,MAAA,CAAOC,OAAO,CAACT,aAAA,GAAgB;MACjE,IAAI,CAACC,aAAa,CAACK,IAAA,CAAK,EAAE;QACxB;MACF;MACA,IAAII,YAAA,GAAe;MAEnB;;;MAGA,MAAMC,gBAAA,GAAmBd,eAAA,CACvBU,aAAA,CAAcK,UAAU,EACxBX,aAAa,CAACK,IAAA,CAAK,CAACM,UAAU;MAEhC,IAAID,gBAAA,CAAiBE,MAAM,EAAE;QAC3B,IAAIF,gBAAA,CAAiBT,OAAO,EAAE;UAC5BA,OAAA,GAAUS,gBAAA,CAAiBT,OAAO;QACpC;QACAK,aAAA,CAAcK,UAAU,GAAGD,gBAAA,CAAiBE,MAAM;MACpD;MAEA;;;MAGA,IAAIZ,aAAa,CAACK,IAAA,CAAK,EAAEQ,aAAA,IAAiBP,aAAA,CAAcO,aAAa,EAAE;QACrE,IAAI,CAAClB,MAAA,CAAOK,aAAa,CAACK,IAAA,CAAK,EAAEQ,aAAA,EAAeP,aAAA,CAAcO,aAAa,GAAG;UAC5EZ,OAAA,GAAU;UACVQ,YAAA,GAAe;UACfH,aAAA,CAAcO,aAAa,GAAGb,aAAa,CAACK,IAAA,CAAK,CAACQ,aAAa;QACjE;MACF;MAEA;;;MAGAV,mBAAA,CAAoBW,OAAO,CAAEC,IAAA;QAC3B,IAAI,CAACpB,MAAA,CAAOK,aAAa,CAACK,IAAA,CAAK,GAAGU,IAAA,CAAK,EAAET,aAAa,CAACS,IAAA,CAAK,GAAG;UAC7Dd,OAAA,GAAU;UACVQ,YAAA,GAAe;UACf,IAAI,EAAEM,IAAA,IAAQf,aAAa,CAACK,IAAA,CAAK,CAAD,EAAI;YAClC;YACA;YACA,IAAIU,IAAA,KAAS,oBAAoB;cAC/B,OAAOT,aAAa,CAACS,IAAA,CAAK;YAC5B;UACF,OAAO;YACLT,aAAa,CAACS,IAAA,CAAK,GAAGf,aAAa,CAACK,IAAA,CAAK,CAACU,IAAA,CAAK;UACjD;QACF;MACF;MAEA,IAAIT,aAAA,CAAcU,KAAK,KAAK,OAAO;QACjCV,aAAA,CAAcU,KAAK,GAAG;MACxB;MACA,IAAIV,aAAA,CAAcW,eAAe,KAAK,OAAO;QAC3CX,aAAA,CAAcW,eAAe,GAAG;MAClC;MAEA;MACAf,QAAQ,CAACG,IAAA,CAAK,GAAGI,YAAA,GAAe;QAAE,GAAGH;MAAc,IAAIA,aAAA;IACzD;IAEA;IACA;IACA;IAEA,KAAK,MAAM,CAACD,IAAA,EAAMa,KAAA,CAAM,IAAIX,MAAA,CAAOC,OAAO,CAACR,aAAA,GAAgB;MACzD,IAAI,CAACD,aAAa,CAACM,IAAA,CAAK,EAAE;QACxBJ,OAAA,GAAU;QACVC,QAAQ,CAACG,IAAA,CAAK,GAAGa,KAAA;MACnB;IACF;EACF;EAEA,OAAO;IAAEjB,OAAA;IAASC;EAAS;AAC7B","ignoreList":[]}
1
+ {"version":3,"file":"mergeServerFormState.js","names":["dequal","mergeErrorPaths","mergeServerFormState","acceptValues","existingState","incomingState","changed","newState","serverPropsToAccept","push","path","newFieldState","Object","entries","fieldChanged","errorPathsResult","errorPaths","result","filterOptions","forEach","propFromServer","ignoreServerProps","keys","length","valid","passesCondition","field"],"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["'use client'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { type FormState } from 'payload'\n\nimport { mergeErrorPaths } from './mergeErrorPaths.js'\n\ntype Args = {\n acceptValues?: boolean\n existingState: FormState\n incomingState: FormState\n}\n\n/**\n * Merges certain properties from the server state into the client state. These do not include values,\n * as we do not want to update them on the client like that, which would cause flickering.\n *\n * We want to use this to update the error state, and other properties that are not user input, as the error state\n * is the thing we want to keep in sync with the server (where it's calculated) on the client.\n */\nexport const mergeServerFormState = ({\n acceptValues,\n existingState,\n incomingState,\n}: Args): { changed: boolean; newState: FormState } => {\n let changed = false\n\n const newState = {}\n\n if (existingState) {\n const serverPropsToAccept = [\n 'passesCondition',\n 'valid',\n 'errorMessage',\n 'errorPaths',\n 'rows',\n 'customComponents',\n 'requiresRender',\n ]\n\n if (acceptValues) {\n serverPropsToAccept.push('value')\n serverPropsToAccept.push('initialValue')\n }\n\n for (const [path, newFieldState] of Object.entries(existingState)) {\n if (!incomingState[path]) {\n continue\n }\n\n let fieldChanged = false\n\n /**\n * Handle error paths\n */\n const errorPathsResult = mergeErrorPaths(\n newFieldState.errorPaths,\n incomingState[path].errorPaths as unknown as string[],\n )\n\n if (errorPathsResult.result) {\n if (errorPathsResult.changed) {\n changed = errorPathsResult.changed\n }\n newFieldState.errorPaths = errorPathsResult.result\n }\n\n /**\n * Handle filterOptions\n */\n if (incomingState[path]?.filterOptions || newFieldState.filterOptions) {\n if (!dequal(incomingState[path]?.filterOptions, newFieldState.filterOptions)) {\n changed = true\n fieldChanged = true\n newFieldState.filterOptions = incomingState[path].filterOptions\n }\n }\n\n /**\n * Handle adding all the remaining props that should be updated in the local form state from the server form state\n */\n serverPropsToAccept.forEach((propFromServer) => {\n if (!dequal(incomingState[path]?.[propFromServer], newFieldState[propFromServer])) {\n changed = true\n fieldChanged = true\n\n // The `ignoreServerProps` obj is used to prevent the various properties from being overridden across form state requests.\n // This can happen when queueing a form state request with `requiresRender: true` while the another is already processing.\n // For example:\n // 1. One \"add row\" action will set `requiresRender: true` and dispatch a form state request\n // 2. Another \"add row\" action will set `requiresRender: true` and queue a form state request\n // 3. The first request will return with `requiresRender: false`\n // 4. The second request will be dispatched with `requiresRender: false` but should be `true`\n // To fix this, only merge the `requiresRender` property if the previous state has not set it to `true`.\n // See the `fieldReducer` function for where this gets set.\n if (newFieldState?.ignoreServerProps?.[propFromServer]) {\n // Remove the ignored prop for the next request\n delete newFieldState.ignoreServerProps[propFromServer]\n\n // if no keys left, remove the entire object\n if (Object.keys(newFieldState.ignoreServerProps).length === 0) {\n delete newFieldState.ignoreServerProps\n }\n\n return\n }\n\n if (!(propFromServer in incomingState[path])) {\n // Regarding excluding the customComponents prop from being deleted: the incoming state might not have been rendered, as rendering components for every form onchange is expensive.\n // Thus, we simply re-use the initial render state\n if (propFromServer !== 'customComponents') {\n delete newFieldState[propFromServer]\n }\n } else {\n newFieldState[propFromServer] = incomingState[path][propFromServer]\n }\n }\n })\n\n if (newFieldState.valid !== false) {\n newFieldState.valid = true\n }\n\n if (newFieldState.passesCondition !== false) {\n newFieldState.passesCondition = true\n }\n\n // Conditions don't work if we don't memcopy the new state, as the object references would otherwise be the same\n newState[path] = fieldChanged ? { ...newFieldState } : newFieldState\n }\n\n // Now loop over values that are part of incoming state but not part of existing state, and add them to the new state.\n // This can happen if a new array row was added. In our local state, we simply add out stubbed `array` and `array.[index].id` entries to the local form state.\n // However, all other array sub-fields are not added to the local state - those will be added by the server and may be incoming here.\n for (const [path, field] of Object.entries(incomingState)) {\n if (!existingState[path]) {\n changed = true\n newState[path] = field\n }\n }\n }\n\n return { changed, newState }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -183,6 +183,11 @@ export type Context = {
183
183
  * For example the state could be submitted but invalid as field errors have been returned.
184
184
  */
185
185
  isValid: boolean;
186
+ moveFieldRow: ({ moveFromIndex, moveToIndex, path, }: {
187
+ moveFromIndex: number;
188
+ moveToIndex: number;
189
+ path: string;
190
+ }) => void;
186
191
  removeFieldRow: ({ path, rowIndex }: {
187
192
  path: string;
188
193
  rowIndex: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/types.ts"],"names":[],"mappings":"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"}