@payloadcms/ui 3.0.0-alpha.44 → 3.0.0-alpha.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  2. package/dist/elements/DocumentDrawer/DrawerContent.js +6 -3
  3. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  4. package/dist/elements/TableColumns/buildColumns.d.ts.map +1 -1
  5. package/dist/elements/TableColumns/buildColumns.js +7 -6
  6. package/dist/elements/TableColumns/buildColumns.js.map +1 -1
  7. package/dist/elements/TableColumns/columnReducer.d.ts.map +1 -1
  8. package/dist/elements/TableColumns/columnReducer.js +26 -4
  9. package/dist/elements/TableColumns/columnReducer.js.map +1 -1
  10. package/dist/elements/TableColumns/index.js +1 -1
  11. package/dist/elements/TableColumns/index.js.map +1 -1
  12. package/dist/forms/Form/index.d.ts.map +1 -1
  13. package/dist/forms/Form/index.js +15 -15
  14. package/dist/forms/Form/index.js.map +1 -1
  15. package/dist/forms/Form/types.d.ts +4 -2
  16. package/dist/forms/Form/types.d.ts.map +1 -1
  17. package/dist/forms/Form/types.js.map +1 -1
  18. package/dist/forms/fields/Array/index.d.ts.map +1 -1
  19. package/dist/forms/fields/Array/index.js +13 -11
  20. package/dist/forms/fields/Array/index.js.map +1 -1
  21. package/dist/forms/fields/Blocks/BlockRow.d.ts.map +1 -1
  22. package/dist/forms/fields/Blocks/BlockRow.js +1 -1
  23. package/dist/forms/fields/Blocks/BlockRow.js.map +1 -1
  24. package/dist/forms/fields/Blocks/index.d.ts.map +1 -1
  25. package/dist/forms/fields/Blocks/index.js +15 -11
  26. package/dist/forms/fields/Blocks/index.js.map +1 -1
  27. package/dist/forms/fields/Relationship/AddNew/index.d.ts.map +1 -1
  28. package/dist/forms/fields/Relationship/AddNew/index.js +4 -8
  29. package/dist/forms/fields/Relationship/AddNew/index.js.map +1 -1
  30. package/dist/prod/styles.css +1 -1
  31. package/dist/providers/Auth/index.d.ts.map +1 -1
  32. package/dist/providers/Auth/index.js +1 -1
  33. package/dist/providers/Auth/index.js.map +1 -1
  34. package/dist/templates/Default/index.scss +4 -2
  35. package/dist/templates/Minimal/index.scss +2 -0
  36. package/dist/utilities/buildFieldSchemaMap/traverseFields.js +7 -1
  37. package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
  38. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerContent.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAGvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAiKrD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAwB/D,CAAA"}
1
+ {"version":3,"file":"DrawerContent.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAGvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAqKrD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAwB/D,CAAA"}
@@ -8,6 +8,7 @@ import { FieldPathProvider, useFieldPath } from '../../forms/FieldPathProvider/i
8
8
  import { useRelatedCollections } from '../../forms/fields/Relationship/AddNew/useRelatedCollections.js';
9
9
  import usePayloadAPI from '../../hooks/usePayloadAPI.js';
10
10
  import { X } from '../../icons/X/index.js';
11
+ import { useAuth } from '../../index.js';
11
12
  import { useComponentMap } from '../../providers/ComponentMapProvider/index.js';
12
13
  import { useConfig } from '../../providers/Config/index.js';
13
14
  import { DocumentInfoProvider } from '../../providers/DocumentInfo/index.js';
