@payloadcms/next 3.0.0-canary.518fabe → 3.0.0-canary.51be7be

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/dist/cjs/withPayload.cjs +145 -0
  2. package/dist/cjs/withPayload.cjs.map +1 -0
  3. package/dist/elements/DocumentHeader/Tabs/Tab/index.scss +70 -68
  4. package/dist/elements/DocumentHeader/Tabs/index.scss +41 -39
  5. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.d.ts.map +1 -1
  6. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js +28 -24
  7. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js.map +1 -1
  8. package/dist/elements/DocumentHeader/index.scss +44 -42
  9. package/dist/elements/DocumentLocked/index.d.ts +12 -0
  10. package/dist/elements/DocumentLocked/index.d.ts.map +1 -0
  11. package/dist/elements/DocumentLocked/index.js +142 -0
  12. package/dist/elements/DocumentLocked/index.js.map +1 -0
  13. package/dist/elements/DocumentLocked/index.scss +39 -0
  14. package/dist/elements/DocumentTakeOver/index.d.ts +8 -0
  15. package/dist/elements/DocumentTakeOver/index.d.ts.map +1 -0
  16. package/dist/elements/DocumentTakeOver/index.js +98 -0
  17. package/dist/elements/DocumentTakeOver/index.js.map +1 -0
  18. package/dist/elements/DocumentTakeOver/index.scss +39 -0
  19. package/dist/elements/FormHeader/index.d.ts +9 -0
  20. package/dist/elements/FormHeader/index.d.ts.map +1 -0
  21. package/dist/elements/FormHeader/index.js +20 -0
  22. package/dist/elements/FormHeader/index.js.map +1 -0
  23. package/dist/elements/FormHeader/index.scss +8 -0
  24. package/dist/elements/LeaveWithoutSaving/index.scss +28 -26
  25. package/dist/elements/Nav/NavWrapper/index.scss +21 -14
  26. package/dist/elements/Nav/index.scss +127 -121
  27. package/dist/exports/utilities.d.ts +1 -0
  28. package/dist/exports/utilities.d.ts.map +1 -1
  29. package/dist/exports/utilities.js +1 -0
  30. package/dist/exports/utilities.js.map +1 -1
  31. package/dist/layouts/Root/index.d.ts.map +1 -1
  32. package/dist/layouts/Root/index.js +55 -23
  33. package/dist/layouts/Root/index.js.map +1 -1
  34. package/dist/prod/styles.css +1 -1
  35. package/dist/routes/graphql/handler.d.ts.map +1 -1
  36. package/dist/routes/graphql/handler.js +23 -11
  37. package/dist/routes/graphql/handler.js.map +1 -1
  38. package/dist/routes/rest/auth/login.js +2 -2
  39. package/dist/routes/rest/auth/login.js.map +1 -1
  40. package/dist/routes/rest/auth/logout.d.ts.map +1 -1
  41. package/dist/routes/rest/auth/logout.js +3 -2
  42. package/dist/routes/rest/auth/logout.js.map +1 -1
  43. package/dist/routes/rest/auth/refresh.js +2 -2
  44. package/dist/routes/rest/auth/refresh.js.map +1 -1
  45. package/dist/routes/rest/auth/registerFirstUser.js +2 -2
  46. package/dist/routes/rest/auth/registerFirstUser.js.map +1 -1
  47. package/dist/routes/rest/auth/resetPassword.js +2 -2
  48. package/dist/routes/rest/auth/resetPassword.js.map +1 -1
  49. package/dist/routes/rest/collections/delete.d.ts.map +1 -1
  50. package/dist/routes/rest/collections/delete.js +2 -0
  51. package/dist/routes/rest/collections/delete.js.map +1 -1
  52. package/dist/routes/rest/collections/deleteByID.d.ts.map +1 -1
  53. package/dist/routes/rest/collections/deleteByID.js +2 -0
  54. package/dist/routes/rest/collections/deleteByID.js.map +1 -1
  55. package/dist/routes/rest/collections/find.d.ts.map +1 -1
  56. package/dist/routes/rest/collections/find.js +3 -0
  57. package/dist/routes/rest/collections/find.js.map +1 -1
  58. package/dist/routes/rest/collections/findByID.d.ts.map +1 -1
  59. package/dist/routes/rest/collections/findByID.js +2 -0
  60. package/dist/routes/rest/collections/findByID.js.map +1 -1
  61. package/dist/routes/rest/collections/update.d.ts.map +1 -1
  62. package/dist/routes/rest/collections/update.js +4 -0
  63. package/dist/routes/rest/collections/update.js.map +1 -1
  64. package/dist/routes/rest/collections/updateByID.d.ts.map +1 -1
  65. package/dist/routes/rest/collections/updateByID.js +4 -0
  66. package/dist/routes/rest/collections/updateByID.js.map +1 -1
  67. package/dist/routes/rest/globals/update.d.ts.map +1 -1
  68. package/dist/routes/rest/globals/update.js +2 -0
  69. package/dist/routes/rest/globals/update.js.map +1 -1
  70. package/dist/routes/rest/index.d.ts +12 -12
  71. package/dist/routes/rest/index.d.ts.map +1 -1
  72. package/dist/routes/rest/index.js +17 -15
  73. package/dist/routes/rest/index.js.map +1 -1
  74. package/dist/routes/rest/routeError.d.ts +2 -7
  75. package/dist/routes/rest/routeError.d.ts.map +1 -1
  76. package/dist/routes/rest/routeError.js +33 -19
  77. package/dist/routes/rest/routeError.js.map +1 -1
  78. package/dist/routes/rest/utilities/sanitizeJoinParams.d.ts +13 -0
  79. package/dist/routes/rest/utilities/sanitizeJoinParams.d.ts.map +1 -0
  80. package/dist/routes/rest/utilities/sanitizeJoinParams.js +17 -0
  81. package/dist/routes/rest/utilities/sanitizeJoinParams.js.map +1 -0
  82. package/dist/scss/app.scss +166 -162
  83. package/dist/scss/colors.scss +256 -254
  84. package/dist/scss/resets.scss +9 -7
  85. package/dist/scss/toastify.scss +42 -40
  86. package/dist/scss/toasts.scss +105 -103
  87. package/dist/scss/type.scss +80 -79
  88. package/dist/templates/Default/Wrapper/index.scss +38 -36
  89. package/dist/templates/Default/index.d.ts.map +1 -1
  90. package/dist/templates/Default/index.js +18 -6
  91. package/dist/templates/Default/index.js.map +1 -1
  92. package/dist/templates/Default/index.scss +62 -50
  93. package/dist/templates/Minimal/index.scss +22 -20
  94. package/dist/utilities/getNextRequestI18n.js +2 -2
  95. package/dist/utilities/getNextRequestI18n.js.map +1 -1
  96. package/dist/utilities/getRequestTheme.d.ts.map +1 -1
  97. package/dist/utilities/getRequestTheme.js +3 -0
  98. package/dist/utilities/getRequestTheme.js.map +1 -1
  99. package/dist/utilities/initPage/handleAdminPage.d.ts +12 -11
  100. package/dist/utilities/initPage/handleAdminPage.d.ts.map +1 -1
  101. package/dist/utilities/initPage/handleAdminPage.js +9 -21
  102. package/dist/utilities/initPage/handleAdminPage.js.map +1 -1
  103. package/dist/utilities/initPage/handleAuthRedirect.d.ts +6 -3
  104. package/dist/utilities/initPage/handleAuthRedirect.d.ts.map +1 -1
  105. package/dist/utilities/initPage/handleAuthRedirect.js +23 -36
  106. package/dist/utilities/initPage/handleAuthRedirect.js.map +1 -1
  107. package/dist/utilities/initPage/index.d.ts +1 -1
  108. package/dist/utilities/initPage/index.d.ts.map +1 -1
  109. package/dist/utilities/initPage/index.js +44 -42
  110. package/dist/utilities/initPage/index.js.map +1 -1
  111. package/dist/utilities/initPage/shared.d.ts +2 -2
  112. package/dist/utilities/initPage/shared.d.ts.map +1 -1
  113. package/dist/utilities/initPage/shared.js +18 -13
  114. package/dist/utilities/initPage/shared.js.map +1 -1
  115. package/dist/utilities/initReq.d.ts +11 -0
  116. package/dist/utilities/initReq.d.ts.map +1 -0
  117. package/dist/utilities/initReq.js +46 -0
  118. package/dist/utilities/initReq.js.map +1 -0
  119. package/dist/views/API/RenderJSON/index.scss +68 -66
  120. package/dist/views/API/index.scss +98 -96
  121. package/dist/views/Account/Settings/index.d.ts +2 -1
  122. package/dist/views/Account/Settings/index.d.ts.map +1 -1
  123. package/dist/views/Account/Settings/index.js +3 -2
  124. package/dist/views/Account/Settings/index.js.map +1 -1
  125. package/dist/views/Account/Settings/index.scss +37 -35
  126. package/dist/views/Account/index.d.ts.map +1 -1
  127. package/dist/views/Account/index.js +4 -2
  128. package/dist/views/Account/index.js.map +1 -1
  129. package/dist/views/CreateFirstUser/index.client.d.ts.map +1 -1
  130. package/dist/views/CreateFirstUser/index.client.js +35 -16
  131. package/dist/views/CreateFirstUser/index.client.js.map +1 -1
  132. package/dist/views/CreateFirstUser/index.scss +13 -11
  133. package/dist/views/Dashboard/Default/index.d.ts +8 -1
  134. package/dist/views/Dashboard/Default/index.d.ts.map +1 -1
  135. package/dist/views/Dashboard/Default/index.js +14 -2
  136. package/dist/views/Dashboard/Default/index.js.map +1 -1
  137. package/dist/views/Dashboard/Default/index.scss +53 -46
  138. package/dist/views/Dashboard/index.d.ts.map +1 -1
  139. package/dist/views/Dashboard/index.js +16 -1
  140. package/dist/views/Dashboard/index.js.map +1 -1
  141. package/dist/views/Document/getDocumentData.d.ts +5 -2
  142. package/dist/views/Document/getDocumentData.d.ts.map +1 -1
  143. package/dist/views/Document/getDocumentData.js +13 -2
  144. package/dist/views/Document/getDocumentData.js.map +1 -1
  145. package/dist/views/Document/getDocumentPermissions.d.ts.map +1 -1
  146. package/dist/views/Document/getDocumentPermissions.js +4 -1
  147. package/dist/views/Document/getDocumentPermissions.js.map +1 -1
  148. package/dist/views/Edit/Default/Auth/index.scss +56 -54
  149. package/dist/views/Edit/Default/index.d.ts.map +1 -1
  150. package/dist/views/Edit/Default/index.js +127 -14
  151. package/dist/views/Edit/Default/index.js.map +1 -1
  152. package/dist/views/Edit/Default/index.scss +15 -13
  153. package/dist/views/ForgotPassword/ForgotPasswordForm/index.d.ts.map +1 -1
  154. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +12 -11
  155. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -1
  156. package/dist/views/ForgotPassword/index.d.ts.map +1 -1
  157. package/dist/views/ForgotPassword/index.js +8 -8
  158. package/dist/views/ForgotPassword/index.js.map +1 -1
  159. package/dist/views/List/Default/index.d.ts.map +1 -1
  160. package/dist/views/List/Default/index.js +62 -58
  161. package/dist/views/List/Default/index.js.map +1 -1
  162. package/dist/views/List/Default/index.scss +136 -134
  163. package/dist/views/List/index.d.ts.map +1 -1
  164. package/dist/views/List/index.js +1 -0
  165. package/dist/views/List/index.js.map +1 -1
  166. package/dist/views/LivePreview/IFrame/index.scss +8 -6
  167. package/dist/views/LivePreview/Preview/index.scss +32 -30
  168. package/dist/views/LivePreview/Toolbar/Controls/index.scss +49 -47
  169. package/dist/views/LivePreview/Toolbar/SizeInput/index.scss +11 -9
  170. package/dist/views/LivePreview/Toolbar/index.scss +33 -31
  171. package/dist/views/LivePreview/ToolbarArea/index.scss +5 -3
  172. package/dist/views/LivePreview/index.client.d.ts.map +1 -1
  173. package/dist/views/LivePreview/index.client.js +214 -200
  174. package/dist/views/LivePreview/index.client.js.map +1 -1
  175. package/dist/views/LivePreview/index.scss +48 -46
  176. package/dist/views/LivePreview/usePopupWindow.js +119 -74
  177. package/dist/views/LivePreview/usePopupWindow.js.map +1 -1
  178. package/dist/views/Login/LoginForm/index.d.ts.map +1 -1
  179. package/dist/views/Login/LoginForm/index.js +3 -3
  180. package/dist/views/Login/LoginForm/index.js.map +1 -1
  181. package/dist/views/Login/LoginForm/index.scss +8 -6
  182. package/dist/views/Login/index.scss +8 -6
  183. package/dist/views/Logout/LogoutClient.d.ts.map +1 -1
  184. package/dist/views/Logout/LogoutClient.js +77 -55
  185. package/dist/views/Logout/LogoutClient.js.map +1 -1
  186. package/dist/views/Logout/index.scss +17 -15
  187. package/dist/views/NotFound/index.d.ts +5 -5
  188. package/dist/views/NotFound/index.d.ts.map +1 -1
  189. package/dist/views/NotFound/index.js +4 -2
  190. package/dist/views/NotFound/index.js.map +1 -1
  191. package/dist/views/NotFound/index.scss +38 -36
  192. package/dist/views/ResetPassword/ResetPasswordForm/index.d.ts +7 -0
  193. package/dist/views/ResetPassword/ResetPasswordForm/index.d.ts.map +1 -0
  194. package/dist/views/ResetPassword/{index.client.js → ResetPasswordForm/index.js} +16 -19
  195. package/dist/views/ResetPassword/ResetPasswordForm/index.js.map +1 -0
  196. package/dist/views/ResetPassword/index.d.ts.map +1 -1
  197. package/dist/views/ResetPassword/index.js +17 -10
  198. package/dist/views/ResetPassword/index.js.map +1 -1
  199. package/dist/views/ResetPassword/index.scss +6 -26
  200. package/dist/views/Root/getViewFromConfig.d.ts.map +1 -1
  201. package/dist/views/Root/getViewFromConfig.js +1 -7
  202. package/dist/views/Root/getViewFromConfig.js.map +1 -1
  203. package/dist/views/Root/index.d.ts +5 -5
  204. package/dist/views/Root/index.d.ts.map +1 -1
  205. package/dist/views/Root/index.js +9 -4
  206. package/dist/views/Root/index.js.map +1 -1
  207. package/dist/views/Root/meta.d.ts +5 -5
  208. package/dist/views/Root/meta.d.ts.map +1 -1
  209. package/dist/views/Root/meta.js +3 -2
  210. package/dist/views/Root/meta.js.map +1 -1
  211. package/dist/views/Unauthorized/index.d.ts.map +1 -1
  212. package/dist/views/Unauthorized/index.js +14 -7
  213. package/dist/views/Unauthorized/index.js.map +1 -1
  214. package/dist/views/Unauthorized/index.scss +4 -31
  215. package/dist/views/Verify/index.client.d.ts +7 -0
  216. package/dist/views/Verify/index.client.d.ts.map +1 -0
  217. package/dist/views/Verify/index.client.js +46 -0
  218. package/dist/views/Verify/index.client.js.map +1 -0
  219. package/dist/views/Verify/index.d.ts.map +1 -1
  220. package/dist/views/Verify/index.js +12 -11
  221. package/dist/views/Verify/index.js.map +1 -1
  222. package/dist/views/Verify/index.scss +13 -11
  223. package/dist/views/Version/Default/index.d.ts.map +1 -1
  224. package/dist/views/Version/Default/index.js +2 -0
  225. package/dist/views/Version/Default/index.js.map +1 -1
  226. package/dist/views/Version/Default/index.scss +52 -50
  227. package/dist/views/Version/RenderFieldsToDiff/Label/index.scss +5 -3
  228. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.scss +29 -27
  229. package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.scss +11 -9
  230. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.scss +12 -10
  231. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.scss +12 -10
  232. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.scss +12 -10
  233. package/dist/views/Version/RenderFieldsToDiff/index.scss +12 -10
  234. package/dist/views/Version/Restore/index.d.ts.map +1 -1
  235. package/dist/views/Version/Restore/index.js +8 -14
  236. package/dist/views/Version/Restore/index.js.map +1 -1
  237. package/dist/views/Version/Restore/index.scss +57 -55
  238. package/dist/views/Version/SelectComparison/index.d.ts.map +1 -1
  239. package/dist/views/Version/SelectComparison/index.js +24 -3
  240. package/dist/views/Version/SelectComparison/index.js.map +1 -1
  241. package/dist/views/Version/SelectComparison/index.scss +12 -10
  242. package/dist/views/Version/SelectComparison/types.d.ts +1 -0
  243. package/dist/views/Version/SelectComparison/types.d.ts.map +1 -1
  244. package/dist/views/Version/SelectComparison/types.js.map +1 -1
  245. package/dist/views/Version/SelectLocales/index.scss +6 -4
  246. package/dist/views/Version/index.d.ts.map +1 -1
  247. package/dist/views/Version/index.js +2 -0
  248. package/dist/views/Version/index.js.map +1 -1
  249. package/dist/views/Versions/buildColumns.d.ts.map +1 -1
  250. package/dist/views/Versions/buildColumns.js +63 -48
  251. package/dist/views/Versions/buildColumns.js.map +1 -1
  252. package/dist/views/Versions/cells/AutosaveCell/index.d.ts.map +1 -1
  253. package/dist/views/Versions/cells/AutosaveCell/index.js +48 -20
  254. package/dist/views/Versions/cells/AutosaveCell/index.js.map +1 -1
  255. package/dist/views/Versions/getLatestVersion.d.ts +1 -0
  256. package/dist/views/Versions/getLatestVersion.d.ts.map +1 -1
  257. package/dist/views/Versions/getLatestVersion.js +14 -3
  258. package/dist/views/Versions/getLatestVersion.js.map +1 -1
  259. package/dist/views/Versions/index.d.ts.map +1 -1
  260. package/dist/views/Versions/index.js +30 -7
  261. package/dist/views/Versions/index.js.map +1 -1
  262. package/dist/views/Versions/index.scss +78 -76
  263. package/dist/withPayload.d.ts.map +1 -1
  264. package/dist/withPayload.js +4 -4
  265. package/dist/withPayload.js.map +1 -1
  266. package/package.json +24 -16
  267. package/dist/cjs/withPayload.js +0 -111
  268. package/dist/cjs/withPayload.js.map +0 -1
  269. package/dist/views/ResetPassword/index.client.d.ts +0 -7
  270. package/dist/views/ResetPassword/index.client.d.ts.map +0 -1
  271. package/dist/views/ResetPassword/index.client.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["HydrateAuthProvider","EntityType","getCreateMappedComponent","groupNavItems","RenderComponent","LinkImport","React","Fragment","DefaultDashboard","generateDashboardMetadata","Link","default","Dashboard","initPageResult","params","searchParams","locale","permissions","req","i18n","payload","config","user","visibleEntities","CustomDashboardComponent","admin","components","views","collections","filter","collection","slug","read","permission","includes","globals","global","navGroups","map","entityToGroup","type","entity","createMappedComponent","importMap","serverProps","mappedDashboardComponent","Component","undefined","_jsxs","_jsx","clientProps","mappedComponent"],"sources":["../../../src/views/Dashboard/index.tsx"],"sourcesContent":["import type { EntityToGroup } from '@payloadcms/ui/shared'\nimport type { AdminViewProps } from 'payload'\n\nimport { HydrateAuthProvider } from '@payloadcms/ui'\nimport {\n EntityType,\n getCreateMappedComponent,\n groupNavItems,\n RenderComponent,\n} from '@payloadcms/ui/shared'\nimport LinkImport from 'next/link.js'\nimport React, { Fragment } from 'react'\n\nimport { DefaultDashboard } from './Default/index.js'\n\nexport { generateDashboardMetadata } from './meta.js'\n\nconst Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default\n\nexport const Dashboard: React.FC<AdminViewProps> = ({ initPageResult, params, searchParams }) => {\n const {\n locale,\n permissions,\n req: {\n i18n,\n payload: { config },\n payload,\n user,\n },\n visibleEntities,\n } = initPageResult\n\n const CustomDashboardComponent = config.admin.components?.views?.Dashboard\n\n const collections = config.collections.filter(\n (collection) =>\n permissions?.collections?.[collection.slug]?.read?.permission &&\n visibleEntities.collections.includes(collection.slug),\n )\n\n const globals = config.globals.filter(\n (global) =>\n permissions?.globals?.[global.slug]?.read?.permission &&\n visibleEntities.globals.includes(global.slug),\n )\n\n const navGroups = groupNavItems(\n [\n ...(collections.map((collection) => {\n const entityToGroup: EntityToGroup = {\n type: EntityType.collection,\n entity: collection,\n }\n\n return entityToGroup\n }) ?? []),\n ...(globals.map((global) => {\n const entityToGroup: EntityToGroup = {\n type: EntityType.global,\n entity: global,\n }\n\n return entityToGroup\n }) ?? []),\n ],\n permissions,\n i18n,\n )\n\n const createMappedComponent = getCreateMappedComponent({\n importMap: payload.importMap,\n serverProps: {\n i18n,\n Link,\n locale,\n navGroups,\n params,\n payload,\n permissions,\n searchParams,\n user,\n visibleEntities,\n },\n })\n\n const mappedDashboardComponent = createMappedComponent(\n CustomDashboardComponent?.Component,\n undefined,\n DefaultDashboard,\n 'CustomDashboardComponent.Component',\n )\n\n return (\n <Fragment>\n <HydrateAuthProvider permissions={permissions} />\n <RenderComponent\n clientProps={{\n Link,\n locale,\n }}\n mappedComponent={mappedDashboardComponent}\n />\n </Fragment>\n )\n}\n"],"mappings":";AAGA,SAASA,mBAAmB,QAAQ;AACpC,SACEC,UAAU,EACVC,wBAAwB,EACxBC,aAAa,EACbC,eAAe,QACV;AACP,OAAOC,UAAA,MAAgB;AACvB,OAAOC,KAAA,IAASC,QAAQ,QAAQ;AAEhC,SAASC,gBAAgB,QAAQ;AAEjC,SAASC,yBAAyB,QAAQ;AAE1C,MAAMC,IAAA,GAAQL,UAAA,CAAWM,OAAO,IAAIN,UAAA;AAEpC,OAAO,MAAMO,SAAA,GAAsCA,CAAC;EAAEC,cAAc;EAAEC,MAAM;EAAEC;AAAY,CAAE;EAC1F,MAAM;IACJC,MAAM;IACNC,WAAW;IACXC,GAAA,EAAK;MACHC,IAAI;MACJC,OAAA,EAAS;QAAEC;MAAM,CAAE;MACnBD,OAAO;MACPE;IAAI,CACL;IACDC;EAAe,CAChB,GAAGV,cAAA;EAEJ,MAAMW,wBAAA,GAA2BH,MAAA,CAAOI,KAAK,CAACC,UAAU,EAAEC,KAAA,EAAOf,SAAA;EAEjE,MAAMgB,WAAA,GAAcP,MAAA,CAAOO,WAAW,CAACC,MAAM,CAC1CC,UAAA,IACCb,WAAA,EAAaW,WAAA,GAAcE,UAAA,CAAWC,IAAI,CAAC,EAAEC,IAAA,EAAMC,UAAA,IACnDV,eAAA,CAAgBK,WAAW,CAACM,QAAQ,CAACJ,UAAA,CAAWC,IAAI;EAGxD,MAAMI,OAAA,GAAUd,MAAA,CAAOc,OAAO,CAACN,MAAM,CAClCO,MAAA,IACCnB,WAAA,EAAakB,OAAA,GAAUC,MAAA,CAAOL,IAAI,CAAC,EAAEC,IAAA,EAAMC,UAAA,IAC3CV,eAAA,CAAgBY,OAAO,CAACD,QAAQ,CAACE,MAAA,CAAOL,IAAI;EAGhD,MAAMM,SAAA,GAAYlC,aAAA,CAChB,C,IACMyB,WAAA,CAAYU,GAAG,CAAER,UAAA;IACnB,MAAMS,aAAA,GAA+B;MACnCC,IAAA,EAAMvC,UAAA,CAAW6B,UAAU;MAC3BW,MAAA,EAAQX;IACV;IAEA,OAAOS,aAAA;EACT,MAAM,EAAE,G,IACJJ,OAAA,CAAQG,GAAG,CAAEF,MAAA;IACf,MAAMG,aAAA,GAA+B;MACnCC,IAAA,EAAMvC,UAAA,CAAWmC,MAAM;MACvBK,MAAA,EAAQL;IACV;IAEA,OAAOG,aAAA;EACT,MAAM,EAAE,EACT,EACDtB,WAAA,EACAE,IAAA;EAGF,MAAMuB,qBAAA,GAAwBxC,wBAAA,CAAyB;IACrDyC,SAAA,EAAWvB,OAAA,CAAQuB,SAAS;IAC5BC,WAAA,EAAa;MACXzB,IAAA;MACAT,IAAA;MACAM,MAAA;MACAqB,SAAA;MACAvB,MAAA;MACAM,OAAA;MACAH,WAAA;MACAF,YAAA;MACAO,IAAA;MACAC;IACF;EACF;EAEA,MAAMsB,wBAAA,GAA2BH,qBAAA,CAC/BlB,wBAAA,EAA0BsB,SAAA,EAC1BC,SAAA,EACAvC,gBAAA,EACA;EAGF,oBACEwC,KAAA,CAACzC,QAAA;4BACC0C,IAAA,CAACjD,mBAAA;MAAoBiB,WAAA,EAAaA;qBAClCgC,IAAA,CAAC7C,eAAA;MACC8C,WAAA,EAAa;QACXxC,IAAA;QACAM;MACF;MACAmC,eAAA,EAAiBN;;;AAIzB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["HydrateAuthProvider","EntityType","getCreateMappedComponent","groupNavItems","RenderComponent","LinkImport","React","Fragment","DefaultDashboard","generateDashboardMetadata","Link","default","Dashboard","initPageResult","params","searchParams","locale","permissions","req","i18n","payload","config","user","visibleEntities","CustomDashboardComponent","admin","components","views","collections","filter","collection","slug","read","permission","includes","globals","global","globalSlugs","map","filteredGlobalSlugs","globalData","Promise","all","data","findGlobal","depth","includeLockStatus","navGroups","entityToGroup","type","entity","createMappedComponent","importMap","serverProps","mappedDashboardComponent","Component","undefined","_jsxs","_jsx","clientProps","mappedComponent"],"sources":["../../../src/views/Dashboard/index.tsx"],"sourcesContent":["import type { EntityToGroup } from '@payloadcms/ui/shared'\nimport type { AdminViewProps } from 'payload'\n\nimport { HydrateAuthProvider } from '@payloadcms/ui'\nimport {\n EntityType,\n getCreateMappedComponent,\n groupNavItems,\n RenderComponent,\n} from '@payloadcms/ui/shared'\nimport LinkImport from 'next/link.js'\nimport React, { Fragment } from 'react'\n\nimport { DefaultDashboard } from './Default/index.js'\n\nexport { generateDashboardMetadata } from './meta.js'\n\nconst Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default\n\nexport const Dashboard: React.FC<AdminViewProps> = async ({\n initPageResult,\n params,\n searchParams,\n}) => {\n const {\n locale,\n permissions,\n req: {\n i18n,\n payload: { config },\n payload,\n user,\n },\n visibleEntities,\n } = initPageResult\n\n const CustomDashboardComponent = config.admin.components?.views?.Dashboard\n\n const collections = config.collections.filter(\n (collection) =>\n permissions?.collections?.[collection.slug]?.read?.permission &&\n visibleEntities.collections.includes(collection.slug),\n )\n\n const globals = config.globals.filter(\n (global) =>\n permissions?.globals?.[global.slug]?.read?.permission &&\n visibleEntities.globals.includes(global.slug),\n )\n\n const globalSlugs = config.globals.map((global) => global.slug)\n\n // Filter the slugs based on permissions and visibility\n const filteredGlobalSlugs = globalSlugs.filter(\n (slug) =>\n permissions?.globals?.[slug]?.read?.permission && visibleEntities.globals.includes(slug),\n )\n\n const globalData = await Promise.all(\n filteredGlobalSlugs.map(async (slug) => {\n const data = await payload.findGlobal({\n slug,\n depth: 0,\n includeLockStatus: true,\n })\n\n return {\n slug,\n data,\n }\n }),\n )\n\n const navGroups = groupNavItems(\n [\n ...(collections.map((collection) => {\n const entityToGroup: EntityToGroup = {\n type: EntityType.collection,\n entity: collection,\n }\n\n return entityToGroup\n }) ?? []),\n ...(globals.map((global) => {\n const entityToGroup: EntityToGroup = {\n type: EntityType.global,\n entity: global,\n }\n\n return entityToGroup\n }) ?? []),\n ],\n permissions,\n i18n,\n )\n\n const createMappedComponent = getCreateMappedComponent({\n importMap: payload.importMap,\n serverProps: {\n globalData,\n i18n,\n Link,\n locale,\n navGroups,\n params,\n payload,\n permissions,\n searchParams,\n user,\n visibleEntities,\n },\n })\n\n const mappedDashboardComponent = createMappedComponent(\n CustomDashboardComponent?.Component,\n undefined,\n DefaultDashboard,\n 'CustomDashboardComponent.Component',\n )\n\n return (\n <Fragment>\n <HydrateAuthProvider permissions={permissions} />\n <RenderComponent\n clientProps={{\n Link,\n locale,\n }}\n mappedComponent={mappedDashboardComponent}\n />\n </Fragment>\n )\n}\n"],"mappings":";AAGA,SAASA,mBAAmB,QAAQ;AACpC,SACEC,UAAU,EACVC,wBAAwB,EACxBC,aAAa,EACbC,eAAe,QACV;AACP,OAAOC,UAAA,MAAgB;AACvB,OAAOC,KAAA,IAASC,QAAQ,QAAQ;AAEhC,SAASC,gBAAgB,QAAQ;AAEjC,SAASC,yBAAyB,QAAQ;AAE1C,MAAMC,IAAA,GAAQL,UAAA,CAAWM,OAAO,IAAIN,UAAA;AAEpC,OAAO,MAAMO,SAAA,GAAsC,MAAAA,CAAO;EACxDC,cAAc;EACdC,MAAM;EACNC;AAAY,CACb;EACC,MAAM;IACJC,MAAM;IACNC,WAAW;IACXC,GAAA,EAAK;MACHC,IAAI;MACJC,OAAA,EAAS;QAAEC;MAAM,CAAE;MACnBD,OAAO;MACPE;IAAI,CACL;IACDC;EAAe,CAChB,GAAGV,cAAA;EAEJ,MAAMW,wBAAA,GAA2BH,MAAA,CAAOI,KAAK,CAACC,UAAU,EAAEC,KAAA,EAAOf,SAAA;EAEjE,MAAMgB,WAAA,GAAcP,MAAA,CAAOO,WAAW,CAACC,MAAM,CAC1CC,UAAA,IACCb,WAAA,EAAaW,WAAA,GAAcE,UAAA,CAAWC,IAAI,CAAC,EAAEC,IAAA,EAAMC,UAAA,IACnDV,eAAA,CAAgBK,WAAW,CAACM,QAAQ,CAACJ,UAAA,CAAWC,IAAI;EAGxD,MAAMI,OAAA,GAAUd,MAAA,CAAOc,OAAO,CAACN,MAAM,CAClCO,MAAA,IACCnB,WAAA,EAAakB,OAAA,GAAUC,MAAA,CAAOL,IAAI,CAAC,EAAEC,IAAA,EAAMC,UAAA,IAC3CV,eAAA,CAAgBY,OAAO,CAACD,QAAQ,CAACE,MAAA,CAAOL,IAAI;EAGhD,MAAMM,WAAA,GAAchB,MAAA,CAAOc,OAAO,CAACG,GAAG,CAAEF,MAAA,IAAWA,MAAA,CAAOL,IAAI;EAE9D;EACA,MAAMQ,mBAAA,GAAsBF,WAAA,CAAYR,MAAM,CAC3CE,IAAA,IACCd,WAAA,EAAakB,OAAA,GAAUJ,IAAA,CAAK,EAAEC,IAAA,EAAMC,UAAA,IAAcV,eAAA,CAAgBY,OAAO,CAACD,QAAQ,CAACH,IAAA;EAGvF,MAAMS,UAAA,GAAa,MAAMC,OAAA,CAAQC,GAAG,CAClCH,mBAAA,CAAoBD,GAAG,CAAC,MAAOP,IAAA;IAC7B,MAAMY,IAAA,GAAO,MAAMvB,OAAA,CAAQwB,UAAU,CAAC;MACpCb,IAAA;MACAc,KAAA,EAAO;MACPC,iBAAA,EAAmB;IACrB;IAEA,OAAO;MACLf,IAAA;MACAY;IACF;EACF;EAGF,MAAMI,SAAA,GAAY5C,aAAA,CAChB,C,IACMyB,WAAA,CAAYU,GAAG,CAAER,UAAA;IACnB,MAAMkB,aAAA,GAA+B;MACnCC,IAAA,EAAMhD,UAAA,CAAW6B,UAAU;MAC3BoB,MAAA,EAAQpB;IACV;IAEA,OAAOkB,aAAA;EACT,MAAM,EAAE,G,IACJb,OAAA,CAAQG,GAAG,CAAEF,MAAA;IACf,MAAMY,aAAA,GAA+B;MACnCC,IAAA,EAAMhD,UAAA,CAAWmC,MAAM;MACvBc,MAAA,EAAQd;IACV;IAEA,OAAOY,aAAA;EACT,MAAM,EAAE,EACT,EACD/B,WAAA,EACAE,IAAA;EAGF,MAAMgC,qBAAA,GAAwBjD,wBAAA,CAAyB;IACrDkD,SAAA,EAAWhC,OAAA,CAAQgC,SAAS;IAC5BC,WAAA,EAAa;MACXb,UAAA;MACArB,IAAA;MACAT,IAAA;MACAM,MAAA;MACA+B,SAAA;MACAjC,MAAA;MACAM,OAAA;MACAH,WAAA;MACAF,YAAA;MACAO,IAAA;MACAC;IACF;EACF;EAEA,MAAM+B,wBAAA,GAA2BH,qBAAA,CAC/B3B,wBAAA,EAA0B+B,SAAA,EAC1BC,SAAA,EACAhD,gBAAA,EACA;EAGF,oBACEiD,KAAA,CAAClD,QAAA;4BACCmD,IAAA,CAAC1D,mBAAA;MAAoBiB,WAAA,EAAaA;qBAClCyC,IAAA,CAACtD,eAAA;MACCuD,WAAA,EAAa;QACXjD,IAAA;QACAM;MACF;MACA4C,eAAA,EAAiBN;;;AAIzB","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { Data, Locale, PayloadRequest, SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload';
1
+ import type { Data, FormState, Locale, PayloadRequest, SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload';
2
2
  export declare const getDocumentData: (args: {
3
3
  collectionConfig?: SanitizedCollectionConfig;
4
4
  globalConfig?: SanitizedGlobalConfig;
@@ -6,5 +6,8 @@ export declare const getDocumentData: (args: {
6
6
  locale: Locale;
7
7
  req: PayloadRequest;
8
8
  schemaPath?: string;
9
- }) => Promise<Data>;
9
+ }) => Promise<{
10
+ data: Data;
11
+ formState: FormState;
12
+ }>;
10
13
  //# sourceMappingURL=getDocumentData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getDocumentData.d.ts","sourceRoot":"","sources":["../../../src/views/Document/getDocumentData.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,MAAM,EACN,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAKhB,eAAO,MAAM,eAAe,SAAgB;IAC1C,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,KAAG,OAAO,CAAC,IAAI,CA8Bf,CAAA"}
1
+ {"version":3,"file":"getDocumentData.d.ts","sourceRoot":"","sources":["../../../src/views/Document/getDocumentData.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,SAAS,EACT,MAAM,EACN,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAKhB,eAAO,MAAM,eAAe,SAAgB;IAC1C,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,KAAG,OAAO,CAAC;IACV,IAAI,EAAE,IAAI,CAAA;IACV,SAAS,EAAE,SAAS,CAAA;CACrB,CAuCA,CAAA"}
@@ -11,7 +11,9 @@ export const getDocumentData = async args => {
11
11
  } = args;
12
12
  const schemaPath = schemaPathFromProps || collectionConfig?.slug || globalConfig?.slug;
13
13
  try {
14
- const formState = await buildFormState({
14
+ const {
15
+ state: formState
16
+ } = await buildFormState({
15
17
  req: {
16
18
  ...req,
17
19
  data: {
@@ -32,7 +34,16 @@ export const getDocumentData = async args => {
32
34
  } catch (error) {
33
35
  console.error('Error getting document data', error) // eslint-disable-line no-console
34
36
  ;
35
- return {};
37
+ return {
38
+ data: null,
39
+ formState: {
40
+ fields: {
41
+ initialValue: undefined,
42
+ valid: false,
43
+ value: undefined
44
+ }
45
+ }
46
+ };
36
47
  }
37
48
  };
38
49
  //# sourceMappingURL=getDocumentData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getDocumentData.js","names":["buildFormState","reduceFieldsToValues","getDocumentData","args","id","collectionConfig","globalConfig","locale","req","schemaPath","schemaPathFromProps","slug","formState","data","collectionSlug","globalSlug","code","operation","error","console"],"sources":["../../../src/views/Document/getDocumentData.tsx"],"sourcesContent":["import type {\n Data,\n Locale,\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedGlobalConfig,\n} from 'payload'\n\nimport { buildFormState } from '@payloadcms/ui/utilities/buildFormState'\nimport { reduceFieldsToValues } from 'payload/shared'\n\nexport const getDocumentData = async (args: {\n collectionConfig?: SanitizedCollectionConfig\n globalConfig?: SanitizedGlobalConfig\n id?: number | string\n locale: Locale\n req: PayloadRequest\n schemaPath?: string\n}): Promise<Data> => {\n const { id, collectionConfig, globalConfig, locale, req, schemaPath: schemaPathFromProps } = args\n\n const schemaPath = schemaPathFromProps || collectionConfig?.slug || globalConfig?.slug\n\n try {\n const formState = await buildFormState({\n req: {\n ...req,\n data: {\n id,\n collectionSlug: collectionConfig?.slug,\n globalSlug: globalConfig?.slug,\n locale: locale?.code,\n operation: (collectionConfig && id) || globalConfig ? 'update' : 'create',\n schemaPath,\n },\n },\n })\n\n const data = reduceFieldsToValues(formState, true)\n\n return {\n data,\n formState,\n }\n } catch (error) {\n console.error('Error getting document data', error) // eslint-disable-line no-console\n return {}\n }\n}\n"],"mappings":"AAQA,SAASA,cAAc,QAAQ;AAC/B,SAASC,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,eAAA,GAAkB,MAAOC,IAAA;EAQpC,MAAM;IAAEC,EAAE;IAAEC,gBAAgB;IAAEC,YAAY;IAAEC,MAAM;IAAEC,GAAG;IAAEC,UAAA,EAAYC;EAAmB,CAAE,GAAGP,IAAA;EAE7F,MAAMM,UAAA,GAAaC,mBAAA,IAAuBL,gBAAA,EAAkBM,IAAA,IAAQL,YAAA,EAAcK,IAAA;EAElF,IAAI;IACF,MAAMC,SAAA,GAAY,MAAMZ,cAAA,CAAe;MACrCQ,GAAA,EAAK;QACH,GAAGA,GAAG;QACNK,IAAA,EAAM;UACJT,EAAA;UACAU,cAAA,EAAgBT,gBAAA,EAAkBM,IAAA;UAClCI,UAAA,EAAYT,YAAA,EAAcK,IAAA;UAC1BJ,MAAA,EAAQA,MAAA,EAAQS,IAAA;UAChBC,SAAA,EAAWZ,gBAAC,IAAoBD,EAAA,IAAOE,YAAA,GAAe,WAAW;UACjEG;QACF;MACF;IACF;IAEA,MAAMI,IAAA,GAAOZ,oBAAA,CAAqBW,SAAA,EAAW;IAE7C,OAAO;MACLC,IAAA;MACAD;IACF;EACF,EAAE,OAAOM,KAAA,EAAO;IACdC,OAAA,CAAQD,KAAK,CAAC,+BAA+BA,KAAA,EAAO;IAAA;IACpD,OAAO,CAAC;EACV;AACF","ignoreList":[]}
1
+ {"version":3,"file":"getDocumentData.js","names":["buildFormState","reduceFieldsToValues","getDocumentData","args","id","collectionConfig","globalConfig","locale","req","schemaPath","schemaPathFromProps","slug","state","formState","data","collectionSlug","globalSlug","code","operation","error","console","fields","initialValue","undefined","valid","value"],"sources":["../../../src/views/Document/getDocumentData.tsx"],"sourcesContent":["import type {\n Data,\n FormState,\n Locale,\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedGlobalConfig,\n} from 'payload'\n\nimport { buildFormState } from '@payloadcms/ui/utilities/buildFormState'\nimport { reduceFieldsToValues } from 'payload/shared'\n\nexport const getDocumentData = async (args: {\n collectionConfig?: SanitizedCollectionConfig\n globalConfig?: SanitizedGlobalConfig\n id?: number | string\n locale: Locale\n req: PayloadRequest\n schemaPath?: string\n}): Promise<{\n data: Data\n formState: FormState\n}> => {\n const { id, collectionConfig, globalConfig, locale, req, schemaPath: schemaPathFromProps } = args\n\n const schemaPath = schemaPathFromProps || collectionConfig?.slug || globalConfig?.slug\n\n try {\n const { state: formState } = await buildFormState({\n req: {\n ...req,\n data: {\n id,\n collectionSlug: collectionConfig?.slug,\n globalSlug: globalConfig?.slug,\n locale: locale?.code,\n operation: (collectionConfig && id) || globalConfig ? 'update' : 'create',\n schemaPath,\n },\n },\n })\n\n const data = reduceFieldsToValues(formState, true)\n\n return {\n data,\n formState,\n }\n } catch (error) {\n console.error('Error getting document data', error) // eslint-disable-line no-console\n return {\n data: null,\n formState: {\n fields: {\n initialValue: undefined,\n valid: false,\n value: undefined,\n },\n },\n }\n }\n}\n"],"mappings":"AASA,SAASA,cAAc,QAAQ;AAC/B,SAASC,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,eAAA,GAAkB,MAAOC,IAAA;EAWpC,MAAM;IAAEC,EAAE;IAAEC,gBAAgB;IAAEC,YAAY;IAAEC,MAAM;IAAEC,GAAG;IAAEC,UAAA,EAAYC;EAAmB,CAAE,GAAGP,IAAA;EAE7F,MAAMM,UAAA,GAAaC,mBAAA,IAAuBL,gBAAA,EAAkBM,IAAA,IAAQL,YAAA,EAAcK,IAAA;EAElF,IAAI;IACF,MAAM;MAAEC,KAAA,EAAOC;IAAS,CAAE,GAAG,MAAMb,cAAA,CAAe;MAChDQ,GAAA,EAAK;QACH,GAAGA,GAAG;QACNM,IAAA,EAAM;UACJV,EAAA;UACAW,cAAA,EAAgBV,gBAAA,EAAkBM,IAAA;UAClCK,UAAA,EAAYV,YAAA,EAAcK,IAAA;UAC1BJ,MAAA,EAAQA,MAAA,EAAQU,IAAA;UAChBC,SAAA,EAAWb,gBAAC,IAAoBD,EAAA,IAAOE,YAAA,GAAe,WAAW;UACjEG;QACF;MACF;IACF;IAEA,MAAMK,IAAA,GAAOb,oBAAA,CAAqBY,SAAA,EAAW;IAE7C,OAAO;MACLC,IAAA;MACAD;IACF;EACF,EAAE,OAAOM,KAAA,EAAO;IACdC,OAAA,CAAQD,KAAK,CAAC,+BAA+BA,KAAA,EAAO;IAAA;IACpD,OAAO;MACLL,IAAA,EAAM;MACND,SAAA,EAAW;QACTQ,MAAA,EAAQ;UACNC,YAAA,EAAcC,SAAA;UACdC,KAAA,EAAO;UACPC,KAAA,EAAOF;QACT;MACF;IACF;EACF;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"getDocumentPermissions.d.ts","sourceRoot":"","sources":["../../../src/views/Document/getDocumentPermissions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,mBAAmB,EACnB,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAQhB,eAAO,MAAM,sBAAsB,SAAgB;IACjD,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,GAAG,EAAE,cAAc,CAAA;CACpB,KAAG,OAAO,CAAC;IACV,cAAc,EAAE,mBAAmB,CAAA;IACnC,oBAAoB,EAAE,OAAO,CAAA;IAC7B,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAkFA,CAAA"}
1
+ {"version":3,"file":"getDocumentPermissions.d.ts","sourceRoot":"","sources":["../../../src/views/Document/getDocumentPermissions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,mBAAmB,EACnB,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAQhB,eAAO,MAAM,sBAAsB,SAAgB;IACjD,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,GAAG,EAAE,cAAc,CAAA;CACpB,KAAG,OAAO,CAAC;IACV,cAAc,EAAE,mBAAmB,CAAA;IACnC,oBAAoB,EAAE,OAAO,CAAA;IAC7B,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAqFA,CAAA"}
@@ -19,7 +19,10 @@ export const getDocumentPermissions = async args => {
19
19
  },
20
20
  req: {
21
21
  ...req,
22
- data
22
+ data: {
23
+ ...data,
24
+ _status: 'draft'
25
+ }
23
26
  }
24
27
  });
25
28
  if (collectionConfig.versions?.drafts) {
@@ -1 +1 @@
1
- {"version":3,"file":"getDocumentPermissions.js","names":["hasSavePermission","getHasSavePermission","isEditing","getIsEditing","docAccessOperation","docAccessOperationGlobal","getDocumentPermissions","args","id","collectionConfig","data","globalConfig","req","docPermissions","hasPublishPermission","toString","collection","config","versions","drafts","_status","then","update","permission","error","console","collectionSlug","slug","globalSlug"],"sources":["../../../src/views/Document/getDocumentPermissions.tsx"],"sourcesContent":["import type {\n Data,\n DocumentPermissions,\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedGlobalConfig,\n} from 'payload'\n\nimport {\n hasSavePermission as getHasSavePermission,\n isEditing as getIsEditing,\n} from '@payloadcms/ui/shared'\nimport { docAccessOperation, docAccessOperationGlobal } from 'payload'\n\nexport const getDocumentPermissions = async (args: {\n collectionConfig?: SanitizedCollectionConfig\n data: Data\n globalConfig?: SanitizedGlobalConfig\n id?: number | string\n req: PayloadRequest\n}): Promise<{\n docPermissions: DocumentPermissions\n hasPublishPermission: boolean\n hasSavePermission: boolean\n}> => {\n const { id, collectionConfig, data = {}, globalConfig, req } = args\n\n let docPermissions: DocumentPermissions\n let hasPublishPermission = false\n\n if (collectionConfig) {\n try {\n docPermissions = await docAccessOperation({\n id: id?.toString(),\n collection: {\n config: collectionConfig,\n },\n req: {\n ...req,\n data,\n },\n })\n\n if (collectionConfig.versions?.drafts) {\n hasPublishPermission = await docAccessOperation({\n id: id?.toString(),\n collection: {\n config: collectionConfig,\n },\n req: {\n ...req,\n data: {\n ...data,\n _status: 'published',\n },\n },\n }).then(({ update }) => update?.permission)\n }\n } catch (error) {\n console.error(error) // eslint-disable-line no-console\n }\n }\n\n if (globalConfig) {\n try {\n docPermissions = await docAccessOperationGlobal({\n globalConfig,\n req: {\n ...req,\n data,\n },\n })\n\n if (globalConfig.versions?.drafts) {\n hasPublishPermission = await docAccessOperationGlobal({\n globalConfig,\n req: {\n ...req,\n data: {\n ...data,\n _status: 'published',\n },\n },\n }).then(({ update }) => update?.permission)\n }\n } catch (error) {\n console.error(error) // eslint-disable-line no-console\n }\n }\n\n const hasSavePermission = getHasSavePermission({\n collectionSlug: collectionConfig?.slug,\n docPermissions,\n globalSlug: globalConfig?.slug,\n isEditing: getIsEditing({\n id,\n collectionSlug: collectionConfig?.slug,\n globalSlug: globalConfig?.slug,\n }),\n })\n\n return {\n docPermissions,\n hasPublishPermission,\n hasSavePermission,\n }\n}\n"],"mappings":"AAQA,SACEA,iBAAA,IAAqBC,oBAAoB,EACzCC,SAAA,IAAaC,YAAY,QACpB;AACP,SAASC,kBAAkB,EAAEC,wBAAwB,QAAQ;AAE7D,OAAO,MAAMC,sBAAA,GAAyB,MAAOC,IAAA;EAW3C,MAAM;IAAEC,EAAE;IAAEC,gBAAgB;IAAEC,IAAA,GAAO,CAAC,CAAC;IAAEC,YAAY;IAAEC;EAAG,CAAE,GAAGL,IAAA;EAE/D,IAAIM,cAAA;EACJ,IAAIC,oBAAA,GAAuB;EAE3B,IAAIL,gBAAA,EAAkB;IACpB,IAAI;MACFI,cAAA,GAAiB,MAAMT,kBAAA,CAAmB;QACxCI,EAAA,EAAIA,EAAA,EAAIO,QAAA;QACRC,UAAA,EAAY;UACVC,MAAA,EAAQR;QACV;QACAG,GAAA,EAAK;UACH,GAAGA,GAAG;UACNF;QACF;MACF;MAEA,IAAID,gBAAA,CAAiBS,QAAQ,EAAEC,MAAA,EAAQ;QACrCL,oBAAA,GAAuB,MAAMV,kBAAA,CAAmB;UAC9CI,EAAA,EAAIA,EAAA,EAAIO,QAAA;UACRC,UAAA,EAAY;YACVC,MAAA,EAAQR;UACV;UACAG,GAAA,EAAK;YACH,GAAGA,GAAG;YACNF,IAAA,EAAM;cACJ,GAAGA,IAAI;cACPU,OAAA,EAAS;YACX;UACF;QACF,GAAGC,IAAI,CAAC,CAAC;UAAEC;QAAM,CAAE,KAAKA,MAAA,EAAQC,UAAA;MAClC;IACF,EAAE,OAAOC,KAAA,EAAO;MACdC,OAAA,CAAQD,KAAK,CAACA,KAAA,EAAO;MAAA;IACvB;EACF;EAEA,IAAIb,YAAA,EAAc;IAChB,IAAI;MACFE,cAAA,GAAiB,MAAMR,wBAAA,CAAyB;QAC9CM,YAAA;QACAC,GAAA,EAAK;UACH,GAAGA,GAAG;UACNF;QACF;MACF;MAEA,IAAIC,YAAA,CAAaO,QAAQ,EAAEC,MAAA,EAAQ;QACjCL,oBAAA,GAAuB,MAAMT,wBAAA,CAAyB;UACpDM,YAAA;UACAC,GAAA,EAAK;YACH,GAAGA,GAAG;YACNF,IAAA,EAAM;cACJ,GAAGA,IAAI;cACPU,OAAA,EAAS;YACX;UACF;QACF,GAAGC,IAAI,CAAC,CAAC;UAAEC;QAAM,CAAE,KAAKA,MAAA,EAAQC,UAAA;MAClC;IACF,EAAE,OAAOC,KAAA,EAAO;MACdC,OAAA,CAAQD,KAAK,CAACA,KAAA,EAAO;MAAA;IACvB;EACF;EAEA,MAAMxB,iBAAA,GAAoBC,oBAAA,CAAqB;IAC7CyB,cAAA,EAAgBjB,gBAAA,EAAkBkB,IAAA;IAClCd,cAAA;IACAe,UAAA,EAAYjB,YAAA,EAAcgB,IAAA;IAC1BzB,SAAA,EAAWC,YAAA,CAAa;MACtBK,EAAA;MACAkB,cAAA,EAAgBjB,gBAAA,EAAkBkB,IAAA;MAClCC,UAAA,EAAYjB,YAAA,EAAcgB;IAC5B;EACF;EAEA,OAAO;IACLd,cAAA;IACAC,oBAAA;IACAd;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"getDocumentPermissions.js","names":["hasSavePermission","getHasSavePermission","isEditing","getIsEditing","docAccessOperation","docAccessOperationGlobal","getDocumentPermissions","args","id","collectionConfig","data","globalConfig","req","docPermissions","hasPublishPermission","toString","collection","config","_status","versions","drafts","then","update","permission","error","console","collectionSlug","slug","globalSlug"],"sources":["../../../src/views/Document/getDocumentPermissions.tsx"],"sourcesContent":["import type {\n Data,\n DocumentPermissions,\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedGlobalConfig,\n} from 'payload'\n\nimport {\n hasSavePermission as getHasSavePermission,\n isEditing as getIsEditing,\n} from '@payloadcms/ui/shared'\nimport { docAccessOperation, docAccessOperationGlobal } from 'payload'\n\nexport const getDocumentPermissions = async (args: {\n collectionConfig?: SanitizedCollectionConfig\n data: Data\n globalConfig?: SanitizedGlobalConfig\n id?: number | string\n req: PayloadRequest\n}): Promise<{\n docPermissions: DocumentPermissions\n hasPublishPermission: boolean\n hasSavePermission: boolean\n}> => {\n const { id, collectionConfig, data = {}, globalConfig, req } = args\n\n let docPermissions: DocumentPermissions\n let hasPublishPermission = false\n\n if (collectionConfig) {\n try {\n docPermissions = await docAccessOperation({\n id: id?.toString(),\n collection: {\n config: collectionConfig,\n },\n req: {\n ...req,\n data: {\n ...data,\n _status: 'draft',\n },\n },\n })\n\n if (collectionConfig.versions?.drafts) {\n hasPublishPermission = await docAccessOperation({\n id: id?.toString(),\n collection: {\n config: collectionConfig,\n },\n req: {\n ...req,\n data: {\n ...data,\n _status: 'published',\n },\n },\n }).then(({ update }) => update?.permission)\n }\n } catch (error) {\n console.error(error) // eslint-disable-line no-console\n }\n }\n\n if (globalConfig) {\n try {\n docPermissions = await docAccessOperationGlobal({\n globalConfig,\n req: {\n ...req,\n data,\n },\n })\n\n if (globalConfig.versions?.drafts) {\n hasPublishPermission = await docAccessOperationGlobal({\n globalConfig,\n req: {\n ...req,\n data: {\n ...data,\n _status: 'published',\n },\n },\n }).then(({ update }) => update?.permission)\n }\n } catch (error) {\n console.error(error) // eslint-disable-line no-console\n }\n }\n\n const hasSavePermission = getHasSavePermission({\n collectionSlug: collectionConfig?.slug,\n docPermissions,\n globalSlug: globalConfig?.slug,\n isEditing: getIsEditing({\n id,\n collectionSlug: collectionConfig?.slug,\n globalSlug: globalConfig?.slug,\n }),\n })\n\n return {\n docPermissions,\n hasPublishPermission,\n hasSavePermission,\n }\n}\n"],"mappings":"AAQA,SACEA,iBAAA,IAAqBC,oBAAoB,EACzCC,SAAA,IAAaC,YAAY,QACpB;AACP,SAASC,kBAAkB,EAAEC,wBAAwB,QAAQ;AAE7D,OAAO,MAAMC,sBAAA,GAAyB,MAAOC,IAAA;EAW3C,MAAM;IAAEC,EAAE;IAAEC,gBAAgB;IAAEC,IAAA,GAAO,CAAC,CAAC;IAAEC,YAAY;IAAEC;EAAG,CAAE,GAAGL,IAAA;EAE/D,IAAIM,cAAA;EACJ,IAAIC,oBAAA,GAAuB;EAE3B,IAAIL,gBAAA,EAAkB;IACpB,IAAI;MACFI,cAAA,GAAiB,MAAMT,kBAAA,CAAmB;QACxCI,EAAA,EAAIA,EAAA,EAAIO,QAAA;QACRC,UAAA,EAAY;UACVC,MAAA,EAAQR;QACV;QACAG,GAAA,EAAK;UACH,GAAGA,GAAG;UACNF,IAAA,EAAM;YACJ,GAAGA,IAAI;YACPQ,OAAA,EAAS;UACX;QACF;MACF;MAEA,IAAIT,gBAAA,CAAiBU,QAAQ,EAAEC,MAAA,EAAQ;QACrCN,oBAAA,GAAuB,MAAMV,kBAAA,CAAmB;UAC9CI,EAAA,EAAIA,EAAA,EAAIO,QAAA;UACRC,UAAA,EAAY;YACVC,MAAA,EAAQR;UACV;UACAG,GAAA,EAAK;YACH,GAAGA,GAAG;YACNF,IAAA,EAAM;cACJ,GAAGA,IAAI;cACPQ,OAAA,EAAS;YACX;UACF;QACF,GAAGG,IAAI,CAAC,CAAC;UAAEC;QAAM,CAAE,KAAKA,MAAA,EAAQC,UAAA;MAClC;IACF,EAAE,OAAOC,KAAA,EAAO;MACdC,OAAA,CAAQD,KAAK,CAACA,KAAA,EAAO;MAAA;IACvB;EACF;EAEA,IAAIb,YAAA,EAAc;IAChB,IAAI;MACFE,cAAA,GAAiB,MAAMR,wBAAA,CAAyB;QAC9CM,YAAA;QACAC,GAAA,EAAK;UACH,GAAGA,GAAG;UACNF;QACF;MACF;MAEA,IAAIC,YAAA,CAAaQ,QAAQ,EAAEC,MAAA,EAAQ;QACjCN,oBAAA,GAAuB,MAAMT,wBAAA,CAAyB;UACpDM,YAAA;UACAC,GAAA,EAAK;YACH,GAAGA,GAAG;YACNF,IAAA,EAAM;cACJ,GAAGA,IAAI;cACPQ,OAAA,EAAS;YACX;UACF;QACF,GAAGG,IAAI,CAAC,CAAC;UAAEC;QAAM,CAAE,KAAKA,MAAA,EAAQC,UAAA;MAClC;IACF,EAAE,OAAOC,KAAA,EAAO;MACdC,OAAA,CAAQD,KAAK,CAACA,KAAA,EAAO;MAAA;IACvB;EACF;EAEA,MAAMxB,iBAAA,GAAoBC,oBAAA,CAAqB;IAC7CyB,cAAA,EAAgBjB,gBAAA,EAAkBkB,IAAA;IAClCd,cAAA;IACAe,UAAA,EAAYjB,YAAA,EAAcgB,IAAA;IAC1BzB,SAAA,EAAWC,YAAA,CAAa;MACtBK,EAAA;MACAkB,cAAA,EAAgBjB,gBAAA,EAAkBkB,IAAA;MAClCC,UAAA,EAAYjB,YAAA,EAAcgB;IAC5B;EACF;EAEA,OAAO;IACLd,cAAA;IACAC,oBAAA;IACAd;EACF;AACF","ignoreList":[]}
@@ -1,76 +1,78 @@
1
1
  @import '../../../../scss/styles.scss';
2
2
 
3
- .auth-fields {
4
- padding: calc(var(--base) * 2);
5
- background: var(--theme-elevation-50);
6
- display: flex;
7
- flex-direction: column;
8
- gap: var(--base);
9
-
10
- &__controls {
11
- display: flex;
12
- align-items: center;
13
- gap: calc(var(--base) / 2);
14
- flex-wrap: wrap;
15
- }
16
-
17
- &__changing-password {
3
+ @layer payload-default {
4
+ .auth-fields {
5
+ padding: calc(var(--base) * 2);
6
+ background: var(--theme-elevation-50);
18
7
  display: flex;
19
8
  flex-direction: column;
20
9
  gap: var(--base);
21
- }
22
10
 
23
- .btn {
24
- margin: 0;
25
- }
11
+ &__controls {
12
+ display: flex;
13
+ align-items: center;
14
+ gap: calc(var(--base) / 2);
15
+ flex-wrap: wrap;
16
+ }
26
17
 
27
- &__api-key-label {
28
- position: relative;
29
- }
18
+ &__changing-password {
19
+ display: flex;
20
+ flex-direction: column;
21
+ gap: var(--base);
22
+ }
30
23
 
31
- @include mid-break {
32
- padding: var(--base);
33
- gap: calc(var(--base) / 2);
24
+ .btn {
25
+ margin: 0;
26
+ }
34
27
 
35
- &__changing-password {
28
+ &__api-key-label {
29
+ position: relative;
30
+ }
31
+
32
+ @include mid-break {
33
+ padding: var(--base);
36
34
  gap: calc(var(--base) / 2);
35
+
36
+ &__changing-password {
37
+ gap: calc(var(--base) / 2);
38
+ }
37
39
  }
38
40
  }
39
- }
40
41
 
41
- .field-type.api-key {
42
- margin-bottom: var(--base);
42
+ .field-type.api-key {
43
+ margin-bottom: var(--base);
43
44
 
44
- input {
45
- @include formInput;
45
+ input {
46
+ @include formInput;
47
+ }
46
48
  }
47
- }
48
49
 
49
- @keyframes highlight {
50
- 0% {
51
- background: var(--theme-success-250);
52
- border: 1px solid var(--theme-success-500);
53
- }
50
+ @keyframes highlight {
51
+ 0% {
52
+ background: var(--theme-success-250);
53
+ border: 1px solid var(--theme-success-500);
54
+ }
54
55
 
55
- 20% {
56
- background: var(--theme-input-bg);
57
- border: 1px solid var(--theme-elevation-250);
58
- color: var(--theme-text);
59
- }
56
+ 20% {
57
+ background: var(--theme-input-bg);
58
+ border: 1px solid var(--theme-elevation-250);
59
+ color: var(--theme-text);
60
+ }
60
61
 
61
- 80% {
62
- background: var(--theme-input-bg);
63
- border: 1px solid var(--theme-elevation-250);
64
- color: var(--theme-text);
65
- }
62
+ 80% {
63
+ background: var(--theme-input-bg);
64
+ border: 1px solid var(--theme-elevation-250);
65
+ color: var(--theme-text);
66
+ }
66
67
 
67
- 100% {
68
- background: var(--theme-elevation-200);
69
- border: 1px solid transparent;
70
- color: var(--theme-elevation-400);
68
+ 100% {
69
+ background: var(--theme-elevation-200);
70
+ border: 1px solid transparent;
71
+ color: var(--theme-elevation-400);
72
+ }
71
73
  }
72
- }
73
74
 
74
- .highlight {
75
- animation: highlight 10s;
75
+ .highlight {
76
+ animation: highlight 10s;
77
+ }
76
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Edit/Default/index.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAA0C,MAAM,OAAO,CAAA;AAI9D,OAAO,cAAc,CAAA;AASrB,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAqQnC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Edit/Default/index.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAA6D,MAAM,OAAO,CAAA;AAMjF,OAAO,cAAc,CAAA;AASrB,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAycnC,CAAA"}
@@ -2,9 +2,11 @@
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { DocumentControls, DocumentFields, Form, OperationProvider, RenderComponent, Upload, useAuth, useConfig, useDocumentEvents, useDocumentInfo, useEditDepth, useUploadEdits } from '@payloadcms/ui';
5
- import { formatAdminURL, getFormState } from '@payloadcms/ui/shared';
5
+ import { formatAdminURL, getFormState, handleBackToDashboard, handleGoBack, handleTakeOver } from '@payloadcms/ui/shared';
6
6
  import { useRouter, useSearchParams } from 'next/navigation.js';
7
- import React, { Fragment, useCallback, useState } from 'react';
7
+ import React, { Fragment, useCallback, useEffect, useRef, useState } from 'react';
8
+ import { DocumentLocked } from '../../../elements/DocumentLocked/index.js';
9
+ import { DocumentTakeOver } from '../../../elements/DocumentTakeOver/index.js';
8
10
  import { LeaveWithoutSaving } from '../../../elements/LeaveWithoutSaving/index.js';
9
11
  import { Auth } from './Auth/index.js';
10
12
  import { SetDocumentStepNav } from './SetDocumentStepNav/index.js';
@@ -23,10 +25,12 @@ export const DefaultEditView = () => {
23
25
  BeforeDocument,
24
26
  BeforeFields,
25
27
  collectionSlug,
28
+ currentEditor,
26
29
  disableActions,
27
30
  disableCreate,
28
31
  disableLeaveWithoutSaving,
29
32
  docPermissions,
33
+ documentIsLocked,
30
34
  getDocPreferences,
31
35
  getVersions,
32
36
  globalSlug,
@@ -41,7 +45,11 @@ export const DefaultEditView = () => {
41
45
  onDuplicate,
42
46
  onSave: onSaveFromContext,
43
47
  redirectAfterDelete,
44
- redirectAfterDuplicate
48
+ redirectAfterDuplicate,
49
+ setCurrentEditor,
50
+ setDocumentIsLocked,
51
+ unlockDocument,
52
+ updateDocumentEditor
45
53
  } = useDocumentInfo();
46
54
  const {
47
55
  refreshCookieAsync,
@@ -81,15 +89,33 @@ export const DefaultEditView = () => {
81
89
  const operation = collectionSlug && !id ? 'create' : 'update';
82
90
  const auth = collectionConfig ? collectionConfig.auth : undefined;
83
91
  const upload = collectionConfig ? collectionConfig.upload : undefined;
84
- const preventLeaveWithoutSaving = (!(collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave) || !(globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave)) && !disableLeaveWithoutSaving;
85
- const classes = [baseClass, id && `${baseClass}--is-editing`];
92
+ const docConfig = collectionConfig || globalConfig;
93
+ const lockDocumentsProp = docConfig?.lockDocuments !== undefined ? docConfig?.lockDocuments : true;
94
+ const isLockingEnabled = lockDocumentsProp !== false;
95
+ let preventLeaveWithoutSaving = true;
96
+ if (collectionConfig) {
97
+ preventLeaveWithoutSaving = !(collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave);
98
+ } else if (globalConfig) {
99
+ preventLeaveWithoutSaving = !(globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave);
100
+ } else if (typeof disableLeaveWithoutSaving !== 'undefined') {
101
+ preventLeaveWithoutSaving = !disableLeaveWithoutSaving;
102
+ }
103
+ const [isReadOnlyForIncomingUser, setIsReadOnlyForIncomingUser] = useState(false);
104
+ const [showTakeOverModal, setShowTakeOverModal] = useState(false);
105
+ const documentLockStateRef = useRef({
106
+ hasShownLockedModal: false,
107
+ isLocked: false,
108
+ user: null
109
+ });
110
+ const [lastUpdateTime, setLastUpdateTime] = useState(Date.now());
111
+ const classes = [baseClass, (id || globalSlug) && `${baseClass}--is-editing`];
86
112
  if (globalSlug) {
87
113
  classes.push(`global-edit--${globalSlug}`);
88
114
  }
89
115
  if (collectionSlug) {
90
116
  classes.push(`collection-edit--${collectionSlug}`);
91
117
  }
92
- const [schemaPath, setSchemaPath] = React.useState(() => {
118
+ const [schemaPath, setSchemaPath] = useState(() => {
93
119
  if (operation === 'create' && auth && !auth.disableLocalStrategy) {
94
120
  return `_${entitySlug}.auth`;
95
121
  }
@@ -119,6 +145,10 @@ export const DefaultEditView = () => {
119
145
  operation: id ? 'update' : 'create'
120
146
  });
121
147
  }
148
+ // Unlock the document after save
149
+ if ((id || globalSlug) && isLockingEnabled) {
150
+ setDocumentIsLocked(false);
151
+ }
122
152
  if (!isEditing && depth < 2) {
123
153
  // Redirect to the same locale if it's been set
124
154
  const redirectRoute = formatAdminURL({
@@ -129,12 +159,22 @@ export const DefaultEditView = () => {
129
159
  } else {
130
160
  resetUploadEdits();
131
161
  }
132
- }, [onSaveFromContext, userSlug, reportUpdate, id, entitySlug, user, depth, collectionSlug, getVersions, isEditing, refreshCookieAsync, adminRoute, router, locale, resetUploadEdits]);
162
+ }, [onSaveFromContext, userSlug, reportUpdate, id, entitySlug, user, depth, collectionSlug, getVersions, isEditing, refreshCookieAsync, adminRoute, router, locale, resetUploadEdits, globalSlug, isLockingEnabled, setDocumentIsLocked]);
133
163
  const onChange = useCallback(async ({
134
164
  formState: prevFormState
135
165
  }) => {
166
+ const currentTime = Date.now();
167
+ const timeSinceLastUpdate = currentTime - lastUpdateTime;
168
+ const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds
169
+ ;
170
+ if (updateLastEdited) {
171
+ setLastUpdateTime(currentTime);
172
+ }
136
173
  const docPreferences = await getDocPreferences();
137
- return getFormState({
174
+ const {
175
+ lockedState,
176
+ state
177
+ } = await getFormState({
138
178
  apiRoute,
139
179
  body: {
140
180
  id,
@@ -143,11 +183,56 @@ export const DefaultEditView = () => {
143
183
  formState: prevFormState,
144
184
  globalSlug,
145
185
  operation,
146
- schemaPath
186
+ returnLockStatus: isLockingEnabled ? true : false,
187
+ schemaPath,
188
+ updateLastEdited
147
189
  },
148
190
  serverURL
149
191
  });
150
- }, [apiRoute, collectionSlug, schemaPath, getDocPreferences, globalSlug, id, operation, serverURL]);
192
+ setDocumentIsLocked(true);
193
+ if (isLockingEnabled) {
194
+ const previousOwnerId = documentLockStateRef.current?.user?.id;
195
+ if (lockedState) {
196
+ if (!documentLockStateRef.current || lockedState.user.id !== previousOwnerId) {
197
+ if (previousOwnerId === user.id && lockedState.user.id !== user.id) {
198
+ setShowTakeOverModal(true);
199
+ documentLockStateRef.current.hasShownLockedModal = true;
200
+ }
201
+ documentLockStateRef.current = documentLockStateRef.current = {
202
+ hasShownLockedModal: documentLockStateRef.current?.hasShownLockedModal || false,
203
+ isLocked: true,
204
+ user: lockedState.user
205
+ };
206
+ setCurrentEditor(lockedState.user);
207
+ }
208
+ }
209
+ }
210
+ return state;
211
+ }, [apiRoute, collectionSlug, schemaPath, getDocPreferences, globalSlug, id, operation, serverURL, user, documentLockStateRef, setCurrentEditor, isLockingEnabled, setDocumentIsLocked, lastUpdateTime]);
212
+ // Clean up when the component unmounts or when the document is unlocked
213
+ useEffect(() => {
214
+ return () => {
215
+ if (!isLockingEnabled) {
216
+ return;
217
+ }
218
+ const currentPath = window.location.pathname;
219
+ const documentId = id || globalSlug;
220
+ // Routes where we do NOT want to unlock the document
221
+ const stayWithinDocumentPaths = ['preview', 'api', 'versions'];
222
+ const isStayingWithinDocument = stayWithinDocumentPaths.some(path => currentPath.includes(path));
223
+ // Unlock the document only if we're actually navigating away from the document
224
+ if (documentId && documentIsLocked && !isStayingWithinDocument) {
225
+ // Check if this user is still the current editor
226
+ if (documentLockStateRef.current?.user?.id === user?.id) {
227
+ void unlockDocument(id, collectionSlug ?? globalSlug);
228
+ setDocumentIsLocked(false);
229
+ setCurrentEditor(null);
230
+ }
231
+ }
232
+ setShowTakeOverModal(false);
233
+ };
234
+ }, [collectionSlug, globalSlug, id, unlockDocument, user, setCurrentEditor, isLockingEnabled, documentIsLocked, setDocumentIsLocked]);
235
+ const shouldShowDocumentLockedModal = documentIsLocked && currentEditor && currentEditor.id !== user?.id && !isReadOnlyForIncomingUser && !showTakeOverModal && !documentLockStateRef.current?.hasShownLockedModal;
151
236
  return /*#__PURE__*/_jsx("main", {
152
237
  className: classes.filter(Boolean).join(' '),
153
238
  children: /*#__PURE__*/_jsx(OperationProvider, {
@@ -155,14 +240,38 @@ export const DefaultEditView = () => {
155
240
  children: /*#__PURE__*/_jsxs(Form, {
156
241
  action: action,
157
242
  className: `${baseClass}__form`,
158
- disabled: isInitializing || !hasSavePermission,
243
+ disabled: isReadOnlyForIncomingUser || isInitializing || !hasSavePermission,
159
244
  disableValidationOnSubmit: !validateBeforeSubmit,
160
245
  initialState: !isInitializing && initialState,
161
246
  isInitializing: isInitializing,
162
247
  method: id ? 'PATCH' : 'POST',
163
248
  onChange: [onChange],
164
249
  onSuccess: onSave,
165
- children: [BeforeDocument, preventLeaveWithoutSaving && /*#__PURE__*/_jsx(LeaveWithoutSaving, {}), /*#__PURE__*/_jsx(SetDocumentStepNav, {
250
+ children: [BeforeDocument, isLockingEnabled && shouldShowDocumentLockedModal && !isReadOnlyForIncomingUser && /*#__PURE__*/_jsx(DocumentLocked, {
251
+ handleGoBack: () => handleGoBack({
252
+ adminRoute,
253
+ collectionSlug,
254
+ router
255
+ }),
256
+ isActive: shouldShowDocumentLockedModal,
257
+ onReadOnly: () => {
258
+ setIsReadOnlyForIncomingUser(true);
259
+ setShowTakeOverModal(false);
260
+ },
261
+ onTakeOver: () => handleTakeOver(id, collectionSlug, globalSlug, user, false, updateDocumentEditor, setCurrentEditor, documentLockStateRef, isLockingEnabled),
262
+ updatedAt: lastUpdateTime,
263
+ user: currentEditor
264
+ }), isLockingEnabled && showTakeOverModal && /*#__PURE__*/_jsx(DocumentTakeOver, {
265
+ handleBackToDashboard: () => handleBackToDashboard({
266
+ adminRoute,
267
+ router
268
+ }),
269
+ isActive: showTakeOverModal,
270
+ onReadOnly: () => {
271
+ setIsReadOnlyForIncomingUser(true);
272
+ setShowTakeOverModal(false);
273
+ }
274
+ }), !isReadOnlyForIncomingUser && preventLeaveWithoutSaving && /*#__PURE__*/_jsx(LeaveWithoutSaving, {}), /*#__PURE__*/_jsx(SetDocumentStepNav, {
166
275
  collectionSlug: collectionConfig?.slug,
167
276
  globalSlug: globalConfig?.slug,
168
277
  id: id,
@@ -186,10 +295,13 @@ export const DefaultEditView = () => {
186
295
  onDrawerCreate: onDrawerCreate,
187
296
  onDuplicate: onDuplicate,
188
297
  onSave: onSave,
298
+ onTakeOver: () => handleTakeOver(id, collectionSlug, globalSlug, user, true, updateDocumentEditor, setCurrentEditor, documentLockStateRef, isLockingEnabled, setIsReadOnlyForIncomingUser),
189
299
  permissions: docPermissions,
300
+ readOnlyForIncomingUser: isReadOnlyForIncomingUser,
190
301
  redirectAfterDelete: redirectAfterDelete,
191
302
  redirectAfterDuplicate: redirectAfterDuplicate,
192
- slug: collectionConfig?.slug || globalConfig?.slug
303
+ slug: collectionConfig?.slug || globalConfig?.slug,
304
+ user: currentEditor
193
305
  }), /*#__PURE__*/_jsx(DocumentFields, {
194
306
  AfterFields: AfterFields,
195
307
  BeforeFields: BeforeFields || /*#__PURE__*/_jsxs(Fragment, {
@@ -204,6 +316,7 @@ export const DefaultEditView = () => {
204
316
  requirePassword: !id,
205
317
  setSchemaPath: setSchemaPath,
206
318
  setValidateBeforeSubmit: setValidateBeforeSubmit,
319
+ // eslint-disable-next-line react-compiler/react-compiler
207
320
  useAPIKey: auth.useAPIKey,
208
321
  username: data?.username,
209
322
  verify: auth.verify
@@ -219,7 +332,7 @@ export const DefaultEditView = () => {
219
332
  }),
220
333
  docPermissions: docPermissions,
221
334
  fields: (collectionConfig || globalConfig)?.fields,
222
- readOnly: !hasSavePermission,
335
+ readOnly: isReadOnlyForIncomingUser || !hasSavePermission,
223
336
  schemaPath: schemaPath
224
337
  }), AfterDocument]
225
338
  })