@payloadcms/ui 4.0.0-canary.35 → 4.0.0-canary.37

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 (237) hide show
  1. package/dist/css/app.css +1 -0
  2. package/dist/css/preflight.css +1 -0
  3. package/dist/css/spacing.css +3 -0
  4. package/dist/elements/AppHeader/index.css +3 -0
  5. package/dist/elements/Banner/index.css +4 -0
  6. package/dist/elements/Banner/index.d.ts.map +1 -1
  7. package/dist/elements/Banner/index.js +1 -0
  8. package/dist/elements/Banner/index.js.map +1 -1
  9. package/dist/elements/BulkUpload/ActionsBar/index.css +1 -0
  10. package/dist/elements/BulkUpload/AddingFilesView/index.css +2 -4
  11. package/dist/elements/BulkUpload/FileSidebar/index.css +1 -0
  12. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  13. package/dist/elements/BulkUpload/FormsManager/index.js +12 -7
  14. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  15. package/dist/elements/BulkUpload/index.css +2 -0
  16. package/dist/elements/Collapsible/index.css +1 -0
  17. package/dist/elements/DatePicker/index.css +2 -0
  18. package/dist/elements/Dialog/index.css +1 -0
  19. package/dist/elements/DocumentControls/index.css +1 -0
  20. package/dist/elements/DocumentFields/index.css +2 -0
  21. package/dist/elements/DocumentHeader/Tabs/index.css +1 -0
  22. package/dist/elements/DocumentHeader/index.css +1 -0
  23. package/dist/elements/EditUpload/index.css +1 -1
  24. package/dist/elements/FieldDiffContainer/index.css +1 -0
  25. package/dist/elements/FieldDiffLabel/index.css +1 -0
  26. package/dist/elements/FileDetails/StaticFileDetails/index.css +2 -0
  27. package/dist/elements/HTMLDiff/index.css +1 -0
  28. package/dist/elements/ItemsDrawer/index.css +3 -0
  29. package/dist/elements/ListControls/index.css +1 -0
  30. package/dist/elements/ListControls/index.d.ts.map +1 -1
  31. package/dist/elements/ListControls/index.js +7 -1
  32. package/dist/elements/ListControls/index.js.map +1 -1
  33. package/dist/elements/ListControls/types.d.ts +3 -1
  34. package/dist/elements/ListControls/types.d.ts.map +1 -1
  35. package/dist/elements/ListControls/types.js.map +1 -1
  36. package/dist/elements/ListControlsBar/index.css +1 -0
  37. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +1 -1
  38. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
  39. package/dist/elements/LivePreview/Window/index.css +1 -0
  40. package/dist/elements/Nav/getNavPrefs.d.ts.map +1 -1
  41. package/dist/elements/Nav/getNavPrefs.js +2 -0
  42. package/dist/elements/Nav/getNavPrefs.js.map +1 -1
  43. package/dist/elements/Nav/index.css +2 -0
  44. package/dist/elements/PageControls/index.css +1 -0
  45. package/dist/elements/PillSelector/index.css +1 -0
  46. package/dist/elements/PreviewSizes/index.css +2 -0
  47. package/dist/elements/PublishButton/index.css +1 -0
  48. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  49. package/dist/elements/PublishButton/index.js +11 -25
  50. package/dist/elements/PublishButton/index.js.map +1 -1
  51. package/dist/elements/QueryPresets/fields/Heading/index.css +1 -0
  52. package/dist/elements/RenderTitle/index.css +1 -0
  53. package/dist/elements/Table/index.css +1 -0
  54. package/dist/elements/TableSection/index.css +1 -0
  55. package/dist/elements/Tabs/index.css +1 -0
  56. package/dist/elements/Thumbnail/index.css +1 -0
  57. package/dist/elements/TimezonePicker/index.css +1 -0
  58. package/dist/elements/Tooltip/index.css +7 -0
  59. package/dist/elements/WhereBuilder/Condition/index.css +1 -0
  60. package/dist/elements/WhereBuilder/index.css +2 -0
  61. package/dist/fields/Array/index.css +1 -0
  62. package/dist/fields/Blocks/index.css +1 -0
  63. package/dist/fields/Group/index.css +1 -0
  64. package/dist/fields/Row/index.css +2 -0
  65. package/dist/fields/Tabs/index.css +1 -0
  66. package/dist/forms/RenderFields/index.css +1 -0
  67. package/dist/hooks/useControllableState.js +3 -3
  68. package/dist/hooks/useControllableState.js.map +1 -1
  69. package/dist/layouts/Root/index.d.ts +3 -6
  70. package/dist/layouts/Root/index.d.ts.map +1 -1
  71. package/dist/layouts/Root/index.js +2 -4
  72. package/dist/layouts/Root/index.js.map +1 -1
  73. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  74. package/dist/providers/DocumentInfo/index.js +30 -19
  75. package/dist/providers/DocumentInfo/index.js.map +1 -1
  76. package/dist/providers/Locale/index.d.ts.map +1 -1
  77. package/dist/providers/Locale/index.js +6 -7
  78. package/dist/providers/Locale/index.js.map +1 -1
  79. package/dist/styles.css +5 -1
  80. package/dist/templates/Default/Wrapper/index.css +2 -0
  81. package/dist/templates/Default/index.css +1 -0
  82. package/dist/utilities/getDocPreferences.d.ts.map +1 -1
  83. package/dist/utilities/getDocPreferences.js +1 -0
  84. package/dist/utilities/getDocPreferences.js.map +1 -1
  85. package/dist/utilities/getPreferences.d.ts.map +1 -1
  86. package/dist/utilities/getPreferences.js +1 -0
  87. package/dist/utilities/getPreferences.js.map +1 -1
  88. package/dist/utilities/getVersions.d.ts.map +1 -1
  89. package/dist/utilities/getVersions.js +8 -0
  90. package/dist/utilities/getVersions.js.map +1 -1
  91. package/dist/utilities/handleAuthRedirect.d.ts.map +1 -1
  92. package/dist/utilities/handleAuthRedirect.js +4 -1
  93. package/dist/utilities/handleAuthRedirect.js.map +1 -1
  94. package/dist/utilities/isPathMatchingRoute.d.ts.map +1 -1
  95. package/dist/utilities/isPathMatchingRoute.js +7 -5
  96. package/dist/utilities/isPathMatchingRoute.js.map +1 -1
  97. package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
  98. package/dist/utilities/schedulePublishHandler.js +2 -0
  99. package/dist/utilities/schedulePublishHandler.js.map +1 -1
  100. package/dist/utilities/upsertPreferences.d.ts.map +1 -1
  101. package/dist/utilities/upsertPreferences.js +3 -0
  102. package/dist/utilities/upsertPreferences.js.map +1 -1
  103. package/dist/views/API/index.css +1 -0
  104. package/dist/views/Dashboard/Default/ModularDashboard/index.css +2 -0
  105. package/dist/views/Document/handleServerFunction.d.ts.map +1 -1
  106. package/dist/views/Document/handleServerFunction.js +1 -0
  107. package/dist/views/Document/handleServerFunction.js.map +1 -1
  108. package/dist/views/Edit/index.css +1 -0
  109. package/dist/views/HierarchyList/HierarchyTable/SlotTable.css +1 -0
  110. package/dist/views/HierarchyList/index.css +1 -0
  111. package/dist/views/List/ListHeader/index.css +1 -0
  112. package/dist/views/List/ListHeader/index.d.ts +0 -1
  113. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  114. package/dist/views/List/ListHeader/index.js +2 -6
  115. package/dist/views/List/ListHeader/index.js.map +1 -1
  116. package/dist/views/List/enrichDocsWithVersionStatus.d.ts.map +1 -1
  117. package/dist/views/List/enrichDocsWithVersionStatus.js +1 -0
  118. package/dist/views/List/enrichDocsWithVersionStatus.js.map +1 -1
  119. package/dist/views/List/handleServerFunction.d.ts.map +1 -1
  120. package/dist/views/List/handleServerFunction.js +1 -0
  121. package/dist/views/List/handleServerFunction.js.map +1 -1
  122. package/dist/views/List/index.client.d.ts.map +1 -1
  123. package/dist/views/List/index.client.js +3 -2
  124. package/dist/views/List/index.client.js.map +1 -1
  125. package/dist/views/List/index.css +2 -0
  126. package/dist/views/NotFound/client.d.ts +2 -0
  127. package/dist/views/NotFound/client.d.ts.map +1 -0
  128. package/dist/views/NotFound/client.js +4 -0
  129. package/dist/views/NotFound/client.js.map +1 -0
  130. package/dist/views/Root/index.d.ts.map +1 -1
  131. package/dist/views/Root/index.js +26 -19
  132. package/dist/views/Root/index.js.map +1 -1
  133. package/dist/views/Version/Default/index.css +2 -0
  134. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.css +8 -0
  135. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.d.ts.map +1 -1
  136. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js +1 -0
  137. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js.map +1 -1
  138. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.css +1 -0
  139. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.css +1 -0
  140. package/dist/views/Version/RenderFieldsToDiff/index.css +2 -0
  141. package/dist/views/Version/Restore/index.d.ts.map +1 -1
  142. package/dist/views/Version/Restore/index.js +9 -6
  143. package/dist/views/Version/Restore/index.js.map +1 -1
  144. package/dist/views/Versions/VersionPillLabel/index.css +1 -0
  145. package/dist/views/Versions/index.css +1 -0
  146. package/dist/widgets/CollectionCards/index.css +4 -0
  147. package/package.json +11 -6
  148. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js +0 -120
  149. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js.map +0 -1
  150. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js +0 -144
  151. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js.map +0 -1
  152. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +0 -885
  153. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +0 -1
  154. package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js +0 -87
  155. package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js.map +0 -1
  156. package/dist/elements/CommandPalette/buildActions.spec.js +0 -158
  157. package/dist/elements/CommandPalette/buildActions.spec.js.map +0 -1
  158. package/dist/elements/CommandPalette/highlightLabel.spec.js +0 -78
  159. package/dist/elements/CommandPalette/highlightLabel.spec.js.map +0 -1
  160. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js +0 -143
  161. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js.map +0 -1
  162. package/dist/elements/Toasts/fieldErrors.spec.js +0 -46
  163. package/dist/elements/Toasts/fieldErrors.spec.js.map +0 -1
  164. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.spec.js +0 -152
  165. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.spec.js.map +0 -1
  166. package/dist/elements/WhereBuilder/conditionValue.spec.js +0 -65
  167. package/dist/elements/WhereBuilder/conditionValue.spec.js.map +0 -1
  168. package/dist/fields/Upload/Input.spec.js +0 -242
  169. package/dist/fields/Upload/Input.spec.js.map +0 -1
  170. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.d.ts +0 -2
  171. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.d.ts.map +0 -1
  172. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js +0 -67
  173. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js.map +0 -1
  174. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js +0 -150
  175. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js.map +0 -1
  176. package/dist/layouts/Root/index.spec.js +0 -20
  177. package/dist/layouts/Root/index.spec.js.map +0 -1
  178. package/dist/providers/Auth/authSessionRequests.spec.js +0 -121
  179. package/dist/providers/Auth/authSessionRequests.spec.js.map +0 -1
  180. package/dist/providers/Auth/sessionActivity.spec.js +0 -44
  181. package/dist/providers/Auth/sessionActivity.spec.js.map +0 -1
  182. package/dist/providers/Auth/tabSessionSync/index.spec.js +0 -463
  183. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +0 -1
  184. package/dist/providers/Auth/useAuthSessionTimers.spec.js +0 -311
  185. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +0 -1
  186. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +0 -44
  187. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +0 -1
  188. package/dist/providers/TableColumns/buildColumnState/index.spec.js +0 -40
  189. package/dist/providers/TableColumns/buildColumnState/index.spec.js.map +0 -1
  190. package/dist/utilities/appendCacheTag.spec.js +0 -34
  191. package/dist/utilities/appendCacheTag.spec.js.map +0 -1
  192. package/dist/utilities/formatAbsoluteURL.spec.js +0 -27
  193. package/dist/utilities/formatAbsoluteURL.spec.js.map +0 -1
  194. package/dist/utilities/formatMetadata.spec.js +0 -83
  195. package/dist/utilities/formatMetadata.spec.js.map +0 -1
  196. package/dist/utilities/fuzzyMatch.spec.js +0 -38
  197. package/dist/utilities/fuzzyMatch.spec.js.map +0 -1
  198. package/dist/utilities/getRequestLocale.d.ts +0 -7
  199. package/dist/utilities/getRequestLocale.d.ts.map +0 -1
  200. package/dist/utilities/getRequestLocale.js +0 -20
  201. package/dist/utilities/getRequestLocale.js.map +0 -1
  202. package/dist/utilities/initReq.d.ts +0 -16
  203. package/dist/utilities/initReq.d.ts.map +0 -1
  204. package/dist/utilities/initReq.js +0 -146
  205. package/dist/utilities/initReq.js.map +0 -1
  206. package/dist/utilities/initReq.spec.js +0 -226
  207. package/dist/utilities/initReq.spec.js.map +0 -1
  208. package/dist/utilities/isAbsoluteURL.spec.js +0 -11
  209. package/dist/utilities/isAbsoluteURL.spec.js.map +0 -1
  210. package/dist/utilities/isCustomAdminView.spec.js +0 -90
  211. package/dist/utilities/isCustomAdminView.spec.js.map +0 -1
  212. package/dist/utilities/isHttpURL.spec.js +0 -25
  213. package/dist/utilities/isHttpURL.spec.js.map +0 -1
  214. package/dist/utilities/isPathMatchingRoute.spec.js +0 -178
  215. package/dist/utilities/isPathMatchingRoute.spec.js.map +0 -1
  216. package/dist/utilities/isPublicAdminRoute.spec.js +0 -34
  217. package/dist/utilities/isPublicAdminRoute.spec.js.map +0 -1
  218. package/dist/utilities/normalizeRelationshipValue.spec.js +0 -373
  219. package/dist/utilities/normalizeRelationshipValue.spec.js.map +0 -1
  220. package/dist/utilities/recentlyViewed.spec.js +0 -92
  221. package/dist/utilities/recentlyViewed.spec.js.map +0 -1
  222. package/dist/utilities/selectiveCache.d.ts +0 -12
  223. package/dist/utilities/selectiveCache.d.ts.map +0 -1
  224. package/dist/utilities/selectiveCache.js +0 -37
  225. package/dist/utilities/selectiveCache.js.map +0 -1
  226. package/dist/views/Root/getCustomCollectionViewByRoute.spec.js +0 -168
  227. package/dist/views/Root/getCustomCollectionViewByRoute.spec.js.map +0 -1
  228. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js +0 -258
  229. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js.map +0 -1
  230. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +0 -915
  231. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +0 -1
  232. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js +0 -47
  233. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js.map +0 -1
  234. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +0 -125
  235. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +0 -1
  236. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js +0 -100
  237. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js.map +0 -1