@@ -32,7 +33,7 @@ const Content = ({ id, Header, collectionSlug, drawerSlug, onSave })=>{
32
33
  const [collectionConfig] = useRelatedCollections(collectionSlug);
33
34
  const { formQueryParams } = useFormQueryParams();
34
35
  const formattedQueryParams = queryString.stringify(formQueryParams);
35
- const { fields: fieldsFromConfig } = collectionConfig;
36
+ const { permissions } = useAuth();
36
37
  const { schemaPath } = useFieldPath();
37
38
  const { componentMap } = useComponentMap();
38
39
  const { Edit } = componentMap[`${collectionSlug ? 'collections' : 'globals'}`][collectionSlug];
@@ -103,6 +104,7 @@ const Content = ({ id, Header, collectionSlug, drawerSlug, onSave })=>{
103
104
  if (!initialState || isLoadingDocument) {
104
105
  return /*#__PURE__*/ React.createElement(LoadingOverlay, null);
105
106
  }
107
+ const docPermissions = permissions?.collections[collectionSlug];
106
108
  return /*#__PURE__*/ React.createElement(DocumentInfoProvider, {
107
109
  BeforeDocument: /*#__PURE__*/ React.createElement(Gutter, {
108
110
  className: `${baseClass}__header`
@@ -125,11 +127,12 @@ const Content = ({ id, Header, collectionSlug, drawerSlug, onSave })=>{
125
127
  collectionSlug: collectionConfig.slug,
126
128
  disableActions: true,
127
129
  disableLeaveWithoutSaving: true,
130
+ docPermissions: docPermissions,
131
+ hasSavePermission: docPermissions?.update?.permission,
128
132
  // isLoading,
129
133
  id: id,
130
134
  initialData: data,
131
135
  initialState: initialState,
132
- // hasSavePermission={hasSavePermission}
133
136
  isEditing: isEditing,
134
137
  // me: true,
135
138
  onSave: onSave
@@ -143,7 +146,7 @@ export const DocumentDrawerContent = (props)=>{
143
146
  const { id: idFromProps, collectionSlug, onSave: onSaveFromProps } = props;
144
147
  const [collectionConfig] = useRelatedCollections(collectionSlug);
145
148
  const [id, setId] = useState(idFromProps);
146
- const onSave = useCallback(async (args)=>{
149
+ const onSave = useCallback((args)=>{
147
150
  setId(args.doc.id);
148
151
  if (typeof onSaveFromProps === 'function') {
149
152
  void onSaveFromProps({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport type { FormState } from 'payload/types'\n\nimport * as facelessUIImport from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport queryString from 'qs'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport type { DocumentDrawerProps } from './types.js'\n\nimport { FieldPathProvider, useFieldPath } from '../../forms/FieldPathProvider/index.js'\nimport { useRelatedCollections } from '../../forms/fields/Relationship/AddNew/useRelatedCollections.js'\nimport usePayloadAPI from '../../hooks/usePayloadAPI.js'\nimport { X } from '../../icons/X/index.js'\nimport { useComponentMap } from '../../providers/ComponentMapProvider/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider } from '../../providers/DocumentInfo/index.js'\nimport { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { getFormState } from '../../utilities/getFormState.js'\nimport { Gutter } from '../Gutter/index.js'\nimport IDLabel from '../IDLabel/index.js'\nimport { LoadingOverlay } from '../Loading/index.js'\nimport { baseClass } from './index.js'\n\nconst Content: React.FC<DocumentDrawerProps> = ({\n id,\n Header,\n collectionSlug,\n drawerSlug,\n onSave,\n}) => {\n const { useModal } = facelessUIImport\n\n const config = useConfig()\n\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const { closeModal, modalState, toggleModal } = useModal()\n const locale = useLocale()\n const [initialState, setInitialState] = useState<FormState>()\n const { i18n, t } = useTranslation()\n const hasInitializedState = useRef(false)\n const [isOpen, setIsOpen] = useState(false)\n const [collectionConfig] = useRelatedCollections(collectionSlug)\n const { formQueryParams } = useFormQueryParams()\n const formattedQueryParams = queryString.stringify(formQueryParams)\n\n const { fields: fieldsFromConfig } = collectionConfig\n\n const { schemaPath } = useFieldPath()\n\n const { componentMap } = useComponentMap()\n\n const { Edit } = componentMap[`${collectionSlug ? 'collections' : 'globals'}`][collectionSlug]\n\n // no need to an additional requests when creating new documents\n const initialID = useRef(id)\n\n const [{ data, isError, isLoading: isLoadingDocument }] = usePayloadAPI(\n initialID.current ? `${serverURL}${apiRoute}/${collectionSlug}/${initialID.current}` : null,\n { initialParams: { depth: 0, draft: 'true', 'fallback-locale': 'null' } },\n )\n\n useEffect(() => {\n setIsOpen(Boolean(modalState[drawerSlug]?.isOpen))\n }, [modalState, drawerSlug])\n\n useEffect(() => {\n if (isOpen && !isLoadingDocument && isError) {\n closeModal(drawerSlug)\n toast.error(data.errors?.[0].message || t('error:unspecific'))\n }\n }, [isError, t, isOpen, data, drawerSlug, closeModal, isLoadingDocument])\n\n const isEditing = Boolean(id)\n\n const apiURL = id ? `${serverURL}${apiRoute}/${collectionSlug}/${id}?locale=${locale.code}` : null\n\n const action = `${serverURL}${apiRoute}/${collectionSlug}${\n isEditing ? `/${id}` : ''\n }?${formattedQueryParams}`\n\n // const hasSavePermission =\n // (isEditing && docPermissions?.update?.permission) ||\n // (!isEditing && (docPermissions as CollectionPermission)?.create?.permission)\n\n useEffect(() => {\n if (!hasInitializedState.current && (!initialID.current || (initialID.current && data))) {\n const getInitialState = async () => {\n const result = await getFormState({\n apiRoute,\n body: {\n id,\n collectionSlug,\n data: data || {},\n operation: isEditing ? 'update' : 'create',\n schemaPath,\n },\n serverURL,\n })\n\n setInitialState(result)\n hasInitializedState.current = true\n }\n\n void getInitialState()\n }\n }, [apiRoute, data, id, isEditing, schemaPath, serverURL, collectionSlug])\n\n if (isError) return null\n\n if (!initialState || isLoadingDocument) {\n return <LoadingOverlay />\n }\n\n return (\n <DocumentInfoProvider\n BeforeDocument={\n <Gutter className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-content`}>\n <h2 className={`${baseClass}__header-text`}>\n {Header ||\n t(!id ? 'fields:addNewLabel' : 'general:editLabel', {\n label: getTranslation(collectionConfig.labels.singular, i18n),\n })}\n </h2>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header-close`}\n onClick={() => toggleModal(drawerSlug)}\n type=\"button\"\n >\n <X />\n </button>\n </div>\n {id && <IDLabel id={id.toString()} />}\n </Gutter>\n }\n action={action}\n apiURL={apiURL}\n collectionSlug={collectionConfig.slug}\n disableActions\n disableLeaveWithoutSaving\n // isLoading,\n id={id}\n initialData={data}\n initialState={initialState}\n // hasSavePermission={hasSavePermission}\n isEditing={isEditing}\n // me: true,\n onSave={onSave}\n >\n {Edit}\n </DocumentInfoProvider>\n )\n}\n\n// First provide the document context using `DocumentInfoProvider`\n// this is so we can utilize the `useDocumentInfo` hook in the `Content` component\n// this drawer is used for both creating and editing documents\n// this means that the `id` may be unknown until the document is created\nexport const DocumentDrawerContent: React.FC<DocumentDrawerProps> = (props) => {\n const { id: idFromProps, collectionSlug, onSave: onSaveFromProps } = props\n const [collectionConfig] = useRelatedCollections(collectionSlug)\n const [id, setId] = useState<null | number | string>(idFromProps)\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n async (args) => {\n setId(args.doc.id)\n\n if (typeof onSaveFromProps === 'function') {\n void onSaveFromProps({\n ...args,\n collectionConfig,\n })\n }\n },\n [onSaveFromProps, collectionConfig],\n )\n\n return (\n <FieldPathProvider path=\"\" schemaPath={collectionSlug}>\n <Content {...props} id={id} onSave={onSave} />\n </FieldPathProvider>\n )\n}\n"],"names":["facelessUIImport","getTranslation","queryString","React","useCallback","useEffect","useRef","useState","toast","FieldPathProvider","useFieldPath","useRelatedCollections","usePayloadAPI","X","useComponentMap","useConfig","DocumentInfoProvider","useFormQueryParams","useLocale","useTranslation","getFormState","Gutter","IDLabel","LoadingOverlay","baseClass","Content","id","Header","collectionSlug","drawerSlug","onSave","useModal","config","routes","api","apiRoute","serverURL","closeModal","modalState","toggleModal","locale","initialState","setInitialState","i18n","t","hasInitializedState","isOpen","setIsOpen","collectionConfig","formQueryParams","formattedQueryParams","stringify","fields","fieldsFromConfig","schemaPath","componentMap","Edit","initialID","data","isError","isLoading","isLoadingDocument","current","initialParams","depth","draft","Boolean","error","errors","message","isEditing","apiURL","code","action","getInitialState","result","body","operation","BeforeDocument","className","div","h2","label","labels","singular","button","aria-label","onClick","type","toString","slug","disableActions","disableLeaveWithoutSaving","initialData","DocumentDrawerContent","props","idFromProps","onSaveFromProps","setId","args","doc","path"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport type { FormState } from 'payload/types'\n\nimport * as facelessUIImport from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport queryString from 'qs'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport type { DocumentDrawerProps } from './types.js'\n\nimport { FieldPathProvider, useFieldPath } from '../../forms/FieldPathProvider/index.js'\nimport { useRelatedCollections } from '../../forms/fields/Relationship/AddNew/useRelatedCollections.js'\nimport usePayloadAPI from '../../hooks/usePayloadAPI.js'\nimport { X } from '../../icons/X/index.js'\nimport { useAuth } from '../../index.js'\nimport { useComponentMap } from '../../providers/ComponentMapProvider/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider } from '../../providers/DocumentInfo/index.js'\nimport { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { getFormState } from '../../utilities/getFormState.js'\nimport { Gutter } from '../Gutter/index.js'\nimport IDLabel from '../IDLabel/index.js'\nimport { LoadingOverlay } from '../Loading/index.js'\nimport { baseClass } from './index.js'\n\nconst Content: React.FC<DocumentDrawerProps> = ({\n id,\n Header,\n collectionSlug,\n drawerSlug,\n onSave,\n}) => {\n const { useModal } = facelessUIImport\n\n const config = useConfig()\n\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const { closeModal, modalState, toggleModal } = useModal()\n const locale = useLocale()\n const [initialState, setInitialState] = useState<FormState>()\n const { i18n, t } = useTranslation()\n const hasInitializedState = useRef(false)\n const [isOpen, setIsOpen] = useState(false)\n const [collectionConfig] = useRelatedCollections(collectionSlug)\n const { formQueryParams } = useFormQueryParams()\n const formattedQueryParams = queryString.stringify(formQueryParams)\n\n const { permissions } = useAuth()\n\n const { schemaPath } = useFieldPath()\n\n const { componentMap } = useComponentMap()\n\n const { Edit } = componentMap[`${collectionSlug ? 'collections' : 'globals'}`][collectionSlug]\n\n // no need to an additional requests when creating new documents\n const initialID = useRef(id)\n\n const [{ data, isError, isLoading: isLoadingDocument }] = usePayloadAPI(\n initialID.current ? `${serverURL}${apiRoute}/${collectionSlug}/${initialID.current}` : null,\n { initialParams: { depth: 0, draft: 'true', 'fallback-locale': 'null' } },\n )\n\n useEffect(() => {\n setIsOpen(Boolean(modalState[drawerSlug]?.isOpen))\n }, [modalState, drawerSlug])\n\n useEffect(() => {\n if (isOpen && !isLoadingDocument && isError) {\n closeModal(drawerSlug)\n toast.error(data.errors?.[0].message || t('error:unspecific'))\n }\n }, [isError, t, isOpen, data, drawerSlug, closeModal, isLoadingDocument])\n\n const isEditing = Boolean(id)\n\n const apiURL = id ? `${serverURL}${apiRoute}/${collectionSlug}/${id}?locale=${locale.code}` : null\n\n const action = `${serverURL}${apiRoute}/${collectionSlug}${\n isEditing ? `/${id}` : ''\n }?${formattedQueryParams}`\n\n // const hasSavePermission =\n // (isEditing && docPermissions?.update?.permission) ||\n // (!isEditing && (docPermissions as CollectionPermission)?.create?.permission)\n\n useEffect(() => {\n if (!hasInitializedState.current && (!initialID.current || (initialID.current && data))) {\n const getInitialState = async () => {\n const result = await getFormState({\n apiRoute,\n body: {\n id,\n collectionSlug,\n data: data || {},\n operation: isEditing ? 'update' : 'create',\n schemaPath,\n },\n serverURL,\n })\n\n setInitialState(result)\n hasInitializedState.current = true\n }\n\n void getInitialState()\n }\n }, [apiRoute, data, id, isEditing, schemaPath, serverURL, collectionSlug])\n\n if (isError) return null\n\n if (!initialState || isLoadingDocument) {\n return <LoadingOverlay />\n }\n\n const docPermissions = permissions?.collections[collectionSlug]\n\n return (\n <DocumentInfoProvider\n BeforeDocument={\n <Gutter className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-content`}>\n <h2 className={`${baseClass}__header-text`}>\n {Header ||\n t(!id ? 'fields:addNewLabel' : 'general:editLabel', {\n label: getTranslation(collectionConfig.labels.singular, i18n),\n })}\n </h2>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header-close`}\n onClick={() => toggleModal(drawerSlug)}\n type=\"button\"\n >\n <X />\n </button>\n </div>\n {id && <IDLabel id={id.toString()} />}\n </Gutter>\n }\n action={action}\n apiURL={apiURL}\n collectionSlug={collectionConfig.slug}\n disableActions\n disableLeaveWithoutSaving\n docPermissions={docPermissions}\n hasSavePermission={docPermissions?.update?.permission}\n // isLoading,\n id={id}\n initialData={data}\n initialState={initialState}\n isEditing={isEditing}\n // me: true,\n onSave={onSave}\n >\n {Edit}\n </DocumentInfoProvider>\n )\n}\n\n// First provide the document context using `DocumentInfoProvider`\n// this is so we can utilize the `useDocumentInfo` hook in the `Content` component\n// this drawer is used for both creating and editing documents\n// this means that the `id` may be unknown until the document is created\nexport const DocumentDrawerContent: React.FC<DocumentDrawerProps> = (props) => {\n const { id: idFromProps, collectionSlug, onSave: onSaveFromProps } = props\n const [collectionConfig] = useRelatedCollections(collectionSlug)\n const [id, setId] = useState<null | number | string>(idFromProps)\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n setId(args.doc.id)\n\n if (typeof onSaveFromProps === 'function') {\n void onSaveFromProps({\n ...args,\n collectionConfig,\n })\n }\n },\n [onSaveFromProps, collectionConfig],\n )\n\n return (\n <FieldPathProvider path=\"\" schemaPath={collectionSlug}>\n <Content {...props} id={id} onSave={onSave} />\n </FieldPathProvider>\n )\n}\n"],"names":["facelessUIImport","getTranslation","queryString","React","useCallback","useEffect","useRef","useState","toast","FieldPathProvider","useFieldPath","useRelatedCollections","usePayloadAPI","X","useAuth","useComponentMap","useConfig","DocumentInfoProvider","useFormQueryParams","useLocale","useTranslation","getFormState","Gutter","IDLabel","LoadingOverlay","baseClass","Content","id","Header","collectionSlug","drawerSlug","onSave","useModal","config","routes","api","apiRoute","serverURL","closeModal","modalState","toggleModal","locale","initialState","setInitialState","i18n","t","hasInitializedState","isOpen","setIsOpen","collectionConfig","formQueryParams","formattedQueryParams","stringify","permissions","schemaPath","componentMap","Edit","initialID","data","isError","isLoading","isLoadingDocument","current","initialParams","depth","draft","Boolean","error","errors","message","isEditing","apiURL","code","action","getInitialState","result","body","operation","docPermissions","collections","BeforeDocument","className","div","h2","label","labels","singular","button","aria-label","onClick","type","toString","slug","disableActions","disableLeaveWithoutSaving","hasSavePermission","update","permission","initialData","DocumentDrawerContent","props","idFromProps","onSaveFromProps","setId","args","doc","path"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildColumns.d.ts","sourceRoot":"","sources":["../../../src/elements/TableColumns/buildColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAIzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAK/C,eAAO,MAAM,YAAY,SAAU;IACjC,SAAS,EAAE,QAAQ,SAAS,CAAC,EAAE,CAAA;IAC/B,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;CAC7D,KAAG,MAAM,EAoFT,CAAA"}
1
+ {"version":3,"file":"buildColumns.d.ts","sourceRoot":"","sources":["../../../src/elements/TableColumns/buildColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAIzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAK/C,eAAO,MAAM,YAAY,SAAU;IACjC,SAAS,EAAE,QAAQ,SAAS,CAAC,EAAE,CAAA;IAC/B,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;CAC7D,KAAG,MAAM,EA+ET,CAAA"}
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { SelectAll } from '../SelectAll/index.js';
3
3
  import { SelectRow } from '../SelectRow/index.js';
4
4
  export const buildColumns = (args)=>{
5
- const { cellProps, columnPreferences, defaultColumns, enableRowSelections, fieldMap, useAsTitle } = args;
5
+ const { cellProps, columnPreferences, defaultColumns, enableRowSelections, fieldMap } = args;
6
6
  let sortedFieldMap = fieldMap;
7
7
  const sortTo = defaultColumns || columnPreferences;
8
8
  if (sortTo) {
@@ -17,7 +17,7 @@ export const buildColumns = (args)=>{
17
17
  return aIndex - bIndex;
18
18
  });
19
19
  }
20
- let numberOfActiveColumns = 0;
20
+ const activeColumnsIndices = [];
21
21
  const sorted = sortedFieldMap.reduce((acc, field, index)=>{
22
22
  const columnPreference = columnPreferences?.find((preference)=>preference.accessor === field.name);
23
23
  let active = false;
@@ -25,12 +25,13 @@ export const buildColumns = (args)=>{
25
25
  active = columnPreference.active;
26
26
  } else if (defaultColumns && Array.isArray(defaultColumns) && defaultColumns.length > 0) {
27
27
  active = defaultColumns.includes(field.name);
28
- } else if (numberOfActiveColumns < 4) {
28
+ } else if (activeColumnsIndices.length < 4) {
29
29
  active = true;
30
30
  }
31
- if (active) {
32
- numberOfActiveColumns += 1;
31
+ if (active && !activeColumnsIndices.includes(index)) {
32
+ activeColumnsIndices.push(index);
33
33
  }
34
+ const isFirstActiveColumn = activeColumnsIndices[0] === index;
34
35
  if (field) {
35
36
  const column = {
36
37
  name: field.name,
@@ -38,7 +39,7 @@ export const buildColumns = (args)=>{
38
39
  active,
39
40
  cellProps: {
40
41
  ...cellProps?.[index],
41
- link: numberOfActiveColumns === 1 && active && enableRowSelections || undefined
42
+ link: isFirstActiveColumn
42
43
  },
43
44
  components: {
44
45
  Cell: field.Cell,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/TableColumns/buildColumns.tsx"],"sourcesContent":["import type { CellProps, SanitizedCollectionConfig } from 'payload/types'\n\nimport React from 'react'\n\nimport type { ColumnPreferences } from '../../providers/ListInfo/types.js'\nimport type { FieldMap } from '../../utilities/buildComponentMap/types.js'\nimport type { Column } from '../Table/types.js'\n\nimport { SelectAll } from '../SelectAll/index.js'\nimport { SelectRow } from '../SelectRow/index.js'\n\nexport const buildColumns = (args: {\n cellProps: Partial<CellProps>[]\n columnPreferences: ColumnPreferences\n defaultColumns?: string[]\n enableRowSelections: boolean\n fieldMap: FieldMap\n useAsTitle: SanitizedCollectionConfig['admin']['useAsTitle']\n}): Column[] => {\n const {\n cellProps,\n columnPreferences,\n defaultColumns,\n enableRowSelections,\n fieldMap,\n useAsTitle,\n } = args\n\n let sortedFieldMap = fieldMap\n\n const sortTo = defaultColumns || columnPreferences\n\n if (sortTo) {\n // sort the fields to the order of `defaultColumns` or `columnPreferences`\n // TODO: flatten top level field, i.e. `flattenTopLevelField()` from `payload` but that is typed for `Field`, not `fieldMap`\n sortedFieldMap = fieldMap.sort((a, b) => {\n const aIndex = sortTo.findIndex((column) => column.accessor === a.name)\n const bIndex = sortTo.findIndex((column) => column.accessor === b.name)\n if (aIndex === -1 && bIndex === -1) return 0\n if (aIndex === -1) return 1\n if (bIndex === -1) return -1\n return aIndex - bIndex\n })\n }\n\n let numberOfActiveColumns = 0\n\n const sorted = sortedFieldMap.reduce((acc, field, index) => {\n const columnPreference = columnPreferences?.find(\n (preference) => preference.accessor === field.name,\n )\n\n let active = false\n\n if (columnPreference) {\n active = columnPreference.active\n } else if (defaultColumns && Array.isArray(defaultColumns) && defaultColumns.length > 0) {\n active = defaultColumns.includes(field.name)\n } else if (numberOfActiveColumns < 4) {\n active = true\n }\n\n if (active) {\n numberOfActiveColumns += 1\n }\n\n if (field) {\n const column: Column = {\n name: field.name,\n accessor: field.name,\n active,\n cellProps: {\n ...cellProps?.[index],\n link: (numberOfActiveColumns === 1 && active && enableRowSelections) || undefined,\n },\n components: {\n Cell: field.Cell,\n Heading: field.Heading,\n },\n label: field.label,\n }\n\n acc.push(column)\n }\n\n return acc\n }, [])\n\n if (enableRowSelections) {\n sorted.unshift({\n name: '',\n accessor: '_select',\n active: true,\n components: {\n Cell: <SelectRow />,\n Heading: <SelectAll />,\n },\n label: null,\n })\n }\n\n return sorted\n}\n"],"names":["React","SelectAll","SelectRow","buildColumns","args","cellProps","columnPreferences","defaultColumns","enableRowSelections","fieldMap","useAsTitle","sortedFieldMap","sortTo","sort","a","b","aIndex","findIndex","column","accessor","name","bIndex","numberOfActiveColumns","sorted","reduce","acc","field","index","columnPreference","find","preference","active","Array","isArray","length","includes","link","undefined","components","Cell","Heading","label","push","unshift"],"mappings":"AAEA,OAAOA,WAAW,QAAO;AAMzB,SAASC,SAAS,QAAQ,wBAAuB;AACjD,SAASC,SAAS,QAAQ,wBAAuB;AAEjD,OAAO,MAAMC,eAAe,CAACC;IAQ3B,MAAM,EACJC,SAAS,EACTC,iBAAiB,EACjBC,cAAc,EACdC,mBAAmB,EACnBC,QAAQ,EACRC,UAAU,EACX,GAAGN;IAEJ,IAAIO,iBAAiBF;IAErB,MAAMG,SAASL,kBAAkBD;IAEjC,IAAIM,QAAQ;QACV,0EAA0E;QAC1E,4HAA4H;QAC5HD,iBAAiBF,SAASI,IAAI,CAAC,CAACC,GAAGC;YACjC,MAAMC,SAASJ,OAAOK,SAAS,CAAC,CAACC,SAAWA,OAAOC,QAAQ,KAAKL,EAAEM,IAAI;YACtE,MAAMC,SAAST,OAAOK,SAAS,CAAC,CAACC,SAAWA,OAAOC,QAAQ,KAAKJ,EAAEK,IAAI;YACtE,IAAIJ,WAAW,CAAC,KAAKK,WAAW,CAAC,GAAG,OAAO;YAC3C,IAAIL,WAAW,CAAC,GAAG,OAAO;YAC1B,IAAIK,WAAW,CAAC,GAAG,OAAO,CAAC;YAC3B,OAAOL,SAASK;QAClB;IACF;IAEA,IAAIC,wBAAwB;IAE5B,MAAMC,SAASZ,eAAea,MAAM,CAAC,CAACC,KAAKC,OAAOC;QAChD,MAAMC,mBAAmBtB,mBAAmBuB,KAC1C,CAACC,aAAeA,WAAWX,QAAQ,KAAKO,MAAMN,IAAI;QAGpD,IAAIW,SAAS;QAEb,IAAIH,kBAAkB;YACpBG,SAASH,iBAAiBG,MAAM;QAClC,OAAO,IAAIxB,kBAAkByB,MAAMC,OAAO,CAAC1B,mBAAmBA,eAAe2B,MAAM,GAAG,GAAG;YACvFH,SAASxB,eAAe4B,QAAQ,CAACT,MAAMN,IAAI;QAC7C,OAAO,IAAIE,wBAAwB,GAAG;YACpCS,SAAS;QACX;QAEA,IAAIA,QAAQ;YACVT,yBAAyB;QAC3B;QAEA,IAAII,OAAO;YACT,MAAMR,SAAiB;gBACrBE,MAAMM,MAAMN,IAAI;gBAChBD,UAAUO,MAAMN,IAAI;gBACpBW;gBACA1B,WAAW;oBACT,GAAGA,WAAW,CAACsB,MAAM;oBACrBS,MAAM,AAACd,0BAA0B,KAAKS,UAAUvB,uBAAwB6B;gBAC1E;gBACAC,YAAY;oBACVC,MAAMb,MAAMa,IAAI;oBAChBC,SAASd,MAAMc,OAAO;gBACxB;gBACAC,OAAOf,MAAMe,KAAK;YACpB;YAEAhB,IAAIiB,IAAI,CAACxB;QACX;QAEA,OAAOO;IACT,GAAG,EAAE;IAEL,IAAIjB,qBAAqB;QACvBe,OAAOoB,OAAO,CAAC;YACbvB,MAAM;YACND,UAAU;YACVY,QAAQ;YACRO,YAAY;gBACVC,oBAAM,oBAACrC;gBACPsC,uBAAS,oBAACvC;YACZ;YACAwC,OAAO;QACT;IACF;IAEA,OAAOlB;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/elements/TableColumns/buildColumns.tsx"],"sourcesContent":["import type { CellProps, SanitizedCollectionConfig } from 'payload/types'\n\nimport React from 'react'\n\nimport type { ColumnPreferences } from '../../providers/ListInfo/types.js'\nimport type { FieldMap } from '../../utilities/buildComponentMap/types.js'\nimport type { Column } from '../Table/types.js'\n\nimport { SelectAll } from '../SelectAll/index.js'\nimport { SelectRow } from '../SelectRow/index.js'\n\nexport const buildColumns = (args: {\n cellProps: Partial<CellProps>[]\n columnPreferences: ColumnPreferences\n defaultColumns?: string[]\n enableRowSelections: boolean\n fieldMap: FieldMap\n useAsTitle: SanitizedCollectionConfig['admin']['useAsTitle']\n}): Column[] => {\n const { cellProps, columnPreferences, defaultColumns, enableRowSelections, fieldMap } = args\n\n let sortedFieldMap = fieldMap\n\n const sortTo = defaultColumns || columnPreferences\n\n if (sortTo) {\n // sort the fields to the order of `defaultColumns` or `columnPreferences`\n // TODO: flatten top level field, i.e. `flattenTopLevelField()` from `payload` but that is typed for `Field`, not `fieldMap`\n sortedFieldMap = fieldMap.sort((a, b) => {\n const aIndex = sortTo.findIndex((column) => column.accessor === a.name)\n const bIndex = sortTo.findIndex((column) => column.accessor === b.name)\n if (aIndex === -1 && bIndex === -1) return 0\n if (aIndex === -1) return 1\n if (bIndex === -1) return -1\n return aIndex - bIndex\n })\n }\n\n const activeColumnsIndices = []\n\n const sorted = sortedFieldMap.reduce((acc, field, index) => {\n const columnPreference = columnPreferences?.find(\n (preference) => preference.accessor === field.name,\n )\n\n let active = false\n\n if (columnPreference) {\n active = columnPreference.active\n } else if (defaultColumns && Array.isArray(defaultColumns) && defaultColumns.length > 0) {\n active = defaultColumns.includes(field.name)\n } else if (activeColumnsIndices.length < 4) {\n active = true\n }\n\n if (active && !activeColumnsIndices.includes(index)) {\n activeColumnsIndices.push(index)\n }\n\n const isFirstActiveColumn = activeColumnsIndices[0] === index\n\n if (field) {\n const column: Column = {\n name: field.name,\n accessor: field.name,\n active,\n cellProps: {\n ...cellProps?.[index],\n link: isFirstActiveColumn,\n },\n components: {\n Cell: field.Cell,\n Heading: field.Heading,\n },\n label: field.label,\n }\n\n acc.push(column)\n }\n\n return acc\n }, [])\n\n if (enableRowSelections) {\n sorted.unshift({\n name: '',\n accessor: '_select',\n active: true,\n components: {\n Cell: <SelectRow />,\n Heading: <SelectAll />,\n },\n label: null,\n })\n }\n\n return sorted\n}\n"],"names":["React","SelectAll","SelectRow","buildColumns","args","cellProps","columnPreferences","defaultColumns","enableRowSelections","fieldMap","sortedFieldMap","sortTo","sort","a","b","aIndex","findIndex","column","accessor","name","bIndex","activeColumnsIndices","sorted","reduce","acc","field","index","columnPreference","find","preference","active","Array","isArray","length","includes","push","isFirstActiveColumn","link","components","Cell","Heading","label","unshift"],"mappings":"AAEA,OAAOA,WAAW,QAAO;AAMzB,SAASC,SAAS,QAAQ,wBAAuB;AACjD,SAASC,SAAS,QAAQ,wBAAuB;AAEjD,OAAO,MAAMC,eAAe,CAACC;IAQ3B,MAAM,EAAEC,SAAS,EAAEC,iBAAiB,EAAEC,cAAc,EAAEC,mBAAmB,EAAEC,QAAQ,EAAE,GAAGL;IAExF,IAAIM,iBAAiBD;IAErB,MAAME,SAASJ,kBAAkBD;IAEjC,IAAIK,QAAQ;QACV,0EAA0E;QAC1E,4HAA4H;QAC5HD,iBAAiBD,SAASG,IAAI,CAAC,CAACC,GAAGC;YACjC,MAAMC,SAASJ,OAAOK,SAAS,CAAC,CAACC,SAAWA,OAAOC,QAAQ,KAAKL,EAAEM,IAAI;YACtE,MAAMC,SAAST,OAAOK,SAAS,CAAC,CAACC,SAAWA,OAAOC,QAAQ,KAAKJ,EAAEK,IAAI;YACtE,IAAIJ,WAAW,CAAC,KAAKK,WAAW,CAAC,GAAG,OAAO;YAC3C,IAAIL,WAAW,CAAC,GAAG,OAAO;YAC1B,IAAIK,WAAW,CAAC,GAAG,OAAO,CAAC;YAC3B,OAAOL,SAASK;QAClB;IACF;IAEA,MAAMC,uBAAuB,EAAE;IAE/B,MAAMC,SAASZ,eAAea,MAAM,CAAC,CAACC,KAAKC,OAAOC;QAChD,MAAMC,mBAAmBrB,mBAAmBsB,KAC1C,CAACC,aAAeA,WAAWX,QAAQ,KAAKO,MAAMN,IAAI;QAGpD,IAAIW,SAAS;QAEb,IAAIH,kBAAkB;YACpBG,SAASH,iBAAiBG,MAAM;QAClC,OAAO,IAAIvB,kBAAkBwB,MAAMC,OAAO,CAACzB,mBAAmBA,eAAe0B,MAAM,GAAG,GAAG;YACvFH,SAASvB,eAAe2B,QAAQ,CAACT,MAAMN,IAAI;QAC7C,OAAO,IAAIE,qBAAqBY,MAAM,GAAG,GAAG;YAC1CH,SAAS;QACX;QAEA,IAAIA,UAAU,CAACT,qBAAqBa,QAAQ,CAACR,QAAQ;YACnDL,qBAAqBc,IAAI,CAACT;QAC5B;QAEA,MAAMU,sBAAsBf,oBAAoB,CAAC,EAAE,KAAKK;QAExD,IAAID,OAAO;YACT,MAAMR,SAAiB;gBACrBE,MAAMM,MAAMN,IAAI;gBAChBD,UAAUO,MAAMN,IAAI;gBACpBW;gBACAzB,WAAW;oBACT,GAAGA,WAAW,CAACqB,MAAM;oBACrBW,MAAMD;gBACR;gBACAE,YAAY;oBACVC,MAAMd,MAAMc,IAAI;oBAChBC,SAASf,MAAMe,OAAO;gBACxB;gBACAC,OAAOhB,MAAMgB,KAAK;YACpB;YAEAjB,IAAIW,IAAI,CAAClB;QACX;QAEA,OAAOO;IACT,GAAG,EAAE;IAEL,IAAIhB,qBAAqB;QACvBc,OAAOoB,OAAO,CAAC;YACbvB,MAAM;YACND,UAAU;YACVY,QAAQ;YACRQ,YAAY;gBACVC,oBAAM,oBAACrC;gBACPsC,uBAAS,oBAACvC;YACZ;YACAwC,OAAO;QACT;IACF;IAEA,OAAOnB;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"columnReducer.d.ts","sourceRoot":"","sources":["../../../src/elements/TableColumns/columnReducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,KAAK,MAAM,GAAG;IACZ,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,IAAI,EAAE,QAAQ,CAAA;CACf,CAAA;AAED,KAAK,GAAG,GAAG;IACT,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;IACD,IAAI,EAAE,KAAK,CAAA;CACZ,CAAA;AAED,KAAK,IAAI,GAAG;IACV,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM,CAAA;AAExC,eAAO,MAAM,aAAa,UAAW,MAAM,EAAE,UAAU,MAAM,KAAG,MAAM,EAgCrE,CAAA"}
1
+ {"version":3,"file":"columnReducer.d.ts","sourceRoot":"","sources":["../../../src/elements/TableColumns/columnReducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,KAAK,MAAM,GAAG;IACZ,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,IAAI,EAAE,QAAQ,CAAA;CACf,CAAA;AAED,KAAK,GAAG,GAAG;IACT,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;IACD,IAAI,EAAE,KAAK,CAAA;CACZ,CAAA;AAED,KAAK,IAAI,GAAG;IACV,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM,CAAA;AAExC,eAAO,MAAM,aAAa,UAAW,MAAM,EAAE,UAAU,MAAM,KAAG,MAAM,EAyDrE,CAAA"}
@@ -1,4 +1,7 @@
1
1
  export const columnReducer = (state, action)=>{
2
+ let newState = [
3
+ ...state
4
+ ];
2
5
  switch(action.type){
3
6
  case 'toggle':
4
7
  {
@@ -12,7 +15,8 @@ export const columnReducer = (state, action)=>{
12
15
  }
13
16
  return col;
14
17
  });
15
- return withToggledColumn;
18
+ newState = withToggledColumn;
19
+ break;
16
20
  }
17
21
  case 'move':
18
22
  {
@@ -22,16 +26,34 @@ export const columnReducer = (state, action)=>{
22
26
  ];
23
27
  const [columnToMove] = withMovedColumn.splice(fromIndex, 1);
24
28
  withMovedColumn.splice(toIndex, 0, columnToMove);
25
- return withMovedColumn;
29
+ newState = withMovedColumn;
30
+ break;
26
31
  }
27
32
  case 'set':
28
33
  {
29
34
  const { columns } = action.payload;
30
- return columns;
35
+ newState = columns;
36
+ break;
31
37
  }
32
38
  default:
33
- return state;
39
+ break;
34
40
  }
41
+ const firstActiveColumnIndex = newState.findIndex((column, index)=>{
42
+ if (column.active && column.accessor !== '_select') {
43
+ return index;
44
+ }
45
+ });
46
+ const withFirstLink = newState.map((column, index)=>{
47
+ const isFirstActiveColumn = column.active && firstActiveColumnIndex === index;
48
+ return {
49
+ ...column,
50
+ cellProps: {
51
+ ...column.cellProps,
52
+ link: isFirstActiveColumn
53
+ }
54
+ };
55
+ }, []);
56
+ return withFirstLink;
35
57
  };
36
58
 
37
59
  //# sourceMappingURL=columnReducer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/TableColumns/columnReducer.ts"],"sourcesContent":["import type { Column } from '../Table/types.js'\n\ntype TOGGLE = {\n payload: {\n column: string\n }\n type: 'toggle'\n}\n\ntype SET = {\n payload: {\n columns: Column[]\n }\n type: 'set'\n}\n\ntype MOVE = {\n payload: {\n fromIndex: number\n toIndex: number\n }\n type: 'move'\n}\n\nexport type Action = MOVE | SET | TOGGLE\n\nexport const columnReducer = (state: Column[], action: Action): Column[] => {\n switch (action.type) {\n case 'toggle': {\n const { column } = action.payload\n\n const withToggledColumn = state.map((col) => {\n if (col?.name === column) {\n return {\n ...col,\n active: !col.active,\n }\n }\n\n return col\n })\n\n return withToggledColumn\n }\n case 'move': {\n const { fromIndex, toIndex } = action.payload\n const withMovedColumn = [...state]\n const [columnToMove] = withMovedColumn.splice(fromIndex, 1)\n withMovedColumn.splice(toIndex, 0, columnToMove)\n return withMovedColumn\n }\n case 'set': {\n const { columns } = action.payload\n return columns\n }\n default:\n return state\n }\n}\n"],"names":["columnReducer","state","action","type","column","payload","withToggledColumn","map","col","name","active","fromIndex","toIndex","withMovedColumn","columnToMove","splice","columns"],"mappings":"AA0BA,OAAO,MAAMA,gBAAgB,CAACC,OAAiBC;IAC7C,OAAQA,OAAOC,IAAI;QACjB,KAAK;YAAU;gBACb,MAAM,EAAEC,MAAM,EAAE,GAAGF,OAAOG,OAAO;gBAEjC,MAAMC,oBAAoBL,MAAMM,GAAG,CAAC,CAACC;oBACnC,IAAIA,KAAKC,SAASL,QAAQ;wBACxB,OAAO;4BACL,GAAGI,GAAG;4BACNE,QAAQ,CAACF,IAAIE,MAAM;wBACrB;oBACF;oBAEA,OAAOF;gBACT;gBAEA,OAAOF;YACT;QACA,KAAK;YAAQ;gBACX,MAAM,EAAEK,SAAS,EAAEC,OAAO,EAAE,GAAGV,OAAOG,OAAO;gBAC7C,MAAMQ,kBAAkB;uBAAIZ;iBAAM;gBAClC,MAAM,CAACa,aAAa,GAAGD,gBAAgBE,MAAM,CAACJ,WAAW;gBACzDE,gBAAgBE,MAAM,CAACH,SAAS,GAAGE;gBACnC,OAAOD;YACT;QACA,KAAK;YAAO;gBACV,MAAM,EAAEG,OAAO,EAAE,GAAGd,OAAOG,OAAO;gBAClC,OAAOW;YACT;QACA;YACE,OAAOf;IACX;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/elements/TableColumns/columnReducer.ts"],"sourcesContent":["import type { Column } from '../Table/types.js'\n\ntype TOGGLE = {\n payload: {\n column: string\n }\n type: 'toggle'\n}\n\ntype SET = {\n payload: {\n columns: Column[]\n }\n type: 'set'\n}\n\ntype MOVE = {\n payload: {\n fromIndex: number\n toIndex: number\n }\n type: 'move'\n}\n\nexport type Action = MOVE | SET | TOGGLE\n\nexport const columnReducer = (state: Column[], action: Action): Column[] => {\n let newState = [...state]\n\n switch (action.type) {\n case 'toggle': {\n const { column } = action.payload\n\n const withToggledColumn = state.map((col) => {\n if (col?.name === column) {\n return {\n ...col,\n active: !col.active,\n }\n }\n\n return col\n })\n\n newState = withToggledColumn\n break\n }\n case 'move': {\n const { fromIndex, toIndex } = action.payload\n const withMovedColumn = [...state]\n const [columnToMove] = withMovedColumn.splice(fromIndex, 1)\n withMovedColumn.splice(toIndex, 0, columnToMove)\n newState = withMovedColumn\n break\n }\n case 'set': {\n const { columns } = action.payload\n newState = columns\n break\n }\n default:\n break\n }\n\n const firstActiveColumnIndex = newState.findIndex((column, index) => {\n if (column.active && column.accessor !== '_select') {\n return index\n }\n })\n\n const withFirstLink = newState.map((column, index) => {\n const isFirstActiveColumn = column.active && firstActiveColumnIndex === index\n\n return {\n ...column,\n cellProps: {\n ...column.cellProps,\n link: isFirstActiveColumn,\n },\n }\n }, [])\n\n return withFirstLink\n}\n"],"names":["columnReducer","state","action","newState","type","column","payload","withToggledColumn","map","col","name","active","fromIndex","toIndex","withMovedColumn","columnToMove","splice","columns","firstActiveColumnIndex","findIndex","index","accessor","withFirstLink","isFirstActiveColumn","cellProps","link"],"mappings":"AA0BA,OAAO,MAAMA,gBAAgB,CAACC,OAAiBC;IAC7C,IAAIC,WAAW;WAAIF;KAAM;IAEzB,OAAQC,OAAOE,IAAI;QACjB,KAAK;YAAU;gBACb,MAAM,EAAEC,MAAM,EAAE,GAAGH,OAAOI,OAAO;gBAEjC,MAAMC,oBAAoBN,MAAMO,GAAG,CAAC,CAACC;oBACnC,IAAIA,KAAKC,SAASL,QAAQ;wBACxB,OAAO;4BACL,GAAGI,GAAG;4BACNE,QAAQ,CAACF,IAAIE,MAAM;wBACrB;oBACF;oBAEA,OAAOF;gBACT;gBAEAN,WAAWI;gBACX;YACF;QACA,KAAK;YAAQ;gBACX,MAAM,EAAEK,SAAS,EAAEC,OAAO,EAAE,GAAGX,OAAOI,OAAO;gBAC7C,MAAMQ,kBAAkB;uBAAIb;iBAAM;gBAClC,MAAM,CAACc,aAAa,GAAGD,gBAAgBE,MAAM,CAACJ,WAAW;gBACzDE,gBAAgBE,MAAM,CAACH,SAAS,GAAGE;gBACnCZ,WAAWW;gBACX;YACF;QACA,KAAK;YAAO;gBACV,MAAM,EAAEG,OAAO,EAAE,GAAGf,OAAOI,OAAO;gBAClCH,WAAWc;gBACX;YACF;QACA;YACE;IACJ;IAEA,MAAMC,yBAAyBf,SAASgB,SAAS,CAAC,CAACd,QAAQe;QACzD,IAAIf,OAAOM,MAAM,IAAIN,OAAOgB,QAAQ,KAAK,WAAW;YAClD,OAAOD;QACT;IACF;IAEA,MAAME,gBAAgBnB,SAASK,GAAG,CAAC,CAACH,QAAQe;QAC1C,MAAMG,sBAAsBlB,OAAOM,MAAM,IAAIO,2BAA2BE;QAExE,OAAO;YACL,GAAGf,MAAM;YACTmB,WAAW;gBACT,GAAGnB,OAAOmB,SAAS;gBACnBC,MAAMF;YACR;QACF;IACF,GAAG,EAAE;IAEL,OAAOD;AACT,EAAC"}
@@ -53,7 +53,7 @@ export const TableColumnsProvider = ({ cellProps, children, collectionSlug, enab
53
53
  }
54
54
  }
55
55
  };
56
- sync();
56
+ void sync();
57
57
  }, [
58
58
  preferenceKey,
59
59
  getPreference,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/TableColumns/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig } from 'payload/types'\nimport type { CellProps } from 'payload/types'\n\nimport React, { createContext, useCallback, useContext, useEffect, useReducer, useRef } from 'react'\n\nimport type { ColumnPreferences } from '../../providers/ListInfo/types.js'\nimport type { Column } from '../Table/types.js'\nimport type { Action } from './columnReducer.js'\n\nimport { useComponentMap } from '../../providers/ComponentMapProvider/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { buildColumns } from './buildColumns.js'\nimport { columnReducer } from './columnReducer.js'\n\nexport interface ITableColumns {\n columns: Column[]\n dispatchTableColumns: React.Dispatch<Action>\n moveColumn: (args: { fromIndex: number; toIndex: number }) => void\n setActiveColumns: (columns: string[]) => void\n toggleColumn: (column: string) => void\n}\n\nexport const TableColumnContext = createContext<ITableColumns>({} as ITableColumns)\n\nexport const useTableColumns = (): ITableColumns => useContext(TableColumnContext)\n\nexport type ListPreferences = {\n columns: ColumnPreferences\n}\n\nexport const TableColumnsProvider: React.FC<{\n cellProps?: Partial<CellProps>[]\n children: React.ReactNode\n collectionSlug: string\n enableRowSelections?: boolean\n listPreferences: ListPreferences\n}> = ({ cellProps, children, collectionSlug, enableRowSelections = false, listPreferences }) => {\n const config = useConfig()\n\n const { componentMap } = useComponentMap()\n\n const { fieldMap } = componentMap.collections[collectionSlug]\n\n const collectionConfig = config.collections.find(\n (collectionConfig) => collectionConfig.slug === collectionSlug,\n )\n\n const {\n admin: { defaultColumns, useAsTitle },\n } = collectionConfig\n\n const preferenceKey = `${collectionSlug}-list`\n const prevCollection = useRef<SanitizedCollectionConfig['slug']>(collectionSlug)\n const hasInitialized = useRef(false)\n const { getPreference, setPreference } = usePreferences()\n\n const [tableColumns, dispatchTableColumns] = useReducer(columnReducer, {}, () => {\n return buildColumns({\n cellProps,\n columnPreferences: listPreferences?.columns,\n defaultColumns,\n enableRowSelections,\n fieldMap,\n useAsTitle,\n })\n })\n\n // /////////////////////////////////////\n // Get preferences on collection change\n // /////////////////////////////////////\n\n useEffect(() => {\n const sync = async () => {\n const collectionHasChanged = prevCollection.current !== collectionSlug\n\n if (collectionHasChanged) {\n const currentPreferences = await getPreference<{\n columns: ColumnPreferences\n }>(preferenceKey)\n prevCollection.current = collectionSlug\n\n if (currentPreferences.columns) {\n dispatchTableColumns({\n type: 'set',\n payload: {\n columns: buildColumns({\n cellProps,\n columnPreferences: currentPreferences?.columns,\n defaultColumns,\n enableRowSelections: true,\n fieldMap,\n useAsTitle,\n }),\n },\n })\n }\n }\n }\n\n sync()\n }, [\n preferenceKey,\n getPreference,\n collectionSlug,\n fieldMap,\n cellProps,\n defaultColumns,\n useAsTitle,\n ])\n\n // /////////////////////////////////////\n // Set preferences on column change\n // /////////////////////////////////////\n\n useEffect(() => {\n if (!hasInitialized.current) {\n hasInitialized.current = true\n return\n }\n\n const columns = tableColumns.map((c) => ({\n accessor: c?.accessor,\n active: c?.active,\n }))\n\n void setPreference(preferenceKey, { columns }, true)\n }, [tableColumns, preferenceKey, setPreference])\n\n const setActiveColumns = useCallback(\n (columns: string[]) => {\n // dispatchTableColumns({\n // type: 'set',\n // payload: {\n // // onSelect,\n // cellProps,\n // collection: { ...collectionConfig, fields: formatFields(collectionConfig) },\n // columns: columns.map((column) => ({\n // accessor: column,\n // active: true,\n // })),\n // i18n,\n // },\n // })\n },\n [collectionConfig, cellProps],\n )\n\n const moveColumn = useCallback(\n (args: { fromIndex: number; toIndex: number }) => {\n const { fromIndex, toIndex } = args\n\n dispatchTableColumns({\n type: 'move',\n payload: {\n fromIndex,\n toIndex,\n },\n })\n },\n [dispatchTableColumns],\n )\n\n const toggleColumn = useCallback(\n (column: string) => {\n dispatchTableColumns({\n type: 'toggle',\n payload: {\n column,\n },\n })\n },\n [dispatchTableColumns],\n )\n\n return (\n <TableColumnContext.Provider\n value={{\n columns: tableColumns,\n dispatchTableColumns,\n moveColumn,\n setActiveColumns,\n toggleColumn,\n }}\n >\n {children}\n </TableColumnContext.Provider>\n )\n}\n"],"names":["React","createContext","useCallback","useContext","useEffect","useReducer","useRef","useComponentMap","useConfig","usePreferences","buildColumns","columnReducer","TableColumnContext","useTableColumns","TableColumnsProvider","cellProps","children","collectionSlug","enableRowSelections","listPreferences","config","componentMap","fieldMap","collections","collectionConfig","find","slug","admin","defaultColumns","useAsTitle","preferenceKey","prevCollection","hasInitialized","getPreference","setPreference","tableColumns","dispatchTableColumns","columnPreferences","columns","sync","collectionHasChanged","current","currentPreferences","type","payload","map","c","accessor","active","setActiveColumns","moveColumn","args","fromIndex","toIndex","toggleColumn","column","Provider","value"],"mappings":"AAAA;AAIA,OAAOA,SAASC,aAAa,EAAEC,WAAW,EAAEC,UAAU,EAAEC,SAAS,EAAEC,UAAU,EAAEC,MAAM,QAAQ,QAAO;AAMpG,SAASC,eAAe,QAAQ,gDAA+C;AAC/E,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,aAAa,QAAQ,qBAAoB;AAUlD,OAAO,MAAMC,mCAAqBX,cAA6B,CAAC,GAAmB;AAEnF,OAAO,MAAMY,kBAAkB,IAAqBV,WAAWS,oBAAmB;AAMlF,OAAO,MAAME,uBAMR,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,cAAc,EAAEC,sBAAsB,KAAK,EAAEC,eAAe,EAAE;IACzF,MAAMC,SAASZ;IAEf,MAAM,EAAEa,YAAY,EAAE,GAAGd;IAEzB,MAAM,EAAEe,QAAQ,EAAE,GAAGD,aAAaE,WAAW,CAACN,eAAe;IAE7D,MAAMO,mBAAmBJ,OAAOG,WAAW,CAACE,IAAI,CAC9C,CAACD,mBAAqBA,iBAAiBE,IAAI,KAAKT;IAGlD,MAAM,EACJU,OAAO,EAAEC,cAAc,EAAEC,UAAU,EAAE,EACtC,GAAGL;IAEJ,MAAMM,gBAAgB,CAAC,EAAEb,eAAe,KAAK,CAAC;IAC9C,MAAMc,iBAAiBzB,OAA0CW;IACjE,MAAMe,iBAAiB1B,OAAO;IAC9B,MAAM,EAAE2B,aAAa,EAAEC,aAAa,EAAE,GAAGzB;IAEzC,MAAM,CAAC0B,cAAcC,qBAAqB,GAAG/B,WAAWM,eAAe,CAAC,GAAG;QACzE,OAAOD,aAAa;YAClBK;YACAsB,mBAAmBlB,iBAAiBmB;YACpCV;YACAV;YACAI;YACAO;QACF;IACF;IAEA,wCAAwC;IACxC,uCAAuC;IACvC,wCAAwC;IAExCzB,UAAU;QACR,MAAMmC,OAAO;YACX,MAAMC,uBAAuBT,eAAeU,OAAO,KAAKxB;YAExD,IAAIuB,sBAAsB;gBACxB,MAAME,qBAAqB,MAAMT,cAE9BH;gBACHC,eAAeU,OAAO,GAAGxB;gBAEzB,IAAIyB,mBAAmBJ,OAAO,EAAE;oBAC9BF,qBAAqB;wBACnBO,MAAM;wBACNC,SAAS;4BACPN,SAAS5B,aAAa;gCACpBK;gCACAsB,mBAAmBK,oBAAoBJ;gCACvCV;gCACAV,qBAAqB;gCACrBI;gCACAO;4BACF;wBACF;oBACF;gBACF;YACF;QACF;QAEAU;IACF,GAAG;QACDT;QACAG;QACAhB;QACAK;QACAP;QACAa;QACAC;KACD;IAED,wCAAwC;IACxC,mCAAmC;IACnC,wCAAwC;IAExCzB,UAAU;QACR,IAAI,CAAC4B,eAAeS,OAAO,EAAE;YAC3BT,eAAeS,OAAO,GAAG;YACzB;QACF;QAEA,MAAMH,UAAUH,aAAaU,GAAG,CAAC,CAACC,IAAO,CAAA;gBACvCC,UAAUD,GAAGC;gBACbC,QAAQF,GAAGE;YACb,CAAA;QAEA,KAAKd,cAAcJ,eAAe;YAAEQ;QAAQ,GAAG;IACjD,GAAG;QAACH;QAAcL;QAAeI;KAAc;IAE/C,MAAMe,mBAAmB/C,YACvB,CAACoC;IACC,yBAAyB;IACzB,iBAAiB;IACjB,eAAe;IACf,mBAAmB;IACnB,iBAAiB;IACjB,mFAAmF;IACnF,0CAA0C;IAC1C,0BAA0B;IAC1B,sBAAsB;IACtB,WAAW;IACX,YAAY;IACZ,OAAO;IACP,KAAK;IACP,GACA;QAACd;QAAkBT;KAAU;IAG/B,MAAMmC,aAAahD,YACjB,CAACiD;QACC,MAAM,EAAEC,SAAS,EAAEC,OAAO,EAAE,GAAGF;QAE/Bf,qBAAqB;YACnBO,MAAM;YACNC,SAAS;gBACPQ;gBACAC;YACF;QACF;IACF,GACA;QAACjB;KAAqB;IAGxB,MAAMkB,eAAepD,YACnB,CAACqD;QACCnB,qBAAqB;YACnBO,MAAM;YACNC,SAAS;gBACPW;YACF;QACF;IACF,GACA;QAACnB;KAAqB;IAGxB,qBACE,oBAACxB,mBAAmB4C,QAAQ;QAC1BC,OAAO;YACLnB,SAASH;YACTC;YACAc;YACAD;YACAK;QACF;OAECtC;AAGP,EAAC"}
1
+ {"version":3,"sources":["../../../src/elements/TableColumns/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig } from 'payload/types'\nimport type { CellProps } from 'payload/types'\n\nimport React, { createContext, useCallback, useContext, useEffect, useReducer, useRef } from 'react'\n\nimport type { ColumnPreferences } from '../../providers/ListInfo/types.js'\nimport type { Column } from '../Table/types.js'\nimport type { Action } from './columnReducer.js'\n\nimport { useComponentMap } from '../../providers/ComponentMapProvider/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { buildColumns } from './buildColumns.js'\nimport { columnReducer } from './columnReducer.js'\n\nexport interface ITableColumns {\n columns: Column[]\n dispatchTableColumns: React.Dispatch<Action>\n moveColumn: (args: { fromIndex: number; toIndex: number }) => void\n setActiveColumns: (columns: string[]) => void\n toggleColumn: (column: string) => void\n}\n\nexport const TableColumnContext = createContext<ITableColumns>({} as ITableColumns)\n\nexport const useTableColumns = (): ITableColumns => useContext(TableColumnContext)\n\nexport type ListPreferences = {\n columns: ColumnPreferences\n}\n\nexport const TableColumnsProvider: React.FC<{\n cellProps?: Partial<CellProps>[]\n children: React.ReactNode\n collectionSlug: string\n enableRowSelections?: boolean\n listPreferences: ListPreferences\n}> = ({ cellProps, children, collectionSlug, enableRowSelections = false, listPreferences }) => {\n const config = useConfig()\n\n const { componentMap } = useComponentMap()\n\n const { fieldMap } = componentMap.collections[collectionSlug]\n\n const collectionConfig = config.collections.find(\n (collectionConfig) => collectionConfig.slug === collectionSlug,\n )\n\n const {\n admin: { defaultColumns, useAsTitle },\n } = collectionConfig\n\n const preferenceKey = `${collectionSlug}-list`\n const prevCollection = useRef<SanitizedCollectionConfig['slug']>(collectionSlug)\n const hasInitialized = useRef(false)\n const { getPreference, setPreference } = usePreferences()\n\n const [tableColumns, dispatchTableColumns] = useReducer(columnReducer, {}, () => {\n return buildColumns({\n cellProps,\n columnPreferences: listPreferences?.columns,\n defaultColumns,\n enableRowSelections,\n fieldMap,\n useAsTitle,\n })\n })\n\n // /////////////////////////////////////\n // Get preferences on collection change\n // /////////////////////////////////////\n\n useEffect(() => {\n const sync = async () => {\n const collectionHasChanged = prevCollection.current !== collectionSlug\n\n if (collectionHasChanged) {\n const currentPreferences = await getPreference<{\n columns: ColumnPreferences\n }>(preferenceKey)\n prevCollection.current = collectionSlug\n\n if (currentPreferences.columns) {\n dispatchTableColumns({\n type: 'set',\n payload: {\n columns: buildColumns({\n cellProps,\n columnPreferences: currentPreferences?.columns,\n defaultColumns,\n enableRowSelections: true,\n fieldMap,\n useAsTitle,\n }),\n },\n })\n }\n }\n }\n\n void sync()\n }, [\n preferenceKey,\n getPreference,\n collectionSlug,\n fieldMap,\n cellProps,\n defaultColumns,\n useAsTitle,\n ])\n\n // /////////////////////////////////////\n // Set preferences on column change\n // /////////////////////////////////////\n\n useEffect(() => {\n if (!hasInitialized.current) {\n hasInitialized.current = true\n return\n }\n\n const columns = tableColumns.map((c) => ({\n accessor: c?.accessor,\n active: c?.active,\n }))\n\n void setPreference(preferenceKey, { columns }, true)\n }, [tableColumns, preferenceKey, setPreference])\n\n const setActiveColumns = useCallback(\n (columns: string[]) => {\n // dispatchTableColumns({\n // type: 'set',\n // payload: {\n // // onSelect,\n // cellProps,\n // collection: { ...collectionConfig, fields: formatFields(collectionConfig) },\n // columns: columns.map((column) => ({\n // accessor: column,\n // active: true,\n // })),\n // i18n,\n // },\n // })\n },\n [collectionConfig, cellProps],\n )\n\n const moveColumn = useCallback(\n (args: { fromIndex: number; toIndex: number }) => {\n const { fromIndex, toIndex } = args\n\n dispatchTableColumns({\n type: 'move',\n payload: {\n fromIndex,\n toIndex,\n },\n })\n },\n [dispatchTableColumns],\n )\n\n const toggleColumn = useCallback(\n (column: string) => {\n dispatchTableColumns({\n type: 'toggle',\n payload: {\n column,\n },\n })\n },\n [dispatchTableColumns],\n )\n\n return (\n <TableColumnContext.Provider\n value={{\n columns: tableColumns,\n dispatchTableColumns,\n moveColumn,\n setActiveColumns,\n toggleColumn,\n }}\n >\n {children}\n </TableColumnContext.Provider>\n )\n}\n"],"names":["React","createContext","useCallback","useContext","useEffect","useReducer","useRef","useComponentMap","useConfig","usePreferences","buildColumns","columnReducer","TableColumnContext","useTableColumns","TableColumnsProvider","cellProps","children","collectionSlug","enableRowSelections","listPreferences","config","componentMap","fieldMap","collections","collectionConfig","find","slug","admin","defaultColumns","useAsTitle","preferenceKey","prevCollection","hasInitialized","getPreference","setPreference","tableColumns","dispatchTableColumns","columnPreferences","columns","sync","collectionHasChanged","current","currentPreferences","type","payload","map","c","accessor","active","setActiveColumns","moveColumn","args","fromIndex","toIndex","toggleColumn","column","Provider","value"],"mappings":"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"}
@@ -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,CAkiBzB,CAAA;AAED,eAAe,IAAI,CAAA"}
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,CAgiBzB,CAAA;AAGD,eAAe,IAAI,CAAA"}
@@ -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, getDocPreferences, globalSlug } = useDocumentInfo();
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.method : undefined;
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 getFieldStateByPath = useCallback(async ({ data, path })=>{
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 getFieldStateByPath({
355
+ const addFieldRow = useCallback(async ({ data, path, rowIndex, schemaPath })=>{
356
+ const subFieldState = await getFieldStateBySchemaPath({
358
357
  data,
359
- path
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
- getFieldStateByPath,
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 getFieldStateByPath({
380
+ const replaceFieldRow = useCallback(async ({ data, path, rowIndex, schemaPath })=>{
381
+ const subFieldState = await getFieldStateBySchemaPath({
383
382
  data,
384
- path
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
- getFieldStateByPath,
393
+ getFieldStateBySchemaPath,
395
394
  dispatchFields
396
395
  ]);
397
396
  contextRef.current.submit = submit;
@@ -506,6 +505,7 @@ const Form = (props)=>{
506
505
  value: fieldsReducer
507
506
  }, children)))))));
508
507
  };
508
+ // eslint-disable-next-line no-restricted-exports
509
509
  export default Form;
510
510
 
511
511
  //# sourceMappingURL=index.js.map
@@ -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\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\n// eslint-disable-next-line no-restricted-exports\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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"}