@payloadcms/next 3.14.1-canary.f9e1e85 → 3.15.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/List/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAS,MAAM,SAAS,CAAA;AAQ/D,OAAO,KAAmB,MAAM,OAAO,CAAA;AAIvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,KAAK,YAAY,GAAG;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,EAAE,SAAS,CAAA;CACjB,GAAG,cAAc,CAAA;AAElB,eAAO,MAAM,cAAc,SACnB,YAAY,KACjB,OAAO,CAAC;IACT,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;CACtB,CAyOA,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAW3C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/List/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAS,MAAM,SAAS,CAAA;AAQ/D,OAAO,KAAmB,MAAM,OAAO,CAAA;AAIvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,KAAK,YAAY,GAAG;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,EAAE,SAAS,CAAA;CACjB,GAAG,cAAc,CAAA;AAElB,eAAO,MAAM,cAAc,SACnB,YAAY,KACjB,OAAO,CAAC;IACT,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;CACtB,CAoMA,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAW3C,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { DefaultListView, HydrateAuthProvider, ListQueryProvider } from '@payloadcms/ui';
3
3
  import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent';
4
- import { renderFilters, renderTable } from '@payloadcms/ui/rsc';
4
+ import { renderFilters, renderTable, upsertPreferences } from '@payloadcms/ui/rsc';
5
5
  import { formatAdminURL, mergeListSearchAndWhere } from '@payloadcms/ui/shared';
6
6
  import { notFound } from 'next/navigation.js';
7
7
  import { isNumber } from 'payload/shared';
