@payloadcms/ui 3.69.0-internal.2883df2 → 3.69.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/dist/elements/AddNewRelation/index.js +1 -1
  2. package/dist/elements/AddNewRelation/index.js.map +1 -1
  3. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  4. package/dist/elements/AppHeader/index.js +2 -1
  5. package/dist/elements/AppHeader/index.js.map +1 -1
  6. package/dist/elements/AppHeader/index.scss +0 -1
  7. package/dist/elements/Autosave/index.d.ts.map +1 -1
  8. package/dist/elements/Autosave/index.js +20 -5
  9. package/dist/elements/Autosave/index.js.map +1 -1
  10. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  11. package/dist/elements/BulkUpload/FormsManager/index.js +10 -6
  12. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  13. package/dist/elements/CopyLocaleData/index.d.ts.map +1 -1
  14. package/dist/elements/CopyLocaleData/index.js +36 -39
  15. package/dist/elements/CopyLocaleData/index.js.map +1 -1
  16. package/dist/elements/DefaultListViewTabs/index.d.ts.map +1 -1
  17. package/dist/elements/DefaultListViewTabs/index.js +1 -2
  18. package/dist/elements/DefaultListViewTabs/index.js.map +1 -1
  19. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  20. package/dist/elements/DeleteDocument/index.js +8 -5
  21. package/dist/elements/DeleteDocument/index.js.map +1 -1
  22. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  23. package/dist/elements/DeleteMany/index.js +19 -16
  24. package/dist/elements/DeleteMany/index.js.map +1 -1
  25. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  26. package/dist/elements/DocumentControls/index.js.map +1 -1
  27. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  28. package/dist/elements/DuplicateDocument/index.js +6 -3
  29. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  30. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  31. package/dist/elements/EditMany/DrawerContent.js +14 -6
  32. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  33. package/dist/elements/FolderView/Cell/index.client.d.ts.map +1 -1
  34. package/dist/elements/FolderView/Cell/index.client.js +9 -2
  35. package/dist/elements/FolderView/Cell/index.client.js.map +1 -1
  36. package/dist/elements/FolderView/CurrentFolderActions/index.d.ts.map +1 -1
  37. package/dist/elements/FolderView/CurrentFolderActions/index.js +7 -4
  38. package/dist/elements/FolderView/CurrentFolderActions/index.js.map +1 -1
  39. package/dist/elements/FolderView/MoveDocToFolder/index.d.ts +1 -1
  40. package/dist/elements/FolderView/MoveDocToFolder/index.d.ts.map +1 -1
  41. package/dist/elements/FolderView/MoveDocToFolder/index.js +5 -1
  42. package/dist/elements/FolderView/MoveDocToFolder/index.js.map +1 -1
  43. package/dist/elements/ItemsDrawer/ItemSearch/index.d.ts +8 -0
  44. package/dist/elements/ItemsDrawer/ItemSearch/index.d.ts.map +1 -0
  45. package/dist/elements/ItemsDrawer/ItemSearch/index.js +56 -0
  46. package/dist/elements/ItemsDrawer/ItemSearch/index.js.map +1 -0
  47. package/dist/elements/ItemsDrawer/ItemSearch/index.scss +38 -0
  48. package/dist/elements/ItemsDrawer/index.d.ts +15 -0
  49. package/dist/elements/ItemsDrawer/index.d.ts.map +1 -0
  50. package/dist/elements/ItemsDrawer/index.js +195 -0
  51. package/dist/elements/ItemsDrawer/index.js.map +1 -0
  52. package/dist/elements/ItemsDrawer/index.scss +102 -0
  53. package/dist/elements/Link/index.d.ts.map +1 -1
  54. package/dist/elements/Link/index.js +5 -3
  55. package/dist/elements/Link/index.js.map +1 -1
  56. package/dist/elements/ListControls/index.d.ts.map +1 -1
  57. package/dist/elements/ListControls/index.js +6 -4
  58. package/dist/elements/ListControls/index.js.map +1 -1
  59. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts.map +1 -1
  60. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +9 -2
  61. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
  62. package/dist/elements/PermanentlyDeleteButton/index.d.ts.map +1 -1
  63. package/dist/elements/PermanentlyDeleteButton/index.js +21 -15
  64. package/dist/elements/PermanentlyDeleteButton/index.js.map +1 -1
  65. package/dist/elements/Popup/PopupButtonList/index.scss +1 -0
  66. package/dist/elements/Popup/PopupTrigger/index.d.ts +1 -1
  67. package/dist/elements/Popup/PopupTrigger/index.d.ts.map +1 -1
  68. package/dist/elements/Popup/PopupTrigger/index.js +24 -92
  69. package/dist/elements/Popup/PopupTrigger/index.js.map +1 -1
  70. package/dist/elements/Popup/index.d.ts +32 -1
  71. package/dist/elements/Popup/index.d.ts.map +1 -1
  72. package/dist/elements/Popup/index.js +249 -122
  73. package/dist/elements/Popup/index.js.map +1 -1
  74. package/dist/elements/Popup/index.scss +49 -231
  75. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  76. package/dist/elements/PublishButton/ScheduleDrawer/index.js +6 -2
  77. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  78. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  79. package/dist/elements/PublishButton/index.js +17 -5
  80. package/dist/elements/PublishButton/index.js.map +1 -1
  81. package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
  82. package/dist/elements/PublishMany/DrawerContent.js +8 -5
  83. package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
  84. package/dist/elements/QueryPresets/QueryPresetBar/index.d.ts.map +1 -1
  85. package/dist/elements/QueryPresets/QueryPresetBar/index.js +11 -4
  86. package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
  87. package/dist/elements/RestoreButton/index.d.ts.map +1 -1
  88. package/dist/elements/RestoreButton/index.js +21 -15
  89. package/dist/elements/RestoreButton/index.js.map +1 -1
  90. package/dist/elements/RestoreMany/index.d.ts.map +1 -1
  91. package/dist/elements/RestoreMany/index.js +17 -14
  92. package/dist/elements/RestoreMany/index.js.map +1 -1
  93. package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
  94. package/dist/elements/SaveDraftButton/index.js +11 -5
  95. package/dist/elements/SaveDraftButton/index.js.map +1 -1
  96. package/dist/elements/Status/index.d.ts.map +1 -1
  97. package/dist/elements/Status/index.js +11 -5
  98. package/dist/elements/Status/index.js.map +1 -1
  99. package/dist/elements/StepNav/context.d.ts.map +1 -1
  100. package/dist/elements/StepNav/context.js +9 -1
  101. package/dist/elements/StepNav/context.js.map +1 -1
  102. package/dist/elements/StepNav/index.scss +0 -1
  103. package/dist/elements/Table/DefaultCell/fields/Relationship/index.d.ts.map +1 -1
  104. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js +39 -41
  105. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
  106. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  107. package/dist/elements/Table/OrderableTable.js +5 -1
  108. package/dist/elements/Table/OrderableTable.js.map +1 -1
  109. package/dist/elements/Table/RelationshipProvider/index.d.ts.map +1 -1
  110. package/dist/elements/Table/RelationshipProvider/index.js +25 -24
  111. package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
  112. package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
  113. package/dist/elements/UnpublishMany/DrawerContent.js +8 -5
  114. package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
  115. package/dist/elements/Upload/index.d.ts.map +1 -1
  116. package/dist/elements/Upload/index.js +7 -5
  117. package/dist/elements/Upload/index.js.map +1 -1
  118. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
  119. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +14 -8
  120. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  121. package/dist/exports/client/index.d.ts +1 -0
  122. package/dist/exports/client/index.d.ts.map +1 -1
  123. package/dist/exports/client/index.js +24 -24
  124. package/dist/exports/client/index.js.map +4 -4
  125. package/dist/exports/rsc/index.d.ts +1 -0
  126. package/dist/exports/rsc/index.d.ts.map +1 -1
  127. package/dist/exports/rsc/index.js +1 -0
  128. package/dist/exports/rsc/index.js.map +1 -1
  129. package/dist/exports/shared/index.d.ts +3 -0
  130. package/dist/exports/shared/index.d.ts.map +1 -1
  131. package/dist/exports/shared/index.js +2 -2
  132. package/dist/exports/shared/index.js.map +4 -4
  133. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  134. package/dist/fields/Relationship/Input.js +12 -5
  135. package/dist/fields/Relationship/Input.js.map +1 -1
  136. package/dist/fields/Upload/Input.d.ts.map +1 -1
  137. package/dist/fields/Upload/Input.js +7 -3
  138. package/dist/fields/Upload/Input.js.map +1 -1
  139. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js +8 -1
  140. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js.map +1 -1
  141. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts.map +1 -1
  142. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +2 -2
  143. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
  144. package/dist/providers/Auth/index.d.ts.map +1 -1
  145. package/dist/providers/Auth/index.js +31 -13
  146. package/dist/providers/Auth/index.js.map +1 -1
  147. package/dist/providers/DocumentInfo/index.d.ts +1 -1
  148. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  149. package/dist/providers/DocumentInfo/index.js +16 -15
  150. package/dist/providers/DocumentInfo/index.js.map +1 -1
  151. package/dist/providers/DocumentInfo/useGetDocPermissions.d.ts +1 -2
  152. package/dist/providers/DocumentInfo/useGetDocPermissions.d.ts.map +1 -1
  153. package/dist/providers/DocumentInfo/useGetDocPermissions.js +16 -6
  154. package/dist/providers/DocumentInfo/useGetDocPermissions.js.map +1 -1
  155. package/dist/providers/Folders/index.d.ts.map +1 -1
  156. package/dist/providers/Folders/index.js +12 -8
  157. package/dist/providers/Folders/index.js.map +1 -1
  158. package/dist/providers/Locale/index.d.ts.map +1 -1
  159. package/dist/providers/Locale/index.js +45 -34
  160. package/dist/providers/Locale/index.js.map +1 -1
  161. package/dist/providers/Preferences/index.d.ts.map +1 -1
  162. package/dist/providers/Preferences/index.js +16 -7
  163. package/dist/providers/Preferences/index.js.map +1 -1
  164. package/dist/providers/RouteTransition/index.d.ts.map +1 -1
  165. package/dist/providers/RouteTransition/index.js +6 -1
  166. package/dist/providers/RouteTransition/index.js.map +1 -1
  167. package/dist/scss/app.scss +14 -1
  168. package/dist/styles.css +1 -1
  169. package/dist/utilities/buildFormState.js +2 -2
  170. package/dist/utilities/buildFormState.js.map +1 -1
  171. package/dist/utilities/getGlobalData.d.ts +11 -0
  172. package/dist/utilities/getGlobalData.d.ts.map +1 -0
  173. package/dist/utilities/getGlobalData.js +49 -0
  174. package/dist/utilities/getGlobalData.js.map +1 -0
  175. package/dist/utilities/getNavGroups.d.ts +5 -0
  176. package/dist/utilities/getNavGroups.d.ts.map +1 -0
  177. package/dist/utilities/getNavGroups.js +22 -0
  178. package/dist/utilities/getNavGroups.js.map +1 -0
  179. package/dist/utilities/getVisibleEntities.d.ts +5 -0
  180. package/dist/utilities/getVisibleEntities.d.ts.map +1 -0
  181. package/dist/utilities/getVisibleEntities.js +31 -0
  182. package/dist/utilities/getVisibleEntities.js.map +1 -0
  183. package/dist/utilities/groupNavItems.d.ts +3 -0
  184. package/dist/utilities/groupNavItems.d.ts.map +1 -1
  185. package/dist/utilities/groupNavItems.js +3 -0
  186. package/dist/utilities/groupNavItems.js.map +1 -1
  187. package/dist/utilities/handleBackToDashboard.d.ts +2 -1
  188. package/dist/utilities/handleBackToDashboard.d.ts.map +1 -1
  189. package/dist/utilities/handleBackToDashboard.js +4 -2
  190. package/dist/utilities/handleBackToDashboard.js.map +1 -1
  191. package/dist/utilities/handleGoBack.d.ts +2 -1
  192. package/dist/utilities/handleGoBack.d.ts.map +1 -1
  193. package/dist/utilities/handleGoBack.js +2 -1
  194. package/dist/utilities/handleGoBack.js.map +1 -1
  195. package/dist/utilities/normalizeRelationshipValue.spec.js +1 -1
  196. package/dist/utilities/normalizeRelationshipValue.spec.js.map +1 -1
  197. package/dist/views/CollectionFolder/index.js +1 -1
  198. package/dist/views/CollectionFolder/index.js.map +1 -1
  199. package/dist/views/Edit/Auth/index.d.ts.map +1 -1
  200. package/dist/views/Edit/Auth/index.js +22 -21
  201. package/dist/views/Edit/Auth/index.js.map +1 -1
  202. package/dist/views/Edit/SetDocumentStepNav/index.d.ts.map +1 -1
  203. package/dist/views/Edit/SetDocumentStepNav/index.js +26 -6
  204. package/dist/views/Edit/SetDocumentStepNav/index.js.map +1 -1
  205. package/dist/views/Edit/index.d.ts.map +1 -1
  206. package/dist/views/Edit/index.js +7 -4
  207. package/dist/views/Edit/index.js.map +1 -1
  208. package/dist/views/List/index.d.ts.map +1 -1
  209. package/dist/views/List/index.js +3 -2
  210. package/dist/views/List/index.js.map +1 -1
  211. package/dist/widgets/CollectionCards/index.d.ts +5 -0
  212. package/dist/widgets/CollectionCards/index.d.ts.map +1 -0
  213. package/dist/widgets/CollectionCards/index.js +135 -0
  214. package/dist/widgets/CollectionCards/index.js.map +1 -0
  215. package/dist/widgets/CollectionCards/index.scss +70 -0
  216. package/package.json +5 -5
