@payloadcms/ui 4.0.0-canary.33 → 4.0.0-canary.34

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 (160) hide show
  1. package/dist/elements/APIKeyInput/index.d.ts +2 -0
  2. package/dist/elements/APIKeyInput/index.d.ts.map +1 -1
  3. package/dist/elements/APIKeyInput/index.js +27 -29
  4. package/dist/elements/APIKeyInput/index.js.map +1 -1
  5. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts +1 -1
  6. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts.map +1 -1
  7. package/dist/elements/BulkUpload/FormsManager/createFormData.js +7 -3
  8. package/dist/elements/BulkUpload/FormsManager/createFormData.js.map +1 -1
  9. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  10. package/dist/elements/BulkUpload/FormsManager/index.js +4 -2
  11. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  12. package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts +1 -0
  13. package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts.map +1 -1
  14. package/dist/elements/DocumentHeader/Tabs/Tab/index.js +3 -2
  15. package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
  16. package/dist/elements/DocumentHeader/Tabs/index.d.ts +1 -0
  17. package/dist/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
  18. package/dist/elements/DocumentHeader/Tabs/index.js +5 -3
  19. package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
  20. package/dist/elements/DocumentHeader/index.d.ts +1 -0
  21. package/dist/elements/DocumentHeader/index.d.ts.map +1 -1
  22. package/dist/elements/DocumentHeader/index.js +4 -2
  23. package/dist/elements/DocumentHeader/index.js.map +1 -1
  24. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +3 -2
  25. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +1 -1
  26. package/dist/elements/QueryPresets/QueryPresetBar/index.d.ts.map +1 -1
  27. package/dist/elements/QueryPresets/QueryPresetBar/index.js +14 -1
  28. package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
  29. package/dist/forms/Form/context.d.ts +3 -1
  30. package/dist/forms/Form/context.d.ts.map +1 -1
  31. package/dist/forms/Form/context.js +3 -1
  32. package/dist/forms/Form/context.js.map +1 -1
  33. package/dist/forms/Form/index.d.ts.map +1 -1
  34. package/dist/forms/Form/index.js +13 -4
  35. package/dist/forms/Form/index.js.map +1 -1
  36. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  37. package/dist/forms/fieldSchemasToFormState/renderField.js +3 -2
  38. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  39. package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.d.ts +12 -0
  40. package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.d.ts.map +1 -0
  41. package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.js +42 -0
  42. package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.js.map +1 -0
  43. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts +8 -6
  44. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts.map +1 -1
  45. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +22 -9
  46. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
  47. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js +150 -0
  48. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js.map +1 -0
  49. package/dist/forms/fieldSchemasToFormState/types.d.ts +1 -0
  50. package/dist/forms/fieldSchemasToFormState/types.d.ts.map +1 -1
  51. package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
  52. package/dist/layouts/Root/index.js +6 -5
  53. package/dist/layouts/Root/index.js.map +1 -1
  54. package/dist/providers/LivePreview/index.d.ts.map +1 -1
  55. package/dist/providers/LivePreview/index.js +13 -6
  56. package/dist/providers/LivePreview/index.js.map +1 -1
  57. package/dist/styles.css +1 -1
  58. package/dist/utilities/buildFormState.d.ts.map +1 -1
  59. package/dist/utilities/buildFormState.js +6 -2
  60. package/dist/utilities/buildFormState.js.map +1 -1
  61. package/dist/utilities/formatAbsoluteURL.d.ts +1 -1
  62. package/dist/utilities/formatAbsoluteURL.d.ts.map +1 -1
  63. package/dist/utilities/formatAbsoluteURL.js +18 -8
  64. package/dist/utilities/formatAbsoluteURL.js.map +1 -1
  65. package/dist/utilities/formatAbsoluteURL.spec.js +27 -0
  66. package/dist/utilities/formatAbsoluteURL.spec.js.map +1 -0
  67. package/dist/utilities/handleServerFunctions.d.ts.map +1 -1
  68. package/dist/utilities/handleServerFunctions.js +4 -2
  69. package/dist/utilities/handleServerFunctions.js.map +1 -1
  70. package/dist/utilities/initReq.d.ts.map +1 -1
  71. package/dist/utilities/initReq.js +40 -5
  72. package/dist/utilities/initReq.js.map +1 -1
  73. package/dist/utilities/initReq.spec.js +226 -0
  74. package/dist/utilities/initReq.spec.js.map +1 -0
  75. package/dist/utilities/isAbsoluteURL.d.ts +3 -0
  76. package/dist/utilities/isAbsoluteURL.d.ts.map +1 -0
  77. package/dist/utilities/isAbsoluteURL.js +15 -0
  78. package/dist/utilities/isAbsoluteURL.js.map +1 -0
  79. package/dist/utilities/isAbsoluteURL.spec.js +11 -0
  80. package/dist/utilities/isAbsoluteURL.spec.js.map +1 -0
  81. package/dist/utilities/isHttpURL.d.ts +3 -0
  82. package/dist/utilities/isHttpURL.d.ts.map +1 -0
  83. package/dist/utilities/isHttpURL.js +12 -0
  84. package/dist/utilities/isHttpURL.js.map +1 -0
  85. package/dist/utilities/isHttpURL.spec.js +25 -0
  86. package/dist/utilities/isHttpURL.spec.js.map +1 -0
  87. package/dist/utilities/isPublicAdminRoute.d.ts.map +1 -1
  88. package/dist/utilities/isPublicAdminRoute.js +9 -6
  89. package/dist/utilities/isPublicAdminRoute.js.map +1 -1
  90. package/dist/utilities/isPublicAdminRoute.spec.js +34 -0
  91. package/dist/utilities/isPublicAdminRoute.spec.js.map +1 -0
  92. package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
  93. package/dist/utilities/schedulePublishHandler.js +4 -1
  94. package/dist/utilities/schedulePublishHandler.js.map +1 -1
  95. package/dist/views/Account/index.d.ts +1 -1
  96. package/dist/views/Account/index.d.ts.map +1 -1
  97. package/dist/views/Account/index.js +8 -5
  98. package/dist/views/Account/index.js.map +1 -1
  99. package/dist/views/Dashboard/Default/ModularDashboard/index.d.ts.map +1 -1
  100. package/dist/views/Dashboard/Default/ModularDashboard/index.js +1 -0
  101. package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -1
  102. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.d.ts.map +1 -1
  103. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js +3 -1
  104. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js.map +1 -1
  105. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.d.ts.map +1 -1
  106. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +2 -0
  107. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  108. package/dist/views/Dashboard/index.d.ts.map +1 -1
  109. package/dist/views/Dashboard/index.js +2 -3
  110. package/dist/views/Dashboard/index.js.map +1 -1
  111. package/dist/views/Document/handleServerFunction.d.ts.map +1 -1
  112. package/dist/views/Document/handleServerFunction.js +2 -0
  113. package/dist/views/Document/handleServerFunction.js.map +1 -1
  114. package/dist/views/Document/index.d.ts +1 -1
  115. package/dist/views/Document/index.d.ts.map +1 -1
  116. package/dist/views/Document/index.js +9 -4
  117. package/dist/views/Document/index.js.map +1 -1
  118. package/dist/views/Document/renderDocumentSlots.d.ts +1 -0
  119. package/dist/views/Document/renderDocumentSlots.d.ts.map +1 -1
  120. package/dist/views/Document/renderDocumentSlots.js +7 -4
  121. package/dist/views/Document/renderDocumentSlots.js.map +1 -1
  122. package/dist/views/Edit/Auth/APIKey.d.ts +1 -1
  123. package/dist/views/Edit/Auth/APIKey.d.ts.map +1 -1
  124. package/dist/views/Edit/Auth/APIKey.js +233 -59
  125. package/dist/views/Edit/Auth/APIKey.js.map +1 -1
  126. package/dist/views/Edit/Auth/APIKeyGenerationModal.d.ts +12 -0
  127. package/dist/views/Edit/Auth/APIKeyGenerationModal.d.ts.map +1 -0
  128. package/dist/views/Edit/Auth/APIKeyGenerationModal.js +117 -0
  129. package/dist/views/Edit/Auth/APIKeyGenerationModal.js.map +1 -0
  130. package/dist/views/Edit/Auth/index.css +91 -0
  131. package/dist/views/Edit/Auth/index.d.ts.map +1 -1
  132. package/dist/views/Edit/Auth/index.js +10 -28
  133. package/dist/views/Edit/Auth/index.js.map +1 -1
  134. package/dist/views/Edit/Auth/types.d.ts +3 -1
  135. package/dist/views/Edit/Auth/types.d.ts.map +1 -1
  136. package/dist/views/Edit/Auth/types.js.map +1 -1
  137. package/dist/views/ForgotPassword/ForgotPasswordForm/index.css +14 -0
  138. package/dist/views/ForgotPassword/ForgotPasswordForm/index.d.ts.map +1 -1
  139. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +209 -161
  140. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -1
  141. package/dist/views/ForgotPassword/index.d.ts.map +1 -1
  142. package/dist/views/ForgotPassword/index.js +2 -11
  143. package/dist/views/ForgotPassword/index.js.map +1 -1
  144. package/dist/views/List/handleServerFunction.d.ts.map +1 -1
  145. package/dist/views/List/handleServerFunction.js +3 -1
  146. package/dist/views/List/handleServerFunction.js.map +1 -1
  147. package/dist/views/List/index.d.ts.map +1 -1
  148. package/dist/views/List/index.js +2 -1
  149. package/dist/views/List/index.js.map +1 -1
  150. package/dist/views/NotFound/page.d.ts.map +1 -1
  151. package/dist/views/NotFound/page.js +4 -3
  152. package/dist/views/NotFound/page.js.map +1 -1
  153. package/dist/views/Root/index.d.ts.map +1 -1
  154. package/dist/views/Root/index.js +5 -3
  155. package/dist/views/Root/index.js.map +1 -1
  156. package/dist/views/Verify/index.d.ts +1 -1
  157. package/dist/views/Verify/index.d.ts.map +1 -1
  158. package/dist/views/Verify/index.js +4 -4
  159. package/dist/views/Verify/index.js.map +1 -1
  160. package/package.json +4 -4
@@ -15,7 +15,8 @@ export const DocumentHeader = props => {
15
15
  globalConfig,
16
16
  hideTabs,
17
17
  permissions,
18
- req
18
+ req,
19
+ user
19
20
  } = props;
