@payloadcms/ui 4.0.0-canary.32 → 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.
- package/dist/elements/APIKeyInput/index.d.ts +2 -0
- package/dist/elements/APIKeyInput/index.d.ts.map +1 -1
- package/dist/elements/APIKeyInput/index.js +27 -29
- package/dist/elements/APIKeyInput/index.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts +1 -1
- package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/createFormData.js +7 -3
- package/dist/elements/BulkUpload/FormsManager/createFormData.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +4 -2
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts +1 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js +3 -2
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/index.d.ts +1 -0
- package/dist/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/index.js +5 -3
- package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
- package/dist/elements/DocumentHeader/index.d.ts +1 -0
- package/dist/elements/DocumentHeader/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/index.js +4 -2
- package/dist/elements/DocumentHeader/index.js.map +1 -1
- package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +3 -2
- package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +1 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.d.ts.map +1 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.js +14 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
- package/dist/forms/Form/context.d.ts +3 -1
- package/dist/forms/Form/context.d.ts.map +1 -1
- package/dist/forms/Form/context.js +3 -1
- package/dist/forms/Form/context.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +13 -4
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js +3 -2
- package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.d.ts +12 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.d.ts.map +1 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.js +42 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.js.map +1 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts +8 -6
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +22 -9
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js +150 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js.map +1 -0
- package/dist/forms/fieldSchemasToFormState/types.d.ts +1 -0
- package/dist/forms/fieldSchemasToFormState/types.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
- package/dist/layouts/Root/index.js +6 -5
- package/dist/layouts/Root/index.js.map +1 -1
- package/dist/providers/LivePreview/index.d.ts.map +1 -1
- package/dist/providers/LivePreview/index.js +13 -6
- package/dist/providers/LivePreview/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/buildFormState.d.ts.map +1 -1
- package/dist/utilities/buildFormState.js +6 -2
- package/dist/utilities/buildFormState.js.map +1 -1
- package/dist/utilities/formatAbsoluteURL.d.ts +1 -1
- package/dist/utilities/formatAbsoluteURL.d.ts.map +1 -1
- package/dist/utilities/formatAbsoluteURL.js +18 -8
- package/dist/utilities/formatAbsoluteURL.js.map +1 -1
- package/dist/utilities/formatAbsoluteURL.spec.js +27 -0
- package/dist/utilities/formatAbsoluteURL.spec.js.map +1 -0
- package/dist/utilities/handleServerFunctions.d.ts.map +1 -1
- package/dist/utilities/handleServerFunctions.js +4 -2
- package/dist/utilities/handleServerFunctions.js.map +1 -1
- package/dist/utilities/initReq.d.ts.map +1 -1
- package/dist/utilities/initReq.js +40 -5
- package/dist/utilities/initReq.js.map +1 -1
- package/dist/utilities/initReq.spec.js +226 -0
- package/dist/utilities/initReq.spec.js.map +1 -0
- package/dist/utilities/isAbsoluteURL.d.ts +3 -0
- package/dist/utilities/isAbsoluteURL.d.ts.map +1 -0
- package/dist/utilities/isAbsoluteURL.js +15 -0
- package/dist/utilities/isAbsoluteURL.js.map +1 -0
- package/dist/utilities/isAbsoluteURL.spec.js +11 -0
- package/dist/utilities/isAbsoluteURL.spec.js.map +1 -0
- package/dist/utilities/isHttpURL.d.ts +3 -0
- package/dist/utilities/isHttpURL.d.ts.map +1 -0
- package/dist/utilities/isHttpURL.js +12 -0
- package/dist/utilities/isHttpURL.js.map +1 -0
- package/dist/utilities/isHttpURL.spec.js +25 -0
- package/dist/utilities/isHttpURL.spec.js.map +1 -0
- package/dist/utilities/isPublicAdminRoute.d.ts.map +1 -1
- package/dist/utilities/isPublicAdminRoute.js +9 -6
- package/dist/utilities/isPublicAdminRoute.js.map +1 -1
- package/dist/utilities/isPublicAdminRoute.spec.js +34 -0
- package/dist/utilities/isPublicAdminRoute.spec.js.map +1 -0
- package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
- package/dist/utilities/schedulePublishHandler.js +4 -1
- package/dist/utilities/schedulePublishHandler.js.map +1 -1
- package/dist/views/Account/index.d.ts +1 -1
- package/dist/views/Account/index.d.ts.map +1 -1
- package/dist/views/Account/index.js +8 -5
- package/dist/views/Account/index.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/index.d.ts.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/index.js +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.d.ts.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js +3 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.d.ts.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +2 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
- package/dist/views/Dashboard/index.d.ts.map +1 -1
- package/dist/views/Dashboard/index.js +2 -3
- package/dist/views/Dashboard/index.js.map +1 -1
- package/dist/views/Document/handleServerFunction.d.ts.map +1 -1
- package/dist/views/Document/handleServerFunction.js +2 -0
- package/dist/views/Document/handleServerFunction.js.map +1 -1
- package/dist/views/Document/index.d.ts +1 -1
- package/dist/views/Document/index.d.ts.map +1 -1
- package/dist/views/Document/index.js +9 -4
- package/dist/views/Document/index.js.map +1 -1
- package/dist/views/Document/renderDocumentSlots.d.ts +1 -0
- package/dist/views/Document/renderDocumentSlots.d.ts.map +1 -1
- package/dist/views/Document/renderDocumentSlots.js +7 -4
- package/dist/views/Document/renderDocumentSlots.js.map +1 -1
- package/dist/views/Edit/Auth/APIKey.d.ts +1 -1
- package/dist/views/Edit/Auth/APIKey.d.ts.map +1 -1
- package/dist/views/Edit/Auth/APIKey.js +233 -59
- package/dist/views/Edit/Auth/APIKey.js.map +1 -1
- package/dist/views/Edit/Auth/APIKeyGenerationModal.d.ts +12 -0
- package/dist/views/Edit/Auth/APIKeyGenerationModal.d.ts.map +1 -0
- package/dist/views/Edit/Auth/APIKeyGenerationModal.js +117 -0
- package/dist/views/Edit/Auth/APIKeyGenerationModal.js.map +1 -0
- package/dist/views/Edit/Auth/index.css +91 -0
- package/dist/views/Edit/Auth/index.d.ts.map +1 -1
- package/dist/views/Edit/Auth/index.js +10 -28
- package/dist/views/Edit/Auth/index.js.map +1 -1
- package/dist/views/Edit/Auth/types.d.ts +3 -1
- package/dist/views/Edit/Auth/types.d.ts.map +1 -1
- package/dist/views/Edit/Auth/types.js.map +1 -1
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.css +14 -0
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.d.ts.map +1 -1
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +209 -161
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -1
- package/dist/views/ForgotPassword/index.d.ts.map +1 -1
- package/dist/views/ForgotPassword/index.js +2 -11
- package/dist/views/ForgotPassword/index.js.map +1 -1
- package/dist/views/List/handleServerFunction.d.ts.map +1 -1
- package/dist/views/List/handleServerFunction.js +3 -1
- package/dist/views/List/handleServerFunction.js.map +1 -1
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +2 -1
- package/dist/views/List/index.js.map +1 -1
- package/dist/views/NotFound/page.d.ts.map +1 -1
- package/dist/views/NotFound/page.js +4 -3
- package/dist/views/NotFound/page.js.map +1 -1
- package/dist/views/Root/index.d.ts.map +1 -1
- package/dist/views/Root/index.js +5 -3
- package/dist/views/Root/index.js.map +1 -1
- package/dist/views/Verify/index.d.ts +1 -1
- package/dist/views/Verify/index.d.ts.map +1 -1
- package/dist/views/Verify/index.js +4 -4
- package/dist/views/Verify/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -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,
|
|
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
|
|
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
|
|
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;
|
|
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;
|
|
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,
|
|
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":"
|
|
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"}
|
package/dist/forms/Form/index.js
CHANGED
|
@@ -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:
|
|
732
|
+
children: /*#__PURE__*/_jsx(SuccessfulSubmitCountContext, {
|
|
733
|
+
value: successfulSubmitCount,
|
|
734
|
+
children: children
|
|
735
|
+
})
|
|
727
736
|
})
|
|
728
737
|
})
|
|
729
738
|
})
|