@payloadcms/ui 3.0.0-alpha.45 → 3.0.0-alpha.47
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/DocumentDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.js +27 -16
- package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/DocumentDrawer/types.d.ts +3 -1
- package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/types.js.map +1 -1
- package/dist/elements/DocumentHeader/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/index.js +2 -3
- package/dist/elements/DocumentHeader/index.js.map +1 -1
- package/dist/elements/RenderTitle/index.d.ts +1 -2
- package/dist/elements/RenderTitle/index.d.ts.map +1 -1
- package/dist/elements/RenderTitle/index.js +2 -3
- package/dist/elements/RenderTitle/index.js.map +1 -1
- package/dist/elements/RenderTitle/types.d.ts +1 -0
- package/dist/elements/RenderTitle/types.d.ts.map +1 -1
- package/dist/elements/RenderTitle/types.js.map +1 -1
- package/dist/elements/TableColumns/buildColumns.d.ts.map +1 -1
- package/dist/elements/TableColumns/buildColumns.js +7 -6
- package/dist/elements/TableColumns/buildColumns.js.map +1 -1
- package/dist/elements/TableColumns/columnReducer.d.ts.map +1 -1
- package/dist/elements/TableColumns/columnReducer.js +26 -4
- package/dist/elements/TableColumns/columnReducer.js.map +1 -1
- package/dist/elements/TableColumns/index.js +1 -1
- package/dist/elements/TableColumns/index.js.map +1 -1
- package/dist/elements/ThumbnailCard/index.d.ts.map +1 -1
- package/dist/elements/ThumbnailCard/index.js +8 -4
- package/dist/elements/ThumbnailCard/index.js.map +1 -1
- package/dist/elements/ThumbnailCard/types.d.ts +4 -2
- package/dist/elements/ThumbnailCard/types.d.ts.map +1 -1
- package/dist/elements/ThumbnailCard/types.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +19 -22
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/mergeServerFormState.d.ts +7 -0
- package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
- package/dist/forms/Form/mergeServerFormState.js +7 -1
- package/dist/forms/Form/mergeServerFormState.js.map +1 -1
- package/dist/forms/Form/types.d.ts +4 -2
- package/dist/forms/Form/types.d.ts.map +1 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/forms/Label/index.d.ts.map +1 -1
- package/dist/forms/Label/index.js +7 -1
- package/dist/forms/Label/index.js.map +1 -1
- package/dist/forms/RenderFields/RenderField.js +2 -2
- package/dist/forms/RenderFields/RenderField.js.map +1 -1
- package/dist/forms/fields/Array/index.d.ts.map +1 -1
- package/dist/forms/fields/Array/index.js +12 -11
- package/dist/forms/fields/Array/index.js.map +1 -1
- package/dist/forms/fields/Blocks/BlockRow.d.ts.map +1 -1
- package/dist/forms/fields/Blocks/BlockRow.js +1 -1
- package/dist/forms/fields/Blocks/BlockRow.js.map +1 -1
- package/dist/forms/fields/Blocks/index.d.ts.map +1 -1
- package/dist/forms/fields/Blocks/index.js +14 -11
- package/dist/forms/fields/Blocks/index.js.map +1 -1
- package/dist/forms/fields/Checkbox/index.d.ts.map +1 -1
- package/dist/forms/fields/Checkbox/index.js +2 -1
- package/dist/forms/fields/Checkbox/index.js.map +1 -1
- package/dist/forms/fields/JSON/index.d.ts.map +1 -1
- package/dist/forms/fields/JSON/index.js +4 -2
- package/dist/forms/fields/JSON/index.js.map +1 -1
- package/dist/forms/fields/Relationship/AddNew/index.d.ts.map +1 -1
- package/dist/forms/fields/Relationship/AddNew/index.js +4 -8
- package/dist/forms/fields/Relationship/AddNew/index.js.map +1 -1
- package/dist/forms/fields/Relationship/optionsReducer.d.ts.map +1 -1
- package/dist/forms/fields/Relationship/optionsReducer.js +12 -8
- package/dist/forms/fields/Relationship/optionsReducer.js.map +1 -1
- package/dist/forms/fields/Tabs/index.d.ts.map +1 -1
- package/dist/forms/fields/Tabs/index.js +4 -5
- package/dist/forms/fields/Tabs/index.js.map +1 -1
- package/dist/forms/fields/Tabs/types.d.ts +2 -0
- package/dist/forms/fields/Tabs/types.d.ts.map +1 -1
- package/dist/forms/fields/Tabs/types.js.map +1 -1
- package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.js +11 -1
- package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.js.map +1 -1
- package/dist/hooks/usePayloadAPI.d.ts.map +1 -1
- package/dist/hooks/usePayloadAPI.js +12 -2
- package/dist/hooks/usePayloadAPI.js.map +1 -1
- package/dist/prod/styles.css +1 -1
- package/dist/utilities/buildComponentMap/mapFields.d.ts.map +1 -1
- package/dist/utilities/buildComponentMap/mapFields.js +6 -9
- package/dist/utilities/buildComponentMap/mapFields.js.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js +7 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
- package/dist/utilities/formatDocTitle.d.ts +7 -7
- package/dist/utilities/formatDocTitle.d.ts.map +1 -1
- package/dist/utilities/formatDocTitle.js +21 -16
- package/dist/utilities/formatDocTitle.js.map +1 -1
- package/dist/utilities/generateFieldID.d.ts +2 -0
- package/dist/utilities/generateFieldID.d.ts.map +1 -0
- package/dist/utilities/generateFieldID.js +5 -0
- package/dist/utilities/generateFieldID.js.map +1 -0
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/ThumbnailCard/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport type { Props } from './types.js'\n\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatDocTitle } from '../../utilities/formatDocTitle.js'\nimport Thumbnail from '../Thumbnail/index.js'\nimport './index.scss'\n\nconst baseClass = 'thumbnail-card'\n\nexport const ThumbnailCard: React.FC<Props> = (props) => {\n const {\n alignLabel,\n className,\n collection,\n doc,\n label: labelFromProps,\n onClick,\n thumbnail,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const classes = [\n baseClass,\n className,\n typeof onClick === 'function' && `${baseClass}--has-on-click`,\n alignLabel && `${baseClass}--align-label-${alignLabel}`,\n ]\n .filter(Boolean)\n .join(' ')\n\n let title = labelFromProps\n\n if (!title) {\n title
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/ThumbnailCard/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport type { Props } from './types.js'\n\nimport { useConfig } from '../../index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatDocTitle } from '../../utilities/formatDocTitle.js'\nimport Thumbnail from '../Thumbnail/index.js'\nimport './index.scss'\n\nconst baseClass = 'thumbnail-card'\n\nexport const ThumbnailCard: React.FC<Props> = (props) => {\n const {\n alignLabel,\n className,\n collection,\n doc,\n label: labelFromProps,\n onClick,\n thumbnail,\n } = props\n\n const config = useConfig()\n\n const { i18n, t } = useTranslation()\n\n const classes = [\n baseClass,\n className,\n typeof onClick === 'function' && `${baseClass}--has-on-click`,\n alignLabel && `${baseClass}--align-label-${alignLabel}`,\n ]\n .filter(Boolean)\n .join(' ')\n\n let title = labelFromProps\n\n if (!title) {\n title = formatDocTitle({\n collectionConfig: collection,\n data: doc,\n dateFormat: config.admin.dateFormat,\n fallback: doc?.filename,\n i18n,\n })\n }\n\n return (\n <button className={classes} onClick={onClick} title={title} type=\"button\">\n <div className={`${baseClass}__thumbnail`}>\n {thumbnail && thumbnail}\n {!thumbnail && collection && doc && <Thumbnail doc={doc} size=\"expand\" />}\n </div>\n <div className={`${baseClass}__label`}>{title}</div>\n </button>\n )\n}\n"],"names":["React","useConfig","useTranslation","formatDocTitle","Thumbnail","baseClass","ThumbnailCard","props","alignLabel","className","collection","doc","label","labelFromProps","onClick","thumbnail","config","i18n","t","classes","filter","Boolean","join","title","collectionConfig","data","dateFormat","admin","fallback","filename","button","type","div","size"],"mappings":"AAAA,OAAOA,WAAW,QAAO;AAIzB,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,cAAc,QAAQ,oCAAmC;AAClE,OAAOC,eAAe,wBAAuB;AAG7C,MAAMC,YAAY;AAElB,OAAO,MAAMC,gBAAiC,CAACC;IAC7C,MAAM,EACJC,UAAU,EACVC,SAAS,EACTC,UAAU,EACVC,GAAG,EACHC,OAAOC,cAAc,EACrBC,OAAO,EACPC,SAAS,EACV,GAAGR;IAEJ,MAAMS,SAASf;IAEf,MAAM,EAAEgB,IAAI,EAAEC,CAAC,EAAE,GAAGhB;IAEpB,MAAMiB,UAAU;QACdd;QACAI;QACA,OAAOK,YAAY,cAAc,CAAC,EAAET,UAAU,cAAc,CAAC;QAC7DG,cAAc,CAAC,EAAEH,UAAU,cAAc,EAAEG,WAAW,CAAC;KACxD,CACEY,MAAM,CAACC,SACPC,IAAI,CAAC;IAER,IAAIC,QAAQV;IAEZ,IAAI,CAACU,OAAO;QACVA,QAAQpB,eAAe;YACrBqB,kBAAkBd;YAClBe,MAAMd;YACNe,YAAYV,OAAOW,KAAK,CAACD,UAAU;YACnCE,UAAUjB,KAAKkB;YACfZ;QACF;IACF;IAEA,qBACE,oBAACa;QAAOrB,WAAWU;QAASL,SAASA;QAASS,OAAOA;QAAOQ,MAAK;qBAC/D,oBAACC;QAAIvB,WAAW,CAAC,EAAEJ,UAAU,WAAW,CAAC;OACtCU,aAAaA,WACb,CAACA,aAAaL,cAAcC,qBAAO,oBAACP;QAAUO,KAAKA;QAAKsB,MAAK;uBAEhE,oBAACD;QAAIvB,WAAW,CAAC,EAAEJ,UAAU,OAAO,CAAC;OAAGkB;AAG9C,EAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/// <reference types="react" resolution-mode="require"/>
|
|
2
|
-
import type { SanitizedCollectionConfig } from 'payload/types';
|
|
2
|
+
import type { SanitizedCollectionConfig, TypeWithID } from 'payload/types';
|
|
3
3
|
export type Props = {
|
|
4
4
|
alignLabel?: 'center' | 'left';
|
|
5
5
|
className?: string;
|
|
6
6
|
collection?: SanitizedCollectionConfig;
|
|
7
|
-
doc?:
|
|
7
|
+
doc?: TypeWithID & {
|
|
8
|
+
filename?: string;
|
|
9
|
+
};
|
|
8
10
|
label?: string;
|
|
9
11
|
onClick?: () => void;
|
|
10
12
|
onKeyDown?: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/ThumbnailCard/types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/ThumbnailCard/types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1E,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,GAAG,CAAC,EAAE,UAAU,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/ThumbnailCard/types.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from 'payload/types'\n\nexport type Props = {\n alignLabel?: 'center' | 'left'\n className?: string\n collection?: SanitizedCollectionConfig\n doc?:
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/ThumbnailCard/types.ts"],"sourcesContent":["import type { SanitizedCollectionConfig, TypeWithID } from 'payload/types'\n\nexport type Props = {\n alignLabel?: 'center' | 'left'\n className?: string\n collection?: SanitizedCollectionConfig\n doc?: TypeWithID & { filename?: string }\n label?: string\n onClick?: () => void\n onKeyDown?: () => void\n thumbnail?: React.ReactNode\n}\n"],"names":[],"mappings":"AAEA,WASC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AASA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAA6C,KAAK,EAAiB,MAAM,YAAY,CAAA;AA+BjG,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AASA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAA6C,KAAK,EAAiB,MAAM,YAAY,CAAA;AA+BjG,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA4hBzB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
package/dist/forms/Form/index.js
CHANGED
|
@@ -27,10 +27,10 @@ import { mergeServerFormState } from './mergeServerFormState.js';
|
|
|
27
27
|
import reduceFieldsToValues from './reduceFieldsToValues.js';
|
|
28
28
|
const baseClass = 'form';
|
|
29
29
|
const Form = (props)=>{
|
|
30
|
-
const { id, collectionSlug,
|
|
30
|
+
const { id, collectionSlug, globalSlug } = useDocumentInfo();
|
|
31
31
|
const { action, children, className, disableSuccessStatus, disabled, // fields: fieldsFromProps = collection?.fields || global?.fields,
|
|
32
32
|
beforeSubmit, handleResponse, initialState, onChange, onSubmit, onSuccess, redirect, submitted: submittedFromProps, uuid, waitForAutocomplete } = props;
|
|
33
|
-
const method = 'method' in props ? props
|
|
33
|
+
const method = 'method' in props ? props?.method : undefined;
|
|
34
34
|
const router = useRouter();
|
|
35
35
|
const { code: locale } = useLocale();
|
|
36
36
|
const { i18n, t } = useTranslation();
|
|
@@ -174,6 +174,7 @@ const Form = (props)=>{
|
|
|
174
174
|
setProcessing(false);
|
|
175
175
|
const contentType = res.headers.get('content-type');
|
|
176
176
|
const isJSON = contentType && contentType.indexOf('application/json') !== -1;
|
|
177
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
177
178
|
let json = {};
|
|
178
179
|
if (isJSON) json = await res.json();
|
|
179
180
|
if (res.status < 400) {
|
|
@@ -269,6 +270,7 @@ const Form = (props)=>{
|
|
|
269
270
|
const getData = useCallback(()=>reduceFieldsToValues(contextRef.current.fields, true), []);
|
|
270
271
|
const getSiblingData = useCallback((path)=>getSiblingDataFunc(contextRef.current.fields, path), []);
|
|
271
272
|
const getDataByPath = useCallback((path)=>getDataByPathFunc(contextRef.current.fields, path), []);
|
|
273
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
272
274
|
const createFormData = useCallback((overrides = {})=>{
|
|
273
275
|
const data = reduceFieldsToValues(contextRef.current.fields, true);
|
|
274
276
|
const file = data?.file;
|
|
@@ -332,17 +334,14 @@ const Form = (props)=>{
|
|
|
332
334
|
}, [
|
|
333
335
|
dispatchFields
|
|
334
336
|
]);
|
|
335
|
-
const
|
|
337
|
+
const getFieldStateBySchemaPath = useCallback(async ({ data, schemaPath })=>{
|
|
336
338
|
const fieldSchema = await getFormState({
|
|
337
339
|
apiRoute,
|
|
338
340
|
body: {
|
|
339
341
|
collectionSlug,
|
|
340
342
|
data,
|
|
341
343
|
globalSlug,
|
|
342
|
-
|
|
343
|
-
Turns: 'arrayField.0.group123field.arrayField.0.textField'
|
|
344
|
-
Into: 'arrayField.group123field.arrayField.textField'
|
|
345
|
-
*/ schemaPath: `${collectionSlug || globalSlug}.${path}`.replace(/\.\d+\./g, '.')
|
|
344
|
+
schemaPath
|
|
346
345
|
},
|
|
347
346
|
serverURL
|
|
348
347
|
});
|
|
@@ -353,10 +352,10 @@ const Form = (props)=>{
|
|
|
353
352
|
globalSlug,
|
|
354
353
|
serverURL
|
|
355
354
|
]);
|
|
356
|
-
const addFieldRow = useCallback(async ({ data, path, rowIndex })=>{
|
|
357
|
-
const subFieldState = await
|
|
355
|
+
const addFieldRow = useCallback(async ({ data, path, rowIndex, schemaPath })=>{
|
|
356
|
+
const subFieldState = await getFieldStateBySchemaPath({
|
|
358
357
|
data,
|
|
359
|
-
|
|
358
|
+
schemaPath
|
|
360
359
|
});
|
|
361
360
|
dispatchFields({
|
|
362
361
|
type: 'ADD_ROW',
|
|
@@ -366,7 +365,7 @@ const Form = (props)=>{
|
|
|
366
365
|
subFieldState
|
|
367
366
|
});
|
|
368
367
|
}, [
|
|
369
|
-
|
|
368
|
+
getFieldStateBySchemaPath,
|
|
370
369
|
dispatchFields
|
|
371
370
|
]);
|
|
372
371
|
const removeFieldRow = useCallback(({ path, rowIndex })=>{
|
|
@@ -378,10 +377,10 @@ const Form = (props)=>{
|
|
|
378
377
|
}, [
|
|
379
378
|
dispatchFields
|
|
380
379
|
]);
|
|
381
|
-
const replaceFieldRow = useCallback(async ({ data, path, rowIndex })=>{
|
|
382
|
-
const subFieldState = await
|
|
380
|
+
const replaceFieldRow = useCallback(async ({ data, path, rowIndex, schemaPath })=>{
|
|
381
|
+
const subFieldState = await getFieldStateBySchemaPath({
|
|
383
382
|
data,
|
|
384
|
-
|
|
383
|
+
schemaPath
|
|
385
384
|
});
|
|
386
385
|
dispatchFields({
|
|
387
386
|
type: 'REPLACE_ROW',
|
|
@@ -391,7 +390,7 @@ const Form = (props)=>{
|
|
|
391
390
|
subFieldState
|
|
392
391
|
});
|
|
393
392
|
}, [
|
|
394
|
-
|
|
393
|
+
getFieldStateBySchemaPath,
|
|
395
394
|
dispatchFields
|
|
396
395
|
]);
|
|
397
396
|
contextRef.current.submit = submit;
|
|
@@ -454,14 +453,12 @@ const Form = (props)=>{
|
|
|
454
453
|
useDebouncedEffect(()=>{
|
|
455
454
|
const executeOnChange = async ()=>{
|
|
456
455
|
if (Array.isArray(onChange)) {
|
|
457
|
-
let revalidatedFormState;
|
|
458
|
-
|
|
459
|
-
await
|
|
460
|
-
|
|
461
|
-
formState: fields
|
|
456
|
+
let revalidatedFormState = fields;
|
|
457
|
+
for (const onChangeFn of onChange){
|
|
458
|
+
revalidatedFormState = await onChangeFn({
|
|
459
|
+
formState: revalidatedFormState
|
|
462
460
|
});
|
|
463
|
-
|
|
464
|
-
}, Promise.resolve());
|
|
461
|
+
}
|
|
465
462
|
const { changed, newState } = mergeServerFormState(fields, revalidatedFormState);
|
|
466
463
|
if (changed) {
|
|
467
464
|
dispatchFields({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["'use client'\nimport type { Field, FormState } from 'payload/types'\n\n/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\nimport isDeepEqual from 'deep-equal'\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport { wait } from 'payload/utilities'\nimport QueryString from 'qs'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport type { Context as FormContextType, GetDataByPath, Props, SubmitOptions } from './types.js'\n\nimport { useDebouncedEffect } from '../../hooks/useDebouncedEffect.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 { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/OperationProvider/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { getFormState } from '../../utilities/getFormState.js'\nimport {\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n} from './context.js'\nimport errorMessages from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport getDataByPathFunc from './getDataByPath.js'\nimport getSiblingDataFunc from './getSiblingData.js'\nimport initContextState from './initContextState.js'\nimport { mergeServerFormState } from './mergeServerFormState.js'\nimport reduceFieldsToValues from './reduceFieldsToValues.js'\n\nconst baseClass = 'form'\n\nconst Form: React.FC<Props> = (props) => {\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n\n const {\n action,\n children,\n className,\n disableSuccessStatus,\n disabled,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n beforeSubmit,\n handleResponse,\n initialState, // fully formed initial field state\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 const { formQueryParams } = useFormQueryParams()\n\n const config = useConfig()\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const [modified, setModified] = useState(false)\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\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\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 = {\n ...field,\n valid: true,\n }\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = true\n\n if (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 id,\n config,\n data,\n operation,\n siblingData: contextRef.current.getSiblingData(path),\n t,\n user,\n })\n }\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!isDeepEqual(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n return isValid\n }, [id, user, operation, t, dispatchFields, config])\n\n const submit = useCallback(\n async (options: SubmitOptions = {}, e): Promise<void> => {\n const {\n action: actionArg,\n method: methodToUse = method,\n overrides = {},\n skipValidation,\n } = options\n\n if (disabled) {\n if (e) {\n e.preventDefault()\n }\n return\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n setProcessing(true)\n setSubmitted(true)\n\n if (waitForAutocomplete) await wait(100)\n\n // Execute server side validations\n if (Array.isArray(beforeSubmit)) {\n let revalidatedFormState: FormState\n\n await beforeSubmit.reduce(async (priorOnChange, beforeSubmitFn) => {\n await priorOnChange\n\n const result = await beforeSubmitFn({\n formState: fields,\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 return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid = skipValidation ? true : await contextRef.current.validateForm()\n\n // If not valid, prevent submission\n if (!isValid) {\n toast.error(t('error:correctInvalidFields'))\n setProcessing(false)\n\n return\n }\n\n // If submit handler comes through via props, run that\n if (onSubmit) {\n const data = {\n ...reduceFieldsToValues(fields, true),\n ...overrides,\n }\n\n onSubmit(fields, data)\n }\n\n const formData = contextRef.current.createFormData(overrides)\n\n try {\n let res\n const actionEndpoint =\n actionArg ||\n (typeof action === 'string'\n ? `${action}${QueryString.stringify(formQueryParams, { addQueryPrefix: true })}`\n : null)\n\n if (actionEndpoint) {\n res = await requests[methodToUse.toLowerCase()](actionEndpoint, {\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\n if (typeof handleResponse === 'function') {\n handleResponse(res)\n return\n }\n\n setProcessing(false)\n\n const contentType = res.headers.get('content-type')\n const isJSON = contentType && contentType.indexOf('application/json') !== -1\n\n let json: Record<string, any> = {}\n\n if (isJSON) json = await res.json()\n\n if (res.status < 400) {\n setSubmitted(false)\n\n if (typeof onSuccess === 'function') onSuccess(json)\n\n if (redirect) {\n router.push(redirect)\n } else if (!disableSuccessStatus) {\n toast.success(json.message || t('general:submissionSuccessful'), { autoClose: 3000 })\n }\n } else {\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n if (json.message) {\n toast.error(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)) {\n err.data.forEach((dataError) => {\n if (dataError?.field) {\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 fieldErrors.forEach((err) => {\n dispatchFields({\n type: 'UPDATE',\n ...(contextRef.current?.fields?.[err.field] || {}),\n errorMessage: err.message,\n path: err.field,\n valid: false,\n })\n })\n\n nonFieldErrors.forEach((err) => {\n toast.error(err.message || t('error:unknown'))\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n toast.error(message)\n }\n } catch (err) {\n setProcessing(false)\n\n toast.error(err)\n }\n },\n [\n action,\n disableSuccessStatus,\n disabled,\n dispatchFields,\n fields,\n handleResponse,\n method,\n onSubmit,\n onSuccess,\n redirect,\n router,\n t,\n i18n,\n waitForAutocomplete,\n beforeSubmit,\n formQueryParams,\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 const getDataByPath = useCallback<GetDataByPath>(\n (path: string) => getDataByPathFunc(contextRef.current.fields, path),\n [],\n )\n\n const createFormData = useCallback((overrides: any = {}) => {\n const data = reduceFieldsToValues(contextRef.current.fields, true)\n\n const file = data?.file\n\n if (file) {\n delete data.file\n }\n\n const dataWithOverrides = {\n ...data,\n ...overrides,\n }\n\n const dataToSerialize = {\n _payload: JSON.stringify(dataWithOverrides),\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 newState = await getFormState({\n apiRoute,\n body: {\n id,\n collectionSlug,\n data,\n globalSlug,\n operation,\n schemaPath: collectionSlug || globalSlug,\n },\n serverURL,\n })\n\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state: newState })\n },\n [apiRoute, collectionSlug, dispatchFields, globalSlug, id, operation, serverURL],\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 getFieldStateByPath = useCallback(\n async ({ data, path }) => {\n const fieldSchema = await getFormState({\n apiRoute,\n body: {\n collectionSlug,\n data,\n globalSlug,\n /**\n Turns: 'arrayField.0.group123field.arrayField.0.textField'\n Into: 'arrayField.group123field.arrayField.textField'\n */\n schemaPath: `${collectionSlug || globalSlug}.${path}`.replace(/\\.\\d+\\./g, '.'),\n },\n serverURL,\n })\n return fieldSchema\n },\n [apiRoute, collectionSlug, globalSlug, serverURL],\n )\n\n const addFieldRow: FormContextType['addFieldRow'] = useCallback(\n async ({ data, path, rowIndex }) => {\n const subFieldState = await getFieldStateByPath({ data, path })\n\n dispatchFields({\n type: 'ADD_ROW',\n blockType: data?.blockType,\n path,\n rowIndex,\n subFieldState,\n })\n },\n [getFieldStateByPath, dispatchFields],\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 async ({ data, path, rowIndex }) => {\n const subFieldState = await getFieldStateByPath({ data, path })\n\n dispatchFields({\n type: 'REPLACE_ROW',\n blockType: data?.blockType,\n path,\n rowIndex,\n subFieldState,\n })\n },\n [getFieldStateByPath, dispatchFields],\n )\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.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\n useEffect(() => {\n if (typeof submittedFromProps === 'boolean') setSubmitted(submittedFromProps)\n }, [submittedFromProps])\n\n useEffect(() => {\n if (initialState) {\n contextRef.current = { ...initContextState } as FormContextType\n dispatchFields({ type: 'REPLACE_STATE', 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 useDebouncedEffect(\n () => {\n const executeOnChange = async () => {\n if (Array.isArray(onChange)) {\n let revalidatedFormState: FormState\n\n await onChange.reduce(async (priorOnChange, onChangeFn) => {\n await priorOnChange\n\n const result = await onChangeFn({\n formState: fields,\n })\n\n revalidatedFormState = result\n }, Promise.resolve())\n\n const { changed, newState } = mergeServerFormState(fields, revalidatedFormState)\n\n if (changed) {\n dispatchFields({ type: 'REPLACE_STATE', optimize: false, state: newState })\n }\n }\n }\n\n void executeOnChange() // eslint-disable-line @typescript-eslint/no-floating-promises\n },\n 150,\n [fields, dispatchFields, onChange],\n )\n\n const actionString =\n typeof action === 'string'\n ? `${action}${QueryString.stringify(formQueryParams, { addQueryPrefix: true })}`\n : ''\n\n return (\n <form\n action={method ? actionString : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => 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 <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 </SubmittedContext.Provider>\n </FormWatchContext.Provider>\n </FormContext.Provider>\n </form>\n )\n}\n\nexport default Form\n"],"names":["isDeepEqual","useRouter","serialize","wait","QueryString","React","useCallback","useEffect","useReducer","useRef","useState","toast","useDebouncedEffect","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useFormQueryParams","useLocale","useOperation","useTranslation","requests","getFormState","FormContext","FormFieldsContext","FormWatchContext","ModifiedContext","ProcessingContext","SubmittedContext","errorMessages","fieldReducer","getDataByPathFunc","getSiblingDataFunc","initContextState","mergeServerFormState","reduceFieldsToValues","baseClass","Form","props","id","collectionSlug","getDocPreferences","globalSlug","action","children","className","disableSuccessStatus","disabled","beforeSubmit","handleResponse","initialState","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","code","locale","i18n","t","refreshCookie","user","operation","formQueryParams","config","routes","api","apiRoute","serverURL","modified","setModified","processing","setProcessing","setSubmitted","formRef","contextRef","fieldsReducer","fields","dispatchFields","current","validateForm","validatedFieldState","isValid","dataFromContext","getData","data","validationPromises","Object","entries","map","path","field","validatedField","valid","passesCondition","validationResult","validate","valueToValidate","value","rows","Array","isArray","getDataByPath","siblingData","getSiblingData","errorMessage","Promise","all","type","state","submit","options","e","actionArg","methodToUse","overrides","skipValidation","preventDefault","stopPropagation","revalidatedFormState","reduce","priorOnChange","beforeSubmitFn","result","formState","resolve","every","error","formData","createFormData","res","actionEndpoint","stringify","addQueryPrefix","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","push","success","message","autoClose","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","statusText","getFields","getField","file","dataWithOverrides","dataToSerialize","_payload","JSON","indices","nullsAsUndefineds","reset","newState","schemaPath","replaceState","getFieldStateByPath","fieldSchema","replace","addFieldRow","rowIndex","subFieldState","blockType","removeFieldRow","replaceFieldRow","classes","filter","Boolean","join","executeOnChange","onChangeFn","changed","optimize","actionString","form","noValidate","ref","Provider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload/types'\n\n/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\nimport isDeepEqual from 'deep-equal'\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport { wait } from 'payload/utilities'\nimport QueryString from 'qs'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport type { Context as FormContextType, GetDataByPath, Props, SubmitOptions } from './types.js'\n\nimport { useDebouncedEffect } from '../../hooks/useDebouncedEffect.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 { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/OperationProvider/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { getFormState } from '../../utilities/getFormState.js'\nimport {\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n} from './context.js'\nimport errorMessages from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport getDataByPathFunc from './getDataByPath.js'\nimport getSiblingDataFunc from './getSiblingData.js'\nimport initContextState from './initContextState.js'\nimport { mergeServerFormState } from './mergeServerFormState.js'\nimport reduceFieldsToValues from './reduceFieldsToValues.js'\n\nconst baseClass = 'form'\n\nconst Form: React.FC<Props> = (props) => {\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n\n const {\n action,\n children,\n className,\n disableSuccessStatus,\n disabled,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n beforeSubmit,\n handleResponse,\n initialState, // fully formed initial field state\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 const { formQueryParams } = useFormQueryParams()\n\n const config = useConfig()\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const [modified, setModified] = useState(false)\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\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\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 = {\n ...field,\n valid: true,\n }\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = true\n\n if (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 id,\n config,\n data,\n operation,\n siblingData: contextRef.current.getSiblingData(path),\n t,\n user,\n })\n }\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!isDeepEqual(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n return isValid\n }, [id, user, operation, t, dispatchFields, config])\n\n const submit = useCallback(\n async (options: SubmitOptions = {}, e): Promise<void> => {\n const {\n action: actionArg,\n method: methodToUse = method,\n overrides = {},\n skipValidation,\n } = options\n\n if (disabled) {\n if (e) {\n e.preventDefault()\n }\n return\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n setProcessing(true)\n setSubmitted(true)\n\n if (waitForAutocomplete) await wait(100)\n\n // Execute server side validations\n if (Array.isArray(beforeSubmit)) {\n let revalidatedFormState: FormState\n\n await beforeSubmit.reduce(async (priorOnChange, beforeSubmitFn) => {\n await priorOnChange\n\n const result = await beforeSubmitFn({\n formState: fields,\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 return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid = skipValidation ? true : await contextRef.current.validateForm()\n\n // If not valid, prevent submission\n if (!isValid) {\n toast.error(t('error:correctInvalidFields'))\n setProcessing(false)\n\n return\n }\n\n // If submit handler comes through via props, run that\n if (onSubmit) {\n const data = {\n ...reduceFieldsToValues(fields, true),\n ...overrides,\n }\n\n onSubmit(fields, data)\n }\n\n const formData = contextRef.current.createFormData(overrides)\n\n try {\n let res\n const actionEndpoint =\n actionArg ||\n (typeof action === 'string'\n ? `${action}${QueryString.stringify(formQueryParams, { addQueryPrefix: true })}`\n : null)\n\n if (actionEndpoint) {\n res = await requests[methodToUse.toLowerCase()](actionEndpoint, {\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\n if (typeof handleResponse === 'function') {\n handleResponse(res)\n return\n }\n\n setProcessing(false)\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) json = await res.json()\n\n if (res.status < 400) {\n setSubmitted(false)\n\n if (typeof onSuccess === 'function') onSuccess(json)\n\n if (redirect) {\n router.push(redirect)\n } else if (!disableSuccessStatus) {\n toast.success(json.message || t('general:submissionSuccessful'), { autoClose: 3000 })\n }\n } else {\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n if (json.message) {\n toast.error(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)) {\n err.data.forEach((dataError) => {\n if (dataError?.field) {\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 fieldErrors.forEach((err) => {\n dispatchFields({\n type: 'UPDATE',\n ...(contextRef.current?.fields?.[err.field] || {}),\n errorMessage: err.message,\n path: err.field,\n valid: false,\n })\n })\n\n nonFieldErrors.forEach((err) => {\n toast.error(err.message || t('error:unknown'))\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n toast.error(message)\n }\n } catch (err) {\n setProcessing(false)\n\n toast.error(err)\n }\n },\n [\n action,\n disableSuccessStatus,\n disabled,\n dispatchFields,\n fields,\n handleResponse,\n method,\n onSubmit,\n onSuccess,\n redirect,\n router,\n t,\n i18n,\n waitForAutocomplete,\n beforeSubmit,\n formQueryParams,\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 const getDataByPath = useCallback<GetDataByPath>(\n (path: string) => getDataByPathFunc(contextRef.current.fields, path),\n [],\n )\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const createFormData = useCallback((overrides: any = {}) => {\n const data = reduceFieldsToValues(contextRef.current.fields, true)\n\n const file = data?.file\n\n if (file) {\n delete data.file\n }\n\n const dataWithOverrides = {\n ...data,\n ...overrides,\n }\n\n const dataToSerialize = {\n _payload: JSON.stringify(dataWithOverrides),\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 newState = await getFormState({\n apiRoute,\n body: {\n id,\n collectionSlug,\n data,\n globalSlug,\n operation,\n schemaPath: collectionSlug || globalSlug,\n },\n serverURL,\n })\n\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state: newState })\n },\n [apiRoute, collectionSlug, dispatchFields, globalSlug, id, operation, serverURL],\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 getFieldStateBySchemaPath = useCallback(\n async ({ data, schemaPath }) => {\n const fieldSchema = await getFormState({\n apiRoute,\n body: {\n collectionSlug,\n data,\n globalSlug,\n schemaPath,\n },\n serverURL,\n })\n return fieldSchema\n },\n [apiRoute, collectionSlug, globalSlug, serverURL],\n )\n\n const addFieldRow: FormContextType['addFieldRow'] = useCallback(\n async ({ data, path, rowIndex, schemaPath }) => {\n const subFieldState = await getFieldStateBySchemaPath({ data, schemaPath })\n\n dispatchFields({\n type: 'ADD_ROW',\n blockType: data?.blockType,\n path,\n rowIndex,\n subFieldState,\n })\n },\n [getFieldStateBySchemaPath, dispatchFields],\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 async ({ data, path, rowIndex, schemaPath }) => {\n const subFieldState = await getFieldStateBySchemaPath({ data, schemaPath })\n\n dispatchFields({\n type: 'REPLACE_ROW',\n blockType: data?.blockType,\n path,\n rowIndex,\n subFieldState,\n })\n },\n [getFieldStateBySchemaPath, dispatchFields],\n )\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.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\n useEffect(() => {\n if (typeof submittedFromProps === 'boolean') setSubmitted(submittedFromProps)\n }, [submittedFromProps])\n\n useEffect(() => {\n if (initialState) {\n contextRef.current = { ...initContextState } as FormContextType\n dispatchFields({ type: 'REPLACE_STATE', 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 useDebouncedEffect(\n () => {\n const executeOnChange = async () => {\n if (Array.isArray(onChange)) {\n let revalidatedFormState: FormState = fields\n\n for (const onChangeFn of onChange) {\n revalidatedFormState = await onChangeFn({\n formState: revalidatedFormState,\n })\n }\n\n const { changed, newState } = mergeServerFormState(fields, revalidatedFormState)\n\n if (changed) {\n dispatchFields({ type: 'REPLACE_STATE', optimize: false, state: newState })\n }\n }\n }\n\n void executeOnChange() // eslint-disable-line @typescript-eslint/no-floating-promises\n },\n 150,\n [fields, dispatchFields, onChange],\n )\n\n const actionString =\n typeof action === 'string'\n ? `${action}${QueryString.stringify(formQueryParams, { addQueryPrefix: true })}`\n : ''\n\n return (\n <form\n action={method ? actionString : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => 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 <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 </SubmittedContext.Provider>\n </FormWatchContext.Provider>\n </FormContext.Provider>\n </form>\n )\n}\n\nexport default Form\n"],"names":["isDeepEqual","useRouter","serialize","wait","QueryString","React","useCallback","useEffect","useReducer","useRef","useState","toast","useDebouncedEffect","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useFormQueryParams","useLocale","useOperation","useTranslation","requests","getFormState","FormContext","FormFieldsContext","FormWatchContext","ModifiedContext","ProcessingContext","SubmittedContext","errorMessages","fieldReducer","getDataByPathFunc","getSiblingDataFunc","initContextState","mergeServerFormState","reduceFieldsToValues","baseClass","Form","props","id","collectionSlug","globalSlug","action","children","className","disableSuccessStatus","disabled","beforeSubmit","handleResponse","initialState","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","code","locale","i18n","t","refreshCookie","user","operation","formQueryParams","config","routes","api","apiRoute","serverURL","modified","setModified","processing","setProcessing","setSubmitted","formRef","contextRef","fieldsReducer","fields","dispatchFields","current","validateForm","validatedFieldState","isValid","dataFromContext","getData","data","validationPromises","Object","entries","map","path","field","validatedField","valid","passesCondition","validationResult","validate","valueToValidate","value","rows","Array","isArray","getDataByPath","siblingData","getSiblingData","errorMessage","Promise","all","type","state","submit","options","e","actionArg","methodToUse","overrides","skipValidation","preventDefault","stopPropagation","revalidatedFormState","reduce","priorOnChange","beforeSubmitFn","result","formState","resolve","every","error","formData","createFormData","res","actionEndpoint","stringify","addQueryPrefix","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","push","success","message","autoClose","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","statusText","getFields","getField","file","dataWithOverrides","dataToSerialize","_payload","JSON","indices","nullsAsUndefineds","reset","newState","schemaPath","replaceState","getFieldStateBySchemaPath","fieldSchema","addFieldRow","rowIndex","subFieldState","blockType","removeFieldRow","replaceFieldRow","classes","filter","Boolean","join","executeOnChange","onChangeFn","changed","optimize","actionString","form","noValidate","ref","Provider"],"mappings":"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"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { FormState } from 'payload/types';
|
|
2
|
+
/**
|
|
3
|
+
* Merges certain properties from the server state into the client state. These do not include values,
|
|
4
|
+
* as we do not want to update them on the client like that, which would cause flickering.
|
|
5
|
+
*
|
|
6
|
+
* We want to use this to update the error state, and other properties that are not user input, as the error state
|
|
7
|
+
* is the thing we want to keep in sync with the server (where it's calculated) on the client.
|
|
8
|
+
*/
|
|
2
9
|
export declare const mergeServerFormState: (oldState: FormState, newState: FormState) => {
|
|
3
10
|
changed: boolean;
|
|
4
11
|
newState: FormState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeServerFormState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/mergeServerFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAM9C,eAAO,MAAM,oBAAoB,aACrB,SAAS,YACT,SAAS;aACP,OAAO;cAAY,SAAS;CAkCzC,CAAA"}
|
|
1
|
+
{"version":3,"file":"mergeServerFormState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/mergeServerFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAM9C;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,aACrB,SAAS,YACT,SAAS;aACP,OAAO;cAAY,SAAS;CAkCzC,CAAA"}
|
|
@@ -4,7 +4,13 @@ const propsToCheck = [
|
|
|
4
4
|
'valid',
|
|
5
5
|
'errorMessage'
|
|
6
6
|
];
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Merges certain properties from the server state into the client state. These do not include values,
|
|
9
|
+
* as we do not want to update them on the client like that, which would cause flickering.
|
|
10
|
+
*
|
|
11
|
+
* We want to use this to update the error state, and other properties that are not user input, as the error state
|
|
12
|
+
* is the thing we want to keep in sync with the server (where it's calculated) on the client.
|
|
13
|
+
*/ export const mergeServerFormState = (oldState, newState)=>{
|
|
8
14
|
let changed = false;
|
|
9
15
|
Object.entries(newState).forEach(([path, newFieldState])=>{
|
|
10
16
|
newFieldState.initialValue = oldState[path]?.initialValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["import type { FormState } from 'payload/types'\n\nimport { arraysHaveSameStrings } from '../../utilities/arraysHaveSameStrings.js'\n\nconst propsToCheck = ['passesCondition', 'valid', 'errorMessage']\n\nexport const mergeServerFormState = (\n oldState: FormState,\n newState: FormState,\n): { changed: boolean; newState: FormState } => {\n let changed = false\n\n Object.entries(newState).forEach(([path, newFieldState]) => {\n newFieldState.initialValue = oldState[path]?.initialValue\n newFieldState.value = oldState[path].value\n\n const oldErrorPaths: string[] = []\n const newErrorPaths: string[] = []\n\n if (oldState[path].errorPaths instanceof Set) {\n oldState[path].errorPaths.forEach((path) => oldErrorPaths.push(path))\n }\n\n if (\n newFieldState.errorPaths &&\n !Array.isArray(newFieldState.errorPaths) &&\n typeof newFieldState.errorPaths\n ) {\n Object.values(newFieldState.errorPaths).forEach((path) => newErrorPaths.push(path))\n }\n\n if (!arraysHaveSameStrings(oldErrorPaths, newErrorPaths)) {\n changed = true\n }\n\n propsToCheck.forEach((prop) => {\n if (newFieldState[prop] != oldState[path][prop]) {\n changed = true\n }\n })\n })\n\n return { changed, newState }\n}\n"],"names":["arraysHaveSameStrings","propsToCheck","mergeServerFormState","oldState","newState","changed","Object","entries","forEach","path","newFieldState","initialValue","value","oldErrorPaths","newErrorPaths","errorPaths","Set","push","Array","isArray","values","prop"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,2CAA0C;AAEhF,MAAMC,eAAe;IAAC;IAAmB;IAAS;CAAe;AAEjE,OAAO,MAAMC,uBAAuB,CAClCC,UACAC;IAEA,IAAIC,UAAU;IAEdC,OAAOC,OAAO,CAACH,UAAUI,OAAO,CAAC,CAAC,CAACC,MAAMC,cAAc;QACrDA,cAAcC,YAAY,GAAGR,QAAQ,CAACM,KAAK,EAAEE;QAC7CD,cAAcE,KAAK,GAAGT,QAAQ,CAACM,KAAK,CAACG,KAAK;QAE1C,MAAMC,gBAA0B,EAAE;QAClC,MAAMC,gBAA0B,EAAE;QAElC,IAAIX,QAAQ,CAACM,KAAK,CAACM,UAAU,YAAYC,KAAK;YAC5Cb,QAAQ,CAACM,KAAK,CAACM,UAAU,CAACP,OAAO,CAAC,CAACC,OAASI,cAAcI,IAAI,CAACR;QACjE;QAEA,IACEC,cAAcK,UAAU,IACxB,CAACG,MAAMC,OAAO,CAACT,cAAcK,UAAU,KACvC,OAAOL,cAAcK,UAAU,EAC/B;YACAT,OAAOc,MAAM,CAACV,cAAcK,UAAU,EAAEP,OAAO,CAAC,CAACC,OAASK,cAAcG,IAAI,CAACR;QAC/E;QAEA,IAAI,CAACT,sBAAsBa,eAAeC,gBAAgB;YACxDT,UAAU;QACZ;QAEAJ,aAAaO,OAAO,CAAC,CAACa;YACpB,IAAIX,aAAa,CAACW,KAAK,IAAIlB,QAAQ,CAACM,KAAK,CAACY,KAAK,EAAE;gBAC/ChB,UAAU;YACZ;QACF;IACF;IAEA,OAAO;QAAEA;QAASD;IAAS;AAC7B,EAAC"}
|
|
1
|
+
{"version":3,"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["import type { FormState } from 'payload/types'\n\nimport { arraysHaveSameStrings } from '../../utilities/arraysHaveSameStrings.js'\n\nconst propsToCheck = ['passesCondition', 'valid', 'errorMessage']\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 oldState: FormState,\n newState: FormState,\n): { changed: boolean; newState: FormState } => {\n let changed = false\n\n Object.entries(newState).forEach(([path, newFieldState]) => {\n newFieldState.initialValue = oldState[path]?.initialValue\n newFieldState.value = oldState[path].value\n\n const oldErrorPaths: string[] = []\n const newErrorPaths: string[] = []\n\n if (oldState[path].errorPaths instanceof Set) {\n oldState[path].errorPaths.forEach((path) => oldErrorPaths.push(path))\n }\n\n if (\n newFieldState.errorPaths &&\n !Array.isArray(newFieldState.errorPaths) &&\n typeof newFieldState.errorPaths\n ) {\n Object.values(newFieldState.errorPaths).forEach((path) => newErrorPaths.push(path))\n }\n\n if (!arraysHaveSameStrings(oldErrorPaths, newErrorPaths)) {\n changed = true\n }\n\n propsToCheck.forEach((prop) => {\n if (newFieldState[prop] != oldState[path][prop]) {\n changed = true\n }\n })\n })\n\n return { changed, newState }\n}\n"],"names":["arraysHaveSameStrings","propsToCheck","mergeServerFormState","oldState","newState","changed","Object","entries","forEach","path","newFieldState","initialValue","value","oldErrorPaths","newErrorPaths","errorPaths","Set","push","Array","isArray","values","prop"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,2CAA0C;AAEhF,MAAMC,eAAe;IAAC;IAAmB;IAAS;CAAe;AAEjE;;;;;;CAMC,GACD,OAAO,MAAMC,uBAAuB,CAClCC,UACAC;IAEA,IAAIC,UAAU;IAEdC,OAAOC,OAAO,CAACH,UAAUI,OAAO,CAAC,CAAC,CAACC,MAAMC,cAAc;QACrDA,cAAcC,YAAY,GAAGR,QAAQ,CAACM,KAAK,EAAEE;QAC7CD,cAAcE,KAAK,GAAGT,QAAQ,CAACM,KAAK,CAACG,KAAK;QAE1C,MAAMC,gBAA0B,EAAE;QAClC,MAAMC,gBAA0B,EAAE;QAElC,IAAIX,QAAQ,CAACM,KAAK,CAACM,UAAU,YAAYC,KAAK;YAC5Cb,QAAQ,CAACM,KAAK,CAACM,UAAU,CAACP,OAAO,CAAC,CAACC,OAASI,cAAcI,IAAI,CAACR;QACjE;QAEA,IACEC,cAAcK,UAAU,IACxB,CAACG,MAAMC,OAAO,CAACT,cAAcK,UAAU,KACvC,OAAOL,cAAcK,UAAU,EAC/B;YACAT,OAAOc,MAAM,CAACV,cAAcK,UAAU,EAAEP,OAAO,CAAC,CAACC,OAASK,cAAcG,IAAI,CAACR;QAC/E;QAEA,IAAI,CAACT,sBAAsBa,eAAeC,gBAAgB;YACxDT,UAAU;QACZ;QAEAJ,aAAaO,OAAO,CAAC,CAACa;YACpB,IAAIX,aAAa,CAACW,KAAK,IAAIlB,QAAQ,CAACM,KAAK,CAACY,KAAK,EAAE;gBAC/ChB,UAAU;YACZ;QACF;IACF;IAEA,OAAO;QAAEA;QAASD;IAAS;AAC7B,EAAC"}
|
|
@@ -127,10 +127,11 @@ export type SET_ALL_ROWS_COLLAPSED = {
|
|
|
127
127
|
export type FieldAction = ADD_ROW | DUPLICATE_ROW | MODIFY_CONDITION | MOVE_ROW | REMOVE | REMOVE_ROW | REPLACE_ROW | REPLACE_STATE | SET_ALL_ROWS_COLLAPSED | SET_ROW_COLLAPSED | UPDATE;
|
|
128
128
|
export type FormFieldsContext = [FormState, Dispatch<FieldAction>];
|
|
129
129
|
export type Context = {
|
|
130
|
-
addFieldRow: ({ data, path, rowIndex, }: {
|
|
130
|
+
addFieldRow: ({ data, path, rowIndex, schemaPath, }: {
|
|
131
131
|
data?: Data;
|
|
132
132
|
path: string;
|
|
133
133
|
rowIndex?: number;
|
|
134
|
+
schemaPath: string;
|
|
134
135
|
}) => Promise<void>;
|
|
135
136
|
buildRowErrors: () => void;
|
|
136
137
|
createFormData: CreateFormData;
|
|
@@ -150,10 +151,11 @@ export type Context = {
|
|
|
150
151
|
path: string;
|
|
151
152
|
rowIndex: number;
|
|
152
153
|
}) => void;
|
|
153
|
-
replaceFieldRow: ({ data, path, rowIndex, }: {
|
|
154
|
+
replaceFieldRow: ({ data, path, rowIndex, schemaPath, }: {
|
|
154
155
|
data?: Data;
|
|
155
156
|
path: string;
|
|
156
157
|
rowIndex: number;
|
|
158
|
+
schemaPath: string;
|
|
157
159
|
}) => Promise<void>;
|
|
158
160
|
replaceState: (state: FormState) => void;
|
|
159
161
|
reset: Reset;
|
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/forms/Form/types.ts"],"sourcesContent":["import type { User } from 'payload/auth'\nimport type { Field, FormField, FormState } from 'payload/types'\nimport type { Data } from 'payload/types'\nimport type React from 'react'\nimport type { Dispatch } from 'react'\n\nexport type Preferences = {\n [key: string]: unknown\n}\n\nexport type Props = (\n | {\n action: (formData: FormData) => Promise<void>\n }\n | {\n action?: string\n method?: 'DELETE' | 'GET' | 'PATCH' | 'POST'\n }\n) & {\n beforeSubmit?: ((args: { formState: FormState }) => Promise<FormState>)[]\n children?: React.ReactNode\n className?: string\n disableSuccessStatus?: boolean\n disabled?: boolean\n /**\n * By default, the form will get the field schema (not data) from the current document. If you pass this in, you can override that behavior.\n * This is very useful for sub-forms, where the form's field schema is not necessarily the field schema of the current document (e.g. for the Blocks\n * feature of the Lexical Rich Text field)\n */\n fields?: Field[]\n handleResponse?: (res: Response) => void\n initialState?: FormState\n log?: boolean\n onChange?: ((args: { formState: FormState }) => Promise<FormState>)[]\n onSubmit?: (fields: FormState, data: Data) => void\n onSuccess?: (json: unknown) => void\n redirect?: string\n submitted?: boolean\n uuid?: string\n validationOperation?: 'create' | 'update'\n waitForAutocomplete?: boolean\n}\n\nexport type SubmitOptions = {\n action?: string\n method?: string\n overrides?: Record<string, unknown>\n skipValidation?: boolean\n}\n\nexport type DispatchFields = React.Dispatch<any>\nexport type Submit = (\n options?: SubmitOptions,\n e?: React.FormEvent<HTMLFormElement>,\n) => Promise<void>\nexport type ValidateForm = () => Promise<boolean>\nexport type CreateFormData = (overrides?: any) => FormData\nexport type GetFields = () => FormState\nexport type GetField = (path: string) => FormField\nexport type GetData = () => Data\nexport type GetSiblingData = (path: string) => Data\nexport type GetDataByPath = <T = unknown>(path: string) => T\nexport type SetModified = (modified: boolean) => void\nexport type SetSubmitted = (submitted: boolean) => void\nexport type SetProcessing = (processing: boolean) => void\n\nexport type Reset = (data: unknown) => Promise<void>\n\nexport type REPLACE_STATE = {\n optimize?: boolean\n state: FormState\n type: 'REPLACE_STATE'\n}\n\nexport type REMOVE = {\n path: string\n type: 'REMOVE'\n}\n\nexport type MODIFY_CONDITION = {\n path: string\n result: boolean\n type: 'MODIFY_CONDITION'\n user: User\n}\n\nexport type UPDATE = {\n path: string\n type: 'UPDATE'\n} & Partial<FormField>\n\nexport type REMOVE_ROW = {\n path: string\n rowIndex: number\n type: 'REMOVE_ROW'\n}\n\nexport type ADD_ROW = {\n blockType?: string\n path: string\n rowIndex?: number\n subFieldState?: FormState\n type: 'ADD_ROW'\n}\n\nexport type REPLACE_ROW = {\n blockType?: string\n path: string\n rowIndex: number\n subFieldState?: FormState\n type: 'REPLACE_ROW'\n}\n\nexport type DUPLICATE_ROW = {\n path: string\n rowIndex: number\n type: 'DUPLICATE_ROW'\n}\n\nexport type MOVE_ROW = {\n moveFromIndex: number\n moveToIndex: number\n path: string\n type: 'MOVE_ROW'\n}\n\nexport type SET_ROW_COLLAPSED = {\n collapsed: boolean\n path: string\n rowID: string\n setDocFieldPreferences: (field: string, fieldPreferences: { [key: string]: unknown }) => void\n type: 'SET_ROW_COLLAPSED'\n}\n\nexport type SET_ALL_ROWS_COLLAPSED = {\n collapsed: boolean\n path: string\n setDocFieldPreferences: (field: string, fieldPreferences: { [key: string]: unknown }) => void\n type: 'SET_ALL_ROWS_COLLAPSED'\n}\n\nexport type FieldAction =\n | ADD_ROW\n | DUPLICATE_ROW\n | MODIFY_CONDITION\n | MOVE_ROW\n | REMOVE\n | REMOVE_ROW\n | REPLACE_ROW\n | REPLACE_STATE\n | SET_ALL_ROWS_COLLAPSED\n | SET_ROW_COLLAPSED\n | UPDATE\n\nexport type FormFieldsContext = [FormState, Dispatch<FieldAction>]\n\nexport type Context = {\n addFieldRow: ({\n data,\n path,\n rowIndex,\n }: {\n data?: Data\n path: string\n /*\n * by default the new row will be added to the end of the list\n */\n rowIndex?: number\n }) => Promise<void>\n buildRowErrors: () => void\n createFormData: CreateFormData\n disabled: boolean\n dispatchFields: Dispatch<FieldAction>\n /**\n * @deprecated Form context fields may be outdated and should not be relied on. Instead, prefer `useFormFields`.\n */\n fields: FormState\n formRef: React.MutableRefObject<HTMLFormElement>\n getData: GetData\n getDataByPath: GetDataByPath\n getField: GetField\n getFields: GetFields\n getSiblingData: GetSiblingData\n removeFieldRow: ({ path, rowIndex }: { path: string; rowIndex: number }) => void\n replaceFieldRow: ({\n data,\n path,\n rowIndex,\n }: {\n data?: Data\n path: string\n rowIndex: number\n }) => Promise<void>\n replaceState: (state: FormState) => void\n reset: Reset\n setModified: SetModified\n setProcessing: SetProcessing\n setSubmitted: SetSubmitted\n submit: Submit\n uuid?: string\n validateForm: ValidateForm\n}\n"],"names":[],"mappings":"AA4JA,
|
|
1
|
+
{"version":3,"sources":["../../../src/forms/Form/types.ts"],"sourcesContent":["import type { User } from 'payload/auth'\nimport type { Field, FormField, FormState } from 'payload/types'\nimport type { Data } from 'payload/types'\nimport type React from 'react'\nimport type { Dispatch } from 'react'\n\nexport type Preferences = {\n [key: string]: unknown\n}\n\nexport type Props = (\n | {\n action: (formData: FormData) => Promise<void>\n }\n | {\n action?: string\n method?: 'DELETE' | 'GET' | 'PATCH' | 'POST'\n }\n) & {\n beforeSubmit?: ((args: { formState: FormState }) => Promise<FormState>)[]\n children?: React.ReactNode\n className?: string\n disableSuccessStatus?: boolean\n disabled?: boolean\n /**\n * By default, the form will get the field schema (not data) from the current document. If you pass this in, you can override that behavior.\n * This is very useful for sub-forms, where the form's field schema is not necessarily the field schema of the current document (e.g. for the Blocks\n * feature of the Lexical Rich Text field)\n */\n fields?: Field[]\n handleResponse?: (res: Response) => void\n initialState?: FormState\n log?: boolean\n onChange?: ((args: { formState: FormState }) => Promise<FormState>)[]\n onSubmit?: (fields: FormState, data: Data) => void\n onSuccess?: (json: unknown) => void\n redirect?: string\n submitted?: boolean\n uuid?: string\n validationOperation?: 'create' | 'update'\n waitForAutocomplete?: boolean\n}\n\nexport type SubmitOptions = {\n action?: string\n method?: string\n overrides?: Record<string, unknown>\n skipValidation?: boolean\n}\n\nexport type DispatchFields = React.Dispatch<any>\nexport type Submit = (\n options?: SubmitOptions,\n e?: React.FormEvent<HTMLFormElement>,\n) => Promise<void>\nexport type ValidateForm = () => Promise<boolean>\nexport type CreateFormData = (overrides?: any) => FormData\nexport type GetFields = () => FormState\nexport type GetField = (path: string) => FormField\nexport type GetData = () => Data\nexport type GetSiblingData = (path: string) => Data\nexport type GetDataByPath = <T = unknown>(path: string) => T\nexport type SetModified = (modified: boolean) => void\nexport type SetSubmitted = (submitted: boolean) => void\nexport type SetProcessing = (processing: boolean) => void\n\nexport type Reset = (data: unknown) => Promise<void>\n\nexport type REPLACE_STATE = {\n optimize?: boolean\n state: FormState\n type: 'REPLACE_STATE'\n}\n\nexport type REMOVE = {\n path: string\n type: 'REMOVE'\n}\n\nexport type MODIFY_CONDITION = {\n path: string\n result: boolean\n type: 'MODIFY_CONDITION'\n user: User\n}\n\nexport type UPDATE = {\n path: string\n type: 'UPDATE'\n} & Partial<FormField>\n\nexport type REMOVE_ROW = {\n path: string\n rowIndex: number\n type: 'REMOVE_ROW'\n}\n\nexport type ADD_ROW = {\n blockType?: string\n path: string\n rowIndex?: number\n subFieldState?: FormState\n type: 'ADD_ROW'\n}\n\nexport type REPLACE_ROW = {\n blockType?: string\n path: string\n rowIndex: number\n subFieldState?: FormState\n type: 'REPLACE_ROW'\n}\n\nexport type DUPLICATE_ROW = {\n path: string\n rowIndex: number\n type: 'DUPLICATE_ROW'\n}\n\nexport type MOVE_ROW = {\n moveFromIndex: number\n moveToIndex: number\n path: string\n type: 'MOVE_ROW'\n}\n\nexport type SET_ROW_COLLAPSED = {\n collapsed: boolean\n path: string\n rowID: string\n setDocFieldPreferences: (field: string, fieldPreferences: { [key: string]: unknown }) => void\n type: 'SET_ROW_COLLAPSED'\n}\n\nexport type SET_ALL_ROWS_COLLAPSED = {\n collapsed: boolean\n path: string\n setDocFieldPreferences: (field: string, fieldPreferences: { [key: string]: unknown }) => void\n type: 'SET_ALL_ROWS_COLLAPSED'\n}\n\nexport type FieldAction =\n | ADD_ROW\n | DUPLICATE_ROW\n | MODIFY_CONDITION\n | MOVE_ROW\n | REMOVE\n | REMOVE_ROW\n | REPLACE_ROW\n | REPLACE_STATE\n | SET_ALL_ROWS_COLLAPSED\n | SET_ROW_COLLAPSED\n | UPDATE\n\nexport type FormFieldsContext = [FormState, Dispatch<FieldAction>]\n\nexport type Context = {\n addFieldRow: ({\n data,\n path,\n rowIndex,\n schemaPath,\n }: {\n data?: Data\n path: string\n /*\n * by default the new row will be added to the end of the list\n */\n rowIndex?: number\n schemaPath: string\n }) => Promise<void>\n buildRowErrors: () => void\n createFormData: CreateFormData\n disabled: boolean\n dispatchFields: Dispatch<FieldAction>\n /**\n * @deprecated Form context fields may be outdated and should not be relied on. Instead, prefer `useFormFields`.\n */\n fields: FormState\n formRef: React.MutableRefObject<HTMLFormElement>\n getData: GetData\n getDataByPath: GetDataByPath\n getField: GetField\n getFields: GetFields\n getSiblingData: GetSiblingData\n removeFieldRow: ({ path, rowIndex }: { path: string; rowIndex: number }) => void\n replaceFieldRow: ({\n data,\n path,\n rowIndex,\n schemaPath,\n }: {\n data?: Data\n path: string\n rowIndex: number\n schemaPath: string\n }) => Promise<void>\n replaceState: (state: FormState) => void\n reset: Reset\n setModified: SetModified\n setProcessing: SetProcessing\n setSubmitted: SetSubmitted\n submit: Submit\n uuid?: string\n validateForm: ValidateForm\n}\n"],"names":[],"mappings":"AA4JA,WAiDC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Label/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG/C,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Label/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG/C,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,cAAc,CAAA;AAErB,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAkB/B,CAAA;AAED,eAAe,KAAK,CAAA"}
|
|
@@ -2,8 +2,14 @@
|
|
|
2
2
|
import { getTranslation } from '@payloadcms/translations';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
5
|
+
import { generateFieldID } from '../../utilities/generateFieldID.js';
|
|
6
|
+
import { useFieldPath } from '../FieldPathProvider/index.js';
|
|
7
|
+
import { useForm } from '../Form/context.js';
|
|
5
8
|
const Label = (props)=>{
|
|
6
|
-
const { htmlFor, label, required = false } = props;
|
|
9
|
+
const { htmlFor: htmlForFromProps, label, required = false } = props;
|
|
10
|
+
const { uuid } = useForm();
|
|
11
|
+
const { path } = useFieldPath();
|
|
12
|
+
const htmlFor = htmlForFromProps || generateFieldID(path, uuid);
|
|
7
13
|
const { i18n } = useTranslation();
|
|
8
14
|
if (label) {
|
|
9
15
|
return /*#__PURE__*/ React.createElement("label", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/forms/Label/index.tsx"],"sourcesContent":["'use client'\nimport type { LabelProps } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport './index.scss'\n\nconst Label: React.FC<LabelProps> = (props) => {\n const { htmlFor, label, required = false } = props\n\n const { i18n } = useTranslation()\n\n if (label) {\n return (\n <label className=\"field-label\" htmlFor={htmlFor}>\n {getTranslation(label, i18n)}\n {required && <span className=\"required\">*</span>}\n </label>\n )\n }\n\n return null\n}\n\nexport default Label\n"],"names":["getTranslation","React","useTranslation","Label","props","htmlFor","label","required","i18n","className","span"],"mappings":"AAAA;AAGA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,WAAW,QAAO;AAEzB,SAASC,cAAc,QAAQ,uCAAsC;
|
|
1
|
+
{"version":3,"sources":["../../../src/forms/Label/index.tsx"],"sourcesContent":["'use client'\nimport type { LabelProps } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { generateFieldID } from '../../utilities/generateFieldID.js'\nimport { useFieldPath } from '../FieldPathProvider/index.js'\nimport { useForm } from '../Form/context.js'\nimport './index.scss'\n\nconst Label: React.FC<LabelProps> = (props) => {\n const { htmlFor: htmlForFromProps, label, required = false } = props\n const { uuid } = useForm()\n const { path } = useFieldPath()\n const htmlFor = htmlForFromProps || generateFieldID(path, uuid)\n\n const { i18n } = useTranslation()\n\n if (label) {\n return (\n <label className=\"field-label\" htmlFor={htmlFor}>\n {getTranslation(label, i18n)}\n {required && <span className=\"required\">*</span>}\n </label>\n )\n }\n\n return null\n}\n\nexport default Label\n"],"names":["getTranslation","React","useTranslation","generateFieldID","useFieldPath","useForm","Label","props","htmlFor","htmlForFromProps","label","required","uuid","path","i18n","className","span"],"mappings":"AAAA;AAGA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,WAAW,QAAO;AAEzB,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,YAAY,QAAQ,gCAA+B;AAC5D,SAASC,OAAO,QAAQ,qBAAoB;AAG5C,MAAMC,QAA8B,CAACC;IACnC,MAAM,EAAEC,SAASC,gBAAgB,EAAEC,KAAK,EAAEC,WAAW,KAAK,EAAE,GAAGJ;IAC/D,MAAM,EAAEK,IAAI,EAAE,GAAGP;IACjB,MAAM,EAAEQ,IAAI,EAAE,GAAGT;IACjB,MAAMI,UAAUC,oBAAoBN,gBAAgBU,MAAMD;IAE1D,MAAM,EAAEE,IAAI,EAAE,GAAGZ;IAEjB,IAAIQ,OAAO;QACT,qBACE,oBAACA;YAAMK,WAAU;YAAcP,SAASA;WACrCR,eAAeU,OAAOI,OACtBH,0BAAY,oBAACK;YAAKD,WAAU;WAAW;IAG9C;IAEA,OAAO;AACT;AAEA,eAAeT,MAAK"}
|
|
@@ -8,8 +8,8 @@ export const RenderField = (props)=>{
|
|
|
8
8
|
const { path: pathFromContext, schemaPath: schemaPathFromContext } = useFieldPath();
|
|
9
9
|
const readOnlyFromContext = useReadOnly();
|
|
10
10
|
const operation = useOperation();
|
|
11
|
-
const path = `${pathFromContext ? `${pathFromContext}.` : ''}${name
|
|
12
|
-
const schemaPath = `${schemaPathFromContext ? `${schemaPathFromContext}
|
|
11
|
+
const path = `${pathFromContext ? `${pathFromContext}.` : ''}${name ? `${name}` : ''}`;
|
|
12
|
+
const schemaPath = `${schemaPathFromContext ? `${schemaPathFromContext}` : ''}${name ? `.${name}` : ''}`;
|
|
13
13
|
// if the user cannot read the field, then filter it out
|
|
14
14
|
// this is different from `admin.readOnly` which is executed based on `operation`
|
|
15
15
|
if (fieldPermissions?.read?.permission === false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/forms/RenderFields/RenderField.tsx"],"sourcesContent":["'use client'\nimport type { FieldPermissions } from 'payload/auth'\n\nimport React from 'react'\n\nimport { useOperation } from '../../providers/OperationProvider/index.js'\nimport { FieldPathProvider, useFieldPath } from '../FieldPathProvider/index.js'\nimport { ReadOnlyProvider, useReadOnly } from '../ReadOnlyProvider/index.js'\n\nexport const RenderField: React.FC<{\n Field: React.ReactNode\n fieldPermissions: FieldPermissions\n name?: string\n readOnly?: boolean\n}> = (props) => {\n const { name, Field, fieldPermissions, readOnly: readOnlyFromProps } = props\n\n const { path: pathFromContext, schemaPath: schemaPathFromContext } = useFieldPath()\n\n const readOnlyFromContext = useReadOnly()\n\n const operation = useOperation()\n\n const path = `${pathFromContext ? `${pathFromContext}.` : ''}${name
|
|
1
|
+
{"version":3,"sources":["../../../src/forms/RenderFields/RenderField.tsx"],"sourcesContent":["'use client'\nimport type { FieldPermissions } from 'payload/auth'\n\nimport React from 'react'\n\nimport { useOperation } from '../../providers/OperationProvider/index.js'\nimport { FieldPathProvider, useFieldPath } from '../FieldPathProvider/index.js'\nimport { ReadOnlyProvider, useReadOnly } from '../ReadOnlyProvider/index.js'\n\nexport const RenderField: React.FC<{\n Field: React.ReactNode\n fieldPermissions: FieldPermissions\n name?: string\n readOnly?: boolean\n}> = (props) => {\n const { name, Field, fieldPermissions, readOnly: readOnlyFromProps } = props\n\n const { path: pathFromContext, schemaPath: schemaPathFromContext } = useFieldPath()\n\n const readOnlyFromContext = useReadOnly()\n\n const operation = useOperation()\n\n const path = `${pathFromContext ? `${pathFromContext}.` : ''}${name ? `${name}` : ''}`\n const schemaPath = `${schemaPathFromContext ? `${schemaPathFromContext}` : ''}${name ? `.${name}` : ''}`\n\n // if the user cannot read the field, then filter it out\n // this is different from `admin.readOnly` which is executed based on `operation`\n if (fieldPermissions?.read?.permission === false) {\n return null\n }\n\n // `admin.readOnly` displays the value but prevents the field from being edited\n let readOnly = readOnlyFromProps\n\n // if parent field is `readOnly: true`, but this field is `readOnly: false`, the field should still be editable\n if (readOnlyFromContext && readOnly !== false) readOnly = true\n\n // if the user does not have access control to begin with, force it to be read-only\n if (fieldPermissions?.[operation]?.permission === false) {\n readOnly = true\n }\n\n return (\n <ReadOnlyProvider readOnly={readOnly}>\n <FieldPathProvider path={path} schemaPath={schemaPath}>\n {Field}\n </FieldPathProvider>\n </ReadOnlyProvider>\n )\n}\n"],"names":["React","useOperation","FieldPathProvider","useFieldPath","ReadOnlyProvider","useReadOnly","RenderField","props","name","Field","fieldPermissions","readOnly","readOnlyFromProps","path","pathFromContext","schemaPath","schemaPathFromContext","readOnlyFromContext","operation","read","permission"],"mappings":"AAAA;AAGA,OAAOA,WAAW,QAAO;AAEzB,SAASC,YAAY,QAAQ,6CAA4C;AACzE,SAASC,iBAAiB,EAAEC,YAAY,QAAQ,gCAA+B;AAC/E,SAASC,gBAAgB,EAAEC,WAAW,QAAQ,+BAA8B;AAE5E,OAAO,MAAMC,cAKR,CAACC;IACJ,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEC,gBAAgB,EAAEC,UAAUC,iBAAiB,EAAE,GAAGL;IAEvE,MAAM,EAAEM,MAAMC,eAAe,EAAEC,YAAYC,qBAAqB,EAAE,GAAGb;IAErE,MAAMc,sBAAsBZ;IAE5B,MAAMa,YAAYjB;IAElB,MAAMY,OAAO,CAAC,EAAEC,kBAAkB,CAAC,EAAEA,gBAAgB,CAAC,CAAC,GAAG,GAAG,EAAEN,OAAO,CAAC,EAAEA,KAAK,CAAC,GAAG,GAAG,CAAC;IACtF,MAAMO,aAAa,CAAC,EAAEC,wBAAwB,CAAC,EAAEA,sBAAsB,CAAC,GAAG,GAAG,EAAER,OAAO,CAAC,CAAC,EAAEA,KAAK,CAAC,GAAG,GAAG,CAAC;IAExG,wDAAwD;IACxD,iFAAiF;IACjF,IAAIE,kBAAkBS,MAAMC,eAAe,OAAO;QAChD,OAAO;IACT;IAEA,+EAA+E;IAC/E,IAAIT,WAAWC;IAEf,+GAA+G;IAC/G,IAAIK,uBAAuBN,aAAa,OAAOA,WAAW;IAE1D,mFAAmF;IACnF,IAAID,kBAAkB,CAACQ,UAAU,EAAEE,eAAe,OAAO;QACvDT,WAAW;IACb;IAEA,qBACE,oBAACP;QAAiBO,UAAUA;qBAC1B,oBAACT;QAAkBW,MAAMA;QAAME,YAAYA;OACxCN;AAIT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/fields/Array/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAkBvC,OAAO,cAAc,CAAA;AAIrB,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/fields/Array/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAkBvC,OAAO,cAAc,CAAA;AAIrB,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6PnC,CAAA;AAED,eAAe,cAAc,CAAA"}
|
|
@@ -3,8 +3,8 @@ import { getTranslation } from '@payloadcms/translations';
|
|
|
3
3
|
import React, { useCallback } from 'react';
|
|
4
4
|
import Banner from '../../../elements/Banner/index.js';
|
|
5
5
|
import { Button } from '../../../elements/Button/index.js';
|
|
6
|
-
import DraggableSortable from '../../../elements/DraggableSortable/index.js';
|
|
7
6
|
import DraggableSortableItem from '../../../elements/DraggableSortable/DraggableSortableItem/index.js';
|
|
7
|
+
import DraggableSortable from '../../../elements/DraggableSortable/index.js';
|
|
8
8
|
import { ErrorPill } from '../../../elements/ErrorPill/index.js';
|
|
9
9
|
import { useConfig } from '../../../providers/Config/index.js';
|
|
10
10
|
import { useDocumentInfo } from '../../../providers/DocumentInfo/index.js';
|
|
@@ -24,10 +24,10 @@ const ArrayFieldType = (props)=>{
|
|
|
24
24
|
label: label,
|
|
25
25
|
required: required
|
|
26
26
|
});
|
|
27
|
-
const minRows = 'minRows' in props ? props
|
|
28
|
-
const maxRows = 'maxRows' in props ? props
|
|
27
|
+
const minRows = 'minRows' in props ? props?.minRows : 0;
|
|
28
|
+
const maxRows = 'maxRows' in props ? props?.maxRows : undefined;
|
|
29
29
|
const { setDocFieldPreferences } = useDocumentInfo();
|
|
30
|
-
const { dispatchFields, setModified } = useForm();
|
|
30
|
+
const { addFieldRow, dispatchFields, setModified } = useForm();
|
|
31
31
|
const submitted = useFormSubmitted();
|
|
32
32
|
const { code: locale } = useLocale();
|
|
33
33
|
const { i18n, t } = useTranslation();
|
|
@@ -72,25 +72,26 @@ const ArrayFieldType = (props)=>{
|
|
|
72
72
|
validate,
|
|
73
73
|
editingDefaultLocale
|
|
74
74
|
]);
|
|
75
|
-
const { path, rows = [], showError, valid, value } = useField({
|
|
75
|
+
const { path, rows = [], schemaPath, showError, valid, value } = useField({
|
|
76
76
|
hasRows: true,
|
|
77
77
|
path: pathFromProps || name,
|
|
78
78
|
validate: memoizedValidate
|
|
79
79
|
});
|
|
80
|
-
const addRow = useCallback((rowIndex)=>{
|
|
81
|
-
|
|
82
|
-
type: 'ADD_ROW',
|
|
80
|
+
const addRow = useCallback(async (rowIndex)=>{
|
|
81
|
+
await addFieldRow({
|
|
83
82
|
path,
|
|
84
|
-
rowIndex
|
|
83
|
+
rowIndex,
|
|
84
|
+
schemaPath
|
|
85
85
|
});
|
|
86
86
|
setModified(true);
|
|
87
87
|
setTimeout(()=>{
|
|
88
88
|
scrollToID(`${path}-row-${rowIndex + 1}`);
|
|
89
89
|
}, 0);
|
|
90
90
|
}, [
|
|
91
|
-
|
|
91
|
+
addFieldRow,
|
|
92
92
|
path,
|
|
93
|
-
setModified
|
|
93
|
+
setModified,
|
|
94
|
+
schemaPath
|
|
94
95
|
]);
|
|
95
96
|
const duplicateRow = useCallback((rowIndex)=>{
|
|
96
97
|
dispatchFields({
|