20
21
  return /*#__PURE__*/_jsxs(DocumentHeaderRoot, {
21
22
  children: [/*#__PURE__*/_jsx(RenderTitle, {
@@ -24,7 +25,8 @@ export const DocumentHeader = props => {
24
25
  collectionConfig: collectionConfig,
25
26
  globalConfig: globalConfig,
26
27
  permissions: permissions,
27
- req: req
28
+ req: req,
29
+ user: user
28
30
  }), AfterHeader ? /*#__PURE__*/_jsx("div", {
29
31
  className: `${baseClass}__after-header`,
30
32
  children: AfterHeader
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","DocumentHeaderRoot","RenderTitle","DocumentTabs","baseClass","DocumentHeader","props","AfterHeader","collectionConfig","globalConfig","hideTabs","permissions","req","_jsxs","_jsx","className"],"sources":["../../../src/elements/DocumentHeader/index.tsx"],"sourcesContent":["import type {\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedGlobalConfig,\n SanitizedPermissions,\n} from 'payload'\n\nimport React from 'react'\n\n// eslint-disable-next-line payload/no-imports-from-exports-dir -- Server component must reference exports dir for proper client boundary\nimport { DocumentHeaderRoot, Gutter, RenderTitle } from '../../exports/client/index.js'\nimport { DocumentTabs } from './Tabs/index.js'\nimport './index.css'\n\nconst baseClass = `doc-header`\n\n/**\n * @internal\n */\nexport const DocumentHeader: React.FC<{\n AfterHeader?: React.ReactNode\n collectionConfig?: SanitizedCollectionConfig\n globalConfig?: SanitizedGlobalConfig\n hideTabs?: boolean\n permissions: SanitizedPermissions\n req: PayloadRequest\n}> = (props) => {\n const { AfterHeader, collectionConfig, globalConfig, hideTabs, permissions, req } = props\n\n return (\n <DocumentHeaderRoot>\n <RenderTitle className={`${baseClass}__title`} />\n {!hideTabs && (\n <DocumentTabs\n collectionConfig={collectionConfig}\n globalConfig={globalConfig}\n permissions={permissions}\n req={req}\n />\n )}\n {AfterHeader ? <div className={`${baseClass}__after-header`}>{AfterHeader}</div> : null}\n </DocumentHeaderRoot>\n )\n}\n"],"mappings":";AAOA,OAAOA,KAAA,MAAW;AAElB;AACA,SAASC,kBAAkB,EAAUC,WAAW,QAAQ;AACxD,SAASC,YAAY,QAAQ;AAC7B,OAAO;AAEP,MAAMC,SAAA,GAAY,YAAY;AAE9B;;;AAGA,OAAO,MAAMC,cAAA,GAOPC,KAAA;EACJ,MAAM;IAAEC,WAAW;IAAEC,gBAAgB;IAAEC,YAAY;IAAEC,QAAQ;IAAEC,WAAW;IAAEC;EAAG,CAAE,GAAGN,KAAA;EAEpF,oBACEO,KAAA,CAACZ,kBAAA;4BACCa,IAAA,CAACZ,WAAA;MAAYa,SAAA,EAAW,GAAGX,SAAA;QAC1B,CAACM,QAAA,iBACAI,IAAA,CAACX,YAAA;MACCK,gBAAA,EAAkBA,gBAAA;MAClBC,YAAA,EAAcA,YAAA;MACdE,WAAA,EAAaA,WAAA;MACbC,GAAA,EAAKA;QAGRL,WAAA,gBAAcO,IAAA,CAAC;MAAIC,SAAA,EAAW,GAAGX,SAAA,gBAAyB;gBAAGG;SAAqB;;AAGzF","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","DocumentHeaderRoot","RenderTitle","DocumentTabs","baseClass","DocumentHeader","props","AfterHeader","collectionConfig","globalConfig","hideTabs","permissions","req","user","_jsxs","_jsx","className"],"sources":["../../../src/elements/DocumentHeader/index.tsx"],"sourcesContent":["import type {\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedGlobalConfig,\n SanitizedPermissions,\n} from 'payload'\n\nimport React from 'react'\n\n// eslint-disable-next-line payload/no-imports-from-exports-dir -- Server component must reference exports dir for proper client boundary\nimport { DocumentHeaderRoot, Gutter, RenderTitle } from '../../exports/client/index.js'\nimport { DocumentTabs } from './Tabs/index.js'\nimport './index.css'\n\nconst baseClass = `doc-header`\n\n/**\n * @internal\n */\nexport const DocumentHeader: React.FC<{\n AfterHeader?: React.ReactNode\n collectionConfig?: SanitizedCollectionConfig\n globalConfig?: SanitizedGlobalConfig\n hideTabs?: boolean\n permissions: SanitizedPermissions\n req: PayloadRequest\n user?: PayloadRequest['user']\n}> = (props) => {\n const { AfterHeader, collectionConfig, globalConfig, hideTabs, permissions, req, user } = props\n\n return (\n <DocumentHeaderRoot>\n <RenderTitle className={`${baseClass}__title`} />\n {!hideTabs && (\n <DocumentTabs\n collectionConfig={collectionConfig}\n globalConfig={globalConfig}\n permissions={permissions}\n req={req}\n user={user}\n />\n )}\n {AfterHeader ? <div className={`${baseClass}__after-header`}>{AfterHeader}</div> : null}\n </DocumentHeaderRoot>\n )\n}\n"],"mappings":";AAOA,OAAOA,KAAA,MAAW;AAElB;AACA,SAASC,kBAAkB,EAAUC,WAAW,QAAQ;AACxD,SAASC,YAAY,QAAQ;AAC7B,OAAO;AAEP,MAAMC,SAAA,GAAY,YAAY;AAE9B;;;AAGA,OAAO,MAAMC,cAAA,GAQPC,KAAA;EACJ,MAAM;IAAEC,WAAW;IAAEC,gBAAgB;IAAEC,YAAY;IAAEC,QAAQ;IAAEC,WAAW;IAAEC,GAAG;IAAEC;EAAI,CAAE,GAAGP,KAAA;EAE1F,oBACEQ,KAAA,CAACb,kBAAA;4BACCc,IAAA,CAACb,WAAA;MAAYc,SAAA,EAAW,GAAGZ,SAAA;QAC1B,CAACM,QAAA,iBACAK,IAAA,CAACZ,YAAA;MACCK,gBAAA,EAAkBA,gBAAA;MAClBC,YAAA,EAAcA,YAAA;MACdE,WAAA,EAAaA,WAAA;MACbC,GAAA,EAAKA,GAAA;MACLC,IAAA,EAAMA;QAGTN,WAAA,gBAAcQ,IAAA,CAAC;MAAIC,SAAA,EAAW,GAAGZ,SAAA,gBAAyB;gBAAGG;SAAqB;;AAGzF","ignoreList":[]}
@@ -2,7 +2,8 @@ import { RenderServerComponent } from '../../RenderServerComponent/index.js';
2
2
  export const renderTabHandler = ({
3
3
  req,
4
4
  searchParams,
5
- tabSlug
5
+ tabSlug,
6
+ user
6
7
  }) => {
7
8
  if (!req.user) {
8
9
  throw new Error('Unauthorized');
@@ -35,7 +36,7 @@ export const renderTabHandler = ({
35
36
  payload: req.payload,
36
37
  req,
37
38
  searchParams: searchParams ?? req.query,
38
- user: req.user
39
+ user
39
40
  }
40
41
  });
41
42
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"renderTabServerFn.js","names":["RenderServerComponent","renderTabHandler","req","searchParams","tabSlug","user","Error","importMap","payload","tabs","config","admin","components","sidebar","component","tabConfig","find","tab","slug","Component","Content","serverProps","i18n","locale","params","routeParams","query","error","errorMessage","message","String","logger","err","msg"],"sources":["../../../../src/elements/Nav/SidebarTabs/renderTabServerFn.ts"],"sourcesContent":["import type { ServerFunction } from 'payload'\nimport type React from 'react'\n\nimport { RenderServerComponent } from '../../RenderServerComponent/index.js'\n\nexport type RenderTabServerFnArgs = {\n searchParams?: Record<string, unknown>\n tabSlug: string\n}\n\nexport type RenderTabServerFnReturnType = {\n component: React.ReactNode\n}\n\nexport const renderTabHandler: ServerFunction<\n RenderTabServerFnArgs,\n RenderTabServerFnReturnType\n> = ({ req, searchParams, tabSlug }) => {\n if (!req.user) {\n throw new Error('Unauthorized')\n }\n\n const { importMap } = req.payload\n const { tabs } = req.payload.config.admin.components?.sidebar || {}\n\n if (!tabs) {\n return { component: null }\n }\n\n const tabConfig = tabs.find((tab) => tab.slug === tabSlug)\n\n if (!tabConfig) {\n return { component: null }\n }\n\n try {\n const component = RenderServerComponent({\n Component: tabConfig.components.Content,\n importMap,\n serverProps: {\n i18n: req.i18n,\n locale: req.locale,\n params: req.routeParams,\n payload: req.payload,\n req,\n searchParams: searchParams ?? req.query,\n user: req.user,\n },\n })\n\n return { component }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n\n req.payload.logger.error({\n err: error,\n msg: `Error rendering tab \"${tabSlug}\": ${errorMessage}`,\n })\n\n return { component: null }\n }\n}\n"],"mappings":"AAGA,SAASA,qBAAqB,QAAQ;AAWtC,OAAO,MAAMC,gBAAA,GAGTA,CAAC;EAAEC,GAAG;EAAEC,YAAY;EAAEC;AAAO,CAAE;EACjC,IAAI,CAACF,GAAA,CAAIG,IAAI,EAAE;IACb,MAAM,IAAIC,KAAA,CAAM;EAClB;EAEA,MAAM;IAAEC;EAAS,CAAE,GAAGL,GAAA,CAAIM,OAAO;EACjC,MAAM;IAAEC;EAAI,CAAE,GAAGP,GAAA,CAAIM,OAAO,CAACE,MAAM,CAACC,KAAK,CAACC,UAAU,EAAEC,OAAA,IAAW,CAAC;EAElE,IAAI,CAACJ,IAAA,EAAM;IACT,OAAO;MAAEK,SAAA,EAAW;IAAK;EAC3B;EAEA,MAAMC,SAAA,GAAYN,IAAA,CAAKO,IAAI,CAAEC,GAAA,IAAQA,GAAA,CAAIC,IAAI,KAAKd,OAAA;EAElD,IAAI,CAACW,SAAA,EAAW;IACd,OAAO;MAAED,SAAA,EAAW;IAAK;EAC3B;EAEA,IAAI;IACF,MAAMA,SAAA,GAAYd,qBAAA,CAAsB;MACtCmB,SAAA,EAAWJ,SAAA,CAAUH,UAAU,CAACQ,OAAO;MACvCb,SAAA;MACAc,WAAA,EAAa;QACXC,IAAA,EAAMpB,GAAA,CAAIoB,IAAI;QACdC,MAAA,EAAQrB,GAAA,CAAIqB,MAAM;QAClBC,MAAA,EAAQtB,GAAA,CAAIuB,WAAW;QACvBjB,OAAA,EAASN,GAAA,CAAIM,OAAO;QACpBN,GAAA;QACAC,YAAA,EAAcA,YAAA,IAAgBD,GAAA,CAAIwB,KAAK;QACvCrB,IAAA,EAAMH,GAAA,CAAIG;MACZ;IACF;IAEA,OAAO;MAAES;IAAU;EACrB,EAAE,OAAOa,KAAA,EAAO;IACd,MAAMC,YAAA,GAAeD,KAAA,YAAiBrB,KAAA,GAAQqB,KAAA,CAAME,OAAO,GAAGC,MAAA,CAAOH,KAAA;IAErEzB,GAAA,CAAIM,OAAO,CAACuB,MAAM,CAACJ,KAAK,CAAC;MACvBK,GAAA,EAAKL,KAAA;MACLM,GAAA,EAAK,wBAAwB7B,OAAA,MAAawB,YAAA;IAC5C;IAEA,OAAO;MAAEd,SAAA,EAAW;IAAK;EAC3B;AACF","ignoreList":[]}
1
+ {"version":3,"file":"renderTabServerFn.js","names":["RenderServerComponent","renderTabHandler","req","searchParams","tabSlug","user","Error","importMap","payload","tabs","config","admin","components","sidebar","component","tabConfig","find","tab","slug","Component","Content","serverProps","i18n","locale","params","routeParams","query","error","errorMessage","message","String","logger","err","msg"],"sources":["../../../../src/elements/Nav/SidebarTabs/renderTabServerFn.ts"],"sourcesContent":["import type { ServerFunction } from 'payload'\nimport type React from 'react'\n\nimport { RenderServerComponent } from '../../RenderServerComponent/index.js'\n\nexport type RenderTabServerFnArgs = {\n searchParams?: Record<string, unknown>\n tabSlug: string\n}\n\nexport type RenderTabServerFnReturnType = {\n component: React.ReactNode\n}\n\nexport const renderTabHandler: ServerFunction<\n RenderTabServerFnArgs,\n RenderTabServerFnReturnType\n> = ({ req, searchParams, tabSlug, user }) => {\n if (!req.user) {\n throw new Error('Unauthorized')\n }\n\n const { importMap } = req.payload\n const { tabs } = req.payload.config.admin.components?.sidebar || {}\n\n if (!tabs) {\n return { component: null }\n }\n\n const tabConfig = tabs.find((tab) => tab.slug === tabSlug)\n\n if (!tabConfig) {\n return { component: null }\n }\n\n try {\n const component = RenderServerComponent({\n Component: tabConfig.components.Content,\n importMap,\n serverProps: {\n i18n: req.i18n,\n locale: req.locale,\n params: req.routeParams,\n payload: req.payload,\n req,\n searchParams: searchParams ?? req.query,\n user,\n },\n })\n\n return { component }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n\n req.payload.logger.error({\n err: error,\n msg: `Error rendering tab \"${tabSlug}\": ${errorMessage}`,\n })\n\n return { component: null }\n }\n}\n"],"mappings":"AAGA,SAASA,qBAAqB,QAAQ;AAWtC,OAAO,MAAMC,gBAAA,GAGTA,CAAC;EAAEC,GAAG;EAAEC,YAAY;EAAEC,OAAO;EAAEC;AAAI,CAAE;EACvC,IAAI,CAACH,GAAA,CAAIG,IAAI,EAAE;IACb,MAAM,IAAIC,KAAA,CAAM;EAClB;EAEA,MAAM;IAAEC;EAAS,CAAE,GAAGL,GAAA,CAAIM,OAAO;EACjC,MAAM;IAAEC;EAAI,CAAE,GAAGP,GAAA,CAAIM,OAAO,CAACE,MAAM,CAACC,KAAK,CAACC,UAAU,EAAEC,OAAA,IAAW,CAAC;EAElE,IAAI,CAACJ,IAAA,EAAM;IACT,OAAO;MAAEK,SAAA,EAAW;IAAK;EAC3B;EAEA,MAAMC,SAAA,GAAYN,IAAA,CAAKO,IAAI,CAAEC,GAAA,IAAQA,GAAA,CAAIC,IAAI,KAAKd,OAAA;EAElD,IAAI,CAACW,SAAA,EAAW;IACd,OAAO;MAAED,SAAA,EAAW;IAAK;EAC3B;EAEA,IAAI;IACF,MAAMA,SAAA,GAAYd,qBAAA,CAAsB;MACtCmB,SAAA,EAAWJ,SAAA,CAAUH,UAAU,CAACQ,OAAO;MACvCb,SAAA;MACAc,WAAA,EAAa;QACXC,IAAA,EAAMpB,GAAA,CAAIoB,IAAI;QACdC,MAAA,EAAQrB,GAAA,CAAIqB,MAAM;QAClBC,MAAA,EAAQtB,GAAA,CAAIuB,WAAW;QACvBjB,OAAA,EAASN,GAAA,CAAIM,OAAO;QACpBN,GAAA;QACAC,YAAA,EAAcA,YAAA,IAAgBD,GAAA,CAAIwB,KAAK;QACvCrB;MACF;IACF;IAEA,OAAO;MAAES;IAAU;EACrB,EAAE,OAAOa,KAAA,EAAO;IACd,MAAMC,YAAA,GAAeD,KAAA,YAAiBrB,KAAA,GAAQqB,KAAA,CAAME,OAAO,GAAGC,MAAA,CAAOH,KAAA;IAErEzB,GAAA,CAAIM,OAAO,CAACuB,MAAM,CAACJ,KAAK,CAAC;MACvBK,GAAA,EAAKL,KAAA;MACLM,GAAA,EAAK,wBAAwB7B,OAAA,MAAawB,YAAA;IAC5C;IAEA,OAAO;MAAEd,SAAA,EAAW;IAAK;EAC3B;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/QueryPresets/QueryPresetBar/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAA;AASzE,OAAO,KAA8D,MAAM,OAAO,CAAA;AAkBlF,OAAO,aAAa,CAAA;AAQpB,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IACpC,YAAY,EAAE,WAAW,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,sBAAsB,EAAE,6BAA6B,CAAA;CACtD,CA+aA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/QueryPresets/QueryPresetBar/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAA;AASzE,OAAO,KAA8D,MAAM,OAAO,CAAA;AAmBlF,OAAO,aAAa,CAAA;AAQpB,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IACpC,YAAY,EAAE,WAAW,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,sBAAsB,EAAE,6BAA6B,CAAA;CACtD,CA4bA,CAAA"}
@@ -13,6 +13,7 @@ import { RefreshIcon } from '../../../icons/Refresh/index.js';
13
13
  import { TrashIcon } from '../../../icons/Trash/index.js';
14
14
  import { useConfig } from '../../../providers/Config/index.js';
15
15
  import { useListQuery } from '../../../providers/ListQuery/context.js';
16
+ import { useRouter } from '../../../providers/RouterAdapter/index.js';
16
17
  import { useTranslation } from '../../../providers/Translation/index.js';
17
18
  import { ConfirmationModal } from '../../ConfirmationModal/index.js';
18
19
  import { useDocumentDrawer } from '../../DocumentDrawer/index.js';
@@ -26,7 +27,7 @@ const deletePresetModalSlug = 'delete-preset-confirmation';
26
27
  const queryPresetsSlug = 'payload-query-presets';
27
28
  const baseClass = 'query-preset-bar';
28
29
  export const QueryPresetBar = ({
29
- activePreset,
30
+ activePreset: activePresetFromProps,
30
31
  collectionSlug,
31
32
  queryPresetPermissions
32
33
  }) => {
@@ -39,6 +40,8 @@ export const QueryPresetBar = ({
39
40
  const {
40
41
  openModal
41
42
  } = useModal();
43
+ const [activePreset, setActivePreset] = useState(activePresetFromProps);
44
+ const router = useRouter();
42
45
  const [presets, setPresets] = useState([]);
43
46
  const {
44
47
  i18n,
@@ -124,6 +127,9 @@ export const QueryPresetBar = ({
124
127
  useEffect(() => {
125
128
  void fetchPresets();
126
129
  }, [fetchPresets]);
130
+ useEffect(() => {
131
+ setActivePreset(activePresetFromProps);
132
+ }, [activePresetFromProps]);
127
133
  const handlePresetChange = useCallback(async preset => {
128
134
  await refineListData({
129
135
  columns: preset.columns ? transformColumnsToSearchParams(preset.columns) : undefined,
@@ -131,6 +137,7 @@ export const QueryPresetBar = ({
131
137
  preset: preset.id,
132
138
  where: preset.where
133
139
  }, false);
140
+ setActivePreset(preset);
134
141
  }, [refineListData]);
135
142
  const buttonLabel = activePreset?.title || t('general:selectLabel', {
136
143
  label: getTranslation(presetConfig?.labels?.singular, i18n)
@@ -143,6 +150,7 @@ export const QueryPresetBar = ({
143
150
  preset: '',
144
151
  where: undefined
145
152
  }, false);
153
+ setActivePreset(undefined);
146
154
  }, [refineListData]);
147
155
  const handleDeletePreset = useCallback(async () => {
148
156
  if (!activePreset?.id) {
@@ -166,6 +174,7 @@ export const QueryPresetBar = ({
166
174
  preset: '',
167
175
  where: undefined
168
176
  }, false);
177
+ setActivePreset(undefined);
169
178
  void fetchPresets();
170
179
  }
171
180
  } catch (_error_0) {
@@ -380,12 +389,16 @@ export const QueryPresetBar = ({
380
389
  }) => {
381
390
  await handlePresetChange(doc_0);
382
391
  void fetchPresets();
392
+ // Re-run the List server component so the active preset title on the trigger reflects the edit
393
+ router.refresh();
383
394
  },
384
395
  onSave: async ({
385
396
  doc: doc_1
386
397
  }) => {
387
398
  await handlePresetChange(doc_1);
388
399
  void fetchPresets();
400
+ // Re-run the List server component so the active preset title on the trigger reflects the edit
401
+ router.refresh();
389
402
  }
390
403
  }), /*#__PURE__*/_jsx(ListDrawer, {
391
404
  allowCreate: false,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getTranslation","formatAdminURL","transformColumnsToPreferences","transformColumnsToSearchParams","qs","React","Fragment","useCallback","useEffect","useMemo","useState","CheckIcon","EditIcon","GearIcon","PlusIcon","RefreshIcon","TrashIcon","useConfig","useListQuery","useTranslation","ConfirmationModal","useDocumentDrawer","FilterTrigger","useListDrawer","useModal","Popup","PopupList","Translation","deletePresetModalSlug","queryPresetsSlug","baseClass","QueryPresetBar","activePreset","collectionSlug","queryPresetPermissions","modified","query","refineListData","setModified","setQueryModified","openModal","presets","setPresets","i18n","t","config","routes","api","apiRoute","serverURL","getEntityConfig","presetConfig","PresetDocumentDrawer","openDrawer","openPresetDrawer","id","CreateNewPresetDrawer","closeDrawer","closeCreateNewDrawer","openCreateNewDrawer","filterOptions","isTemp","not_equals","relatedCollection","equals","ListDrawer","openListDrawer","collectionSlugs","selectedCollection","fetchPresets","where","and","queryString","stringify","limit","addQueryPrefix","url","path","response","fetch","credentials","ok","data","json","docs","_error","handlePresetChange","preset","columns","undefined","groupBy","buttonLabel","title","label","labels","singular","handleClearPreset","e","stopPropagation","handleDeletePreset","method","handleResetPreset","saveCurrentChanges","body","JSON","headers","presetColumns","presetWhere","presetGroupBy","queryColumns","parse","columnsMatch","whereMatch","groupByMatch","isModified","hasModifiedPreset","_jsxs","_jsx","className","horizontalAlign","portalClassName","render","close","RadioGroup","map","isActive","RadioGroupItem","active","onClick","Divider","MenuItem","size","Button","icon","update","isShared","delete","length","create","plural","renderButton","onKeyDown","Boolean","onClear","popupActive","showBadge","verticalAlign","initialData","onSave","doc","redirectAfterCreate","onDelete","onDuplicate","allowCreate","disableQueryPresets","onSelect","elements","1","children","i18nKey","variables","confirmLabel","heading","modalSlug","onConfirm"],"sources":["../../../../src/elements/QueryPresets/QueryPresetBar/index.tsx"],"sourcesContent":["'use client'\nimport type { QueryPreset, SanitizedCollectionPermission } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n formatAdminURL,\n transformColumnsToPreferences,\n transformColumnsToSearchParams,\n} from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { Fragment, useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { CheckIcon } from '../../../icons/Check/index.js'\nimport { EditIcon } from '../../../icons/Edit/index.js'\nimport { GearIcon } from '../../../icons/Gear/index.js'\nimport { PlusIcon } from '../../../icons/Plus/index.js'\nimport { RefreshIcon } from '../../../icons/Refresh/index.js'\nimport { TrashIcon } from '../../../icons/Trash/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useListQuery } from '../../../providers/ListQuery/context.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { ConfirmationModal } from '../../ConfirmationModal/index.js'\nimport { useDocumentDrawer } from '../../DocumentDrawer/index.js'\nimport { FilterTrigger } from '../../FilterTrigger/index.js'\nimport { useListDrawer } from '../../ListDrawer/index.js'\nimport { useModal } from '../../Modal/index.js'\nimport { Popup, PopupList } from '../../Popup/index.js'\nimport { Translation } from '../../Translation/index.js'\nimport './index.css'\n\nconst deletePresetModalSlug = 'delete-preset-confirmation'\n\nconst queryPresetsSlug = 'payload-query-presets'\n\nconst baseClass = 'query-preset-bar'\n\nexport const QueryPresetBar: React.FC<{\n activePreset: QueryPreset\n collectionSlug?: string\n queryPresetPermissions: SanitizedCollectionPermission\n}> = ({ activePreset, collectionSlug, queryPresetPermissions }) => {\n const { modified, query, refineListData, setModified: setQueryModified } = useListQuery()\n const { openModal } = useModal()\n const [presets, setPresets] = useState<QueryPreset[]>([])\n\n const { i18n, t } = useTranslation()\n\n const {\n config: {\n routes: { api: apiRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const presetConfig = getEntityConfig({ collectionSlug: queryPresetsSlug })\n\n const [PresetDocumentDrawer, , { openDrawer: openPresetDrawer }] = useDocumentDrawer({\n id: activePreset?.id,\n collectionSlug: queryPresetsSlug,\n })\n\n const [\n CreateNewPresetDrawer,\n ,\n { closeDrawer: closeCreateNewDrawer, openDrawer: openCreateNewDrawer },\n ] = useDocumentDrawer({\n collectionSlug: queryPresetsSlug,\n })\n\n const filterOptions = useMemo(\n () => ({\n 'payload-query-presets': {\n isTemp: {\n not_equals: true,\n },\n relatedCollection: {\n equals: collectionSlug,\n },\n },\n }),\n [collectionSlug],\n )\n\n const [ListDrawer, , { openDrawer: openListDrawer }] = useListDrawer({\n collectionSlugs: [queryPresetsSlug],\n filterOptions,\n selectedCollection: queryPresetsSlug,\n })\n\n // Fetch presets for the popup\n const fetchPresets = useCallback(async () => {\n try {\n const where = {\n and: [{ isTemp: { not_equals: true } }, { relatedCollection: { equals: collectionSlug } }],\n }\n const queryString = qs.stringify({ limit: 50, where }, { addQueryPrefix: true })\n const url = formatAdminURL({\n apiRoute,\n path: `/${queryPresetsSlug}${queryString}`,\n serverURL,\n })\n\n const response = await fetch(url, { credentials: 'include' })\n\n if (response.ok) {\n const data = await response.json()\n setPresets(data.docs || [])\n }\n } catch (_error) {\n // Silently fail - presets will remain empty\n }\n }, [apiRoute, collectionSlug, serverURL])\n\n useEffect(() => {\n void fetchPresets()\n }, [fetchPresets])\n\n const handlePresetChange = useCallback(\n async (preset: QueryPreset) => {\n await refineListData(\n {\n columns: preset.columns ? transformColumnsToSearchParams(preset.columns) : undefined,\n groupBy: preset.groupBy || '',\n preset: preset.id,\n where: preset.where,\n },\n false,\n )\n },\n [refineListData],\n )\n\n const buttonLabel =\n activePreset?.title ||\n t('general:selectLabel', { label: getTranslation(presetConfig?.labels?.singular, i18n) })\n\n const handleClearPreset = useCallback(\n async (e: React.MouseEvent) => {\n e.stopPropagation()\n await refineListData(\n {\n columns: undefined,\n groupBy: '',\n preset: '',\n where: undefined,\n },\n false,\n )\n },\n [refineListData],\n )\n\n const handleDeletePreset = useCallback(async () => {\n if (!activePreset?.id) {\n return\n }\n\n try {\n const url = formatAdminURL({\n apiRoute,\n path: `/${queryPresetsSlug}/${activePreset.id}`,\n serverURL,\n })\n\n const response = await fetch(url, {\n credentials: 'include',\n method: 'DELETE',\n })\n\n if (response.ok) {\n // Clear the active preset and refresh the list\n await refineListData(\n {\n columns: undefined,\n groupBy: '',\n preset: '',\n where: undefined,\n },\n false,\n )\n void fetchPresets()\n }\n } catch (_error) {\n // Silently fail\n }\n }, [activePreset?.id, apiRoute, fetchPresets, refineListData, serverURL])\n\n const handleResetPreset = useCallback(async () => {\n if (!activePreset) {\n return\n }\n // Use the same pattern as handlePresetChange for consistency\n await refineListData(\n {\n columns: activePreset.columns ? transformColumnsToSearchParams(activePreset.columns) : [], // explicitly empty to clear user preferences fallback\n groupBy: activePreset.groupBy || '',\n preset: activePreset.id,\n where: activePreset.where,\n },\n false, // not modified - we're resetting to preset's original state\n )\n }, [activePreset, refineListData])\n\n const saveCurrentChanges = useCallback(async () => {\n if (!activePreset?.id) {\n return\n }\n try {\n const url = formatAdminURL({\n apiRoute,\n path: `/${queryPresetsSlug}/${activePreset.id}`,\n serverURL,\n })\n\n const response = await fetch(url, {\n body: JSON.stringify({\n columns: transformColumnsToPreferences(query.columns),\n groupBy: query.groupBy,\n where: query.where,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n })\n\n if (response.ok) {\n setQueryModified(false)\n void fetchPresets()\n }\n } catch (_error) {\n // Silently fail\n }\n }, [\n activePreset?.id,\n apiRoute,\n fetchPresets,\n query.columns,\n query.groupBy,\n query.where,\n serverURL,\n setQueryModified,\n ])\n\n // Detect if current query differs from preset on initial load\n useEffect(() => {\n if (!activePreset) {\n return\n }\n\n const presetColumns = activePreset.columns\n ? transformColumnsToSearchParams(activePreset.columns)\n : []\n const presetWhere = activePreset.where\n const presetGroupBy = activePreset.groupBy || ''\n\n // Normalize query.columns - it may be a JSON string from URL or an array\n let queryColumns = query.columns || []\n if (typeof queryColumns === 'string') {\n try {\n queryColumns = JSON.parse(queryColumns)\n } catch {\n queryColumns = []\n }\n }\n\n // Compare current query with preset values\n const columnsMatch = JSON.stringify(queryColumns) === JSON.stringify(presetColumns)\n const whereMatch = JSON.stringify(query.where) === JSON.stringify(presetWhere)\n const groupByMatch = (query.groupBy || '') === presetGroupBy\n\n const isModified = !columnsMatch || !whereMatch || !groupByMatch\n setQueryModified(isModified)\n }, [activePreset, query.columns, query.where, query.groupBy, setQueryModified])\n\n const hasModifiedPreset = activePreset && modified\n\n return (\n <Fragment>\n <div className={baseClass}>\n <Popup\n className={`${baseClass}__popup`}\n horizontalAlign=\"left\"\n portalClassName={`${baseClass}__popup-content`}\n render={({ close }) => (\n <Fragment>\n <PopupList.RadioGroup>\n {presets.map((preset) => {\n const isActive = activePreset?.id === preset.id\n return (\n <PopupList.RadioGroupItem\n active={isActive}\n key={preset.id}\n onClick={async () => {\n close()\n await handlePresetChange(preset)\n }}\n >\n {preset.title}\n </PopupList.RadioGroupItem>\n )\n })}\n </PopupList.RadioGroup>\n {activePreset && (\n <Fragment>\n <PopupList.Divider />\n <PopupList.MenuItem size=\"small\">\n {hasModifiedPreset && (\n <PopupList.Button\n icon={<RefreshIcon size={16} />}\n id=\"reset-preset\"\n onClick={async () => {\n close()\n await handleResetPreset()\n }}\n >\n {t('general:reset')}\n </PopupList.Button>\n )}\n {hasModifiedPreset && queryPresetPermissions?.update && (\n <PopupList.Button\n icon={<CheckIcon size={16} />}\n id=\"save-preset\"\n onClick={async () => {\n close()\n await saveCurrentChanges()\n }}\n >\n {activePreset?.isShared\n ? t('general:updateForEveryone')\n : t('fields:saveChanges')}\n </PopupList.Button>\n )}\n {queryPresetPermissions?.update && (\n <PopupList.Button\n icon={<EditIcon />}\n id=\"edit-preset\"\n onClick={() => {\n close()\n openPresetDrawer()\n }}\n >\n {t('general:editLabel', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n })}\n </PopupList.Button>\n )}\n {queryPresetPermissions?.delete && (\n <PopupList.Button\n className={`${baseClass}__delete`}\n icon={<TrashIcon size={16} />}\n id=\"delete-preset\"\n onClick={() => {\n close()\n openModal(deletePresetModalSlug)\n }}\n >\n {t('general:deleteLabel', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n })}\n </PopupList.Button>\n )}\n </PopupList.MenuItem>\n </Fragment>\n )}\n {(presets.length > 0 || activePreset) && <PopupList.Divider />}\n <PopupList.MenuItem size=\"small\">\n {queryPresetPermissions?.create && (\n <PopupList.Button\n icon={<PlusIcon size={16} />}\n id=\"create-new-preset\"\n onClick={() => {\n close()\n openCreateNewDrawer()\n }}\n >\n {t('general:createNewLabel', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n })}\n </PopupList.Button>\n )}\n <PopupList.Button\n icon={<GearIcon size={16} />}\n id=\"manage-presets\"\n onClick={() => {\n close()\n openListDrawer()\n }}\n >\n {t('general:manageLabel', {\n label: getTranslation(presetConfig?.labels?.plural, i18n),\n })}\n </PopupList.Button>\n </PopupList.MenuItem>\n </Fragment>\n )}\n renderButton={({ active, onClick, onKeyDown }) => (\n <FilterTrigger\n className={`${baseClass}__trigger`}\n id=\"select-preset\"\n isActive={Boolean(activePreset)}\n onClear={handleClearPreset}\n onClick={onClick}\n onKeyDown={onKeyDown}\n popupActive={active}\n showBadge={hasModifiedPreset}\n >\n {buttonLabel}\n </FilterTrigger>\n )}\n size=\"large\"\n verticalAlign=\"bottom\"\n />\n </div>\n <CreateNewPresetDrawer\n initialData={{\n columns: transformColumnsToPreferences(query.columns),\n groupBy: query.groupBy,\n relatedCollection: collectionSlug,\n where: query.where,\n }}\n onSave={async ({ doc }) => {\n closeCreateNewDrawer()\n await handlePresetChange(doc as QueryPreset)\n void fetchPresets()\n }}\n redirectAfterCreate={false}\n />\n <PresetDocumentDrawer\n onDelete={() => {\n void fetchPresets()\n }}\n onDuplicate={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n void fetchPresets()\n }}\n onSave={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n void fetchPresets()\n }}\n />\n <ListDrawer\n allowCreate={false}\n disableQueryPresets\n onSelect={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n }}\n />\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(presetConfig?.labels?.singular, i18n),\n title: activePreset?.title,\n }}\n />\n }\n confirmLabel={t('general:delete')}\n heading={t('general:confirmDeletion')}\n modalSlug={deletePresetModalSlug}\n onConfirm={handleDeletePreset}\n />\n </Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getTranslation","formatAdminURL","transformColumnsToPreferences","transformColumnsToSearchParams","qs","React","Fragment","useCallback","useEffect","useMemo","useState","CheckIcon","EditIcon","GearIcon","PlusIcon","RefreshIcon","TrashIcon","useConfig","useListQuery","useRouter","useTranslation","ConfirmationModal","useDocumentDrawer","FilterTrigger","useListDrawer","useModal","Popup","PopupList","Translation","deletePresetModalSlug","queryPresetsSlug","baseClass","QueryPresetBar","activePreset","activePresetFromProps","collectionSlug","queryPresetPermissions","modified","query","refineListData","setModified","setQueryModified","openModal","setActivePreset","router","presets","setPresets","i18n","t","config","routes","api","apiRoute","serverURL","getEntityConfig","presetConfig","PresetDocumentDrawer","openDrawer","openPresetDrawer","id","CreateNewPresetDrawer","closeDrawer","closeCreateNewDrawer","openCreateNewDrawer","filterOptions","isTemp","not_equals","relatedCollection","equals","ListDrawer","openListDrawer","collectionSlugs","selectedCollection","fetchPresets","where","and","queryString","stringify","limit","addQueryPrefix","url","path","response","fetch","credentials","ok","data","json","docs","_error","handlePresetChange","preset","columns","undefined","groupBy","buttonLabel","title","label","labels","singular","handleClearPreset","e","stopPropagation","handleDeletePreset","method","handleResetPreset","saveCurrentChanges","body","JSON","headers","presetColumns","presetWhere","presetGroupBy","queryColumns","parse","columnsMatch","whereMatch","groupByMatch","isModified","hasModifiedPreset","_jsxs","_jsx","className","horizontalAlign","portalClassName","render","close","RadioGroup","map","isActive","RadioGroupItem","active","onClick","Divider","MenuItem","size","Button","icon","update","isShared","delete","length","create","plural","renderButton","onKeyDown","Boolean","onClear","popupActive","showBadge","verticalAlign","initialData","onSave","doc","redirectAfterCreate","onDelete","onDuplicate","refresh","allowCreate","disableQueryPresets","onSelect","elements","1","children","i18nKey","variables","confirmLabel","heading","modalSlug","onConfirm"],"sources":["../../../../src/elements/QueryPresets/QueryPresetBar/index.tsx"],"sourcesContent":["'use client'\nimport type { QueryPreset, SanitizedCollectionPermission } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n formatAdminURL,\n transformColumnsToPreferences,\n transformColumnsToSearchParams,\n} from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { Fragment, useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { CheckIcon } from '../../../icons/Check/index.js'\nimport { EditIcon } from '../../../icons/Edit/index.js'\nimport { GearIcon } from '../../../icons/Gear/index.js'\nimport { PlusIcon } from '../../../icons/Plus/index.js'\nimport { RefreshIcon } from '../../../icons/Refresh/index.js'\nimport { TrashIcon } from '../../../icons/Trash/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useListQuery } from '../../../providers/ListQuery/context.js'\nimport { useRouter } from '../../../providers/RouterAdapter/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { ConfirmationModal } from '../../ConfirmationModal/index.js'\nimport { useDocumentDrawer } from '../../DocumentDrawer/index.js'\nimport { FilterTrigger } from '../../FilterTrigger/index.js'\nimport { useListDrawer } from '../../ListDrawer/index.js'\nimport { useModal } from '../../Modal/index.js'\nimport { Popup, PopupList } from '../../Popup/index.js'\nimport { Translation } from '../../Translation/index.js'\nimport './index.css'\n\nconst deletePresetModalSlug = 'delete-preset-confirmation'\n\nconst queryPresetsSlug = 'payload-query-presets'\n\nconst baseClass = 'query-preset-bar'\n\nexport const QueryPresetBar: React.FC<{\n activePreset: QueryPreset\n collectionSlug?: string\n queryPresetPermissions: SanitizedCollectionPermission\n}> = ({ activePreset: activePresetFromProps, collectionSlug, queryPresetPermissions }) => {\n const { modified, query, refineListData, setModified: setQueryModified } = useListQuery()\n const { openModal } = useModal()\n const [activePreset, setActivePreset] = useState<QueryPreset | undefined>(activePresetFromProps)\n const router = useRouter()\n const [presets, setPresets] = useState<QueryPreset[]>([])\n\n const { i18n, t } = useTranslation()\n\n const {\n config: {\n routes: { api: apiRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const presetConfig = getEntityConfig({ collectionSlug: queryPresetsSlug })\n\n const [PresetDocumentDrawer, , { openDrawer: openPresetDrawer }] = useDocumentDrawer({\n id: activePreset?.id,\n collectionSlug: queryPresetsSlug,\n })\n\n const [\n CreateNewPresetDrawer,\n ,\n { closeDrawer: closeCreateNewDrawer, openDrawer: openCreateNewDrawer },\n ] = useDocumentDrawer({\n collectionSlug: queryPresetsSlug,\n })\n\n const filterOptions = useMemo(\n () => ({\n 'payload-query-presets': {\n isTemp: {\n not_equals: true,\n },\n relatedCollection: {\n equals: collectionSlug,\n },\n },\n }),\n [collectionSlug],\n )\n\n const [ListDrawer, , { openDrawer: openListDrawer }] = useListDrawer({\n collectionSlugs: [queryPresetsSlug],\n filterOptions,\n selectedCollection: queryPresetsSlug,\n })\n\n // Fetch presets for the popup\n const fetchPresets = useCallback(async () => {\n try {\n const where = {\n and: [{ isTemp: { not_equals: true } }, { relatedCollection: { equals: collectionSlug } }],\n }\n const queryString = qs.stringify({ limit: 50, where }, { addQueryPrefix: true })\n const url = formatAdminURL({\n apiRoute,\n path: `/${queryPresetsSlug}${queryString}`,\n serverURL,\n })\n\n const response = await fetch(url, { credentials: 'include' })\n\n if (response.ok) {\n const data = await response.json()\n setPresets(data.docs || [])\n }\n } catch (_error) {\n // Silently fail - presets will remain empty\n }\n }, [apiRoute, collectionSlug, serverURL])\n\n useEffect(() => {\n void fetchPresets()\n }, [fetchPresets])\n\n useEffect(() => {\n setActivePreset(activePresetFromProps)\n }, [activePresetFromProps])\n\n const handlePresetChange = useCallback(\n async (preset: QueryPreset) => {\n await refineListData(\n {\n columns: preset.columns ? transformColumnsToSearchParams(preset.columns) : undefined,\n groupBy: preset.groupBy || '',\n preset: preset.id,\n where: preset.where,\n },\n false,\n )\n setActivePreset(preset)\n },\n [refineListData],\n )\n\n const buttonLabel =\n activePreset?.title ||\n t('general:selectLabel', { label: getTranslation(presetConfig?.labels?.singular, i18n) })\n\n const handleClearPreset = useCallback(\n async (e: React.MouseEvent) => {\n e.stopPropagation()\n await refineListData(\n {\n columns: undefined,\n groupBy: '',\n preset: '',\n where: undefined,\n },\n false,\n )\n setActivePreset(undefined)\n },\n [refineListData],\n )\n\n const handleDeletePreset = useCallback(async () => {\n if (!activePreset?.id) {\n return\n }\n\n try {\n const url = formatAdminURL({\n apiRoute,\n path: `/${queryPresetsSlug}/${activePreset.id}`,\n serverURL,\n })\n\n const response = await fetch(url, {\n credentials: 'include',\n method: 'DELETE',\n })\n\n if (response.ok) {\n // Clear the active preset and refresh the list\n await refineListData(\n {\n columns: undefined,\n groupBy: '',\n preset: '',\n where: undefined,\n },\n false,\n )\n setActivePreset(undefined)\n void fetchPresets()\n }\n } catch (_error) {\n // Silently fail\n }\n }, [activePreset?.id, apiRoute, fetchPresets, refineListData, serverURL])\n\n const handleResetPreset = useCallback(async () => {\n if (!activePreset) {\n return\n }\n // Use the same pattern as handlePresetChange for consistency\n await refineListData(\n {\n columns: activePreset.columns ? transformColumnsToSearchParams(activePreset.columns) : [], // explicitly empty to clear user preferences fallback\n groupBy: activePreset.groupBy || '',\n preset: activePreset.id,\n where: activePreset.where,\n },\n false, // not modified - we're resetting to preset's original state\n )\n }, [activePreset, refineListData])\n\n const saveCurrentChanges = useCallback(async () => {\n if (!activePreset?.id) {\n return\n }\n try {\n const url = formatAdminURL({\n apiRoute,\n path: `/${queryPresetsSlug}/${activePreset.id}`,\n serverURL,\n })\n\n const response = await fetch(url, {\n body: JSON.stringify({\n columns: transformColumnsToPreferences(query.columns),\n groupBy: query.groupBy,\n where: query.where,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n })\n\n if (response.ok) {\n setQueryModified(false)\n void fetchPresets()\n }\n } catch (_error) {\n // Silently fail\n }\n }, [\n activePreset?.id,\n apiRoute,\n fetchPresets,\n query.columns,\n query.groupBy,\n query.where,\n serverURL,\n setQueryModified,\n ])\n\n // Detect if current query differs from preset on initial load\n useEffect(() => {\n if (!activePreset) {\n return\n }\n\n const presetColumns = activePreset.columns\n ? transformColumnsToSearchParams(activePreset.columns)\n : []\n const presetWhere = activePreset.where\n const presetGroupBy = activePreset.groupBy || ''\n\n // Normalize query.columns - it may be a JSON string from URL or an array\n let queryColumns = query.columns || []\n if (typeof queryColumns === 'string') {\n try {\n queryColumns = JSON.parse(queryColumns)\n } catch {\n queryColumns = []\n }\n }\n\n // Compare current query with preset values\n const columnsMatch = JSON.stringify(queryColumns) === JSON.stringify(presetColumns)\n const whereMatch = JSON.stringify(query.where) === JSON.stringify(presetWhere)\n const groupByMatch = (query.groupBy || '') === presetGroupBy\n\n const isModified = !columnsMatch || !whereMatch || !groupByMatch\n setQueryModified(isModified)\n }, [activePreset, query.columns, query.where, query.groupBy, setQueryModified])\n\n const hasModifiedPreset = activePreset && modified\n\n return (\n <Fragment>\n <div className={baseClass}>\n <Popup\n className={`${baseClass}__popup`}\n horizontalAlign=\"left\"\n portalClassName={`${baseClass}__popup-content`}\n render={({ close }) => (\n <Fragment>\n <PopupList.RadioGroup>\n {presets.map((preset) => {\n const isActive = activePreset?.id === preset.id\n return (\n <PopupList.RadioGroupItem\n active={isActive}\n key={preset.id}\n onClick={async () => {\n close()\n await handlePresetChange(preset)\n }}\n >\n {preset.title}\n </PopupList.RadioGroupItem>\n )\n })}\n </PopupList.RadioGroup>\n {activePreset && (\n <Fragment>\n <PopupList.Divider />\n <PopupList.MenuItem size=\"small\">\n {hasModifiedPreset && (\n <PopupList.Button\n icon={<RefreshIcon size={16} />}\n id=\"reset-preset\"\n onClick={async () => {\n close()\n await handleResetPreset()\n }}\n >\n {t('general:reset')}\n </PopupList.Button>\n )}\n {hasModifiedPreset && queryPresetPermissions?.update && (\n <PopupList.Button\n icon={<CheckIcon size={16} />}\n id=\"save-preset\"\n onClick={async () => {\n close()\n await saveCurrentChanges()\n }}\n >\n {activePreset?.isShared\n ? t('general:updateForEveryone')\n : t('fields:saveChanges')}\n </PopupList.Button>\n )}\n {queryPresetPermissions?.update && (\n <PopupList.Button\n icon={<EditIcon />}\n id=\"edit-preset\"\n onClick={() => {\n close()\n openPresetDrawer()\n }}\n >\n {t('general:editLabel', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n })}\n </PopupList.Button>\n )}\n {queryPresetPermissions?.delete && (\n <PopupList.Button\n className={`${baseClass}__delete`}\n icon={<TrashIcon size={16} />}\n id=\"delete-preset\"\n onClick={() => {\n close()\n openModal(deletePresetModalSlug)\n }}\n >\n {t('general:deleteLabel', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n })}\n </PopupList.Button>\n )}\n </PopupList.MenuItem>\n </Fragment>\n )}\n {(presets.length > 0 || activePreset) && <PopupList.Divider />}\n <PopupList.MenuItem size=\"small\">\n {queryPresetPermissions?.create && (\n <PopupList.Button\n icon={<PlusIcon size={16} />}\n id=\"create-new-preset\"\n onClick={() => {\n close()\n openCreateNewDrawer()\n }}\n >\n {t('general:createNewLabel', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n })}\n </PopupList.Button>\n )}\n <PopupList.Button\n icon={<GearIcon size={16} />}\n id=\"manage-presets\"\n onClick={() => {\n close()\n openListDrawer()\n }}\n >\n {t('general:manageLabel', {\n label: getTranslation(presetConfig?.labels?.plural, i18n),\n })}\n </PopupList.Button>\n </PopupList.MenuItem>\n </Fragment>\n )}\n renderButton={({ active, onClick, onKeyDown }) => (\n <FilterTrigger\n className={`${baseClass}__trigger`}\n id=\"select-preset\"\n isActive={Boolean(activePreset)}\n onClear={handleClearPreset}\n onClick={onClick}\n onKeyDown={onKeyDown}\n popupActive={active}\n showBadge={hasModifiedPreset}\n >\n {buttonLabel}\n </FilterTrigger>\n )}\n size=\"large\"\n verticalAlign=\"bottom\"\n />\n </div>\n <CreateNewPresetDrawer\n initialData={{\n columns: transformColumnsToPreferences(query.columns),\n groupBy: query.groupBy,\n relatedCollection: collectionSlug,\n where: query.where,\n }}\n onSave={async ({ doc }) => {\n closeCreateNewDrawer()\n await handlePresetChange(doc as QueryPreset)\n void fetchPresets()\n }}\n redirectAfterCreate={false}\n />\n <PresetDocumentDrawer\n onDelete={() => {\n void fetchPresets()\n }}\n onDuplicate={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n void fetchPresets()\n // Re-run the List server component so the active preset title on the trigger reflects the edit\n router.refresh()\n }}\n onSave={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n void fetchPresets()\n // Re-run the List server component so the active preset title on the trigger reflects the edit\n router.refresh()\n }}\n />\n <ListDrawer\n allowCreate={false}\n disableQueryPresets\n onSelect={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n }}\n />\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(presetConfig?.labels?.singular, i18n),\n title: activePreset?.title,\n }}\n />\n }\n confirmLabel={t('general:delete')}\n heading={t('general:confirmDeletion')}\n modalSlug={deletePresetModalSlug}\n onConfirm={handleDeletePreset}\n />\n </Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -12,6 +12,7 @@ declare const ProcessingContext: import("react").Context<boolean>;
12
12
  declare const BackgroundProcessingContext: import("react").Context<boolean>;
13
13
  declare const ModifiedContext: import("react").Context<boolean>;
14
14
  declare const InitializingContext: import("react").Context<boolean>;
15
+ declare const SuccessfulSubmitCountContext: import("react").Context<number>;
15
16
  declare const FormFieldsContext: import("use-context-selector").Context<FormFieldsContextType>;
16
17
  export type RenderedFieldSlots = Map<string, RenderedField>;
17
18
  /**
@@ -35,6 +36,7 @@ declare const useFormProcessing: () => boolean;
35
36
  declare const useFormBackgroundProcessing: () => boolean;
36
37
  declare const useFormModified: () => boolean;
37
38
  declare const useFormInitializing: () => boolean;
39
+ declare const useFormSuccessfulSubmitCount: () => number;
38
40
  /**
39
41
  * Get and set the value of a form field based on a selector
40
42
  *
@@ -47,5 +49,5 @@ declare const useFormFields: <Value = unknown>(selector: (context: FormFieldsCon
47
49
  * @see https://payloadcms.com/docs/admin/react-hooks#useallformfields
48
50
  */
49
51
  declare const useAllFormFields: () => FormFieldsContextType;
50
- export { BackgroundProcessingContext, DocumentFormContext, FormContext, FormFieldsContext, FormWatchContext, InitializingContext, ModifiedContext, ProcessingContext, SubmittedContext, useAllFormFields, useDocumentForm, useForm, useFormBackgroundProcessing, useFormFields, useFormInitializing, useFormModified, useFormProcessing, useFormSubmitted, useWatchForm, };
52
+ export { BackgroundProcessingContext, DocumentFormContext, FormContext, FormFieldsContext, FormWatchContext, InitializingContext, ModifiedContext, ProcessingContext, SubmittedContext, SuccessfulSubmitCountContext, useAllFormFields, useDocumentForm, useForm, useFormBackgroundProcessing, useFormFields, useFormInitializing, useFormModified, useFormProcessing, useFormSubmitted, useFormSuccessfulSubmitCount, useWatchForm, };
51
53
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAS5C,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAErF,QAAA,MAAM,WAAW,kCAA+B,CAAA;AAChD,QAAA,MAAM,mBAAmB,kCAA+B,CAAA;AACxD,QAAA,MAAM,gBAAgB,kCAA+B,CAAA;AACrD,QAAA,MAAM,gBAAgB,kCAAuB,CAAA;AAC7C,QAAA,MAAM,iBAAiB,kCAAuB,CAAA;AAC9C;;;GAGG;AACH,QAAA,MAAM,2BAA2B,kCAAuB,CAAA;AACxD,QAAA,MAAM,eAAe,kCAAuB,CAAA;AAC5C,QAAA,MAAM,mBAAmB,kCAAuB,CAAA;AAChD,QAAA,MAAM,iBAAiB,+DAAiE,CAAA;AAExF,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAE3D;;;;GAIG;AACH,QAAA,MAAM,OAAO,QAAO,OAA2B,CAAA;AAC/C;;;GAGG;AACH,QAAA,MAAM,eAAe,QAAO,OAAmC,CAAA;AAE/D,QAAA,MAAM,YAAY,QAAO,OAAgC,CAAA;AACzD,QAAA,MAAM,gBAAgB,QAAO,OAAgC,CAAA;AAC7D,QAAA,MAAM,iBAAiB,QAAO,OAAiC,CAAA;AAC/D;;;GAGG;AACH,QAAA,MAAM,2BAA2B,QAAO,OAA2C,CAAA;AACnF,QAAA,MAAM,eAAe,QAAO,OAA+B,CAAA;AAC3D,QAAA,MAAM,mBAAmB,QAAO,OAAmC,CAAA;AAEnE;;;;GAIG;AACH,QAAA,MAAM,aAAa,GAAI,KAAK,GAAG,OAAO,YAC1B,CAAC,OAAO,EAAE,qBAAqB,KAAK,KAAK,KAClD,KAAwD,CAAA;AAE3D;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,QAAO,qBAA0D,CAAA;AAEvF,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,2BAA2B,EAC3B,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAS5C,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAErF,QAAA,MAAM,WAAW,kCAA+B,CAAA;AAChD,QAAA,MAAM,mBAAmB,kCAA+B,CAAA;AACxD,QAAA,MAAM,gBAAgB,kCAA+B,CAAA;AACrD,QAAA,MAAM,gBAAgB,kCAAuB,CAAA;AAC7C,QAAA,MAAM,iBAAiB,kCAAuB,CAAA;AAC9C;;;GAGG;AACH,QAAA,MAAM,2BAA2B,kCAAuB,CAAA;AACxD,QAAA,MAAM,eAAe,kCAAuB,CAAA;AAC5C,QAAA,MAAM,mBAAmB,kCAAuB,CAAA;AAChD,QAAA,MAAM,4BAA4B,iCAAmB,CAAA;AACrD,QAAA,MAAM,iBAAiB,+DAAiE,CAAA;AAExF,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAE3D;;;;GAIG;AACH,QAAA,MAAM,OAAO,QAAO,OAA2B,CAAA;AAC/C;;;GAGG;AACH,QAAA,MAAM,eAAe,QAAO,OAAmC,CAAA;AAE/D,QAAA,MAAM,YAAY,QAAO,OAAgC,CAAA;AACzD,QAAA,MAAM,gBAAgB,QAAO,OAAgC,CAAA;AAC7D,QAAA,MAAM,iBAAiB,QAAO,OAAiC,CAAA;AAC/D;;;GAGG;AACH,QAAA,MAAM,2BAA2B,QAAO,OAA2C,CAAA;AACnF,QAAA,MAAM,eAAe,QAAO,OAA+B,CAAA;AAC3D,QAAA,MAAM,mBAAmB,QAAO,OAAmC,CAAA;AACnE,QAAA,MAAM,4BAA4B,QAAO,MAA2C,CAAA;AAEpF;;;;GAIG;AACH,QAAA,MAAM,aAAa,GAAI,KAAK,GAAG,OAAO,YAC1B,CAAC,OAAO,EAAE,qBAAqB,KAAK,KAAK,KAClD,KAAwD,CAAA;AAE3D;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,QAAO,qBAA0D,CAAA;AAEvF,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,4BAA4B,EAC5B,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,2BAA2B,EAC3B,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,4BAA4B,EAC5B,YAAY,GACb,CAAA"}
@@ -14,6 +14,7 @@ const ProcessingContext = createContext(false);
14
14
  const BackgroundProcessingContext = createContext(false);
15
15
  const ModifiedContext = createContext(false);
16
16
  const InitializingContext = createContext(false);
17
+ const SuccessfulSubmitCountContext = createContext(0);
17
18
  const FormFieldsContext = createSelectorContext([{}, () => null]);
18
19
  /**
19
20
  * Get the state of the form, can be used to submit & validate the form.
@@ -36,6 +37,7 @@ const useFormProcessing = () => use(ProcessingContext);
36
37
  const useFormBackgroundProcessing = () => use(BackgroundProcessingContext);
37
38
  const useFormModified = () => use(ModifiedContext);
38
39
  const useFormInitializing = () => use(InitializingContext);
40
+ const useFormSuccessfulSubmitCount = () => use(SuccessfulSubmitCountContext);
39
41
  /**
40
42
  * Get and set the value of a form field based on a selector
41
43
  *
@@ -52,5 +54,5 @@ const useFormFields = selector => {
52
54
  const useAllFormFields = () => {
53
55
  return useFullContext(FormFieldsContext);
54
56
  };
55
- export { BackgroundProcessingContext, DocumentFormContext, FormContext, FormFieldsContext, FormWatchContext, InitializingContext, ModifiedContext, ProcessingContext, SubmittedContext, useAllFormFields, useDocumentForm, useForm, useFormBackgroundProcessing, useFormFields, useFormInitializing, useFormModified, useFormProcessing, useFormSubmitted, useWatchForm };
57
+ export { BackgroundProcessingContext, DocumentFormContext, FormContext, FormFieldsContext, FormWatchContext, InitializingContext, ModifiedContext, ProcessingContext, SubmittedContext, SuccessfulSubmitCountContext, useAllFormFields, useDocumentForm, useForm, useFormBackgroundProcessing, useFormFields, useFormInitializing, useFormModified, useFormProcessing, useFormSubmitted, useFormSuccessfulSubmitCount, useWatchForm };
56
58
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":["createContext","use","createSelectorContext","useContextSelector","useContext","useFullContext","FormContext","DocumentFormContext","FormWatchContext","SubmittedContext","ProcessingContext","BackgroundProcessingContext","ModifiedContext","InitializingContext","FormFieldsContext","useForm","useDocumentForm","useWatchForm","useFormSubmitted","useFormProcessing","useFormBackgroundProcessing","useFormModified","useFormInitializing","useFormFields","selector","useAllFormFields"],"sources":["../../../src/forms/Form/context.ts"],"sourcesContent":["'use client'\nimport type { RenderedField } from 'payload'\n\nimport { createContext, use } from 'react'\nimport {\n createContext as createSelectorContext,\n useContextSelector,\n useContext as useFullContext,\n} from 'use-context-selector'\n\nimport type { Context, FormFieldsContext as FormFieldsContextType } from './types.js'\n\nconst FormContext = createContext({} as Context)\nconst DocumentFormContext = createContext({} as Context)\nconst FormWatchContext = createContext({} as Context)\nconst SubmittedContext = createContext(false)\nconst ProcessingContext = createContext(false)\n/**\n * If the form has started processing in the background (e.g.\n * if autosave is running), this will be true.\n */\nconst BackgroundProcessingContext = createContext(false)\nconst ModifiedContext = createContext(false)\nconst InitializingContext = createContext(false)\nconst FormFieldsContext = createSelectorContext<FormFieldsContextType>([{}, () => null])\n\nexport type RenderedFieldSlots = Map<string, RenderedField>\n\n/**\n * Get the state of the form, can be used to submit & validate the form.\n *\n * @see https://payloadcms.com/docs/admin/react-hooks#useform\n */\nconst useForm = (): Context => use(FormContext)\n/**\n * Get the state of the document-level form. This is useful if you need to access the document-level Form from within a child Form.\n * This is the case withing lexical Blocks, as each lexical blocks renders their own Form.\n */\nconst useDocumentForm = (): Context => use(DocumentFormContext)\n\nconst useWatchForm = (): Context => use(FormWatchContext)\nconst useFormSubmitted = (): boolean => use(SubmittedContext)\nconst useFormProcessing = (): boolean => use(ProcessingContext)\n/**\n * If the form has started processing in the background (e.g.\n * if autosave is running), this will be true.\n */\nconst useFormBackgroundProcessing = (): boolean => use(BackgroundProcessingContext)\nconst useFormModified = (): boolean => use(ModifiedContext)\nconst useFormInitializing = (): boolean => use(InitializingContext)\n\n/**\n * Get and set the value of a form field based on a selector\n *\n * @see https://payloadcms.com/docs/admin/react-hooks#useformfields\n */\nconst useFormFields = <Value = unknown>(\n selector: (context: FormFieldsContextType) => Value,\n): Value => useContextSelector(FormFieldsContext, selector)\n\n/**\n * Get the state of all form fields.\n *\n * @see https://payloadcms.com/docs/admin/react-hooks#useallformfields\n */\nconst useAllFormFields = (): FormFieldsContextType => useFullContext(FormFieldsContext)\n\nexport {\n BackgroundProcessingContext,\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useAllFormFields,\n useDocumentForm,\n useForm,\n useFormBackgroundProcessing,\n useFormFields,\n useFormInitializing,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n useWatchForm,\n}\n"],"mappings":"AAAA;;AAGA,SAASA,aAAa,EAAEC,GAAG,QAAQ;AACnC,SACED,aAAA,IAAiBE,qBAAqB,EACtCC,kBAAkB,EAClBC,UAAA,IAAcC,cAAc,QACvB;AAIP,MAAMC,WAAA,GAAcN,aAAA,CAAc,CAAC;AACnC,MAAMO,mBAAA,GAAsBP,aAAA,CAAc,CAAC;AAC3C,MAAMQ,gBAAA,GAAmBR,aAAA,CAAc,CAAC;AACxC,MAAMS,gBAAA,GAAmBT,aAAA,CAAc;AACvC,MAAMU,iBAAA,GAAoBV,aAAA,CAAc;AACxC;;;;AAIA,MAAMW,2BAAA,GAA8BX,aAAA,CAAc;AAClD,MAAMY,eAAA,GAAkBZ,aAAA,CAAc;AACtC,MAAMa,mBAAA,GAAsBb,aAAA,CAAc;AAC1C,MAAMc,iBAAA,GAAoBZ,qBAAA,CAA6C,CAAC,CAAC,GAAG,MAAM,KAAK;AAIvF;;;;;AAKA,MAAMa,OAAA,GAAUA,CAAA,KAAed,GAAA,CAAIK,WAAA;AACnC;;;;AAIA,MAAMU,eAAA,GAAkBA,CAAA,KAAef,GAAA,CAAIM,mBAAA;AAE3C,MAAMU,YAAA,GAAeA,CAAA,KAAehB,GAAA,CAAIO,gBAAA;AACxC,MAAMU,gBAAA,GAAmBA,CAAA,KAAejB,GAAA,CAAIQ,gBAAA;AAC5C,MAAMU,iBAAA,GAAoBA,CAAA,KAAelB,GAAA,CAAIS,iBAAA;AAC7C;;;;AAIA,MAAMU,2BAAA,GAA8BA,CAAA,KAAenB,GAAA,CAAIU,2BAAA;AACvD,MAAMU,eAAA,GAAkBA,CAAA,KAAepB,GAAA,CAAIW,eAAA;AAC3C,MAAMU,mBAAA,GAAsBA,CAAA,KAAerB,GAAA,CAAIY,mBAAA;AAE/C;;;;;AAKA,MAAMU,aAAA,GAAgBC,QAAA;EAAA,OAEVrB,kBAAA,CAAAW,iBAAA,EAAsCU,QAAA;AAAA;AAElD;;;;;AAKA,MAAMC,gBAAA,GAAmBA,CAAA;EAAA,OAA6BpB,cAAA,CAAAS,iBAAe;AAAA;AAErE,SACEH,2BAA2B,EAC3BJ,mBAAmB,EACnBD,WAAW,EACXQ,iBAAiB,EACjBN,gBAAgB,EAChBK,mBAAmB,EACnBD,eAAe,EACfF,iBAAiB,EACjBD,gBAAgB,EAChBgB,gBAAgB,EAChBT,eAAe,EACfD,OAAO,EACPK,2BAA2B,EAC3BG,aAAa,EACbD,mBAAmB,EACnBD,eAAe,EACfF,iBAAiB,EACjBD,gBAAgB,EAChBD,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"context.js","names":["createContext","use","createSelectorContext","useContextSelector","useContext","useFullContext","FormContext","DocumentFormContext","FormWatchContext","SubmittedContext","ProcessingContext","BackgroundProcessingContext","ModifiedContext","InitializingContext","SuccessfulSubmitCountContext","FormFieldsContext","useForm","useDocumentForm","useWatchForm","useFormSubmitted","useFormProcessing","useFormBackgroundProcessing","useFormModified","useFormInitializing","useFormSuccessfulSubmitCount","useFormFields","selector","useAllFormFields"],"sources":["../../../src/forms/Form/context.ts"],"sourcesContent":["'use client'\nimport type { RenderedField } from 'payload'\n\nimport { createContext, use } from 'react'\nimport {\n createContext as createSelectorContext,\n useContextSelector,\n useContext as useFullContext,\n} from 'use-context-selector'\n\nimport type { Context, FormFieldsContext as FormFieldsContextType } from './types.js'\n\nconst FormContext = createContext({} as Context)\nconst DocumentFormContext = createContext({} as Context)\nconst FormWatchContext = createContext({} as Context)\nconst SubmittedContext = createContext(false)\nconst ProcessingContext = createContext(false)\n/**\n * If the form has started processing in the background (e.g.\n * if autosave is running), this will be true.\n */\nconst BackgroundProcessingContext = createContext(false)\nconst ModifiedContext = createContext(false)\nconst InitializingContext = createContext(false)\nconst SuccessfulSubmitCountContext = createContext(0)\nconst FormFieldsContext = createSelectorContext<FormFieldsContextType>([{}, () => null])\n\nexport type RenderedFieldSlots = Map<string, RenderedField>\n\n/**\n * Get the state of the form, can be used to submit & validate the form.\n *\n * @see https://payloadcms.com/docs/admin/react-hooks#useform\n */\nconst useForm = (): Context => use(FormContext)\n/**\n * Get the state of the document-level form. This is useful if you need to access the document-level Form from within a child Form.\n * This is the case withing lexical Blocks, as each lexical blocks renders their own Form.\n */\nconst useDocumentForm = (): Context => use(DocumentFormContext)\n\nconst useWatchForm = (): Context => use(FormWatchContext)\nconst useFormSubmitted = (): boolean => use(SubmittedContext)\nconst useFormProcessing = (): boolean => use(ProcessingContext)\n/**\n * If the form has started processing in the background (e.g.\n * if autosave is running), this will be true.\n */\nconst useFormBackgroundProcessing = (): boolean => use(BackgroundProcessingContext)\nconst useFormModified = (): boolean => use(ModifiedContext)\nconst useFormInitializing = (): boolean => use(InitializingContext)\nconst useFormSuccessfulSubmitCount = (): number => use(SuccessfulSubmitCountContext)\n\n/**\n * Get and set the value of a form field based on a selector\n *\n * @see https://payloadcms.com/docs/admin/react-hooks#useformfields\n */\nconst useFormFields = <Value = unknown>(\n selector: (context: FormFieldsContextType) => Value,\n): Value => useContextSelector(FormFieldsContext, selector)\n\n/**\n * Get the state of all form fields.\n *\n * @see https://payloadcms.com/docs/admin/react-hooks#useallformfields\n */\nconst useAllFormFields = (): FormFieldsContextType => useFullContext(FormFieldsContext)\n\nexport {\n BackgroundProcessingContext,\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n SuccessfulSubmitCountContext,\n useAllFormFields,\n useDocumentForm,\n useForm,\n useFormBackgroundProcessing,\n useFormFields,\n useFormInitializing,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n useFormSuccessfulSubmitCount,\n useWatchForm,\n}\n"],"mappings":"AAAA;;AAGA,SAASA,aAAa,EAAEC,GAAG,QAAQ;AACnC,SACED,aAAA,IAAiBE,qBAAqB,EACtCC,kBAAkB,EAClBC,UAAA,IAAcC,cAAc,QACvB;AAIP,MAAMC,WAAA,GAAcN,aAAA,CAAc,CAAC;AACnC,MAAMO,mBAAA,GAAsBP,aAAA,CAAc,CAAC;AAC3C,MAAMQ,gBAAA,GAAmBR,aAAA,CAAc,CAAC;AACxC,MAAMS,gBAAA,GAAmBT,aAAA,CAAc;AACvC,MAAMU,iBAAA,GAAoBV,aAAA,CAAc;AACxC;;;;AAIA,MAAMW,2BAAA,GAA8BX,aAAA,CAAc;AAClD,MAAMY,eAAA,GAAkBZ,aAAA,CAAc;AACtC,MAAMa,mBAAA,GAAsBb,aAAA,CAAc;AAC1C,MAAMc,4BAAA,GAA+Bd,aAAA,CAAc;AACnD,MAAMe,iBAAA,GAAoBb,qBAAA,CAA6C,CAAC,CAAC,GAAG,MAAM,KAAK;AAIvF;;;;;AAKA,MAAMc,OAAA,GAAUA,CAAA,KAAef,GAAA,CAAIK,WAAA;AACnC;;;;AAIA,MAAMW,eAAA,GAAkBA,CAAA,KAAehB,GAAA,CAAIM,mBAAA;AAE3C,MAAMW,YAAA,GAAeA,CAAA,KAAejB,GAAA,CAAIO,gBAAA;AACxC,MAAMW,gBAAA,GAAmBA,CAAA,KAAelB,GAAA,CAAIQ,gBAAA;AAC5C,MAAMW,iBAAA,GAAoBA,CAAA,KAAenB,GAAA,CAAIS,iBAAA;AAC7C;;;;AAIA,MAAMW,2BAAA,GAA8BA,CAAA,KAAepB,GAAA,CAAIU,2BAAA;AACvD,MAAMW,eAAA,GAAkBA,CAAA,KAAerB,GAAA,CAAIW,eAAA;AAC3C,MAAMW,mBAAA,GAAsBA,CAAA,KAAetB,GAAA,CAAIY,mBAAA;AAC/C,MAAMW,4BAAA,GAA+BA,CAAA,KAAcvB,GAAA,CAAIa,4BAAA;AAEvD;;;;;AAKA,MAAMW,aAAA,GAAgBC,QAAA;EAAA,OAEVvB,kBAAA,CAAAY,iBAAA,EAAsCW,QAAA;AAAA;AAElD;;;;;AAKA,MAAMC,gBAAA,GAAmBA,CAAA;EAAA,OAA6BtB,cAAA,CAAAU,iBAAe;AAAA;AAErE,SACEJ,2BAA2B,EAC3BJ,mBAAmB,EACnBD,WAAW,EACXS,iBAAiB,EACjBP,gBAAgB,EAChBK,mBAAmB,EACnBD,eAAe,EACfF,iBAAiB,EACjBD,gBAAgB,EAChBK,4BAA4B,EAC5Ba,gBAAgB,EAChBV,eAAe,EACfD,OAAO,EACPK,2BAA2B,EAC3BI,aAAa,EACbF,mBAAmB,EACnBD,eAAe,EACfF,iBAAiB,EACjBD,gBAAgB,EAChBK,4BAA4B,EAC5BN,YAAY","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAGV,SAAS,EAIV,MAAM,YAAY,CAAA;AAsCnB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA41BpC,CAAA;AAED,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,SAAS,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAGV,SAAS,EAIV,MAAM,YAAY,CAAA;AAuCnB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAw2BpC,CAAA;AAED,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,SAAS,EAAE,CAAA"}
@@ -3,7 +3,7 @@
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
4
  import { dequal } from 'dequal/lite'; // lite: no need for Map and Set support
5
5
  import { serialize } from 'object-to-formdata';
6
- import { deepCopyObjectSimpleWithoutReactComponents, getDataByPath as getDataByPathFunc, getSiblingData as getSiblingDataFunc, hasDraftValidationEnabled, reduceFieldsToValues, wait } from 'payload/shared';
6
+ import { deepCopyObjectSimpleWithoutReactComponents, getDataByPath as getDataByPathFunc, getSiblingData as getSiblingDataFunc, hasDraftValidationEnabled, reduceFieldsToValues, uploadRequiresServerValidation, wait } from 'payload/shared';
7
7
  import React, { useCallback, useEffect, useReducer, useRef, useState } from 'react';
8
8
  import { toast } from 'sonner';
9
9
  import { FieldErrorsToast } from '../../elements/Toasts/fieldErrors.js';
@@ -24,7 +24,7 @@ import { useTranslation } from '../../providers/Translation/index.js';
24
24
  import { useUploadHandlers } from '../../providers/UploadHandlers/index.js';
25
25
  import { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js';
26
26
  import { requests } from '../../utilities/api.js';
27
- import { BackgroundProcessingContext, DocumentFormContext, FormContext, FormFieldsContext, FormWatchContext, InitializingContext, ModifiedContext, ProcessingContext, SubmittedContext, useDocumentForm } from './context.js';
27
+ import { BackgroundProcessingContext, DocumentFormContext, FormContext, FormFieldsContext, FormWatchContext, InitializingContext, ModifiedContext, ProcessingContext, SubmittedContext, SuccessfulSubmitCountContext, useDocumentForm } from './context.js';
28
28
  import { errorMessages } from './errorMessages.js';
29
29
  import { fieldReducer } from './fieldReducer.js';
30
30
  import { initContextState } from './initContextState.js';
@@ -94,6 +94,7 @@ export const Form = props => {
94
94
  const [disabled, setDisabled] = useState(disabledFromProps || false);
95
95
  const [isMounted, setIsMounted] = useState(false);
96
96
  const [submitted, setSubmitted] = useState(false);
97
+ const [successfulSubmitCount, setSuccessfulSubmitCount] = useState(0);
97
98
  /**
98
99
  * Tracks wether the form state passes validation.
99
100
  * For example the state could be submitted but invalid as field errors have been returned.
@@ -346,6 +347,7 @@ export const Form = props => {
346
347
  json = await res.json();
347
348
  }
348
349
  if (res.status < 400) {
350
+ setSuccessfulSubmitCount(count => count + 1);
349
351
  if (typeof onSuccess === 'function') {
350
352
  const newFormState = await onSuccess(json, {
351
353
  context,
@@ -453,7 +455,11 @@ export const Form = props => {
453
455
  const handler = getUploadHandler({
454
456
  collectionSlug
455
457
  });
456
- if (typeof handler === 'function') {
458
+ if (typeof handler === 'function' && !uploadRequiresServerValidation({
459
+ allowRestrictedFileTypes: docConfig.upload.allowRestrictedFileTypes,
460
+ filename: file.name,
461
+ mimeType: file.type
462
+ })) {
457
463
  file = JSON.stringify(await handler({
458
464
  docPrefix: typeof data_5?.prefix === 'string' ? data_5.prefix : undefined,
459
465
  file
@@ -723,7 +729,10 @@ export const Form = props => {
723
729
  value: modified,
724
730
  children: /*#__PURE__*/_jsx(FormFieldsContext.Provider, {
725
731
  value: fieldsReducer,
726
- children: children
732
+ children: /*#__PURE__*/_jsx(SuccessfulSubmitCountContext, {
733
+ value: successfulSubmitCount,
734
+ children: children
735
+ })
727
736
  })
728
737
  })
729
738
  })