@payloadcms/ui 3.14.0 → 3.14.1-canary.336ae4e
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.
- package/dist/elements/Gutter/index.js +0 -1
- package/dist/elements/Gutter/index.js.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.js +3 -2
- package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
- package/dist/exports/client/{DatePicker-IHDOZXIJ.js → DatePicker-KBQ2BMRY.js} +2 -2
- package/dist/exports/client/chunk-KVIFHJCL.js +29 -0
- package/dist/exports/client/{chunk-JPWZT3ZI.js.map → chunk-KVIFHJCL.js.map} +4 -4
- package/dist/exports/client/index.js +10 -10
- package/dist/exports/client/index.js.map +3 -3
- package/dist/fields/Text/index.d.ts +1 -1
- package/dist/fields/Text/index.d.ts.map +1 -1
- package/dist/fields/Text/index.js +1 -1
- package/dist/fields/Text/index.js.map +1 -1
- package/dist/fields/Textarea/index.d.ts.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +9 -2
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/mergeServerFormState.d.ts +7 -1
- package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
- package/dist/forms/Form/mergeServerFormState.js +9 -2
- package/dist/forms/Form/mergeServerFormState.js.map +1 -1
- package/dist/forms/useField/index.d.ts.map +1 -1
- package/dist/forms/useField/index.js +8 -9
- package/dist/forms/useField/index.js.map +1 -1
- package/dist/utilities/copyDataFromLocale.d.ts.map +1 -1
- package/dist/utilities/copyDataFromLocale.js +14 -4
- package/dist/utilities/copyDataFromLocale.js.map +1 -1
- package/dist/views/Edit/index.js +1 -1
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/List/index.js +1 -1
- package/dist/views/List/index.js.map +1 -1
- package/package.json +5 -5
- package/dist/exports/client/chunk-JPWZT3ZI.js +0 -29
- /package/dist/exports/client/{DatePicker-IHDOZXIJ.js.map → DatePicker-KBQ2BMRY.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { TextInputProps } from './types.js';
|
|
3
|
-
import './index.scss';
|
|
4
3
|
import { TextInput } from './Input.js';
|
|
4
|
+
import './index.scss';
|
|
5
5
|
export { TextInput, TextInputProps };
|
|
6
6
|
export declare const TextField: React.FC<{
|
|
7
7
|
readonly inputRef?: React.RefObject<HTMLInputElement>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Text/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAGxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAQhD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Text/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAGxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAQhD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,cAAc,CAAA;AAErB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAA;AAoIpC,eAAO,MAAM,SAAS;wBAlIc,MAAO,SAAS;yBAG3C,MACH,oBAAiB;;;;;+EA8HmC,CAAA"}
|
|
@@ -8,8 +8,8 @@ import { useConfig } from '../../providers/Config/index.js';
|
|
|
8
8
|
import { useLocale } from '../../providers/Locale/index.js';
|
|
9
9
|
import { mergeFieldStyles } from '../mergeFieldStyles.js';
|
|
10
10
|
import { isFieldRTL } from '../shared/index.js';
|
|
11
|
-
import './index.scss';
|
|
12
11
|
import { TextInput } from './Input.js';
|
|
12
|
+
import './index.scss';
|
|
13
13
|
export { TextInput };
|
|
14
14
|
const TextFieldComponent = props => {
|
|
15
15
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","useCallback","useEffect","useMemo","useState","useField","withCondition","useConfig","useLocale","mergeFieldStyles","isFieldRTL","TextInput","TextFieldComponent","props","field","admin","className","description","placeholder","rtl","hasMany","label","localized","maxLength","maxRows","minLength","minRows","required","inputRef","path","readOnly","validate","locale","config","localization","localizationConfig","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","setValue","showError","renderRTL","fieldLocalized","fieldRTL","undefined","valueToRender","setValueToRender","handleHasManyChange","selectedOption","newValue","Array","isArray","map","option","val","index","id","toString","styles","_jsx","onChange","e","target","style","TextField"],"sources":["../../../src/fields/Text/index.tsx"],"sourcesContent":["'use client'\nimport type { TextFieldClientComponent } from 'payload'\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { Option } from '../../elements/ReactSelect/types.js'\nimport type { TextInputProps } from './types.js'\n\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport { isFieldRTL } from '../shared/index.js'\nimport
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","useCallback","useEffect","useMemo","useState","useField","withCondition","useConfig","useLocale","mergeFieldStyles","isFieldRTL","TextInput","TextFieldComponent","props","field","admin","className","description","placeholder","rtl","hasMany","label","localized","maxLength","maxRows","minLength","minRows","required","inputRef","path","readOnly","validate","locale","config","localization","localizationConfig","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","setValue","showError","renderRTL","fieldLocalized","fieldRTL","undefined","valueToRender","setValueToRender","handleHasManyChange","selectedOption","newValue","Array","isArray","map","option","val","index","id","toString","styles","_jsx","onChange","e","target","style","TextField"],"sources":["../../../src/fields/Text/index.tsx"],"sourcesContent":["'use client'\nimport type { TextFieldClientComponent } from 'payload'\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { Option } from '../../elements/ReactSelect/types.js'\nimport type { TextInputProps } from './types.js'\n\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport { isFieldRTL } from '../shared/index.js'\nimport { TextInput } from './Input.js'\nimport './index.scss'\n\nexport { TextInput, TextInputProps }\n\nconst TextFieldComponent: TextFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: { className, description, placeholder, rtl } = {},\n hasMany,\n label,\n localized,\n maxLength,\n maxRows,\n minLength,\n minRows,\n required,\n },\n inputRef,\n path,\n readOnly,\n validate,\n } = props\n\n const locale = useLocale()\n\n const {\n config: { localization: localizationConfig },\n } = useConfig()\n\n const memoizedValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, maxLength, minLength, required })\n }\n },\n [validate, minLength, maxLength, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n setValue,\n showError,\n value,\n } = useField({\n path,\n validate: memoizedValidate,\n })\n\n const renderRTL = isFieldRTL({\n fieldLocalized: localized,\n fieldRTL: rtl,\n locale,\n localizationConfig: localizationConfig || undefined,\n })\n\n const [valueToRender, setValueToRender] = useState<\n { id: string; label: string; value: { value: number } }[]\n >([]) // Only for hasMany\n\n const handleHasManyChange = useCallback(\n (selectedOption) => {\n if (!readOnly) {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => option.value?.value || option.value)\n } else {\n newValue = [selectedOption.value?.value || selectedOption.value]\n }\n\n setValue(newValue)\n }\n },\n [readOnly, setValue],\n )\n\n // useEffect update valueToRender:\n useEffect(() => {\n if (hasMany && Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n // React-select automatically uses \"label-value\" as a key, so we will get that react duplicate key warning if we just pass in the value as multiple values can be the same. So we need to append the index to the toString() of the value to avoid that warning, as it uses that as the key.\n toString: () => `${val}${index}`,\n value: val?.value || val,\n },\n }\n }),\n )\n }\n }, [value, hasMany])\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n return (\n <TextInput\n AfterInput={AfterInput}\n BeforeInput={BeforeInput}\n className={className}\n Description={Description}\n description={description}\n Error={Error}\n hasMany={hasMany}\n inputRef={inputRef}\n Label={Label}\n label={label}\n localized={localized}\n maxRows={maxRows}\n minRows={minRows}\n onChange={\n hasMany\n ? handleHasManyChange\n : (e) => {\n setValue(e.target.value)\n }\n }\n path={path}\n placeholder={placeholder}\n readOnly={readOnly}\n required={required}\n rtl={renderRTL}\n showError={showError}\n style={styles}\n value={(value as string) || ''}\n valueToRender={valueToRender as Option[]}\n />\n )\n}\n\nexport const TextField = withCondition(TextFieldComponent)\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Textarea/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgC,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAGpF,OAAO,KAA+B,MAAM,OAAO,CAAA;AAEnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAQpD,OAAO,cAAc,CAAA;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAA;AAiF5C,eAAO,MAAM,aAAa;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Textarea/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgC,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAGpF,OAAO,KAA+B,MAAM,OAAO,CAAA;AAEnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAQpD,OAAO,cAAc,CAAA;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAA;AAiF5C,eAAO,MAAM,aAAa;wBAjFN,MAAO,GAAG;yBAEF,MAAO,oBAAoB;;;;;+EA+EW,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAGV,SAAS,EAGV,MAAM,YAAY,CAAA;AA6BnB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAGV,SAAS,EAGV,MAAM,YAAY,CAAA;AA6BnB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA4qBpC,CAAA;AAED,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
package/dist/forms/Form/index.js
CHANGED
|
@@ -274,7 +274,11 @@ export const Form = props => {
|
|
|
274
274
|
if (newFormState) {
|
|
275
275
|
const {
|
|
276
276
|
newState: mergedFormState
|
|
277
|
-
} = mergeServerFormState(
|
|
277
|
+
} = mergeServerFormState({
|
|
278
|
+
acceptValues: true,
|
|
279
|
+
existingState: contextRef.current.fields || {},
|
|
280
|
+
incomingState: newFormState
|
|
281
|
+
});
|
|
278
282
|
dispatchFields({
|
|
279
283
|
type: 'REPLACE_STATE',
|
|
280
284
|
optimize: false,
|
|
@@ -540,7 +544,10 @@ export const Form = props => {
|
|
|
540
544
|
const {
|
|
541
545
|
changed,
|
|
542
546
|
newState: newState_0
|
|
543
|
-
} = mergeServerFormState(
|
|
547
|
+
} = mergeServerFormState({
|
|
548
|
+
existingState: contextRef.current.fields || {},
|
|
549
|
+
incomingState: revalidatedFormState_0
|
|
550
|
+
});
|
|
544
551
|
if (changed) {
|
|
545
552
|
dispatchFields({
|
|
546
553
|
type: 'REPLACE_STATE',
|
|
@@ -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","useIgnoredEffectDebounced","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useLocale","useOperation","useServerFunctions","useTranslation","abortAndIgnore","handleAbortRef","requests","FormContext","FormFieldsContext","FormWatchContext","InitializingContext","ModifiedContext","ProcessingContext","SubmittedContext","errorMessages","fieldReducer","initContextState","mergeServerFormState","baseClass","Form","props","id","collectionSlug","docPermissions","getDocPreferences","globalSlug","action","beforeSubmit","children","className","disabled","disabledFromProps","disableSuccessStatus","disableValidationOnSubmit","handleResponse","initialState","isInitializing","initializingFromProps","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","code","locale","i18n","t","refreshCookie","user","operation","getFormState","config","setDisabled","isMounted","setIsMounted","modified","setModified","initializing","setInitializing","processing","setProcessing","setSubmitted","formRef","contextRef","abortResetFormRef","fieldsReducer","fields","dispatchFields","current","validateForm","validatedFieldState","isValid","dataFromContext","getData","data","validationPromises","Object","entries","map","path","field","validatedField","passesCondition","validationResult","valid","validate","valueToValidate","value","rows","Array","isArray","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","optimize","push","message","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","statusText","console","getFields","getField","file","dataToSerialize","_payload","JSON","stringify","indices","nullsAsUndefineds","reset","controller","docPreferences","renderAllFields","schemaPath","signal","replaceState","addFieldRow","blockType","rowIndex","rowIndexArg","subFieldState","newRows","length","removeFieldRow","replaceFieldRow","currentRows","abortOnChange","classes","filter","join","executeOnChange","onChangeFn","changed","delay","_jsx","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 { useIgnoredEffectDebounced } from '../../hooks/useIgnoredEffect.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 { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { requests } from '../../utilities/api.js'\nimport {\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\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 handleResponse,\n initialState, // fully formed initial field state\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 { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n\n const { getFormState } = useServerFunctions()\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 const [initializing, setInitializing] = useState(initializingFromProps)\n const [processing, setProcessing] = useState(false)\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\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\n\n /**\n * `fields` is the current, up-to-date state/data of all fields in the form. It can be modified by using dispatchFields,\n * which calls the fieldReducer, which then updates the state.\n */\n const [fields, dispatchFields] = fieldsReducer\n\n contextRef.current.fields = fields\n\n const validateForm = useCallback(async () => {\n const validatedFieldState = {}\n let isValid = true\n\n const dataFromContext = contextRef.current.getData()\n const data = dataFromContext\n\n const validationPromises = Object.entries(contextRef.current.fields).map(\n async ([path, field]) => {\n const validatedField = field\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 data,\n operation,\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 return isValid\n }, [collectionSlug, config, dispatchFields, id, operation, t, user])\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 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(([, field]) => field.valid)\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 // 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 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 = 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 contextRef.current.fields || {},\n 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 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\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 dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n errorToast(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 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>((overrides, { mergeOverrideData = true }) => {\n let data = reduceFieldsToValues(contextRef.current.fields, true)\n\n const 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 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\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 })\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.setSubmitted = setSubmitted\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\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({ type: 'REPLACE_STATE', optimize: false, state: initialState })\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 useIgnoredEffectDebounced(\n () => {\n const executeOnChange = 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 })\n }\n\n if (!revalidatedFormState) {\n return\n }\n\n const { changed, newState } = mergeServerFormState(\n contextRef.current.fields || {},\n revalidatedFormState,\n )\n\n if (changed) {\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n state: newState,\n })\n }\n }\n }\n\n if (modified) {\n void executeOnChange()\n }\n },\n /*\n Make sure we trigger this whenever modified changes (not just when `fields` changes),\n otherwise we will miss merging server form state for the first form update/onChange.\n\n Here's why:\n `fields` updates before `modified`, because setModified is in a setTimeout.\n So on the first change, modified is false, so we don't trigger the effect even though we should.\n **/\n [contextRef.current.fields, modified],\n [dispatchFields, onChange],\n {\n delay: 250,\n },\n )\n\n return (\n <form\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 <FormContext.Provider value={contextRef.current}>\n <FormWatchContext.Provider\n value={{\n fields,\n ...contextRef.current,\n }}\n >\n <SubmittedContext.Provider value={submitted}>\n <InitializingContext.Provider value={!isMounted || (isMounted && initializing)}>\n <ProcessingContext.Provider value={processing}>\n <ModifiedContext.Provider value={modified}>\n <FormFieldsContext.Provider value={fieldsReducer}>\n {children}\n </FormFieldsContext.Provider>\n </ModifiedContext.Provider>\n </ProcessingContext.Provider>\n </InitializingContext.Provider>\n </SubmittedContext.Provider>\n </FormWatchContext.Provider>\n </FormContext.Provider>\n </form>\n )\n}\n\nexport {\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useAllFormFields,\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","useIgnoredEffectDebounced","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useLocale","useOperation","useServerFunctions","useTranslation","abortAndIgnore","handleAbortRef","requests","FormContext","FormFieldsContext","FormWatchContext","InitializingContext","ModifiedContext","ProcessingContext","SubmittedContext","errorMessages","fieldReducer","initContextState","mergeServerFormState","baseClass","Form","props","id","collectionSlug","docPermissions","getDocPreferences","globalSlug","action","beforeSubmit","children","className","disabled","disabledFromProps","disableSuccessStatus","disableValidationOnSubmit","handleResponse","initialState","isInitializing","initializingFromProps","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","code","locale","i18n","t","refreshCookie","user","operation","getFormState","config","setDisabled","isMounted","setIsMounted","modified","setModified","initializing","setInitializing","processing","setProcessing","setSubmitted","formRef","contextRef","abortResetFormRef","fieldsReducer","fields","dispatchFields","current","validateForm","validatedFieldState","isValid","dataFromContext","getData","data","validationPromises","Object","entries","map","path","field","validatedField","passesCondition","validationResult","valid","validate","valueToValidate","value","rows","Array","isArray","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","statusText","console","getFields","getField","file","dataToSerialize","_payload","JSON","stringify","indices","nullsAsUndefineds","reset","controller","docPreferences","renderAllFields","schemaPath","signal","replaceState","addFieldRow","blockType","rowIndex","rowIndexArg","subFieldState","newRows","length","removeFieldRow","replaceFieldRow","currentRows","abortOnChange","classes","filter","join","executeOnChange","onChangeFn","changed","delay","_jsx","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 { useIgnoredEffectDebounced } from '../../hooks/useIgnoredEffect.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 { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { requests } from '../../utilities/api.js'\nimport {\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\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 handleResponse,\n initialState, // fully formed initial field state\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 { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n\n const { getFormState } = useServerFunctions()\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 const [initializing, setInitializing] = useState(initializingFromProps)\n const [processing, setProcessing] = useState(false)\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\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\n\n /**\n * `fields` is the current, up-to-date state/data of all fields in the form. It can be modified by using dispatchFields,\n * which calls the fieldReducer, which then updates the state.\n */\n const [fields, dispatchFields] = fieldsReducer\n\n contextRef.current.fields = fields\n\n const validateForm = useCallback(async () => {\n const validatedFieldState = {}\n let isValid = true\n\n const dataFromContext = contextRef.current.getData()\n const data = dataFromContext\n\n const validationPromises = Object.entries(contextRef.current.fields).map(\n async ([path, field]) => {\n const validatedField = field\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 data,\n operation,\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 return isValid\n }, [collectionSlug, config, dispatchFields, id, operation, t, user])\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 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(([, field]) => field.valid)\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 // 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 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 = 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 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\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 dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n errorToast(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 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>((overrides, { mergeOverrideData = true }) => {\n let data = reduceFieldsToValues(contextRef.current.fields, true)\n\n const 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 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\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 })\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.setSubmitted = setSubmitted\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\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({ type: 'REPLACE_STATE', optimize: false, state: initialState })\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 useIgnoredEffectDebounced(\n () => {\n const executeOnChange = 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 })\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 dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n state: newState,\n })\n }\n }\n }\n\n if (modified) {\n void executeOnChange()\n }\n },\n /*\n Make sure we trigger this whenever modified changes (not just when `fields` changes),\n otherwise we will miss merging server form state for the first form update/onChange.\n\n Here's why:\n `fields` updates before `modified`, because setModified is in a setTimeout.\n So on the first change, modified is false, so we don't trigger the effect even though we should.\n **/\n [contextRef.current.fields, modified],\n [dispatchFields, onChange],\n {\n delay: 250,\n },\n )\n\n return (\n <form\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 <FormContext.Provider value={contextRef.current}>\n <FormWatchContext.Provider\n value={{\n fields,\n ...contextRef.current,\n }}\n >\n <SubmittedContext.Provider value={submitted}>\n <InitializingContext.Provider value={!isMounted || (isMounted && initializing)}>\n <ProcessingContext.Provider value={processing}>\n <ModifiedContext.Provider value={modified}>\n <FormFieldsContext.Provider value={fieldsReducer}>\n {children}\n </FormFieldsContext.Provider>\n </ModifiedContext.Provider>\n </ProcessingContext.Provider>\n </InitializingContext.Provider>\n </SubmittedContext.Provider>\n </FormWatchContext.Provider>\n </FormContext.Provider>\n </form>\n )\n}\n\nexport {\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useAllFormFields,\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,4 +1,9 @@
|
|
|
1
1
|
import { type FormState } from 'payload';
|
|
2
|
+
type Args = {
|
|
3
|
+
acceptValues?: boolean;
|
|
4
|
+
existingState: FormState;
|
|
5
|
+
incomingState: FormState;
|
|
6
|
+
};
|
|
2
7
|
/**
|
|
3
8
|
* Merges certain properties from the server state into the client state. These do not include values,
|
|
4
9
|
* as we do not want to update them on the client like that, which would cause flickering.
|
|
@@ -6,8 +11,9 @@ import { type FormState } from 'payload';
|
|
|
6
11
|
* We want to use this to update the error state, and other properties that are not user input, as the error state
|
|
7
12
|
* is the thing we want to keep in sync with the server (where it's calculated) on the client.
|
|
8
13
|
*/
|
|
9
|
-
export declare const mergeServerFormState: (existingState
|
|
14
|
+
export declare const mergeServerFormState: ({ acceptValues, existingState, incomingState, }: Args) => {
|
|
10
15
|
changed: boolean;
|
|
11
16
|
newState: FormState;
|
|
12
17
|
};
|
|
18
|
+
export {};
|
|
13
19
|
//# sourceMappingURL=mergeServerFormState.d.ts.map
|
|
@@ -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;
|
|
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;CAmFhD,CAAA"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import { dequal } from 'dequal/lite'; // lite: no need for Map and Set support
|
|
4
4
|
import { mergeErrorPaths } from './mergeErrorPaths.js';
|
|
5
|
-
const serverPropsToAccept = ['passesCondition', 'valid', 'errorMessage', 'rows', 'customComponents', 'requiresRender'];
|
|
6
5
|
/**
|
|
7
6
|
* Merges certain properties from the server state into the client state. These do not include values,
|
|
8
7
|
* as we do not want to update them on the client like that, which would cause flickering.
|
|
@@ -10,7 +9,15 @@ const serverPropsToAccept = ['passesCondition', 'valid', 'errorMessage', 'rows',
|
|
|
10
9
|
* We want to use this to update the error state, and other properties that are not user input, as the error state
|
|
11
10
|
* is the thing we want to keep in sync with the server (where it's calculated) on the client.
|
|
12
11
|
*/
|
|
13
|
-
export const mergeServerFormState = (
|
|
12
|
+
export const mergeServerFormState = ({
|
|
13
|
+
acceptValues,
|
|
14
|
+
existingState,
|
|
15
|
+
incomingState
|
|
16
|
+
}) => {
|
|
17
|
+
const serverPropsToAccept = ['passesCondition', 'valid', 'errorMessage', 'rows', 'customComponents', 'requiresRender'];
|
|
18
|
+
if (acceptValues) {
|
|
19
|
+
serverPropsToAccept.push('value');
|
|
20
|
+
}
|
|
14
21
|
let changed = false;
|
|
15
22
|
const newState = {};
|
|
16
23
|
if (existingState) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeServerFormState.js","names":["dequal","mergeErrorPaths","
|
|
1
|
+
{"version":3,"file":"mergeServerFormState.js","names":["dequal","mergeErrorPaths","mergeServerFormState","acceptValues","existingState","incomingState","serverPropsToAccept","push","changed","newState","Object","entries","forEach","path","newFieldState","errorPathsResult","errorPaths","result","filterOptions","prop"],"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 const serverPropsToAccept = [\n 'passesCondition',\n 'valid',\n 'errorMessage',\n 'rows',\n 'customComponents',\n 'requiresRender',\n ]\n\n if (acceptValues) {\n serverPropsToAccept.push('value')\n }\n\n let changed = false\n\n const newState = {}\n\n if (existingState) {\n Object.entries(existingState).forEach(([path, newFieldState]) => {\n if (!incomingState[path]) {\n return\n }\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 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 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 // Conditions don't work if we don't memcopy the new state, as the object references would otherwise be the same\n newState[path] = { ...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, newFieldState] of Object.entries(incomingState)) {\n if (!existingState[path]) {\n changed = true\n newState[path] = newFieldState\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,MAAMC,mBAAA,GAAsB,CAC1B,mBACA,SACA,gBACA,QACA,oBACA,iBACD;EAED,IAAIH,YAAA,EAAc;IAChBG,mBAAA,CAAoBC,IAAI,CAAC;EAC3B;EAEA,IAAIC,OAAA,GAAU;EAEd,MAAMC,QAAA,GAAW,CAAC;EAElB,IAAIL,aAAA,EAAe;IACjBM,MAAA,CAAOC,OAAO,CAACP,aAAA,EAAeQ,OAAO,CAAC,CAAC,CAACC,IAAA,EAAMC,aAAA,CAAc;MAC1D,IAAI,CAACT,aAAa,CAACQ,IAAA,CAAK,EAAE;QACxB;MACF;MAEA;;;MAGA,MAAME,gBAAA,GAAmBd,eAAA,CACvBa,aAAA,CAAcE,UAAU,EACxBX,aAAa,CAACQ,IAAA,CAAK,CAACG,UAAU;MAEhC,IAAID,gBAAA,CAAiBE,MAAM,EAAE;QAC3B,IAAIF,gBAAA,CAAiBP,OAAO,EAAE;UAC5BA,OAAA,GAAUO,gBAAA,CAAiBP,OAAO;QACpC;QACAM,aAAA,CAAcE,UAAU,GAAGD,gBAAA,CAAiBE,MAAM;MACpD;MAEA;;;MAGA,IAAIZ,aAAa,CAACQ,IAAA,CAAK,EAAEK,aAAA,IAAiBJ,aAAA,CAAcI,aAAa,EAAE;QACrE,IAAI,CAAClB,MAAA,CAAOK,aAAa,CAACQ,IAAA,CAAK,EAAEK,aAAA,EAAeJ,aAAA,CAAcI,aAAa,GAAG;UAC5EV,OAAA,GAAU;UACVM,aAAA,CAAcI,aAAa,GAAGb,aAAa,CAACQ,IAAA,CAAK,CAACK,aAAa;QACjE;MACF;MAEA;;;MAGAZ,mBAAA,CAAoBM,OAAO,CAAEO,IAAA;QAC3B,IAAI,CAACnB,MAAA,CAAOK,aAAa,CAACQ,IAAA,CAAK,GAAGM,IAAA,CAAK,EAAEL,aAAa,CAACK,IAAA,CAAK,GAAG;UAC7DX,OAAA,GAAU;UACV,IAAI,EAAEW,IAAA,IAAQd,aAAa,CAACQ,IAAA,CAAK,CAAD,EAAI;YAClC;YACA;YACA,IAAIM,IAAA,KAAS,oBAAoB;cAC/B,OAAOL,aAAa,CAACK,IAAA,CAAK;YAC5B;UACF,OAAO;YACLL,aAAa,CAACK,IAAA,CAAK,GAAGd,aAAa,CAACQ,IAAA,CAAK,CAACM,IAAA,CAAK;UACjD;QACF;MACF;MAEA;MACAV,QAAQ,CAACI,IAAA,CAAK,GAAG;QAAE,GAAGC;MAAc;IACtC;IAEA;IACA;IACA;IAEA,KAAK,MAAM,CAACD,IAAA,EAAMC,aAAA,CAAc,IAAIJ,MAAA,CAAOC,OAAO,CAACN,aAAA,GAAgB;MACjE,IAAI,CAACD,aAAa,CAACS,IAAA,CAAK,EAAE;QACxBL,OAAA,GAAU;QACVC,QAAQ,CAACI,IAAA,CAAK,GAAGC,aAAA;MACnB;IACF;EACF;EAEA,OAAO;IAAEN,OAAA;IAASC;EAAS;AAC7B","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/useField/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpD,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;AAiBlC;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,WAAY,OAAO,KAAG,SAAS,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/useField/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpD,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;AAiBlC;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,WAAY,OAAO,KAAG,SAAS,CAAC,MAAM,CA8LpE,CAAA"}
|
|
@@ -34,24 +34,19 @@ export const useField = options => {
|
|
|
34
34
|
collectionSlug
|
|
35
35
|
} = useDocumentInfo();
|
|
36
36
|
const operation = useOperation();
|
|
37
|
+
const dispatchField = useFormFields(_temp);
|
|
37
38
|
let t1;
|
|
38
39
|
if ($[0] !== path) {
|
|
39
40
|
t1 = t2 => {
|
|
40
|
-
const [fields
|
|
41
|
-
return
|
|
42
|
-
dispatchField: dispatch,
|
|
43
|
-
field: fields && fields?.[path] || null
|
|
44
|
-
};
|
|
41
|
+
const [fields] = t2;
|
|
42
|
+
return fields && fields?.[path] || null;
|
|
45
43
|
};
|
|
46
44
|
$[0] = path;
|
|
47
45
|
$[1] = t1;
|
|
48
46
|
} else {
|
|
49
47
|
t1 = $[1];
|
|
50
48
|
}
|
|
51
|
-
const
|
|
52
|
-
dispatchField,
|
|
53
|
-
field
|
|
54
|
-
} = useFormFields(t1);
|
|
49
|
+
const field = useFormFields(t1);
|
|
55
50
|
const {
|
|
56
51
|
t
|
|
57
52
|
} = useTranslation();
|
|
@@ -255,4 +250,8 @@ export const useField = options => {
|
|
|
255
250
|
useThrottledEffect(t10, 150, t12);
|
|
256
251
|
return result;
|
|
257
252
|
};
|
|
253
|
+
function _temp(t0) {
|
|
254
|
+
const [, dispatch] = t0;
|
|
255
|
+
return dispatch;
|
|
256
|
+
}
|
|
258
257
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useCallback","useMemo","useRef","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useOperation","useTranslation","useForm","useFormFields","useFormInitializing","useFormModified","useFormProcessing","useFormSubmitted","useField","options","$","disableFormData","t0","hasRows","path","validate","undefined","submitted","processing","initializing","user","id","collectionSlug","operation","t1","t2","fields","dispatch","dispatchField","field","t","config","getData","getDataByPath","getSiblingData","setModified","modified","filterOptions","value","initialValue","valid","showError","prevValid","prevErrorMessage","errorMessage","e","t3","disableModifyingForm","val","target","type","setTimeout","setValue","t4","customComponents","t5","t6","errorPaths","t7","rows","t8","t9","formInitializing","formProcessing","formSubmitted","result","t10","validateField","valueToValidate","Array","isArray","current","valid_0","isValid","data","preferences","req","payload","siblingData","update","t11","t12"],"sources":["../../../src/forms/useField/index.tsx"],"sourcesContent":["'use client'\nimport type { PayloadRequest } from 'payload'\n\nimport { useCallback, useMemo, useRef } from 'react'\n\nimport type { UPDATE } from '../Form/types.js'\nimport type { FieldType, Options } from './types.js'\n\nexport type { FieldType, Options }\n\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 { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport {\n useForm,\n useFormFields,\n useFormInitializing,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n} from '../Form/context.js'\n\n/**\n * Get and set the value of a form field.\n *\n * @see https://payloadcms.com/docs/admin/hooks#usefield\n */\nexport const useField = <TValue,>(options: Options): FieldType<TValue> => {\n const { disableFormData = false, hasRows, path, validate } = options\n\n const submitted = useFormSubmitted()\n const processing = useFormProcessing()\n const initializing = useFormInitializing()\n const { user } = useAuth()\n const { id, collectionSlug } = useDocumentInfo()\n const operation = useOperation()\n\n const { dispatchField, field } = useFormFields(([fields, dispatch]) => ({\n dispatchField: dispatch,\n field: (fields && fields?.[path]) || null,\n }))\n\n const { t } = useTranslation()\n const { config } = useConfig()\n\n const { getData, getDataByPath, getSiblingData, setModified } = useForm()\n const modified = useFormModified()\n\n const filterOptions = field?.filterOptions\n const value = field?.value as TValue\n const initialValue = field?.initialValue as TValue\n const valid = typeof field?.valid === 'boolean' ? field.valid : true\n const showError = valid === false && submitted\n\n const prevValid = useRef(valid)\n const prevErrorMessage = useRef(field?.errorMessage)\n\n // Method to return from `useField`, used to\n // update field values from field component(s)\n const setValue = useCallback(\n (e, disableModifyingForm = false) => {\n const val = e && e.target ? e.target.value : e\n dispatchField({\n type: 'UPDATE',\n disableFormData: disableFormData || (hasRows && val > 0),\n path,\n value: val,\n })\n\n if (!disableModifyingForm) {\n if (typeof setModified === 'function') {\n // Only update setModified to true if the form is not already set to modified. Otherwise the following could happen:\n // 1. Text field: someone types in it in an unmodified form\n // 2. After setTimeout triggers setModified(true): form is set to modified. Save Button becomes available. Good!\n // 3. Type something in text field\n // 4. Click on save button before setTimeout in useField has finished (so setModified(true) has not been run yet)\n // 5. Form is saved, setModified(false) is set in the Form/index.tsx `submit` function, \"saved successfully\" toast appears\n // 6. setModified(true) inside the timeout is run, form is set to modified again, even though it was already saved and thus set to unmodified. Bad! This should have happened before the form is saved. Now the form should be unmodified and stay that way\n // until a NEW change happens. Due to this, the \"Leave without saving\" modal appears even though it should not when leaving the page fast immediately after saving the document.\n // This is only an issue for forms which have already been set to modified true, as that causes the save button to be enabled. If we prevent this setTimeout to be run\n // for already-modified forms first place (which is unnecessary), we can avoid this issue. As for unmodified forms, this race issue will not happen, because you cannot click the save button faster\n // than the timeout in useField is run. That's because the save button won't even be enabled for clicking until the setTimeout in useField has run.\n // This fixes e2e test flakes, as e2e tests were often so fast that they were saving the form before the timeout in useField has run.\n // Specifically, this fixes the 'should not warn about unsaved changes when navigating to lexical editor with blocks node and then leaving the page after making a change and saving' lexical e2e test.\n if (modified === false) {\n // Update modified state after field value comes back\n // to avoid cursor jump caused by state value / DOM mismatch\n setTimeout(() => {\n setModified(true)\n }, 10)\n }\n }\n }\n },\n [setModified, path, dispatchField, disableFormData, hasRows, modified],\n )\n\n // Store result from hook as ref\n // to prevent unnecessary rerenders\n const result: FieldType<TValue> = useMemo(\n () => ({\n customComponents: field?.customComponents,\n errorMessage: field?.errorMessage,\n errorPaths: field?.errorPaths || [],\n filterOptions,\n formInitializing: initializing,\n formProcessing: processing,\n formSubmitted: submitted,\n initialValue,\n path,\n rows: field?.rows,\n setValue,\n showError,\n valid: field?.valid,\n value,\n }),\n [\n field,\n processing,\n setValue,\n showError,\n submitted,\n value,\n initialValue,\n path,\n filterOptions,\n initializing,\n ],\n )\n\n // Throttle the validate function\n useThrottledEffect(\n () => {\n const validateField = async () => {\n let valueToValidate = value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = getDataByPath(path)\n }\n\n let errorMessage: string | undefined = prevErrorMessage.current\n let valid: boolean | string = prevValid.current\n\n const isValid =\n typeof validate === 'function'\n ? await validate(valueToValidate, {\n id,\n collectionSlug,\n data: getData(),\n operation,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: getSiblingData(path),\n })\n : typeof prevErrorMessage.current === 'string'\n ? prevErrorMessage.current\n : prevValid.current\n\n if (typeof isValid === 'string') {\n valid = false\n errorMessage = isValid\n } else if (typeof isValid === 'boolean') {\n valid = isValid\n errorMessage = undefined\n }\n\n // Only dispatch if the validation result has changed\n // This will prevent unnecessary rerenders\n if (valid !== prevValid.current || errorMessage !== prevErrorMessage.current) {\n prevValid.current = valid\n prevErrorMessage.current = errorMessage\n\n const update: UPDATE = {\n type: 'UPDATE',\n errorMessage,\n path,\n rows: field?.rows,\n valid,\n validate,\n value,\n }\n\n if (disableFormData || (hasRows ? typeof value === 'number' && value > 0 : false)) {\n update.disableFormData = true\n }\n\n if (typeof dispatchField === 'function') {\n dispatchField(update)\n }\n }\n }\n\n void validateField()\n },\n 150,\n [\n value,\n disableFormData,\n dispatchField,\n getData,\n getSiblingData,\n getDataByPath,\n id,\n operation,\n path,\n user,\n validate,\n field?.rows,\n collectionSlug,\n ],\n )\n\n return result\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useCallback","useMemo","useRef","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useOperation","useTranslation","useForm","useFormFields","useFormInitializing","useFormModified","useFormProcessing","useFormSubmitted","useField","options","$","disableFormData","t0","hasRows","path","validate","undefined","submitted","processing","initializing","user","id","collectionSlug","operation","dispatchField","_temp","t1","t2","fields","field","t","config","getData","getDataByPath","getSiblingData","setModified","modified","filterOptions","value","initialValue","valid","showError","prevValid","prevErrorMessage","errorMessage","e","t3","disableModifyingForm","val","target","type","setTimeout","setValue","t4","customComponents","t5","t6","errorPaths","t7","rows","t8","t9","formInitializing","formProcessing","formSubmitted","result","t10","validateField","valueToValidate","Array","isArray","current","valid_0","isValid","data","preferences","req","payload","siblingData","update","t11","t12","dispatch"],"sources":["../../../src/forms/useField/index.tsx"],"sourcesContent":["'use client'\nimport type { PayloadRequest } from 'payload'\n\nimport { useCallback, useMemo, useRef } from 'react'\n\nimport type { UPDATE } from '../Form/types.js'\nimport type { FieldType, Options } from './types.js'\n\nexport type { FieldType, Options }\n\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 { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport {\n useForm,\n useFormFields,\n useFormInitializing,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n} from '../Form/context.js'\n\n/**\n * Get and set the value of a form field.\n *\n * @see https://payloadcms.com/docs/admin/hooks#usefield\n */\nexport const useField = <TValue,>(options: Options): FieldType<TValue> => {\n const { disableFormData = false, hasRows, path, validate } = options\n\n const submitted = useFormSubmitted()\n const processing = useFormProcessing()\n const initializing = useFormInitializing()\n const { user } = useAuth()\n const { id, collectionSlug } = useDocumentInfo()\n const operation = useOperation()\n\n const dispatchField = useFormFields(([_, dispatch]) => dispatch)\n const field = useFormFields(([fields]) => (fields && fields?.[path]) || null)\n\n const { t } = useTranslation()\n const { config } = useConfig()\n\n const { getData, getDataByPath, getSiblingData, setModified } = useForm()\n const modified = useFormModified()\n\n const filterOptions = field?.filterOptions\n const value = field?.value as TValue\n const initialValue = field?.initialValue as TValue\n const valid = typeof field?.valid === 'boolean' ? field.valid : true\n const showError = valid === false && submitted\n\n const prevValid = useRef(valid)\n const prevErrorMessage = useRef(field?.errorMessage)\n\n // Method to return from `useField`, used to\n // update field values from field component(s)\n const setValue = useCallback(\n (e, disableModifyingForm = false) => {\n const val = e && e.target ? e.target.value : e\n dispatchField({\n type: 'UPDATE',\n disableFormData: disableFormData || (hasRows && val > 0),\n path,\n value: val,\n })\n\n if (!disableModifyingForm) {\n if (typeof setModified === 'function') {\n // Only update setModified to true if the form is not already set to modified. Otherwise the following could happen:\n // 1. Text field: someone types in it in an unmodified form\n // 2. After setTimeout triggers setModified(true): form is set to modified. Save Button becomes available. Good!\n // 3. Type something in text field\n // 4. Click on save button before setTimeout in useField has finished (so setModified(true) has not been run yet)\n // 5. Form is saved, setModified(false) is set in the Form/index.tsx `submit` function, \"saved successfully\" toast appears\n // 6. setModified(true) inside the timeout is run, form is set to modified again, even though it was already saved and thus set to unmodified. Bad! This should have happened before the form is saved. Now the form should be unmodified and stay that way\n // until a NEW change happens. Due to this, the \"Leave without saving\" modal appears even though it should not when leaving the page fast immediately after saving the document.\n // This is only an issue for forms which have already been set to modified true, as that causes the save button to be enabled. If we prevent this setTimeout to be run\n // for already-modified forms first place (which is unnecessary), we can avoid this issue. As for unmodified forms, this race issue will not happen, because you cannot click the save button faster\n // than the timeout in useField is run. That's because the save button won't even be enabled for clicking until the setTimeout in useField has run.\n // This fixes e2e test flakes, as e2e tests were often so fast that they were saving the form before the timeout in useField has run.\n // Specifically, this fixes the 'should not warn about unsaved changes when navigating to lexical editor with blocks node and then leaving the page after making a change and saving' lexical e2e test.\n if (modified === false) {\n // Update modified state after field value comes back\n // to avoid cursor jump caused by state value / DOM mismatch\n setTimeout(() => {\n setModified(true)\n }, 10)\n }\n }\n }\n },\n [setModified, path, dispatchField, disableFormData, hasRows, modified],\n )\n\n // Store result from hook as ref\n // to prevent unnecessary rerenders\n const result: FieldType<TValue> = useMemo(\n () => ({\n customComponents: field?.customComponents,\n errorMessage: field?.errorMessage,\n errorPaths: field?.errorPaths || [],\n filterOptions,\n formInitializing: initializing,\n formProcessing: processing,\n formSubmitted: submitted,\n initialValue,\n path,\n rows: field?.rows,\n setValue,\n showError,\n valid: field?.valid,\n value,\n }),\n [\n field,\n processing,\n setValue,\n showError,\n submitted,\n value,\n initialValue,\n path,\n filterOptions,\n initializing,\n ],\n )\n\n // Throttle the validate function\n useThrottledEffect(\n () => {\n const validateField = async () => {\n let valueToValidate = value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = getDataByPath(path)\n }\n\n let errorMessage: string | undefined = prevErrorMessage.current\n let valid: boolean | string = prevValid.current\n\n const isValid =\n typeof validate === 'function'\n ? await validate(valueToValidate, {\n id,\n collectionSlug,\n data: getData(),\n operation,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: getSiblingData(path),\n })\n : typeof prevErrorMessage.current === 'string'\n ? prevErrorMessage.current\n : prevValid.current\n\n if (typeof isValid === 'string') {\n valid = false\n errorMessage = isValid\n } else if (typeof isValid === 'boolean') {\n valid = isValid\n errorMessage = undefined\n }\n\n // Only dispatch if the validation result has changed\n // This will prevent unnecessary rerenders\n if (valid !== prevValid.current || errorMessage !== prevErrorMessage.current) {\n prevValid.current = valid\n prevErrorMessage.current = errorMessage\n\n const update: UPDATE = {\n type: 'UPDATE',\n errorMessage,\n path,\n rows: field?.rows,\n valid,\n validate,\n value,\n }\n\n if (disableFormData || (hasRows ? typeof value === 'number' && value > 0 : false)) {\n update.disableFormData = true\n }\n\n if (typeof dispatchField === 'function') {\n dispatchField(update)\n }\n }\n }\n\n void validateField()\n },\n 150,\n [\n value,\n disableFormData,\n dispatchField,\n getData,\n getSiblingData,\n getDataByPath,\n id,\n operation,\n path,\n user,\n validate,\n field?.rows,\n collectionSlug,\n ],\n )\n\n return result\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copyDataFromLocale.d.ts","sourceRoot":"","sources":["../../src/utilities/copyDataFromLocale.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"copyDataFromLocale.d.ts","sourceRoot":"","sources":["../../src/utilities/copyDataFromLocale.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EAInB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAA;AAMhB,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,GAAG,EAAE,cAAc,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AA6HD,eAAO,MAAM,yBAAyB,SAAgB,sBAAsB,0EAiB3E,CAAA;AAED,eAAO,MAAM,kBAAkB,SAAgB,sBAAsB,0CAgHpE,CAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import ObjectIdImport from 'bson-objectid';
|
|
1
2
|
import { formatErrors } from 'payload';
|
|
2
3
|
import { fieldAffectsData, tabHasName } from 'payload/shared';
|
|
4
|
+
const ObjectId = ObjectIdImport.default || ObjectIdImport;
|
|
3
5
|
function iterateFields(fields, fromLocaleData, toLocaleData) {
|
|
4
6
|
fields.map(field => {
|
|
5
7
|
if (fieldAffectsData(field)) {
|
|
@@ -12,10 +14,14 @@ function iterateFields(fields, fromLocaleData, toLocaleData) {
|
|
|
12
14
|
toLocaleData[field.name] = fromLocaleData[field.name];
|
|
13
15
|
break;
|
|
14
16
|
}
|
|
15
|
-
// if the field has a value
|
|
16
|
-
if (
|
|
17
|
+
// if the field has a value - loop over the data from target
|
|
18
|
+
if (field.name in toLocaleData) {
|
|
17
19
|
toLocaleData[field.name].map((item, index) => {
|
|
18
20
|
if (fromLocaleData[field.name]?.[index]) {
|
|
21
|
+
// Generate new IDs if the field is localized to prevent errors with relational DBs.
|
|
22
|
+
if (field.localized) {
|
|
23
|
+
toLocaleData[field.name][index].id = new ObjectId().toHexString();
|
|
24
|
+
}
|
|
19
25
|
iterateFields(field.fields, fromLocaleData[field.name][index], item);
|
|
20
26
|
}
|
|
21
27
|
});
|
|
@@ -29,12 +35,16 @@ function iterateFields(fields, fromLocaleData, toLocaleData) {
|
|
|
29
35
|
toLocaleData[field.name] = fromLocaleData[field.name];
|
|
30
36
|
break;
|
|
31
37
|
}
|
|
32
|
-
// if the field has a value
|
|
33
|
-
if (
|
|
38
|
+
// if the field has a value - loop over the data from target
|
|
39
|
+
if (field.name in toLocaleData) {
|
|
34
40
|
toLocaleData[field.name].map((blockData, index) => {
|
|
35
41
|
const blockFields = field.blocks.find(({
|
|
36
42
|
slug
|
|
37
43
|
}) => slug === blockData.blockType)?.fields;
|
|
44
|
+
// Generate new IDs if the field is localized to prevent errors with relational DBs.
|
|
45
|
+
if (field.localized) {
|
|
46
|
+
toLocaleData[field.name][index].id = new ObjectId().toHexString();
|
|
47
|
+
}
|
|
38
48
|
if (blockFields?.length) {
|
|
39
49
|
iterateFields(blockFields, fromLocaleData[field.name][index], blockData);
|
|
40
50
|
}
|