@payloadcms/ui 3.66.0 → 3.67.0-internal.1ea538b

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/AddNewRelation/index.d.ts.map +1 -1
  2. package/dist/elements/AddNewRelation/index.js +3 -3
  3. package/dist/elements/AddNewRelation/index.js.map +1 -1
  4. package/dist/elements/ArrayAction/index.d.ts +6 -6
  5. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  6. package/dist/elements/ArrayAction/index.js +8 -8
  7. package/dist/elements/ArrayAction/index.js.map +1 -1
  8. package/dist/elements/Autosave/index.d.ts.map +1 -1
  9. package/dist/elements/Autosave/index.js +5 -9
  10. package/dist/elements/Autosave/index.js.map +1 -1
  11. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  12. package/dist/elements/DocumentControls/index.js +9 -9
  13. package/dist/elements/DocumentControls/index.js.map +1 -1
  14. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  15. package/dist/elements/PublishButton/index.js +5 -6
  16. package/dist/elements/PublishButton/index.js.map +1 -1
  17. package/dist/elements/withMergedProps/index.d.ts +1 -1
  18. package/dist/elements/withMergedProps/index.js +1 -1
  19. package/dist/elements/withMergedProps/index.js.map +1 -1
  20. package/dist/exports/client/index.d.ts +2 -0
  21. package/dist/exports/client/index.d.ts.map +1 -1
  22. package/dist/exports/client/index.js +12 -12
  23. package/dist/exports/client/index.js.map +3 -3
  24. package/dist/exports/shared/index.js.map +1 -1
  25. package/dist/fields/Array/ArrayRow.d.ts +18 -7
  26. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  27. package/dist/fields/Array/ArrayRow.js +65 -133
  28. package/dist/fields/Array/ArrayRow.js.map +1 -1
  29. package/dist/fields/Array/index.d.ts.map +1 -1
  30. package/dist/fields/Array/index.js +10 -3
  31. package/dist/fields/Array/index.js.map +1 -1
  32. package/dist/forms/Form/index.d.ts.map +1 -1
  33. package/dist/forms/Form/index.js +2 -2
  34. package/dist/forms/Form/index.js.map +1 -1
  35. package/dist/views/Edit/index.d.ts.map +1 -1
  36. package/dist/views/Edit/index.js +3 -3
  37. package/dist/views/Edit/index.js.map +1 -1
  38. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/AddNewRelation/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAqD,MAAM,OAAO,CAAA;AAGzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAWvC,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA0M1C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/AddNewRelation/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAqD,MAAM,OAAO,CAAA;AAGzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAUvC,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwM1C,CAAA"}
@@ -3,6 +3,7 @@
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  import { getTranslation } from '@payloadcms/translations';
6
+ import { hasAutosaveEnabled } from 'payload/shared';
6
7
  import React, { Fragment, useCallback, useEffect, useState } from 'react';
7
8
  import { useRelatedCollections } from '../../hooks/useRelatedCollections.js';
8
9
  import { PlusIcon } from '../../icons/Plus/index.js';
@@ -12,8 +13,8 @@ import { Button } from '../Button/index.js';
12
13
  import { useDocumentDrawer } from '../DocumentDrawer/index.js';
13
14
  import { Popup } from '../Popup/index.js';
14
15
  import * as PopupList from '../Popup/PopupButtonList/index.js';
15
- import { Tooltip } from '../Tooltip/index.js';
16
16
  import './index.scss';
17
+ import { Tooltip } from '../Tooltip/index.js';
17
18
  const baseClass = 'relationship-add-new';