@@ -1,3 +1,4 @@
1
+ import { formatAdminURL } from 'payload/shared';
1
2
  import * as qs from 'qs-esm';
2
3
  import React from 'react';
3
4
  import { hasSavePermission as getHasSavePermission } from '../../utilities/hasSavePermission.js';
@@ -10,7 +11,6 @@ export const useGetDocPermissions = ({
10
11
  i18n,
11
12
  locale,
12
13
  permissions,
13
- serverURL,
14
14
  setDocPermissions,
15
15
  setHasPublishPermission,
16
16
  setHasSavePermission
@@ -25,9 +25,14 @@ export const useGetDocPermissions = ({
25
25
  globalSlug
26
26
  });
27
27
  if (newIsEditing) {
28
- const docAccessURL = collectionSlug ? `/${collectionSlug}/access/${idToUse}` : globalSlug ? `/globals/${globalSlug}/access` : null;
29
- if (docAccessURL) {
30
- const res = await fetch(`${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`, {
28
+ const docAccessPath = collectionSlug ? `/${collectionSlug}/access/${idToUse}` : globalSlug ? `/globals/${globalSlug}/access` : null;
29
+ if (docAccessPath) {
30
+ const res = await fetch(formatAdminURL({
31
+ apiRoute: api,
32
+ path: `${docAccessPath}${qs.stringify(params, {
33
+ addQueryPrefix: true
34
+ })}`
35
+ }), {
31
36
  body: JSON.stringify({
32
37
  ...(data || {}),
33
38
  _status: 'draft'
@@ -40,7 +45,12 @@ export const useGetDocPermissions = ({
40
45
  method: 'post'
41
46
  });
42
47
  const json = await res.json();
43
- const publishedAccessJSON = await fetch(`${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`, {
48
+ const publishedAccessJSON = await fetch(formatAdminURL({
49
+ apiRoute: api,
50
+ path: `${docAccessPath}${qs.stringify(params, {
51
+ addQueryPrefix: true
52
+ })}`
53
+ }), {
44
54
  body: JSON.stringify({
45
55
  ...(data || {}),
46
56
  _status: 'published'
@@ -73,5 +83,5 @@ export const useGetDocPermissions = ({
73
83
  isEditing: newIsEditing
74
84
  }));
75
85
  }
76
- }, [locale, id, collectionSlug, globalSlug, serverURL, api, i18n.language, setDocPermissions, setHasSavePermission, setHasPublishPermission, permissions?.collections, permissions?.globals]);
86
+ }, [locale, id, collectionSlug, globalSlug, api, i18n.language, setDocPermissions, setHasSavePermission, setHasPublishPermission, permissions?.collections, permissions?.globals]);
77
87
  //# sourceMappingURL=useGetDocPermissions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGetDocPermissions.js","names":["qs","React","hasSavePermission","getHasSavePermission","isEditing","getIsEditing","useGetDocPermissions","id","api","collectionSlug","globalSlug","i18n","locale","permissions","serverURL","setDocPermissions","setHasPublishPermission","setHasSavePermission","useCallback","data","params","undefined","idToUse","newIsEditing","docAccessURL","res","fetch","stringify","body","JSON","_status","credentials","headers","language","method","json","publishedAccessJSON","then","docPermissions","update","newDocPermissions","collections","globals"],"sources":["../../../src/providers/DocumentInfo/useGetDocPermissions.tsx"],"sourcesContent":["import type { Data, SanitizedDocumentPermissions, SanitizedPermissions } from 'payload'\n\nimport * as qs from 'qs-esm'\nimport React from 'react'\n\nimport { hasSavePermission as getHasSavePermission } from '../../utilities/hasSavePermission.js'\nimport { isEditing as getIsEditing } from '../../utilities/isEditing.js'\n\nexport type GetDocPermissions = (data?: Data) => Promise<void>\n\nexport const useGetDocPermissions = ({\n id,\n api,\n collectionSlug,\n globalSlug,\n i18n,\n locale,\n permissions,\n serverURL,\n setDocPermissions,\n setHasPublishPermission,\n setHasSavePermission,\n}: {\n api: string\n collectionSlug: string\n globalSlug: string\n i18n: any\n id: string\n locale: string\n permissions: SanitizedPermissions\n serverURL: string\n setDocPermissions: React.Dispatch<React.SetStateAction<SanitizedDocumentPermissions>>\n setHasPublishPermission: React.Dispatch<React.SetStateAction<boolean>>\n setHasSavePermission: React.Dispatch<React.SetStateAction<boolean>>\n}): GetDocPermissions =>\n React.useCallback(\n async (data: Data) => {\n const params = {\n locale: locale || undefined,\n }\n\n const idToUse = data?.id || id\n const newIsEditing = getIsEditing({ id: idToUse, collectionSlug, globalSlug })\n\n if (newIsEditing) {\n const docAccessURL = collectionSlug\n ? `/${collectionSlug}/access/${idToUse}`\n : globalSlug\n ? `/globals/${globalSlug}/access`\n : null\n\n if (docAccessURL) {\n const res = await fetch(`${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`, {\n body: JSON.stringify({\n ...(data || {}),\n _status: 'draft',\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'post',\n })\n\n const json: SanitizedDocumentPermissions = await res.json()\n\n const publishedAccessJSON = await fetch(\n `${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`,\n {\n body: JSON.stringify({\n ...(data || {}),\n _status: 'published',\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n ).then((res) => res.json())\n\n setDocPermissions(json)\n\n setHasSavePermission(\n getHasSavePermission({\n collectionSlug,\n docPermissions: json,\n globalSlug,\n isEditing: newIsEditing,\n }),\n )\n\n setHasPublishPermission(publishedAccessJSON?.update)\n }\n } else {\n // when creating new documents, there is no permissions saved for this document yet\n // use the generic entity permissions instead\n const newDocPermissions = collectionSlug\n ? permissions?.collections?.[collectionSlug]\n : permissions?.globals?.[globalSlug]\n\n setDocPermissions(newDocPermissions)\n\n setHasSavePermission(\n getHasSavePermission({\n collectionSlug,\n docPermissions: newDocPermissions,\n globalSlug,\n isEditing: newIsEditing,\n }),\n )\n }\n },\n [\n locale,\n id,\n collectionSlug,\n globalSlug,\n serverURL,\n api,\n i18n.language,\n setDocPermissions,\n setHasSavePermission,\n setHasPublishPermission,\n permissions?.collections,\n permissions?.globals,\n ],\n )\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useGetDocPermissions.js","names":["formatAdminURL","qs","React","hasSavePermission","getHasSavePermission","isEditing","getIsEditing","useGetDocPermissions","id","api","collectionSlug","globalSlug","i18n","locale","permissions","setDocPermissions","setHasPublishPermission","setHasSavePermission","useCallback","data","params","undefined","idToUse","newIsEditing","docAccessPath","res","fetch","apiRoute","path","stringify","addQueryPrefix","body","JSON","_status","credentials","headers","language","method","json","publishedAccessJSON","then","docPermissions","update","newDocPermissions","collections","globals"],"sources":["../../../src/providers/DocumentInfo/useGetDocPermissions.tsx"],"sourcesContent":["import type { Data, SanitizedDocumentPermissions, SanitizedPermissions } from 'payload'\n\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\n\nimport { hasSavePermission as getHasSavePermission } from '../../utilities/hasSavePermission.js'\nimport { isEditing as getIsEditing } from '../../utilities/isEditing.js'\n\nexport type GetDocPermissions = (data?: Data) => Promise<void>\n\nexport const useGetDocPermissions = ({\n id,\n api,\n collectionSlug,\n globalSlug,\n i18n,\n locale,\n permissions,\n setDocPermissions,\n setHasPublishPermission,\n setHasSavePermission,\n}: {\n api: string\n collectionSlug: string\n globalSlug: string\n i18n: any\n id: string\n locale: string\n permissions: SanitizedPermissions\n setDocPermissions: React.Dispatch<React.SetStateAction<SanitizedDocumentPermissions>>\n setHasPublishPermission: React.Dispatch<React.SetStateAction<boolean>>\n setHasSavePermission: React.Dispatch<React.SetStateAction<boolean>>\n}): GetDocPermissions =>\n React.useCallback(\n async (data: Data) => {\n const params = {\n locale: locale || undefined,\n }\n\n const idToUse = data?.id || id\n const newIsEditing = getIsEditing({ id: idToUse, collectionSlug, globalSlug })\n\n if (newIsEditing) {\n const docAccessPath: `/${string}` = collectionSlug\n ? `/${collectionSlug}/access/${idToUse}`\n : globalSlug\n ? `/globals/${globalSlug}/access`\n : null\n\n if (docAccessPath) {\n const res = await fetch(\n formatAdminURL({\n apiRoute: api,\n path: `${docAccessPath}${qs.stringify(params, { addQueryPrefix: true })}`,\n }),\n {\n body: JSON.stringify({\n ...(data || {}),\n _status: 'draft',\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'post',\n },\n )\n\n const json: SanitizedDocumentPermissions = await res.json()\n\n const publishedAccessJSON = await fetch(\n formatAdminURL({\n apiRoute: api,\n path: `${docAccessPath}${qs.stringify(params, { addQueryPrefix: true })}`,\n }),\n {\n body: JSON.stringify({\n ...(data || {}),\n _status: 'published',\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n ).then((res) => res.json())\n\n setDocPermissions(json)\n\n setHasSavePermission(\n getHasSavePermission({\n collectionSlug,\n docPermissions: json,\n globalSlug,\n isEditing: newIsEditing,\n }),\n )\n\n setHasPublishPermission(publishedAccessJSON?.update)\n }\n } else {\n // when creating new documents, there is no permissions saved for this document yet\n // use the generic entity permissions instead\n const newDocPermissions = collectionSlug\n ? permissions?.collections?.[collectionSlug]\n : permissions?.globals?.[globalSlug]\n\n setDocPermissions(newDocPermissions)\n\n setHasSavePermission(\n getHasSavePermission({\n collectionSlug,\n docPermissions: newDocPermissions,\n globalSlug,\n isEditing: newIsEditing,\n }),\n )\n }\n },\n [\n locale,\n id,\n collectionSlug,\n globalSlug,\n api,\n i18n.language,\n setDocPermissions,\n setHasSavePermission,\n setHasPublishPermission,\n permissions?.collections,\n permissions?.globals,\n ],\n )\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Folders/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAK/F,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,KAAK,iBAAiB,GAAG;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,cAAc,EAAE,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,2BAA2B,EAAE,cAAc,EAAE,CAAA;IAC7C;;OAEG;IACH,QAAQ,CAAC,wBAAwB,CAAC,EAAE,cAAc,EAAE,CAAA;IACpD,0BAA0B,EAAE,cAAc,EAAE,CAAA;IAC5C,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAChC,qBAAqB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAA;IAC1D,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,aAAa,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACvC,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC9B,eAAe,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAC9C,eAAe,EAAE,MAAM,CAAA;IACvB,sBAAsB,EAAE,sBAAsB,CAAA;IAC9C,oBAAoB,EAAE,MAAM,CAAA;IAC5B,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,sBAAsB,EAAE,KAAK,CAAC,SAAS,CAAA;IACvC,UAAU,EAAE,cAAc,EAAE,GAAG,SAAS,CAAA;IACxC,cAAc,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAA;IACxD,gBAAgB,CAAC,EAAE,MAAM,gBAAgB,EAAE,CAAA;IAC3C,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAA;IAC3C,YAAY,EAAE,CAAC,IAAI,EAAE;QACnB,WAAW,EAAE,gBAAgB,EAAE,CAAA;QAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAC7B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnB,WAAW,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,gBAAgB,CAAA;KAAE,KAAK,IAAI,CAAA;IAC/F,cAAc,EAAE,CAAC,IAAI,EAAE;QACrB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAA;QAC1B,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,gBAAgB,CAAA;KACvB,KAAK,IAAI,CAAA;IACV,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,iBAAiB,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACnF,MAAM,EAAE,MAAM,CAAA;IACd,yBAAyB,CAAC,EAAE,cAAc,EAAE,CAAA;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAA;IACrD,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAA;IACxE,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;IAChE,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5D,IAAI,EAAE,cAAc,CAAA;IACpB,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAA;CAChC,CAAA;AAqCD,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,QAAQ,CAAC,2BAA2B,CAAC,EAAE,cAAc,EAAE,CAAA;IACvD;;OAEG;IACH,QAAQ,CAAC,wBAAwB,EAAE,cAAc,EAAE,CAAA;IACnD;;OAEG;IACH,QAAQ,CAAC,0BAA0B,EAAE,cAAc,EAAE,CAAA;IACrD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,IAAI,MAAM,EAAE,CAAA;IACtC;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACzC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,gBAAgB,EAAE,CAAA;IACtC;;OAEG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACnC;;OAEG;IACH,QAAQ,CAAC,sBAAsB,EAAE,KAAK,CAAC,SAAS,CAAA;IAChD;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAA;IACvD;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAA;IAC9B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAA;CACxC,CAAA;AACD,wBAAgB,cAAc,CAAC,EAC7B,2BAA2B,EAAE,qBAAqB,EAClD,wBAA6B,EAC7B,0BAA0B,EAC1B,mBAA0B,EAC1B,cAAc,EACd,WAAW,EAAE,qBAA0B,EACvC,QAAQ,EACR,SAAS,EACT,eAAe,EACf,QAAQ,EACR,sBAAsB,EAAE,6BAA6B,EACrD,WAAW,EAAE,oBAAoB,EACjC,MAAM,EACN,IAAa,EACb,UAAU,GACX,EAAE,mBAAmB,qBAoqBrB;AAED,wBAAgB,SAAS,IAAI,kBAAkB,CAQ9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Folders/index.tsx"],"names":[],"mappings":"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"}
@@ -69,8 +69,7 @@ export function FolderProvider({
69
69
  config
70
70
  } = useConfig();
71
71
  const {
72
- routes,
73
- serverURL
72
+ routes
74
73
  } = config;
75
74
  const drawerDepth = useDrawerDepth();
76
75
  const {
@@ -144,10 +143,9 @@ export function FolderProvider({
144
143
  });
145
144
  return formatAdminURL({
146
145
  adminRoute: config.routes.admin,
147
- path: `${baseFolderPath}${toFolderID ? `/${toFolderID}` : ''}${queryParams_0}`,
148
- serverURL: config.serverURL
146
+ path: `${baseFolderPath}${toFolderID ? `/${toFolderID}` : ''}${queryParams_0}`
149
147
  });
150
- }, [baseFolderPath, config.routes.admin, config.serverURL, mergeQuery]);
148
+ }, [baseFolderPath, config.routes.admin, mergeQuery]);
151
149
  const getItem = React.useCallback(itemKey => {
152
150
  return [...subfolders, ...documents].find(doc => doc.itemKey === itemKey);
153
151
  }, [documents, subfolders]);
@@ -482,7 +480,10 @@ export function FolderProvider({
482
480
  }, {
483
481
  addQueryPrefix: true
484
482
  });
485
- const req = await fetch(`${serverURL}${routes.api}/${folderCollectionSlug}/${folderID}${queryParams_1}`, {
483
+ const req = await fetch(formatAdminURL({
484
+ apiRoute: routes.api,
485
+ path: `/${folderCollectionSlug}/${folderID}${queryParams_1}`
486
+ }), {
486
487
  body: JSON.stringify({
487
488
  [folderFieldName]: toFolderID_0 || null
488
489
  }),
@@ -510,7 +511,10 @@ export function FolderProvider({
510
511
  addQueryPrefix: true
511
512
  });
512
513
  try {
513
- await fetch(`${serverURL}${routes.api}/${collectionSlug_1}${queryParams_2}`, {
514
+ await fetch(formatAdminURL({
515
+ apiRoute: routes.api,
516
+ path: `/${collectionSlug_1}${queryParams_2}`
517
+ }), {
514
518
  body: JSON.stringify({
515
519
  [folderFieldName]: toFolderID_0 || null
516
520
  }),
@@ -529,7 +533,7 @@ export function FolderProvider({
529
533
  }
530
534
  }
531
535
  clearSelections();
532
- }, [folderID, clearSelections, folderCollectionSlug, folderFieldName, routes.api, serverURL, t, localeCode]);
536
+ }, [folderID, clearSelections, folderCollectionSlug, folderFieldName, routes.api, t, localeCode]);
533
537
  const checkIfItemIsDisabled = React.useCallback(item_7 => {
534
538
  function folderAcceptsItem({
535
539
  item: item_8,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useRouter","useSearchParams","extractID","formatAdminURL","formatFolderOrDocumentItem","qs","React","toast","useDrawerDepth","parseSearchParams","useConfig","useLocale","useRouteTransition","useTranslation","groupItemIDsByRelation","Context","createContext","activeCollectionFolderSlugs","allCollectionFolderSlugs","allowCreateCollectionSlugs","breadcrumbs","checkIfItemIsDisabled","clearSelections","currentFolder","documents","dragOverlayItem","undefined","focusedRowIndex","folderCollectionConfig","folderCollectionSlug","folderFieldName","folderID","FolderResultsComponent","folderType","getFolderRoute","getSelectedItems","isDragging","itemKeysToMove","moveToFolder","Promise","resolve","onItemClick","onItemKeyPress","refineFolderData","search","selectedFolderCollections","selectedItemKeys","Set","setBreadcrumbs","setFocusedRowIndex","setIsDragging","sort","subfolders","FolderProvider","activeCollectionSlugs","allowMultiSelection","baseFolderPath","_breadcrumbsFromProps","children","InitialFolderResultsComponent","onItemClickFromProps","parentFolderContext","useFolder","config","routes","serverURL","drawerDepth","t","router","startRouteTransition","locale","localeCode","code","currentlySelectedIndexes","useRef","setSelectedFolderCollections","useState","setFolderResultsComponent","collections","find","collection","folders","slug","rawSearchParams","searchParams","useMemo","currentQuery","setCurrentQuery","setSelectedItemKeys","setDragOverlayItem","lastClickTime","totalCount","length","useCallback","current","mergeQuery","newQuery","page","mergedQuery","relationTo","query","updateURL","queryParams","replace","stringify","JSON","addQueryPrefix","toFolderID","adminRoute","admin","path","getItem","itemKey","doc","Array","from","reduce","acc","item","push","navigateAfterSelection","collectionSlug","docID","handleShiftSelection","targetIndex","allItems","existingIndexes","idx","has","firstSelectedIndex","Math","min","lastSelectedIndex","max","isWithinBounds","anchorIndex","distanceToFirst","abs","distanceToLast","startIndex","endIndex","newRangeIndexes","_","i","updateSelections","indexes","newSelectedFolderCollections","newSelectedItemKeys","index","includes","add","value","forEach","event","currentItem","ctrlKey","metaKey","shiftKey","isShiftPressed","isCtrlPressed","isCurrentlySelected","currentItemIndex","findIndex","preventDefault","isBackward","newItemIndex","selectedIndexes","newItem","size","prevIndex","nextIndex","clickedItem","doubleClicked","overlayItemKey","type","now","Date","args","itemsToMove","items","movingCurrentFolder","id","depth","req","fetch","api","body","credentials","headers","method","status","error","ids","Object","entries","limit","where","in","console","folderAcceptsItem","isArray","Boolean","some","isSelected","useEffect","_jsx","isUpload","useAsTitle","context","use","Error"],"sources":["../../../src/providers/Folders/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, CollectionSlug, FolderSortKeys } from 'payload'\nimport type { FolderBreadcrumb, FolderDocumentItemKey, FolderOrDocument } from 'payload/shared'\n\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { extractID, formatAdminURL, formatFolderOrDocumentItem } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useDrawerDepth } from '../../elements/Drawer/index.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { useConfig } from '../Config/index.js'\nimport { useLocale } from '../Locale/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\nimport { useTranslation } from '../Translation/index.js'\nimport { groupItemIDsByRelation } from './groupItemIDsByRelation.js'\n\ntype FolderQueryParams = {\n page?: string\n relationTo?: CollectionSlug[]\n search?: string\n sort?: string\n}\n\nexport type FileCardData = {\n filename: string\n id: number | string\n mimeType: string\n name: string\n url: string\n}\n\nexport type FolderContextValue = {\n /**\n * The collection slugs that a view can be filtered by\n * Used in the browse-by-folder view\n */\n activeCollectionFolderSlugs: CollectionSlug[]\n /**\n * Folder enabled collection slugs that can be populated within the provider\n */\n readonly allCollectionFolderSlugs?: CollectionSlug[]\n allowCreateCollectionSlugs: CollectionSlug[]\n breadcrumbs?: FolderBreadcrumb[]\n checkIfItemIsDisabled: (item: FolderOrDocument) => boolean\n clearSelections: () => void\n currentFolder?: FolderOrDocument | null\n documents?: FolderOrDocument[]\n dragOverlayItem?: FolderOrDocument | undefined\n focusedRowIndex: number\n folderCollectionConfig: ClientCollectionConfig\n folderCollectionSlug: string\n folderFieldName: string\n folderID?: number | string\n FolderResultsComponent: React.ReactNode\n folderType: CollectionSlug[] | undefined\n getFolderRoute: (toFolderID?: number | string) => string\n getSelectedItems?: () => FolderOrDocument[]\n isDragging: boolean\n itemKeysToMove?: Set<FolderDocumentItemKey>\n moveToFolder: (args: {\n itemsToMove: FolderOrDocument[]\n toFolderID?: number | string\n }) => Promise<void>\n onItemClick: (args: { event: React.MouseEvent; index: number; item: FolderOrDocument }) => void\n onItemKeyPress: (args: {\n event: React.KeyboardEvent\n index: number\n item: FolderOrDocument\n }) => void\n refineFolderData: (args: { query?: FolderQueryParams; updateURL: boolean }) => void\n search: string\n selectedFolderCollections?: CollectionSlug[]\n readonly selectedItemKeys: Set<FolderDocumentItemKey>\n setBreadcrumbs: React.Dispatch<React.SetStateAction<FolderBreadcrumb[]>>\n setFocusedRowIndex: React.Dispatch<React.SetStateAction<number>>\n setIsDragging: React.Dispatch<React.SetStateAction<boolean>>\n sort: FolderSortKeys\n subfolders?: FolderOrDocument[]\n}\n\nconst Context = React.createContext<FolderContextValue>({\n activeCollectionFolderSlugs: [],\n allCollectionFolderSlugs: [],\n allowCreateCollectionSlugs: [],\n breadcrumbs: [],\n checkIfItemIsDisabled: () => false,\n clearSelections: () => {},\n currentFolder: null,\n documents: [],\n dragOverlayItem: undefined,\n focusedRowIndex: -1,\n folderCollectionConfig: null,\n folderCollectionSlug: '',\n folderFieldName: 'folder',\n folderID: undefined,\n FolderResultsComponent: null,\n folderType: undefined,\n getFolderRoute: () => '',\n getSelectedItems: () => [],\n isDragging: false,\n itemKeysToMove: undefined,\n moveToFolder: () => Promise.resolve(undefined),\n onItemClick: () => undefined,\n onItemKeyPress: () => undefined,\n refineFolderData: () => undefined,\n search: '',\n selectedFolderCollections: undefined,\n selectedItemKeys: new Set<FolderDocumentItemKey>(),\n setBreadcrumbs: () => {},\n setFocusedRowIndex: () => -1,\n setIsDragging: () => false,\n sort: 'name',\n subfolders: [],\n})\n\nexport type FolderProviderProps = {\n /**\n * The collection slugs that are being viewed\n */\n readonly activeCollectionFolderSlugs?: CollectionSlug[]\n /**\n * Folder enabled collection slugs that can be populated within the provider\n */\n readonly allCollectionFolderSlugs: CollectionSlug[]\n /**\n * Array of slugs that can be created in the folder view\n */\n readonly allowCreateCollectionSlugs: CollectionSlug[]\n readonly allowMultiSelection?: boolean\n /**\n * The base folder route path\n *\n * @example\n * `/collections/:collectionSlug/:folderCollectionSlug`\n * or\n * `/browse-by-folder`\n */\n readonly baseFolderPath?: `/${string}`\n /**\n * Breadcrumbs for the current folder\n */\n readonly breadcrumbs?: FolderBreadcrumb[]\n /**\n * Children to render inside the provider\n */\n readonly children: React.ReactNode\n /**\n * All documents in the current folder\n */\n readonly documents: FolderOrDocument[]\n /**\n * The name of the field that contains the folder relation\n */\n readonly folderFieldName: string\n /**\n * The ID of the current folder\n */\n readonly folderID?: number | string\n /**\n * The component to render the folder results\n */\n readonly FolderResultsComponent: React.ReactNode\n /**\n * Optional function to call when an item is clicked\n */\n readonly onItemClick?: (itme: FolderOrDocument) => void\n /**\n * The intial search query\n */\n readonly search?: string\n /**\n * The sort order of the documents\n *\n * @example\n * `name` for descending\n * `-name` for ascending\n */\n readonly sort?: FolderSortKeys\n /**\n * All subfolders in the current folder\n */\n readonly subfolders: FolderOrDocument[]\n}\nexport function FolderProvider({\n activeCollectionFolderSlugs: activeCollectionSlugs,\n allCollectionFolderSlugs = [],\n allowCreateCollectionSlugs,\n allowMultiSelection = true,\n baseFolderPath,\n breadcrumbs: _breadcrumbsFromProps = [],\n children,\n documents,\n folderFieldName,\n folderID,\n FolderResultsComponent: InitialFolderResultsComponent,\n onItemClick: onItemClickFromProps,\n search,\n sort = 'name',\n subfolders,\n}: FolderProviderProps) {\n const parentFolderContext = useFolder()\n const { config } = useConfig()\n const { routes, serverURL } = config\n const drawerDepth = useDrawerDepth()\n const { t } = useTranslation()\n const router = useRouter()\n const { startRouteTransition } = useRouteTransition()\n const locale = useLocale()\n const localeCode = locale ? locale.code : undefined\n\n const currentlySelectedIndexes = React.useRef(new Set<number>())\n\n const [selectedFolderCollections, setSelectedFolderCollections] = React.useState<\n CollectionSlug[]\n >([])\n const [FolderResultsComponent, setFolderResultsComponent] = React.useState(\n InitialFolderResultsComponent || (() => null),\n )\n const [folderCollectionConfig] = React.useState(() =>\n config.collections.find(\n (collection) => config.folders && collection.slug === config.folders.slug,\n ),\n )\n const folderCollectionSlug = folderCollectionConfig.slug\n\n const rawSearchParams = useSearchParams()\n const searchParams = React.useMemo(() => parseSearchParams(rawSearchParams), [rawSearchParams])\n const [currentQuery, setCurrentQuery] = React.useState<FolderQueryParams>(searchParams)\n\n const [isDragging, setIsDragging] = React.useState(false)\n const [selectedItemKeys, setSelectedItemKeys] = React.useState<Set<FolderDocumentItemKey>>(\n () => new Set(),\n )\n const [focusedRowIndex, setFocusedRowIndex] = React.useState(-1)\n // This is used to determine what data to display on the drag overlay\n const [dragOverlayItem, setDragOverlayItem] = React.useState<FolderOrDocument | undefined>()\n const [breadcrumbs, setBreadcrumbs] =\n React.useState<FolderContextValue['breadcrumbs']>(_breadcrumbsFromProps)\n const lastClickTime = React.useRef<null | number>(null)\n const totalCount = subfolders.length + documents.length\n\n const clearSelections = React.useCallback(() => {\n setFocusedRowIndex(-1)\n setSelectedItemKeys(new Set())\n setDragOverlayItem(undefined)\n currentlySelectedIndexes.current = new Set()\n }, [])\n\n const mergeQuery = React.useCallback(\n (newQuery: Partial<FolderQueryParams> = {}): Partial<FolderQueryParams> => {\n let page = 'page' in newQuery ? newQuery.page : currentQuery?.page\n\n if ('search' in newQuery) {\n page = '1'\n }\n\n const mergedQuery = {\n ...currentQuery,\n ...newQuery,\n locale: localeCode,\n page,\n relationTo: 'relationTo' in newQuery ? newQuery.relationTo : currentQuery?.relationTo,\n search: 'search' in newQuery ? newQuery.search : currentQuery?.search,\n sort: 'sort' in newQuery ? newQuery.sort : (currentQuery?.sort ?? undefined),\n }\n\n return mergedQuery\n },\n [currentQuery, localeCode],\n )\n\n const refineFolderData: FolderContextValue['refineFolderData'] = React.useCallback(\n ({ query, updateURL }) => {\n if (updateURL) {\n const queryParams = mergeQuery(query)\n\n startRouteTransition(() =>\n router.replace(\n `${qs.stringify({ ...queryParams, relationTo: JSON.stringify(queryParams.relationTo) }, { addQueryPrefix: true })}`,\n ),\n )\n\n setCurrentQuery(queryParams)\n }\n },\n [mergeQuery, router, startRouteTransition],\n )\n\n const getFolderRoute: FolderContextValue['getFolderRoute'] = React.useCallback(\n (toFolderID) => {\n const queryParams = qs.stringify(mergeQuery({ page: '1', search: '' }), {\n addQueryPrefix: true,\n })\n return formatAdminURL({\n adminRoute: config.routes.admin,\n path: `${baseFolderPath}${toFolderID ? `/${toFolderID}` : ''}${queryParams}`,\n serverURL: config.serverURL,\n })\n },\n [baseFolderPath, config.routes.admin, config.serverURL, mergeQuery],\n )\n\n const getItem = React.useCallback(\n (itemKey: FolderDocumentItemKey) => {\n return [...subfolders, ...documents].find((doc) => doc.itemKey === itemKey)\n },\n [documents, subfolders],\n )\n\n const getSelectedItems = React.useCallback(() => {\n return Array.from(selectedItemKeys).reduce((acc, itemKey) => {\n const item = getItem(itemKey)\n if (item) {\n acc.push(item)\n }\n return acc\n }, [])\n }, [selectedItemKeys, getItem])\n\n const navigateAfterSelection = React.useCallback(\n ({ collectionSlug, docID }: { collectionSlug: string; docID?: number | string }) => {\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n if (collectionSlug === folderCollectionSlug) {\n // clicked on folder, take the user to the folder view\n startRouteTransition(() => {\n router.push(getFolderRoute(docID))\n clearSelections()\n })\n } else if (collectionSlug) {\n // clicked on document, take the user to the documet view\n startRouteTransition(() => {\n router.push(\n formatAdminURL({\n adminRoute: config.routes.admin,\n path: `/collections/${collectionSlug}/${docID}`,\n }),\n )\n clearSelections()\n })\n }\n } else {\n clearSelections()\n }\n\n if (typeof onItemClickFromProps === 'function') {\n onItemClickFromProps(getItem(`${collectionSlug}-${docID}`))\n }\n },\n [\n clearSelections,\n config.routes.admin,\n drawerDepth,\n folderCollectionSlug,\n getFolderRoute,\n getItem,\n onItemClickFromProps,\n router,\n startRouteTransition,\n ],\n )\n\n const handleShiftSelection = React.useCallback(\n (targetIndex: number) => {\n const allItems = [...subfolders, ...documents]\n\n // Find existing selection boundaries\n const existingIndexes = allItems.reduce((acc, item, idx) => {\n if (selectedItemKeys.has(item.itemKey)) {\n acc.push(idx)\n }\n return acc\n }, [])\n\n if (existingIndexes.length === 0) {\n // No existing selection, just select target\n return [targetIndex]\n }\n\n const firstSelectedIndex = Math.min(...existingIndexes)\n const lastSelectedIndex = Math.max(...existingIndexes)\n const isWithinBounds = targetIndex >= firstSelectedIndex && targetIndex <= lastSelectedIndex\n\n // Choose anchor based on whether we're contracting or extending\n let anchorIndex = targetIndex\n if (isWithinBounds) {\n // Contracting: if target is at a boundary, use target as anchor\n // Otherwise, use furthest boundary to maintain opposite edge\n if (targetIndex === firstSelectedIndex || targetIndex === lastSelectedIndex) {\n anchorIndex = targetIndex\n } else {\n const distanceToFirst = Math.abs(targetIndex - firstSelectedIndex)\n const distanceToLast = Math.abs(targetIndex - lastSelectedIndex)\n anchorIndex = distanceToFirst >= distanceToLast ? firstSelectedIndex : lastSelectedIndex\n }\n } else {\n // Extending: use closest boundary\n const distanceToFirst = Math.abs(targetIndex - firstSelectedIndex)\n const distanceToLast = Math.abs(targetIndex - lastSelectedIndex)\n anchorIndex = distanceToFirst <= distanceToLast ? firstSelectedIndex : lastSelectedIndex\n }\n\n // Create range from anchor to target\n const startIndex = Math.min(anchorIndex, targetIndex)\n const endIndex = Math.max(anchorIndex, targetIndex)\n const newRangeIndexes = Array.from(\n { length: endIndex - startIndex + 1 },\n (_, i) => startIndex + i,\n )\n\n if (isWithinBounds) {\n // Contracting: replace with new range\n return newRangeIndexes\n } else {\n // Extending: union with existing\n return [...new Set([...existingIndexes, ...newRangeIndexes])]\n }\n },\n [subfolders, documents, selectedItemKeys],\n )\n\n const updateSelections = React.useCallback(\n ({ indexes }: { indexes: number[] }) => {\n const allItems = [...subfolders, ...documents]\n const { newSelectedFolderCollections, newSelectedItemKeys } = allItems.reduce(\n (acc, item, index) => {\n if (indexes.includes(index)) {\n acc.newSelectedItemKeys.add(item.itemKey)\n if (item.relationTo === folderCollectionSlug) {\n item.value.folderType?.forEach((collectionSlug) => {\n if (!acc.newSelectedFolderCollections.includes(collectionSlug)) {\n acc.newSelectedFolderCollections.push(collectionSlug)\n }\n })\n } else {\n if (!acc.newSelectedFolderCollections.includes(item.relationTo)) {\n acc.newSelectedFolderCollections.push(item.relationTo)\n }\n }\n }\n return acc\n },\n {\n newSelectedFolderCollections: [] satisfies CollectionSlug[],\n newSelectedItemKeys: new Set<FolderDocumentItemKey>(),\n },\n )\n\n setSelectedFolderCollections(newSelectedFolderCollections)\n setSelectedItemKeys(newSelectedItemKeys)\n },\n [documents, folderCollectionSlug, subfolders],\n )\n\n const onItemKeyPress: FolderContextValue['onItemKeyPress'] = React.useCallback(\n ({ event, item: currentItem }) => {\n const { code, ctrlKey, metaKey, shiftKey } = event\n const isShiftPressed = shiftKey\n const isCtrlPressed = ctrlKey || metaKey\n const isCurrentlySelected = selectedItemKeys.has(currentItem.itemKey)\n const allItems = [...subfolders, ...documents]\n const currentItemIndex = allItems.findIndex((item) => item.itemKey === currentItem.itemKey)\n\n switch (code) {\n case 'ArrowDown':\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'ArrowUp': {\n event.preventDefault()\n\n if (currentItemIndex === -1) {\n break\n }\n\n const isBackward = code === 'ArrowLeft' || code === 'ArrowUp'\n const newItemIndex = isBackward ? currentItemIndex - 1 : currentItemIndex + 1\n\n if (newItemIndex < 0 || newItemIndex > totalCount - 1) {\n // out of bounds, keep current selection\n return\n }\n\n setFocusedRowIndex(newItemIndex)\n\n if (isCtrlPressed) {\n break\n }\n\n if (isShiftPressed && allowMultiSelection) {\n const selectedIndexes = handleShiftSelection(newItemIndex)\n updateSelections({ indexes: selectedIndexes })\n return\n }\n\n // Single selection without shift\n if (!isShiftPressed) {\n const newItem = allItems[newItemIndex]\n setSelectedItemKeys(new Set([newItem.itemKey]))\n }\n\n break\n }\n case 'Enter': {\n if (selectedItemKeys.size === 1) {\n setFocusedRowIndex(undefined)\n navigateAfterSelection({\n collectionSlug: currentItem.relationTo,\n docID: extractID(currentItem.value),\n })\n return\n }\n break\n }\n case 'Escape': {\n clearSelections()\n break\n }\n case 'KeyA': {\n if (allowMultiSelection && isCtrlPressed) {\n event.preventDefault()\n setFocusedRowIndex(totalCount - 1)\n updateSelections({\n indexes: Array.from({ length: totalCount }, (_, i) => i),\n })\n }\n break\n }\n case 'Space': {\n if (allowMultiSelection && isShiftPressed) {\n event.preventDefault()\n const allItems = [...subfolders, ...documents]\n updateSelections({\n indexes: allItems.reduce((acc, item, idx) => {\n if (item.itemKey === currentItem.itemKey) {\n if (isCurrentlySelected) {\n return acc\n } else {\n acc.push(idx)\n }\n } else if (selectedItemKeys.has(item.itemKey)) {\n acc.push(idx)\n }\n return acc\n }, []),\n })\n } else {\n event.preventDefault()\n updateSelections({\n indexes: isCurrentlySelected ? [] : [currentItemIndex],\n })\n }\n break\n }\n case 'Tab': {\n if (allowMultiSelection && isShiftPressed) {\n const prevIndex = currentItemIndex - 1\n if (prevIndex < 0 && selectedItemKeys?.size > 0) {\n setFocusedRowIndex(prevIndex)\n }\n } else {\n const nextIndex = currentItemIndex + 1\n if (nextIndex === totalCount && selectedItemKeys.size > 0) {\n setFocusedRowIndex(totalCount - 1)\n }\n }\n break\n }\n }\n },\n [\n selectedItemKeys,\n subfolders,\n documents,\n allowMultiSelection,\n handleShiftSelection,\n updateSelections,\n navigateAfterSelection,\n clearSelections,\n totalCount,\n ],\n )\n\n const onItemClick: FolderContextValue['onItemClick'] = React.useCallback(\n ({ event, item: clickedItem }) => {\n let doubleClicked: boolean = false\n const isCtrlPressed = event.ctrlKey || event.metaKey\n const isShiftPressed = event.shiftKey\n const isCurrentlySelected = selectedItemKeys.has(clickedItem.itemKey)\n const allItems = [...subfolders, ...documents]\n const currentItemIndex = allItems.findIndex((item) => item.itemKey === clickedItem.itemKey)\n\n if (allowMultiSelection && isCtrlPressed) {\n event.preventDefault()\n let overlayItemKey: FolderDocumentItemKey | undefined\n const indexes = allItems.reduce((acc, item, idx) => {\n if (item.itemKey === clickedItem.itemKey) {\n if (isCurrentlySelected && event.type !== 'pointermove') {\n return acc\n } else {\n acc.push(idx)\n overlayItemKey = item.itemKey\n }\n } else if (selectedItemKeys.has(item.itemKey)) {\n acc.push(idx)\n }\n return acc\n }, [])\n\n updateSelections({ indexes })\n\n if (overlayItemKey) {\n setDragOverlayItem(getItem(overlayItemKey))\n }\n } else if (allowMultiSelection && isShiftPressed) {\n if (currentItemIndex !== -1) {\n const selectedIndexes = handleShiftSelection(currentItemIndex)\n updateSelections({ indexes: selectedIndexes })\n }\n } else if (allowMultiSelection && event.type === 'pointermove') {\n // on drag start of an unselected item\n if (!isCurrentlySelected) {\n updateSelections({\n indexes: allItems.reduce((acc, item, idx) => {\n if (item.itemKey === clickedItem.itemKey) {\n acc.push(idx)\n }\n return acc\n }, []),\n })\n }\n setDragOverlayItem(getItem(clickedItem.itemKey))\n } else {\n // Normal click - select single item\n const now = Date.now()\n doubleClicked =\n now - lastClickTime.current < 400 && dragOverlayItem?.itemKey === clickedItem.itemKey\n lastClickTime.current = now\n if (!doubleClicked) {\n updateSelections({\n indexes: isCurrentlySelected && selectedItemKeys.size === 1 ? [] : [currentItemIndex],\n })\n }\n setDragOverlayItem(getItem(clickedItem.itemKey))\n }\n\n if (doubleClicked) {\n navigateAfterSelection({\n collectionSlug: clickedItem.relationTo,\n docID: extractID(clickedItem.value),\n })\n }\n },\n [\n selectedItemKeys,\n subfolders,\n documents,\n allowMultiSelection,\n dragOverlayItem,\n getItem,\n updateSelections,\n navigateAfterSelection,\n handleShiftSelection,\n ],\n )\n\n /**\n * Makes requests to the server to update the folder field on passed in documents\n *\n * Might rewrite this in the future to return the promises so errors can be handled contextually\n */\n const moveToFolder: FolderContextValue['moveToFolder'] = React.useCallback(\n async (args) => {\n const { itemsToMove: items, toFolderID } = args\n if (!items.length) {\n return\n }\n\n const movingCurrentFolder =\n items.length === 1 &&\n items[0].relationTo === folderCollectionSlug &&\n items[0].value.id === folderID\n\n if (movingCurrentFolder) {\n const queryParams = qs.stringify(\n {\n depth: 0,\n locale: localeCode,\n },\n {\n addQueryPrefix: true,\n },\n )\n const req = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/${folderID}${queryParams}`,\n {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n },\n )\n if (req.status !== 200) {\n toast.error(t('general:error'))\n }\n } else {\n for (const [collectionSlug, ids] of Object.entries(groupItemIDsByRelation(items))) {\n const queryParams = qs.stringify(\n {\n depth: 0,\n limit: 0,\n locale: localeCode,\n where: {\n id: {\n in: ids,\n },\n },\n },\n {\n addQueryPrefix: true,\n },\n )\n try {\n await fetch(`${serverURL}${routes.api}/${collectionSlug}${queryParams}`, {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n })\n } catch (error) {\n toast.error(t('general:error'))\n // eslint-disable-next-line no-console\n console.error(error)\n continue\n }\n }\n }\n\n clearSelections()\n },\n [\n folderID,\n clearSelections,\n folderCollectionSlug,\n folderFieldName,\n routes.api,\n serverURL,\n t,\n localeCode,\n ],\n )\n\n const checkIfItemIsDisabled: FolderContextValue['checkIfItemIsDisabled'] = React.useCallback(\n (item) => {\n function folderAcceptsItem({\n item,\n selectedFolderCollections,\n }: {\n item: FolderOrDocument\n selectedFolderCollections: string[]\n }): boolean {\n if (\n !item.value.folderType ||\n (Array.isArray(item.value.folderType) && item.value.folderType.length === 0)\n ) {\n // Enable folder that accept all collections\n return false\n }\n\n if (selectedFolderCollections.length === 0) {\n // If no collections are selected, enable folders that accept all collections\n return Boolean(item.value.folderType || item.value.folderType.length > 0)\n }\n\n // Disable folders that do not accept all of the selected collections\n return selectedFolderCollections.some((slug) => {\n return !item.value.folderType.includes(slug)\n })\n }\n\n if (isDragging) {\n const isSelected = selectedItemKeys.has(item.itemKey)\n if (isSelected) {\n return true\n } else if (item.relationTo === folderCollectionSlug) {\n return folderAcceptsItem({ item, selectedFolderCollections })\n } else {\n // Non folder items are disabled on drag\n return true\n }\n } else if (parentFolderContext?.selectedItemKeys?.size) {\n // Disable selected items from being navigated to in move to drawer\n if (parentFolderContext.selectedItemKeys.has(item.itemKey)) {\n return true\n }\n // Moving items to folder\n if (item.relationTo === folderCollectionSlug) {\n return folderAcceptsItem({\n item,\n selectedFolderCollections: parentFolderContext.selectedFolderCollections,\n })\n }\n // If the item is not a folder, it is disabled on move\n return true\n }\n },\n [\n selectedFolderCollections,\n isDragging,\n selectedItemKeys,\n folderCollectionSlug,\n parentFolderContext?.selectedFolderCollections,\n parentFolderContext?.selectedItemKeys,\n ],\n )\n\n // If a new component is provided, update the state so children can re-render with the new component\n React.useEffect(() => {\n if (InitialFolderResultsComponent) {\n setFolderResultsComponent(InitialFolderResultsComponent)\n }\n }, [InitialFolderResultsComponent])\n\n return (\n <Context\n value={{\n activeCollectionFolderSlugs: activeCollectionSlugs || allCollectionFolderSlugs,\n allCollectionFolderSlugs,\n allowCreateCollectionSlugs,\n breadcrumbs,\n checkIfItemIsDisabled,\n clearSelections,\n currentFolder:\n breadcrumbs?.[breadcrumbs.length - 1]?.id !== undefined\n ? formatFolderOrDocumentItem({\n folderFieldName,\n isUpload: false,\n relationTo: folderCollectionSlug,\n useAsTitle: folderCollectionConfig.admin.useAsTitle,\n value: breadcrumbs[breadcrumbs.length - 1],\n })\n : null,\n documents,\n dragOverlayItem,\n focusedRowIndex,\n folderCollectionConfig,\n folderCollectionSlug,\n folderFieldName,\n folderID,\n FolderResultsComponent,\n folderType: breadcrumbs?.[breadcrumbs.length - 1]?.folderType,\n getFolderRoute,\n getSelectedItems,\n isDragging,\n itemKeysToMove: parentFolderContext.selectedItemKeys,\n moveToFolder,\n onItemClick,\n onItemKeyPress,\n refineFolderData,\n search,\n selectedFolderCollections,\n selectedItemKeys,\n setBreadcrumbs,\n setFocusedRowIndex,\n setIsDragging,\n sort,\n subfolders,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport function useFolder(): FolderContextValue {\n const context = React.use(Context)\n\n if (context === undefined) {\n throw new Error('useFolder must be used within a FolderProvider')\n }\n\n return context\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useRouter","useSearchParams","extractID","formatAdminURL","formatFolderOrDocumentItem","qs","React","toast","useDrawerDepth","parseSearchParams","useConfig","useLocale","useRouteTransition","useTranslation","groupItemIDsByRelation","Context","createContext","activeCollectionFolderSlugs","allCollectionFolderSlugs","allowCreateCollectionSlugs","breadcrumbs","checkIfItemIsDisabled","clearSelections","currentFolder","documents","dragOverlayItem","undefined","focusedRowIndex","folderCollectionConfig","folderCollectionSlug","folderFieldName","folderID","FolderResultsComponent","folderType","getFolderRoute","getSelectedItems","isDragging","itemKeysToMove","moveToFolder","Promise","resolve","onItemClick","onItemKeyPress","refineFolderData","search","selectedFolderCollections","selectedItemKeys","Set","setBreadcrumbs","setFocusedRowIndex","setIsDragging","sort","subfolders","FolderProvider","activeCollectionSlugs","allowMultiSelection","baseFolderPath","_breadcrumbsFromProps","children","InitialFolderResultsComponent","onItemClickFromProps","parentFolderContext","useFolder","config","routes","drawerDepth","t","router","startRouteTransition","locale","localeCode","code","currentlySelectedIndexes","useRef","setSelectedFolderCollections","useState","setFolderResultsComponent","collections","find","collection","folders","slug","rawSearchParams","searchParams","useMemo","currentQuery","setCurrentQuery","setSelectedItemKeys","setDragOverlayItem","lastClickTime","totalCount","length","useCallback","current","mergeQuery","newQuery","page","mergedQuery","relationTo","query","updateURL","queryParams","replace","stringify","JSON","addQueryPrefix","toFolderID","adminRoute","admin","path","getItem","itemKey","doc","Array","from","reduce","acc","item","push","navigateAfterSelection","collectionSlug","docID","handleShiftSelection","targetIndex","allItems","existingIndexes","idx","has","firstSelectedIndex","Math","min","lastSelectedIndex","max","isWithinBounds","anchorIndex","distanceToFirst","abs","distanceToLast","startIndex","endIndex","newRangeIndexes","_","i","updateSelections","indexes","newSelectedFolderCollections","newSelectedItemKeys","index","includes","add","value","forEach","event","currentItem","ctrlKey","metaKey","shiftKey","isShiftPressed","isCtrlPressed","isCurrentlySelected","currentItemIndex","findIndex","preventDefault","isBackward","newItemIndex","selectedIndexes","newItem","size","prevIndex","nextIndex","clickedItem","doubleClicked","overlayItemKey","type","now","Date","args","itemsToMove","items","movingCurrentFolder","id","depth","req","fetch","apiRoute","api","body","credentials","headers","method","status","error","ids","Object","entries","limit","where","in","console","folderAcceptsItem","isArray","Boolean","some","isSelected","useEffect","_jsx","isUpload","useAsTitle","context","use","Error"],"sources":["../../../src/providers/Folders/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, CollectionSlug, FolderSortKeys } from 'payload'\nimport type { FolderBreadcrumb, FolderDocumentItemKey, FolderOrDocument } from 'payload/shared'\n\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { extractID, formatAdminURL, formatFolderOrDocumentItem } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useDrawerDepth } from '../../elements/Drawer/index.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { useConfig } from '../Config/index.js'\nimport { useLocale } from '../Locale/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\nimport { useTranslation } from '../Translation/index.js'\nimport { groupItemIDsByRelation } from './groupItemIDsByRelation.js'\n\ntype FolderQueryParams = {\n page?: string\n relationTo?: CollectionSlug[]\n search?: string\n sort?: string\n}\n\nexport type FileCardData = {\n filename: string\n id: number | string\n mimeType: string\n name: string\n url: string\n}\n\nexport type FolderContextValue = {\n /**\n * The collection slugs that a view can be filtered by\n * Used in the browse-by-folder view\n */\n activeCollectionFolderSlugs: CollectionSlug[]\n /**\n * Folder enabled collection slugs that can be populated within the provider\n */\n readonly allCollectionFolderSlugs?: CollectionSlug[]\n allowCreateCollectionSlugs: CollectionSlug[]\n breadcrumbs?: FolderBreadcrumb[]\n checkIfItemIsDisabled: (item: FolderOrDocument) => boolean\n clearSelections: () => void\n currentFolder?: FolderOrDocument | null\n documents?: FolderOrDocument[]\n dragOverlayItem?: FolderOrDocument | undefined\n focusedRowIndex: number\n folderCollectionConfig: ClientCollectionConfig\n folderCollectionSlug: string\n folderFieldName: string\n folderID?: number | string\n FolderResultsComponent: React.ReactNode\n folderType: CollectionSlug[] | undefined\n getFolderRoute: (toFolderID?: number | string) => string\n getSelectedItems?: () => FolderOrDocument[]\n isDragging: boolean\n itemKeysToMove?: Set<FolderDocumentItemKey>\n moveToFolder: (args: {\n itemsToMove: FolderOrDocument[]\n toFolderID?: number | string\n }) => Promise<void>\n onItemClick: (args: { event: React.MouseEvent; index: number; item: FolderOrDocument }) => void\n onItemKeyPress: (args: {\n event: React.KeyboardEvent\n index: number\n item: FolderOrDocument\n }) => void\n refineFolderData: (args: { query?: FolderQueryParams; updateURL: boolean }) => void\n search: string\n selectedFolderCollections?: CollectionSlug[]\n readonly selectedItemKeys: Set<FolderDocumentItemKey>\n setBreadcrumbs: React.Dispatch<React.SetStateAction<FolderBreadcrumb[]>>\n setFocusedRowIndex: React.Dispatch<React.SetStateAction<number>>\n setIsDragging: React.Dispatch<React.SetStateAction<boolean>>\n sort: FolderSortKeys\n subfolders?: FolderOrDocument[]\n}\n\nconst Context = React.createContext<FolderContextValue>({\n activeCollectionFolderSlugs: [],\n allCollectionFolderSlugs: [],\n allowCreateCollectionSlugs: [],\n breadcrumbs: [],\n checkIfItemIsDisabled: () => false,\n clearSelections: () => {},\n currentFolder: null,\n documents: [],\n dragOverlayItem: undefined,\n focusedRowIndex: -1,\n folderCollectionConfig: null,\n folderCollectionSlug: '',\n folderFieldName: 'folder',\n folderID: undefined,\n FolderResultsComponent: null,\n folderType: undefined,\n getFolderRoute: () => '',\n getSelectedItems: () => [],\n isDragging: false,\n itemKeysToMove: undefined,\n moveToFolder: () => Promise.resolve(undefined),\n onItemClick: () => undefined,\n onItemKeyPress: () => undefined,\n refineFolderData: () => undefined,\n search: '',\n selectedFolderCollections: undefined,\n selectedItemKeys: new Set<FolderDocumentItemKey>(),\n setBreadcrumbs: () => {},\n setFocusedRowIndex: () => -1,\n setIsDragging: () => false,\n sort: 'name',\n subfolders: [],\n})\n\nexport type FolderProviderProps = {\n /**\n * The collection slugs that are being viewed\n */\n readonly activeCollectionFolderSlugs?: CollectionSlug[]\n /**\n * Folder enabled collection slugs that can be populated within the provider\n */\n readonly allCollectionFolderSlugs: CollectionSlug[]\n /**\n * Array of slugs that can be created in the folder view\n */\n readonly allowCreateCollectionSlugs: CollectionSlug[]\n readonly allowMultiSelection?: boolean\n /**\n * The base folder route path\n *\n * @example\n * `/collections/:collectionSlug/:folderCollectionSlug`\n * or\n * `/browse-by-folder`\n */\n readonly baseFolderPath?: `/${string}`\n /**\n * Breadcrumbs for the current folder\n */\n readonly breadcrumbs?: FolderBreadcrumb[]\n /**\n * Children to render inside the provider\n */\n readonly children: React.ReactNode\n /**\n * All documents in the current folder\n */\n readonly documents: FolderOrDocument[]\n /**\n * The name of the field that contains the folder relation\n */\n readonly folderFieldName: string\n /**\n * The ID of the current folder\n */\n readonly folderID?: number | string\n /**\n * The component to render the folder results\n */\n readonly FolderResultsComponent: React.ReactNode\n /**\n * Optional function to call when an item is clicked\n */\n readonly onItemClick?: (itme: FolderOrDocument) => void\n /**\n * The intial search query\n */\n readonly search?: string\n /**\n * The sort order of the documents\n *\n * @example\n * `name` for descending\n * `-name` for ascending\n */\n readonly sort?: FolderSortKeys\n /**\n * All subfolders in the current folder\n */\n readonly subfolders: FolderOrDocument[]\n}\nexport function FolderProvider({\n activeCollectionFolderSlugs: activeCollectionSlugs,\n allCollectionFolderSlugs = [],\n allowCreateCollectionSlugs,\n allowMultiSelection = true,\n baseFolderPath,\n breadcrumbs: _breadcrumbsFromProps = [],\n children,\n documents,\n folderFieldName,\n folderID,\n FolderResultsComponent: InitialFolderResultsComponent,\n onItemClick: onItemClickFromProps,\n search,\n sort = 'name',\n subfolders,\n}: FolderProviderProps) {\n const parentFolderContext = useFolder()\n const { config } = useConfig()\n const { routes } = config\n const drawerDepth = useDrawerDepth()\n const { t } = useTranslation()\n const router = useRouter()\n const { startRouteTransition } = useRouteTransition()\n const locale = useLocale()\n const localeCode = locale ? locale.code : undefined\n\n const currentlySelectedIndexes = React.useRef(new Set<number>())\n\n const [selectedFolderCollections, setSelectedFolderCollections] = React.useState<\n CollectionSlug[]\n >([])\n const [FolderResultsComponent, setFolderResultsComponent] = React.useState(\n InitialFolderResultsComponent || (() => null),\n )\n const [folderCollectionConfig] = React.useState(() =>\n config.collections.find(\n (collection) => config.folders && collection.slug === config.folders.slug,\n ),\n )\n const folderCollectionSlug = folderCollectionConfig.slug\n\n const rawSearchParams = useSearchParams()\n const searchParams = React.useMemo(() => parseSearchParams(rawSearchParams), [rawSearchParams])\n const [currentQuery, setCurrentQuery] = React.useState<FolderQueryParams>(searchParams)\n\n const [isDragging, setIsDragging] = React.useState(false)\n const [selectedItemKeys, setSelectedItemKeys] = React.useState<Set<FolderDocumentItemKey>>(\n () => new Set(),\n )\n const [focusedRowIndex, setFocusedRowIndex] = React.useState(-1)\n // This is used to determine what data to display on the drag overlay\n const [dragOverlayItem, setDragOverlayItem] = React.useState<FolderOrDocument | undefined>()\n const [breadcrumbs, setBreadcrumbs] =\n React.useState<FolderContextValue['breadcrumbs']>(_breadcrumbsFromProps)\n const lastClickTime = React.useRef<null | number>(null)\n const totalCount = subfolders.length + documents.length\n\n const clearSelections = React.useCallback(() => {\n setFocusedRowIndex(-1)\n setSelectedItemKeys(new Set())\n setDragOverlayItem(undefined)\n currentlySelectedIndexes.current = new Set()\n }, [])\n\n const mergeQuery = React.useCallback(\n (newQuery: Partial<FolderQueryParams> = {}): Partial<FolderQueryParams> => {\n let page = 'page' in newQuery ? newQuery.page : currentQuery?.page\n\n if ('search' in newQuery) {\n page = '1'\n }\n\n const mergedQuery = {\n ...currentQuery,\n ...newQuery,\n locale: localeCode,\n page,\n relationTo: 'relationTo' in newQuery ? newQuery.relationTo : currentQuery?.relationTo,\n search: 'search' in newQuery ? newQuery.search : currentQuery?.search,\n sort: 'sort' in newQuery ? newQuery.sort : (currentQuery?.sort ?? undefined),\n }\n\n return mergedQuery\n },\n [currentQuery, localeCode],\n )\n\n const refineFolderData: FolderContextValue['refineFolderData'] = React.useCallback(\n ({ query, updateURL }) => {\n if (updateURL) {\n const queryParams = mergeQuery(query)\n\n startRouteTransition(() =>\n router.replace(\n `${qs.stringify({ ...queryParams, relationTo: JSON.stringify(queryParams.relationTo) }, { addQueryPrefix: true })}`,\n ),\n )\n\n setCurrentQuery(queryParams)\n }\n },\n [mergeQuery, router, startRouteTransition],\n )\n\n const getFolderRoute: FolderContextValue['getFolderRoute'] = React.useCallback(\n (toFolderID) => {\n const queryParams = qs.stringify(mergeQuery({ page: '1', search: '' }), {\n addQueryPrefix: true,\n })\n return formatAdminURL({\n adminRoute: config.routes.admin,\n path: `${baseFolderPath}${toFolderID ? `/${toFolderID}` : ''}${queryParams}`,\n })\n },\n [baseFolderPath, config.routes.admin, mergeQuery],\n )\n\n const getItem = React.useCallback(\n (itemKey: FolderDocumentItemKey) => {\n return [...subfolders, ...documents].find((doc) => doc.itemKey === itemKey)\n },\n [documents, subfolders],\n )\n\n const getSelectedItems = React.useCallback(() => {\n return Array.from(selectedItemKeys).reduce((acc, itemKey) => {\n const item = getItem(itemKey)\n if (item) {\n acc.push(item)\n }\n return acc\n }, [])\n }, [selectedItemKeys, getItem])\n\n const navigateAfterSelection = React.useCallback(\n ({ collectionSlug, docID }: { collectionSlug: string; docID?: number | string }) => {\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n if (collectionSlug === folderCollectionSlug) {\n // clicked on folder, take the user to the folder view\n startRouteTransition(() => {\n router.push(getFolderRoute(docID))\n clearSelections()\n })\n } else if (collectionSlug) {\n // clicked on document, take the user to the documet view\n startRouteTransition(() => {\n router.push(\n formatAdminURL({\n adminRoute: config.routes.admin,\n path: `/collections/${collectionSlug}/${docID}`,\n }),\n )\n clearSelections()\n })\n }\n } else {\n clearSelections()\n }\n\n if (typeof onItemClickFromProps === 'function') {\n onItemClickFromProps(getItem(`${collectionSlug}-${docID}`))\n }\n },\n [\n clearSelections,\n config.routes.admin,\n drawerDepth,\n folderCollectionSlug,\n getFolderRoute,\n getItem,\n onItemClickFromProps,\n router,\n startRouteTransition,\n ],\n )\n\n const handleShiftSelection = React.useCallback(\n (targetIndex: number) => {\n const allItems = [...subfolders, ...documents]\n\n // Find existing selection boundaries\n const existingIndexes = allItems.reduce((acc, item, idx) => {\n if (selectedItemKeys.has(item.itemKey)) {\n acc.push(idx)\n }\n return acc\n }, [])\n\n if (existingIndexes.length === 0) {\n // No existing selection, just select target\n return [targetIndex]\n }\n\n const firstSelectedIndex = Math.min(...existingIndexes)\n const lastSelectedIndex = Math.max(...existingIndexes)\n const isWithinBounds = targetIndex >= firstSelectedIndex && targetIndex <= lastSelectedIndex\n\n // Choose anchor based on whether we're contracting or extending\n let anchorIndex = targetIndex\n if (isWithinBounds) {\n // Contracting: if target is at a boundary, use target as anchor\n // Otherwise, use furthest boundary to maintain opposite edge\n if (targetIndex === firstSelectedIndex || targetIndex === lastSelectedIndex) {\n anchorIndex = targetIndex\n } else {\n const distanceToFirst = Math.abs(targetIndex - firstSelectedIndex)\n const distanceToLast = Math.abs(targetIndex - lastSelectedIndex)\n anchorIndex = distanceToFirst >= distanceToLast ? firstSelectedIndex : lastSelectedIndex\n }\n } else {\n // Extending: use closest boundary\n const distanceToFirst = Math.abs(targetIndex - firstSelectedIndex)\n const distanceToLast = Math.abs(targetIndex - lastSelectedIndex)\n anchorIndex = distanceToFirst <= distanceToLast ? firstSelectedIndex : lastSelectedIndex\n }\n\n // Create range from anchor to target\n const startIndex = Math.min(anchorIndex, targetIndex)\n const endIndex = Math.max(anchorIndex, targetIndex)\n const newRangeIndexes = Array.from(\n { length: endIndex - startIndex + 1 },\n (_, i) => startIndex + i,\n )\n\n if (isWithinBounds) {\n // Contracting: replace with new range\n return newRangeIndexes\n } else {\n // Extending: union with existing\n return [...new Set([...existingIndexes, ...newRangeIndexes])]\n }\n },\n [subfolders, documents, selectedItemKeys],\n )\n\n const updateSelections = React.useCallback(\n ({ indexes }: { indexes: number[] }) => {\n const allItems = [...subfolders, ...documents]\n const { newSelectedFolderCollections, newSelectedItemKeys } = allItems.reduce(\n (acc, item, index) => {\n if (indexes.includes(index)) {\n acc.newSelectedItemKeys.add(item.itemKey)\n if (item.relationTo === folderCollectionSlug) {\n item.value.folderType?.forEach((collectionSlug) => {\n if (!acc.newSelectedFolderCollections.includes(collectionSlug)) {\n acc.newSelectedFolderCollections.push(collectionSlug)\n }\n })\n } else {\n if (!acc.newSelectedFolderCollections.includes(item.relationTo)) {\n acc.newSelectedFolderCollections.push(item.relationTo)\n }\n }\n }\n return acc\n },\n {\n newSelectedFolderCollections: [] satisfies CollectionSlug[],\n newSelectedItemKeys: new Set<FolderDocumentItemKey>(),\n },\n )\n\n setSelectedFolderCollections(newSelectedFolderCollections)\n setSelectedItemKeys(newSelectedItemKeys)\n },\n [documents, folderCollectionSlug, subfolders],\n )\n\n const onItemKeyPress: FolderContextValue['onItemKeyPress'] = React.useCallback(\n ({ event, item: currentItem }) => {\n const { code, ctrlKey, metaKey, shiftKey } = event\n const isShiftPressed = shiftKey\n const isCtrlPressed = ctrlKey || metaKey\n const isCurrentlySelected = selectedItemKeys.has(currentItem.itemKey)\n const allItems = [...subfolders, ...documents]\n const currentItemIndex = allItems.findIndex((item) => item.itemKey === currentItem.itemKey)\n\n switch (code) {\n case 'ArrowDown':\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'ArrowUp': {\n event.preventDefault()\n\n if (currentItemIndex === -1) {\n break\n }\n\n const isBackward = code === 'ArrowLeft' || code === 'ArrowUp'\n const newItemIndex = isBackward ? currentItemIndex - 1 : currentItemIndex + 1\n\n if (newItemIndex < 0 || newItemIndex > totalCount - 1) {\n // out of bounds, keep current selection\n return\n }\n\n setFocusedRowIndex(newItemIndex)\n\n if (isCtrlPressed) {\n break\n }\n\n if (isShiftPressed && allowMultiSelection) {\n const selectedIndexes = handleShiftSelection(newItemIndex)\n updateSelections({ indexes: selectedIndexes })\n return\n }\n\n // Single selection without shift\n if (!isShiftPressed) {\n const newItem = allItems[newItemIndex]\n setSelectedItemKeys(new Set([newItem.itemKey]))\n }\n\n break\n }\n case 'Enter': {\n if (selectedItemKeys.size === 1) {\n setFocusedRowIndex(undefined)\n navigateAfterSelection({\n collectionSlug: currentItem.relationTo,\n docID: extractID(currentItem.value),\n })\n return\n }\n break\n }\n case 'Escape': {\n clearSelections()\n break\n }\n case 'KeyA': {\n if (allowMultiSelection && isCtrlPressed) {\n event.preventDefault()\n setFocusedRowIndex(totalCount - 1)\n updateSelections({\n indexes: Array.from({ length: totalCount }, (_, i) => i),\n })\n }\n break\n }\n case 'Space': {\n if (allowMultiSelection && isShiftPressed) {\n event.preventDefault()\n const allItems = [...subfolders, ...documents]\n updateSelections({\n indexes: allItems.reduce((acc, item, idx) => {\n if (item.itemKey === currentItem.itemKey) {\n if (isCurrentlySelected) {\n return acc\n } else {\n acc.push(idx)\n }\n } else if (selectedItemKeys.has(item.itemKey)) {\n acc.push(idx)\n }\n return acc\n }, []),\n })\n } else {\n event.preventDefault()\n updateSelections({\n indexes: isCurrentlySelected ? [] : [currentItemIndex],\n })\n }\n break\n }\n case 'Tab': {\n if (allowMultiSelection && isShiftPressed) {\n const prevIndex = currentItemIndex - 1\n if (prevIndex < 0 && selectedItemKeys?.size > 0) {\n setFocusedRowIndex(prevIndex)\n }\n } else {\n const nextIndex = currentItemIndex + 1\n if (nextIndex === totalCount && selectedItemKeys.size > 0) {\n setFocusedRowIndex(totalCount - 1)\n }\n }\n break\n }\n }\n },\n [\n selectedItemKeys,\n subfolders,\n documents,\n allowMultiSelection,\n handleShiftSelection,\n updateSelections,\n navigateAfterSelection,\n clearSelections,\n totalCount,\n ],\n )\n\n const onItemClick: FolderContextValue['onItemClick'] = React.useCallback(\n ({ event, item: clickedItem }) => {\n let doubleClicked: boolean = false\n const isCtrlPressed = event.ctrlKey || event.metaKey\n const isShiftPressed = event.shiftKey\n const isCurrentlySelected = selectedItemKeys.has(clickedItem.itemKey)\n const allItems = [...subfolders, ...documents]\n const currentItemIndex = allItems.findIndex((item) => item.itemKey === clickedItem.itemKey)\n\n if (allowMultiSelection && isCtrlPressed) {\n event.preventDefault()\n let overlayItemKey: FolderDocumentItemKey | undefined\n const indexes = allItems.reduce((acc, item, idx) => {\n if (item.itemKey === clickedItem.itemKey) {\n if (isCurrentlySelected && event.type !== 'pointermove') {\n return acc\n } else {\n acc.push(idx)\n overlayItemKey = item.itemKey\n }\n } else if (selectedItemKeys.has(item.itemKey)) {\n acc.push(idx)\n }\n return acc\n }, [])\n\n updateSelections({ indexes })\n\n if (overlayItemKey) {\n setDragOverlayItem(getItem(overlayItemKey))\n }\n } else if (allowMultiSelection && isShiftPressed) {\n if (currentItemIndex !== -1) {\n const selectedIndexes = handleShiftSelection(currentItemIndex)\n updateSelections({ indexes: selectedIndexes })\n }\n } else if (allowMultiSelection && event.type === 'pointermove') {\n // on drag start of an unselected item\n if (!isCurrentlySelected) {\n updateSelections({\n indexes: allItems.reduce((acc, item, idx) => {\n if (item.itemKey === clickedItem.itemKey) {\n acc.push(idx)\n }\n return acc\n }, []),\n })\n }\n setDragOverlayItem(getItem(clickedItem.itemKey))\n } else {\n // Normal click - select single item\n const now = Date.now()\n doubleClicked =\n now - lastClickTime.current < 400 && dragOverlayItem?.itemKey === clickedItem.itemKey\n lastClickTime.current = now\n if (!doubleClicked) {\n updateSelections({\n indexes: isCurrentlySelected && selectedItemKeys.size === 1 ? [] : [currentItemIndex],\n })\n }\n setDragOverlayItem(getItem(clickedItem.itemKey))\n }\n\n if (doubleClicked) {\n navigateAfterSelection({\n collectionSlug: clickedItem.relationTo,\n docID: extractID(clickedItem.value),\n })\n }\n },\n [\n selectedItemKeys,\n subfolders,\n documents,\n allowMultiSelection,\n dragOverlayItem,\n getItem,\n updateSelections,\n navigateAfterSelection,\n handleShiftSelection,\n ],\n )\n\n /**\n * Makes requests to the server to update the folder field on passed in documents\n *\n * Might rewrite this in the future to return the promises so errors can be handled contextually\n */\n const moveToFolder: FolderContextValue['moveToFolder'] = React.useCallback(\n async (args) => {\n const { itemsToMove: items, toFolderID } = args\n if (!items.length) {\n return\n }\n\n const movingCurrentFolder =\n items.length === 1 &&\n items[0].relationTo === folderCollectionSlug &&\n items[0].value.id === folderID\n\n if (movingCurrentFolder) {\n const queryParams = qs.stringify(\n {\n depth: 0,\n locale: localeCode,\n },\n {\n addQueryPrefix: true,\n },\n )\n const req = await fetch(\n formatAdminURL({\n apiRoute: routes.api,\n path: `/${folderCollectionSlug}/${folderID}${queryParams}`,\n }),\n {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n },\n )\n if (req.status !== 200) {\n toast.error(t('general:error'))\n }\n } else {\n for (const [collectionSlug, ids] of Object.entries(groupItemIDsByRelation(items))) {\n const queryParams = qs.stringify(\n {\n depth: 0,\n limit: 0,\n locale: localeCode,\n where: {\n id: {\n in: ids,\n },\n },\n },\n {\n addQueryPrefix: true,\n },\n )\n try {\n await fetch(\n formatAdminURL({\n apiRoute: routes.api,\n path: `/${collectionSlug}${queryParams}`,\n }),\n {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n },\n )\n } catch (error) {\n toast.error(t('general:error'))\n // eslint-disable-next-line no-console\n console.error(error)\n continue\n }\n }\n }\n\n clearSelections()\n },\n [folderID, clearSelections, folderCollectionSlug, folderFieldName, routes.api, t, localeCode],\n )\n\n const checkIfItemIsDisabled: FolderContextValue['checkIfItemIsDisabled'] = React.useCallback(\n (item) => {\n function folderAcceptsItem({\n item,\n selectedFolderCollections,\n }: {\n item: FolderOrDocument\n selectedFolderCollections: string[]\n }): boolean {\n if (\n !item.value.folderType ||\n (Array.isArray(item.value.folderType) && item.value.folderType.length === 0)\n ) {\n // Enable folder that accept all collections\n return false\n }\n\n if (selectedFolderCollections.length === 0) {\n // If no collections are selected, enable folders that accept all collections\n return Boolean(item.value.folderType || item.value.folderType.length > 0)\n }\n\n // Disable folders that do not accept all of the selected collections\n return selectedFolderCollections.some((slug) => {\n return !item.value.folderType.includes(slug)\n })\n }\n\n if (isDragging) {\n const isSelected = selectedItemKeys.has(item.itemKey)\n if (isSelected) {\n return true\n } else if (item.relationTo === folderCollectionSlug) {\n return folderAcceptsItem({ item, selectedFolderCollections })\n } else {\n // Non folder items are disabled on drag\n return true\n }\n } else if (parentFolderContext?.selectedItemKeys?.size) {\n // Disable selected items from being navigated to in move to drawer\n if (parentFolderContext.selectedItemKeys.has(item.itemKey)) {\n return true\n }\n // Moving items to folder\n if (item.relationTo === folderCollectionSlug) {\n return folderAcceptsItem({\n item,\n selectedFolderCollections: parentFolderContext.selectedFolderCollections,\n })\n }\n // If the item is not a folder, it is disabled on move\n return true\n }\n },\n [\n selectedFolderCollections,\n isDragging,\n selectedItemKeys,\n folderCollectionSlug,\n parentFolderContext?.selectedFolderCollections,\n parentFolderContext?.selectedItemKeys,\n ],\n )\n\n // If a new component is provided, update the state so children can re-render with the new component\n React.useEffect(() => {\n if (InitialFolderResultsComponent) {\n setFolderResultsComponent(InitialFolderResultsComponent)\n }\n }, [InitialFolderResultsComponent])\n\n return (\n <Context\n value={{\n activeCollectionFolderSlugs: activeCollectionSlugs || allCollectionFolderSlugs,\n allCollectionFolderSlugs,\n allowCreateCollectionSlugs,\n breadcrumbs,\n checkIfItemIsDisabled,\n clearSelections,\n currentFolder:\n breadcrumbs?.[breadcrumbs.length - 1]?.id !== undefined\n ? formatFolderOrDocumentItem({\n folderFieldName,\n isUpload: false,\n relationTo: folderCollectionSlug,\n useAsTitle: folderCollectionConfig.admin.useAsTitle,\n value: breadcrumbs[breadcrumbs.length - 1],\n })\n : null,\n documents,\n dragOverlayItem,\n focusedRowIndex,\n folderCollectionConfig,\n folderCollectionSlug,\n folderFieldName,\n folderID,\n FolderResultsComponent,\n folderType: breadcrumbs?.[breadcrumbs.length - 1]?.folderType,\n getFolderRoute,\n getSelectedItems,\n isDragging,\n itemKeysToMove: parentFolderContext.selectedItemKeys,\n moveToFolder,\n onItemClick,\n onItemKeyPress,\n refineFolderData,\n search,\n selectedFolderCollections,\n selectedItemKeys,\n setBreadcrumbs,\n setFocusedRowIndex,\n setIsDragging,\n sort,\n subfolders,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport function useFolder(): FolderContextValue {\n const context = React.use(Context)\n\n if (context === undefined) {\n throw new Error('useFolder must be used within a FolderProvider')\n }\n\n return context\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;AAQ9E,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,CA0F5F,CAAA;AAED,eAAO,MAAM,gBAAgB;;4BA3GH,OAAO;CA2G8B,CAAA;AAE/D;;;GAGG;AACH,eAAO,MAAM,SAAS,QAAO,MAA4B,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;AAIrC,OAAO,KAA0D,MAAM,OAAO,CAAA;AAQ9E,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,CA4F5F,CAAA;AAED,eAAO,MAAM,gBAAgB;;4BA7GH,OAAO;CA6G8B,CAAA;AAE/D;;;GAGG;AACH,eAAO,MAAM,SAAS,QAAO,MAA4B,CAAA"}
@@ -3,6 +3,7 @@
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
5
  import { useSearchParams } from 'next/navigation.js';
6
+ import { formatAdminURL } from 'payload/shared';
6
7
  import React, { createContext, use, useEffect, useRef, useState } from 'react';
7
8
  import { findLocaleFromCode } from '../../utilities/findLocaleFromCode.js';
8
9
  import { useAuth } from '../Auth/index.js';
@@ -20,7 +21,7 @@ const fetchPreferences = async (key, baseURL) => await fetch(`${baseURL}/payload
20
21
  method: 'GET'
21
22
  })?.then(res => res.json());
22
23
  export const LocaleProvider = t0 => {
23
- const $ = _c(26);
24
+ const $ = _c(28);
24
25
  const {
25
26
  children,
26
27
  locale: initialLocaleFromPrefs
@@ -30,8 +31,7 @@ export const LocaleProvider = t0 => {
30
31
  } = useConfig();
31
32
  const {
32
33
  localization: t2,
33
- routes: t3,
34
- serverURL
34
+ routes: t3
35
35
  } = t1;
36
36
  const localization = t2 === undefined ? false : t2;
37
37
  const {
@@ -88,10 +88,21 @@ export const LocaleProvider = t0 => {
88
88
  t8 = $[9];
89
89
  }
90
90
  useEffect(t7, t8);
91
- const fetchURL = `${serverURL}${apiRoute}`;
92
91
  let t9;
93
- if ($[10] !== defaultLocale || $[11] !== fetchURL || $[12] !== localeFromParams || $[13] !== localization || $[14] !== user?.id) {
94
- t9 = () => {
92
+ if ($[10] !== apiRoute) {
93
+ t9 = formatAdminURL({
94
+ apiRoute,
95
+ path: ""
96
+ });
97
+ $[10] = apiRoute;
98
+ $[11] = t9;
99
+ } else {
100
+ t9 = $[11];
101
+ }
102
+ const fetchURL = t9;
103
+ let t10;
104
+ if ($[12] !== defaultLocale || $[13] !== fetchURL || $[14] !== localeFromParams || $[15] !== localization || $[16] !== user?.id) {
105
+ t10 = () => {
95
106
  const resetLocale = async function resetLocale() {
96
107
  if (localization && user?.id) {
97
108
  const localeToUse = localeFromParams || (await fetchPreferences("locale", fetchURL)?.then(_temp));
@@ -103,32 +114,32 @@ export const LocaleProvider = t0 => {
103
114
  };
104
115
  resetLocale();
105
116
  };
106
- $[10] = defaultLocale;
107
- $[11] = fetchURL;
108
- $[12] = localeFromParams;
109
- $[13] = localization;
110
- $[14] = user?.id;
111
- $[15] = t9;
117
+ $[12] = defaultLocale;
118
+ $[13] = fetchURL;
119
+ $[14] = localeFromParams;
120
+ $[15] = localization;
121
+ $[16] = user?.id;
122
+ $[17] = t10;
112
123
  } else {
113
- t9 = $[15];
124
+ t10 = $[17];
114
125
  }
115
- const t10 = user?.id;
116
- let t11;
117
- if ($[16] !== defaultLocale || $[17] !== fetchURL || $[18] !== localeFromParams || $[19] !== localization || $[20] !== t10) {
118
- t11 = [defaultLocale, localization, fetchURL, localeFromParams, t10];
119
- $[16] = defaultLocale;
120
- $[17] = fetchURL;
121
- $[18] = localeFromParams;
122
- $[19] = localization;
123
- $[20] = t10;
124
- $[21] = t11;
126
+ const t11 = user?.id;
127
+ let t12;
128
+ if ($[18] !== defaultLocale || $[19] !== fetchURL || $[20] !== localeFromParams || $[21] !== localization || $[22] !== t11) {
129
+ t12 = [defaultLocale, localization, fetchURL, localeFromParams, t11];
130
+ $[18] = defaultLocale;
131
+ $[19] = fetchURL;
132
+ $[20] = localeFromParams;
133
+ $[21] = localization;
134
+ $[22] = t11;
135
+ $[23] = t12;
125
136
  } else {
126
- t11 = $[21];
137
+ t12 = $[23];
127
138
  }
128
- useEffect(t9, t11);
129
- let t12;
130
- if ($[22] !== children || $[23] !== isLoading || $[24] !== locale) {
131
- t12 = _jsx(LocaleContext, {
139
+ useEffect(t10, t12);
140
+ let t13;
141
+ if ($[24] !== children || $[25] !== isLoading || $[26] !== locale) {
142
+ t13 = _jsx(LocaleContext, {
132
143
  value: locale,
133
144
  children: _jsx(LocaleLoadingContext, {
134
145
  value: {
@@ -138,14 +149,14 @@ export const LocaleProvider = t0 => {
138
149
  children
139
150
  })
140
151
  });
141
- $[22] = children;
142
- $[23] = isLoading;
143
- $[24] = locale;
144
- $[25] = t12;
152
+ $[24] = children;
153
+ $[25] = isLoading;
154
+ $[26] = locale;
155
+ $[27] = t13;
145
156
  } else {
146
- t12 = $[25];
157
+ t13 = $[27];
147
158
  }
148
- return t12;
159
+ return t13;
149
160
  };
150
161
  export const useLocaleLoading = () => use(LocaleLoadingContext);
151
162
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useSearchParams","React","createContext","use","useEffect","useRef","useState","findLocaleFromCode","useAuth","useConfig","LocaleContext","LocaleLoadingContext","localeIsLoading","setLocaleIsLoading","_","undefined","fetchPreferences","key","baseURL","fetch","credentials","headers","method","then","res","json","LocaleProvider","t0","$","children","locale","initialLocaleFromPrefs","config","t1","localization","t2","routes","t3","serverURL","api","apiRoute","user","defaultLocale","t4","t5","get","localeFromParams","t6","locales","length","code","setLocale","isLoading","prevLocale","t7","t8","current","fetchURL","t9","id","resetLocale","localeToUse","_temp","newLocale","t10","t11","t12","_jsx","value","useLocaleLoading","useLocale"],"sources":["../../../src/providers/Locale/index.tsx"],"sourcesContent":["'use client'\n\nimport type { Locale } from 'payload'\n\nimport { useSearchParams } from 'next/navigation.js'\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'\n\nconst LocaleContext = createContext({} as Locale)\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 serverURL,\n },\n } = useConfig()\n\n const { user } = useAuth()\n\n const defaultLocale = localization ? localization.defaultLocale : 'en'\n\n const localeFromParams = useSearchParams().get('locale')\n\n const [locale, setLocale] = React.useState<Locale>(() => {\n if (!localization || (localization && !localization.locales.length)) {\n // TODO: return null V4\n return {} as Locale\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>(locale)\n\n useEffect(() => {\n /**\n * We need to set `isLoading` back to false once the locale is detected to be different\n * This happens when the user clicks an anchor link which appends the `?locale=` query param\n * This triggers a client-side navigation, which re-renders the page with the new locale\n * In Next.js, local state is persisted during this type of navigation because components are not unmounted\n */\n if (locale.code !== prevLocale.current.code) {\n setLocaleIsLoading(false)\n }\n\n prevLocale.current = locale\n }, [locale])\n\n const fetchURL = `${serverURL}${apiRoute}`\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\n/**\n * TODO: V4\n * The return type of the `useLocale` hook will change in v4. It will return `null | Locale` instead of `false | {} | Locale`.\n */\nexport const useLocale = (): Locale => use(LocaleContext)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useSearchParams","formatAdminURL","React","createContext","use","useEffect","useRef","useState","findLocaleFromCode","useAuth","useConfig","LocaleContext","LocaleLoadingContext","localeIsLoading","setLocaleIsLoading","_","undefined","fetchPreferences","key","baseURL","fetch","credentials","headers","method","then","res","json","LocaleProvider","t0","$","children","locale","initialLocaleFromPrefs","config","t1","localization","t2","routes","t3","api","apiRoute","user","defaultLocale","t4","t5","get","localeFromParams","t6","locales","length","code","setLocale","isLoading","prevLocale","t7","t8","current","t9","path","fetchURL","t10","id","resetLocale","localeToUse","_temp","newLocale","t11","t12","t13","_jsx","value","useLocaleLoading","useLocale"],"sources":["../../../src/providers/Locale/index.tsx"],"sourcesContent":["'use client'\n\nimport type { Locale } from 'payload'\n\nimport { useSearchParams } from 'next/navigation.js'\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'\n\nconst LocaleContext = createContext({} as Locale)\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\n const defaultLocale = localization ? localization.defaultLocale : 'en'\n\n const localeFromParams = useSearchParams().get('locale')\n\n const [locale, setLocale] = React.useState<Locale>(() => {\n if (!localization || (localization && !localization.locales.length)) {\n // TODO: return null V4\n return {} as Locale\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>(locale)\n\n useEffect(() => {\n /**\n * We need to set `isLoading` back to false once the locale is detected to be different\n * This happens when the user clicks an anchor link which appends the `?locale=` query param\n * This triggers a client-side navigation, which re-renders the page with the new locale\n * In Next.js, local state is persisted during this type of navigation because components are not unmounted\n */\n if (locale.code !== prevLocale.current.code) {\n setLocaleIsLoading(false)\n }\n\n prevLocale.current = locale\n }, [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\n/**\n * TODO: V4\n * The return type of the `useLocale` hook will change in v4. It will return `null | Locale` instead of `false | {} | Locale`.\n */\nexport const useLocale = (): Locale => use(LocaleContext)\n"],"mappings":"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","ignoreList":[]}