@@ -25,12 +25,7 @@ export const renderListView = async args => {
25
25
  const {
26
26
  collectionConfig,
27
27
  collectionConfig: {
28
- slug: collectionSlug,
29
- admin: {
30
- useAsTitle
31
- },
32
- defaultSort,
33
- fields
28
+ slug: collectionSlug
34
29
  },
35
30
  locale: fullLocale,
36
31
  permissions,
@@ -51,32 +46,15 @@ export const renderListView = async args => {
51
46
  throw new Error('not-found');
52
47
  }
53
48
  const query = queryFromArgs || queryFromReq;
54
- let listPreferences;
55
49
  const preferenceKey = `${collectionSlug}-list`;
56
- try {
57
- listPreferences = await payload.find({
58
- collection: 'payload-preferences',
59
- depth: 0,
60
- limit: 1,
61
- req,
62
- user,
63
- where: {
64
- and: [{
65
- key: {
66
- equals: preferenceKey
67
- }
68
- }, {
69
- 'user.relationTo': {
70
- equals: user.collection
71
- }
72
- }, {
73
- 'user.value': {
74
- equals: user?.id
75
- }
76
- }]
77
- }
78
- })?.then(res => res?.docs?.[0]?.value);
79
- } catch (_err) {} // eslint-disable-line no-empty
50
+ const listPreferences = await upsertPreferences({
51
+ key: `${collectionSlug}-list`,
52
+ req,
53
+ value: {
54
+ limit: isNumber(query?.limit) ? Number(query.limit) : undefined,
55
+ sort: query?.sort
56
+ }
57
+ });
80
58
  const {
81
59
  routes: {
82
60
  admin: adminRoute
@@ -87,13 +65,13 @@ export const renderListView = async args => {
87
65
  throw new Error('not-found');
88
66
  }
89
67
  const page = isNumber(query?.page) ? Number(query.page) : 0;
90
- let whereQuery = mergeListSearchAndWhere({
68
+ const limit = listPreferences?.limit || collectionConfig.admin.pagination.defaultLimit;
69
+ const sort = listPreferences?.sort || (typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined);
70
+ let where = mergeListSearchAndWhere({
91
71
  collectionConfig,
92
72
  search: typeof query?.search === 'string' ? query.search : undefined,
93
73
  where: query?.where || undefined
94
74
  });
95
- const limit = isNumber(query?.limit) ? Number(query.limit) : listPreferences?.limit || collectionConfig.admin.pagination.defaultLimit;
96
- const sort = query?.sort && typeof query.sort === 'string' ? query.sort : listPreferences?.sort || (typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined);
97
75
  if (typeof collectionConfig.admin?.baseListFilter === 'function') {
98
76
  const baseListFilter = await collectionConfig.admin.baseListFilter({
99
77
  limit,
@@ -102,8 +80,8 @@ export const renderListView = async args => {
102
80
  sort
103
81
  });
104
82
  if (baseListFilter) {
105
- whereQuery = {
106
- and: [whereQuery, baseListFilter].filter(Boolean)
83
+ where = {
84
+ and: [where, baseListFilter].filter(Boolean)
107
85
  };
108
86
  }
109
87
  }
@@ -120,7 +98,7 @@ export const renderListView = async args => {
120
98
  req,
121
99
  sort,
122
100
  user,
123
- where: whereQuery || {}
101
+ where: where || {}
124
102
  });
125
103
  const clientCollectionConfig = clientConfig.collections.find(c => c.slug === collectionSlug);
126
104
  const {
@@ -136,9 +114,9 @@ export const renderListView = async args => {
136
114
  enableRowSelections,
137
115
  i18n: req.i18n,
138
116
  payload,
139
- useAsTitle
117
+ useAsTitle: collectionConfig.admin.useAsTitle
140
118
  });
141
- const renderedFilters = renderFilters(fields, req.payload.importMap);
119
+ const renderedFilters = renderFilters(collectionConfig.fields, req.payload.importMap);
142
120
  const staticDescription = typeof collectionConfig.admin.description === 'function' ? collectionConfig.admin.description({
143
121
  t: i18n.t
144
122
  }) : collectionConfig.admin.description;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["DefaultListView","HydrateAuthProvider","ListQueryProvider","RenderServerComponent","renderFilters","renderTable","formatAdminURL","mergeListSearchAndWhere","notFound","isNumber","React","Fragment","renderListViewSlots","generateListMetadata","renderListView","args","clientConfig","customCellProps","disableBulkDelete","disableBulkEdit","drawerSlug","enableRowSelections","initPageResult","overrideEntityVisibility","params","query","queryFromArgs","searchParams","collectionConfig","slug","collectionSlug","admin","useAsTitle","defaultSort","fields","locale","fullLocale","permissions","req","i18n","payload","config","queryFromReq","user","visibleEntities","collections","read","Error","listPreferences","preferenceKey","find","collection","depth","limit","where","and","key","equals","id","then","res","docs","value","_err","routes","adminRoute","includes","page","Number","whereQuery","search","undefined","pagination","defaultLimit","sort","baseListFilter","filter","Boolean","data","draft","fallbackLocale","includeLockStatus","overrideAccess","clientCollectionConfig","c","columnState","Table","columnPreferences","columns","renderedFilters","importMap","staticDescription","description","t","sharedClientProps","hasCreatePermission","create","newDocumentURL","path","sharedServerProps","listViewSlots","clientProps","serverProps","isInDrawer","List","_jsxs","_jsx","modifySearchParams","Component","components","views","list","Fallback","listSearchableFields","ListView","RenderedList","error","message","console"],"sources":["../../../src/views/List/index.tsx"],"sourcesContent":["import type {\n ListComponentClientProps,\n ListComponentServerProps,\n ListPreferences,\n ListViewClientProps,\n} from '@payloadcms/ui'\nimport type { AdminViewProps, ListQuery, Where } from 'payload'\n\nimport { DefaultListView, HydrateAuthProvider, ListQueryProvider } from '@payloadcms/ui'\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'\nimport { renderFilters, renderTable } from '@payloadcms/ui/rsc'\nimport { formatAdminURL, mergeListSearchAndWhere } from '@payloadcms/ui/shared'\nimport { notFound } from 'next/navigation.js'\nimport { isNumber } from 'payload/shared'\nimport React, { Fragment } from 'react'\n\nimport { renderListViewSlots } from './renderListViewSlots.js'\n\nexport { generateListMetadata } from './meta.js'\n\ntype ListViewArgs = {\n customCellProps?: Record<string, any>\n disableBulkDelete?: boolean\n disableBulkEdit?: boolean\n enableRowSelections: boolean\n overrideEntityVisibility?: boolean\n query: ListQuery\n} & AdminViewProps\n\nexport const renderListView = async (\n args: ListViewArgs,\n): Promise<{\n List: React.ReactNode\n}> => {\n const {\n clientConfig,\n customCellProps,\n disableBulkDelete,\n disableBulkEdit,\n drawerSlug,\n enableRowSelections,\n initPageResult,\n overrideEntityVisibility,\n params,\n query: queryFromArgs,\n searchParams,\n } = args\n\n const {\n collectionConfig,\n collectionConfig: {\n slug: collectionSlug,\n admin: { useAsTitle },\n defaultSort,\n fields,\n },\n locale: fullLocale,\n permissions,\n req,\n req: {\n i18n,\n locale,\n payload,\n payload: { config },\n query: queryFromReq,\n user,\n },\n visibleEntities,\n } = initPageResult\n\n if (!permissions?.collections?.[collectionSlug]?.read) {\n throw new Error('not-found')\n }\n\n const query = queryFromArgs || queryFromReq\n\n let listPreferences: ListPreferences\n const preferenceKey = `${collectionSlug}-list`\n\n try {\n listPreferences = (await payload\n .find({\n collection: 'payload-preferences',\n depth: 0,\n limit: 1,\n req,\n user,\n where: {\n and: [\n {\n key: {\n equals: preferenceKey,\n },\n },\n {\n 'user.relationTo': {\n equals: user.collection,\n },\n },\n {\n 'user.value': {\n equals: user?.id,\n },\n },\n ],\n },\n })\n ?.then((res) => res?.docs?.[0]?.value)) as ListPreferences\n } catch (_err) {} // eslint-disable-line no-empty\n\n const {\n routes: { admin: adminRoute },\n } = config\n\n if (collectionConfig) {\n if (!visibleEntities.collections.includes(collectionSlug) && !overrideEntityVisibility) {\n throw new Error('not-found')\n }\n\n const page = isNumber(query?.page) ? Number(query.page) : 0\n\n let whereQuery = mergeListSearchAndWhere({\n collectionConfig,\n search: typeof query?.search === 'string' ? query.search : undefined,\n where: (query?.where as Where) || undefined,\n })\n\n const limit = isNumber(query?.limit)\n ? Number(query.limit)\n : listPreferences?.limit || collectionConfig.admin.pagination.defaultLimit\n\n const sort =\n query?.sort && typeof query.sort === 'string'\n ? query.sort\n : listPreferences?.sort ||\n (typeof collectionConfig.defaultSort === 'string'\n ? collectionConfig.defaultSort\n : undefined)\n\n if (typeof collectionConfig.admin?.baseListFilter === 'function') {\n const baseListFilter = await collectionConfig.admin.baseListFilter({\n limit,\n page,\n req,\n sort,\n })\n\n if (baseListFilter) {\n whereQuery = {\n and: [whereQuery, baseListFilter].filter(Boolean),\n }\n }\n }\n\n const data = await payload.find({\n collection: collectionSlug,\n depth: 0,\n draft: true,\n fallbackLocale: false,\n includeLockStatus: true,\n limit,\n locale,\n overrideAccess: false,\n page,\n req,\n sort,\n user,\n where: whereQuery || {},\n })\n\n const clientCollectionConfig = clientConfig.collections.find((c) => c.slug === collectionSlug)\n\n const { columnState, Table } = renderTable({\n clientCollectionConfig,\n collectionConfig,\n columnPreferences: listPreferences?.columns,\n customCellProps,\n docs: data.docs,\n drawerSlug,\n enableRowSelections,\n i18n: req.i18n,\n payload,\n useAsTitle,\n })\n\n const renderedFilters = renderFilters(fields, req.payload.importMap)\n\n const staticDescription =\n typeof collectionConfig.admin.description === 'function'\n ? collectionConfig.admin.description({ t: i18n.t })\n : collectionConfig.admin.description\n\n const sharedClientProps: ListComponentClientProps = {\n collectionSlug,\n hasCreatePermission: permissions?.collections?.[collectionSlug]?.create,\n newDocumentURL: formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/create`,\n }),\n }\n\n const sharedServerProps: ListComponentServerProps = {\n collectionConfig,\n i18n,\n limit,\n locale: fullLocale,\n params,\n payload,\n permissions,\n searchParams,\n user,\n }\n\n const listViewSlots = renderListViewSlots({\n clientProps: sharedClientProps,\n collectionConfig,\n description: staticDescription,\n payload,\n serverProps: sharedServerProps,\n })\n\n const clientProps: ListViewClientProps = {\n ...listViewSlots,\n ...sharedClientProps,\n columnState,\n disableBulkDelete,\n disableBulkEdit,\n enableRowSelections,\n listPreferences,\n renderedFilters,\n Table,\n }\n\n const isInDrawer = Boolean(drawerSlug)\n\n return {\n List: (\n <Fragment>\n <HydrateAuthProvider permissions={permissions} />\n <ListQueryProvider\n collectionSlug={collectionSlug}\n data={data}\n defaultLimit={limit}\n defaultSort={sort}\n modifySearchParams={!isInDrawer}\n preferenceKey={preferenceKey}\n >\n {RenderServerComponent({\n clientProps,\n Component: collectionConfig?.admin?.components?.views?.list?.Component,\n Fallback: DefaultListView,\n importMap: payload.importMap,\n serverProps: {\n ...sharedServerProps,\n data,\n listPreferences,\n listSearchableFields: collectionConfig.admin.listSearchableFields,\n },\n })}\n </ListQueryProvider>\n </Fragment>\n ),\n }\n }\n\n throw new Error('not-found')\n}\n\nexport const ListView: React.FC<ListViewArgs> = async (args) => {\n try {\n const { List: RenderedList } = await renderListView({ ...args, enableRowSelections: true })\n return RenderedList\n } catch (error) {\n if (error.message === 'not-found') {\n notFound()\n } else {\n console.error(error) // eslint-disable-line no-console\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["DefaultListView","HydrateAuthProvider","ListQueryProvider","RenderServerComponent","renderFilters","renderTable","upsertPreferences","formatAdminURL","mergeListSearchAndWhere","notFound","isNumber","React","Fragment","renderListViewSlots","generateListMetadata","renderListView","args","clientConfig","customCellProps","disableBulkDelete","disableBulkEdit","drawerSlug","enableRowSelections","initPageResult","overrideEntityVisibility","params","query","queryFromArgs","searchParams","collectionConfig","slug","collectionSlug","locale","fullLocale","permissions","req","i18n","payload","config","queryFromReq","user","visibleEntities","collections","read","Error","preferenceKey","listPreferences","key","value","limit","Number","undefined","sort","routes","admin","adminRoute","includes","page","pagination","defaultLimit","defaultSort","where","search","baseListFilter","and","filter","Boolean","data","find","collection","depth","draft","fallbackLocale","includeLockStatus","overrideAccess","clientCollectionConfig","c","columnState","Table","columnPreferences","columns","docs","useAsTitle","renderedFilters","fields","importMap","staticDescription","description","t","sharedClientProps","hasCreatePermission","create","newDocumentURL","path","sharedServerProps","listViewSlots","clientProps","serverProps","isInDrawer","List","_jsxs","_jsx","modifySearchParams","Component","components","views","list","Fallback","listSearchableFields","ListView","RenderedList","error","message","console"],"sources":["../../../src/views/List/index.tsx"],"sourcesContent":["import type {\n ListComponentClientProps,\n ListComponentServerProps,\n ListPreferences,\n ListViewClientProps,\n} from '@payloadcms/ui'\nimport type { AdminViewProps, ListQuery, Where } from 'payload'\n\nimport { DefaultListView, HydrateAuthProvider, ListQueryProvider } from '@payloadcms/ui'\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'\nimport { renderFilters, renderTable, upsertPreferences } from '@payloadcms/ui/rsc'\nimport { formatAdminURL, mergeListSearchAndWhere } from '@payloadcms/ui/shared'\nimport { notFound } from 'next/navigation.js'\nimport { isNumber } from 'payload/shared'\nimport React, { Fragment } from 'react'\n\nimport { renderListViewSlots } from './renderListViewSlots.js'\n\nexport { generateListMetadata } from './meta.js'\n\ntype ListViewArgs = {\n customCellProps?: Record<string, any>\n disableBulkDelete?: boolean\n disableBulkEdit?: boolean\n enableRowSelections: boolean\n overrideEntityVisibility?: boolean\n query: ListQuery\n} & AdminViewProps\n\nexport const renderListView = async (\n args: ListViewArgs,\n): Promise<{\n List: React.ReactNode\n}> => {\n const {\n clientConfig,\n customCellProps,\n disableBulkDelete,\n disableBulkEdit,\n drawerSlug,\n enableRowSelections,\n initPageResult,\n overrideEntityVisibility,\n params,\n query: queryFromArgs,\n searchParams,\n } = args\n\n const {\n collectionConfig,\n collectionConfig: { slug: collectionSlug },\n locale: fullLocale,\n permissions,\n req,\n req: {\n i18n,\n locale,\n payload,\n payload: { config },\n query: queryFromReq,\n user,\n },\n visibleEntities,\n } = initPageResult\n\n if (!permissions?.collections?.[collectionSlug]?.read) {\n throw new Error('not-found')\n }\n\n const query = queryFromArgs || queryFromReq\n\n const preferenceKey = `${collectionSlug}-list`\n\n const listPreferences = await upsertPreferences<ListPreferences>({\n key: `${collectionSlug}-list`,\n req,\n value: { limit: isNumber(query?.limit) ? Number(query.limit) : undefined, sort: query?.sort },\n })\n\n const {\n routes: { admin: adminRoute },\n } = config\n\n if (collectionConfig) {\n if (!visibleEntities.collections.includes(collectionSlug) && !overrideEntityVisibility) {\n throw new Error('not-found')\n }\n\n const page = isNumber(query?.page) ? Number(query.page) : 0\n\n const limit = listPreferences?.limit || collectionConfig.admin.pagination.defaultLimit\n\n const sort =\n listPreferences?.sort ||\n (typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined)\n\n let where = mergeListSearchAndWhere({\n collectionConfig,\n search: typeof query?.search === 'string' ? query.search : undefined,\n where: (query?.where as Where) || undefined,\n })\n\n if (typeof collectionConfig.admin?.baseListFilter === 'function') {\n const baseListFilter = await collectionConfig.admin.baseListFilter({\n limit,\n page,\n req,\n sort,\n })\n\n if (baseListFilter) {\n where = {\n and: [where, baseListFilter].filter(Boolean),\n }\n }\n }\n\n const data = await payload.find({\n collection: collectionSlug,\n depth: 0,\n draft: true,\n fallbackLocale: false,\n includeLockStatus: true,\n limit,\n locale,\n overrideAccess: false,\n page,\n req,\n sort,\n user,\n where: where || {},\n })\n\n const clientCollectionConfig = clientConfig.collections.find((c) => c.slug === collectionSlug)\n\n const { columnState, Table } = renderTable({\n clientCollectionConfig,\n collectionConfig,\n columnPreferences: listPreferences?.columns,\n customCellProps,\n docs: data.docs,\n drawerSlug,\n enableRowSelections,\n i18n: req.i18n,\n payload,\n useAsTitle: collectionConfig.admin.useAsTitle,\n })\n\n const renderedFilters = renderFilters(collectionConfig.fields, req.payload.importMap)\n\n const staticDescription =\n typeof collectionConfig.admin.description === 'function'\n ? collectionConfig.admin.description({ t: i18n.t })\n : collectionConfig.admin.description\n\n const sharedClientProps: ListComponentClientProps = {\n collectionSlug,\n hasCreatePermission: permissions?.collections?.[collectionSlug]?.create,\n newDocumentURL: formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/create`,\n }),\n }\n\n const sharedServerProps: ListComponentServerProps = {\n collectionConfig,\n i18n,\n limit,\n locale: fullLocale,\n params,\n payload,\n permissions,\n searchParams,\n user,\n }\n\n const listViewSlots = renderListViewSlots({\n clientProps: sharedClientProps,\n collectionConfig,\n description: staticDescription,\n payload,\n serverProps: sharedServerProps,\n })\n\n const clientProps: ListViewClientProps = {\n ...listViewSlots,\n ...sharedClientProps,\n columnState,\n disableBulkDelete,\n disableBulkEdit,\n enableRowSelections,\n listPreferences,\n renderedFilters,\n Table,\n }\n\n const isInDrawer = Boolean(drawerSlug)\n\n return {\n List: (\n <Fragment>\n <HydrateAuthProvider permissions={permissions} />\n <ListQueryProvider\n collectionSlug={collectionSlug}\n data={data}\n defaultLimit={limit}\n defaultSort={sort}\n modifySearchParams={!isInDrawer}\n preferenceKey={preferenceKey}\n >\n {RenderServerComponent({\n clientProps,\n Component: collectionConfig?.admin?.components?.views?.list?.Component,\n Fallback: DefaultListView,\n importMap: payload.importMap,\n serverProps: {\n ...sharedServerProps,\n data,\n listPreferences,\n listSearchableFields: collectionConfig.admin.listSearchableFields,\n },\n })}\n </ListQueryProvider>\n </Fragment>\n ),\n }\n }\n\n throw new Error('not-found')\n}\n\nexport const ListView: React.FC<ListViewArgs> = async (args) => {\n try {\n const { List: RenderedList } = await renderListView({ ...args, enableRowSelections: true })\n return RenderedList\n } catch (error) {\n if (error.message === 'not-found') {\n notFound()\n } else {\n console.error(error) // eslint-disable-line no-console\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"renderListViewSlots.d.ts","sourceRoot":"","sources":["../../../src/views/List/renderListViewSlots.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,wBAAwB,EACxB,aAAa,EACd,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAIpF,KAAK,IAAI,GAAG;IACV,WAAW,EAAE,wBAAwB,CAAA;IACrC,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,wBAAwB,CAAA;CACtC,CAAA;AACD,eAAO,MAAM,mBAAmB,0EAM7B,IAAI,KAAG,aAoDT,CAAA"}
1
+ {"version":3,"file":"renderListViewSlots.d.ts","sourceRoot":"","sources":["../../../src/views/List/renderListViewSlots.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,wBAAwB,EACxB,aAAa,EACd,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAIpF,KAAK,IAAI,GAAG;IACV,WAAW,EAAE,wBAAwB,CAAA;IACrC,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,wBAAwB,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,mBAAmB,0EAM7B,IAAI,KAAG,aAoDT,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderListViewSlots.js","names":["RenderServerComponent","renderListViewSlots","clientProps","collectionConfig","description","payload","serverProps","result","admin","components","afterList","AfterList","Component","importMap","afterListTable","AfterListTable","beforeList","BeforeList","beforeListTable","BeforeListTable","Description"],"sources":["../../../src/views/List/renderListViewSlots.tsx"],"sourcesContent":["import type {\n ListComponentClientProps,\n ListComponentServerProps,\n ListViewSlots,\n} from '@payloadcms/ui'\nimport type { Payload, SanitizedCollectionConfig, StaticDescription } from 'payload'\n\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'\n\ntype Args = {\n clientProps: ListComponentClientProps\n collectionConfig: SanitizedCollectionConfig\n description?: StaticDescription\n payload: Payload\n serverProps: ListComponentServerProps\n}\nexport const renderListViewSlots = ({\n clientProps,\n collectionConfig,\n description,\n payload,\n serverProps,\n}: Args): ListViewSlots => {\n const result: ListViewSlots = {} as ListViewSlots\n\n if (collectionConfig.admin.components?.afterList) {\n result.AfterList = RenderServerComponent({\n clientProps,\n Component: collectionConfig.admin.components.afterList,\n importMap: payload.importMap,\n serverProps,\n })\n }\n\n if (collectionConfig.admin.components?.afterListTable) {\n result.AfterListTable = RenderServerComponent({\n clientProps,\n Component: collectionConfig.admin.components.afterListTable,\n importMap: payload.importMap,\n serverProps,\n })\n }\n\n if (collectionConfig.admin.components?.beforeList) {\n result.BeforeList = RenderServerComponent({\n clientProps,\n Component: collectionConfig.admin.components.beforeList,\n importMap: payload.importMap,\n serverProps,\n })\n }\n\n if (collectionConfig.admin.components?.beforeListTable) {\n result.BeforeListTable = RenderServerComponent({\n clientProps,\n Component: collectionConfig.admin.components.beforeListTable,\n importMap: payload.importMap,\n serverProps,\n })\n }\n\n if (collectionConfig.admin.components?.Description) {\n result.Description = RenderServerComponent({\n clientProps: {\n description,\n ...clientProps,\n },\n Component: collectionConfig.admin.components.Description,\n importMap: payload.importMap,\n serverProps,\n })\n }\n\n return result\n}\n"],"mappings":"AAOA,SAASA,qBAAqB,QAAQ;AAStC,OAAO,MAAMC,mBAAA,GAAsBA,CAAC;EAClCC,WAAW;EACXC,gBAAgB;EAChBC,WAAW;EACXC,OAAO;EACPC;AAAW,CACN;EACL,MAAMC,MAAA,GAAwB,CAAC;EAE/B,IAAIJ,gBAAA,CAAiBK,KAAK,CAACC,UAAU,EAAEC,SAAA,EAAW;IAChDH,MAAA,CAAOI,SAAS,GAAGX,qBAAA,CAAsB;MACvCE,WAAA;MACAU,SAAA,EAAWT,gBAAA,CAAiBK,KAAK,CAACC,UAAU,CAACC,SAAS;MACtDG,SAAA,EAAWR,OAAA,CAAQQ,SAAS;MAC5BP;IACF;EACF;EAEA,IAAIH,gBAAA,CAAiBK,KAAK,CAACC,UAAU,EAAEK,cAAA,EAAgB;IACrDP,MAAA,CAAOQ,cAAc,GAAGf,qBAAA,CAAsB;MAC5CE,WAAA;MACAU,SAAA,EAAWT,gBAAA,CAAiBK,KAAK,CAACC,UAAU,CAACK,cAAc;MAC3DD,SAAA,EAAWR,OAAA,CAAQQ,SAAS;MAC5BP;IACF;EACF;EAEA,IAAIH,gBAAA,CAAiBK,KAAK,CAACC,UAAU,EAAEO,UAAA,EAAY;IACjDT,MAAA,CAAOU,UAAU,GAAGjB,qBAAA,CAAsB;MACxCE,WAAA;MACAU,SAAA,EAAWT,gBAAA,CAAiBK,KAAK,CAACC,UAAU,CAACO,UAAU;MACvDH,SAAA,EAAWR,OAAA,CAAQQ,SAAS;MAC5BP;IACF;EACF;EAEA,IAAIH,gBAAA,CAAiBK,KAAK,CAACC,UAAU,EAAES,eAAA,EAAiB;IACtDX,MAAA,CAAOY,eAAe,GAAGnB,qBAAA,CAAsB;MAC7CE,WAAA;MACAU,SAAA,EAAWT,gBAAA,CAAiBK,KAAK,CAACC,UAAU,CAACS,eAAe;MAC5DL,SAAA,EAAWR,OAAA,CAAQQ,SAAS;MAC5BP;IACF;EACF;EAEA,IAAIH,gBAAA,CAAiBK,KAAK,CAACC,UAAU,EAAEW,WAAA,EAAa;IAClDb,MAAA,CAAOa,WAAW,GAAGpB,qBAAA,CAAsB;MACzCE,WAAA,EAAa;QACXE,WAAA;QACA,GAAGF;MACL;MACAU,SAAA,EAAWT,gBAAA,CAAiBK,KAAK,CAACC,UAAU,CAACW,WAAW;MACxDP,SAAA,EAAWR,OAAA,CAAQQ,SAAS;MAC5BP;IACF;EACF;EAEA,OAAOC,MAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"renderListViewSlots.js","names":["RenderServerComponent","renderListViewSlots","clientProps","collectionConfig","description","payload","serverProps","result","admin","components","afterList","AfterList","Component","importMap","afterListTable","AfterListTable","beforeList","BeforeList","beforeListTable","BeforeListTable","Description"],"sources":["../../../src/views/List/renderListViewSlots.tsx"],"sourcesContent":["import type {\n ListComponentClientProps,\n ListComponentServerProps,\n ListViewSlots,\n} from '@payloadcms/ui'\nimport type { Payload, SanitizedCollectionConfig, StaticDescription } from 'payload'\n\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'\n\ntype Args = {\n clientProps: ListComponentClientProps\n collectionConfig: SanitizedCollectionConfig\n description?: StaticDescription\n payload: Payload\n serverProps: ListComponentServerProps\n}\n\nexport const renderListViewSlots = ({\n clientProps,\n collectionConfig,\n description,\n payload,\n serverProps,\n}: Args): ListViewSlots => {\n const result: ListViewSlots = {} as ListViewSlots\n\n if (collectionConfig.admin.components?.afterList) {\n result.AfterList = RenderServerComponent({\n clientProps,\n Component: collectionConfig.admin.components.afterList,\n importMap: payload.importMap,\n serverProps,\n })\n }\n\n if (collectionConfig.admin.components?.afterListTable) {\n result.AfterListTable = RenderServerComponent({\n clientProps,\n Component: collectionConfig.admin.components.afterListTable,\n importMap: payload.importMap,\n serverProps,\n })\n }\n\n if (collectionConfig.admin.components?.beforeList) {\n result.BeforeList = RenderServerComponent({\n clientProps,\n Component: collectionConfig.admin.components.beforeList,\n importMap: payload.importMap,\n serverProps,\n })\n }\n\n if (collectionConfig.admin.components?.beforeListTable) {\n result.BeforeListTable = RenderServerComponent({\n clientProps,\n Component: collectionConfig.admin.components.beforeListTable,\n importMap: payload.importMap,\n serverProps,\n })\n }\n\n if (collectionConfig.admin.components?.Description) {\n result.Description = RenderServerComponent({\n clientProps: {\n description,\n ...clientProps,\n },\n Component: collectionConfig.admin.components.Description,\n importMap: payload.importMap,\n serverProps,\n })\n }\n\n return result\n}\n"],"mappings":"AAOA,SAASA,qBAAqB,QAAQ;AAUtC,OAAO,MAAMC,mBAAA,GAAsBA,CAAC;EAClCC,WAAW;EACXC,gBAAgB;EAChBC,WAAW;EACXC,OAAO;EACPC;AAAW,CACN;EACL,MAAMC,MAAA,GAAwB,CAAC;EAE/B,IAAIJ,gBAAA,CAAiBK,KAAK,CAACC,UAAU,EAAEC,SAAA,EAAW;IAChDH,MAAA,CAAOI,SAAS,GAAGX,qBAAA,CAAsB;MACvCE,WAAA;MACAU,SAAA,EAAWT,gBAAA,CAAiBK,KAAK,CAACC,UAAU,CAACC,SAAS;MACtDG,SAAA,EAAWR,OAAA,CAAQQ,SAAS;MAC5BP;IACF;EACF;EAEA,IAAIH,gBAAA,CAAiBK,KAAK,CAACC,UAAU,EAAEK,cAAA,EAAgB;IACrDP,MAAA,CAAOQ,cAAc,GAAGf,qBAAA,CAAsB;MAC5CE,WAAA;MACAU,SAAA,EAAWT,gBAAA,CAAiBK,KAAK,CAACC,UAAU,CAACK,cAAc;MAC3DD,SAAA,EAAWR,OAAA,CAAQQ,SAAS;MAC5BP;IACF;EACF;EAEA,IAAIH,gBAAA,CAAiBK,KAAK,CAACC,UAAU,EAAEO,UAAA,EAAY;IACjDT,MAAA,CAAOU,UAAU,GAAGjB,qBAAA,CAAsB;MACxCE,WAAA;MACAU,SAAA,EAAWT,gBAAA,CAAiBK,KAAK,CAACC,UAAU,CAACO,UAAU;MACvDH,SAAA,EAAWR,OAAA,CAAQQ,SAAS;MAC5BP;IACF;EACF;EAEA,IAAIH,gBAAA,CAAiBK,KAAK,CAACC,UAAU,EAAES,eAAA,EAAiB;IACtDX,MAAA,CAAOY,eAAe,GAAGnB,qBAAA,CAAsB;MAC7CE,WAAA;MACAU,SAAA,EAAWT,gBAAA,CAAiBK,KAAK,CAACC,UAAU,CAACS,eAAe;MAC5DL,SAAA,EAAWR,OAAA,CAAQQ,SAAS;MAC5BP;IACF;EACF;EAEA,IAAIH,gBAAA,CAAiBK,KAAK,CAACC,UAAU,EAAEW,WAAA,EAAa;IAClDb,MAAA,CAAOa,WAAW,GAAGpB,qBAAA,CAAsB;MACzCE,WAAA,EAAa;QACXE,WAAA;QACA,GAAGF;MACL;MACAU,SAAA,EAAWT,gBAAA,CAAiBK,KAAK,CAACC,UAAU,CAACW,WAAW;MACxDP,SAAA,EAAWR,OAAA,CAAQQ,SAAS;MAC5BP;IACF;EACF;EAEA,OAAOC,MAAA;AACT","ignoreList":[]}
@@ -1,9 +1,9 @@
1
- import type { Data, LivePreviewConfig } from 'payload';
1
+ import type { Data, DocumentSlots, LivePreviewConfig } from 'payload';
2
2
  import React from 'react';
3
3
  import './index.scss';
4
4
  export declare const LivePreviewClient: React.FC<{
5
5
  readonly breakpoints: LivePreviewConfig['breakpoints'];
6
6
  readonly initialData: Data;
7
7
  readonly url: string;
8
- }>;
8
+ } & DocumentSlots>;
9
9
  //# sourceMappingURL=index.client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/views/LivePreview/index.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAMV,IAAI,EAEJ,iBAAiB,EAClB,MAAM,SAAS,CAAA;AA+BhB,OAAO,KAA6D,MAAM,OAAO,CAAA;AAGjF,OAAO,cAAc,CAAA;AAuerB,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAA;IACtD,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAA;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB,CA8CA,CAAA"}
1
+ {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/views/LivePreview/index.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAMV,IAAI,EACJ,aAAa,EAEb,iBAAiB,EAClB,MAAM,SAAS,CAAA;AA+BhB,OAAO,KAA6D,MAAM,OAAO,CAAA;AAGjF,OAAO,cAAc,CAAA;AAmfrB,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CACtC;IACE,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAA;IACtD,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAA;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB,GAAG,aAAa,CAqDlB,CAAA"}
@@ -14,8 +14,13 @@ const baseClass = 'live-preview';
14
14
  const PreviewView = ({
15
15
  collectionConfig,
16
16
  config,
17
+ Description,
17
18
  fields,
18
19
  globalConfig,
20
+ PreviewButton,
21
+ PublishButton,
22
+ SaveButton,
23
+ SaveDraftButton,
19
24
  schemaPath
20
25
  }) => {
21
26
  const {
@@ -299,6 +304,12 @@ const PreviewView = ({
299
304
  globalConfig: globalConfig
300
305
  }), /*#__PURE__*/_jsx(DocumentControls, {
301
306
  apiURL: apiURL,
307
+ customComponents: {
308
+ PreviewButton,
309
+ PublishButton,
310
+ SaveButton,
311
+ SaveDraftButton
312
+ },
302
313
  data: initialData,
303
314
  disableActions: disableActions,
304
315
  hasPublishPermission: hasPublishPermission,
@@ -317,6 +328,7 @@ const PreviewView = ({
317
328
  children: [/*#__PURE__*/_jsx(DocumentFields, {
318
329
  AfterFields: AfterFields,
319
330
  BeforeFields: BeforeFields,
331
+ Description: Description,
320
332
  docPermissions: docPermissions,
321
333
  fields: fields,
322
334
  forceSidebarWrap: true,
@@ -332,7 +344,7 @@ const PreviewView = ({
332
344
  });
333
345
  };
334
346
  export const LivePreviewClient = props => {
335
- const $ = _c(14);
347
+ const $ = _c(20);
336
348
  const {
337
349
  breakpoints,
338
350
  url
@@ -370,7 +382,7 @@ export const LivePreviewClient = props => {
370
382
  popupRef
371
383
  } = usePopupWindow(t2);
372
384
  let t3;
373
- if ($[2] !== apiRoute || $[3] !== breakpoints || $[4] !== collectionSlug || $[5] !== config || $[6] !== getEntityConfig || $[7] !== globalSlug || $[8] !== isPopupOpen || $[9] !== openPopupWindow || $[10] !== popupRef || $[11] !== serverURL || $[12] !== url) {
385
+ if ($[2] !== apiRoute || $[3] !== breakpoints || $[4] !== collectionSlug || $[5] !== config || $[6] !== getEntityConfig || $[7] !== globalSlug || $[8] !== isPopupOpen || $[9] !== openPopupWindow || $[10] !== popupRef || $[11] !== props.Description || $[12] !== props.PreviewButton || $[13] !== props.PublishButton || $[14] !== props.SaveButton || $[15] !== props.SaveDraftButton || $[16] !== props.Upload || $[17] !== serverURL || $[18] !== url) {
374
386
  const collectionConfig = getEntityConfig({
375
387
  collectionSlug
376
388
  });
@@ -390,10 +402,16 @@ export const LivePreviewClient = props => {
390
402
  apiRoute,
391
403
  collectionConfig,
392
404
  config,
405
+ Description: props.Description,
393
406
  fields: (collectionConfig || globalConfig)?.fields,
394
407
  globalConfig,
408
+ PreviewButton: props.PreviewButton,
409
+ PublishButton: props.PublishButton,
410
+ SaveButton: props.SaveButton,
411
+ SaveDraftButton: props.SaveDraftButton,
395
412
  schemaPath,
396
- serverURL
413
+ serverURL,
414
+ Upload: props.Upload
397
415
  })
398
416
  })
399
417
  });
@@ -406,11 +424,17 @@ export const LivePreviewClient = props => {
406
424
  $[8] = isPopupOpen;
407
425
  $[9] = openPopupWindow;
408
426
  $[10] = popupRef;
409
- $[11] = serverURL;
410
- $[12] = url;
411
- $[13] = t3;
427
+ $[11] = props.Description;
428
+ $[12] = props.PreviewButton;
429
+ $[13] = props.PublishButton;
430
+ $[14] = props.SaveButton;
431
+ $[15] = props.SaveDraftButton;
432
+ $[16] = props.Upload;
433
+ $[17] = serverURL;
434
+ $[18] = url;
435
+ $[19] = t3;
412
436
  } else {
413
- t3 = $[13];
437
+ t3 = $[19];
414
438
  }
415
439
  return t3;
416
440
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.js","names":["c","_c","DocumentControls","DocumentFields","DocumentLocked","DocumentTakeOver","Form","LeaveWithoutSaving","OperationProvider","SetDocumentStepNav","SetDocumentTitle","useAuth","useConfig","useDocumentDrawerContext","useDocumentEvents","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","useUploadEdits","abortAndIgnore","formatAdminURL","handleAbortRef","handleBackToDashboard","handleGoBack","handleTakeOver","useRouter","useSearchParams","React","Fragment","useCallback","useEffect","useRef","useState","useLivePreviewContext","LivePreviewProvider","LivePreview","usePopupWindow","baseClass","PreviewView","collectionConfig","config","fields","globalConfig","schemaPath","id","action","AfterDocument","AfterFields","apiURL","BeforeFields","collectionSlug","currentEditor","disableActions","disableLeaveWithoutSaving","docPermissions","documentIsLocked","getDocPermissions","getDocPreferences","globalSlug","hasPublishPermission","hasSavePermission","incrementVersionCount","initialData","initialState","isEditing","isInitializing","lastUpdateTime","setCurrentEditor","setDocumentIsLocked","unlockDocument","updateDocumentEditor","updateSavedDocumentData","onSave","onSaveFromContext","operation","admin","user","userSlug","routes","adminRoute","router","params","locale","get","t","previewWindowType","refreshCookieAsync","reportUpdate","resetUploadEdits","getFormState","docConfig","entitySlug","slug","depth","lockDocumentsProp","lockDocuments","undefined","isLockingEnabled","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","autosaveEnabled","Boolean","versions","drafts","autosave","preventLeaveWithoutSaving","isReadOnlyForIncomingUser","setIsReadOnlyForIncomingUser","showTakeOverModal","setShowTakeOverModal","abortOnChangeRef","abortOnSaveRef","editSessionStartTime","setEditSessionStartTime","Date","now","lockExpiryTime","isLockExpired","documentLockStateRef","hasShownLockedModal","isLocked","json","controller","updatedAt","result","toISOString","doc","redirectRoute","path","push","docPreferences","state","data","renderAllFields","returnLockStatus","signal","current","onChange","formState","prevFormState","currentTime","timeSinceLastUpdate","updateLastEdited","lockedState","previousOwnerID","lockedUserID","currentPath","window","location","pathname","documentID","stayWithinDocumentPaths","isStayingWithinDocument","some","includes","abortOnChange","abortOnSave","shouldShowDocumentLockedModal","_jsx","_jsxs","className","disabled","method","onSuccess","isActive","onReadOnly","onTakeOver","globalLabel","label","pluralLabel","labels","plural","useAsTitle","view","fallback","toString","permissions","readOnlyForIncomingUser","filter","join","forceSidebarWrap","readOnly","schemaPathSegments","LivePreviewClient","props","$","breakpoints","url","t0","getEntityConfig","t1","serverURL","api","apiRoute","t2","eventType","isPopupOpen","openPopupWindow","popupRef","t3","children","fieldSchema"],"sources":["../../../src/views/LivePreview/index.client.tsx"],"sourcesContent":["'use client'\nimport type { FormProps } from '@payloadcms/ui'\nimport type {\n ClientCollectionConfig,\n ClientConfig,\n ClientField,\n ClientGlobalConfig,\n ClientUser,\n Data,\n FormState,\n LivePreviewConfig,\n} from 'payload'\n\nimport {\n DocumentControls,\n DocumentFields,\n DocumentLocked,\n DocumentTakeOver,\n Form,\n LeaveWithoutSaving,\n OperationProvider,\n SetDocumentStepNav,\n SetDocumentTitle,\n useAuth,\n useConfig,\n useDocumentDrawerContext,\n useDocumentEvents,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n useUploadEdits,\n} from '@payloadcms/ui'\nimport {\n abortAndIgnore,\n formatAdminURL,\n handleAbortRef,\n handleBackToDashboard,\n handleGoBack,\n handleTakeOver,\n} from '@payloadcms/ui/shared'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { useLivePreviewContext } from './Context/context.js'\nimport './index.scss'\nimport { LivePreviewProvider } from './Context/index.js'\nimport { LivePreview } from './Preview/index.js'\nimport { usePopupWindow } from './usePopupWindow.js'\n\nconst baseClass = 'live-preview'\n\ntype Props = {\n readonly apiRoute: string\n readonly collectionConfig?: ClientCollectionConfig\n readonly config: ClientConfig\n readonly fields: ClientField[]\n readonly globalConfig?: ClientGlobalConfig\n readonly schemaPath: string\n readonly serverURL: string\n}\n\nconst PreviewView: React.FC<Props> = ({\n collectionConfig,\n config,\n fields,\n globalConfig,\n schemaPath,\n}) => {\n const {\n id,\n action,\n AfterDocument,\n AfterFields,\n apiURL,\n BeforeFields,\n collectionSlug,\n currentEditor,\n disableActions,\n disableLeaveWithoutSaving,\n docPermissions,\n documentIsLocked,\n getDocPermissions,\n getDocPreferences,\n globalSlug,\n hasPublishPermission,\n hasSavePermission,\n incrementVersionCount,\n initialData,\n initialState,\n isEditing,\n isInitializing,\n lastUpdateTime,\n setCurrentEditor,\n setDocumentIsLocked,\n unlockDocument,\n updateDocumentEditor,\n updateSavedDocumentData,\n } = useDocumentInfo()\n\n const { onSave: onSaveFromContext } = useDocumentDrawerContext()\n\n const operation = id ? 'update' : 'create'\n\n const {\n config: {\n admin: { user: userSlug },\n routes: { admin: adminRoute },\n },\n } = useConfig()\n const router = useRouter()\n const params = useSearchParams()\n const locale = params.get('locale')\n const { t } = useTranslation()\n const { previewWindowType } = useLivePreviewContext()\n const { refreshCookieAsync, user } = useAuth()\n const { reportUpdate } = useDocumentEvents()\n const { resetUploadEdits } = useUploadEdits()\n const { getFormState } = useServerFunctions()\n\n const docConfig = collectionConfig || globalConfig\n\n const entitySlug = collectionConfig?.slug || globalConfig?.slug\n\n const depth = useEditDepth()\n\n const lockDocumentsProp = docConfig?.lockDocuments !== undefined ? docConfig?.lockDocuments : true\n const isLockingEnabled = lockDocumentsProp !== false\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const autosaveEnabled = Boolean(\n (collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave) ||\n (globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave),\n )\n\n const preventLeaveWithoutSaving =\n typeof disableLeaveWithoutSaving !== 'undefined' ? !disableLeaveWithoutSaving : !autosaveEnabled\n\n const [isReadOnlyForIncomingUser, setIsReadOnlyForIncomingUser] = useState(false)\n const [showTakeOverModal, setShowTakeOverModal] = useState(false)\n\n const abortOnChangeRef = useRef<AbortController>(null)\n const abortOnSaveRef = useRef<AbortController>(null)\n\n const [editSessionStartTime, setEditSessionStartTime] = useState(Date.now())\n\n const lockExpiryTime = lastUpdateTime + lockDurationInMilliseconds\n\n const isLockExpired = Date.now() > lockExpiryTime\n\n const documentLockStateRef = useRef<{\n hasShownLockedModal: boolean\n isLocked: boolean\n user: ClientUser | number | string\n } | null>({\n hasShownLockedModal: false,\n isLocked: false,\n user: null,\n })\n\n const onSave = useCallback(\n async (json): Promise<FormState> => {\n const controller = handleAbortRef(abortOnSaveRef)\n\n reportUpdate({\n id,\n entitySlug,\n updatedAt: json?.result?.updatedAt || new Date().toISOString(),\n })\n\n // If we're editing the doc of the logged-in user,\n // Refresh the cookie to get new permissions\n if (user && collectionSlug === userSlug && id === user.id) {\n void refreshCookieAsync()\n }\n\n incrementVersionCount()\n\n if (typeof updateSavedDocumentData === 'function') {\n void updateSavedDocumentData(json?.doc || {})\n }\n\n if (typeof onSaveFromContext === 'function') {\n void onSaveFromContext({\n ...json,\n operation: id ? 'update' : 'create',\n })\n }\n\n if (!isEditing && depth < 2) {\n // Redirect to the same locale if it's been set\n const redirectRoute = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${json?.doc?.id}${locale ? `?locale=${locale}` : ''}`,\n })\n router.push(redirectRoute)\n } else {\n resetUploadEdits()\n }\n\n await getDocPermissions(json)\n\n if ((id || globalSlug) && !autosaveEnabled) {\n const docPreferences = await getDocPreferences()\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: json?.doc || json?.result,\n docPermissions,\n docPreferences,\n globalSlug,\n operation,\n renderAllFields: true,\n returnLockStatus: false,\n schemaPath: entitySlug,\n signal: controller.signal,\n })\n\n // Unlock the document after save\n if (isLockingEnabled) {\n setDocumentIsLocked(false)\n }\n\n abortOnSaveRef.current = null\n\n return state\n }\n },\n [\n adminRoute,\n collectionSlug,\n depth,\n docPermissions,\n entitySlug,\n getDocPermissions,\n getDocPreferences,\n getFormState,\n globalSlug,\n id,\n incrementVersionCount,\n isEditing,\n isLockingEnabled,\n locale,\n onSaveFromContext,\n operation,\n refreshCookieAsync,\n reportUpdate,\n resetUploadEdits,\n router,\n setDocumentIsLocked,\n updateSavedDocumentData,\n user,\n userSlug,\n autosaveEnabled,\n ],\n )\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n const controller = handleAbortRef(abortOnChangeRef)\n\n const currentTime = Date.now()\n const timeSinceLastUpdate = currentTime - editSessionStartTime\n\n const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds\n\n if (updateLastEdited) {\n setEditSessionStartTime(currentTime)\n }\n\n const docPreferences = await getDocPreferences()\n\n const { lockedState, state } = await getFormState({\n id,\n collectionSlug,\n docPermissions,\n docPreferences,\n formState: prevFormState,\n globalSlug,\n operation,\n returnLockStatus: isLockingEnabled ? true : false,\n schemaPath,\n signal: controller.signal,\n updateLastEdited,\n })\n\n setDocumentIsLocked(true)\n\n if (isLockingEnabled) {\n const previousOwnerID =\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id\n : documentLockStateRef.current?.user\n\n if (lockedState) {\n const lockedUserID =\n typeof lockedState.user === 'string' || typeof lockedState.user === 'number'\n ? lockedState.user\n : lockedState.user.id\n\n if (!documentLockStateRef.current || lockedUserID !== previousOwnerID) {\n if (previousOwnerID === user.id && lockedUserID !== user.id) {\n setShowTakeOverModal(true)\n documentLockStateRef.current.hasShownLockedModal = true\n }\n\n documentLockStateRef.current = documentLockStateRef.current = {\n hasShownLockedModal: documentLockStateRef.current?.hasShownLockedModal || false,\n isLocked: true,\n user: lockedState.user as ClientUser,\n }\n\n setCurrentEditor(lockedState.user as ClientUser)\n }\n }\n }\n\n abortOnChangeRef.current = null\n\n return state\n },\n [\n editSessionStartTime,\n isLockingEnabled,\n getDocPreferences,\n getFormState,\n id,\n collectionSlug,\n docPermissions,\n globalSlug,\n operation,\n schemaPath,\n setDocumentIsLocked,\n user?.id,\n setCurrentEditor,\n ],\n )\n\n // Clean up when the component unmounts or when the document is unlocked\n useEffect(() => {\n return () => {\n if (!isLockingEnabled) {\n return\n }\n\n const currentPath = window.location.pathname\n\n const documentID = id || globalSlug\n\n // Routes where we do NOT want to unlock the document\n const stayWithinDocumentPaths = ['preview', 'api', 'versions']\n\n const isStayingWithinDocument = stayWithinDocumentPaths.some((path) =>\n currentPath.includes(path),\n )\n\n // Unlock the document only if we're actually navigating away from the document\n if (documentID && documentIsLocked && !isStayingWithinDocument) {\n // Check if this user is still the current editor\n if (\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id === user?.id\n : documentLockStateRef.current?.user === user?.id\n ) {\n void unlockDocument(id, collectionSlug ?? globalSlug)\n setDocumentIsLocked(false)\n setCurrentEditor(null)\n }\n }\n\n setShowTakeOverModal(false)\n }\n }, [\n collectionSlug,\n globalSlug,\n id,\n unlockDocument,\n user,\n setCurrentEditor,\n isLockingEnabled,\n documentIsLocked,\n setDocumentIsLocked,\n ])\n\n useEffect(() => {\n const abortOnChange = abortOnChangeRef.current\n const abortOnSave = abortOnSaveRef.current\n\n return () => {\n abortAndIgnore(abortOnChange)\n abortAndIgnore(abortOnSave)\n }\n })\n\n const shouldShowDocumentLockedModal =\n documentIsLocked &&\n currentEditor &&\n (typeof currentEditor === 'object'\n ? currentEditor.id !== user?.id\n : currentEditor !== user?.id) &&\n !isReadOnlyForIncomingUser &&\n !showTakeOverModal &&\n // eslint-disable-next-line react-compiler/react-compiler\n !documentLockStateRef.current?.hasShownLockedModal &&\n !isLockExpired\n\n return (\n <OperationProvider operation={operation}>\n <Form\n action={action}\n className={`${baseClass}__form`}\n disabled={isReadOnlyForIncomingUser || !hasSavePermission}\n initialState={initialState}\n isInitializing={isInitializing}\n method={id ? 'PATCH' : 'POST'}\n onChange={[onChange]}\n onSuccess={onSave}\n >\n {isLockingEnabled && shouldShowDocumentLockedModal && !isReadOnlyForIncomingUser && (\n <DocumentLocked\n handleGoBack={() => handleGoBack({ adminRoute, collectionSlug, router })}\n isActive={shouldShowDocumentLockedModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n false,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n )\n }\n updatedAt={lastUpdateTime}\n user={currentEditor}\n />\n )}\n {isLockingEnabled && showTakeOverModal && (\n <DocumentTakeOver\n handleBackToDashboard={() => handleBackToDashboard({ adminRoute, router })}\n isActive={showTakeOverModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n />\n )}\n {!isReadOnlyForIncomingUser && preventLeaveWithoutSaving && <LeaveWithoutSaving />}\n <SetDocumentStepNav\n collectionSlug={collectionSlug}\n globalLabel={globalConfig?.label}\n globalSlug={globalSlug}\n id={id}\n pluralLabel={collectionConfig ? collectionConfig?.labels?.plural : undefined}\n useAsTitle={collectionConfig ? collectionConfig?.admin?.useAsTitle : undefined}\n view={t('general:livePreview')}\n />\n <SetDocumentTitle\n collectionConfig={collectionConfig}\n config={config}\n fallback={id?.toString() || ''}\n globalConfig={globalConfig}\n />\n <DocumentControls\n apiURL={apiURL}\n data={initialData}\n disableActions={disableActions}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n id={id}\n isEditing={isEditing}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n true,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n setIsReadOnlyForIncomingUser,\n )\n }\n permissions={docPermissions}\n readOnlyForIncomingUser={isReadOnlyForIncomingUser}\n slug={collectionConfig?.slug || globalConfig?.slug}\n user={currentEditor}\n />\n <div\n className={[baseClass, previewWindowType === 'popup' && `${baseClass}--detached`]\n .filter(Boolean)\n .join(' ')}\n >\n <div\n className={[\n `${baseClass}__main`,\n previewWindowType === 'popup' && `${baseClass}__main--popup-open`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <DocumentFields\n AfterFields={AfterFields}\n BeforeFields={BeforeFields}\n docPermissions={docPermissions}\n fields={fields}\n forceSidebarWrap\n readOnly={isReadOnlyForIncomingUser || !hasSavePermission}\n schemaPathSegments={[collectionSlug || globalSlug]}\n />\n {AfterDocument}\n </div>\n <LivePreview collectionSlug={collectionSlug} globalSlug={globalSlug} />\n </div>\n </Form>\n </OperationProvider>\n )\n}\n\nexport const LivePreviewClient: React.FC<{\n readonly breakpoints: LivePreviewConfig['breakpoints']\n readonly initialData: Data\n readonly url: string\n}> = (props) => {\n const { breakpoints, url } = props\n const { collectionSlug, globalSlug } = useDocumentInfo()\n\n const {\n config,\n config: {\n routes: { api: apiRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const { isPopupOpen, openPopupWindow, popupRef } = usePopupWindow({\n eventType: 'payload-live-preview',\n url,\n })\n\n const collectionConfig = getEntityConfig({ collectionSlug }) as ClientCollectionConfig\n\n const globalConfig = getEntityConfig({ globalSlug }) as ClientGlobalConfig\n\n const schemaPath = collectionSlug || globalSlug\n\n return (\n <Fragment>\n <LivePreviewProvider\n breakpoints={breakpoints}\n fieldSchema={collectionConfig?.fields || globalConfig?.fields}\n isPopupOpen={isPopupOpen}\n openPopupWindow={openPopupWindow}\n popupRef={popupRef}\n url={url}\n >\n <PreviewView\n apiRoute={apiRoute}\n collectionConfig={collectionConfig}\n config={config}\n fields={(collectionConfig || globalConfig)?.fields}\n globalConfig={globalConfig}\n schemaPath={schemaPath}\n serverURL={serverURL}\n />\n </LivePreviewProvider>\n </Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.client.js","names":["c","_c","DocumentControls","DocumentFields","DocumentLocked","DocumentTakeOver","Form","LeaveWithoutSaving","OperationProvider","SetDocumentStepNav","SetDocumentTitle","useAuth","useConfig","useDocumentDrawerContext","useDocumentEvents","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","useUploadEdits","abortAndIgnore","formatAdminURL","handleAbortRef","handleBackToDashboard","handleGoBack","handleTakeOver","useRouter","useSearchParams","React","Fragment","useCallback","useEffect","useRef","useState","useLivePreviewContext","LivePreviewProvider","LivePreview","usePopupWindow","baseClass","PreviewView","collectionConfig","config","Description","fields","globalConfig","PreviewButton","PublishButton","SaveButton","SaveDraftButton","schemaPath","id","action","AfterDocument","AfterFields","apiURL","BeforeFields","collectionSlug","currentEditor","disableActions","disableLeaveWithoutSaving","docPermissions","documentIsLocked","getDocPermissions","getDocPreferences","globalSlug","hasPublishPermission","hasSavePermission","incrementVersionCount","initialData","initialState","isEditing","isInitializing","lastUpdateTime","setCurrentEditor","setDocumentIsLocked","unlockDocument","updateDocumentEditor","updateSavedDocumentData","onSave","onSaveFromContext","operation","admin","user","userSlug","routes","adminRoute","router","params","locale","get","t","previewWindowType","refreshCookieAsync","reportUpdate","resetUploadEdits","getFormState","docConfig","entitySlug","slug","depth","lockDocumentsProp","lockDocuments","undefined","isLockingEnabled","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","autosaveEnabled","Boolean","versions","drafts","autosave","preventLeaveWithoutSaving","isReadOnlyForIncomingUser","setIsReadOnlyForIncomingUser","showTakeOverModal","setShowTakeOverModal","abortOnChangeRef","abortOnSaveRef","editSessionStartTime","setEditSessionStartTime","Date","now","lockExpiryTime","isLockExpired","documentLockStateRef","hasShownLockedModal","isLocked","json","controller","updatedAt","result","toISOString","doc","redirectRoute","path","push","docPreferences","state","data","renderAllFields","returnLockStatus","signal","current","onChange","formState","prevFormState","currentTime","timeSinceLastUpdate","updateLastEdited","lockedState","previousOwnerID","lockedUserID","currentPath","window","location","pathname","documentID","stayWithinDocumentPaths","isStayingWithinDocument","some","includes","abortOnChange","abortOnSave","shouldShowDocumentLockedModal","_jsx","_jsxs","className","disabled","method","onSuccess","isActive","onReadOnly","onTakeOver","globalLabel","label","pluralLabel","labels","plural","useAsTitle","view","fallback","toString","customComponents","permissions","readOnlyForIncomingUser","filter","join","forceSidebarWrap","readOnly","schemaPathSegments","LivePreviewClient","props","$","breakpoints","url","t0","getEntityConfig","t1","serverURL","api","apiRoute","t2","eventType","isPopupOpen","openPopupWindow","popupRef","t3","Upload","children","fieldSchema"],"sources":["../../../src/views/LivePreview/index.client.tsx"],"sourcesContent":["'use client'\nimport type { FormProps } from '@payloadcms/ui'\nimport type {\n ClientCollectionConfig,\n ClientConfig,\n ClientField,\n ClientGlobalConfig,\n ClientUser,\n Data,\n DocumentSlots,\n FormState,\n LivePreviewConfig,\n} from 'payload'\n\nimport {\n DocumentControls,\n DocumentFields,\n DocumentLocked,\n DocumentTakeOver,\n Form,\n LeaveWithoutSaving,\n OperationProvider,\n SetDocumentStepNav,\n SetDocumentTitle,\n useAuth,\n useConfig,\n useDocumentDrawerContext,\n useDocumentEvents,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n useUploadEdits,\n} from '@payloadcms/ui'\nimport {\n abortAndIgnore,\n formatAdminURL,\n handleAbortRef,\n handleBackToDashboard,\n handleGoBack,\n handleTakeOver,\n} from '@payloadcms/ui/shared'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { useLivePreviewContext } from './Context/context.js'\nimport './index.scss'\nimport { LivePreviewProvider } from './Context/index.js'\nimport { LivePreview } from './Preview/index.js'\nimport { usePopupWindow } from './usePopupWindow.js'\n\nconst baseClass = 'live-preview'\n\ntype Props = {\n readonly apiRoute: string\n readonly collectionConfig?: ClientCollectionConfig\n readonly config: ClientConfig\n readonly fields: ClientField[]\n readonly globalConfig?: ClientGlobalConfig\n readonly schemaPath: string\n readonly serverURL: string\n} & DocumentSlots\n\nconst PreviewView: React.FC<Props> = ({\n collectionConfig,\n config,\n Description,\n fields,\n globalConfig,\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n schemaPath,\n}) => {\n const {\n id,\n action,\n AfterDocument,\n AfterFields,\n apiURL,\n BeforeFields,\n collectionSlug,\n currentEditor,\n disableActions,\n disableLeaveWithoutSaving,\n docPermissions,\n documentIsLocked,\n getDocPermissions,\n getDocPreferences,\n globalSlug,\n hasPublishPermission,\n hasSavePermission,\n incrementVersionCount,\n initialData,\n initialState,\n isEditing,\n isInitializing,\n lastUpdateTime,\n setCurrentEditor,\n setDocumentIsLocked,\n unlockDocument,\n updateDocumentEditor,\n updateSavedDocumentData,\n } = useDocumentInfo()\n\n const { onSave: onSaveFromContext } = useDocumentDrawerContext()\n\n const operation = id ? 'update' : 'create'\n\n const {\n config: {\n admin: { user: userSlug },\n routes: { admin: adminRoute },\n },\n } = useConfig()\n const router = useRouter()\n const params = useSearchParams()\n const locale = params.get('locale')\n const { t } = useTranslation()\n const { previewWindowType } = useLivePreviewContext()\n const { refreshCookieAsync, user } = useAuth()\n const { reportUpdate } = useDocumentEvents()\n const { resetUploadEdits } = useUploadEdits()\n const { getFormState } = useServerFunctions()\n\n const docConfig = collectionConfig || globalConfig\n\n const entitySlug = collectionConfig?.slug || globalConfig?.slug\n\n const depth = useEditDepth()\n\n const lockDocumentsProp = docConfig?.lockDocuments !== undefined ? docConfig?.lockDocuments : true\n const isLockingEnabled = lockDocumentsProp !== false\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const autosaveEnabled = Boolean(\n (collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave) ||\n (globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave),\n )\n\n const preventLeaveWithoutSaving =\n typeof disableLeaveWithoutSaving !== 'undefined' ? !disableLeaveWithoutSaving : !autosaveEnabled\n\n const [isReadOnlyForIncomingUser, setIsReadOnlyForIncomingUser] = useState(false)\n const [showTakeOverModal, setShowTakeOverModal] = useState(false)\n\n const abortOnChangeRef = useRef<AbortController>(null)\n const abortOnSaveRef = useRef<AbortController>(null)\n\n const [editSessionStartTime, setEditSessionStartTime] = useState(Date.now())\n\n const lockExpiryTime = lastUpdateTime + lockDurationInMilliseconds\n\n const isLockExpired = Date.now() > lockExpiryTime\n\n const documentLockStateRef = useRef<{\n hasShownLockedModal: boolean\n isLocked: boolean\n user: ClientUser | number | string\n } | null>({\n hasShownLockedModal: false,\n isLocked: false,\n user: null,\n })\n\n const onSave = useCallback(\n async (json): Promise<FormState> => {\n const controller = handleAbortRef(abortOnSaveRef)\n\n reportUpdate({\n id,\n entitySlug,\n updatedAt: json?.result?.updatedAt || new Date().toISOString(),\n })\n\n // If we're editing the doc of the logged-in user,\n // Refresh the cookie to get new permissions\n if (user && collectionSlug === userSlug && id === user.id) {\n void refreshCookieAsync()\n }\n\n incrementVersionCount()\n\n if (typeof updateSavedDocumentData === 'function') {\n void updateSavedDocumentData(json?.doc || {})\n }\n\n if (typeof onSaveFromContext === 'function') {\n void onSaveFromContext({\n ...json,\n operation: id ? 'update' : 'create',\n })\n }\n\n if (!isEditing && depth < 2) {\n // Redirect to the same locale if it's been set\n const redirectRoute = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${json?.doc?.id}${locale ? `?locale=${locale}` : ''}`,\n })\n router.push(redirectRoute)\n } else {\n resetUploadEdits()\n }\n\n await getDocPermissions(json)\n\n if ((id || globalSlug) && !autosaveEnabled) {\n const docPreferences = await getDocPreferences()\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: json?.doc || json?.result,\n docPermissions,\n docPreferences,\n globalSlug,\n operation,\n renderAllFields: true,\n returnLockStatus: false,\n schemaPath: entitySlug,\n signal: controller.signal,\n })\n\n // Unlock the document after save\n if (isLockingEnabled) {\n setDocumentIsLocked(false)\n }\n\n abortOnSaveRef.current = null\n\n return state\n }\n },\n [\n adminRoute,\n collectionSlug,\n depth,\n docPermissions,\n entitySlug,\n getDocPermissions,\n getDocPreferences,\n getFormState,\n globalSlug,\n id,\n incrementVersionCount,\n isEditing,\n isLockingEnabled,\n locale,\n onSaveFromContext,\n operation,\n refreshCookieAsync,\n reportUpdate,\n resetUploadEdits,\n router,\n setDocumentIsLocked,\n updateSavedDocumentData,\n user,\n userSlug,\n autosaveEnabled,\n ],\n )\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n const controller = handleAbortRef(abortOnChangeRef)\n\n const currentTime = Date.now()\n const timeSinceLastUpdate = currentTime - editSessionStartTime\n\n const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds\n\n if (updateLastEdited) {\n setEditSessionStartTime(currentTime)\n }\n\n const docPreferences = await getDocPreferences()\n\n const { lockedState, state } = await getFormState({\n id,\n collectionSlug,\n docPermissions,\n docPreferences,\n formState: prevFormState,\n globalSlug,\n operation,\n returnLockStatus: isLockingEnabled ? true : false,\n schemaPath,\n signal: controller.signal,\n updateLastEdited,\n })\n\n setDocumentIsLocked(true)\n\n if (isLockingEnabled) {\n const previousOwnerID =\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id\n : documentLockStateRef.current?.user\n\n if (lockedState) {\n const lockedUserID =\n typeof lockedState.user === 'string' || typeof lockedState.user === 'number'\n ? lockedState.user\n : lockedState.user.id\n\n if (!documentLockStateRef.current || lockedUserID !== previousOwnerID) {\n if (previousOwnerID === user.id && lockedUserID !== user.id) {\n setShowTakeOverModal(true)\n documentLockStateRef.current.hasShownLockedModal = true\n }\n\n documentLockStateRef.current = documentLockStateRef.current = {\n hasShownLockedModal: documentLockStateRef.current?.hasShownLockedModal || false,\n isLocked: true,\n user: lockedState.user as ClientUser,\n }\n\n setCurrentEditor(lockedState.user as ClientUser)\n }\n }\n }\n\n abortOnChangeRef.current = null\n\n return state\n },\n [\n editSessionStartTime,\n isLockingEnabled,\n getDocPreferences,\n getFormState,\n id,\n collectionSlug,\n docPermissions,\n globalSlug,\n operation,\n schemaPath,\n setDocumentIsLocked,\n user?.id,\n setCurrentEditor,\n ],\n )\n\n // Clean up when the component unmounts or when the document is unlocked\n useEffect(() => {\n return () => {\n if (!isLockingEnabled) {\n return\n }\n\n const currentPath = window.location.pathname\n\n const documentID = id || globalSlug\n\n // Routes where we do NOT want to unlock the document\n const stayWithinDocumentPaths = ['preview', 'api', 'versions']\n\n const isStayingWithinDocument = stayWithinDocumentPaths.some((path) =>\n currentPath.includes(path),\n )\n\n // Unlock the document only if we're actually navigating away from the document\n if (documentID && documentIsLocked && !isStayingWithinDocument) {\n // Check if this user is still the current editor\n if (\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id === user?.id\n : documentLockStateRef.current?.user === user?.id\n ) {\n void unlockDocument(id, collectionSlug ?? globalSlug)\n setDocumentIsLocked(false)\n setCurrentEditor(null)\n }\n }\n\n setShowTakeOverModal(false)\n }\n }, [\n collectionSlug,\n globalSlug,\n id,\n unlockDocument,\n user,\n setCurrentEditor,\n isLockingEnabled,\n documentIsLocked,\n setDocumentIsLocked,\n ])\n\n useEffect(() => {\n const abortOnChange = abortOnChangeRef.current\n const abortOnSave = abortOnSaveRef.current\n\n return () => {\n abortAndIgnore(abortOnChange)\n abortAndIgnore(abortOnSave)\n }\n })\n\n const shouldShowDocumentLockedModal =\n documentIsLocked &&\n currentEditor &&\n (typeof currentEditor === 'object'\n ? currentEditor.id !== user?.id\n : currentEditor !== user?.id) &&\n !isReadOnlyForIncomingUser &&\n !showTakeOverModal &&\n // eslint-disable-next-line react-compiler/react-compiler\n !documentLockStateRef.current?.hasShownLockedModal &&\n !isLockExpired\n\n return (\n <OperationProvider operation={operation}>\n <Form\n action={action}\n className={`${baseClass}__form`}\n disabled={isReadOnlyForIncomingUser || !hasSavePermission}\n initialState={initialState}\n isInitializing={isInitializing}\n method={id ? 'PATCH' : 'POST'}\n onChange={[onChange]}\n onSuccess={onSave}\n >\n {isLockingEnabled && shouldShowDocumentLockedModal && !isReadOnlyForIncomingUser && (\n <DocumentLocked\n handleGoBack={() => handleGoBack({ adminRoute, collectionSlug, router })}\n isActive={shouldShowDocumentLockedModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n false,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n )\n }\n updatedAt={lastUpdateTime}\n user={currentEditor}\n />\n )}\n {isLockingEnabled && showTakeOverModal && (\n <DocumentTakeOver\n handleBackToDashboard={() => handleBackToDashboard({ adminRoute, router })}\n isActive={showTakeOverModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n />\n )}\n {!isReadOnlyForIncomingUser && preventLeaveWithoutSaving && <LeaveWithoutSaving />}\n <SetDocumentStepNav\n collectionSlug={collectionSlug}\n globalLabel={globalConfig?.label}\n globalSlug={globalSlug}\n id={id}\n pluralLabel={collectionConfig ? collectionConfig?.labels?.plural : undefined}\n useAsTitle={collectionConfig ? collectionConfig?.admin?.useAsTitle : undefined}\n view={t('general:livePreview')}\n />\n <SetDocumentTitle\n collectionConfig={collectionConfig}\n config={config}\n fallback={id?.toString() || ''}\n globalConfig={globalConfig}\n />\n <DocumentControls\n apiURL={apiURL}\n customComponents={{\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n }}\n data={initialData}\n disableActions={disableActions}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n id={id}\n isEditing={isEditing}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n true,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n setIsReadOnlyForIncomingUser,\n )\n }\n permissions={docPermissions}\n readOnlyForIncomingUser={isReadOnlyForIncomingUser}\n slug={collectionConfig?.slug || globalConfig?.slug}\n user={currentEditor}\n />\n <div\n className={[baseClass, previewWindowType === 'popup' && `${baseClass}--detached`]\n .filter(Boolean)\n .join(' ')}\n >\n <div\n className={[\n `${baseClass}__main`,\n previewWindowType === 'popup' && `${baseClass}__main--popup-open`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <DocumentFields\n AfterFields={AfterFields}\n BeforeFields={BeforeFields}\n Description={Description}\n docPermissions={docPermissions}\n fields={fields}\n forceSidebarWrap\n readOnly={isReadOnlyForIncomingUser || !hasSavePermission}\n schemaPathSegments={[collectionSlug || globalSlug]}\n />\n {AfterDocument}\n </div>\n <LivePreview collectionSlug={collectionSlug} globalSlug={globalSlug} />\n </div>\n </Form>\n </OperationProvider>\n )\n}\n\nexport const LivePreviewClient: React.FC<\n {\n readonly breakpoints: LivePreviewConfig['breakpoints']\n readonly initialData: Data\n readonly url: string\n } & DocumentSlots\n> = (props) => {\n const { breakpoints, url } = props\n const { collectionSlug, globalSlug } = useDocumentInfo()\n\n const {\n config,\n config: {\n routes: { api: apiRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const { isPopupOpen, openPopupWindow, popupRef } = usePopupWindow({\n eventType: 'payload-live-preview',\n url,\n })\n\n const collectionConfig = getEntityConfig({ collectionSlug }) as ClientCollectionConfig\n\n const globalConfig = getEntityConfig({ globalSlug }) as ClientGlobalConfig\n\n const schemaPath = collectionSlug || globalSlug\n\n return (\n <Fragment>\n <LivePreviewProvider\n breakpoints={breakpoints}\n fieldSchema={collectionConfig?.fields || globalConfig?.fields}\n isPopupOpen={isPopupOpen}\n openPopupWindow={openPopupWindow}\n popupRef={popupRef}\n url={url}\n >\n <PreviewView\n apiRoute={apiRoute}\n collectionConfig={collectionConfig}\n config={config}\n Description={props.Description}\n fields={(collectionConfig || globalConfig)?.fields}\n globalConfig={globalConfig}\n PreviewButton={props.PreviewButton}\n PublishButton={props.PublishButton}\n SaveButton={props.SaveButton}\n SaveDraftButton={props.SaveDraftButton}\n schemaPath={schemaPath}\n serverURL={serverURL}\n Upload={props.Upload}\n />\n </LivePreviewProvider>\n </Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/LivePreview/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAqB,2BAA2B,EAAE,MAAM,SAAS,CAAA;AAIhG,OAAO,cAAc,CAAA;AAGrB,eAAO,MAAM,eAAe,EAAE,2BAA2B,CAAC,iBAAiB,CAgD1E,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/LivePreview/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAqB,2BAA2B,EAAE,MAAM,SAAS,CAAA;AAIhG,OAAO,cAAc,CAAA;AAGrB,eAAO,MAAM,eAAe,EAAE,2BAA2B,CAAC,iBAAiB,CA4D1E,CAAA"}
@@ -45,7 +45,13 @@ export const LivePreviewView = async props => {
45
45
  }) : livePreviewConfig?.url;
46
46
  return /*#__PURE__*/_jsx(LivePreviewClient, {
47
47
  breakpoints: breakpoints,
48
+ Description: props.Description,
48
49
  initialData: doc,
50
+ PreviewButton: props.PreviewButton,
51
+ PublishButton: props.PublishButton,
52
+ SaveButton: props.SaveButton,
53
+ SaveDraftButton: props.SaveDraftButton,
54
+ Upload: props.Upload,
49
55
  url: url
50
56
  });
51
57
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","LivePreviewClient","LivePreviewView","props","doc","initPageResult","collectionConfig","globalConfig","locale","req","livePreviewConfig","payload","config","admin","livePreview","breakpoints","name","height","label","width","url","data","_jsx","initialData"],"sources":["../../../src/views/LivePreview/index.tsx"],"sourcesContent":["import type { EditViewComponent, LivePreviewConfig, PayloadServerReactComponent } from 'payload'\n\nimport React from 'react'\n\nimport './index.scss'\nimport { LivePreviewClient } from './index.client.js'\n\nexport const LivePreviewView: PayloadServerReactComponent<EditViewComponent> = async (props) => {\n const { doc, initPageResult } = props\n\n const { collectionConfig, globalConfig, locale, req } = initPageResult\n\n let livePreviewConfig: LivePreviewConfig = req.payload.config?.admin?.livePreview\n\n if (collectionConfig) {\n livePreviewConfig = {\n ...(livePreviewConfig || {}),\n ...(collectionConfig.admin.livePreview || {}),\n }\n }\n\n if (globalConfig) {\n livePreviewConfig = {\n ...(livePreviewConfig || {}),\n ...(globalConfig.admin.livePreview || {}),\n }\n }\n\n const breakpoints: LivePreviewConfig['breakpoints'] = [\n ...(livePreviewConfig?.breakpoints || []),\n {\n name: 'responsive',\n height: '100%',\n label: 'Responsive',\n width: '100%',\n },\n ]\n\n const url =\n typeof livePreviewConfig?.url === 'function'\n ? await livePreviewConfig.url({\n collectionConfig,\n data: doc,\n globalConfig,\n locale,\n req,\n /**\n * @deprecated\n * Use `req.payload` instead. This will be removed in the next major version.\n */\n payload: initPageResult.req.payload,\n })\n : livePreviewConfig?.url\n\n return <LivePreviewClient breakpoints={breakpoints} initialData={doc} url={url} />\n}\n"],"mappings":";AAEA,OAAOA,KAAA,MAAW;AAGlB,SAASC,iBAAiB,QAAQ;AAElC,OAAO,MAAMC,eAAA,GAAkE,MAAOC,KAAA;EACpF,MAAM;IAAEC,GAAG;IAAEC;EAAc,CAAE,GAAGF,KAAA;EAEhC,MAAM;IAAEG,gBAAgB;IAAEC,YAAY;IAAEC,MAAM;IAAEC;EAAG,CAAE,GAAGJ,cAAA;EAExD,IAAIK,iBAAA,GAAuCD,GAAA,CAAIE,OAAO,CAACC,MAAM,EAAEC,KAAA,EAAOC,WAAA;EAEtE,IAAIR,gBAAA,EAAkB;IACpBI,iBAAA,GAAoB;MAClB,IAAIA,iBAAA,IAAqB,CAAC,CAAC;MAC3B,IAAIJ,gBAAA,CAAiBO,KAAK,CAACC,WAAW,IAAI,CAAC,CAAC;IAC9C;EACF;EAEA,IAAIP,YAAA,EAAc;IAChBG,iBAAA,GAAoB;MAClB,IAAIA,iBAAA,IAAqB,CAAC,CAAC;MAC3B,IAAIH,YAAA,CAAaM,KAAK,CAACC,WAAW,IAAI,CAAC,CAAC;IAC1C;EACF;EAEA,MAAMC,WAAA,GAAgD,C,IAChDL,iBAAA,EAAmBK,WAAA,IAAe,EAAE,GACxC;IACEC,IAAA,EAAM;IACNC,MAAA,EAAQ;IACRC,KAAA,EAAO;IACPC,KAAA,EAAO;EACT,EACD;EAED,MAAMC,GAAA,GACJ,OAAOV,iBAAA,EAAmBU,GAAA,KAAQ,aAC9B,MAAMV,iBAAA,CAAkBU,GAAG,CAAC;IAC1Bd,gBAAA;IACAe,IAAA,EAAMjB,GAAA;IACNG,YAAA;IACAC,MAAA;IACAC,GAAA;IACA;;;;IAIAE,OAAA,EAASN,cAAA,CAAeI,GAAG,CAACE;EAC9B,KACAD,iBAAA,EAAmBU,GAAA;EAEzB,oBAAOE,IAAA,CAACrB,iBAAA;IAAkBc,WAAA,EAAaA,WAAA;IAAaQ,WAAA,EAAanB,GAAA;IAAKgB,GAAA,EAAKA;;AAC7E","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","LivePreviewClient","LivePreviewView","props","doc","initPageResult","collectionConfig","globalConfig","locale","req","livePreviewConfig","payload","config","admin","livePreview","breakpoints","name","height","label","width","url","data","_jsx","Description","initialData","PreviewButton","PublishButton","SaveButton","SaveDraftButton","Upload"],"sources":["../../../src/views/LivePreview/index.tsx"],"sourcesContent":["import type { EditViewComponent, LivePreviewConfig, PayloadServerReactComponent } from 'payload'\n\nimport React from 'react'\n\nimport './index.scss'\nimport { LivePreviewClient } from './index.client.js'\n\nexport const LivePreviewView: PayloadServerReactComponent<EditViewComponent> = async (props) => {\n const { doc, initPageResult } = props\n\n const { collectionConfig, globalConfig, locale, req } = initPageResult\n\n let livePreviewConfig: LivePreviewConfig = req.payload.config?.admin?.livePreview\n\n if (collectionConfig) {\n livePreviewConfig = {\n ...(livePreviewConfig || {}),\n ...(collectionConfig.admin.livePreview || {}),\n }\n }\n\n if (globalConfig) {\n livePreviewConfig = {\n ...(livePreviewConfig || {}),\n ...(globalConfig.admin.livePreview || {}),\n }\n }\n\n const breakpoints: LivePreviewConfig['breakpoints'] = [\n ...(livePreviewConfig?.breakpoints || []),\n {\n name: 'responsive',\n height: '100%',\n label: 'Responsive',\n width: '100%',\n },\n ]\n\n const url =\n typeof livePreviewConfig?.url === 'function'\n ? await livePreviewConfig.url({\n collectionConfig,\n data: doc,\n globalConfig,\n locale,\n req,\n /**\n * @deprecated\n * Use `req.payload` instead. This will be removed in the next major version.\n */\n payload: initPageResult.req.payload,\n })\n : livePreviewConfig?.url\n\n return (\n <LivePreviewClient\n breakpoints={breakpoints}\n Description={props.Description}\n initialData={doc}\n PreviewButton={props.PreviewButton}\n PublishButton={props.PublishButton}\n SaveButton={props.SaveButton}\n SaveDraftButton={props.SaveDraftButton}\n Upload={props.Upload}\n url={url}\n />\n )\n}\n"],"mappings":";AAEA,OAAOA,KAAA,MAAW;AAGlB,SAASC,iBAAiB,QAAQ;AAElC,OAAO,MAAMC,eAAA,GAAkE,MAAOC,KAAA;EACpF,MAAM;IAAEC,GAAG;IAAEC;EAAc,CAAE,GAAGF,KAAA;EAEhC,MAAM;IAAEG,gBAAgB;IAAEC,YAAY;IAAEC,MAAM;IAAEC;EAAG,CAAE,GAAGJ,cAAA;EAExD,IAAIK,iBAAA,GAAuCD,GAAA,CAAIE,OAAO,CAACC,MAAM,EAAEC,KAAA,EAAOC,WAAA;EAEtE,IAAIR,gBAAA,EAAkB;IACpBI,iBAAA,GAAoB;MAClB,IAAIA,iBAAA,IAAqB,CAAC,CAAC;MAC3B,IAAIJ,gBAAA,CAAiBO,KAAK,CAACC,WAAW,IAAI,CAAC,CAAC;IAC9C;EACF;EAEA,IAAIP,YAAA,EAAc;IAChBG,iBAAA,GAAoB;MAClB,IAAIA,iBAAA,IAAqB,CAAC,CAAC;MAC3B,IAAIH,YAAA,CAAaM,KAAK,CAACC,WAAW,IAAI,CAAC,CAAC;IAC1C;EACF;EAEA,MAAMC,WAAA,GAAgD,C,IAChDL,iBAAA,EAAmBK,WAAA,IAAe,EAAE,GACxC;IACEC,IAAA,EAAM;IACNC,MAAA,EAAQ;IACRC,KAAA,EAAO;IACPC,KAAA,EAAO;EACT,EACD;EAED,MAAMC,GAAA,GACJ,OAAOV,iBAAA,EAAmBU,GAAA,KAAQ,aAC9B,MAAMV,iBAAA,CAAkBU,GAAG,CAAC;IAC1Bd,gBAAA;IACAe,IAAA,EAAMjB,GAAA;IACNG,YAAA;IACAC,MAAA;IACAC,GAAA;IACA;;;;IAIAE,OAAA,EAASN,cAAA,CAAeI,GAAG,CAACE;EAC9B,KACAD,iBAAA,EAAmBU,GAAA;EAEzB,oBACEE,IAAA,CAACrB,iBAAA;IACCc,WAAA,EAAaA,WAAA;IACbQ,WAAA,EAAapB,KAAA,CAAMoB,WAAW;IAC9BC,WAAA,EAAapB,GAAA;IACbqB,aAAA,EAAetB,KAAA,CAAMsB,aAAa;IAClCC,aAAA,EAAevB,KAAA,CAAMuB,aAAa;IAClCC,UAAA,EAAYxB,KAAA,CAAMwB,UAAU;IAC5BC,eAAA,EAAiBzB,KAAA,CAAMyB,eAAe;IACtCC,MAAA,EAAQ1B,KAAA,CAAM0B,MAAM;IACpBT,GAAA,EAAKA;;AAGX","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/next",
3
- "version": "3.14.1-canary.f9e1e85",
3
+ "version": "3.15.0",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -79,9 +79,9 @@
79
79
  "sass": "1.77.4",
80
80
  "sonner": "^1.7.0",
81
81
  "uuid": "10.0.0",
82
- "@payloadcms/graphql": "3.14.1-canary.f9e1e85",
83
- "@payloadcms/translations": "3.14.1-canary.f9e1e85",
84
- "@payloadcms/ui": "3.14.1-canary.f9e1e85"
82
+ "@payloadcms/graphql": "3.15.0",
83
+ "@payloadcms/ui": "3.15.0",
84
+ "@payloadcms/translations": "3.15.0"
85
85
  },
86
86
  "devDependencies": {
87
87
  "@babel/cli": "7.25.9",
@@ -99,13 +99,13 @@
99
99
  "esbuild-sass-plugin": "3.3.1",
100
100
  "eslint-plugin-react-compiler": "19.0.0-beta-df7b47d-20241124",
101
101
  "swc-plugin-transform-remove-imports": "2.0.0",
102
- "@payloadcms/eslint-config": "3.9.0",
103
- "payload": "3.14.1-canary.f9e1e85"
102
+ "payload": "3.15.0",
103
+ "@payloadcms/eslint-config": "3.9.0"
104
104
  },
105
105
  "peerDependencies": {
106
106
  "graphql": "^16.8.1",
107
107
  "next": "^15.0.0",
108
- "payload": "3.14.1-canary.f9e1e85"
108
+ "payload": "3.15.0"
109
109
  },
110
110
  "engines": {
111
111
  "node": "^18.20.2 || >=20.9.0"