18
19
  export const AddNewRelation = t0 => {
19
20
  const $ = _c(47);
@@ -72,8 +73,7 @@ export const AddNewRelation = t0 => {
72
73
  doc,
73
74
  operation
74
75
  } = t6;
75
- const isAutosaveEnabled = typeof collectionConfig?.versions?.drafts === "object" ? collectionConfig.versions.drafts.autosave : false;
76
- if (operation === "create" || operation === "update" && isAutosaveEnabled) {
76
+ if (operation === "create" || operation === "update" && hasAutosaveEnabled(collectionConfig)) {
77
77
  let isNewValue;
78
78
  if (!value) {
79
79
  isNewValue = true;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","getTranslation","React","Fragment","useCallback","useEffect","useState","useRelatedCollections","PlusIcon","useAuth","useTranslation","Button","useDocumentDrawer","Popup","PopupList","Tooltip","baseClass","AddNewRelation","t0","$","ButtonFromProps","hasMany","onChange","path","relationTo","unstyled","value","relatedCollections","permissions","show","setShow","selectedCollection","setSelectedCollection","relatedToMany","length","t1","undefined","collectionConfig","setCollectionConfig","popupOpen","setPopupOpen","i18n","t","showTooltip","setShowTooltip","t2","slug","t3","collectionSlug","DocumentDrawer","DocumentDrawerToggler","t4","isDrawerOpen","toggleDrawer","t5","t6","doc","operation","isAutosaveEnabled","versions","drafts","autosave","isNewValue","some","v","id","Array","isArray","onSave","Symbol","for","state","onPopupToggle","t7","t8","collections","create","collection","t10","t9","find","collection_0","t11","t12","t13","t14","t15","labels","singular","t16","t17","bb0","label","_jsxs","className","children","_jsx","filter","Boolean","join","onClick","onMouseEnter","onMouseLeave","button","buttonStyle","tooltip","horizontalAlign","onToggleOpen","render","t18","close","closePopup","ButtonGroup","map","relatedCollection"],"sources":["../../../src/elements/AddNewRelation/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { Fragment, useCallback, useEffect, useState } from 'react'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\nimport type { Props } from './types.js'\n\nimport { useRelatedCollections } from '../../hooks/useRelatedCollections.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { useDocumentDrawer } from '../DocumentDrawer/index.js'\nimport { Popup } from '../Popup/index.js'\nimport * as PopupList from '../Popup/PopupButtonList/index.js'\nimport { Tooltip } from '../Tooltip/index.js'\nimport './index.scss'\n\nconst baseClass = 'relationship-add-new'\n\nexport const AddNewRelation: React.FC<Props> = ({\n Button: ButtonFromProps,\n hasMany,\n onChange,\n path,\n relationTo,\n unstyled,\n value,\n}) => {\n const relatedCollections = useRelatedCollections(relationTo)\n const { permissions } = useAuth()\n const [show, setShow] = useState(false)\n const [selectedCollection, setSelectedCollection] = useState<string>()\n\n const relatedToMany = relatedCollections.length > 1\n\n const [collectionConfig, setCollectionConfig] = useState<ClientCollectionConfig>(() =>\n !relatedToMany ? relatedCollections[0] : undefined,\n )\n\n const [popupOpen, setPopupOpen] = useState(false)\n const { i18n, t } = useTranslation()\n const [showTooltip, setShowTooltip] = useState(false)\n\n const [DocumentDrawer, DocumentDrawerToggler, { isDrawerOpen, toggleDrawer }] = useDocumentDrawer(\n {\n collectionSlug: collectionConfig?.slug,\n },\n )\n\n const onSave: DocumentDrawerContextType['onSave'] = useCallback(\n ({ doc, operation }) => {\n // if autosave is enabled, the operation will be 'update'\n const isAutosaveEnabled =\n typeof collectionConfig?.versions?.drafts === 'object'\n ? collectionConfig.versions.drafts.autosave\n : false\n\n if (operation === 'create' || (operation === 'update' && isAutosaveEnabled)) {\n // ensure the value is not already in the array\n let isNewValue = false\n if (!value) {\n isNewValue = true\n } else {\n isNewValue = Array.isArray(value)\n ? !value.some((v) => v && v.value === doc.id)\n : value.value !== doc.id\n }\n\n if (isNewValue) {\n if (hasMany === true) {\n onChange([\n ...(Array.isArray(value) ? value : []),\n {\n relationTo: collectionConfig?.slug,\n value: doc.id,\n },\n ])\n } else {\n onChange({\n relationTo: relatedCollections[0].slug,\n value: doc.id,\n })\n }\n }\n\n setSelectedCollection(undefined)\n }\n },\n [collectionConfig, hasMany, onChange, value, relatedCollections],\n )\n\n const onPopupToggle = useCallback((state) => {\n setPopupOpen(state)\n }, [])\n\n useEffect(() => {\n if (permissions) {\n if (relatedCollections.length === 1) {\n setShow(permissions.collections[relatedCollections[0]?.slug]?.create)\n } else {\n setShow(\n relatedCollections.some(\n (collection) => permissions.collections[collection?.slug]?.create,\n ),\n )\n }\n }\n }, [permissions, relatedCollections])\n\n useEffect(() => {\n if (relatedToMany && selectedCollection) {\n setCollectionConfig(\n relatedCollections.find((collection) => collection?.slug === selectedCollection),\n )\n }\n }, [selectedCollection, relatedToMany, relatedCollections])\n\n useEffect(() => {\n if (relatedToMany && collectionConfig) {\n // the drawer must be rendered on the page before before opening it\n // this is why 'selectedCollection' is different from 'collectionConfig'\n toggleDrawer()\n setSelectedCollection(undefined)\n }\n }, [toggleDrawer, relatedToMany, collectionConfig])\n\n useEffect(() => {\n if (relatedToMany && !isDrawerOpen) {\n setCollectionConfig(undefined)\n }\n }, [isDrawerOpen, relatedToMany])\n\n const label = t('fields:addNewLabel', {\n label: getTranslation(relatedCollections[0]?.labels.singular, i18n),\n })\n\n if (!show) {\n return null\n }\n\n return (\n <div className={baseClass} id={`${path}-add-new`}>\n {relatedCollections.length === 1 && (\n <Fragment>\n <DocumentDrawerToggler\n className={[\n `${baseClass}__add-button`,\n unstyled && `${baseClass}__add-button--unstyled`,\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => {\n setShowTooltip(false)\n }}\n onMouseEnter={() => setShowTooltip(true)}\n onMouseLeave={() => setShowTooltip(false)}\n >\n {ButtonFromProps ? (\n ButtonFromProps\n ) : (\n <Fragment>\n <Tooltip className={`${baseClass}__tooltip`} show={showTooltip}>\n {label}\n </Tooltip>\n <PlusIcon />\n </Fragment>\n )}\n </DocumentDrawerToggler>\n <DocumentDrawer onSave={onSave} />\n </Fragment>\n )}\n {relatedCollections.length > 1 && (\n <Fragment>\n <Popup\n button={\n ButtonFromProps ? (\n ButtonFromProps\n ) : (\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__add-button`}\n tooltip={popupOpen ? undefined : t('fields:addNew')}\n >\n <PlusIcon />\n </Button>\n )\n }\n buttonType=\"custom\"\n horizontalAlign=\"center\"\n onToggleOpen={onPopupToggle}\n render={({ close: closePopup }) => (\n <PopupList.ButtonGroup>\n {relatedCollections.map((relatedCollection) => {\n if (permissions.collections[relatedCollection?.slug].create) {\n return (\n <PopupList.Button\n className={`${baseClass}__relation-button--${relatedCollection?.slug}`}\n key={relatedCollection?.slug}\n onClick={() => {\n closePopup()\n setSelectedCollection(relatedCollection?.slug)\n }}\n >\n {getTranslation(relatedCollection?.labels?.singular, i18n)}\n </PopupList.Button>\n )\n }\n\n return null\n })}\n </PopupList.ButtonGroup>\n )}\n size=\"medium\"\n />\n {collectionConfig && permissions.collections[collectionConfig?.slug]?.create && (\n <DocumentDrawer onSave={onSave} />\n )}\n </Fragment>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","getTranslation","hasAutosaveEnabled","React","Fragment","useCallback","useEffect","useState","useRelatedCollections","PlusIcon","useAuth","useTranslation","Button","useDocumentDrawer","Popup","PopupList","Tooltip","baseClass","AddNewRelation","t0","$","ButtonFromProps","hasMany","onChange","path","relationTo","unstyled","value","relatedCollections","permissions","show","setShow","selectedCollection","setSelectedCollection","relatedToMany","length","t1","undefined","collectionConfig","setCollectionConfig","popupOpen","setPopupOpen","i18n","t","showTooltip","setShowTooltip","t2","slug","t3","collectionSlug","DocumentDrawer","DocumentDrawerToggler","t4","isDrawerOpen","toggleDrawer","t5","t6","doc","operation","isNewValue","some","v","id","Array","isArray","onSave","Symbol","for","state","onPopupToggle","t7","t8","collections","create","collection","t10","t9","find","collection_0","t11","t12","t13","t14","t15","labels","singular","t16","t17","bb0","label","_jsxs","className","children","_jsx","filter","Boolean","join","onClick","onMouseEnter","onMouseLeave","button","buttonStyle","tooltip","horizontalAlign","onToggleOpen","render","t18","close","closePopup","ButtonGroup","map","relatedCollection"],"sources":["../../../src/elements/AddNewRelation/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { hasAutosaveEnabled } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useState } from 'react'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\nimport type { Props } from './types.js'\n\nimport { useRelatedCollections } from '../../hooks/useRelatedCollections.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { useDocumentDrawer } from '../DocumentDrawer/index.js'\nimport { Popup } from '../Popup/index.js'\nimport * as PopupList from '../Popup/PopupButtonList/index.js'\nimport './index.scss'\nimport { Tooltip } from '../Tooltip/index.js'\n\nconst baseClass = 'relationship-add-new'\n\nexport const AddNewRelation: React.FC<Props> = ({\n Button: ButtonFromProps,\n hasMany,\n onChange,\n path,\n relationTo,\n unstyled,\n value,\n}) => {\n const relatedCollections = useRelatedCollections(relationTo)\n const { permissions } = useAuth()\n const [show, setShow] = useState(false)\n const [selectedCollection, setSelectedCollection] = useState<string>()\n\n const relatedToMany = relatedCollections.length > 1\n\n const [collectionConfig, setCollectionConfig] = useState<ClientCollectionConfig>(() =>\n !relatedToMany ? relatedCollections[0] : undefined,\n )\n\n const [popupOpen, setPopupOpen] = useState(false)\n const { i18n, t } = useTranslation()\n const [showTooltip, setShowTooltip] = useState(false)\n\n const [DocumentDrawer, DocumentDrawerToggler, { isDrawerOpen, toggleDrawer }] = useDocumentDrawer(\n {\n collectionSlug: collectionConfig?.slug,\n },\n )\n\n const onSave: DocumentDrawerContextType['onSave'] = useCallback(\n ({ doc, operation }) => {\n // if autosave is enabled, the operation will be 'update'\n if (\n operation === 'create' ||\n (operation === 'update' && hasAutosaveEnabled(collectionConfig))\n ) {\n // ensure the value is not already in the array\n let isNewValue = false\n if (!value) {\n isNewValue = true\n } else {\n isNewValue = Array.isArray(value)\n ? !value.some((v) => v && v.value === doc.id)\n : value.value !== doc.id\n }\n\n if (isNewValue) {\n if (hasMany === true) {\n onChange([\n ...(Array.isArray(value) ? value : []),\n {\n relationTo: collectionConfig?.slug,\n value: doc.id,\n },\n ])\n } else {\n onChange({\n relationTo: relatedCollections[0].slug,\n value: doc.id,\n })\n }\n }\n\n setSelectedCollection(undefined)\n }\n },\n [collectionConfig, hasMany, onChange, value, relatedCollections],\n )\n\n const onPopupToggle = useCallback((state) => {\n setPopupOpen(state)\n }, [])\n\n useEffect(() => {\n if (permissions) {\n if (relatedCollections.length === 1) {\n setShow(permissions.collections[relatedCollections[0]?.slug]?.create)\n } else {\n setShow(\n relatedCollections.some(\n (collection) => permissions.collections[collection?.slug]?.create,\n ),\n )\n }\n }\n }, [permissions, relatedCollections])\n\n useEffect(() => {\n if (relatedToMany && selectedCollection) {\n setCollectionConfig(\n relatedCollections.find((collection) => collection?.slug === selectedCollection),\n )\n }\n }, [selectedCollection, relatedToMany, relatedCollections])\n\n useEffect(() => {\n if (relatedToMany && collectionConfig) {\n // the drawer must be rendered on the page before before opening it\n // this is why 'selectedCollection' is different from 'collectionConfig'\n toggleDrawer()\n setSelectedCollection(undefined)\n }\n }, [toggleDrawer, relatedToMany, collectionConfig])\n\n useEffect(() => {\n if (relatedToMany && !isDrawerOpen) {\n setCollectionConfig(undefined)\n }\n }, [isDrawerOpen, relatedToMany])\n\n const label = t('fields:addNewLabel', {\n label: getTranslation(relatedCollections[0]?.labels.singular, i18n),\n })\n\n if (!show) {\n return null\n }\n\n return (\n <div className={baseClass} id={`${path}-add-new`}>\n {relatedCollections.length === 1 && (\n <Fragment>\n <DocumentDrawerToggler\n className={[\n `${baseClass}__add-button`,\n unstyled && `${baseClass}__add-button--unstyled`,\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => {\n setShowTooltip(false)\n }}\n onMouseEnter={() => setShowTooltip(true)}\n onMouseLeave={() => setShowTooltip(false)}\n >\n {ButtonFromProps ? (\n ButtonFromProps\n ) : (\n <Fragment>\n <Tooltip className={`${baseClass}__tooltip`} show={showTooltip}>\n {label}\n </Tooltip>\n <PlusIcon />\n </Fragment>\n )}\n </DocumentDrawerToggler>\n <DocumentDrawer onSave={onSave} />\n </Fragment>\n )}\n {relatedCollections.length > 1 && (\n <Fragment>\n <Popup\n button={\n ButtonFromProps ? (\n ButtonFromProps\n ) : (\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__add-button`}\n tooltip={popupOpen ? undefined : t('fields:addNew')}\n >\n <PlusIcon />\n </Button>\n )\n }\n buttonType=\"custom\"\n horizontalAlign=\"center\"\n onToggleOpen={onPopupToggle}\n render={({ close: closePopup }) => (\n <PopupList.ButtonGroup>\n {relatedCollections.map((relatedCollection) => {\n if (permissions.collections[relatedCollection?.slug].create) {\n return (\n <PopupList.Button\n className={`${baseClass}__relation-button--${relatedCollection?.slug}`}\n key={relatedCollection?.slug}\n onClick={() => {\n closePopup()\n setSelectedCollection(relatedCollection?.slug)\n }}\n >\n {getTranslation(relatedCollection?.labels?.singular, i18n)}\n </PopupList.Button>\n )\n }\n\n return null\n })}\n </PopupList.ButtonGroup>\n )}\n size=\"medium\"\n />\n {collectionConfig && permissions.collections[collectionConfig?.slug]?.create && (\n <DocumentDrawer onSave={onSave} />\n )}\n </Fragment>\n )}\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,cAAc,QAAQ;AAC/B,SAASC,kBAAkB,QAAQ;AACnC,OAAOC,KAAA,IAASC,QAAQ,EAAEC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAKlE,SAASC,qBAAqB,QAAQ;AACtC,SAASC,QAAQ,QAAQ;AACzB,SAASC,OAAO,QAAQ;AACxB,SAASC,cAAc,QAAQ;AAC/B,SAASC,MAAM,QAAQ;AACvB,SAASC,iBAAiB,QAAQ;AAClC,SAASC,KAAK,QAAQ;AACtB,YAAYC,SAAA,MAAe;AAC3B,OAAO;AACP,SAASC,OAAO,QAAQ;AAExB,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,cAAA,GAAkCC,EAAA;EAAA,MAAAC,CAAA,GAAApB,EAAA;EAAC;IAAAY,MAAA,EAAAS,eAAA;IAAAC,OAAA;IAAAC,QAAA;IAAAC,IAAA;IAAAC,UAAA;IAAAC,QAAA;IAAAC;EAAA,IAAAR,EAQ/C;EACC,MAAAS,kBAAA,GAA2BpB,qBAAA,CAAsBiB,UAAA;EACjD;IAAAI;EAAA,IAAwBnB,OAAA;EACxB,OAAAoB,IAAA,EAAAC,OAAA,IAAwBxB,QAAA,MAAS;EACjC,OAAAyB,kBAAA,EAAAC,qBAAA,IAAoD1B,QAAA;EAEpD,MAAA2B,aAAA,GAAsBN,kBAAA,CAAAO,MAAA,IAA4B;EAAA,IAAAC,EAAA;EAAA,IAAAhB,CAAA,QAAAQ,kBAAA,OAAAR,CAAA,QAAAc,aAAA;IAE+BE,EAAA,GAAAA,CAAA,KAC/E,CAACF,aAAA,GAAgBN,kBAAkB,MAAAS,SAAM;IAAAjB,CAAA,MAAAQ,kBAAA;IAAAR,CAAA,MAAAc,aAAA;IAAAd,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EAD3C,OAAAkB,gBAAA,EAAAC,mBAAA,IAAgDhC,QAAA,CAAiC6B,EACtC;EAG3C,OAAAI,SAAA,EAAAC,YAAA,IAAkClC,QAAA,MAAS;EAC3C;IAAAmC,IAAA;IAAAC;EAAA,IAAoBhC,cAAA;EACpB,OAAAiC,WAAA,EAAAC,cAAA,IAAsCtC,QAAA,MAAS;EAI3B,MAAAuC,EAAA,GAAAR,gBAAA,EAAAS,IAAA;EAAkB,IAAAC,EAAA;EAAA,IAAA5B,CAAA,QAAA0B,EAAA;IADpCE,EAAA;MAAAC,cAAA,EACkBH;IAAkB;IACpC1B,CAAA,MAAA0B,EAAA;IAAA1B,CAAA,MAAA4B,EAAA;EAAA;IAAAA,EAAA,GAAA5B,CAAA;EAAA;EAHF,OAAA8B,cAAA,EAAAC,qBAAA,EAAAC,EAAA,IAAgFvC,iBAAA,CAC9EmC,EAEA;EAH4C;IAAAK,YAAA;IAAAC;EAAA,IAAAF,EAA8B;EAAA,IAAAG,EAAA;EAAA,IAAAnC,CAAA,QAAAkB,gBAAA,IAAAlB,CAAA,QAAAE,OAAA,IAAAF,CAAA,QAAAG,QAAA,IAAAH,CAAA,QAAAQ,kBAAA,OAAAR,CAAA,QAAAO,KAAA;IAO1E4B,EAAA,GAAAC,EAAA;MAAC;QAAAC,GAAA;QAAAC;MAAA,IAAAF,EAAkB;MAAA,IAGfE,SAAA,KAAc,YACbA,SAAA,KAAc,YAAYxD,kBAAA,CAAmBoC,gBAAA;QAG9C,IAAAqB,UAAA;QAAiB,KACZhC,KAAA;UACHgC,UAAA,CAAAA,CAAA,CAAAA,IAAA;QAAA;UAEAA,UAAA,CAAAA,CAAA,CAAaA,cAAchC,KAAA,KACtBA,KAAA,CAAAiC,IAAA,CAAAC,CAAA,IAAkBA,CAAA,IAAKA,CAAA,CAAAlC,KAAA,KAAY8B,GAAA,CAAAK,EAAM,IAC1CnC,KAAA,CAAAA,KAAA,KAAgB8B,GAAA,CAAAK,EAAM;QAF1B;QAAA,IAKEH,UAAA;UAAA,IACErC,OAAA,SAAY;YACdC,QAAA,MACMwC,KAAA,CAAAC,OAAA,CAAcrC,KAAA,IAASA,KAAA,KAAU;cAAAF,UAAA,EAEvBa,gBAAA,EAAAS,IAAA;cAAApB,KAAA,EACL8B,GAAA,CAAAK;YAAA,EAEV;UAAA;YAEDvC,QAAA;cAAAE,UAAA,EACcG,kBAAkB,IAAAmB,IAAA;cAAApB,KAAA,EACvB8B,GAAA,CAAAK;YAAA,CACT;UAAA;QAAA;QAIJ7B,qBAAA,CAAAI,SAAsB;MAAA;IAAA;IAE1BjB,CAAA,MAAAkB,gBAAA;IAAAlB,CAAA,MAAAE,OAAA;IAAAF,CAAA,MAAAG,QAAA;IAAAH,CAAA,MAAAQ,kBAAA;IAAAR,CAAA,MAAAO,KAAA;IAAAP,CAAA,OAAAmC,EAAA;EAAA;IAAAA,EAAA,GAAAnC,CAAA;EAAA;EApCF,MAAA6C,MAAA,GAAoDV,EAqCc;EAAA,IAAAC,EAAA;EAAA,IAAApC,CAAA,SAAA8C,MAAA,CAAAC,GAAA;IAGhCX,EAAA,GAAAY,KAAA;MAChC3B,YAAA,CAAa2B,KAAA;IAAA;IACfhD,CAAA,OAAAoC,EAAA;EAAA;IAAAA,EAAA,GAAApC,CAAA;EAAA;EAFA,MAAAiD,aAAA,GAAsBb,EAEjB;EAAA,IAAAc,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAnD,CAAA,SAAAS,WAAA,IAAAT,CAAA,SAAAQ,kBAAA;IAEK0C,EAAA,GAAAA,CAAA;MAAA,IACJzC,WAAA;QAAA,IACED,kBAAA,CAAAO,MAAA,MAA8B;UAChCJ,OAAA,CAAQF,WAAA,CAAA2C,WAAA,CAAwB5C,kBAAkB,KAAAmB,IAAA,GAAA0B,MAAY;QAAA;UAE9D1C,OAAA,CACEH,kBAAA,CAAAgC,IAAA,CAAAc,UAAA,IACkB7C,WAAA,CAAA2C,WAAA,CAAwBE,UAAA,EAAA3B,IAAA,GAAA0B,MAAmB;QAAA;MAAA;IAAA;IAKlEF,EAAA,IAAC1C,WAAA,EAAaD,kBAAA;IAAmBR,CAAA,OAAAS,WAAA;IAAAT,CAAA,OAAAQ,kBAAA;IAAAR,CAAA,OAAAkD,EAAA;IAAAlD,CAAA,OAAAmD,EAAA;EAAA;IAAAD,EAAA,GAAAlD,CAAA;IAAAmD,EAAA,GAAAnD,CAAA;EAAA;EAZpCd,SAAA,CAAUgE,EAYV,EAAGC,EAAiC;EAAA,IAAAI,GAAA;EAAA,IAAAC,EAAA;EAAA,IAAAxD,CAAA,SAAAQ,kBAAA,IAAAR,CAAA,SAAAc,aAAA,IAAAd,CAAA,SAAAY,kBAAA;IAE1B4C,EAAA,GAAAA,CAAA;MAAA,IACJ1C,aAAA,IAAiBF,kBAAA;QACnBO,mBAAA,CACEX,kBAAA,CAAAiD,IAAA,CAAAC,YAAA,IAAwCJ,YAAA,EAAA3B,IAAA,KAAqBf,kBAAA;MAAA;IAAA;IAGhE2C,GAAA,IAAC3C,kBAAA,EAAoBE,aAAA,EAAeN,kBAAA;IAAmBR,CAAA,OAAAQ,kBAAA;IAAAR,CAAA,OAAAc,aAAA;IAAAd,CAAA,OAAAY,kBAAA;IAAAZ,CAAA,OAAAuD,GAAA;IAAAvD,CAAA,OAAAwD,EAAA;EAAA;IAAAD,GAAA,GAAAvD,CAAA;IAAAwD,EAAA,GAAAxD,CAAA;EAAA;EAN1Dd,SAAA,CAAUsE,EAMV,EAAGD,GAAuD;EAAA,IAAAI,GAAA;EAAA,IAAAC,GAAA;EAAA,IAAA5D,CAAA,SAAAkB,gBAAA,IAAAlB,CAAA,SAAAc,aAAA,IAAAd,CAAA,SAAAkC,YAAA;IAEhDyB,GAAA,GAAAA,CAAA;MAAA,IACJ7C,aAAA,IAAiBI,gBAAA;QAGnBgB,YAAA;QACArB,qBAAA,CAAAI,SAAsB;MAAA;IAAA;IAEvB2C,GAAA,IAAC1B,YAAA,EAAcpB,aAAA,EAAeI,gBAAA;IAAiBlB,CAAA,OAAAkB,gBAAA;IAAAlB,CAAA,OAAAc,aAAA;IAAAd,CAAA,OAAAkC,YAAA;IAAAlC,CAAA,OAAA2D,GAAA;IAAA3D,CAAA,OAAA4D,GAAA;EAAA;IAAAD,GAAA,GAAA3D,CAAA;IAAA4D,GAAA,GAAA5D,CAAA;EAAA;EAPlDd,SAAA,CAAUyE,GAOV,EAAGC,GAA+C;EAAA,IAAAC,GAAA;EAAA,IAAAC,GAAA;EAAA,IAAA9D,CAAA,SAAAiC,YAAA,IAAAjC,CAAA,SAAAc,aAAA;IAExC+C,GAAA,GAAAA,CAAA;MAAA,IACJ/C,aAAA,KAAkBmB,YAAA;QACpBd,mBAAA,CAAAF,SAAoB;MAAA;IAAA;IAErB6C,GAAA,IAAC7B,YAAA,EAAcnB,aAAA;IAAcd,CAAA,OAAAiC,YAAA;IAAAjC,CAAA,OAAAc,aAAA;IAAAd,CAAA,OAAA6D,GAAA;IAAA7D,CAAA,OAAA8D,GAAA;EAAA;IAAAD,GAAA,GAAA7D,CAAA;IAAA8D,GAAA,GAAA9D,CAAA;EAAA;EAJhCd,SAAA,CAAU2E,GAIV,EAAGC,GAA6B;EAGR,MAAAC,GAAA,GAAAvD,kBAAkB,KAAAwD,MAAA,CAAAC,QAAA;EAAY,IAAAC,GAAA;EAAA,IAAAC,GAAA;EAAA,IAAAnE,CAAA,SAAAC,eAAA,IAAAD,CAAA,SAAA8B,cAAA,IAAA9B,CAAA,SAAA+B,qBAAA,IAAA/B,CAAA,SAAAkB,gBAAA,IAAAlB,CAAA,SAAAsB,IAAA,IAAAtB,CAAA,SAAA6C,MAAA,IAAA7C,CAAA,SAAAI,IAAA,IAAAJ,CAAA,SAAAS,WAAA,IAAAT,CAAA,SAAAoB,SAAA,IAAApB,CAAA,SAAAQ,kBAAA,IAAAR,CAAA,SAAAU,IAAA,IAAAV,CAAA,SAAAwB,WAAA,IAAAxB,CAAA,SAAAuB,CAAA,IAAAvB,CAAA,SAAA+D,GAAA,IAAA/D,CAAA,SAAAM,QAAA;IAI7C6D,GAAA,GAAArB,MAAA,CAAAC,GAAA;IAAAqB,GAAA;MALT,MAAAC,KAAA,GAAc9C,CAAA,CAAE;QAAA8C,KAAA,EACPxF,cAAA,CAAekF,GAA8B,EAAUzC,IAAA;MAAA,CAChE;MAAA,KAEKZ,IAAA;QACIyD,GAAA;QAAA,MAAAC,GAAA;MAAA;MAIPF,GAAA,GAAAI,KAAA,CAAC;QAAAC,SAAA,EAAA1E,SAAA;QAAA6C,EAAA,EAA8B,GAAGtC,IAAA,UAAc;QAAAoE,QAAA,GAC7ChE,kBAAA,CAAAO,MAAA,MAA8B,IAC7BuD,KAAA,CAAAtF,QAAA;UAAAwF,QAAA,GACEC,IAAA,CAAC1C,qBAAA;YAAAwC,SAAA,EACY,CACT,GAAA1E,SAAA,cAA0B,EAC1BS,QAAA,IAAY,GAAAT,SAAA,wBAAoC,EAAA6E,MAAA,CAAAC,OAExC,EAAAC,IAAA,CACF;YAAAC,OAAA,EAAAA,CAAA;cAENpD,cAAA,MAAe;YAAA;YAAAqD,YAAA,EAAAA,CAAA,KAEGrD,cAAA,KAAe;YAAAsD,YAAA,EAAAA,CAAA,KACftD,cAAA,MAAe;YAAA+C,QAAA,EAElCvE,eAAA,GACCA,eAAA,GAEAqE,KAAA,CAAAtF,QAAA;cAAAwF,QAAA,GACEC,IAAA,CAAA7E,OAAA;gBAAA2E,SAAA,EAAoB,GAAA1E,SAAA,WAAuB;gBAAAa,IAAA,EAAQc,WAAA;gBAAAgD,QAAA,EAChDH;cAAA,C,GAEHI,IAAA,CAAApF,QAAA,IAAC;YAAA,C;cAIPoF,IAAA,CAAC3C,cAAA;YAAAe;UAAA,C;YAGJrC,kBAAA,CAAAO,MAAA,IAA4B,IAC3BuD,KAAA,CAAAtF,QAAA;UAAAwF,QAAA,GACEC,IAAA,CAAA/E,KAAA;YAAAsF,MAAA,EAEI/E,eAAA,GACEA,eAAA,GAEAwE,IAAA,CAAAjF,MAAA;cAAAyF,WAAA,EACc;cAAAV,SAAA,EACD,GAAA1E,SAAA,cAA0B;cAAAqF,OAAA,EAC5B9D,SAAA,GAAAH,SAAA,GAAwBM,CAAA,CAAE;cAAAiD,QAAA,EAEnCC,IAAA,CAAApF,QAAA,IAAC;YAAA,C;wBAII;YAAA8F,eAAA,EACK;YAAAC,YAAA,EACFnC,aAAA;YAAAoC,MAAA,EAAAC,GAAA;cACL;gBAAAC,KAAA,EAAAC;cAAA,IAAAF,GAAqB;cAAA,OAC5Bb,IAAA,CAAA9E,SAAA,CAAA8F,WAAA;gBAAAjB,QAAA,EACGhE,kBAAA,CAAAkF,GAAA,CAAAC,iBAAA;kBAAA,IACKlF,WAAA,CAAA2C,WAAA,CAAwBuC,iBAAA,EAAAhE,IAAA,EAAA0B,MAAA;oBAAA,OAExBoB,IAAA,CAAA9E,SAAA,CAAAH,MAAA;sBAAA+E,SAAA,EACa,GAAA1E,SAAA,sBAAkC8F,iBAAA,EAAAhE,IAAA,EAAyB;sBAAAkD,OAAA,EAAAA,CAAA;wBAGpEW,UAAA;wBACA3E,qBAAA,CAAsB8E,iBAAA,EAAAhE,IAAmB;sBAAA;sBAAA6C,QAAA,EAG1C3F,cAAA,CAAe8G,iBAAA,EAAA3B,MAAA,EAAAC,QAAA,EAAqC3C,IAAA;oBAAA,GANhDqE,iBAAA,EAAAhE,IAAmB;kBAAA;kBAAA;gBAAA,CAYhC;cAAA,C;;kBAGC;UAAA,C,GAENT,gBAAA,IAAoBT,WAAA,CAAA2C,WAAA,CAAwBlC,gBAAA,EAAAS,IAAA,GAAA0B,MAAyB,IACpEoB,IAAA,CAAC3C,cAAA;YAAAe;UAAA,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;SA1ETqB,G;CAgFJ","ignoreList":[]}
@@ -1,15 +1,15 @@
1
1
  import React from 'react';
2
2
  import './index.scss';
3
3
  export type Props = {
4
- addRow: (current: number, blockType?: string) => Promise<void> | void;
5
- copyRow: (index: number) => void;
6
- duplicateRow: (current: number) => void;
4
+ addRow?: (current: number, blockType?: string) => Promise<void> | void;
5
+ copyRow?: (index: number) => void;
6
+ duplicateRow?: (current: number) => void;
7
7
  hasMaxRows: boolean;
8
8
  index: number;
9
9
  isSortable?: boolean;
10
- moveRow: (from: number, to: number) => void;
11
- pasteRow: (index: number) => void;
12
- removeRow: (index: number) => void;
10
+ moveRow?: (from: number, to: number) => void;
11
+ pasteRow?: (index: number) => void;
12
+ removeRow?: (index: number) => void;
13
13
  rowCount: number;
14
14
  };
15
15
  export declare const ArrayAction: React.FC<Props>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ArrayAction/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB,OAAO,cAAc,CAAA;AAKrB,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACrE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6GvC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ArrayAction/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACtE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuHvC,CAAA"}
@@ -10,8 +10,8 @@ import { PlusIcon } from '../../icons/Plus/index.js';
10
10
  import { XIcon } from '../../icons/X/index.js';
11
11
  import { useTranslation } from '../../providers/Translation/index.js';
12
12
  import { ClipboardActionLabel } from '../ClipboardAction/ClipboardActionLabel.js';
13
- import './index.scss';
14
13
  import { Popup, PopupList } from '../Popup/index.js';
14
+ import './index.scss';
15
15
  const baseClass = 'array-actions';
16
16
  export const ArrayAction = t0 => {
17
17
  const $ = _c(12);
@@ -43,7 +43,7 @@ export const ArrayAction = t0 => {
43
43
  } = t2;
44
44
  return _jsxs(PopupList.ButtonGroup, {
45
45
  buttonSize: "small",
46
- children: [isSortable && index !== 0 && _jsxs(PopupList.Button, {
46
+ children: [isSortable && index !== 0 && moveRow && _jsxs(PopupList.Button, {
47
47
  className: `${baseClass}__action ${baseClass}__move-up`,
48
48
  onClick: () => {
49
49
  moveRow(index, index - 1);
@@ -55,7 +55,7 @@ export const ArrayAction = t0 => {
55
55
  direction: "up"
56
56
  })
57
57
  }), t("general:moveUp")]
58
- }), isSortable && index < rowCount - 1 && _jsxs(PopupList.Button, {
58
+ }), isSortable && index < rowCount - 1 && moveRow && _jsxs(PopupList.Button, {
59
59
  className: `${baseClass}__action`,
60
60
  onClick: () => {
61
61
  moveRow(index, index + 1);
@@ -66,14 +66,14 @@ export const ArrayAction = t0 => {
66
66
  children: _jsx(ChevronIcon, {})
67
67
  }), t("general:moveDown")]
68
68
  }), !hasMaxRows && _jsxs(React.Fragment, {
69
- children: [_jsxs(PopupList.Button, {
69
+ children: [addRow && _jsxs(PopupList.Button, {
70
70
  className: `${baseClass}__action ${baseClass}__add`,
71
71
  onClick: () => {
72
72
  addRow(index + 1);
73
73
  close();
74
74
  },
75
75
  children: [_jsx(PlusIcon, {}), t("general:addBelow")]
76
- }), _jsxs(PopupList.Button, {
76
+ }), duplicateRow && _jsxs(PopupList.Button, {
77
77
  className: `${baseClass}__action ${baseClass}__duplicate`,
78
78
  onClick: () => {
79
79
  duplicateRow(index);
@@ -81,7 +81,7 @@ export const ArrayAction = t0 => {
81
81
  },
82
82
  children: [_jsx(CopyIcon, {}), t("general:duplicate")]
83
83
  })]
84
- }), _jsx(PopupList.Button, {
84
+ }), copyRow && _jsx(PopupList.Button, {
85
85
  className: `${baseClass}__action ${baseClass}__copy`,
86
86
  onClick: () => {
87
87
  copyRow(index);
@@ -90,7 +90,7 @@ export const ArrayAction = t0 => {
90
90
  children: _jsx(ClipboardActionLabel, {
91
91
  isRow: true
92
92
  })
93
- }), _jsx(PopupList.Button, {
93
+ }), pasteRow && _jsx(PopupList.Button, {
94
94
  className: `${baseClass}__action ${baseClass}__paste`,
95
95
  onClick: () => {
96
96
  pasteRow(index);
@@ -100,7 +100,7 @@ export const ArrayAction = t0 => {
100
100
  isPaste: true,
101
101
  isRow: true
102
102
  })
103
- }), _jsxs(PopupList.Button, {
103
+ }), removeRow && _jsxs(PopupList.Button, {
104
104
  className: `${baseClass}__action ${baseClass}__remove`,
105
105
  onClick: () => {
106
106
  removeRow(index);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","ChevronIcon","CopyIcon","MoreIcon","PlusIcon","XIcon","useTranslation","ClipboardActionLabel","Popup","PopupList","baseClass","ArrayAction","t0","$","addRow","copyRow","duplicateRow","hasMaxRows","index","isSortable","moveRow","pasteRow","removeRow","rowCount","t","t1","_jsx","button","buttonClassName","className","horizontalAlign","render","t2","close","_jsxs","ButtonGroup","buttonSize","children","Button","onClick","direction","Fragment","isRow","isPaste"],"sources":["../../../src/elements/ArrayAction/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { CopyIcon } from '../../icons/Copy/index.js'\nimport { MoreIcon } from '../../icons/More/index.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ClipboardActionLabel } from '../ClipboardAction/ClipboardActionLabel.js'\nimport './index.scss'\nimport { Popup, PopupList } from '../Popup/index.js'\n\nconst baseClass = 'array-actions'\n\nexport type Props = {\n addRow: (current: number, blockType?: string) => Promise<void> | void\n copyRow: (index: number) => void\n duplicateRow: (current: number) => void\n hasMaxRows: boolean\n index: number\n isSortable?: boolean\n moveRow: (from: number, to: number) => void\n pasteRow: (index: number) => void\n removeRow: (index: number) => void\n rowCount: number\n}\n\nexport const ArrayAction: React.FC<Props> = ({\n addRow,\n copyRow,\n duplicateRow,\n hasMaxRows,\n index,\n isSortable,\n moveRow,\n pasteRow,\n removeRow,\n rowCount,\n}) => {\n const { t } = useTranslation()\n\n return (\n <Popup\n button={<MoreIcon />}\n buttonClassName={`${baseClass}__button`}\n className={baseClass}\n horizontalAlign=\"center\"\n render={({ close }) => {\n return (\n <PopupList.ButtonGroup buttonSize=\"small\">\n {isSortable && index !== 0 && (\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__move-up`}\n onClick={() => {\n moveRow(index, index - 1)\n close()\n }}\n >\n <div className={`${baseClass}__action-chevron`}>\n <ChevronIcon direction=\"up\" />\n </div>\n {t('general:moveUp')}\n </PopupList.Button>\n )}\n {isSortable && index < rowCount - 1 && (\n <PopupList.Button\n className={`${baseClass}__action`}\n onClick={() => {\n moveRow(index, index + 1)\n close()\n }}\n >\n <div className={`${baseClass}__action-chevron`}>\n <ChevronIcon />\n </div>\n {t('general:moveDown')}\n </PopupList.Button>\n )}\n {!hasMaxRows && (\n <React.Fragment>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__add`}\n onClick={() => {\n void addRow(index + 1)\n close()\n }}\n >\n <PlusIcon />\n {t('general:addBelow')}\n </PopupList.Button>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__duplicate`}\n onClick={() => {\n duplicateRow(index)\n close()\n }}\n >\n <CopyIcon />\n {t('general:duplicate')}\n </PopupList.Button>\n </React.Fragment>\n )}\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__copy`}\n onClick={() => {\n copyRow(index)\n close()\n }}\n >\n <ClipboardActionLabel isRow />\n </PopupList.Button>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__paste`}\n onClick={() => {\n pasteRow(index)\n close()\n }}\n >\n <ClipboardActionLabel isPaste isRow />\n </PopupList.Button>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__remove`}\n onClick={() => {\n removeRow(index)\n close()\n }}\n >\n <XIcon />\n {t('general:remove')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )\n }}\n size=\"medium\"\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","ChevronIcon","CopyIcon","MoreIcon","PlusIcon","XIcon","useTranslation","ClipboardActionLabel","Popup","PopupList","baseClass","ArrayAction","t0","$","addRow","copyRow","duplicateRow","hasMaxRows","index","isSortable","moveRow","pasteRow","removeRow","rowCount","t","t1","_jsx","button","buttonClassName","className","horizontalAlign","render","t2","close","_jsxs","ButtonGroup","buttonSize","children","Button","onClick","direction","Fragment","isRow","isPaste"],"sources":["../../../src/elements/ArrayAction/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { CopyIcon } from '../../icons/Copy/index.js'\nimport { MoreIcon } from '../../icons/More/index.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ClipboardActionLabel } from '../ClipboardAction/ClipboardActionLabel.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'array-actions'\n\nexport type Props = {\n addRow?: (current: number, blockType?: string) => Promise<void> | void\n copyRow?: (index: number) => void\n duplicateRow?: (current: number) => void\n hasMaxRows: boolean\n index: number\n isSortable?: boolean\n moveRow?: (from: number, to: number) => void\n pasteRow?: (index: number) => void\n removeRow?: (index: number) => void\n rowCount: number\n}\n\nexport const ArrayAction: React.FC<Props> = ({\n addRow,\n copyRow,\n duplicateRow,\n hasMaxRows,\n index,\n isSortable,\n moveRow,\n pasteRow,\n removeRow,\n rowCount,\n}) => {\n const { t } = useTranslation()\n\n return (\n <Popup\n button={<MoreIcon />}\n buttonClassName={`${baseClass}__button`}\n className={baseClass}\n horizontalAlign=\"center\"\n render={({ close }) => {\n return (\n <PopupList.ButtonGroup buttonSize=\"small\">\n {isSortable && index !== 0 && moveRow && (\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__move-up`}\n onClick={() => {\n moveRow(index, index - 1)\n close()\n }}\n >\n <div className={`${baseClass}__action-chevron`}>\n <ChevronIcon direction=\"up\" />\n </div>\n {t('general:moveUp')}\n </PopupList.Button>\n )}\n {isSortable && index < rowCount - 1 && moveRow && (\n <PopupList.Button\n className={`${baseClass}__action`}\n onClick={() => {\n moveRow(index, index + 1)\n close()\n }}\n >\n <div className={`${baseClass}__action-chevron`}>\n <ChevronIcon />\n </div>\n {t('general:moveDown')}\n </PopupList.Button>\n )}\n {!hasMaxRows && (\n <React.Fragment>\n {addRow && (\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__add`}\n onClick={() => {\n void addRow(index + 1)\n close()\n }}\n >\n <PlusIcon />\n {t('general:addBelow')}\n </PopupList.Button>\n )}\n {duplicateRow && (\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__duplicate`}\n onClick={() => {\n duplicateRow(index)\n close()\n }}\n >\n <CopyIcon />\n {t('general:duplicate')}\n </PopupList.Button>\n )}\n </React.Fragment>\n )}\n {copyRow && (\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__copy`}\n onClick={() => {\n copyRow(index)\n close()\n }}\n >\n <ClipboardActionLabel isRow />\n </PopupList.Button>\n )}\n {pasteRow && (\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__paste`}\n onClick={() => {\n pasteRow(index)\n close()\n }}\n >\n <ClipboardActionLabel isPaste isRow />\n </PopupList.Button>\n )}\n {removeRow && (\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__remove`}\n onClick={() => {\n removeRow(index)\n close()\n }}\n >\n <XIcon />\n {t('general:remove')}\n </PopupList.Button>\n )}\n </PopupList.ButtonGroup>\n )\n }}\n size=\"medium\"\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,OAAOC,KAAA,MAAW;AAElB,SAASC,WAAW,QAAQ;AAC5B,SAASC,QAAQ,QAAQ;AACzB,SAASC,QAAQ,QAAQ;AACzB,SAASC,QAAQ,QAAQ;AACzB,SAASC,KAAK,QAAQ;AACtB,SAASC,cAAc,QAAQ;AAC/B,SAASC,oBAAoB,QAAQ;AACrC,SAASC,KAAK,EAAEC,SAAS,QAAQ;AACjC,OAAO;AAEP,MAAMC,SAAA,GAAY;AAelB,OAAO,MAAMC,WAAA,GAA+BC,EAAA;EAAA,MAAAC,CAAA,GAAAd,EAAA;EAAC;IAAAe,MAAA;IAAAC,OAAA;IAAAC,YAAA;IAAAC,UAAA;IAAAC,KAAA;IAAAC,UAAA;IAAAC,OAAA;IAAAC,QAAA;IAAAC,SAAA;IAAAC;EAAA,IAAAX,EAW5C;EACC;IAAAY;EAAA,IAAclB,cAAA;EAAA,IAAAmB,EAAA;EAAA,IAAAZ,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAE,OAAA,IAAAF,CAAA,QAAAG,YAAA,IAAAH,CAAA,QAAAI,UAAA,IAAAJ,CAAA,QAAAK,KAAA,IAAAL,CAAA,QAAAM,UAAA,IAAAN,CAAA,QAAAO,OAAA,IAAAP,CAAA,QAAAQ,QAAA,IAAAR,CAAA,QAAAS,SAAA,IAAAT,CAAA,QAAAU,QAAA,IAAAV,CAAA,SAAAW,CAAA;IAGZC,EAAA,GAAAC,IAAA,CAAAlB,KAAA;MAAAmB,MAAA,EACUD,IAAA,CAAAvB,QAAA,IAAC;MAAAyB,eAAA,EACQ,GAAAlB,SAAA,UAAsB;MAAAmB,SAAA,EAAAnB,SAAA;MAAAoB,eAAA,EAEvB;MAAAC,MAAA,EAAAC,EAAA;QACP;UAAAC;QAAA,IAAAD,EAAS;QAAA,OAEdE,KAAA,CAAAzB,SAAA,CAAA0B,WAAA;UAAAC,UAAA,EAAkC;UAAAC,QAAA,GAC/BlB,UAAA,IAAcD,KAAA,MAAU,IAAKE,OAAA,IAC5Bc,KAAA,CAAAzB,SAAA,CAAA6B,MAAA;YAAAT,SAAA,EACa,GAAAnB,SAAA,YAAAA,SAAA,WAA4C;YAAA6B,OAAA,EAAAA,CAAA;cAErDnB,OAAA,CAAQF,KAAA,EAAOA,KAAA,IAAQ;cACvBe,KAAA;YAAA;YAAAI,QAAA,GAGFX,IAAA,CAAC;cAAAG,SAAA,EAAe,GAAAnB,SAAA,kBAA8B;cAAA2B,QAAA,EAC5CX,IAAA,CAAAzB,WAAA;gBAAAuC,SAAA,EAAuB;cAAA,C;gBAExBhB,CAAA,CAAE;UAAA,C,GAGNL,UAAA,IAAcD,KAAA,GAAQK,QAAA,IAAW,IAAKH,OAAA,IACrCc,KAAA,CAAAzB,SAAA,CAAA6B,MAAA;YAAAT,SAAA,EACa,GAAAnB,SAAA,UAAsB;YAAA6B,OAAA,EAAAA,CAAA;cAE/BnB,OAAA,CAAQF,KAAA,EAAOA,KAAA,IAAQ;cACvBe,KAAA;YAAA;YAAAI,QAAA,GAGFX,IAAA,CAAC;cAAAG,SAAA,EAAe,GAAAnB,SAAA,kBAA8B;cAAA2B,QAAA,EAC5CX,IAAA,CAAAzB,WAAA,IAAC;YAAA,C,GAEFuB,CAAA,CAAE;UAAA,C,GAGN,CAACP,UAAA,IACAiB,KAAA,CAAAlC,KAAA,CAAAyC,QAAA;YAAAJ,QAAA,GACGvB,MAAA,IACCoB,KAAA,CAAAzB,SAAA,CAAA6B,MAAA;cAAAT,SAAA,EACa,GAAAnB,SAAA,YAAAA,SAAA,OAAwC;cAAA6B,OAAA,EAAAA,CAAA;gBAE5CzB,MAAA,CAAOI,KAAA,IAAQ;gBACpBe,KAAA;cAAA;cAAAI,QAAA,GAGFX,IAAA,CAAAtB,QAAA,IAAC,GACAoB,CAAA,CAAE;YAAA,C,GAGNR,YAAA,IACCkB,KAAA,CAAAzB,SAAA,CAAA6B,MAAA;cAAAT,SAAA,EACa,GAAAnB,SAAA,YAAAA,SAAA,aAA8C;cAAA6B,OAAA,EAAAA,CAAA;gBAEvDvB,YAAA,CAAaE,KAAA;gBACbe,KAAA;cAAA;cAAAI,QAAA,GAGFX,IAAA,CAAAxB,QAAA,IAAC,GACAsB,CAAA,CAAE;YAAA,C;cAKVT,OAAA,IACCW,IAAA,CAAAjB,SAAA,CAAA6B,MAAA;YAAAT,SAAA,EACa,GAAAnB,SAAA,YAAAA,SAAA,QAAyC;YAAA6B,OAAA,EAAAA,CAAA;cAElDxB,OAAA,CAAQG,KAAA;cACRe,KAAA;YAAA;YAAAI,QAAA,EAGFX,IAAA,CAAAnB,oBAAA;cAAAmC,KAAA;YAAA,C;cAGHrB,QAAA,IACCK,IAAA,CAAAjB,SAAA,CAAA6B,MAAA;YAAAT,SAAA,EACa,GAAAnB,SAAA,YAAAA,SAAA,SAA0C;YAAA6B,OAAA,EAAAA,CAAA;cAEnDlB,QAAA,CAASH,KAAA;cACTe,KAAA;YAAA;YAAAI,QAAA,EAGFX,IAAA,CAAAnB,oBAAA;cAAAoC,OAAA;cAAAD,KAAA;YAAA,C;cAGHpB,SAAA,IACCY,KAAA,CAAAzB,SAAA,CAAA6B,MAAA;YAAAT,SAAA,EACa,GAAAnB,SAAA,YAAAA,SAAA,UAA2C;YAAA6B,OAAA,EAAAA,CAAA;cAEpDjB,SAAA,CAAUJ,KAAA;cACVe,KAAA;YAAA;YAAAI,QAAA,GAGFX,IAAA,CAAArB,KAAA,IAAC,GACAmB,CAAA,CAAE;UAAA,C;;;YAMR;IAAA,C;;;;;;;;;;;;;;;;SArGPC,E;CAwGJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Autosave/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAIzE,OAAO,KAAwD,MAAM,OAAO,CAAA;AAoB5E,OAAO,cAAc,CAAA;AAMrB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,qBAAqB,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuNpC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Autosave/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAQzE,OAAO,KAAwD,MAAM,OAAO,CAAA;AAoB5E,OAAO,cAAc,CAAA;AAMrB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,qBAAqB,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA8MpC,CAAA"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { dequal } from 'dequal/lite';
5
- import { reduceFieldsToValues, versionDefaults } from 'payload/shared';
5
+ import { getAutosaveInterval, hasDraftValidationEnabled, reduceFieldsToValues } from 'payload/shared';
6
6
  import React, { useDeferredValue, useEffect, useRef, useState } from 'react';
7
7
  import { useAllFormFields, useForm, useFormModified, useFormSubmitted } from '../../forms/Form/context.js';
8
8
  import { useDebounce } from '../../hooks/useDebounce.js';
@@ -54,12 +54,8 @@ export const Autosave = ({
54
54
  i18n,
55
55
  t
56
56
  } = useTranslation();
57
- const versionsConfig = docConfig?.versions;
58
- let interval = versionDefaults.autosaveInterval;
59
- if (versionsConfig.drafts && versionsConfig.drafts.autosave) {
60
- interval = versionsConfig.drafts.autosave.interval;
61
- }
62
- const validateOnDraft = Boolean(docConfig?.versions?.drafts && docConfig?.versions?.drafts.validate);
57
+ const interval = getAutosaveInterval(docConfig);
58
+ const validateOnDraft = hasDraftValidationEnabled(docConfig);
63
59
  const [_saving, setSaving] = useState(false);
64
60
  const saving = useDeferredValue(_saving);
65
61
  const debouncedFormState = useDebounce(formState, interval);
@@ -116,7 +112,7 @@ export const Autosave = ({
116
112
  const {
117
113
  valid
118
114
  } = reduceFieldsToValuesWithValidation(formStateRef.current, true);
119
- const skipSubmission = submitted && !valid && versionsConfig?.drafts && versionsConfig?.drafts?.validate;
115
+ const skipSubmission = submitted && !valid && validateOnDraft;
120
116
  if (!skipSubmission && modifiedRef.current && url) {
121
117
  const result = await submit({
122
118
  acceptValues: {
@@ -133,7 +129,7 @@ export const Autosave = ({
133
129
  overrides: {
134
130
  _status: 'draft'
135
131
  },
136
- skipValidation: versionsConfig?.drafts && !versionsConfig?.drafts?.validate
132
+ skipValidation: !validateOnDraft
137
133
  });
138
134
  if (result && result?.res?.ok && !mostRecentVersionIsAutosaved) {
139
135
  setMostRecentVersionIsAutosaved(true);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["dequal","reduceFieldsToValues","versionDefaults","React","useDeferredValue","useEffect","useRef","useState","useAllFormFields","useForm","useFormModified","useFormSubmitted","useDebounce","useEffectEvent","useQueue","useConfig","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValuesWithValidation","LeaveWithoutSaving","baseClass","minimumAnimationTime","Autosave","id","collection","global","globalDoc","config","routes","api","serverURL","docConfig","lastUpdateTime","mostRecentVersionIsAutosaved","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","isValid","setBackgroundProcessing","submit","formState","modified","submitted","code","locale","i18n","t","versionsConfig","versions","interval","autosaveInterval","drafts","autosave","validateOnDraft","Boolean","validate","_saving","setSaving","saving","debouncedFormState","formStateRef","modifiedRef","localeRef","current","queueTask","autosaveTimeoutRef","handleAutosave","undefined","startTimestamp","endTimestamp","hideIndicator","setTimeout","stopAutoSaveIndicator","Date","getTime","url","method","entitySlug","slug","valid","skipSubmission","result","acceptValues","overrideLocalChanges","action","context","getDocPermissions","incrementVersionCount","disableFormWhileProcessing","disableSuccessStatus","overrides","_status","skipValidation","res","ok","prev","newDate","afterProcess","beforeProcess","didMount","previousDebouncedData","updatedAt","_","formData","__","prevFormData","clearTimeout","_jsxs","className","_jsx","Fragment","distance","date"],"sources":["../../../src/elements/Autosave/index.tsx"],"sourcesContent":["'use client'\n// TODO: abstract the `next/navigation` dependency out from this component\nimport type { ClientCollectionConfig, ClientGlobalConfig } from 'payload'\n\nimport { dequal } from 'dequal/lite'\nimport { reduceFieldsToValues, versionDefaults } from 'payload/shared'\nimport React, { useDeferredValue, useEffect, useRef, useState } from 'react'\n\nimport type { OnSaveContext } from '../../views/Edit/index.js'\n\nimport {\n useAllFormFields,\n useForm,\n useFormModified,\n useFormSubmitted,\n} from '../../forms/Form/context.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useQueue } from '../../hooks/useQueue.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatTimeToNow } from '../../utilities/formatDocTitle/formatDateTitle.js'\nimport { reduceFieldsToValuesWithValidation } from '../../utilities/reduceFieldsToValuesWithValidation.js'\nimport { LeaveWithoutSaving } from '../LeaveWithoutSaving/index.js'\nimport './index.scss'\n\nconst baseClass = 'autosave'\n// The minimum time the saving state should be shown\nconst minimumAnimationTime = 1000\n\nexport type Props = {\n collection?: ClientCollectionConfig\n global?: ClientGlobalConfig\n id?: number | string\n publishedDocUpdatedAt: string\n}\n\nexport const Autosave: React.FC<Props> = ({ id, collection, global: globalDoc }) => {\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const {\n docConfig,\n lastUpdateTime,\n mostRecentVersionIsAutosaved,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n } = useDocumentInfo()\n\n const { isValid, setBackgroundProcessing, submit } = useForm()\n\n const [formState] = useAllFormFields()\n const modified = useFormModified()\n const submitted = useFormSubmitted()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n const versionsConfig = docConfig?.versions\n let interval = versionDefaults.autosaveInterval\n\n if (versionsConfig.drafts && versionsConfig.drafts.autosave) {\n interval = versionsConfig.drafts.autosave.interval\n }\n\n const validateOnDraft = Boolean(\n docConfig?.versions?.drafts && docConfig?.versions?.drafts.validate,\n )\n\n const [_saving, setSaving] = useState(false)\n\n const saving = useDeferredValue(_saving)\n\n const debouncedFormState = useDebounce(formState, interval)\n\n const formStateRef = useRef(formState)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\n\n // Store fields in ref so the autosave func\n // can always retrieve the most to date copies\n // after the timeout has executed\n formStateRef.current = formState\n\n // Store modified in ref so the autosave func\n // can bail out if modified becomes false while\n // timing out during autosave\n modifiedRef.current = modified\n\n // Store locale in ref so the autosave func\n // can always retrieve the most to date locale\n localeRef.current = locale\n\n const { queueTask } = useQueue()\n\n const autosaveTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n\n const handleAutosave = useEffectEvent(() => {\n autosaveTimeoutRef.current = undefined\n // We need to log the time in order to figure out if we need to trigger the state off later\n let startTimestamp = undefined\n let endTimestamp = undefined\n\n const hideIndicator = () => {\n // If request was faster than minimum animation time, animate the difference\n if (endTimestamp - startTimestamp < minimumAnimationTime) {\n autosaveTimeoutRef.current = setTimeout(\n () => {\n setSaving(false)\n },\n minimumAnimationTime - (endTimestamp - startTimestamp),\n )\n } else {\n stopAutoSaveIndicator()\n }\n }\n\n queueTask(\n async () => {\n if (modified) {\n startTimestamp = new Date().getTime()\n\n setSaving(true)\n\n let url: string\n let method: string\n let entitySlug: string\n\n if (collection && id) {\n entitySlug = collection.slug\n url = `${serverURL}${api}/${entitySlug}/${id}?depth=0&draft=true&autosave=true&locale=${localeRef.current}&fallback-locale=null`\n method = 'PATCH'\n }\n\n if (globalDoc) {\n entitySlug = globalDoc.slug\n url = `${serverURL}${api}/globals/${entitySlug}?depth=0&draft=true&autosave=true&locale=${localeRef.current}&fallback-locale=null`\n method = 'POST'\n }\n\n const { valid } = reduceFieldsToValuesWithValidation(formStateRef.current, true)\n\n const skipSubmission =\n submitted && !valid && versionsConfig?.drafts && versionsConfig?.drafts?.validate\n\n if (!skipSubmission && modifiedRef.current && url) {\n const result = await submit<any, OnSaveContext>({\n acceptValues: {\n overrideLocalChanges: false,\n },\n action: url,\n context: {\n getDocPermissions: false,\n incrementVersionCount: !mostRecentVersionIsAutosaved,\n },\n disableFormWhileProcessing: false,\n disableSuccessStatus: true,\n method,\n overrides: {\n _status: 'draft',\n },\n skipValidation: versionsConfig?.drafts && !versionsConfig?.drafts?.validate,\n })\n\n if (result && result?.res?.ok && !mostRecentVersionIsAutosaved) {\n setMostRecentVersionIsAutosaved(true)\n setUnpublishedVersionCount((prev) => prev + 1)\n }\n\n const newDate = new Date()\n\n // We need to log the time in order to figure out if we need to trigger the state off later\n endTimestamp = newDate.getTime()\n\n hideIndicator()\n }\n }\n },\n {\n afterProcess: () => {\n setBackgroundProcessing(false)\n },\n beforeProcess: () => {\n setBackgroundProcessing(true)\n },\n },\n )\n })\n\n const didMount = useRef(false)\n const previousDebouncedData = useRef(reduceFieldsToValues(debouncedFormState))\n\n // When debounced fields change, autosave\n useEffect(() => {\n /**\n * Ensure autosave doesn't run on mount\n */\n if (!didMount.current) {\n didMount.current = true\n return\n }\n\n /**\n * Ensure autosave only runs if the form data changes, not every time the entire form state changes\n * Remove `updatedAt` from comparison as it changes on every autosave interval.\n */\n const { updatedAt: _, ...formData } = reduceFieldsToValues(debouncedFormState)\n const { updatedAt: __, ...prevFormData } = previousDebouncedData.current\n\n if (dequal(formData, prevFormData)) {\n return\n }\n\n previousDebouncedData.current = formData\n\n handleAutosave()\n }, [debouncedFormState])\n\n /**\n * If component unmounts, clear the autosave timeout\n */\n useEffect(() => {\n return () => {\n stopAutoSaveIndicator()\n }\n }, [])\n\n const stopAutoSaveIndicator = useEffectEvent(() => {\n if (autosaveTimeoutRef.current) {\n clearTimeout(autosaveTimeoutRef.current)\n }\n\n setSaving(false)\n })\n\n return (\n <div className={baseClass}>\n {validateOnDraft && !isValid && <LeaveWithoutSaving />}\n {saving && t('general:saving')}\n {!saving && Boolean(lastUpdateTime) && (\n <React.Fragment>\n {t('version:lastSavedAgo', {\n distance: formatTimeToNow({ date: lastUpdateTime, i18n }),\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["dequal","getAutosaveInterval","hasDraftValidationEnabled","reduceFieldsToValues","React","useDeferredValue","useEffect","useRef","useState","useAllFormFields","useForm","useFormModified","useFormSubmitted","useDebounce","useEffectEvent","useQueue","useConfig","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValuesWithValidation","LeaveWithoutSaving","baseClass","minimumAnimationTime","Autosave","id","collection","global","globalDoc","config","routes","api","serverURL","docConfig","lastUpdateTime","mostRecentVersionIsAutosaved","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","isValid","setBackgroundProcessing","submit","formState","modified","submitted","code","locale","i18n","t","interval","validateOnDraft","_saving","setSaving","saving","debouncedFormState","formStateRef","modifiedRef","localeRef","current","queueTask","autosaveTimeoutRef","handleAutosave","undefined","startTimestamp","endTimestamp","hideIndicator","setTimeout","stopAutoSaveIndicator","Date","getTime","url","method","entitySlug","slug","valid","skipSubmission","result","acceptValues","overrideLocalChanges","action","context","getDocPermissions","incrementVersionCount","disableFormWhileProcessing","disableSuccessStatus","overrides","_status","skipValidation","res","ok","prev","newDate","afterProcess","beforeProcess","didMount","previousDebouncedData","updatedAt","_","formData","__","prevFormData","clearTimeout","_jsxs","className","_jsx","Boolean","Fragment","distance","date"],"sources":["../../../src/elements/Autosave/index.tsx"],"sourcesContent":["'use client'\n// TODO: abstract the `next/navigation` dependency out from this component\nimport type { ClientCollectionConfig, ClientGlobalConfig } from 'payload'\n\nimport { dequal } from 'dequal/lite'\nimport {\n getAutosaveInterval,\n hasDraftValidationEnabled,\n reduceFieldsToValues,\n} from 'payload/shared'\nimport React, { useDeferredValue, useEffect, useRef, useState } from 'react'\n\nimport type { OnSaveContext } from '../../views/Edit/index.js'\n\nimport {\n useAllFormFields,\n useForm,\n useFormModified,\n useFormSubmitted,\n} from '../../forms/Form/context.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useQueue } from '../../hooks/useQueue.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatTimeToNow } from '../../utilities/formatDocTitle/formatDateTitle.js'\nimport { reduceFieldsToValuesWithValidation } from '../../utilities/reduceFieldsToValuesWithValidation.js'\nimport { LeaveWithoutSaving } from '../LeaveWithoutSaving/index.js'\nimport './index.scss'\n\nconst baseClass = 'autosave'\n// The minimum time the saving state should be shown\nconst minimumAnimationTime = 1000\n\nexport type Props = {\n collection?: ClientCollectionConfig\n global?: ClientGlobalConfig\n id?: number | string\n publishedDocUpdatedAt: string\n}\n\nexport const Autosave: React.FC<Props> = ({ id, collection, global: globalDoc }) => {\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const {\n docConfig,\n lastUpdateTime,\n mostRecentVersionIsAutosaved,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n } = useDocumentInfo()\n\n const { isValid, setBackgroundProcessing, submit } = useForm()\n\n const [formState] = useAllFormFields()\n const modified = useFormModified()\n const submitted = useFormSubmitted()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n const interval = getAutosaveInterval(docConfig)\n const validateOnDraft = hasDraftValidationEnabled(docConfig)\n\n const [_saving, setSaving] = useState(false)\n\n const saving = useDeferredValue(_saving)\n\n const debouncedFormState = useDebounce(formState, interval)\n\n const formStateRef = useRef(formState)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\n\n // Store fields in ref so the autosave func\n // can always retrieve the most to date copies\n // after the timeout has executed\n formStateRef.current = formState\n\n // Store modified in ref so the autosave func\n // can bail out if modified becomes false while\n // timing out during autosave\n modifiedRef.current = modified\n\n // Store locale in ref so the autosave func\n // can always retrieve the most to date locale\n localeRef.current = locale\n\n const { queueTask } = useQueue()\n\n const autosaveTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n\n const handleAutosave = useEffectEvent(() => {\n autosaveTimeoutRef.current = undefined\n // We need to log the time in order to figure out if we need to trigger the state off later\n let startTimestamp = undefined\n let endTimestamp = undefined\n\n const hideIndicator = () => {\n // If request was faster than minimum animation time, animate the difference\n if (endTimestamp - startTimestamp < minimumAnimationTime) {\n autosaveTimeoutRef.current = setTimeout(\n () => {\n setSaving(false)\n },\n minimumAnimationTime - (endTimestamp - startTimestamp),\n )\n } else {\n stopAutoSaveIndicator()\n }\n }\n\n queueTask(\n async () => {\n if (modified) {\n startTimestamp = new Date().getTime()\n\n setSaving(true)\n\n let url: string\n let method: string\n let entitySlug: string\n\n if (collection && id) {\n entitySlug = collection.slug\n url = `${serverURL}${api}/${entitySlug}/${id}?depth=0&draft=true&autosave=true&locale=${localeRef.current}&fallback-locale=null`\n method = 'PATCH'\n }\n\n if (globalDoc) {\n entitySlug = globalDoc.slug\n url = `${serverURL}${api}/globals/${entitySlug}?depth=0&draft=true&autosave=true&locale=${localeRef.current}&fallback-locale=null`\n method = 'POST'\n }\n\n const { valid } = reduceFieldsToValuesWithValidation(formStateRef.current, true)\n\n const skipSubmission = submitted && !valid && validateOnDraft\n\n if (!skipSubmission && modifiedRef.current && url) {\n const result = await submit<any, OnSaveContext>({\n acceptValues: {\n overrideLocalChanges: false,\n },\n action: url,\n context: {\n getDocPermissions: false,\n incrementVersionCount: !mostRecentVersionIsAutosaved,\n },\n disableFormWhileProcessing: false,\n disableSuccessStatus: true,\n method,\n overrides: {\n _status: 'draft',\n },\n skipValidation: !validateOnDraft,\n })\n\n if (result && result?.res?.ok && !mostRecentVersionIsAutosaved) {\n setMostRecentVersionIsAutosaved(true)\n setUnpublishedVersionCount((prev) => prev + 1)\n }\n\n const newDate = new Date()\n\n // We need to log the time in order to figure out if we need to trigger the state off later\n endTimestamp = newDate.getTime()\n\n hideIndicator()\n }\n }\n },\n {\n afterProcess: () => {\n setBackgroundProcessing(false)\n },\n beforeProcess: () => {\n setBackgroundProcessing(true)\n },\n },\n )\n })\n\n const didMount = useRef(false)\n const previousDebouncedData = useRef(reduceFieldsToValues(debouncedFormState))\n\n // When debounced fields change, autosave\n useEffect(() => {\n /**\n * Ensure autosave doesn't run on mount\n */\n if (!didMount.current) {\n didMount.current = true\n return\n }\n\n /**\n * Ensure autosave only runs if the form data changes, not every time the entire form state changes\n * Remove `updatedAt` from comparison as it changes on every autosave interval.\n */\n const { updatedAt: _, ...formData } = reduceFieldsToValues(debouncedFormState)\n const { updatedAt: __, ...prevFormData } = previousDebouncedData.current\n\n if (dequal(formData, prevFormData)) {\n return\n }\n\n previousDebouncedData.current = formData\n\n handleAutosave()\n }, [debouncedFormState])\n\n /**\n * If component unmounts, clear the autosave timeout\n */\n useEffect(() => {\n return () => {\n stopAutoSaveIndicator()\n }\n }, [])\n\n const stopAutoSaveIndicator = useEffectEvent(() => {\n if (autosaveTimeoutRef.current) {\n clearTimeout(autosaveTimeoutRef.current)\n }\n\n setSaving(false)\n })\n\n return (\n <div className={baseClass}>\n {validateOnDraft && !isValid && <LeaveWithoutSaving />}\n {saving && t('general:saving')}\n {!saving && Boolean(lastUpdateTime) && (\n <React.Fragment>\n {t('version:lastSavedAgo', {\n distance: formatTimeToNow({ date: lastUpdateTime, i18n }),\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentControls/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,IAAI,EACJ,yBAAyB,EACzB,6BAA6B,EAC7B,yBAAyB,EAC1B,MAAM,SAAS,CAAA;AAIhB,OAAO,KAA8B,MAAM,OAAO,CAAA;AAElD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAwB9E,OAAO,cAAc,CAAA;AAMrB,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjD,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;KAC3C,CAAA;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAA;IACpB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC,UAAU,CAAC,CAAA;IACzD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAEvC,QAAQ,CAAC,WAAW,CAAC,EAAE,yBAAyB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,yBAAyB,CAAC,WAAW,CAAC,CAAA;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,6BAA6B,GAAG,yBAAyB,CAAA;IACtF,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAC1C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAC3B,CA4UA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentControls/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,IAAI,EACJ,yBAAyB,EACzB,6BAA6B,EAC7B,yBAAyB,EAC1B,MAAM,SAAS,CAAA;AAIhB,OAAO,KAA8B,MAAM,OAAO,CAAA;AAElD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAwB9E,OAAO,cAAc,CAAA;AAMrB,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjD,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;QACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;KAC3C,CAAA;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAA;IACpB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC,UAAU,CAAC,CAAA;IACzD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAEvC,QAAQ,CAAC,WAAW,CAAC,EAAE,yBAAyB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,yBAAyB,CAAC,WAAW,CAAC,CAAA;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,6BAA6B,GAAG,yBAAyB,CAAA;IACtF,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAC1C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAC3B,CAuUA,CAAA"}
@@ -3,7 +3,7 @@
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
5
5
  import { getTranslation } from '@payloadcms/translations';
6
- import { formatAdminURL } from 'payload/shared';
6
+ import { formatAdminURL, hasAutosaveEnabled, hasDraftsEnabled } from 'payload/shared';
7
7
  import React, { Fragment, useEffect } from 'react';
8
8
  import { useFormInitializing, useFormProcessing } from '../../forms/Form/context.js';
9
9
  import { useConfig } from '../../providers/Config/index.js';
@@ -132,12 +132,12 @@ export const DocumentControls = props => {
132
132
  const hasDeletePermission = permissions && "delete" in permissions && permissions.delete;
133
133
  const showDotMenu = Boolean(collectionConfig && id && !disableActions && (hasCreatePermission || hasDeletePermission));
134
134
  const unsavedDraftWithValidations = !id && collectionConfig?.versions?.drafts && collectionConfig.versions?.drafts.validate;
135
- const collectionConfigDrafts = collectionConfig?.versions?.drafts;
136
- const globalConfigDrafts = globalConfig?.versions?.drafts;
137
- const autosaveEnabled = collectionConfigDrafts && collectionConfigDrafts?.autosave || globalConfigDrafts && globalConfigDrafts?.autosave;
138
- const collectionAutosaveEnabled = collectionConfigDrafts && collectionConfigDrafts?.autosave;
139
- const globalAutosaveEnabled = globalConfigDrafts && globalConfigDrafts?.autosave;
140
- const showSaveDraftButton = collectionAutosaveEnabled && collectionConfigDrafts.autosave !== false && collectionConfigDrafts.autosave.showSaveDraftButton === true || globalAutosaveEnabled && globalConfigDrafts.autosave !== false && globalConfigDrafts.autosave.showSaveDraftButton === true;
135
+ const globalHasDraftsEnabled = hasDraftsEnabled(globalConfig);
136
+ const collectionHasDraftsEnabled = hasDraftsEnabled(collectionConfig);
137
+ const collectionAutosaveEnabled = hasAutosaveEnabled(collectionConfig);
138
+ const globalAutosaveEnabled = hasAutosaveEnabled(globalConfig);
139
+ const autosaveEnabled = collectionAutosaveEnabled || globalAutosaveEnabled;
140
+ const showSaveDraftButton = collectionAutosaveEnabled && collectionConfig.versions.drafts.autosave !== false && collectionConfig.versions.drafts.autosave.showSaveDraftButton === true || globalAutosaveEnabled && globalConfig.versions.drafts.autosave !== false && globalConfig.versions.drafts.autosave.showSaveDraftButton === true;
141
141
  const showCopyToLocale = localization && !collectionConfig?.admin?.disableCopyToLocale;
142
142
  const showFolderMetaIcon = collectionConfig && collectionConfig.folders;
143
143
  const showLockedMetaIcon = user && readOnlyForIncomingUser;
@@ -166,7 +166,7 @@ export const DocumentControls = props => {
166
166
  label: getTranslation(collectionConfig?.labels?.singular ?? i18n.t("general:document"), i18n)
167
167
  })
168
168
  })
169
- }), (collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts) && _jsxs(Fragment, {
169
+ }), (collectionHasDraftsEnabled || globalHasDraftsEnabled) && _jsxs(Fragment, {
170
170
  children: [(globalConfig || collectionConfig && isEditing) && _jsx("li", {
171
171
  className: [`${baseClass}__status`, `${baseClass}__list-item`].filter(Boolean).join(" "),
172
172
  children: _jsx(Status, {})
@@ -211,7 +211,7 @@ export const DocumentControls = props => {
211
211
  CustomComponent: CustomPreviewButton,
212
212
  Fallback: _jsx(PreviewButton, {})
213
213
  }), hasSavePermission && !isTrashed && _jsx(Fragment, {
214
- children: collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts ? _jsxs(Fragment, {
214
+ children: collectionHasDraftsEnabled || globalHasDraftsEnabled ? _jsxs(Fragment, {
215
215
  children: [(unsavedDraftWithValidations || !autosaveEnabled || autosaveEnabled && showSaveDraftButton) && _jsx(RenderCustomComponent, {
216
216
  CustomComponent: CustomSaveDraftButton,
217
217
  Fallback: _jsx(SaveDraftButton, {})