@payloadcms/ui 3.24.0-canary.a62d86f → 3.24.0-canary.d22403c

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 (112) hide show
  1. package/dist/elements/Autosave/index.d.ts.map +1 -1
  2. package/dist/elements/Autosave/index.js +108 -143
  3. package/dist/elements/Autosave/index.js.map +1 -1
  4. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  5. package/dist/elements/DeleteDocument/index.js +80 -39
  6. package/dist/elements/DeleteDocument/index.js.map +1 -1
  7. package/dist/elements/DeleteDocument/index.scss +29 -0
  8. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  9. package/dist/elements/DeleteMany/index.js +44 -24
  10. package/dist/elements/DeleteMany/index.js.map +1 -1
  11. package/dist/elements/DeleteMany/index.scss +29 -0
  12. package/dist/elements/DuplicateDocument/index.d.ts +1 -0
  13. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  14. package/dist/elements/DuplicateDocument/index.js +54 -38
  15. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  16. package/dist/elements/DuplicateDocument/index.scss +42 -0
  17. package/dist/elements/GenerateConfirmation/index.d.ts +2 -1
  18. package/dist/elements/GenerateConfirmation/index.d.ts.map +1 -1
  19. package/dist/elements/GenerateConfirmation/index.js +47 -28
  20. package/dist/elements/GenerateConfirmation/index.js.map +1 -1
  21. package/dist/elements/{ConfirmationModal → GenerateConfirmation}/index.scss +1 -1
  22. package/dist/elements/LeaveWithoutSaving/index.d.ts +1 -0
  23. package/dist/elements/LeaveWithoutSaving/index.d.ts.map +1 -1
  24. package/dist/elements/LeaveWithoutSaving/index.js +114 -63
  25. package/dist/elements/LeaveWithoutSaving/index.js.map +1 -1
  26. package/dist/elements/LeaveWithoutSaving/index.scss +39 -0
  27. package/dist/elements/ListControls/index.d.ts +0 -1
  28. package/dist/elements/ListControls/index.d.ts.map +1 -1
  29. package/dist/elements/ListControls/index.js +0 -14
  30. package/dist/elements/ListControls/index.js.map +1 -1
  31. package/dist/elements/ListControls/index.scss +0 -5
  32. package/dist/elements/PublishMany/index.d.ts +1 -0
  33. package/dist/elements/PublishMany/index.d.ts.map +1 -1
  34. package/dist/elements/PublishMany/index.js +46 -27
  35. package/dist/elements/PublishMany/index.js.map +1 -1
  36. package/dist/elements/PublishMany/index.scss +39 -0
  37. package/dist/elements/RelationshipTable/index.d.ts +2 -7
  38. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  39. package/dist/elements/RelationshipTable/index.js +23 -69
  40. package/dist/elements/RelationshipTable/index.js.map +1 -1
  41. package/dist/elements/RelationshipTable/index.scss +0 -6
  42. package/dist/elements/Status/index.d.ts.map +1 -1
  43. package/dist/elements/Status/index.js +154 -179
  44. package/dist/elements/Status/index.js.map +1 -1
  45. package/dist/elements/Status/index.scss +41 -0
  46. package/dist/elements/StayLoggedIn/index.d.ts +1 -0
  47. package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
  48. package/dist/elements/StayLoggedIn/index.js +77 -53
  49. package/dist/elements/StayLoggedIn/index.js.map +1 -1
  50. package/dist/elements/StayLoggedIn/index.scss +40 -0
  51. package/dist/elements/TableColumns/index.d.ts +1 -1
  52. package/dist/elements/TableColumns/index.d.ts.map +1 -1
  53. package/dist/elements/TableColumns/index.js +3 -4
  54. package/dist/elements/TableColumns/index.js.map +1 -1
  55. package/dist/elements/UnpublishMany/index.d.ts +2 -1
  56. package/dist/elements/UnpublishMany/index.d.ts.map +1 -1
  57. package/dist/elements/UnpublishMany/index.js +43 -22
  58. package/dist/elements/UnpublishMany/index.js.map +1 -1
  59. package/dist/elements/UnpublishMany/index.scss +39 -0
  60. package/dist/exports/client/index.d.ts +0 -2
  61. package/dist/exports/client/index.d.ts.map +1 -1
  62. package/dist/exports/client/index.js +23 -23
  63. package/dist/exports/client/index.js.map +4 -4
  64. package/dist/fields/Join/index.d.ts.map +1 -1
  65. package/dist/fields/Join/index.js +3 -8
  66. package/dist/fields/Join/index.js.map +1 -1
  67. package/dist/fields/Select/Input.d.ts.map +1 -1
  68. package/dist/fields/Select/Input.js +0 -2
  69. package/dist/fields/Select/Input.js.map +1 -1
  70. package/dist/forms/Form/index.d.ts.map +1 -1
  71. package/dist/forms/Form/index.js +8 -19
  72. package/dist/forms/Form/index.js.map +1 -1
  73. package/dist/forms/Form/initContextState.d.ts.map +1 -1
  74. package/dist/forms/Form/initContextState.js +0 -2
  75. package/dist/forms/Form/initContextState.js.map +1 -1
  76. package/dist/forms/Form/types.d.ts +0 -6
  77. package/dist/forms/Form/types.d.ts.map +1 -1
  78. package/dist/forms/Form/types.js.map +1 -1
  79. package/dist/providers/Selection/index.d.ts.map +1 -1
  80. package/dist/providers/Selection/index.js +6 -5
  81. package/dist/providers/Selection/index.js.map +1 -1
  82. package/dist/styles.css +1 -1
  83. package/dist/utilities/buildTableState.d.ts.map +1 -1
  84. package/dist/utilities/buildTableState.js +20 -72
  85. package/dist/utilities/buildTableState.js.map +1 -1
  86. package/dist/utilities/handleFormStateLocking.d.ts.map +1 -1
  87. package/dist/utilities/handleFormStateLocking.js +6 -3
  88. package/dist/utilities/handleFormStateLocking.js.map +1 -1
  89. package/dist/utilities/renderTable.d.ts +4 -6
  90. package/dist/utilities/renderTable.d.ts.map +1 -1
  91. package/dist/utilities/renderTable.js +17 -49
  92. package/dist/utilities/renderTable.js.map +1 -1
  93. package/dist/views/Edit/Auth/index.d.ts.map +1 -1
  94. package/dist/views/Edit/Auth/index.js +62 -61
  95. package/dist/views/Edit/Auth/index.js.map +1 -1
  96. package/dist/views/List/index.d.ts.map +1 -1
  97. package/dist/views/List/index.js +0 -2
  98. package/dist/views/List/index.js.map +1 -1
  99. package/package.json +4 -4
  100. package/dist/elements/ConfirmationModal/index.d.ts +0 -19
  101. package/dist/elements/ConfirmationModal/index.d.ts.map +0 -1
  102. package/dist/elements/ConfirmationModal/index.js +0 -143
  103. package/dist/elements/ConfirmationModal/index.js.map +0 -1
  104. package/dist/elements/TableColumns/buildPolymorphicColumnState.d.ts +0 -20
  105. package/dist/elements/TableColumns/buildPolymorphicColumnState.d.ts.map +0 -1
  106. package/dist/elements/TableColumns/buildPolymorphicColumnState.js +0 -200
  107. package/dist/elements/TableColumns/buildPolymorphicColumnState.js.map +0 -1
  108. package/dist/icons/Dots/index.d.ts +0 -7
  109. package/dist/icons/Dots/index.d.ts.map +0 -1
  110. package/dist/icons/Dots/index.js +0 -12
  111. package/dist/icons/Dots/index.js.map +0 -1
  112. package/dist/icons/Dots/index.scss +0 -27
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","getTranslation","useRouter","React","useCallback","toast","useForm","useConfig","useDocumentInfo","useRouteTransition","useTranslation","requests","formatAdminURL","ConfirmationModal","PopupList","Translation","DeleteDocument","props","id","buttonId","collectionSlug","onDelete","redirectAfterDelete","singularLabel","title","titleFromProps","config","routes","admin","adminRoute","api","serverURL","getEntityConfig","collectionConfig","setModified","router","i18n","t","startRouteTransition","openModal","titleToRender","modalSlug","addDefaultError","error","handleDelete","closeConfirmationModal","setConfirming","delete","headers","language","then","res","json","status","success","label","message","push","path","errors","forEach","_err","_jsxs","Fragment","_jsx","Button","onClick","body","elements","1","children","i18nKey","variables","confirmingLabel","heading","onConfirm"],"sources":["../../../src/elements/DeleteDocument/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport React, { useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport type { OnConfirm } from '../ConfirmationModal/index.js'\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { Translation } from '../Translation/index.js'\nimport './index.scss'\n\nexport type Props = {\n readonly buttonId?: string\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly id?: string\n readonly onDelete?: DocumentDrawerContextType['onDelete']\n readonly redirectAfterDelete?: boolean\n readonly singularLabel: SanitizedCollectionConfig['labels']['singular']\n readonly title?: string\n readonly useAsTitle: SanitizedCollectionConfig['admin']['useAsTitle']\n}\n\nexport const DeleteDocument: React.FC<Props> = (props) => {\n const {\n id,\n buttonId,\n collectionSlug,\n onDelete,\n redirectAfterDelete = true,\n singularLabel,\n title: titleFromProps,\n } = props\n\n const {\n config: {\n routes: { admin: adminRoute, api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n\n const { setModified } = useForm()\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const { title } = useDocumentInfo()\n const { startRouteTransition } = useRouteTransition()\n const { openModal } = useModal()\n\n const titleToRender = titleFromProps || title || id\n\n const modalSlug = `delete-${id}`\n\n const addDefaultError = useCallback(() => {\n toast.error(t('error:deletingTitle', { title }))\n }, [t, title])\n\n const handleDelete: OnConfirm = useCallback(\n async ({ closeConfirmationModal, setConfirming }) => {\n setModified(false)\n\n try {\n await requests\n .delete(`${serverURL}${api}/${collectionSlug}/${id}`, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n .then(async (res) => {\n try {\n const json = await res.json()\n setConfirming(false)\n closeConfirmationModal()\n\n if (res.status < 400) {\n toast.success(\n t('general:titleDeleted', {\n label: getTranslation(singularLabel, i18n),\n title,\n }) || json.message,\n )\n\n if (redirectAfterDelete) {\n return startRouteTransition(() =>\n router.push(\n formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}`,\n }),\n ),\n )\n }\n\n if (typeof onDelete === 'function') {\n await onDelete({ id, collectionConfig })\n }\n\n return\n }\n\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n addDefaultError()\n }\n\n return false\n } catch (_err) {\n return addDefaultError()\n }\n })\n } catch (_err) {\n setConfirming(false)\n closeConfirmationModal()\n return addDefaultError()\n }\n },\n [\n setModified,\n serverURL,\n api,\n collectionSlug,\n id,\n t,\n singularLabel,\n addDefaultError,\n i18n,\n title,\n router,\n adminRoute,\n redirectAfterDelete,\n onDelete,\n collectionConfig,\n startRouteTransition,\n ],\n )\n\n if (id) {\n return (\n <React.Fragment>\n <PopupList.Button\n id={buttonId}\n onClick={() => {\n openModal(modalSlug)\n }}\n >\n {t('general:delete')}\n </PopupList.Button>\n <ConfirmationModal\n body={\n <Translation\n elements={{\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToDelete\"\n t={t}\n variables={{\n label: getTranslation(singularLabel, i18n),\n title: titleToRender,\n }}\n />\n }\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={modalSlug}\n onConfirm={handleDelete}\n />\n </React.Fragment>\n )\n }\n\n return null\n}\n"],"mappings":"AAAA;;;AAGA,SAASA,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,SAASC,SAAS,QAAQ;AAC1B,OAAOC,KAAA,IAASC,WAAW,QAAQ;AACnC,SAASC,KAAK,QAAQ;AAKtB,SAASC,OAAO,QAAQ;AACxB,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,SAAS,QAAQ;AAC1B,SAASC,WAAW,QAAQ;AAC5B,OAAO;AAaP,OAAO,MAAMC,cAAA,GAAmCC,KAAA;EAC9C,MAAM;IACJC,EAAE;IACFC,QAAQ;IACRC,cAAc;IACdC,QAAQ;IACRC,mBAAA,GAAsB,IAAI;IAC1BC,aAAa;IACbC,KAAA,EAAOC;EAAc,CACtB,GAAGR,KAAA;EAEJ,MAAM;IACJS,MAAA,EAAQ;MACNC,MAAA,EAAQ;QAAEC,KAAA,EAAOC,UAAU;QAAEC;MAAG,CAAE;MAClCC;IAAS,CACV;IACDC;EAAe,CAChB,GAAGzB,SAAA;EAEJ,MAAM0B,gBAAA,GAAmBD,eAAA,CAAgB;IAAEZ;EAAe;EAE1D,MAAM;IAAEc;EAAW,CAAE,GAAG5B,OAAA;EACxB,MAAM6B,MAAA,GAASjC,SAAA;EACf,MAAM;IAAEkC,IAAI;IAAEC;EAAC,CAAE,GAAG3B,cAAA;EACpB,MAAM;IAAEc;EAAK,CAAE,GAAGhB,eAAA;EAClB,MAAM;IAAE8B;EAAoB,CAAE,GAAG7B,kBAAA;EACjC,MAAM;IAAE8B;EAAS,CAAE,GAAGvC,QAAA;EAEtB,MAAMwC,aAAA,GAAgBf,cAAA,IAAkBD,KAAA,IAASN,EAAA;EAEjD,MAAMuB,SAAA,GAAY,UAAUvB,EAAA,EAAI;EAEhC,MAAMwB,eAAA,GAAkBtC,WAAA,CAAY;IAClCC,KAAA,CAAMsC,KAAK,CAACN,CAAA,CAAE,uBAAuB;MAAEb;IAAM;EAC/C,GAAG,CAACa,CAAA,EAAGb,KAAA,CAAM;EAEb,MAAMoB,YAAA,GAA0BxC,WAAA,CAC9B,OAAO;IAAEyC,sBAAsB;IAAEC;EAAa,CAAE;IAC9CZ,WAAA,CAAY;IAEZ,IAAI;MACF,MAAMvB,QAAA,CACHoC,MAAM,CAAC,GAAGhB,SAAA,GAAYD,GAAA,IAAOV,cAAA,IAAkBF,EAAA,EAAI,EAAE;QACpD8B,OAAA,EAAS;UACP,mBAAmBZ,IAAA,CAAKa,QAAQ;UAChC,gBAAgB;QAClB;MACF,GACCC,IAAI,CAAC,MAAOC,GAAA;QACX,IAAI;UACF,MAAMC,IAAA,GAAO,MAAMD,GAAA,CAAIC,IAAI;UAC3BN,aAAA,CAAc;UACdD,sBAAA;UAEA,IAAIM,GAAA,CAAIE,MAAM,GAAG,KAAK;YACpBhD,KAAA,CAAMiD,OAAO,CACXjB,CAAA,CAAE,wBAAwB;cACxBkB,KAAA,EAAOtD,cAAA,CAAesB,aAAA,EAAea,IAAA;cACrCZ;YACF,MAAM4B,IAAA,CAAKI,OAAO;YAGpB,IAAIlC,mBAAA,EAAqB;cACvB,OAAOgB,oBAAA,CAAqB,MAC1BH,MAAA,CAAOsB,IAAI,CACT7C,cAAA,CAAe;gBACbiB,UAAA;gBACA6B,IAAA,EAAM,gBAAgBtC,cAAA;cACxB;YAGN;YAEA,IAAI,OAAOC,QAAA,KAAa,YAAY;cAClC,MAAMA,QAAA,CAAS;gBAAEH,EAAA;gBAAIe;cAAiB;YACxC;YAEA;UACF;UAEA,IAAImB,IAAA,CAAKO,MAAM,EAAE;YACfP,IAAA,CAAKO,MAAM,CAACC,OAAO,CAAEjB,KAAA,IAAUtC,KAAA,CAAMsC,KAAK,CAACA,KAAA,CAAMa,OAAO;UAC1D,OAAO;YACLd,eAAA;UACF;UAEA,OAAO;QACT,EAAE,OAAOmB,MAAA,EAAM;UACb,OAAOnB,eAAA;QACT;MACF;IACJ,EAAE,OAAOmB,IAAA,EAAM;MACbf,aAAA,CAAc;MACdD,sBAAA;MACA,OAAOH,eAAA;IACT;EACF,GACA,CACER,WAAA,EACAH,SAAA,EACAD,GAAA,EACAV,cAAA,EACAF,EAAA,EACAmB,CAAA,EACAd,aAAA,EACAmB,eAAA,EACAN,IAAA,EACAZ,KAAA,EACAW,MAAA,EACAN,UAAA,EACAP,mBAAA,EACAD,QAAA,EACAY,gBAAA,EACAK,oBAAA,CACD;EAGH,IAAIpB,EAAA,EAAI;IACN,oBACE4C,KAAA,CAAC3D,KAAA,CAAM4D,QAAQ;8BACbC,IAAA,CAAClD,SAAA,CAAUmD,MAAM;QACf/C,EAAA,EAAIC,QAAA;QACJ+C,OAAA,EAASA,CAAA;UACP3B,SAAA,CAAUE,SAAA;QACZ;kBAECJ,CAAA,CAAE;uBAEL2B,IAAA,CAACnD,iBAAA;QACCsD,IAAA,eACEH,IAAA,CAACjD,WAAA;UACCqD,QAAA,EAAU;YACR,KAAKC,CAAC;cAAEC;YAAQ,CAAE,kBAAKN,IAAA,CAAC;wBAAQM;;UAClC;UACAC,OAAA,EAAQ;UACRlC,CAAA,EAAGA,CAAA;UACHmC,SAAA,EAAW;YACTjB,KAAA,EAAOtD,cAAA,CAAesB,aAAA,EAAea,IAAA;YACrCZ,KAAA,EAAOgB;UACT;;QAGJiC,eAAA,EAAiBpC,CAAA,CAAE;QACnBqC,OAAA,EAASrC,CAAA,CAAE;QACXI,SAAA,EAAWA,SAAA;QACXkC,SAAA,EAAW/B;;;EAInB;EAEA,OAAO;AACT","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Modal","useModal","getTranslation","useRouter","React","useCallback","useEffect","useState","toast","useForm","useConfig","useDocumentInfo","useEditDepth","useRouteTransition","useTranslation","requests","formatAdminURL","Button","drawerZBase","PopupList","Translation","baseClass","DeleteDocument","props","id","buttonId","collectionSlug","onDelete","redirectAfterDelete","singularLabel","title","titleFromProps","config","routes","admin","adminRoute","api","serverURL","getEntityConfig","collectionConfig","setModified","deleting","setDeleting","closeModal","toggleModal","router","i18n","t","editDepth","startRouteTransition","titleToRender","modalSlug","addDefaultError","error","handleDelete","delete","headers","language","then","res","json","status","success","label","message","push","path","errors","forEach","e","_jsxs","Fragment","_jsx","onClick","className","slug","style","zIndex","elements","1","children","i18nKey","variables","buttonStyle","undefined","size","type"],"sources":["../../../src/elements/DeleteDocument/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig } from 'payload'\n\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { Button } from '../Button/index.js'\nimport { drawerZBase } from '../Drawer/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { Translation } from '../Translation/index.js'\nimport './index.scss'\n\nconst baseClass = 'delete-document'\n\nexport type Props = {\n readonly buttonId?: string\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly id?: string\n readonly onDelete?: DocumentDrawerContextType['onDelete']\n readonly redirectAfterDelete?: boolean\n readonly singularLabel: SanitizedCollectionConfig['labels']['singular']\n readonly title?: string\n readonly useAsTitle: SanitizedCollectionConfig['admin']['useAsTitle']\n}\n\nexport const DeleteDocument: React.FC<Props> = (props) => {\n const {\n id,\n buttonId,\n collectionSlug,\n onDelete,\n redirectAfterDelete = true,\n singularLabel,\n title: titleFromProps,\n } = props\n\n const {\n config: {\n routes: { admin: adminRoute, api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n\n const { setModified } = useForm()\n const [deleting, setDeleting] = useState(false)\n const { closeModal, toggleModal } = useModal()\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const { title } = useDocumentInfo()\n const editDepth = useEditDepth()\n const { startRouteTransition } = useRouteTransition()\n\n const titleToRender = titleFromProps || title || id\n\n const modalSlug = `delete-${id}`\n\n const addDefaultError = useCallback(() => {\n setDeleting(false)\n toast.error(t('error:deletingTitle', { title }))\n }, [t, title])\n\n useEffect(() => {\n return () => {\n closeModal(modalSlug)\n }\n }, [closeModal, modalSlug])\n\n const handleDelete = useCallback(async () => {\n setDeleting(true)\n setModified(false)\n\n try {\n await requests\n .delete(`${serverURL}${api}/${collectionSlug}/${id}`, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n .then(async (res) => {\n try {\n const json = await res.json()\n\n if (res.status < 400) {\n setDeleting(false)\n toggleModal(modalSlug)\n\n toast.success(\n t('general:titleDeleted', { label: getTranslation(singularLabel, i18n), title }) ||\n json.message,\n )\n\n if (redirectAfterDelete) {\n return startRouteTransition(() =>\n router.push(\n formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}`,\n }),\n ),\n )\n }\n\n if (typeof onDelete === 'function') {\n await onDelete({ id, collectionConfig })\n }\n\n toggleModal(modalSlug)\n\n return\n }\n\n toggleModal(modalSlug)\n\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n addDefaultError()\n }\n return false\n } catch (e) {\n return addDefaultError()\n }\n })\n } catch (e) {\n addDefaultError()\n }\n }, [\n setModified,\n serverURL,\n api,\n collectionSlug,\n id,\n toggleModal,\n modalSlug,\n t,\n singularLabel,\n i18n,\n title,\n router,\n adminRoute,\n addDefaultError,\n redirectAfterDelete,\n onDelete,\n collectionConfig,\n startRouteTransition,\n ])\n\n if (id) {\n return (\n <React.Fragment>\n <PopupList.Button\n id={buttonId}\n onClick={() => {\n setDeleting(false)\n toggleModal(modalSlug)\n }}\n >\n {t('general:delete')}\n </PopupList.Button>\n <Modal\n className={baseClass}\n slug={modalSlug}\n style={{\n zIndex: drawerZBase + editDepth,\n }}\n >\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <h1>{t('general:confirmDeletion')}</h1>\n <p>\n <Translation\n elements={{\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToDelete\"\n t={t}\n variables={{\n label: getTranslation(singularLabel, i18n),\n title: titleToRender,\n }}\n />\n </p>\n </div>\n <div className={`${baseClass}__controls`}>\n <Button\n buttonStyle=\"secondary\"\n id=\"confirm-cancel\"\n onClick={deleting ? undefined : () => toggleModal(modalSlug)}\n size=\"large\"\n type=\"button\"\n >\n {t('general:cancel')}\n </Button>\n <Button\n id=\"confirm-delete\"\n onClick={() => {\n if (!deleting) {\n void handleDelete()\n }\n }}\n size=\"large\"\n >\n {deleting ? t('general:deleting') : t('general:confirm')}\n </Button>\n </div>\n </div>\n </Modal>\n </React.Fragment>\n )\n }\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
@@ -11,5 +11,34 @@
11
11
  &__toggle {
12
12
  @extend %btn-reset;
13
13
  }
14
+
15
+ &__wrapper {
16
+ z-index: 1;
17
+ position: relative;
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: base(0.8);
21
+ padding: base(2);
22
+ max-width: base(36);
23
+ }
24
+
25
+ &__content {
26
+ display: flex;
27
+ flex-direction: column;
28
+ gap: base(0.4);
29
+
30
+ > * {
31
+ margin: 0;
32
+ }
33
+ }
34
+
35
+ &__controls {
36
+ display: flex;
37
+ gap: base(0.4);
38
+
39
+ .btn {
40
+ margin: 0;
41
+ }
42
+ }
14
43
  }
15
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DeleteMany/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAMrD,OAAO,KAAsB,MAAM,OAAO,CAAA;AAc1C,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,EAAE,sBAAsB,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6ItC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DeleteMany/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAMrD,OAAO,KAAgC,MAAM,OAAO,CAAA;AAYpD,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,EAAE,sBAAsB,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA8JtC,CAAA"}
@@ -1,11 +1,11 @@
1
1
  'use client';
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
- import { useModal } from '@faceless-ui/modal';
4
+ import { Modal, useModal } from '@faceless-ui/modal';
5
5
  import { getTranslation } from '@payloadcms/translations';
6
6
  import { useRouter, useSearchParams } from 'next/navigation.js';
7
7
  import * as qs from 'qs-esm';
8
- import React, { useCallback } from 'react';
8
+ import React, { useCallback, useState } from 'react';
9
9
  import { toast } from 'sonner';
10
10
  import { useAuth } from '../../providers/Auth/index.js';
11
11
  import { useConfig } from '../../providers/Config/index.js';
@@ -14,7 +14,7 @@ import { SelectAllStatus, useSelection } from '../../providers/Selection/index.j
14
14
  import { useTranslation } from '../../providers/Translation/index.js';
15
15
  import { requests } from '../../utilities/api.js';
16
16
  import { mergeListSearchAndWhere } from '../../utilities/mergeListSearchAndWhere.js';
17
- import { ConfirmationModal } from '../ConfirmationModal/index.js';
17
+ import { Button } from '../Button/index.js';
18
18
  import { Pill } from '../Pill/index.js';
19
19
  import './index.scss';
20
20
  const baseClass = 'delete-documents';
@@ -41,7 +41,7 @@ export const DeleteMany = props => {
41
41
  }
42
42
  } = useConfig();
43
43
  const {
44
- openModal
44
+ toggleModal
45
45
  } = useModal();
46
46
  const {
47
47
  count,
@@ -53,6 +53,7 @@ export const DeleteMany = props => {
53
53
  i18n,
54
54
  t
55
55
  } = useTranslation();
56
+ const [deleting, setDeleting] = useState(false);
56
57
  const router = useRouter();
57
58
  const searchParams = useSearchParams();
58
59
  const {
@@ -64,10 +65,8 @@ export const DeleteMany = props => {
64
65
  const addDefaultError = useCallback(() => {
65
66
  toast.error(t('error:unknown'));
66
67
  }, [t]);
67
- const handleDelete = useCallback(async ({
68
- closeConfirmationModal,
69
- setConfirming
70
- }) => {
68
+ const handleDelete = useCallback(async () => {
69
+ setDeleting(true);
71
70
  const queryWithSearch = mergeListSearchAndWhere({
72
71
  collectionConfig: collection,
73
72
  search: searchParams.get('search')
@@ -81,8 +80,7 @@ export const DeleteMany = props => {
81
80
  }).then(async res => {
82
81
  try {
83
82
  const json = await res.json();
84
- setConfirming(false);
85
- closeConfirmationModal();
83
+ toggleModal(modalSlug);
86
84
  const deletedDocs = json?.docs.length || 0;
87
85
  const successLabel = deletedDocs > 1 ? plural : singular;
88
86
  if (res.status < 400 || deletedDocs > 0) {
@@ -109,16 +107,14 @@ export const DeleteMany = props => {
109
107
  description: json.errors.map(error_0 => error_0.message).join('\n')
110
108
  });
111
109
  } else {
112
- return addDefaultError();
110
+ addDefaultError();
113
111
  }
114
112
  return false;
115
113
  } catch (_err) {
116
- setConfirming(false);
117
- closeConfirmationModal();
118
114
  return addDefaultError();
119
115
  }
120
116
  });
121
- }, [searchParams, addDefaultError, api, getQueryParams, i18n, plural, router, selectAll, serverURL, singular, slug, t, toggleAll, clearRouteCache, collection]);
117
+ }, [searchParams, addDefaultError, api, getQueryParams, i18n, modalSlug, plural, router, selectAll, serverURL, singular, slug, t, toggleAll, toggleModal, clearRouteCache, collection]);
122
118
  if (selectAll === SelectAllStatus.None || !hasDeletePermission) {
123
119
  return null;
124
120
  }
@@ -126,18 +122,42 @@ export const DeleteMany = props => {
126
122
  children: [/*#__PURE__*/_jsx(Pill, {
127
123
  className: `${baseClass}__toggle`,
128
124
  onClick: () => {
129
- openModal(modalSlug);
125
+ setDeleting(false);
126
+ toggleModal(modalSlug);
130
127
  },
131
128
  children: t('general:delete')
132
- }), /*#__PURE__*/_jsx(ConfirmationModal, {
133
- body: t('general:aboutToDeleteCount', {
134
- count,
135
- label: getTranslation(count > 1 ? plural : singular, i18n)
136
- }),
137
- confirmingLabel: t('general:deleting'),
138
- heading: t('general:confirmDeletion'),
139
- modalSlug: modalSlug,
140
- onConfirm: handleDelete
129
+ }), /*#__PURE__*/_jsx(Modal, {
130
+ className: baseClass,
131
+ slug: modalSlug,
132
+ children: /*#__PURE__*/_jsxs("div", {
133
+ className: `${baseClass}__wrapper`,
134
+ children: [/*#__PURE__*/_jsxs("div", {
135
+ className: `${baseClass}__content`,
136
+ children: [/*#__PURE__*/_jsx("h1", {
137
+ children: t('general:confirmDeletion')
138
+ }), /*#__PURE__*/_jsx("p", {
139
+ children: t('general:aboutToDeleteCount', {
140
+ count,
141
+ label: getTranslation(count > 1 ? plural : singular, i18n)
142
+ })
143
+ })]
144
+ }), /*#__PURE__*/_jsxs("div", {
145
+ className: `${baseClass}__controls`,
146
+ children: [/*#__PURE__*/_jsx(Button, {
147
+ buttonStyle: "secondary",
148
+ id: "confirm-cancel",
149
+ onClick: deleting ? undefined : () => toggleModal(modalSlug),
150
+ size: "large",
151
+ type: "button",
152
+ children: t('general:cancel')
153
+ }), /*#__PURE__*/_jsx(Button, {
154
+ id: "confirm-delete",
155
+ onClick: deleting ? undefined : handleDelete,
156
+ size: "large",
157
+ children: deleting ? t('general:deleting') : t('general:confirm')
158
+ })]
159
+ })]
160
+ })
141
161
  })]
142
162
  });
143
163
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","getTranslation","useRouter","useSearchParams","qs","React","useCallback","toast","useAuth","useConfig","useRouteCache","SelectAllStatus","useSelection","useTranslation","requests","mergeListSearchAndWhere","ConfirmationModal","Pill","baseClass","DeleteMany","props","collection","slug","labels","plural","singular","permissions","config","routes","api","serverURL","openModal","count","getQueryParams","selectAll","toggleAll","i18n","t","router","searchParams","clearRouteCache","collectionPermissions","collections","hasDeletePermission","delete","modalSlug","addDefaultError","error","handleDelete","closeConfirmationModal","setConfirming","queryWithSearch","collectionConfig","search","get","queryString","headers","language","then","res","json","deletedDocs","docs","length","successLabel","status","success","label","errors","message","description","map","join","replace","stringify","page","undefined","addQueryPrefix","_err","None","_jsxs","Fragment","_jsx","className","onClick","body","confirmingLabel","heading","onConfirm"],"sources":["../../../src/elements/DeleteMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport type { OnConfirm } from '../ConfirmationModal/index.js'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { mergeListSearchAndWhere } from '../../utilities/mergeListSearchAndWhere.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { Pill } from '../Pill/index.js'\nimport './index.scss'\n\nconst baseClass = 'delete-documents'\n\nexport type Props = {\n collection: ClientCollectionConfig\n title?: string\n}\n\nexport const DeleteMany: React.FC<Props> = (props) => {\n const { collection, collection: { slug, labels: { plural, singular } } = {} } = props\n\n const { permissions } = useAuth()\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const { openModal } = useModal()\n const { count, getQueryParams, selectAll, toggleAll } = useSelection()\n const { i18n, t } = useTranslation()\n const router = useRouter()\n const searchParams = useSearchParams()\n const { clearRouteCache } = useRouteCache()\n\n const collectionPermissions = permissions?.collections?.[slug]\n const hasDeletePermission = collectionPermissions?.delete\n\n const modalSlug = `delete-${slug}`\n\n const addDefaultError = useCallback(() => {\n toast.error(t('error:unknown'))\n }, [t])\n\n const handleDelete: OnConfirm = useCallback(\n async ({ closeConfirmationModal, setConfirming }) => {\n const queryWithSearch = mergeListSearchAndWhere({\n collectionConfig: collection,\n search: searchParams.get('search'),\n })\n\n const queryString = getQueryParams(queryWithSearch)\n\n await requests\n .delete(`${serverURL}${api}/${slug}${queryString}`, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n .then(async (res) => {\n try {\n const json = await res.json()\n setConfirming(false)\n closeConfirmationModal()\n\n const deletedDocs = json?.docs.length || 0\n const successLabel = deletedDocs > 1 ? plural : singular\n\n if (res.status < 400 || deletedDocs > 0) {\n toast.success(\n t('general:deletedCountSuccessfully', {\n count: deletedDocs,\n label: getTranslation(successLabel, i18n),\n }),\n )\n\n if (json?.errors.length > 0) {\n toast.error(json.message, {\n description: json.errors.map((error) => error.message).join('\\n'),\n })\n }\n\n toggleAll()\n\n router.replace(\n qs.stringify(\n {\n page: selectAll ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n\n clearRouteCache()\n\n return null\n }\n\n if (json.errors) {\n toast.error(json.message, {\n description: json.errors.map((error) => error.message).join('\\n'),\n })\n } else {\n return addDefaultError()\n }\n return false\n } catch (_err) {\n setConfirming(false)\n closeConfirmationModal()\n return addDefaultError()\n }\n })\n },\n [\n searchParams,\n addDefaultError,\n api,\n getQueryParams,\n i18n,\n plural,\n router,\n selectAll,\n serverURL,\n singular,\n slug,\n t,\n toggleAll,\n clearRouteCache,\n collection,\n ],\n )\n\n if (selectAll === SelectAllStatus.None || !hasDeletePermission) {\n return null\n }\n\n return (\n <React.Fragment>\n <Pill\n className={`${baseClass}__toggle`}\n onClick={() => {\n openModal(modalSlug)\n }}\n >\n {t('general:delete')}\n </Pill>\n <ConfirmationModal\n body={t('general:aboutToDeleteCount', {\n count,\n label: getTranslation(count > 1 ? plural : singular, i18n),\n })}\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={modalSlug}\n onConfirm={handleDelete}\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Modal","useModal","getTranslation","useRouter","useSearchParams","qs","React","useCallback","useState","toast","useAuth","useConfig","useRouteCache","SelectAllStatus","useSelection","useTranslation","requests","mergeListSearchAndWhere","Button","Pill","baseClass","DeleteMany","props","collection","slug","labels","plural","singular","permissions","config","routes","api","serverURL","toggleModal","count","getQueryParams","selectAll","toggleAll","i18n","t","deleting","setDeleting","router","searchParams","clearRouteCache","collectionPermissions","collections","hasDeletePermission","delete","modalSlug","addDefaultError","error","handleDelete","queryWithSearch","collectionConfig","search","get","queryString","headers","language","then","res","json","deletedDocs","docs","length","successLabel","status","success","label","errors","message","description","map","join","replace","stringify","page","undefined","addQueryPrefix","_err","None","_jsxs","Fragment","_jsx","className","onClick","buttonStyle","id","size","type"],"sources":["../../../src/elements/DeleteMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig } from 'payload'\n\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { mergeListSearchAndWhere } from '../../utilities/mergeListSearchAndWhere.js'\nimport { Button } from '../Button/index.js'\nimport { Pill } from '../Pill/index.js'\nimport './index.scss'\n\nconst baseClass = 'delete-documents'\n\nexport type Props = {\n collection: ClientCollectionConfig\n title?: string\n}\n\nexport const DeleteMany: React.FC<Props> = (props) => {\n const { collection, collection: { slug, labels: { plural, singular } } = {} } = props\n\n const { permissions } = useAuth()\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const { toggleModal } = useModal()\n const { count, getQueryParams, selectAll, toggleAll } = useSelection()\n const { i18n, t } = useTranslation()\n const [deleting, setDeleting] = useState(false)\n const router = useRouter()\n const searchParams = useSearchParams()\n const { clearRouteCache } = useRouteCache()\n\n const collectionPermissions = permissions?.collections?.[slug]\n const hasDeletePermission = collectionPermissions?.delete\n\n const modalSlug = `delete-${slug}`\n\n const addDefaultError = useCallback(() => {\n toast.error(t('error:unknown'))\n }, [t])\n\n const handleDelete = useCallback(async () => {\n setDeleting(true)\n\n const queryWithSearch = mergeListSearchAndWhere({\n collectionConfig: collection,\n search: searchParams.get('search'),\n })\n\n const queryString = getQueryParams(queryWithSearch)\n\n await requests\n .delete(`${serverURL}${api}/${slug}${queryString}`, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n .then(async (res) => {\n try {\n const json = await res.json()\n toggleModal(modalSlug)\n\n const deletedDocs = json?.docs.length || 0\n const successLabel = deletedDocs > 1 ? plural : singular\n\n if (res.status < 400 || deletedDocs > 0) {\n toast.success(\n t('general:deletedCountSuccessfully', {\n count: deletedDocs,\n label: getTranslation(successLabel, i18n),\n }),\n )\n\n if (json?.errors.length > 0) {\n toast.error(json.message, {\n description: json.errors.map((error) => error.message).join('\\n'),\n })\n }\n\n toggleAll()\n\n router.replace(\n qs.stringify(\n {\n page: selectAll ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n\n clearRouteCache()\n\n return null\n }\n\n if (json.errors) {\n toast.error(json.message, {\n description: json.errors.map((error) => error.message).join('\\n'),\n })\n } else {\n addDefaultError()\n }\n return false\n } catch (_err) {\n return addDefaultError()\n }\n })\n }, [\n searchParams,\n addDefaultError,\n api,\n getQueryParams,\n i18n,\n modalSlug,\n plural,\n router,\n selectAll,\n serverURL,\n singular,\n slug,\n t,\n toggleAll,\n toggleModal,\n clearRouteCache,\n collection,\n ])\n\n if (selectAll === SelectAllStatus.None || !hasDeletePermission) {\n return null\n }\n\n return (\n <React.Fragment>\n <Pill\n className={`${baseClass}__toggle`}\n onClick={() => {\n setDeleting(false)\n toggleModal(modalSlug)\n }}\n >\n {t('general:delete')}\n </Pill>\n <Modal className={baseClass} slug={modalSlug}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <h1>{t('general:confirmDeletion')}</h1>\n <p>\n {t('general:aboutToDeleteCount', {\n count,\n label: getTranslation(count > 1 ? plural : singular, i18n),\n })}\n </p>\n </div>\n <div className={`${baseClass}__controls`}>\n <Button\n buttonStyle=\"secondary\"\n id=\"confirm-cancel\"\n onClick={deleting ? undefined : () => toggleModal(modalSlug)}\n size=\"large\"\n type=\"button\"\n >\n {t('general:cancel')}\n </Button>\n <Button id=\"confirm-delete\" onClick={deleting ? undefined : handleDelete} size=\"large\">\n {deleting ? t('general:deleting') : t('general:confirm')}\n </Button>\n </div>\n </div>\n </Modal>\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -7,5 +7,34 @@
7
7
  align-items: center;
8
8
  justify-content: center;
9
9
  height: 100%;
10
+
11
+ &__wrapper {
12
+ z-index: 1;
13
+ position: relative;
14
+ display: flex;
15
+ flex-direction: column;
16
+ gap: base(0.8);
17
+ padding: base(2);
18
+ max-width: base(36);
19
+ }
20
+
21
+ &__content {
22
+ display: flex;
23
+ flex-direction: column;
24
+ gap: base(0.4);
25
+
26
+ > * {
27
+ margin: 0;
28
+ }
29
+ }
30
+
31
+ &__controls {
32
+ display: flex;
33
+ gap: base(0.4);
34
+
35
+ .btn {
36
+ margin: 0;
37
+ }
38
+ }
10
39
  }
11
40
  }
@@ -1,6 +1,7 @@
1
1
  import type { SanitizedCollectionConfig } from 'payload';
2
2
  import React from 'react';
3
3
  import type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js';
4
+ import './index.scss';
4
5
  export type Props = {
5
6
  readonly id: string;
6
7
  readonly onDuplicate?: DocumentDrawerContextType['onDuplicate'];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DuplicateDocument/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAKxD,OAAO,KAAsB,MAAM,OAAO,CAAA;AAI1C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAY9E,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,WAAW,CAAC,EAAE,yBAAyB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,aAAa,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAA;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6I7C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DuplicateDocument/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAKxD,OAAO,KAAgC,MAAM,OAAO,CAAA;AAGpD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAY9E,OAAO,cAAc,CAAA;AAKrB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,WAAW,CAAC,EAAE,yBAAyB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,aAAa,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAA;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAoJ7C,CAAA"}
@@ -1,20 +1,24 @@
1
1
  'use client';
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
- import { useModal } from '@faceless-ui/modal';
4
+ import { Modal, useModal } from '@faceless-ui/modal';
5
5
  import { getTranslation } from '@payloadcms/translations';
6
6
  import { useRouter } from 'next/navigation.js';
7
- import React, { useCallback } from 'react';
7
+ import React, { useCallback, useState } from 'react';
8
8
  import { toast } from 'sonner';
9
9
  import { useForm, useFormModified } from '../../forms/Form/context.js';
10
10
  import { useConfig } from '../../providers/Config/index.js';
11
+ import { useEditDepth } from '../../providers/EditDepth/index.js';
11
12
  import { useLocale } from '../../providers/Locale/index.js';
12
13
  import { useRouteTransition } from '../../providers/RouteTransition/index.js';
13
14
  import { useTranslation } from '../../providers/Translation/index.js';
14
15
  import { requests } from '../../utilities/api.js';
15
16
  import { formatAdminURL } from '../../utilities/formatAdminURL.js';
16
- import { ConfirmationModal } from '../ConfirmationModal/index.js';
17
+ import { Button } from '../Button/index.js';
18
+ import { drawerZBase } from '../Drawer/index.js';
19
+ import './index.scss';
17
20
  import { PopupList } from '../Popup/index.js';
21
+ const baseClass = 'duplicate';
18
22
  export const DuplicateDocument = ({
19
23
  id,
20
24
  slug,
@@ -25,7 +29,7 @@ export const DuplicateDocument = ({
25
29
  const router = useRouter();
26
30
  const modified = useFormModified();
27
31
  const {
28
- openModal
32
+ toggleModal
29
33
  } = useModal();
30
34
  const locale = useLocale();
31
35
  const {
@@ -47,16 +51,19 @@ export const DuplicateDocument = ({
47
51
  const collectionConfig = getEntityConfig({
48
52
  collectionSlug: slug
49
53
  });
50
- const [renderModal, setRenderModal] = React.useState(false);
54
+ const [hasClicked, setHasClicked] = useState(false);
51
55
  const {
52
56
  i18n,
53
57
  t
54
58
  } = useTranslation();
55
59
  const modalSlug = `duplicate-${id}`;
56
- const duplicate = useCallback(async ({
57
- onResponse
58
- } = {}) => {
59
- setRenderModal(true);
60
+ const editDepth = useEditDepth();
61
+ const handleClick = useCallback(async (override = false) => {
62
+ setHasClicked(true);
63
+ if (modified && !override) {
64
+ toggleModal(modalSlug);
65
+ return;
66
+ }
60
67
  await requests.post(`${serverURL}${apiRoute}/${slug}/${id}/duplicate${locale?.code ? `?locale=${locale.code}` : ''}`, {
61
68
  body: JSON.stringify({}),
62
69
  headers: {
@@ -70,9 +77,6 @@ export const DuplicateDocument = ({
70
77
  errors,
71
78
  message
72
79
  } = await res.json();
73
- if (typeof onResponse === 'function') {
74
- onResponse();
75
- }
76
80
  if (res.status < 400) {
77
81
  toast.success(message || t('general:successfullyDuplicated', {
78
82
  label: getTranslation(singularLabel, i18n)
@@ -96,36 +100,48 @@ export const DuplicateDocument = ({
96
100
  }));
97
101
  }
98
102
  });
99
- }, [locale, serverURL, apiRoute, slug, id, i18n, t, singularLabel, onDuplicate, redirectAfterDuplicate, setModified, router, adminRoute, collectionConfig, startRouteTransition]);
100
- const onConfirm = useCallback(async ({
101
- closeConfirmationModal,
102
- setConfirming
103
- }) => {
104
- setRenderModal(false);
105
- await duplicate({
106
- onResponse: () => {
107
- setConfirming(false);
108
- closeConfirmationModal();
109
- }
110
- });
111
- }, [duplicate]);
103
+ }, [locale, modified, serverURL, apiRoute, slug, id, i18n, toggleModal, modalSlug, t, singularLabel, onDuplicate, redirectAfterDuplicate, setModified, router, adminRoute, collectionConfig, startRouteTransition]);
104
+ const confirm = useCallback(async () => {
105
+ setHasClicked(false);
106
+ await handleClick(true);
107
+ }, [handleClick]);
112
108
  return /*#__PURE__*/_jsxs(React.Fragment, {
113
109
  children: [/*#__PURE__*/_jsx(PopupList.Button, {
114
110
  id: "action-duplicate",
115
- onClick: () => {
116
- if (modified) {
117
- setRenderModal(true);
118
- return openModal(modalSlug);
119
- }
120
- return duplicate();
121
- },
111
+ onClick: () => void handleClick(false),
122
112
  children: t('general:duplicate')
123
- }), renderModal && /*#__PURE__*/_jsx(ConfirmationModal, {
124
- body: t('general:unsavedChangesDuplicate'),
125
- confirmLabel: t('general:duplicateWithoutSaving'),
126
- heading: t('general:unsavedChanges'),
127
- modalSlug: modalSlug,
128
- onConfirm: onConfirm
113
+ }), modified && hasClicked && /*#__PURE__*/_jsx(Modal, {
114
+ className: `${baseClass}__modal`,
115
+ slug: modalSlug,
116
+ style: {
117
+ zIndex: drawerZBase + editDepth
118
+ },
119
+ children: /*#__PURE__*/_jsxs("div", {
120
+ className: `${baseClass}__wrapper`,
121
+ children: [/*#__PURE__*/_jsxs("div", {
122
+ className: `${baseClass}__content`,
123
+ children: [/*#__PURE__*/_jsx("h1", {
124
+ children: t('general:confirmDuplication')
125
+ }), /*#__PURE__*/_jsx("p", {
126
+ children: t('general:unsavedChangesDuplicate')
127
+ })]
128
+ }), /*#__PURE__*/_jsxs("div", {
129
+ className: `${baseClass}__controls`,
130
+ children: [/*#__PURE__*/_jsx(Button, {
131
+ buttonStyle: "secondary",
132
+ id: "confirm-cancel",
133
+ onClick: () => toggleModal(modalSlug),
134
+ size: "large",
135
+ type: "button",
136
+ children: t('general:cancel')
137
+ }), /*#__PURE__*/_jsx(Button, {
138
+ id: "confirm-duplicate",
139
+ onClick: () => void confirm(),
140
+ size: "large",
141
+ children: t('general:duplicateWithoutSaving')
142
+ })]
143
+ })]
144
+ })
129
145
  })]
130
146
  });
131
147
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","getTranslation","useRouter","React","useCallback","toast","useForm","useFormModified","useConfig","useLocale","useRouteTransition","useTranslation","requests","formatAdminURL","ConfirmationModal","PopupList","DuplicateDocument","id","slug","onDuplicate","redirectAfterDuplicate","singularLabel","router","modified","openModal","locale","setModified","startRouteTransition","config","routes","admin","adminRoute","api","apiRoute","serverURL","getEntityConfig","collectionConfig","collectionSlug","renderModal","setRenderModal","useState","i18n","t","modalSlug","duplicate","onResponse","post","code","body","JSON","stringify","headers","language","credentials","then","res","doc","errors","message","json","status","success","label","push","path","error","onConfirm","closeConfirmationModal","setConfirming","_jsxs","Fragment","_jsx","Button","onClick","confirmLabel","heading"],"sources":["../../../src/elements/DuplicateDocument/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedCollectionConfig } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport React, { useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport type { OnConfirm } from '../ConfirmationModal/index.js'\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { PopupList } from '../Popup/index.js'\n\nexport type Props = {\n readonly id: string\n readonly onDuplicate?: DocumentDrawerContextType['onDuplicate']\n readonly redirectAfterDuplicate?: boolean\n readonly singularLabel: SanitizedCollectionConfig['labels']['singular']\n readonly slug: string\n}\n\nexport const DuplicateDocument: React.FC<Props> = ({\n id,\n slug,\n onDuplicate,\n redirectAfterDuplicate = true,\n singularLabel,\n}) => {\n const router = useRouter()\n const modified = useFormModified()\n const { openModal } = useModal()\n const locale = useLocale()\n const { setModified } = useForm()\n const { startRouteTransition } = useRouteTransition()\n\n const {\n config: {\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug: slug })\n\n const [renderModal, setRenderModal] = React.useState(false)\n const { i18n, t } = useTranslation()\n\n const modalSlug = `duplicate-${id}`\n\n const duplicate = useCallback(\n async ({ onResponse }: { onResponse?: () => void } = {}) => {\n setRenderModal(true)\n\n await requests\n .post(\n `${serverURL}${apiRoute}/${slug}/${id}/duplicate${locale?.code ? `?locale=${locale.code}` : ''}`,\n {\n body: JSON.stringify({}),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n credentials: 'include',\n },\n },\n )\n .then(async (res) => {\n const { doc, errors, message } = await res.json()\n if (typeof onResponse === 'function') {\n onResponse()\n }\n\n if (res.status < 400) {\n toast.success(\n message ||\n t('general:successfullyDuplicated', { label: getTranslation(singularLabel, i18n) }),\n )\n\n setModified(false)\n\n if (redirectAfterDuplicate) {\n return startRouteTransition(() =>\n router.push(\n formatAdminURL({\n adminRoute,\n path: `/collections/${slug}/${doc.id}${locale?.code ? `?locale=${locale.code}` : ''}`,\n }),\n ),\n )\n }\n\n if (typeof onDuplicate === 'function') {\n void onDuplicate({ collectionConfig, doc })\n }\n } else {\n toast.error(\n errors?.[0].message ||\n message ||\n t('error:unspecific', { label: getTranslation(singularLabel, i18n) }),\n )\n }\n })\n },\n [\n locale,\n serverURL,\n apiRoute,\n slug,\n id,\n i18n,\n t,\n singularLabel,\n onDuplicate,\n redirectAfterDuplicate,\n setModified,\n router,\n adminRoute,\n collectionConfig,\n startRouteTransition,\n ],\n )\n\n const onConfirm: OnConfirm = useCallback(\n async ({ closeConfirmationModal, setConfirming }) => {\n setRenderModal(false)\n\n await duplicate({\n onResponse: () => {\n setConfirming(false)\n closeConfirmationModal()\n },\n })\n },\n [duplicate],\n )\n\n return (\n <React.Fragment>\n <PopupList.Button\n id=\"action-duplicate\"\n onClick={() => {\n if (modified) {\n setRenderModal(true)\n return openModal(modalSlug)\n }\n\n return duplicate()\n }}\n >\n {t('general:duplicate')}\n </PopupList.Button>\n {renderModal && (\n <ConfirmationModal\n body={t('general:unsavedChangesDuplicate')}\n confirmLabel={t('general:duplicateWithoutSaving')}\n heading={t('general:unsavedChanges')}\n modalSlug={modalSlug}\n onConfirm={onConfirm}\n />\n )}\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Modal","useModal","getTranslation","useRouter","React","useCallback","useState","toast","useForm","useFormModified","useConfig","useEditDepth","useLocale","useRouteTransition","useTranslation","requests","formatAdminURL","Button","drawerZBase","PopupList","baseClass","DuplicateDocument","id","slug","onDuplicate","redirectAfterDuplicate","singularLabel","router","modified","toggleModal","locale","setModified","startRouteTransition","config","routes","admin","adminRoute","api","apiRoute","serverURL","getEntityConfig","collectionConfig","collectionSlug","hasClicked","setHasClicked","i18n","t","modalSlug","editDepth","handleClick","override","post","code","body","JSON","stringify","headers","language","credentials","then","res","doc","errors","message","json","status","success","label","push","path","error","confirm","_jsxs","Fragment","_jsx","onClick","className","style","zIndex","buttonStyle","size","type"],"sources":["../../../src/elements/DuplicateDocument/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedCollectionConfig } from 'payload'\n\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport React, { useCallback, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { Button } from '../Button/index.js'\nimport { drawerZBase } from '../Drawer/index.js'\nimport './index.scss'\nimport { PopupList } from '../Popup/index.js'\n\nconst baseClass = 'duplicate'\n\nexport type Props = {\n readonly id: string\n readonly onDuplicate?: DocumentDrawerContextType['onDuplicate']\n readonly redirectAfterDuplicate?: boolean\n readonly singularLabel: SanitizedCollectionConfig['labels']['singular']\n readonly slug: string\n}\n\nexport const DuplicateDocument: React.FC<Props> = ({\n id,\n slug,\n onDuplicate,\n redirectAfterDuplicate = true,\n singularLabel,\n}) => {\n const router = useRouter()\n const modified = useFormModified()\n const { toggleModal } = useModal()\n const locale = useLocale()\n const { setModified } = useForm()\n const { startRouteTransition } = useRouteTransition()\n\n const {\n config: {\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug: slug })\n\n const [hasClicked, setHasClicked] = useState<boolean>(false)\n const { i18n, t } = useTranslation()\n\n const modalSlug = `duplicate-${id}`\n\n const editDepth = useEditDepth()\n\n const handleClick = useCallback(\n async (override = false) => {\n setHasClicked(true)\n\n if (modified && !override) {\n toggleModal(modalSlug)\n return\n }\n await requests\n .post(\n `${serverURL}${apiRoute}/${slug}/${id}/duplicate${locale?.code ? `?locale=${locale.code}` : ''}`,\n {\n body: JSON.stringify({}),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n credentials: 'include',\n },\n },\n )\n .then(async (res) => {\n const { doc, errors, message } = await res.json()\n if (res.status < 400) {\n toast.success(\n message ||\n t('general:successfullyDuplicated', { label: getTranslation(singularLabel, i18n) }),\n )\n\n setModified(false)\n\n if (redirectAfterDuplicate) {\n return startRouteTransition(() =>\n router.push(\n formatAdminURL({\n adminRoute,\n path: `/collections/${slug}/${doc.id}${locale?.code ? `?locale=${locale.code}` : ''}`,\n }),\n ),\n )\n }\n\n if (typeof onDuplicate === 'function') {\n void onDuplicate({ collectionConfig, doc })\n }\n } else {\n toast.error(\n errors?.[0].message ||\n message ||\n t('error:unspecific', { label: getTranslation(singularLabel, i18n) }),\n )\n }\n })\n },\n [\n locale,\n modified,\n serverURL,\n apiRoute,\n slug,\n id,\n i18n,\n toggleModal,\n modalSlug,\n t,\n singularLabel,\n onDuplicate,\n redirectAfterDuplicate,\n setModified,\n router,\n adminRoute,\n collectionConfig,\n startRouteTransition,\n ],\n )\n\n const confirm = useCallback(async () => {\n setHasClicked(false)\n await handleClick(true)\n }, [handleClick])\n\n return (\n <React.Fragment>\n <PopupList.Button id=\"action-duplicate\" onClick={() => void handleClick(false)}>\n {t('general:duplicate')}\n </PopupList.Button>\n {modified && hasClicked && (\n <Modal\n className={`${baseClass}__modal`}\n slug={modalSlug}\n style={{\n zIndex: drawerZBase + editDepth,\n }}\n >\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <h1>{t('general:confirmDuplication')}</h1>\n <p>{t('general:unsavedChangesDuplicate')}</p>\n </div>\n <div className={`${baseClass}__controls`}>\n <Button\n buttonStyle=\"secondary\"\n id=\"confirm-cancel\"\n onClick={() => toggleModal(modalSlug)}\n size=\"large\"\n type=\"button\"\n >\n {t('general:cancel')}\n </Button>\n <Button id=\"confirm-duplicate\" onClick={() => void confirm()} size=\"large\">\n {t('general:duplicateWithoutSaving')}\n </Button>\n </div>\n </div>\n </Modal>\n )}\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,42 @@
1
+ @import '../../scss/styles.scss';
2
+
3
+ @layer payload-default {
4
+ .duplicate {
5
+ &__modal {
6
+ @include blur-bg;
7
+ display: flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ height: 100%;
11
+ }
12
+
13
+ &__wrapper {
14
+ z-index: 1;
15
+ position: relative;
16
+ display: flex;
17
+ flex-direction: column;
18
+ gap: base(0.8);
19
+ padding: base(2);
20
+ max-width: base(36);
21
+ }
22
+
23
+ &__content {
24
+ display: flex;
25
+ flex-direction: column;
26
+ gap: base(0.4);
27
+
28
+ > * {
29
+ margin: 0;
30
+ }
31
+ }
32
+
33
+ &__controls {
34
+ display: flex;
35
+ gap: base(0.4);
36
+
37
+ .btn {
38
+ margin: 0;
39
+ }
40
+ }
41
+ }
42
+ }
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
+ import './index.scss';
2
3
  export type GenerateConfirmationProps = {
3
4
  highlightField: (Boolean: any) => void;
4
5
  setKey: () => void;
5
6
  };
6
- export declare function GenerateConfirmation(props: GenerateConfirmationProps): React.JSX.Element;
7
+ export declare const GenerateConfirmation: React.FC<GenerateConfirmationProps>;
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/GenerateConfirmation/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAW1C,MAAM,MAAM,yBAAyB,GAAG;IACtC,cAAc,EAAE,CAAC,OAAO,KAAA,KAAK,IAAI,CAAA;IACjC,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,CAAA;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,qBAgDpE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/GenerateConfirmation/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,yBAAyB,GAAG;IACtC,cAAc,EAAE,CAAC,OAAO,KAAA,KAAK,IAAI,CAAA;IACjC,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA0DpE,CAAA"}