@@ -55,6 +55,7 @@
55
55
  gap: var(--spacer-2);
56
56
  }
57
57
 
58
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
58
59
  @media (max-width: 768px) {
59
60
  .condition {
60
61
  display: block;
@@ -48,6 +48,7 @@
48
48
  grid-column: 2 / -1;
49
49
  }
50
50
 
51
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
51
52
  @media (max-width: 768px) {
52
53
  .where-builder__or-filters {
53
54
  display: flex;
@@ -66,6 +67,7 @@
66
67
  }
67
68
  }
68
69
 
70
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
69
71
  @media (max-width: 768px) {
70
72
  .where-builder {
71
73
  padding-top: var(--spacer-2);
@@ -39,6 +39,7 @@
39
39
  padding: 0;
40
40
  }
41
41
 
42
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
42
43
  @media (max-width: 768px) {
43
44
  & > li:not(:last-child) {
44
45
  display: none;
@@ -67,6 +67,7 @@
67
67
  padding: 0;
68
68
  }
69
69
 
70
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
70
71
  @media (max-width: 768px) {
71
72
  & > li:not(:last-child) {
72
73
  display: none;
@@ -123,6 +123,7 @@
123
123
  padding-top: 0;
124
124
  }
125
125
 
126
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
126
127
  @media (max-width: 768px) {
127
128
  .group-field--top-level {
128
129
  &::before {
@@ -29,6 +29,7 @@
29
29
  }
30
30
  }
31
31
 
32
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
32
33
  @media (max-width: 1024px) {
33
34
  .row__fields {
34
35
  flex-direction: column;
@@ -39,6 +40,7 @@
39
40
  > * {
40
41
  margin-left: 0;
41
42
  margin-right: 0;
43
+ /* stylelint-disable-next-line plugin/no-important -- TODO: pre-existing; revisit whether specificity can win instead */
42
44
  width: 100% !important;
43
45
  padding-left: 0;
44
46
  padding-right: 0;
@@ -65,6 +65,7 @@
65
65
  margin-bottom: var(--spacer-4);
66
66
  }
67
67
 
68
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
68
69
  @media (max-width: 768px) {
69
70
  .tabs-field--within-collapsible {
70
71
  margin-left: calc(var(--gutter-h) * -1);
@@ -66,6 +66,7 @@
66
66
  }
67
67
  }
68
68
 
69
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
69
70
  @media (max-width: 768px) {
70
71
  .render-fields {
71
72
  --spacing-field: var(--spacer-2-5);
@@ -5,15 +5,15 @@ import { useEffect, useRef, useState } from 'react';
5
5
  export function useControllableState(propValue, fallbackValue) {
6
6
  const $ = _c(5);
7
7
  const [localValue, setLocalValue] = useState(propValue);
8
- const initialRenderRef = useRef(true);
8
+ const previousPropValue = useRef(propValue);
9
9
  let t0;
10
10
  let t1;
11
11
  if ($[0] !== propValue) {
12
12
  t0 = () => {
13
- if (initialRenderRef.current) {
14
- initialRenderRef.current = false;
13
+ if (Object.is(previousPropValue.current, propValue)) {
15
14
  return;
16
15
  }
16
+ previousPropValue.current = propValue;
17
17
  setLocalValue(propValue);
18
18
  };
19
19
  t1 = [propValue];
@@ -1 +1 @@
1
- {"version":3,"file":"useControllableState.js","names":["c","_c","useEffect","useRef","useState","useControllableState","propValue","fallbackValue","$","localValue","setLocalValue","initialRenderRef","t0","t1","current","t2","t3"],"sources":["../../src/hooks/useControllableState.ts"],"sourcesContent":["'use client'\nimport { useEffect, useRef, useState } from 'react'\n\n/**\n * A hook for managing state that can be controlled by props but also overridden locally.\n * Props always take precedence if they change, but local state can override them temporarily.\n *\n * @param propValue - The controlled value from props\n * @param fallbackValue - Value to use when propValue is null or undefined\n *\n * @internal - may change or be removed without a major version bump\n */\nexport function useControllableState<T, D>(\n propValue: T,\n fallbackValue: D,\n): [T extends NonNullable<T> ? T : D | NonNullable<T>, (value: ((prev: T) => T) | T) => void]\n\nexport function useControllableState<T>(propValue: T): [T, (value: ((prev: T) => T) | T) => void]\n\nexport function useControllableState<T, D>(\n propValue: T,\n fallbackValue?: D,\n): [T extends NonNullable<T> ? T : D | NonNullable<T>, (value: ((prev: T) => T) | T) => void] {\n const [localValue, setLocalValue] = useState<T>(propValue)\n const initialRenderRef = useRef(true)\n\n useEffect(() => {\n if (initialRenderRef.current) {\n initialRenderRef.current = false\n return\n }\n\n setLocalValue(propValue)\n }, [propValue])\n\n return [localValue ?? fallbackValue, setLocalValue] as [\n T extends NonNullable<T> ? T : D | NonNullable<T>,\n (value: ((prev: T) => T) | T) => void,\n ]\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AACA,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAkB5C,OAAO,SAAAC,qBAAAC,SAAA,EAAAC,aAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAIL,OAAAQ,UAAA,EAAAC,aAAA,IAAoCN,QAAA,CAAYE,SAAA;EAChD,MAAAK,gBAAA,GAAyBR,MAAA,KAAO;EAAA,IAAAS,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAL,CAAA,QAAAF,SAAA;IAEtBM,EAAA,GAAAA,CAAA;MAAA,IACJD,gBAAA,CAAAG,OAAA;QACFH,gBAAA,CAAAG,OAAA;QAAA;MAAA;MAIFJ,aAAA,CAAcJ,SAAA;IAAA;IACbO,EAAA,IAACP,SAAA;IAAUE,CAAA,MAAAF,SAAA;IAAAE,CAAA,MAAAI,EAAA;IAAAJ,CAAA,MAAAK,EAAA;EAAA;IAAAD,EAAA,GAAAJ,CAAA;IAAAK,EAAA,GAAAL,CAAA;EAAA;EAPdN,SAAA,CAAUU,EAOV,EAAGC,EAAW;EAEN,MAAAE,EAAA,GAAAN,UAAA,IAAcF,aAAA;EAAA,IAAAS,EAAA;EAAA,IAAAR,CAAA,QAAAO,EAAA;IAAfC,EAAA,IAACD,EAAc,EAAeL,aAAA;IAAcF,CAAA,MAAAO,EAAA;IAAAP,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAAA,OAA5CQ,EAA4C;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"useControllableState.js","names":["c","_c","useEffect","useRef","useState","useControllableState","propValue","fallbackValue","$","localValue","setLocalValue","previousPropValue","t0","t1","Object","is","current","t2","t3"],"sources":["../../src/hooks/useControllableState.ts"],"sourcesContent":["'use client'\nimport { useEffect, useRef, useState } from 'react'\n\n/**\n * A hook for managing state that can be controlled by props but also overridden locally.\n * Props always take precedence if they change, but local state can override them temporarily.\n *\n * @param propValue - The controlled value from props\n * @param fallbackValue - Value to use when propValue is null or undefined\n *\n * @internal - may change or be removed without a major version bump\n */\nexport function useControllableState<T, D>(\n propValue: T,\n fallbackValue: D,\n): [T extends NonNullable<T> ? T : D | NonNullable<T>, (value: ((prev: T) => T) | T) => void]\n\nexport function useControllableState<T>(propValue: T): [T, (value: ((prev: T) => T) | T) => void]\n\nexport function useControllableState<T, D>(\n propValue: T,\n fallbackValue?: D,\n): [T extends NonNullable<T> ? T : D | NonNullable<T>, (value: ((prev: T) => T) | T) => void] {\n const [localValue, setLocalValue] = useState<T>(propValue)\n const previousPropValue = useRef(propValue)\n\n useEffect(() => {\n if (Object.is(previousPropValue.current, propValue)) {\n return\n }\n\n previousPropValue.current = propValue\n setLocalValue(propValue)\n }, [propValue])\n\n return [localValue ?? fallbackValue, setLocalValue] as [\n T extends NonNullable<T> ? T : D | NonNullable<T>,\n (value: ((prev: T) => T) | T) => void,\n ]\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AACA,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAkB5C,OAAO,SAAAC,qBAAAC,SAAA,EAAAC,aAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAIL,OAAAQ,UAAA,EAAAC,aAAA,IAAoCN,QAAA,CAAYE,SAAA;EAChD,MAAAK,iBAAA,GAA0BR,MAAA,CAAOG,SAAA;EAAA,IAAAM,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAL,CAAA,QAAAF,SAAA;IAEvBM,EAAA,GAAAA,CAAA;MAAA,IACJE,MAAA,CAAAC,EAAA,CAAUJ,iBAAA,CAAAK,OAAA,EAA2BV,SAAA;QAAA;MAAA;MAIzCK,iBAAA,CAAAK,OAAA,GAA4BV,SAAA;MAC5BI,aAAA,CAAcJ,SAAA;IAAA;IACbO,EAAA,IAACP,SAAA;IAAUE,CAAA,MAAAF,SAAA;IAAAE,CAAA,MAAAI,EAAA;IAAAJ,CAAA,MAAAK,EAAA;EAAA;IAAAD,EAAA,GAAAJ,CAAA;IAAAK,EAAA,GAAAL,CAAA;EAAA;EAPdN,SAAA,CAAUU,EAOV,EAAGC,EAAW;EAEN,MAAAI,EAAA,GAAAR,UAAA,IAAcF,aAAA;EAAA,IAAAW,EAAA;EAAA,IAAAV,CAAA,QAAAS,EAAA;IAAfC,EAAA,IAACD,EAAc,EAAeP,aAAA;IAAcF,CAAA,MAAAS,EAAA;IAAAT,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EAAA,OAA5CU,EAA4C;AAAA","ignoreList":[]}
@@ -1,4 +1,5 @@
1
- import type { ImportMap, SanitizedConfig, ServerAdapter, ServerFunctionClient } from 'payload';
1
+ import type { ImportMap, InitReqResult, SanitizedConfig, ServerFunctionClient } from 'payload';
2
+ import type { InitReqArgs } from 'payload/internal';
2
3
  import React from 'react';
3
4
  import { type CheckDependenciesArgs } from '../../utilities/checkDependencies.js';
4
5
  import '@payloadcms/ui/css/app.css';
@@ -44,6 +45,7 @@ type RootLayoutProps = {
44
45
  readonly head?: React.ReactNode;
45
46
  readonly htmlProps?: React.HtmlHTMLAttributes<HTMLHtmlElement>;
46
47
  readonly importMap: ImportMap;
48
+ readonly initReq: (args: Omit<InitReqArgs, 'cache' | 'serverAdapter'>) => Promise<InitReqResult>;
47
49
  /**
48
50
  * Client router adapter. Caller supplies a framework-specific provider
49
51
  * (for Next.js use the `NextRouterAdapter` exported from `@payloadcms/next`).
@@ -51,11 +53,6 @@ type RootLayoutProps = {
51
53
  readonly RouterAdapter: React.FC<{
52
54
  children: React.ReactNode;
53
55
  }>;
54
- /**
55
- * Server adapter providing framework-specific access to headers, cookies, redirects,
56
- * and other server APIs (for Next.js use `nextServerAdapter` from `@payloadcms/next`).
57
- */
58
- readonly serverAdapter: ServerAdapter;
59
56
  readonly serverFunction: ServerFunctionClient;
60
57
  };
61
58
  export declare const RootLayout: (props: RootLayoutProps) => React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/Root/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAET,eAAe,EACf,aAAa,EACb,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAGhB,OAAO,KAAmB,MAAM,OAAO,CAAA;AAKvC,OAAO,EAAqB,KAAK,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;AAUpG,OAAO,4BAA4B,CAAA;AAEnC,KAAK,IAAI,GAAG;IACV,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,QAAQ;IACnB,WAAW;IACX,KAAK;CACN,CAAA;AAED,KAAK,eAAe,GAAG;IACrB;;;;OAIG;IACH,QAAQ,CAAC,0BAA0B,CAAC,EAAE,qBAAqB,CAAA;IAC3D,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACzC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;IACvB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAA;IAC9D,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC/D;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAA;IACrC,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAA;CAC9C,CAAA;AAED,eAAO,MAAM,UAAU,UAAW,eAAe,sBAUhD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/Root/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EAEb,eAAe,EACf,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAGnD,OAAO,KAAmB,MAAM,OAAO,CAAA;AAKvC,OAAO,EAAqB,KAAK,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;AASpG,OAAO,4BAA4B,CAAA;AAEnC,KAAK,IAAI,GAAG;IACV,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,QAAQ;IACnB,WAAW;IACX,KAAK;CACN,CAAA;AAED,KAAK,eAAe,GAAG;IACrB;;;;OAIG;IACH,QAAQ,CAAC,0BAA0B,CAAC,EAAE,qBAAqB,CAAA;IAC3D,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACzC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;IACvB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAA;IAC9D,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,eAAe,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IAChG;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC/D,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAA;CAC9C,CAAA;AAED,eAAO,MAAM,UAAU,UAAW,eAAe,sBAUhD,CAAA"}
@@ -10,7 +10,6 @@ import { getLanguageDir } from '../../utilities/getLanguageDir.js';
10
10
  import { getRequestEmbed } from '../../utilities/getRequestEmbed.js';
11
11
  import { getRequestHighContrast } from '../../utilities/getRequestHighContrast.js';
12
12
  import { getRequestTheme } from '../../utilities/getRequestTheme.js';
13
- import { initReq } from '../../utilities/initReq.js';
14
13
  import { NestProviders } from './NestProviders.js';
15
14
  import { getViewportMeta } from './viewport.js';
16
15
  // eslint-disable-next-line payload/no-imports-from-self -- Self-import via package path ensures consumer's bundler resolves the full CSS chain (design tokens, preflight, etc.) in prod builds
@@ -39,8 +38,8 @@ const RootLayoutContent = async ({
39
38
  head: headFromProps,
40
39
  htmlProps = {},
41
40
  importMap,
41
+ initReq,
42
42
  RouterAdapter,
43
- serverAdapter,
44
43
  serverFunction
45
44
  }) => {
46
45
  const {
@@ -58,8 +57,7 @@ const RootLayoutContent = async ({
58
57
  } = await initReq({
59
58
  configPromise,
60
59
  importMap,
61
- key: 'RootLayout',
62
- serverAdapter
60
+ key: 'RootLayout'
63
61
  });
64
62
  const theme = getRequestTheme({
65
63
  config,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["applyLocaleFiltering","React","Suspense","getNavPrefs","ProgressBar","RootProvider","checkDependencies","getClientConfig","getLanguageDir","getRequestEmbed","getRequestHighContrast","getRequestTheme","initReq","NestProviders","getViewportMeta","metadata","description","title","RootLayout","props","additionalDependencyChecks","content","_jsx","RootLayoutContent","process","env","PAYLOAD_CACHE_COMPONENTS_ENABLED","fallback","children","config","configPromise","fonts","head","headFromProps","htmlProps","importMap","RouterAdapter","serverAdapter","serverFunction","cookies","headers","languageCode","permissions","req","payload","user","key","theme","highContrastMode","dir","embed","languageOptions","Object","entries","i18n","supportedLanguages","reduce","acc","language","languageConfig","keys","includes","push","label","translations","general","thisLanguage","value","navPrefs","clientConfig","fontClassNames","map","f","variable","className","filter","Boolean","viewportMeta","get","undefined","_jsxs","join","lang","suppressHydrationWarning","admin","dateFNSKey","fallbackLang","fallbackLanguage","isNavOpen","open","locale","Array","isArray","components","providers","length","serverProps","server","id"],"sources":["../../../src/layouts/Root/index.tsx"],"sourcesContent":["import type {\n ImportMap,\n LanguageOptions,\n SanitizedConfig,\n ServerAdapter,\n ServerFunctionClient,\n} from 'payload'\n\nimport { applyLocaleFiltering } from 'payload/shared'\nimport React, { Suspense } from 'react'\n\nimport { getNavPrefs } from '../../elements/Nav/getNavPrefs.js'\n// eslint-disable-next-line payload/no-imports-from-exports-dir -- Server component must reference exports/client bundle for proper client boundary in prod builds\nimport { ProgressBar, RootProvider } from '../../exports/client/index.js'\nimport { checkDependencies, type CheckDependenciesArgs } from '../../utilities/checkDependencies.js'\nimport { getClientConfig } from '../../utilities/getClientConfig.js'\nimport { getLanguageDir } from '../../utilities/getLanguageDir.js'\nimport { getRequestEmbed } from '../../utilities/getRequestEmbed.js'\nimport { getRequestHighContrast } from '../../utilities/getRequestHighContrast.js'\nimport { getRequestTheme } from '../../utilities/getRequestTheme.js'\nimport { initReq } from '../../utilities/initReq.js'\nimport { NestProviders } from './NestProviders.js'\nimport { getViewportMeta } from './viewport.js'\n// eslint-disable-next-line payload/no-imports-from-self -- Self-import via package path ensures consumer's bundler resolves the full CSS chain (design tokens, preflight, etc.) in prod builds\nimport '@payloadcms/ui/css/app.css'\n\ntype Font = {\n className?: string\n variable?: string\n}\n\nexport const metadata = {\n description: 'Generated by Next.js',\n title: 'Next.js',\n}\n\ntype RootLayoutProps = {\n /**\n * Framework-specific peer-dependency version constraints, merged on top of the\n * universal React/react-dom checks. Each framework adapter supplies its own\n * (e.g. Next.js passes `{ dependencyVersions: { next: { version: '>=15.0.0' } } }`).\n */\n readonly additionalDependencyChecks?: CheckDependenciesArgs\n readonly children: React.ReactNode\n readonly config: Promise<SanitizedConfig>\n /**\n * Fonts to apply to the admin `<html>` element. Each entry's\n * `variable ?? className` is appended to the `<html>` class list.\n * Framework-specific font loaders (e.g. `next/font`) are supplied by the caller.\n */\n readonly fonts?: Font[]\n /**\n * Custom content to render inside the admin panel's `<head>` element.\n *\n * Use this to inject scripts, meta tags, or links — for example, analytics\n * snippets via `next/script`, custom favicons, or preconnect hints.\n *\n * @example\n * ```tsx\n * import Script from 'next/script'\n *\n * <RootLayout\n * head={<Script src=\"https://example.com/analytics.js\" strategy=\"afterInteractive\" />}\n * {...rest}\n * />\n * ```\n */\n readonly head?: React.ReactNode\n readonly htmlProps?: React.HtmlHTMLAttributes<HTMLHtmlElement>\n readonly importMap: ImportMap\n /**\n * Client router adapter. Caller supplies a framework-specific provider\n * (for Next.js use the `NextRouterAdapter` exported from `@payloadcms/next`).\n */\n readonly RouterAdapter: React.FC<{ children: React.ReactNode }>\n /**\n * Server adapter providing framework-specific access to headers, cookies, redirects,\n * and other server APIs (for Next.js use `nextServerAdapter` from `@payloadcms/next`).\n */\n readonly serverAdapter: ServerAdapter\n readonly serverFunction: ServerFunctionClient\n}\n\nexport const RootLayout = (props: RootLayoutProps) => {\n checkDependencies(props.additionalDependencyChecks)\n\n const content = <RootLayoutContent {...props} />\n\n if (process.env.PAYLOAD_CACHE_COMPONENTS_ENABLED === 'true') {\n return <Suspense fallback={null}>{content}</Suspense>\n }\n\n return content\n}\n\nconst RootLayoutContent = async ({\n children,\n config: configPromise,\n fonts = [],\n head: headFromProps,\n htmlProps = {},\n importMap,\n RouterAdapter,\n serverAdapter,\n serverFunction,\n}: RootLayoutProps) => {\n const {\n cookies,\n headers,\n languageCode,\n permissions,\n req,\n req: {\n payload: { config },\n },\n user,\n } = await initReq({ configPromise, importMap, key: 'RootLayout', serverAdapter })\n\n const theme = getRequestTheme({\n config,\n cookies,\n headers,\n })\n\n const highContrastMode = getRequestHighContrast({\n config,\n cookies,\n headers,\n })\n\n const dir = getLanguageDir({ languageCode })\n const embed = getRequestEmbed({ config, cookies })\n\n const languageOptions: LanguageOptions = Object.entries(\n config.i18n.supportedLanguages || {},\n ).reduce((acc, [language, languageConfig]) => {\n if (Object.keys(config.i18n.supportedLanguages).includes(language)) {\n acc.push({\n label: languageConfig.translations.general.thisLanguage,\n value: language,\n })\n }\n\n return acc\n }, [])\n\n const navPrefs = await getNavPrefs(req)\n\n const clientConfig = getClientConfig({\n config,\n i18n: req.i18n,\n importMap,\n user,\n })\n\n await applyLocaleFiltering({ clientConfig, config, req })\n\n const fontClassNames = fonts.map((f) => f.variable ?? f.className).filter(Boolean)\n const viewportMeta = getViewportMeta(headers.get('user-agent') ?? undefined)\n\n return (\n <html\n {...htmlProps}\n className={[...fontClassNames, htmlProps?.className].filter(Boolean).join(' ')}\n data-enhanced-contrast={highContrastMode ? '' : undefined}\n data-theme={theme}\n dir={dir}\n lang={languageCode}\n suppressHydrationWarning={config?.admin?.suppressHydrationWarning ?? false}\n >\n <head>\n {viewportMeta}\n <style>{`@layer payload-default, payload;`}</style>\n {headFromProps}\n </head>\n <body>\n <RootProvider\n config={clientConfig}\n dateFNSKey={req.i18n.dateFNSKey}\n embed={embed}\n fallbackLang={config.i18n.fallbackLanguage}\n highContrastMode={highContrastMode}\n isNavOpen={navPrefs?.open ?? true}\n languageCode={languageCode}\n languageOptions={languageOptions}\n locale={req.locale}\n permissions={user ? permissions : null}\n RouterAdapter={RouterAdapter}\n serverFunction={serverFunction}\n theme={theme}\n translations={req.i18n.translations}\n user={user}\n >\n <ProgressBar />\n {Array.isArray(config.admin?.components?.providers) &&\n config.admin?.components?.providers.length > 0 ? (\n <NestProviders\n importMap={req.payload.importMap}\n providers={config.admin?.components?.providers}\n serverProps={{\n i18n: req.i18n,\n payload: req.payload,\n permissions,\n server: req.server,\n user,\n }}\n >\n {children}\n </NestProviders>\n ) : (\n children\n )}\n </RootProvider>\n <div id=\"portal\" />\n </body>\n </html>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["applyLocaleFiltering","React","Suspense","getNavPrefs","ProgressBar","RootProvider","checkDependencies","getClientConfig","getLanguageDir","getRequestEmbed","getRequestHighContrast","getRequestTheme","NestProviders","getViewportMeta","metadata","description","title","RootLayout","props","additionalDependencyChecks","content","_jsx","RootLayoutContent","process","env","PAYLOAD_CACHE_COMPONENTS_ENABLED","fallback","children","config","configPromise","fonts","head","headFromProps","htmlProps","importMap","initReq","RouterAdapter","serverFunction","cookies","headers","languageCode","permissions","req","payload","user","key","theme","highContrastMode","dir","embed","languageOptions","Object","entries","i18n","supportedLanguages","reduce","acc","language","languageConfig","keys","includes","push","label","translations","general","thisLanguage","value","navPrefs","clientConfig","fontClassNames","map","f","variable","className","filter","Boolean","viewportMeta","get","undefined","_jsxs","join","lang","suppressHydrationWarning","admin","dateFNSKey","fallbackLang","fallbackLanguage","isNavOpen","open","locale","Array","isArray","components","providers","length","serverProps","server","id"],"sources":["../../../src/layouts/Root/index.tsx"],"sourcesContent":["import type {\n ImportMap,\n InitReqResult,\n LanguageOptions,\n SanitizedConfig,\n ServerFunctionClient,\n} from 'payload'\nimport type { InitReqArgs } from 'payload/internal'\n\nimport { applyLocaleFiltering } from 'payload/shared'\nimport React, { Suspense } from 'react'\n\nimport { getNavPrefs } from '../../elements/Nav/getNavPrefs.js'\n// eslint-disable-next-line payload/no-imports-from-exports-dir -- Server component must reference exports/client bundle for proper client boundary in prod builds\nimport { ProgressBar, RootProvider } from '../../exports/client/index.js'\nimport { checkDependencies, type CheckDependenciesArgs } from '../../utilities/checkDependencies.js'\nimport { getClientConfig } from '../../utilities/getClientConfig.js'\nimport { getLanguageDir } from '../../utilities/getLanguageDir.js'\nimport { getRequestEmbed } from '../../utilities/getRequestEmbed.js'\nimport { getRequestHighContrast } from '../../utilities/getRequestHighContrast.js'\nimport { getRequestTheme } from '../../utilities/getRequestTheme.js'\nimport { NestProviders } from './NestProviders.js'\nimport { getViewportMeta } from './viewport.js'\n// eslint-disable-next-line payload/no-imports-from-self -- Self-import via package path ensures consumer's bundler resolves the full CSS chain (design tokens, preflight, etc.) in prod builds\nimport '@payloadcms/ui/css/app.css'\n\ntype Font = {\n className?: string\n variable?: string\n}\n\nexport const metadata = {\n description: 'Generated by Next.js',\n title: 'Next.js',\n}\n\ntype RootLayoutProps = {\n /**\n * Framework-specific peer-dependency version constraints, merged on top of the\n * universal React/react-dom checks. Each framework adapter supplies its own\n * (e.g. Next.js passes `{ dependencyVersions: { next: { version: '>=15.0.0' } } }`).\n */\n readonly additionalDependencyChecks?: CheckDependenciesArgs\n readonly children: React.ReactNode\n readonly config: Promise<SanitizedConfig>\n /**\n * Fonts to apply to the admin `<html>` element. Each entry's\n * `variable ?? className` is appended to the `<html>` class list.\n * Framework-specific font loaders (e.g. `next/font`) are supplied by the caller.\n */\n readonly fonts?: Font[]\n /**\n * Custom content to render inside the admin panel's `<head>` element.\n *\n * Use this to inject scripts, meta tags, or links — for example, analytics\n * snippets via `next/script`, custom favicons, or preconnect hints.\n *\n * @example\n * ```tsx\n * import Script from 'next/script'\n *\n * <RootLayout\n * head={<Script src=\"https://example.com/analytics.js\" strategy=\"afterInteractive\" />}\n * {...rest}\n * />\n * ```\n */\n readonly head?: React.ReactNode\n readonly htmlProps?: React.HtmlHTMLAttributes<HTMLHtmlElement>\n readonly importMap: ImportMap\n readonly initReq: (args: Omit<InitReqArgs, 'cache' | 'serverAdapter'>) => Promise<InitReqResult>\n /**\n * Client router adapter. Caller supplies a framework-specific provider\n * (for Next.js use the `NextRouterAdapter` exported from `@payloadcms/next`).\n */\n readonly RouterAdapter: React.FC<{ children: React.ReactNode }>\n readonly serverFunction: ServerFunctionClient\n}\n\nexport const RootLayout = (props: RootLayoutProps) => {\n checkDependencies(props.additionalDependencyChecks)\n\n const content = <RootLayoutContent {...props} />\n\n if (process.env.PAYLOAD_CACHE_COMPONENTS_ENABLED === 'true') {\n return <Suspense fallback={null}>{content}</Suspense>\n }\n\n return content\n}\n\nconst RootLayoutContent = async ({\n children,\n config: configPromise,\n fonts = [],\n head: headFromProps,\n htmlProps = {},\n importMap,\n initReq,\n RouterAdapter,\n serverFunction,\n}: RootLayoutProps) => {\n const {\n cookies,\n headers,\n languageCode,\n permissions,\n req,\n req: {\n payload: { config },\n },\n user,\n } = await initReq({ configPromise, importMap, key: 'RootLayout' })\n\n const theme = getRequestTheme({\n config,\n cookies,\n headers,\n })\n\n const highContrastMode = getRequestHighContrast({\n config,\n cookies,\n headers,\n })\n\n const dir = getLanguageDir({ languageCode })\n const embed = getRequestEmbed({ config, cookies })\n\n const languageOptions: LanguageOptions = Object.entries(\n config.i18n.supportedLanguages || {},\n ).reduce((acc, [language, languageConfig]) => {\n if (Object.keys(config.i18n.supportedLanguages).includes(language)) {\n acc.push({\n label: languageConfig.translations.general.thisLanguage,\n value: language,\n })\n }\n\n return acc\n }, [])\n\n const navPrefs = await getNavPrefs(req)\n\n const clientConfig = getClientConfig({\n config,\n i18n: req.i18n,\n importMap,\n user,\n })\n\n await applyLocaleFiltering({ clientConfig, config, req })\n\n const fontClassNames = fonts.map((f) => f.variable ?? f.className).filter(Boolean)\n const viewportMeta = getViewportMeta(headers.get('user-agent') ?? undefined)\n\n return (\n <html\n {...htmlProps}\n className={[...fontClassNames, htmlProps?.className].filter(Boolean).join(' ')}\n data-enhanced-contrast={highContrastMode ? '' : undefined}\n data-theme={theme}\n dir={dir}\n lang={languageCode}\n suppressHydrationWarning={config?.admin?.suppressHydrationWarning ?? false}\n >\n <head>\n {viewportMeta}\n <style>{`@layer payload-default, payload;`}</style>\n {headFromProps}\n </head>\n <body>\n <RootProvider\n config={clientConfig}\n dateFNSKey={req.i18n.dateFNSKey}\n embed={embed}\n fallbackLang={config.i18n.fallbackLanguage}\n highContrastMode={highContrastMode}\n isNavOpen={navPrefs?.open ?? true}\n languageCode={languageCode}\n languageOptions={languageOptions}\n locale={req.locale}\n permissions={user ? permissions : null}\n RouterAdapter={RouterAdapter}\n serverFunction={serverFunction}\n theme={theme}\n translations={req.i18n.translations}\n user={user}\n >\n <ProgressBar />\n {Array.isArray(config.admin?.components?.providers) &&\n config.admin?.components?.providers.length > 0 ? (\n <NestProviders\n importMap={req.payload.importMap}\n providers={config.admin?.components?.providers}\n serverProps={{\n i18n: req.i18n,\n payload: req.payload,\n permissions,\n server: req.server,\n user,\n }}\n >\n {children}\n </NestProviders>\n ) : (\n children\n )}\n </RootProvider>\n <div id=\"portal\" />\n </body>\n </html>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/DocumentInfo/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAgF,MAAM,OAAO,CAAA;AAEpG,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAexE,mBAAmB,YAAY,CAAA;AAE/B,eAAO,MAAM,eAAe,QAAO,mBAAmC,CAAA;AAqXtE,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CACzC;IACE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,GAAG,iBAAiB,CAOtB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/DocumentInfo/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAgF,MAAM,OAAO,CAAA;AAEpG,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAexE,mBAAmB,YAAY,CAAA;AAE/B,eAAO,MAAM,eAAe,QAAO,mBAAmC,CAAA;AAqYtE,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CACzC;IACE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,GAAG,iBAAiB,CAOtB,CAAA"}
@@ -100,10 +100,6 @@ const DocumentInfo = ({
100
100
  localeIsLoading
101
101
  } = useLocaleLoading();
102
102
  const isInitializing = useMemo(() => initialState === undefined || initialData === undefined || localeIsLoading, [initialData, initialState, localeIsLoading]);
103
- const baseAPIPath = formatAdminURL({
104
- apiRoute: api,
105
- path: ''
106
- });
107
103
  let slug;
108
104
  let pluralType;
109
105
  let preferencesKey;
@@ -126,7 +122,10 @@ const DocumentInfo = ({
126
122
  }
127
123
  try {
128
124
  const isGlobal = slug_0 === globalSlug;
129
- const request = await requests.get(`${baseAPIPath}/payload-locked-documents`, {
125
+ const request = await requests.get(formatAdminURL({
126
+ apiRoute: api,
127
+ path: '/payload-locked-documents'
128
+ }), {
130
129
  credentials: 'include',
131
130
  params: isGlobal ? {
132
131
  'where[globalSlug][equals]': slug_0
@@ -140,7 +139,10 @@ const DocumentInfo = ({
140
139
  } = await request.json();
141
140
  if (docs?.length > 0) {
142
141
  const lockID = docs[0].id;
143
- await requests.delete(`${baseAPIPath}/payload-locked-documents/${lockID}`, {
142
+ await requests.delete(formatAdminURL({
143
+ apiRoute: api,
144
+ path: `/payload-locked-documents/${lockID}`
145
+ }), {
144
146
  credentials: 'include',
145
147
  headers: {
146
148
  'Content-Type': 'application/json'
@@ -152,7 +154,7 @@ const DocumentInfo = ({
152
154
  // eslint-disable-next-line no-console
153
155
  console.error('Failed to unlock the document', error);
154
156
  }
155
- }, [baseAPIPath, globalSlug, setDocumentIsLocked, hasLockedDocumentsCollection]);
157
+ }, [api, globalSlug, setDocumentIsLocked, hasLockedDocumentsCollection]);
156
158
  const updateDocumentEditor = useCallback(async (docID_0, slug_1, user) => {
157
159
  // Check if the locked-documents collection exists before making API calls
158
160
  if (!hasLockedDocumentsCollection) {
@@ -161,7 +163,10 @@ const DocumentInfo = ({
161
163
  try {
162
164
  const isGlobal_0 = slug_1 === globalSlug;
163
165
  // Check if the document is already locked
164
- const request_0 = await requests.get(`${baseAPIPath}/payload-locked-documents`, {
166
+ const request_0 = await requests.get(formatAdminURL({
167
+ apiRoute: api,
168
+ path: '/payload-locked-documents'
169
+ }), {
165
170
  credentials: 'include',
166
171
  params: isGlobal_0 ? {
167
172
  'where[globalSlug][equals]': slug_1
@@ -183,7 +188,10 @@ const DocumentInfo = ({
183
188
  value: user
184
189
  };
185
190
  // Send a patch request to update the _lastEdited info
186
- await requests.patch(`${baseAPIPath}/payload-locked-documents/${lockID_0}`, {
191
+ await requests.patch(formatAdminURL({
192
+ apiRoute: api,
193
+ path: `/payload-locked-documents/${lockID_0}`
194
+ }), {
187
195
  body: JSON.stringify({
188
196
  user: userData
189
197
  }),
@@ -197,7 +205,7 @@ const DocumentInfo = ({
197
205
  // eslint-disable-next-line no-console
198
206
  console.error('Failed to update the document editor', error_0);
199
207
  }
200
- }, [baseAPIPath, globalSlug, hasLockedDocumentsCollection]);
208
+ }, [api, globalSlug, hasLockedDocumentsCollection]);
201
209
  const getDocPermissions = useGetDocPermissions({
202
210
  id: id,
203
211
  api,
@@ -263,15 +271,18 @@ const DocumentInfo = ({
263
271
  }, []);
264
272
  const action = React.useMemo(() => {
265
273
  const docPath = `${pluralType === 'globals' ? `/globals` : ''}/${slug}${id ? `/${id}` : ''}`;
266
- return `${baseAPIPath}${docPath}${qs.stringify({
267
- depth: 0,
268
- 'fallback-locale': 'null',
269
- locale,
270
- uploadEdits: uploadEdits || undefined
271
- }, {
272
- addQueryPrefix: true
273
- })}`;
274
- }, [baseAPIPath, locale, pluralType, id, slug, uploadEdits]);
274
+ return formatAdminURL({
275
+ apiRoute: api,
276
+ path: `${docPath}${qs.stringify({
277
+ depth: 0,
278
+ 'fallback-locale': 'null',
279
+ locale,
280
+ uploadEdits: uploadEdits || undefined
281
+ }, {
282
+ addQueryPrefix: true
283
+ })}`
284
+ });
285
+ }, [api, locale, pluralType, id, slug, uploadEdits]);
275
286
  const value = {
276
287
  ...props,
277
288
  action,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["formatAdminURL","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","useControllableState","useAuth","requests","useConfig","DocumentTitleProvider","useLocale","useLocaleLoading","usePreferences","useTranslation","UploadEditsProvider","useUploadEdits","useGetDocPermissions","Context","useDocumentInfo","DocumentInfo","children","props","id","collectionSlug","currentEditor","currentEditorFromProps","docPermissions","docPermissionsFromProps","globalSlug","hasPublishedDoc","hasPublishedDocFromProps","hasPublishPermission","hasPublishPermissionFromProps","hasSavePermission","hasSavePermissionFromProps","hasScheduledPublish","hasScheduledPublishFromProps","initialData","initialState","isLocked","isLockedFromProps","lastUpdateTime","lastUpdateTimeFromProps","mostRecentVersionIsAutosaved","mostRecentVersionIsAutosavedFromProps","unpublishedVersionCount","unpublishedVersionCountFromProps","versionCount","versionCountFromProps","setDocPermissions","setHasSavePermission","setHasPublishPermission","permissions","config","admin","dateFormat","collections","routes","api","getEntityConfig","collectionConfig","globalConfig","hasLockedDocumentsCollection","some","collection","slug","abortControllerRef","AbortController","docConfig","i18n","uploadEdits","setMostRecentVersionIsAutosaved","setVersionCount","setHasPublishedDoc","setUnpublishedVersionCount","setHasScheduledPublish","Boolean","documentIsLocked","setDocumentIsLocked","setCurrentEditor","setLastUpdateTime","data","setData","uploadStatus","setUploadStatus","documentLockState","hasShownLockedModal","user","updateUploadStatus","status","getPreference","setPreference","currentLocale","locale","code","localeIsLoading","isInitializing","undefined","baseAPIPath","apiRoute","path","pluralType","preferencesKey","unlockDocument","docID","isGlobal","request","get","credentials","params","docs","json","length","lockID","delete","headers","error","console","updateDocumentEditor","userData","relationTo","value","patch","body","JSON","stringify","getDocPermissions","getDocPreferences","setDocFieldPreferences","fieldPreferences","allPreferences","fields","e","incrementVersionCount","newCount","versions","maxPerDoc","Math","min","max","re1","current","abort","_err","action","docPath","depth","addQueryPrefix","savedDocumentData","updateSavedDocumentData","_jsx","DocumentInfoProvider"],"sources":["../../../src/providers/DocumentInfo/index.tsx"],"sourcesContent":["'use client'\nimport type { DocumentPreferences, User } from 'payload'\n\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { DocumentInfoContext, DocumentInfoProps } from './types.js'\n\nimport { useControllableState } from '../../hooks/useControllableState.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { useConfig } from '../Config/index.js'\nimport { DocumentTitleProvider } from '../DocumentTitle/index.js'\nimport { useLocale, useLocaleLoading } from '../Locale/index.js'\nimport { usePreferences } from '../Preferences/index.js'\nimport { useTranslation } from '../Translation/index.js'\nimport { UploadEditsProvider, useUploadEdits } from '../UploadEdits/index.js'\nimport { useGetDocPermissions } from './useGetDocPermissions.js'\n\nconst Context = createContext({} as DocumentInfoContext)\n\nexport type * from './types.js'\n\nexport const useDocumentInfo = (): DocumentInfoContext => use(Context)\n\nconst DocumentInfo: React.FC<\n {\n readonly children: React.ReactNode\n } & DocumentInfoProps\n> = ({ children, ...props }) => {\n const {\n id,\n collectionSlug,\n currentEditor: currentEditorFromProps,\n docPermissions: docPermissionsFromProps,\n globalSlug,\n hasPublishedDoc: hasPublishedDocFromProps,\n hasPublishPermission: hasPublishPermissionFromProps,\n hasSavePermission: hasSavePermissionFromProps,\n hasScheduledPublish: hasScheduledPublishFromProps,\n initialData,\n initialState,\n isLocked: isLockedFromProps,\n lastUpdateTime: lastUpdateTimeFromProps,\n mostRecentVersionIsAutosaved: mostRecentVersionIsAutosavedFromProps,\n unpublishedVersionCount: unpublishedVersionCountFromProps,\n versionCount: versionCountFromProps,\n } = props\n\n const [docPermissions, setDocPermissions] = useControllableState(docPermissionsFromProps)\n\n const [hasSavePermission, setHasSavePermission] = useControllableState(hasSavePermissionFromProps)\n\n const [hasPublishPermission, setHasPublishPermission] = useControllableState(\n hasPublishPermissionFromProps,\n )\n\n const { permissions } = useAuth()\n\n const {\n config: {\n admin: { dateFormat },\n collections,\n routes: { api },\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const globalConfig = getEntityConfig({ globalSlug })\n\n // Check if the locked-documents collection exists in the config\n const hasLockedDocumentsCollection = collections.some(\n (collection) => collection.slug === 'payload-locked-documents',\n )\n\n const abortControllerRef = useRef(new AbortController())\n const docConfig = collectionConfig || globalConfig\n\n const { i18n } = useTranslation()\n\n const { uploadEdits } = useUploadEdits()\n\n const [mostRecentVersionIsAutosaved, setMostRecentVersionIsAutosaved] = useState(\n mostRecentVersionIsAutosavedFromProps,\n )\n\n const [versionCount, setVersionCount] = useState(versionCountFromProps)\n\n const [hasPublishedDoc, setHasPublishedDoc] = useState(hasPublishedDocFromProps)\n\n const [unpublishedVersionCount, setUnpublishedVersionCount] = useState(\n unpublishedVersionCountFromProps,\n )\n\n const [hasScheduledPublish, setHasScheduledPublish] = useState(\n Boolean(hasScheduledPublishFromProps),\n )\n\n const [documentIsLocked, setDocumentIsLocked] = useControllableState<boolean | undefined>(\n isLockedFromProps,\n )\n\n const [currentEditor, setCurrentEditor] = useControllableState<null | User>(\n currentEditorFromProps,\n )\n const [lastUpdateTime, setLastUpdateTime] = useControllableState<number>(lastUpdateTimeFromProps)\n\n const [data, setData] = useControllableState(initialData)\n\n const [uploadStatus, setUploadStatus] = useControllableState<'failed' | 'idle' | 'uploading'>(\n 'idle',\n )\n\n const documentLockState = useRef<{\n hasShownLockedModal: boolean\n isLocked: boolean\n user: number | string | User\n } | null>({\n hasShownLockedModal: false,\n isLocked: false,\n user: null,\n })\n\n const updateUploadStatus = useCallback(\n (status: 'failed' | 'idle' | 'uploading') => {\n setUploadStatus(status)\n },\n [setUploadStatus],\n )\n\n const { getPreference, setPreference } = usePreferences()\n const currentLocale = useLocale()\n const locale = currentLocale?.code\n const { localeIsLoading } = useLocaleLoading()\n\n const isInitializing = useMemo(\n () => initialState === undefined || initialData === undefined || localeIsLoading,\n [initialData, initialState, localeIsLoading],\n )\n\n const baseAPIPath = formatAdminURL({\n apiRoute: api,\n path: '',\n })\n\n let slug: string\n let pluralType: 'collections' | 'globals'\n let preferencesKey: string\n\n if (globalSlug) {\n slug = globalSlug\n pluralType = 'globals'\n preferencesKey = `global-${slug}`\n }\n\n if (collectionSlug) {\n slug = collectionSlug\n pluralType = 'collections'\n\n if (id) {\n preferencesKey = `collection-${slug}-${id}`\n }\n }\n\n const unlockDocument = useCallback(\n async (docID: number | string, slug: string) => {\n // Check if the locked-documents collection exists before making API calls\n if (!hasLockedDocumentsCollection) {\n return\n }\n\n try {\n const isGlobal = slug === globalSlug\n\n const request = await requests.get(`${baseAPIPath}/payload-locked-documents`, {\n credentials: 'include',\n params: isGlobal\n ? {\n 'where[globalSlug][equals]': slug,\n }\n : {\n 'where[document.relationTo][equals]': slug,\n 'where[document.value][equals]': docID,\n },\n })\n\n const { docs } = await request.json()\n\n if (docs?.length > 0) {\n const lockID = docs[0].id\n await requests.delete(`${baseAPIPath}/payload-locked-documents/${lockID}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n setDocumentIsLocked(false)\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to unlock the document', error)\n }\n },\n [baseAPIPath, globalSlug, setDocumentIsLocked, hasLockedDocumentsCollection],\n )\n\n const updateDocumentEditor = useCallback(\n async (docID: number | string, slug: string, user: number | string | User) => {\n // Check if the locked-documents collection exists before making API calls\n if (!hasLockedDocumentsCollection) {\n return\n }\n\n try {\n const isGlobal = slug === globalSlug\n\n // Check if the document is already locked\n const request = await requests.get(`${baseAPIPath}/payload-locked-documents`, {\n credentials: 'include',\n params: isGlobal\n ? {\n 'where[globalSlug][equals]': slug,\n }\n : {\n 'where[document.relationTo][equals]': slug,\n 'where[document.value][equals]': docID,\n },\n })\n\n const { docs } = await request.json()\n\n if (docs?.length > 0) {\n const lockID = docs[0].id\n\n const userData =\n typeof user === 'object'\n ? { relationTo: user.collection, value: user.id }\n : { relationTo: 'users', value: user }\n\n // Send a patch request to update the _lastEdited info\n await requests.patch(`${baseAPIPath}/payload-locked-documents/${lockID}`, {\n body: JSON.stringify({\n user: userData,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to update the document editor', error)\n }\n },\n [baseAPIPath, globalSlug, hasLockedDocumentsCollection],\n )\n\n const getDocPermissions = useGetDocPermissions({\n id: id as string,\n api,\n collectionSlug,\n globalSlug,\n i18n,\n locale,\n permissions,\n setDocPermissions,\n setHasPublishPermission,\n setHasSavePermission,\n })\n\n const getDocPreferences = useCallback(() => {\n return getPreference<DocumentPreferences>(preferencesKey)\n }, [getPreference, preferencesKey])\n\n const setDocFieldPreferences = useCallback<DocumentInfoContext['setDocFieldPreferences']>(\n async (path, fieldPreferences) => {\n const allPreferences = await getDocPreferences()\n\n if (preferencesKey) {\n try {\n await setPreference(preferencesKey, {\n ...allPreferences,\n fields: {\n ...(allPreferences?.fields || {}),\n [path]: {\n ...allPreferences?.fields?.[path],\n ...fieldPreferences,\n },\n },\n })\n } catch (e) {\n console.error(e) // eslint-disable-line no-console\n }\n }\n },\n [setPreference, preferencesKey, getDocPreferences],\n )\n\n const incrementVersionCount = useCallback(() => {\n const newCount = versionCount + 1\n if (collectionConfig && collectionConfig.versions) {\n if (collectionConfig.versions.maxPerDoc > 0) {\n setVersionCount(Math.min(newCount, collectionConfig.versions.maxPerDoc))\n } else {\n setVersionCount(newCount)\n }\n } else if (globalConfig && globalConfig.versions) {\n if (globalConfig.versions.max > 0) {\n setVersionCount(Math.min(newCount, globalConfig.versions.max))\n } else {\n setVersionCount(newCount)\n }\n }\n }, [collectionConfig, globalConfig, versionCount])\n\n // clean on unmount\n useEffect(() => {\n const re1 = abortControllerRef.current\n\n return () => {\n if (re1) {\n try {\n re1.abort()\n } catch (_err) {\n // swallow error\n }\n }\n }\n }, [])\n\n const action: string = React.useMemo(() => {\n const docPath = `${pluralType === 'globals' ? `/globals` : ''}/${slug}${id ? `/${id}` : ''}`\n\n return `${baseAPIPath}${docPath}${qs.stringify(\n {\n depth: 0,\n 'fallback-locale': 'null',\n locale,\n uploadEdits: uploadEdits || undefined,\n },\n {\n addQueryPrefix: true,\n },\n )}`\n }, [baseAPIPath, locale, pluralType, id, slug, uploadEdits])\n\n const value: DocumentInfoContext = {\n ...props,\n action,\n currentEditor,\n data,\n docConfig,\n docPermissions,\n documentIsLocked,\n documentLockState,\n getDocPermissions,\n getDocPreferences,\n hasPublishedDoc,\n hasPublishPermission,\n hasSavePermission,\n hasScheduledPublish,\n incrementVersionCount,\n initialData,\n initialState,\n isInitializing,\n lastUpdateTime,\n mostRecentVersionIsAutosaved,\n preferencesKey,\n savedDocumentData: data,\n setCurrentEditor,\n setData,\n setDocFieldPreferences,\n setDocumentIsLocked,\n setHasPublishedDoc,\n setHasScheduledPublish,\n setLastUpdateTime,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n setUploadStatus: updateUploadStatus,\n unlockDocument,\n unpublishedVersionCount,\n updateDocumentEditor,\n updateSavedDocumentData: setData,\n uploadStatus,\n versionCount,\n }\n\n return (\n <Context value={value}>\n <DocumentTitleProvider>{children}</DocumentTitleProvider>\n </Context>\n )\n}\n\nexport const DocumentInfoProvider: React.FC<\n {\n readonly children: React.ReactNode\n } & DocumentInfoProps\n> = (props) => {\n return (\n <UploadEditsProvider>\n <DocumentInfo {...props} />\n </UploadEditsProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["formatAdminURL","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","useControllableState","useAuth","requests","useConfig","DocumentTitleProvider","useLocale","useLocaleLoading","usePreferences","useTranslation","UploadEditsProvider","useUploadEdits","useGetDocPermissions","Context","useDocumentInfo","DocumentInfo","children","props","id","collectionSlug","currentEditor","currentEditorFromProps","docPermissions","docPermissionsFromProps","globalSlug","hasPublishedDoc","hasPublishedDocFromProps","hasPublishPermission","hasPublishPermissionFromProps","hasSavePermission","hasSavePermissionFromProps","hasScheduledPublish","hasScheduledPublishFromProps","initialData","initialState","isLocked","isLockedFromProps","lastUpdateTime","lastUpdateTimeFromProps","mostRecentVersionIsAutosaved","mostRecentVersionIsAutosavedFromProps","unpublishedVersionCount","unpublishedVersionCountFromProps","versionCount","versionCountFromProps","setDocPermissions","setHasSavePermission","setHasPublishPermission","permissions","config","admin","dateFormat","collections","routes","api","getEntityConfig","collectionConfig","globalConfig","hasLockedDocumentsCollection","some","collection","slug","abortControllerRef","AbortController","docConfig","i18n","uploadEdits","setMostRecentVersionIsAutosaved","setVersionCount","setHasPublishedDoc","setUnpublishedVersionCount","setHasScheduledPublish","Boolean","documentIsLocked","setDocumentIsLocked","setCurrentEditor","setLastUpdateTime","data","setData","uploadStatus","setUploadStatus","documentLockState","hasShownLockedModal","user","updateUploadStatus","status","getPreference","setPreference","currentLocale","locale","code","localeIsLoading","isInitializing","undefined","pluralType","preferencesKey","unlockDocument","docID","isGlobal","request","get","apiRoute","path","credentials","params","docs","json","length","lockID","delete","headers","error","console","updateDocumentEditor","userData","relationTo","value","patch","body","JSON","stringify","getDocPermissions","getDocPreferences","setDocFieldPreferences","fieldPreferences","allPreferences","fields","e","incrementVersionCount","newCount","versions","maxPerDoc","Math","min","max","re1","current","abort","_err","action","docPath","depth","addQueryPrefix","savedDocumentData","updateSavedDocumentData","_jsx","DocumentInfoProvider"],"sources":["../../../src/providers/DocumentInfo/index.tsx"],"sourcesContent":["'use client'\nimport type { DocumentPreferences, User } from 'payload'\n\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { DocumentInfoContext, DocumentInfoProps } from './types.js'\n\nimport { useControllableState } from '../../hooks/useControllableState.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { useConfig } from '../Config/index.js'\nimport { DocumentTitleProvider } from '../DocumentTitle/index.js'\nimport { useLocale, useLocaleLoading } from '../Locale/index.js'\nimport { usePreferences } from '../Preferences/index.js'\nimport { useTranslation } from '../Translation/index.js'\nimport { UploadEditsProvider, useUploadEdits } from '../UploadEdits/index.js'\nimport { useGetDocPermissions } from './useGetDocPermissions.js'\n\nconst Context = createContext({} as DocumentInfoContext)\n\nexport type * from './types.js'\n\nexport const useDocumentInfo = (): DocumentInfoContext => use(Context)\n\nconst DocumentInfo: React.FC<\n {\n readonly children: React.ReactNode\n } & DocumentInfoProps\n> = ({ children, ...props }) => {\n const {\n id,\n collectionSlug,\n currentEditor: currentEditorFromProps,\n docPermissions: docPermissionsFromProps,\n globalSlug,\n hasPublishedDoc: hasPublishedDocFromProps,\n hasPublishPermission: hasPublishPermissionFromProps,\n hasSavePermission: hasSavePermissionFromProps,\n hasScheduledPublish: hasScheduledPublishFromProps,\n initialData,\n initialState,\n isLocked: isLockedFromProps,\n lastUpdateTime: lastUpdateTimeFromProps,\n mostRecentVersionIsAutosaved: mostRecentVersionIsAutosavedFromProps,\n unpublishedVersionCount: unpublishedVersionCountFromProps,\n versionCount: versionCountFromProps,\n } = props\n\n const [docPermissions, setDocPermissions] = useControllableState(docPermissionsFromProps)\n\n const [hasSavePermission, setHasSavePermission] = useControllableState(hasSavePermissionFromProps)\n\n const [hasPublishPermission, setHasPublishPermission] = useControllableState(\n hasPublishPermissionFromProps,\n )\n\n const { permissions } = useAuth()\n\n const {\n config: {\n admin: { dateFormat },\n collections,\n routes: { api },\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const globalConfig = getEntityConfig({ globalSlug })\n\n // Check if the locked-documents collection exists in the config\n const hasLockedDocumentsCollection = collections.some(\n (collection) => collection.slug === 'payload-locked-documents',\n )\n\n const abortControllerRef = useRef(new AbortController())\n const docConfig = collectionConfig || globalConfig\n\n const { i18n } = useTranslation()\n\n const { uploadEdits } = useUploadEdits()\n\n const [mostRecentVersionIsAutosaved, setMostRecentVersionIsAutosaved] = useState(\n mostRecentVersionIsAutosavedFromProps,\n )\n\n const [versionCount, setVersionCount] = useState(versionCountFromProps)\n\n const [hasPublishedDoc, setHasPublishedDoc] = useState(hasPublishedDocFromProps)\n\n const [unpublishedVersionCount, setUnpublishedVersionCount] = useState(\n unpublishedVersionCountFromProps,\n )\n\n const [hasScheduledPublish, setHasScheduledPublish] = useState(\n Boolean(hasScheduledPublishFromProps),\n )\n\n const [documentIsLocked, setDocumentIsLocked] = useControllableState<boolean | undefined>(\n isLockedFromProps,\n )\n\n const [currentEditor, setCurrentEditor] = useControllableState<null | User>(\n currentEditorFromProps,\n )\n const [lastUpdateTime, setLastUpdateTime] = useControllableState<number>(lastUpdateTimeFromProps)\n\n const [data, setData] = useControllableState(initialData)\n\n const [uploadStatus, setUploadStatus] = useControllableState<'failed' | 'idle' | 'uploading'>(\n 'idle',\n )\n\n const documentLockState = useRef<{\n hasShownLockedModal: boolean\n isLocked: boolean\n user: number | string | User\n } | null>({\n hasShownLockedModal: false,\n isLocked: false,\n user: null,\n })\n\n const updateUploadStatus = useCallback(\n (status: 'failed' | 'idle' | 'uploading') => {\n setUploadStatus(status)\n },\n [setUploadStatus],\n )\n\n const { getPreference, setPreference } = usePreferences()\n const currentLocale = useLocale()\n const locale = currentLocale?.code\n const { localeIsLoading } = useLocaleLoading()\n\n const isInitializing = useMemo(\n () => initialState === undefined || initialData === undefined || localeIsLoading,\n [initialData, initialState, localeIsLoading],\n )\n\n let slug: string\n let pluralType: 'collections' | 'globals'\n let preferencesKey: string\n\n if (globalSlug) {\n slug = globalSlug\n pluralType = 'globals'\n preferencesKey = `global-${slug}`\n }\n\n if (collectionSlug) {\n slug = collectionSlug\n pluralType = 'collections'\n\n if (id) {\n preferencesKey = `collection-${slug}-${id}`\n }\n }\n\n const unlockDocument = useCallback(\n async (docID: number | string, slug: string) => {\n // Check if the locked-documents collection exists before making API calls\n if (!hasLockedDocumentsCollection) {\n return\n }\n\n try {\n const isGlobal = slug === globalSlug\n\n const request = await requests.get(\n formatAdminURL({ apiRoute: api, path: '/payload-locked-documents' }),\n {\n credentials: 'include',\n params: isGlobal\n ? {\n 'where[globalSlug][equals]': slug,\n }\n : {\n 'where[document.relationTo][equals]': slug,\n 'where[document.value][equals]': docID,\n },\n },\n )\n\n const { docs } = await request.json()\n\n if (docs?.length > 0) {\n const lockID = docs[0].id\n await requests.delete(\n formatAdminURL({\n apiRoute: api,\n path: `/payload-locked-documents/${lockID}`,\n }),\n {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n )\n setDocumentIsLocked(false)\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to unlock the document', error)\n }\n },\n [api, globalSlug, setDocumentIsLocked, hasLockedDocumentsCollection],\n )\n\n const updateDocumentEditor = useCallback(\n async (docID: number | string, slug: string, user: number | string | User) => {\n // Check if the locked-documents collection exists before making API calls\n if (!hasLockedDocumentsCollection) {\n return\n }\n\n try {\n const isGlobal = slug === globalSlug\n\n // Check if the document is already locked\n const request = await requests.get(\n formatAdminURL({ apiRoute: api, path: '/payload-locked-documents' }),\n {\n credentials: 'include',\n params: isGlobal\n ? {\n 'where[globalSlug][equals]': slug,\n }\n : {\n 'where[document.relationTo][equals]': slug,\n 'where[document.value][equals]': docID,\n },\n },\n )\n\n const { docs } = await request.json()\n\n if (docs?.length > 0) {\n const lockID = docs[0].id\n\n const userData =\n typeof user === 'object'\n ? { relationTo: user.collection, value: user.id }\n : { relationTo: 'users', value: user }\n\n // Send a patch request to update the _lastEdited info\n await requests.patch(\n formatAdminURL({\n apiRoute: api,\n path: `/payload-locked-documents/${lockID}`,\n }),\n {\n body: JSON.stringify({\n user: userData,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n )\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to update the document editor', error)\n }\n },\n [api, globalSlug, hasLockedDocumentsCollection],\n )\n\n const getDocPermissions = useGetDocPermissions({\n id: id as string,\n api,\n collectionSlug,\n globalSlug,\n i18n,\n locale,\n permissions,\n setDocPermissions,\n setHasPublishPermission,\n setHasSavePermission,\n })\n\n const getDocPreferences = useCallback(() => {\n return getPreference<DocumentPreferences>(preferencesKey)\n }, [getPreference, preferencesKey])\n\n const setDocFieldPreferences = useCallback<DocumentInfoContext['setDocFieldPreferences']>(\n async (path, fieldPreferences) => {\n const allPreferences = await getDocPreferences()\n\n if (preferencesKey) {\n try {\n await setPreference(preferencesKey, {\n ...allPreferences,\n fields: {\n ...(allPreferences?.fields || {}),\n [path]: {\n ...allPreferences?.fields?.[path],\n ...fieldPreferences,\n },\n },\n })\n } catch (e) {\n console.error(e) // eslint-disable-line no-console\n }\n }\n },\n [setPreference, preferencesKey, getDocPreferences],\n )\n\n const incrementVersionCount = useCallback(() => {\n const newCount = versionCount + 1\n if (collectionConfig && collectionConfig.versions) {\n if (collectionConfig.versions.maxPerDoc > 0) {\n setVersionCount(Math.min(newCount, collectionConfig.versions.maxPerDoc))\n } else {\n setVersionCount(newCount)\n }\n } else if (globalConfig && globalConfig.versions) {\n if (globalConfig.versions.max > 0) {\n setVersionCount(Math.min(newCount, globalConfig.versions.max))\n } else {\n setVersionCount(newCount)\n }\n }\n }, [collectionConfig, globalConfig, versionCount])\n\n // clean on unmount\n useEffect(() => {\n const re1 = abortControllerRef.current\n\n return () => {\n if (re1) {\n try {\n re1.abort()\n } catch (_err) {\n // swallow error\n }\n }\n }\n }, [])\n\n const action: string = React.useMemo(() => {\n const docPath = `${pluralType === 'globals' ? `/globals` : ''}/${slug}${id ? `/${id}` : ''}`\n\n return formatAdminURL({\n apiRoute: api,\n path: `${docPath}${qs.stringify(\n {\n depth: 0,\n 'fallback-locale': 'null',\n locale,\n uploadEdits: uploadEdits || undefined,\n },\n {\n addQueryPrefix: true,\n },\n )}` as `/${string}`,\n })\n }, [api, locale, pluralType, id, slug, uploadEdits])\n\n const value: DocumentInfoContext = {\n ...props,\n action,\n currentEditor,\n data,\n docConfig,\n docPermissions,\n documentIsLocked,\n documentLockState,\n getDocPermissions,\n getDocPreferences,\n hasPublishedDoc,\n hasPublishPermission,\n hasSavePermission,\n hasScheduledPublish,\n incrementVersionCount,\n initialData,\n initialState,\n isInitializing,\n lastUpdateTime,\n mostRecentVersionIsAutosaved,\n preferencesKey,\n savedDocumentData: data,\n setCurrentEditor,\n setData,\n setDocFieldPreferences,\n setDocumentIsLocked,\n setHasPublishedDoc,\n setHasScheduledPublish,\n setLastUpdateTime,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n setUploadStatus: updateUploadStatus,\n unlockDocument,\n unpublishedVersionCount,\n updateDocumentEditor,\n updateSavedDocumentData: setData,\n uploadStatus,\n versionCount,\n }\n\n return (\n <Context value={value}>\n <DocumentTitleProvider>{children}</DocumentTitleProvider>\n </Context>\n )\n}\n\nexport const DocumentInfoProvider: React.FC<\n {\n readonly children: React.ReactNode\n } & DocumentInfoProps\n> = (props) => {\n return (\n <UploadEditsProvider>\n <DocumentInfo {...props} />\n </UploadEditsProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Locale/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAGrC,OAAO,KAA0D,MAAM,OAAO,CAAA;AAU9E,eAAO,MAAM,oBAAoB;;4BAEP,OAAO;EAC/B,CAAA;AAcF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;CAAE,CAsF5F,CAAA;AAED,eAAO,MAAM,gBAAgB;;4BAvGH,OAAO;CAuG8B,CAAA;AAE/D,eAAO,MAAM,SAAS,QAAO,MAAM,GAAG,IAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Locale/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAGrC,OAAO,KAA0D,MAAM,OAAO,CAAA;AAU9E,eAAO,MAAM,oBAAoB;;4BAEP,OAAO;EAC/B,CAAA;AAoBF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;CAAE,CAiF5F,CAAA;AAED,eAAO,MAAM,gBAAgB;;4BAxGH,OAAO;CAwG8B,CAAA;AAE/D,eAAO,MAAM,SAAS,QAAO,MAAM,GAAG,IAA0B,CAAA"}
@@ -13,7 +13,10 @@ export const LocaleLoadingContext = /*#__PURE__*/createContext({
13
13
  localeIsLoading: false,
14
14
  setLocaleIsLoading: _ => undefined
15
15
  });
16
- const fetchPreferences = async (key, baseURL) => await fetch(`${baseURL}/payload-preferences/${key}`, {
16
+ const fetchPreferences = async (key, apiRoute) => await fetch(formatAdminURL({
17
+ apiRoute,
18
+ path: `/payload-preferences/${key}`
19
+ }), {
17
20
  credentials: 'include',
18
21
  headers: {
19
22
  'Content-Type': 'application/json'
@@ -60,10 +63,6 @@ export const LocaleProvider = ({
60
63
  prevLocale.current = locale;
61
64
  }
62
65
  }, [isTransitioning, locale]);
63
- const fetchURL = formatAdminURL({
64
- apiRoute,
65
- path: ''
66
- });
67
66
  useEffect(() => {
68
67
  /**
69
68
  * This effect should only run when `localeFromParams` changes, i.e. when the user clicks an anchor link
@@ -72,7 +71,7 @@ export const LocaleProvider = ({
72
71
  */
73
72
  async function resetLocale() {
74
73
  if (localization && user?.id) {
75
- const localeToUse = localeFromParams || (await fetchPreferences('locale', fetchURL)?.then(res => res.value));
74
+ const localeToUse = localeFromParams || (await fetchPreferences('locale', apiRoute)?.then(res => res.value));
76
75
  const newLocale = findLocaleFromCode(localization, localeToUse) || findLocaleFromCode(localization, defaultLocale) || findLocaleFromCode(localization, localization?.locales?.[0]?.code);
77
76
  if (newLocale) {
78
77
  setLocale(newLocale);
@@ -80,7 +79,7 @@ export const LocaleProvider = ({
80
79
  }
81
80
  }
82
81
  void resetLocale();
83
- }, [defaultLocale, localization, fetchURL, localeFromParams, user?.id]);
82
+ }, [apiRoute, defaultLocale, localization, localeFromParams, user?.id]);
84
83
  return /*#__PURE__*/_jsx(LocaleContext, {
85
84
  value: locale,
86
85
  children: /*#__PURE__*/_jsx(LocaleLoadingContext, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["formatAdminURL","React","createContext","use","useEffect","useRef","useState","findLocaleFromCode","useAuth","useConfig","useSearchParams","useRouteTransition","LocaleContext","LocaleLoadingContext","localeIsLoading","setLocaleIsLoading","_","undefined","fetchPreferences","key","baseURL","fetch","credentials","headers","method","then","res","json","LocaleProvider","children","locale","initialLocaleFromPrefs","config","localization","routes","api","apiRoute","user","isTransitioning","defaultLocale","localeFromParams","get","setLocale","locales","length","code","isLoading","prevLocale","current","fetchURL","path","resetLocale","id","localeToUse","value","newLocale","_jsx","useLocaleLoading","useLocale"],"sources":["../../../src/providers/Locale/index.tsx"],"sourcesContent":["'use client'\n\nimport type { Locale } from 'payload'\n\nimport { formatAdminURL } from 'payload/shared'\nimport React, { createContext, use, useEffect, useRef, useState } from 'react'\n\nimport { findLocaleFromCode } from '../../utilities/findLocaleFromCode.js'\nimport { useAuth } from '../Auth/index.js'\nimport { useConfig } from '../Config/index.js'\nimport { useSearchParams } from '../RouterAdapter/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\n\nconst LocaleContext = createContext<Locale | null>(null)\n\nexport const LocaleLoadingContext = createContext({\n localeIsLoading: false,\n setLocaleIsLoading: (_: boolean) => undefined,\n})\n\nconst fetchPreferences = async <T extends Record<string, unknown> | string>(\n key: string,\n baseURL: string,\n): Promise<{ id: string; value: T }> =>\n await fetch(`${baseURL}/payload-preferences/${key}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })?.then((res) => res.json() as Promise<{ id: string; value: T }>)\n\nexport const LocaleProvider: React.FC<{ children?: React.ReactNode; locale?: Locale['code'] }> = ({\n children,\n /**\n The `locale` prop originates from the root layout, which does not have access to search params\n This component uses the `useSearchParams` hook to get the locale from the URL as precedence over this prop\n This prop does not update as the user navigates the site, because the root layout does not re-render\n */\n locale: initialLocaleFromPrefs,\n}) => {\n const {\n config: {\n localization = false,\n routes: { api: apiRoute },\n },\n } = useConfig()\n\n const { user } = useAuth()\n const { isTransitioning } = useRouteTransition()\n\n const defaultLocale = localization ? localization.defaultLocale : 'en'\n\n const localeFromParams = useSearchParams().get('locale')\n\n const [locale, setLocale] = React.useState<Locale | null>(() => {\n if (!localization || (localization && !localization.locales.length)) {\n return null\n }\n\n return (\n findLocaleFromCode(localization, localeFromParams) ||\n findLocaleFromCode(localization, initialLocaleFromPrefs) ||\n findLocaleFromCode(localization, defaultLocale) ||\n findLocaleFromCode(localization, localization.locales[0].code)\n )\n })\n\n const [isLoading, setLocaleIsLoading] = useState(false)\n\n const prevLocale = useRef<Locale | null>(locale)\n\n useEffect(() => {\n // Keep fields disabled until the new locale's document state finishes loading.\n if (locale?.code !== prevLocale.current?.code && !isTransitioning) {\n setLocaleIsLoading(false)\n prevLocale.current = locale\n }\n }, [isTransitioning, locale])\n\n const fetchURL = formatAdminURL({\n apiRoute,\n path: '',\n })\n\n useEffect(() => {\n /**\n * This effect should only run when `localeFromParams` changes, i.e. when the user clicks an anchor link\n * The root layout, which sends the initial locale from prefs, will not re-render as the user navigates the site\n * For this reason, we need to fetch the locale from prefs if the search params clears the `locale` query param\n */\n async function resetLocale() {\n if (localization && user?.id) {\n const localeToUse =\n localeFromParams ||\n (await fetchPreferences<Locale['code']>('locale', fetchURL)?.then((res) => res.value))\n\n const newLocale =\n findLocaleFromCode(localization, localeToUse) ||\n findLocaleFromCode(localization, defaultLocale) ||\n findLocaleFromCode(localization, localization?.locales?.[0]?.code)\n\n if (newLocale) {\n setLocale(newLocale)\n }\n }\n }\n\n void resetLocale()\n }, [defaultLocale, localization, fetchURL, localeFromParams, user?.id])\n\n return (\n <LocaleContext value={locale}>\n <LocaleLoadingContext value={{ localeIsLoading: isLoading, setLocaleIsLoading }}>\n {children}\n </LocaleLoadingContext>\n </LocaleContext>\n )\n}\n\nexport const useLocaleLoading = () => use(LocaleLoadingContext)\n\nexport const useLocale = (): Locale | null => use(LocaleContext)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["formatAdminURL","React","createContext","use","useEffect","useRef","useState","findLocaleFromCode","useAuth","useConfig","useSearchParams","useRouteTransition","LocaleContext","LocaleLoadingContext","localeIsLoading","setLocaleIsLoading","_","undefined","fetchPreferences","key","apiRoute","fetch","path","credentials","headers","method","then","res","json","LocaleProvider","children","locale","initialLocaleFromPrefs","config","localization","routes","api","user","isTransitioning","defaultLocale","localeFromParams","get","setLocale","locales","length","code","isLoading","prevLocale","current","resetLocale","id","localeToUse","value","newLocale","_jsx","useLocaleLoading","useLocale"],"sources":["../../../src/providers/Locale/index.tsx"],"sourcesContent":["'use client'\n\nimport type { Locale } from 'payload'\n\nimport { formatAdminURL } from 'payload/shared'\nimport React, { createContext, use, useEffect, useRef, useState } from 'react'\n\nimport { findLocaleFromCode } from '../../utilities/findLocaleFromCode.js'\nimport { useAuth } from '../Auth/index.js'\nimport { useConfig } from '../Config/index.js'\nimport { useSearchParams } from '../RouterAdapter/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\n\nconst LocaleContext = createContext<Locale | null>(null)\n\nexport const LocaleLoadingContext = createContext({\n localeIsLoading: false,\n setLocaleIsLoading: (_: boolean) => undefined,\n})\n\nconst fetchPreferences = async <T extends Record<string, unknown> | string>(\n key: string,\n apiRoute: string,\n): Promise<{ id: string; value: T }> =>\n await fetch(\n formatAdminURL({\n apiRoute,\n path: `/payload-preferences/${key}`,\n }),\n {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n },\n )?.then((res) => res.json() as Promise<{ id: string; value: T }>)\n\nexport const LocaleProvider: React.FC<{ children?: React.ReactNode; locale?: Locale['code'] }> = ({\n children,\n /**\n The `locale` prop originates from the root layout, which does not have access to search params\n This component uses the `useSearchParams` hook to get the locale from the URL as precedence over this prop\n This prop does not update as the user navigates the site, because the root layout does not re-render\n */\n locale: initialLocaleFromPrefs,\n}) => {\n const {\n config: {\n localization = false,\n routes: { api: apiRoute },\n },\n } = useConfig()\n\n const { user } = useAuth()\n const { isTransitioning } = useRouteTransition()\n\n const defaultLocale = localization ? localization.defaultLocale : 'en'\n\n const localeFromParams = useSearchParams().get('locale')\n\n const [locale, setLocale] = React.useState<Locale | null>(() => {\n if (!localization || (localization && !localization.locales.length)) {\n return null\n }\n\n return (\n findLocaleFromCode(localization, localeFromParams) ||\n findLocaleFromCode(localization, initialLocaleFromPrefs) ||\n findLocaleFromCode(localization, defaultLocale) ||\n findLocaleFromCode(localization, localization.locales[0].code)\n )\n })\n\n const [isLoading, setLocaleIsLoading] = useState(false)\n\n const prevLocale = useRef<Locale | null>(locale)\n\n useEffect(() => {\n // Keep fields disabled until the new locale's document state finishes loading.\n if (locale?.code !== prevLocale.current?.code && !isTransitioning) {\n setLocaleIsLoading(false)\n prevLocale.current = locale\n }\n }, [isTransitioning, locale])\n\n useEffect(() => {\n /**\n * This effect should only run when `localeFromParams` changes, i.e. when the user clicks an anchor link\n * The root layout, which sends the initial locale from prefs, will not re-render as the user navigates the site\n * For this reason, we need to fetch the locale from prefs if the search params clears the `locale` query param\n */\n async function resetLocale() {\n if (localization && user?.id) {\n const localeToUse =\n localeFromParams ||\n (await fetchPreferences<Locale['code']>('locale', apiRoute)?.then((res) => res.value))\n\n const newLocale =\n findLocaleFromCode(localization, localeToUse) ||\n findLocaleFromCode(localization, defaultLocale) ||\n findLocaleFromCode(localization, localization?.locales?.[0]?.code)\n\n if (newLocale) {\n setLocale(newLocale)\n }\n }\n }\n\n void resetLocale()\n }, [apiRoute, defaultLocale, localization, localeFromParams, user?.id])\n\n return (\n <LocaleContext value={locale}>\n <LocaleLoadingContext value={{ localeIsLoading: isLoading, setLocaleIsLoading }}>\n {children}\n </LocaleLoadingContext>\n </LocaleContext>\n )\n}\n\nexport const useLocaleLoading = () => use(LocaleLoadingContext)\n\nexport const useLocale = (): Locale | null => use(LocaleContext)\n"],"mappings":"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","ignoreList":[]}