@payloadcms/ui 3.68.0-internal-debug.2eb12b9 → 3.68.0-internal-debug.185cc5f

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 (253) hide show
  1. package/dist/elements/AnimateHeight/usePatchAnimateHeight.js +2 -2
  2. package/dist/elements/AnimateHeight/usePatchAnimateHeight.js.map +1 -1
  3. package/dist/elements/Autosave/index.js +1 -0
  4. package/dist/elements/Autosave/index.js.map +1 -1
  5. package/dist/elements/BulkUpload/EditMany/index.js +2 -2
  6. package/dist/elements/BulkUpload/EditMany/index.js.map +1 -1
  7. package/dist/elements/BulkUpload/FormsManager/index.js +8 -8
  8. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  9. package/dist/elements/BulkUpload/index.js +12 -1
  10. package/dist/elements/BulkUpload/index.js.map +1 -1
  11. package/dist/elements/Button/index.js +2 -2
  12. package/dist/elements/Button/index.js.map +1 -1
  13. package/dist/elements/Button/types.js +13 -1
  14. package/dist/elements/Button/types.js.map +1 -1
  15. package/dist/elements/Card/index.js +5 -1
  16. package/dist/elements/Card/index.js.map +1 -1
  17. package/dist/elements/CodeEditor/CodeEditor.js +2 -2
  18. package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
  19. package/dist/elements/CodeEditor/types.js +3 -1
  20. package/dist/elements/CodeEditor/types.js.map +1 -1
  21. package/dist/elements/Collapsible/index.js +8 -1
  22. package/dist/elements/Collapsible/index.js.map +1 -1
  23. package/dist/elements/Combobox/index.js +6 -0
  24. package/dist/elements/Combobox/index.js.map +1 -1
  25. package/dist/elements/DatePicker/DatePicker.js +1 -0
  26. package/dist/elements/DatePicker/DatePicker.js.map +1 -1
  27. package/dist/elements/DatePicker/getFormattedLocale.js +1 -0
  28. package/dist/elements/DatePicker/getFormattedLocale.js.map +1 -1
  29. package/dist/elements/DeleteMany/index.js +25 -1
  30. package/dist/elements/DeleteMany/index.js.map +1 -1
  31. package/dist/elements/DocumentControls/index.js +1 -1
  32. package/dist/elements/DocumentControls/index.js.map +1 -1
  33. package/dist/elements/DocumentDrawer/Provider.js +5 -1
  34. package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
  35. package/dist/elements/DocumentDrawer/types.js +11 -1
  36. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  37. package/dist/elements/DraggableSortable/useDraggableSortable/index.js +1 -0
  38. package/dist/elements/DraggableSortable/useDraggableSortable/index.js.map +1 -1
  39. package/dist/elements/Drawer/index.js +3 -1
  40. package/dist/elements/Drawer/index.js.map +1 -1
  41. package/dist/elements/EditMany/DrawerContent.js +15 -1
  42. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  43. package/dist/elements/EditMany/index.js +3 -1
  44. package/dist/elements/EditMany/index.js.map +1 -1
  45. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +8 -1
  46. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +1 -1
  47. package/dist/elements/FolderView/FolderFileCard/index.js +1 -0
  48. package/dist/elements/FolderView/FolderFileCard/index.js.map +1 -1
  49. package/dist/elements/FolderView/MoveDocToFolder/index.js +2 -3
  50. package/dist/elements/FolderView/MoveDocToFolder/index.js.map +1 -1
  51. package/dist/elements/HTMLDiff/diff/index.js +24 -3
  52. package/dist/elements/HTMLDiff/diff/index.js.map +1 -1
  53. package/dist/elements/HydrateAuthProvider/index.js +6 -1
  54. package/dist/elements/HydrateAuthProvider/index.js.map +1 -1
  55. package/dist/elements/LeaveWithoutSaving/usePreventLeave.js +3 -1
  56. package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -1
  57. package/dist/elements/Link/index.js +5 -1
  58. package/dist/elements/Link/index.js.map +1 -1
  59. package/dist/elements/ListControls/types.js +7 -1
  60. package/dist/elements/ListControls/types.js.map +1 -1
  61. package/dist/elements/ListDrawer/DrawerContent.js +2 -2
  62. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  63. package/dist/elements/ListDrawer/Provider.js +8 -1
  64. package/dist/elements/ListDrawer/Provider.js.map +1 -1
  65. package/dist/elements/ListDrawer/index.js +2 -1
  66. package/dist/elements/ListDrawer/index.js.map +1 -1
  67. package/dist/elements/ListDrawer/types.js +5 -1
  68. package/dist/elements/ListDrawer/types.js.map +1 -1
  69. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +5 -1
  70. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
  71. package/dist/elements/ListSelection/index.js +11 -1
  72. package/dist/elements/ListSelection/index.js.map +1 -1
  73. package/dist/elements/LivePreview/Toolbar/Controls/index.js +1 -1
  74. package/dist/elements/LivePreview/Toolbar/Controls/index.js.map +1 -1
  75. package/dist/elements/Logout/index.js +5 -1
  76. package/dist/elements/Logout/index.js.map +1 -1
  77. package/dist/elements/Pill/index.js +5 -2
  78. package/dist/elements/Pill/index.js.map +1 -1
  79. package/dist/elements/PublishMany/index.js +3 -1
  80. package/dist/elements/PublishMany/index.js.map +1 -1
  81. package/dist/elements/QueryPresets/QueryPresetBar/index.js +1 -2
  82. package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
  83. package/dist/elements/ReactSelect/index.js +2 -2
  84. package/dist/elements/ReactSelect/index.js.map +1 -1
  85. package/dist/elements/ReactSelect/types.js +8 -1
  86. package/dist/elements/ReactSelect/types.js.map +1 -1
  87. package/dist/elements/RelationshipTable/index.js +2 -2
  88. package/dist/elements/RelationshipTable/index.js.map +1 -1
  89. package/dist/elements/RestoreMany/index.js +1 -0
  90. package/dist/elements/RestoreMany/index.js.map +1 -1
  91. package/dist/elements/SaveButton/index.js +1 -2
  92. package/dist/elements/SaveButton/index.js.map +1 -1
  93. package/dist/elements/SaveDraftButton/index.js +1 -2
  94. package/dist/elements/SaveDraftButton/index.js.map +1 -1
  95. package/dist/elements/SearchFilter/types.js +19 -1
  96. package/dist/elements/SearchFilter/types.js.map +1 -1
  97. package/dist/elements/Status/index.js +2 -2
  98. package/dist/elements/Status/index.js.map +1 -1
  99. package/dist/elements/StepNav/index.js +5 -1
  100. package/dist/elements/StepNav/index.js.map +1 -1
  101. package/dist/elements/Table/DefaultCell/fields/Select/index.js +4 -4
  102. package/dist/elements/Table/DefaultCell/fields/Select/index.js.map +1 -1
  103. package/dist/elements/Table/DefaultCell/index.js +2 -1
  104. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  105. package/dist/elements/Table/RelationshipProvider/index.js +3 -0
  106. package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
  107. package/dist/elements/Thumbnail/createThumbnail.js +12 -12
  108. package/dist/elements/Thumbnail/createThumbnail.js.map +1 -1
  109. package/dist/elements/Tooltip/index.js +3 -1
  110. package/dist/elements/Tooltip/index.js.map +1 -1
  111. package/dist/elements/UnpublishMany/index.js +3 -1
  112. package/dist/elements/UnpublishMany/index.js.map +1 -1
  113. package/dist/elements/Upload/index.js +8 -8
  114. package/dist/elements/Upload/index.js.map +1 -1
  115. package/dist/elements/WhereBuilder/Condition/Number/index.js +1 -0
  116. package/dist/elements/WhereBuilder/Condition/Number/index.js.map +1 -1
  117. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +5 -6
  118. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  119. package/dist/elements/WhereBuilder/Condition/Text/index.js +1 -0
  120. package/dist/elements/WhereBuilder/Condition/Text/index.js.map +1 -1
  121. package/dist/elements/WhereBuilder/index.js +2 -2
  122. package/dist/elements/WhereBuilder/index.js.map +1 -1
  123. package/dist/exports/client/index.js +26 -2
  124. package/dist/exports/client/index.js.map +1 -1
  125. package/dist/exports/shared/index.js +2 -1
  126. package/dist/exports/shared/index.js.map +1 -1
  127. package/dist/fields/Blocks/BlockSelector/index.js +3 -1
  128. package/dist/fields/Blocks/BlockSelector/index.js.map +1 -1
  129. package/dist/fields/Email/index.js +1 -1
  130. package/dist/fields/Email/index.js.map +1 -1
  131. package/dist/fields/Group/index.js +1 -1
  132. package/dist/fields/Group/index.js.map +1 -1
  133. package/dist/fields/Number/index.js +5 -3
  134. package/dist/fields/Number/index.js.map +1 -1
  135. package/dist/fields/Password/types.js +11 -1
  136. package/dist/fields/Password/types.js.map +1 -1
  137. package/dist/fields/Point/index.js +2 -2
  138. package/dist/fields/Point/index.js.map +1 -1
  139. package/dist/fields/Relationship/select-components/MultiValueLabel/index.js +4 -1
  140. package/dist/fields/Relationship/select-components/MultiValueLabel/index.js.map +1 -1
  141. package/dist/fields/Relationship/select-components/SingleValue/index.js +4 -1
  142. package/dist/fields/Relationship/select-components/SingleValue/index.js.map +1 -1
  143. package/dist/fields/Text/index.js +3 -2
  144. package/dist/fields/Text/index.js.map +1 -1
  145. package/dist/fields/Upload/Input.js +3 -1
  146. package/dist/fields/Upload/Input.js.map +1 -1
  147. package/dist/fields/Upload/types.js +1 -0
  148. package/dist/fields/Upload/types.js.map +1 -1
  149. package/dist/fields/shared/index.js +2 -3
  150. package/dist/fields/shared/index.js.map +1 -1
  151. package/dist/forms/Form/fieldReducer.js +2 -1
  152. package/dist/forms/Form/fieldReducer.js.map +1 -1
  153. package/dist/forms/Form/index.js +12 -9
  154. package/dist/forms/Form/index.js.map +1 -1
  155. package/dist/forms/Form/mergeServerFormState.js +11 -3
  156. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  157. package/dist/forms/Form/reduceToSerializableFields.js +2 -2
  158. package/dist/forms/Form/reduceToSerializableFields.js.map +1 -1
  159. package/dist/forms/Form/types.js +52 -1
  160. package/dist/forms/Form/types.js.map +1 -1
  161. package/dist/forms/NullifyField/index.js +2 -1
  162. package/dist/forms/NullifyField/index.js.map +1 -1
  163. package/dist/forms/WatchChildErrors/index.js +6 -1
  164. package/dist/forms/WatchChildErrors/index.js.map +1 -1
  165. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +20 -0
  166. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  167. package/dist/forms/fieldSchemasToFormState/index.js +33 -1
  168. package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
  169. package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js +2 -2
  170. package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js.map +1 -1
  171. package/dist/forms/fieldSchemasToFormState/iterateFields.js +16 -0
  172. package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
  173. package/dist/forms/fieldSchemasToFormState/renderField.js +2 -2
  174. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  175. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +22 -1
  176. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
  177. package/dist/forms/fieldSchemasToFormState/types.js +5 -1
  178. package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
  179. package/dist/forms/useField/index.js +1 -0
  180. package/dist/forms/useField/index.js.map +1 -1
  181. package/dist/forms/useField/types.js +19 -1
  182. package/dist/forms/useField/types.js.map +1 -1
  183. package/dist/hooks/useControllableState.js +9 -1
  184. package/dist/hooks/useControllableState.js.map +1 -1
  185. package/dist/hooks/useDelayedRender.js +3 -1
  186. package/dist/hooks/useDelayedRender.js.map +1 -1
  187. package/dist/hooks/useHotkey.js +2 -2
  188. package/dist/hooks/useHotkey.js.map +1 -1
  189. package/dist/hooks/usePayloadAPI.js +3 -4
  190. package/dist/hooks/usePayloadAPI.js.map +1 -1
  191. package/dist/hooks/usePopupWindow.js +2 -2
  192. package/dist/hooks/usePopupWindow.js.map +1 -1
  193. package/dist/hooks/useQueue.js +15 -7
  194. package/dist/hooks/useQueue.js.map +1 -1
  195. package/dist/hooks/useResize.js +4 -3
  196. package/dist/hooks/useResize.js.map +1 -1
  197. package/dist/providers/Auth/index.js +35 -3
  198. package/dist/providers/Auth/index.js.map +1 -1
  199. package/dist/providers/Config/index.js +10 -1
  200. package/dist/providers/Config/index.js.map +1 -1
  201. package/dist/providers/DocumentInfo/index.js +6 -7
  202. package/dist/providers/DocumentInfo/index.js.map +1 -1
  203. package/dist/providers/DocumentInfo/types.js +25 -1
  204. package/dist/providers/DocumentInfo/types.js.map +1 -1
  205. package/dist/providers/Folders/index.js +44 -2
  206. package/dist/providers/Folders/index.js.map +1 -1
  207. package/dist/providers/ListQuery/types.js +5 -1
  208. package/dist/providers/ListQuery/types.js.map +1 -1
  209. package/dist/providers/LivePreview/context.js +11 -1
  210. package/dist/providers/LivePreview/context.js.map +1 -1
  211. package/dist/providers/LivePreview/index.js +7 -4
  212. package/dist/providers/LivePreview/index.js.map +1 -1
  213. package/dist/providers/Preferences/index.js +7 -2
  214. package/dist/providers/Preferences/index.js.map +1 -1
  215. package/dist/providers/RouteTransition/index.js +9 -9
  216. package/dist/providers/RouteTransition/index.js.map +1 -1
  217. package/dist/providers/Selection/index.js +7 -2
  218. package/dist/providers/Selection/index.js.map +1 -1
  219. package/dist/providers/ServerFunctions/index.js +25 -22
  220. package/dist/providers/ServerFunctions/index.js.map +1 -1
  221. package/dist/providers/TableColumns/buildColumnState/index.js +10 -9
  222. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  223. package/dist/providers/TableColumns/buildColumnState/renderCell.js +4 -3
  224. package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
  225. package/dist/providers/TableColumns/types.js +17 -1
  226. package/dist/providers/TableColumns/types.js.map +1 -1
  227. package/dist/utilities/abortAndIgnore.js +4 -6
  228. package/dist/utilities/abortAndIgnore.js.map +1 -1
  229. package/dist/utilities/buildFieldSchemaMap/traverseFields.js +2 -2
  230. package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
  231. package/dist/utilities/copyDataFromLocale.js +6 -2
  232. package/dist/utilities/copyDataFromLocale.js.map +1 -1
  233. package/dist/utilities/getDisplayedFieldValue.js +8 -8
  234. package/dist/utilities/getDisplayedFieldValue.js.map +1 -1
  235. package/dist/utilities/getFolderResultsComponentAndData.js +2 -1
  236. package/dist/utilities/getFolderResultsComponentAndData.js.map +1 -1
  237. package/dist/utilities/handleFormStateLocking.js +2 -2
  238. package/dist/utilities/handleFormStateLocking.js.map +1 -1
  239. package/dist/utilities/hasSavePermission.js +5 -1
  240. package/dist/utilities/hasSavePermission.js.map +1 -1
  241. package/dist/utilities/isURLAllowed.js +6 -6
  242. package/dist/utilities/isURLAllowed.js.map +1 -1
  243. package/dist/utilities/renderTable.js +2 -1
  244. package/dist/utilities/renderTable.js.map +1 -1
  245. package/dist/utilities/schedulePublishHandler.js +3 -1
  246. package/dist/utilities/schedulePublishHandler.js.map +1 -1
  247. package/dist/utilities/upsertPreferences.js +1 -0
  248. package/dist/utilities/upsertPreferences.js.map +1 -1
  249. package/dist/views/Edit/index.js +7 -7
  250. package/dist/views/Edit/index.js.map +1 -1
  251. package/dist/views/List/ListHeader/index.js +6 -1
  252. package/dist/views/List/ListHeader/index.js.map +1 -1
  253. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/providers/Selection/index.tsx"],"sourcesContent":["'use client'\nimport type { Where } from 'payload'\n\nimport { useSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { useAuth } from '../Auth/index.js'\nimport { useListQuery } from '../ListQuery/index.js'\nimport { useLocale } from '../Locale/index.js'\n\nexport enum SelectAllStatus {\n AllAvailable = 'allAvailable',\n AllInPage = 'allInPage',\n None = 'none',\n Some = 'some',\n}\n\ntype SelectionContext = {\n count: number\n disableBulkDelete?: boolean\n disableBulkEdit?: boolean\n getQueryParams: (additionalParams?: Where) => string\n getSelectedIds: () => (number | string)[]\n selectAll: SelectAllStatus\n selected: Map<number | string, boolean>\n selectedIDs: (number | string)[]\n setSelection: (id: number | string) => void\n /**\n * Selects all rows on the current page within the current query.\n * If `allAvailable` is true, does not select specific IDs so that the query itself affects all rows across all pages.\n */\n toggleAll: (allAvailable?: boolean) => void\n totalDocs: number\n}\n\nconst Context = createContext({\n count: undefined,\n getQueryParams: (additionalParams?: Where) => '',\n getSelectedIds: () => [],\n selectAll: undefined,\n selected: new Map(),\n selectedIDs: [],\n setSelection: (id: number | string) => {},\n toggleAll: (toggleAll: boolean) => {},\n totalDocs: undefined,\n} satisfies SelectionContext)\n\ntype Props = {\n readonly children: React.ReactNode\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly docs: any[]\n readonly totalDocs: number\n}\n\nconst reduceActiveSelections = (selected: Map<number | string, boolean>): (number | string)[] => {\n const ids = []\n\n for (const [key, value] of selected) {\n if (value) {\n ids.push(key)\n }\n }\n\n return ids\n}\n\nexport const SelectionProvider: React.FC<Props> = ({ children, docs = [], totalDocs }) => {\n const contextRef = useRef({} as SelectionContext)\n const { user } = useAuth()\n\n const { code: locale } = useLocale()\n\n const [selected, setSelected] = useState<SelectionContext['selected']>(() => {\n const rows = new Map()\n\n docs.forEach(({ id }) => {\n rows.set(id, false)\n })\n\n return rows\n })\n\n const [selectAll, setSelectAll] = useState<SelectAllStatus>(SelectAllStatus.None)\n const [count, setCount] = useState(0)\n const searchParams = useSearchParams()\n const { query } = useListQuery()\n\n const toggleAll: SelectionContext['toggleAll'] = useCallback(\n (allAvailable = false) => {\n const rows = new Map()\n if (allAvailable) {\n setSelectAll(SelectAllStatus.AllAvailable)\n\n docs.forEach(({ id, _isLocked, _userEditing }) => {\n if (!_isLocked || _userEditing?.id === user?.id) {\n rows.set(id, true)\n }\n })\n } else if (\n // Reset back to `None` if we previously had any type of selection\n selectAll === SelectAllStatus.AllAvailable ||\n selectAll === SelectAllStatus.AllInPage\n ) {\n setSelectAll(SelectAllStatus.None)\n } else {\n docs.forEach(({ id, _isLocked, _userEditing }) => {\n if (!_isLocked || _userEditing?.id === user?.id) {\n rows.set(id, selectAll !== SelectAllStatus.Some)\n }\n })\n }\n\n setSelected(rows)\n },\n [docs, selectAll, user?.id],\n )\n\n const setSelection: SelectionContext['setSelection'] = useCallback(\n (id) => {\n const doc = docs.find((doc) => doc.id === id)\n\n if (doc?._isLocked && user?.id !== doc?._userEditing.id) {\n return // Prevent selection if the document is locked\n }\n\n const existingValue = selected.get(id)\n const isSelected = typeof existingValue === 'boolean' ? !existingValue : true\n\n const newMap = new Map(selected.set(id, isSelected))\n\n // If previously selected all and now deselecting, adjust status\n if (selectAll === SelectAllStatus.AllAvailable && !isSelected) {\n setSelectAll(SelectAllStatus.Some)\n }\n\n setSelected(newMap)\n },\n [selected, docs, selectAll, user?.id],\n )\n\n const getQueryParams = useCallback(\n (additionalWhereParams?: Where): string => {\n let where: Where\n\n if (selectAll === SelectAllStatus.AllAvailable) {\n const params = parseSearchParams(searchParams)?.where as Where\n\n where = params || {\n id: {\n not_equals: '',\n },\n }\n } else {\n const ids = []\n\n for (const [key, value] of selected) {\n if (value) {\n ids.push(key)\n }\n }\n\n where = {\n id: {\n in: ids,\n },\n }\n }\n\n if (additionalWhereParams) {\n where = {\n and: [{ ...additionalWhereParams }, where],\n }\n }\n\n return qs.stringify(\n {\n locale,\n where,\n },\n { addQueryPrefix: true },\n )\n },\n [selectAll, selected, locale, searchParams],\n )\n\n const getSelectedIds = useCallback(() => reduceActiveSelections(selected), [selected])\n\n useEffect(() => {\n if (selectAll === SelectAllStatus.AllAvailable) {\n return\n }\n let some = false\n let all = true\n\n if (!selected.size) {\n all = false\n some = false\n } else {\n for (const [_, value] of selected) {\n all = all && value\n some = some || value\n }\n }\n\n if (all && selected.size === docs.length) {\n setSelectAll(SelectAllStatus.AllInPage)\n } else if (some) {\n setSelectAll(SelectAllStatus.Some)\n } else {\n setSelectAll(SelectAllStatus.None)\n }\n }, [selectAll, selected, totalDocs, docs])\n\n useEffect(() => {\n let newCount = 0\n\n if (selectAll === SelectAllStatus.AllAvailable) {\n newCount = totalDocs\n } else {\n for (const [_, value] of selected) {\n if (value) {\n newCount++\n }\n }\n }\n\n setCount(newCount)\n }, [selectAll, selected, totalDocs])\n\n useEffect(() => {\n setSelectAll(SelectAllStatus.None)\n setSelected(new Map())\n }, [query])\n\n const selectedIDs = useMemo(() => reduceActiveSelections(selected), [selected])\n\n contextRef.current = {\n count,\n getQueryParams,\n getSelectedIds,\n selectAll,\n selected,\n selectedIDs,\n setSelection,\n toggleAll,\n totalDocs,\n }\n\n return <Context value={contextRef.current}>{children}</Context>\n}\n\nexport const useSelection = (): SelectionContext => use(Context)\n"],"names":["useSearchParams","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","parseSearchParams","useAuth","useListQuery","useLocale","SelectAllStatus","Context","count","undefined","getQueryParams","additionalParams","getSelectedIds","selectAll","selected","Map","selectedIDs","setSelection","id","toggleAll","totalDocs","reduceActiveSelections","ids","key","value","push","SelectionProvider","children","docs","contextRef","user","code","locale","setSelected","rows","forEach","set","setSelectAll","setCount","searchParams","query","allAvailable","_isLocked","_userEditing","doc","find","existingValue","get","isSelected","newMap","additionalWhereParams","where","params","not_equals","in","and","stringify","addQueryPrefix","some","all","size","_","length","newCount","current","useSelection"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/providers/Selection/index.tsx"],"sourcesContent":["'use client'\nimport type { Where } from 'payload'\n\nimport { useSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { useAuth } from '../Auth/index.js'\nimport { useListQuery } from '../ListQuery/index.js'\nimport { useLocale } from '../Locale/index.js'\n\nexport enum SelectAllStatus {\n AllAvailable = 'allAvailable',\n AllInPage = 'allInPage',\n None = 'none',\n Some = 'some',\n}\n\ntype SelectionContext = {\n count: number\n disableBulkDelete?: boolean\n disableBulkEdit?: boolean\n getQueryParams: (additionalParams?: Where) => string\n getSelectedIds: () => (number | string)[]\n selectAll: SelectAllStatus\n selected: Map<number | string, boolean>\n selectedIDs: (number | string)[]\n setSelection: (id: number | string) => void\n /**\n * Selects all rows on the current page within the current query.\n * If `allAvailable` is true, does not select specific IDs so that the query itself affects all rows across all pages.\n */\n toggleAll: (allAvailable?: boolean) => void\n totalDocs: number\n}\n\nconst Context = createContext({\n count: undefined,\n getQueryParams: (additionalParams?: Where) => '',\n getSelectedIds: () => [],\n selectAll: undefined,\n selected: new Map(),\n selectedIDs: [],\n setSelection: (id: number | string) => {},\n toggleAll: (toggleAll: boolean) => {},\n totalDocs: undefined,\n} satisfies SelectionContext)\n\ntype Props = {\n readonly children: React.ReactNode\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly docs: any[]\n readonly totalDocs: number\n}\n\nconst reduceActiveSelections = (selected: Map<number | string, boolean>): (number | string)[] => {\n const ids = []\n\n for (const [key, value] of selected) {\n if (value) {\n ids.push(key)\n }\n }\n\n return ids\n}\n\nexport const SelectionProvider: React.FC<Props> = ({ children, docs = [], totalDocs }) => {\n const contextRef = useRef({} as SelectionContext)\n const { user } = useAuth()\n\n const { code: locale } = useLocale()\n\n const [selected, setSelected] = useState<SelectionContext['selected']>(() => {\n const rows = new Map()\n\n docs.forEach(({ id }) => {\n rows.set(id, false)\n })\n\n return rows\n })\n\n const [selectAll, setSelectAll] = useState<SelectAllStatus>(SelectAllStatus.None)\n const [count, setCount] = useState(0)\n const searchParams = useSearchParams()\n const { query } = useListQuery()\n\n const toggleAll: SelectionContext['toggleAll'] = useCallback(\n (allAvailable = false) => {\n const rows = new Map()\n if (allAvailable) {\n setSelectAll(SelectAllStatus.AllAvailable)\n\n docs.forEach(({ id, _isLocked, _userEditing }) => {\n if (!_isLocked || _userEditing?.id === user?.id) {\n rows.set(id, true)\n }\n })\n } else if (\n // Reset back to `None` if we previously had any type of selection\n selectAll === SelectAllStatus.AllAvailable ||\n selectAll === SelectAllStatus.AllInPage\n ) {\n setSelectAll(SelectAllStatus.None)\n } else {\n docs.forEach(({ id, _isLocked, _userEditing }) => {\n if (!_isLocked || _userEditing?.id === user?.id) {\n rows.set(id, selectAll !== SelectAllStatus.Some)\n }\n })\n }\n\n setSelected(rows)\n },\n [docs, selectAll, user?.id],\n )\n\n const setSelection: SelectionContext['setSelection'] = useCallback(\n (id) => {\n const doc = docs.find((doc) => doc.id === id)\n\n if (doc?._isLocked && user?.id !== doc?._userEditing.id) {\n return // Prevent selection if the document is locked\n }\n\n const existingValue = selected.get(id)\n const isSelected = typeof existingValue === 'boolean' ? !existingValue : true\n\n const newMap = new Map(selected.set(id, isSelected))\n\n // If previously selected all and now deselecting, adjust status\n if (selectAll === SelectAllStatus.AllAvailable && !isSelected) {\n setSelectAll(SelectAllStatus.Some)\n }\n\n setSelected(newMap)\n },\n [selected, docs, selectAll, user?.id],\n )\n\n const getQueryParams = useCallback(\n (additionalWhereParams?: Where): string => {\n let where: Where\n\n if (selectAll === SelectAllStatus.AllAvailable) {\n const params = parseSearchParams(searchParams)?.where as Where\n\n where = params || {\n id: {\n not_equals: '',\n },\n }\n } else {\n const ids = []\n\n for (const [key, value] of selected) {\n if (value) {\n ids.push(key)\n }\n }\n\n where = {\n id: {\n in: ids,\n },\n }\n }\n\n if (additionalWhereParams) {\n where = {\n and: [{ ...additionalWhereParams }, where],\n }\n }\n\n return qs.stringify(\n {\n locale,\n where,\n },\n { addQueryPrefix: true },\n )\n },\n [selectAll, selected, locale, searchParams],\n )\n\n const getSelectedIds = useCallback(() => reduceActiveSelections(selected), [selected])\n\n useEffect(() => {\n if (selectAll === SelectAllStatus.AllAvailable) {\n return\n }\n let some = false\n let all = true\n\n if (!selected.size) {\n all = false\n some = false\n } else {\n for (const [_, value] of selected) {\n all = all && value\n some = some || value\n }\n }\n\n if (all && selected.size === docs.length) {\n setSelectAll(SelectAllStatus.AllInPage)\n } else if (some) {\n setSelectAll(SelectAllStatus.Some)\n } else {\n setSelectAll(SelectAllStatus.None)\n }\n }, [selectAll, selected, totalDocs, docs])\n\n useEffect(() => {\n let newCount = 0\n\n if (selectAll === SelectAllStatus.AllAvailable) {\n newCount = totalDocs\n } else {\n for (const [_, value] of selected) {\n if (value) {\n newCount++\n }\n }\n }\n\n setCount(newCount)\n }, [selectAll, selected, totalDocs])\n\n useEffect(() => {\n setSelectAll(SelectAllStatus.None)\n setSelected(new Map())\n }, [query])\n\n const selectedIDs = useMemo(() => reduceActiveSelections(selected), [selected])\n\n contextRef.current = {\n count,\n getQueryParams,\n getSelectedIds,\n selectAll,\n selected,\n selectedIDs,\n setSelection,\n toggleAll,\n totalDocs,\n }\n\n return <Context value={contextRef.current}>{children}</Context>\n}\n\nexport const useSelection = (): SelectionContext => use(Context)\n"],"names":["useSearchParams","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","parseSearchParams","useAuth","useListQuery","useLocale","SelectAllStatus","Context","count","undefined","getQueryParams","additionalParams","getSelectedIds","selectAll","selected","Map","selectedIDs","setSelection","id","toggleAll","totalDocs","reduceActiveSelections","ids","key","value","push","SelectionProvider","children","docs","contextRef","user","code","locale","setSelected","rows","forEach","set","setSelectAll","setCount","searchParams","query","allAvailable","_isLocked","_userEditing","doc","find","existingValue","get","isSelected","newMap","additionalWhereParams","where","params","not_equals","in","and","stringify","addQueryPrefix","some","all","size","_","length","newCount","current","useSelection"],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React, { createContext, useCallback } from 'react';
3
+ /**
4
+ * Properties specific to the versions view
5
+ */ // No req or importMap - those are augmented by handleServerFunctions
3
6
  export const ServerFunctionsContext = /*#__PURE__*/ createContext(undefined);
4
7
  export const useServerFunctions = ()=>{
5
8
  const context = React.use(ServerFunctionsContext);
@@ -34,9 +37,9 @@ export const ServerFunctionsProvider = ({ children, serverFunction })=>{
34
37
  }
35
38
  }
36
39
  } catch (_err) {
37
- console.error(_err) // eslint-disable-line no-console
38
- ;
40
+ console.error(_err);
39
41
  }
42
+ // eslint-disable-line no-console
40
43
  let error = `Error scheduling ${rest.type}`;
41
44
  if (rest.doc) {
42
45
  error += ` for document with ID ${rest.doc.value} in collection ${rest.doc.relationTo}`;
@@ -64,9 +67,9 @@ export const ServerFunctionsProvider = ({ children, serverFunction })=>{
64
67
  }
65
68
  }
66
69
  } catch (_err) {
67
- console.error(_err) // eslint-disable-line no-console
68
- ;
70
+ console.error(_err);
69
71
  }
72
+ // eslint-disable-line no-console
70
73
  return {
71
74
  state: null
72
75
  };
@@ -90,11 +93,11 @@ export const ServerFunctionsProvider = ({ children, serverFunction })=>{
90
93
  }
91
94
  }
92
95
  } catch (_err) {
93
- console.error(_err) // eslint-disable-line no-console
94
- ;
96
+ console.error(_err);
95
97
  }
98
+ }, // eslint-disable-line no-console
96
99
  // return { state: args.formState }
97
- }, [
100
+ [
98
101
  serverFunction
99
102
  ]);
100
103
  const renderDocument = useCallback(async (args)=>{
@@ -110,10 +113,10 @@ export const ServerFunctionsProvider = ({ children, serverFunction })=>{
110
113
  // TODO: infer this type when `strictNullChecks` is enabled
111
114
  return result;
112
115
  } catch (_err) {
113
- console.error(_err) // eslint-disable-line no-console
114
- ;
116
+ console.error(_err);
115
117
  }
116
- }, [
118
+ }, // eslint-disable-line no-console
119
+ [
117
120
  serverFunction
118
121
  ]);
119
122
  const copyDataFromLocale = useCallback(async (args)=>{
@@ -127,10 +130,10 @@ export const ServerFunctionsProvider = ({ children, serverFunction })=>{
127
130
  return result;
128
131
  }
129
132
  } catch (_err) {
130
- console.error(_err) // eslint-disable-line no-console
131
- ;
133
+ console.error(_err);
132
134
  }
133
- }, [
135
+ }, // eslint-disable-line no-console
136
+ [
134
137
  serverFunction
135
138
  ]);
136
139
  const getFolderResultsComponentAndData = useCallback(async (args)=>{
@@ -144,10 +147,10 @@ export const ServerFunctionsProvider = ({ children, serverFunction })=>{
144
147
  return result;
145
148
  }
146
149
  } catch (_err) {
147
- console.error(_err) // eslint-disable-line no-console
148
- ;
150
+ console.error(_err);
149
151
  }
150
- }, [
152
+ }, // eslint-disable-line no-console
153
+ [
151
154
  serverFunction
152
155
  ]);
153
156
  const _internal_renderField = useCallback(async (args)=>{
@@ -158,10 +161,10 @@ export const ServerFunctionsProvider = ({ children, serverFunction })=>{
158
161
  });
159
162
  return result;
160
163
  } catch (_err) {
161
- console.error(_err) // eslint-disable-line no-console
162
- ;
164
+ console.error(_err);
163
165
  }
164
- }, [
166
+ }, // eslint-disable-line no-console
167
+ [
165
168
  serverFunction
166
169
  ]);
167
170
  const slugify = useCallback(async (args)=>{
@@ -176,10 +179,10 @@ export const ServerFunctionsProvider = ({ children, serverFunction })=>{
176
179
  // TODO: infer this type when `strictNullChecks` is enabled
177
180
  return result;
178
181
  } catch (_err) {
179
- console.error(_err) // eslint-disable-line no-console
180
- ;
182
+ console.error(_err);
181
183
  }
182
- }, [
184
+ }, // eslint-disable-line no-console
185
+ [
183
186
  serverFunction
184
187
  ]);
185
188
  return /*#__PURE__*/ _jsx(ServerFunctionsContext, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/providers/ServerFunctions/index.tsx"],"sourcesContent":["import type {\n AdminViewServerPropsOnly,\n BuildFormStateArgs,\n BuildTableStateArgs,\n Data,\n DocumentPreferences,\n DocumentSlots,\n FormState,\n GetFolderResultsComponentAndDataArgs,\n Locale,\n Params,\n RenderDocumentVersionsProperties,\n ServerFunction,\n ServerFunctionClient,\n SlugifyServerFunctionArgs,\n} from 'payload'\nimport type { Slugify } from 'payload/shared'\n\nimport React, { createContext, useCallback } from 'react'\n\nimport type {\n RenderFieldServerFnArgs,\n RenderFieldServerFnReturnType,\n} from '../../forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js'\nimport type { buildFormStateHandler } from '../../utilities/buildFormState.js'\nimport type { buildTableStateHandler } from '../../utilities/buildTableState.js'\nimport type { CopyDataFromLocaleArgs } from '../../utilities/copyDataFromLocale.js'\nimport type { getFolderResultsComponentAndDataHandler } from '../../utilities/getFolderResultsComponentAndData.js'\nimport type {\n schedulePublishHandler,\n SchedulePublishHandlerArgs,\n} from '../../utilities/schedulePublishHandler.js'\n\ntype GetFormStateClient = (\n args: {\n signal?: AbortSignal\n } & Omit<BuildFormStateArgs, 'clientConfig' | 'req'>,\n) => ReturnType<typeof buildFormStateHandler>\n\ntype SchedulePublishClient = (\n args: {\n signal?: AbortSignal\n } & Omit<SchedulePublishHandlerArgs, 'clientConfig' | 'req'>,\n) => ReturnType<typeof schedulePublishHandler>\n\ntype GetTableStateClient = (\n args: {\n signal?: AbortSignal\n } & Omit<BuildTableStateArgs, 'clientConfig' | 'req'>,\n) => ReturnType<typeof buildTableStateHandler>\n\ntype SlugifyClient = (\n args: {\n signal?: AbortSignal\n } & Omit<SlugifyServerFunctionArgs, 'clientConfig' | 'req'>,\n) => ReturnType<Slugify>\n\nexport type RenderDocumentResult = {\n data: any\n Document: React.ReactNode\n preferences: DocumentPreferences\n}\n\ntype RenderDocumentBaseArgs = {\n collectionSlug: string\n disableActions?: boolean\n docID: number | string\n drawerSlug?: string\n initialData?: Data\n initialState?: FormState\n locale?: Locale\n overrideEntityVisibility?: boolean\n paramsOverride?: AdminViewServerPropsOnly['params']\n redirectAfterCreate?: boolean\n redirectAfterDelete: boolean\n redirectAfterDuplicate: boolean\n redirectAfterRestore?: boolean\n searchParams?: Params\n /**\n * Properties specific to the versions view\n */\n versions?: RenderDocumentVersionsProperties\n}\n\nexport type RenderDocumentServerFunction = ServerFunction<\n RenderDocumentBaseArgs,\n Promise<RenderDocumentResult>\n>\n\ntype RenderDocumentServerFunctionHookFn = (\n // No req or importMap - those are augmented by handleServerFunctions\n args: {\n signal?: AbortSignal\n } & RenderDocumentBaseArgs,\n) => Promise<RenderDocumentResult>\n\ntype CopyDataFromLocaleClient = (\n args: {\n signal?: AbortSignal\n } & Omit<CopyDataFromLocaleArgs, 'req'>,\n) => Promise<{ data: Data }>\n\ntype GetDocumentSlots = (args: {\n collectionSlug: string\n id?: number | string\n signal?: AbortSignal\n}) => Promise<DocumentSlots>\n\ntype GetFolderResultsComponentAndDataClient = (\n args: {\n signal?: AbortSignal\n } & Omit<GetFolderResultsComponentAndDataArgs, 'req'>,\n) => ReturnType<typeof getFolderResultsComponentAndDataHandler>\n\ntype RenderFieldClient = (args: RenderFieldServerFnArgs) => Promise<RenderFieldServerFnReturnType>\n\nexport type ServerFunctionsContextType = {\n _internal_renderField: RenderFieldClient\n copyDataFromLocale: CopyDataFromLocaleClient\n getDocumentSlots: GetDocumentSlots\n getFolderResultsComponentAndData: GetFolderResultsComponentAndDataClient\n getFormState: GetFormStateClient\n getTableState: GetTableStateClient\n renderDocument: RenderDocumentServerFunctionHookFn\n schedulePublish: SchedulePublishClient\n serverFunction: ServerFunctionClient\n slugify: SlugifyClient\n}\n\nexport const ServerFunctionsContext = createContext<ServerFunctionsContextType | undefined>(\n undefined,\n)\n\nexport const useServerFunctions = () => {\n const context = React.use(ServerFunctionsContext)\n if (context === undefined) {\n throw new Error('useServerFunctions must be used within a ServerFunctionsProvider')\n }\n return context\n}\n\nexport const ServerFunctionsProvider: React.FC<{\n children: React.ReactNode\n serverFunction: ServerFunctionClient\n}> = ({ children, serverFunction }) => {\n if (!serverFunction) {\n throw new Error('ServerFunctionsProvider requires a serverFunction prop')\n }\n\n const getDocumentSlots = useCallback<GetDocumentSlots>(\n async (args) =>\n await serverFunction({\n name: 'render-document-slots',\n args,\n }),\n [serverFunction],\n )\n\n const schedulePublish = useCallback<SchedulePublishClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args\n\n try {\n if (!remoteSignal?.aborted) {\n const result = (await serverFunction({\n name: 'schedule-publish',\n args: { ...rest },\n })) as Awaited<ReturnType<typeof schedulePublishHandler>> // TODO: infer this type when `strictNullChecks` is enabled\n\n if (!remoteSignal?.aborted) {\n return result\n }\n }\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n\n let error = `Error scheduling ${rest.type}`\n\n if (rest.doc) {\n error += ` for document with ID ${rest.doc.value} in collection ${rest.doc.relationTo}`\n }\n\n return { error }\n },\n [serverFunction],\n )\n\n const getFormState = useCallback<GetFormStateClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n\n try {\n if (!remoteSignal?.aborted) {\n const result = (await serverFunction({\n name: 'form-state',\n args: { fallbackLocale: false, ...rest },\n })) as Awaited<ReturnType<typeof buildFormStateHandler>> // TODO: infer this type when `strictNullChecks` is enabled\n\n if (!remoteSignal?.aborted) {\n return result\n }\n }\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n\n return { state: null }\n },\n [serverFunction],\n )\n\n const getTableState = useCallback<GetTableStateClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n\n try {\n if (!remoteSignal?.aborted) {\n const result = (await serverFunction({\n name: 'table-state',\n args: { fallbackLocale: false, ...rest },\n })) as Awaited<ReturnType<typeof buildTableStateHandler>> // TODO: infer this type when `strictNullChecks` is enabled\n\n if (!remoteSignal?.aborted) {\n return result\n }\n }\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n\n // return { state: args.formState }\n },\n [serverFunction],\n )\n\n const renderDocument = useCallback<RenderDocumentServerFunctionHookFn>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n try {\n const result = (await serverFunction({\n name: 'render-document',\n args: {\n fallbackLocale: false,\n ...rest,\n } as Parameters<RenderDocumentServerFunctionHookFn>[0],\n })) as Awaited<ReturnType<RenderDocumentServerFunctionHookFn>> // TODO: infer this type when `strictNullChecks` is enabled\n\n return result\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n },\n [serverFunction],\n )\n\n const copyDataFromLocale = useCallback<CopyDataFromLocaleClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n\n try {\n const result = (await serverFunction({\n name: 'copy-data-from-locale',\n args: rest,\n })) as { data: Data }\n\n if (!remoteSignal?.aborted) {\n return result\n }\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n },\n [serverFunction],\n )\n\n const getFolderResultsComponentAndData = useCallback<GetFolderResultsComponentAndDataClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n\n try {\n const result = (await serverFunction({\n name: 'get-folder-results-component-and-data',\n args: rest,\n })) as Awaited<ReturnType<typeof getFolderResultsComponentAndDataHandler>>\n\n if (!remoteSignal?.aborted) {\n return result\n }\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n },\n [serverFunction],\n )\n\n const _internal_renderField = useCallback<RenderFieldClient>(\n async (args) => {\n try {\n const result = (await serverFunction({\n name: 'render-field',\n args,\n })) as RenderFieldServerFnReturnType\n\n return result\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n },\n [serverFunction],\n )\n\n const slugify = useCallback<SlugifyClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n\n try {\n const result = (await serverFunction({\n name: 'slugify',\n args: { ...rest },\n })) as Awaited<ReturnType<Slugify>> // TODO: infer this type when `strictNullChecks` is enabled\n\n return result\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n },\n [serverFunction],\n )\n\n return (\n <ServerFunctionsContext\n value={{\n _internal_renderField,\n copyDataFromLocale,\n getDocumentSlots,\n getFolderResultsComponentAndData,\n getFormState,\n getTableState,\n renderDocument,\n schedulePublish,\n serverFunction,\n slugify,\n }}\n >\n {children}\n </ServerFunctionsContext>\n )\n}\n"],"names":["React","createContext","useCallback","ServerFunctionsContext","undefined","useServerFunctions","context","use","Error","ServerFunctionsProvider","children","serverFunction","getDocumentSlots","args","name","schedulePublish","signal","remoteSignal","rest","aborted","result","_err","console","error","type","doc","value","relationTo","getFormState","fallbackLocale","state","getTableState","renderDocument","copyDataFromLocale","getFolderResultsComponentAndData","_internal_renderField","slugify"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/providers/ServerFunctions/index.tsx"],"sourcesContent":["import type {\n AdminViewServerPropsOnly,\n BuildFormStateArgs,\n BuildTableStateArgs,\n Data,\n DocumentPreferences,\n DocumentSlots,\n FormState,\n GetFolderResultsComponentAndDataArgs,\n Locale,\n Params,\n RenderDocumentVersionsProperties,\n ServerFunction,\n ServerFunctionClient,\n SlugifyServerFunctionArgs,\n} from 'payload'\nimport type { Slugify } from 'payload/shared'\n\nimport React, { createContext, useCallback } from 'react'\n\nimport type {\n RenderFieldServerFnArgs,\n RenderFieldServerFnReturnType,\n} from '../../forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js'\nimport type { buildFormStateHandler } from '../../utilities/buildFormState.js'\nimport type { buildTableStateHandler } from '../../utilities/buildTableState.js'\nimport type { CopyDataFromLocaleArgs } from '../../utilities/copyDataFromLocale.js'\nimport type { getFolderResultsComponentAndDataHandler } from '../../utilities/getFolderResultsComponentAndData.js'\nimport type {\n schedulePublishHandler,\n SchedulePublishHandlerArgs,\n} from '../../utilities/schedulePublishHandler.js'\n\ntype GetFormStateClient = (\n args: {\n signal?: AbortSignal\n } & Omit<BuildFormStateArgs, 'clientConfig' | 'req'>,\n) => ReturnType<typeof buildFormStateHandler>\n\ntype SchedulePublishClient = (\n args: {\n signal?: AbortSignal\n } & Omit<SchedulePublishHandlerArgs, 'clientConfig' | 'req'>,\n) => ReturnType<typeof schedulePublishHandler>\n\ntype GetTableStateClient = (\n args: {\n signal?: AbortSignal\n } & Omit<BuildTableStateArgs, 'clientConfig' | 'req'>,\n) => ReturnType<typeof buildTableStateHandler>\n\ntype SlugifyClient = (\n args: {\n signal?: AbortSignal\n } & Omit<SlugifyServerFunctionArgs, 'clientConfig' | 'req'>,\n) => ReturnType<Slugify>\n\nexport type RenderDocumentResult = {\n data: any\n Document: React.ReactNode\n preferences: DocumentPreferences\n}\n\ntype RenderDocumentBaseArgs = {\n collectionSlug: string\n disableActions?: boolean\n docID: number | string\n drawerSlug?: string\n initialData?: Data\n initialState?: FormState\n locale?: Locale\n overrideEntityVisibility?: boolean\n paramsOverride?: AdminViewServerPropsOnly['params']\n redirectAfterCreate?: boolean\n redirectAfterDelete: boolean\n redirectAfterDuplicate: boolean\n redirectAfterRestore?: boolean\n searchParams?: Params\n /**\n * Properties specific to the versions view\n */\n versions?: RenderDocumentVersionsProperties\n}\n\nexport type RenderDocumentServerFunction = ServerFunction<\n RenderDocumentBaseArgs,\n Promise<RenderDocumentResult>\n>\n\ntype RenderDocumentServerFunctionHookFn = (\n // No req or importMap - those are augmented by handleServerFunctions\n args: {\n signal?: AbortSignal\n } & RenderDocumentBaseArgs,\n) => Promise<RenderDocumentResult>\n\ntype CopyDataFromLocaleClient = (\n args: {\n signal?: AbortSignal\n } & Omit<CopyDataFromLocaleArgs, 'req'>,\n) => Promise<{ data: Data }>\n\ntype GetDocumentSlots = (args: {\n collectionSlug: string\n id?: number | string\n signal?: AbortSignal\n}) => Promise<DocumentSlots>\n\ntype GetFolderResultsComponentAndDataClient = (\n args: {\n signal?: AbortSignal\n } & Omit<GetFolderResultsComponentAndDataArgs, 'req'>,\n) => ReturnType<typeof getFolderResultsComponentAndDataHandler>\n\ntype RenderFieldClient = (args: RenderFieldServerFnArgs) => Promise<RenderFieldServerFnReturnType>\n\nexport type ServerFunctionsContextType = {\n _internal_renderField: RenderFieldClient\n copyDataFromLocale: CopyDataFromLocaleClient\n getDocumentSlots: GetDocumentSlots\n getFolderResultsComponentAndData: GetFolderResultsComponentAndDataClient\n getFormState: GetFormStateClient\n getTableState: GetTableStateClient\n renderDocument: RenderDocumentServerFunctionHookFn\n schedulePublish: SchedulePublishClient\n serverFunction: ServerFunctionClient\n slugify: SlugifyClient\n}\n\nexport const ServerFunctionsContext = createContext<ServerFunctionsContextType | undefined>(\n undefined,\n)\n\nexport const useServerFunctions = () => {\n const context = React.use(ServerFunctionsContext)\n if (context === undefined) {\n throw new Error('useServerFunctions must be used within a ServerFunctionsProvider')\n }\n return context\n}\n\nexport const ServerFunctionsProvider: React.FC<{\n children: React.ReactNode\n serverFunction: ServerFunctionClient\n}> = ({ children, serverFunction }) => {\n if (!serverFunction) {\n throw new Error('ServerFunctionsProvider requires a serverFunction prop')\n }\n\n const getDocumentSlots = useCallback<GetDocumentSlots>(\n async (args) =>\n await serverFunction({\n name: 'render-document-slots',\n args,\n }),\n [serverFunction],\n )\n\n const schedulePublish = useCallback<SchedulePublishClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args\n\n try {\n if (!remoteSignal?.aborted) {\n const result = (await serverFunction({\n name: 'schedule-publish',\n args: { ...rest },\n })) as Awaited<ReturnType<typeof schedulePublishHandler>> // TODO: infer this type when `strictNullChecks` is enabled\n\n if (!remoteSignal?.aborted) {\n return result\n }\n }\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n\n let error = `Error scheduling ${rest.type}`\n\n if (rest.doc) {\n error += ` for document with ID ${rest.doc.value} in collection ${rest.doc.relationTo}`\n }\n\n return { error }\n },\n [serverFunction],\n )\n\n const getFormState = useCallback<GetFormStateClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n\n try {\n if (!remoteSignal?.aborted) {\n const result = (await serverFunction({\n name: 'form-state',\n args: { fallbackLocale: false, ...rest },\n })) as Awaited<ReturnType<typeof buildFormStateHandler>> // TODO: infer this type when `strictNullChecks` is enabled\n\n if (!remoteSignal?.aborted) {\n return result\n }\n }\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n\n return { state: null }\n },\n [serverFunction],\n )\n\n const getTableState = useCallback<GetTableStateClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n\n try {\n if (!remoteSignal?.aborted) {\n const result = (await serverFunction({\n name: 'table-state',\n args: { fallbackLocale: false, ...rest },\n })) as Awaited<ReturnType<typeof buildTableStateHandler>> // TODO: infer this type when `strictNullChecks` is enabled\n\n if (!remoteSignal?.aborted) {\n return result\n }\n }\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n\n // return { state: args.formState }\n },\n [serverFunction],\n )\n\n const renderDocument = useCallback<RenderDocumentServerFunctionHookFn>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n try {\n const result = (await serverFunction({\n name: 'render-document',\n args: {\n fallbackLocale: false,\n ...rest,\n } as Parameters<RenderDocumentServerFunctionHookFn>[0],\n })) as Awaited<ReturnType<RenderDocumentServerFunctionHookFn>> // TODO: infer this type when `strictNullChecks` is enabled\n\n return result\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n },\n [serverFunction],\n )\n\n const copyDataFromLocale = useCallback<CopyDataFromLocaleClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n\n try {\n const result = (await serverFunction({\n name: 'copy-data-from-locale',\n args: rest,\n })) as { data: Data }\n\n if (!remoteSignal?.aborted) {\n return result\n }\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n },\n [serverFunction],\n )\n\n const getFolderResultsComponentAndData = useCallback<GetFolderResultsComponentAndDataClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n\n try {\n const result = (await serverFunction({\n name: 'get-folder-results-component-and-data',\n args: rest,\n })) as Awaited<ReturnType<typeof getFolderResultsComponentAndDataHandler>>\n\n if (!remoteSignal?.aborted) {\n return result\n }\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n },\n [serverFunction],\n )\n\n const _internal_renderField = useCallback<RenderFieldClient>(\n async (args) => {\n try {\n const result = (await serverFunction({\n name: 'render-field',\n args,\n })) as RenderFieldServerFnReturnType\n\n return result\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n },\n [serverFunction],\n )\n\n const slugify = useCallback<SlugifyClient>(\n async (args) => {\n const { signal: remoteSignal, ...rest } = args || {}\n\n try {\n const result = (await serverFunction({\n name: 'slugify',\n args: { ...rest },\n })) as Awaited<ReturnType<Slugify>> // TODO: infer this type when `strictNullChecks` is enabled\n\n return result\n } catch (_err) {\n console.error(_err) // eslint-disable-line no-console\n }\n },\n [serverFunction],\n )\n\n return (\n <ServerFunctionsContext\n value={{\n _internal_renderField,\n copyDataFromLocale,\n getDocumentSlots,\n getFolderResultsComponentAndData,\n getFormState,\n getTableState,\n renderDocument,\n schedulePublish,\n serverFunction,\n slugify,\n }}\n >\n {children}\n </ServerFunctionsContext>\n )\n}\n"],"names":["React","createContext","useCallback","ServerFunctionsContext","undefined","useServerFunctions","context","use","Error","ServerFunctionsProvider","children","serverFunction","getDocumentSlots","args","name","schedulePublish","signal","remoteSignal","rest","aborted","result","_err","console","error","type","doc","value","relationTo","getFormState","fallbackLocale","state","getTableState","renderDocument","copyDataFromLocale","getFolderResultsComponentAndData","_internal_renderField","slugify"],"mappings":"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"}
@@ -2,7 +2,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { fieldIsHiddenOrDisabled, fieldIsID, fieldIsPresentationalOnly, flattenTopLevelFields } from 'payload/shared';
3
3
  import React from 'react';
4
4
  import { RenderServerComponent } from '../../../elements/RenderServerComponent/index.js';
5
- import { SortColumn } from '../../../exports/client/index.js';
5
+ import { SortColumn } from // eslint-disable-next-line payload/no-imports-from-exports-dir -- MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587
6
+ '../../../exports/client/index.js';
6
7
  import { filterFieldsWithPermissions } from './filterFieldsWithPermissions.js';
7
8
  import { isColumnActive } from './isColumnActive.js';
8
9
  import { renderCell } from './renderCell.js';
@@ -25,8 +26,8 @@ export const buildColumnState = (args)=>{
25
26
  i18n,
26
27
  keepPresentationalFields: true,
27
28
  moveSubFieldsToTop: true
28
- })// TODO: think of a way to avoid this additional flatten
29
- ;
29
+ });
30
+ // TODO: think of a way to avoid this additional flatten
30
31
  // place the `ID` field first, if it exists
31
32
  // do the same for the `useAsTitle` field with precedence over the `ID` field
32
33
  // then sort the rest of the fields based on the `defaultColumns` or `columns`
@@ -44,9 +45,9 @@ export const buildColumnState = (args)=>{
44
45
  if (sortTo) {
45
46
  // sort the fields to the order of `defaultColumns` or `columns`
46
47
  sortedFieldMap = sortFieldMap(sortedFieldMap, sortTo);
47
- _sortedFieldMap = sortFieldMap(_sortedFieldMap, sortTo) // TODO: think of a way to avoid this additional sort
48
- ;
48
+ _sortedFieldMap = sortFieldMap(_sortedFieldMap, sortTo);
49
49
  }
50
+ // TODO: think of a way to avoid this additional sort
50
51
  const activeColumnsIndices = [];
51
52
  const sorted = sortedFieldMap?.reduce((acc, clientField, colIndex)=>{
52
53
  if (fieldIsHiddenOrDisabled(clientField) && !fieldIsID(clientField)) {
@@ -59,9 +60,9 @@ export const buildColumnState = (args)=>{
59
60
  });
60
61
  const hasCustomCell = serverField?.admin && 'components' in serverField.admin && serverField.admin.components && 'Cell' in serverField.admin.components && serverField.admin.components.Cell;
61
62
  if (serverField && serverField.type === 'group' && !hasCustomCell) {
62
- return acc // skip any group without a custom cell
63
- ;
63
+ return acc;
64
64
  }
65
+ // skip any group without a custom cell
65
66
  const columnPref = columns?.find((preference)=>clientField && 'name' in clientField && preference.accessor === accessor);
66
67
  const isActive = isColumnActive({
67
68
  accessor,
@@ -74,8 +75,8 @@ export const buildColumnState = (args)=>{
74
75
  }
75
76
  let CustomLabel = undefined;
76
77
  if (dataType === 'monomorphic') {
77
- const CustomLabelToRender = serverField && 'admin' in serverField && 'components' in serverField.admin && 'Label' in serverField.admin.components && serverField.admin.components.Label !== undefined // let it return `null`
78
- ? serverField.admin.components.Label : undefined;
78
+ const CustomLabelToRender = serverField && 'admin' in serverField && 'components' in serverField.admin && 'Label' in serverField.admin.components && serverField.admin.components.Label !== undefined ? // let it return `null`
79
+ serverField.admin.components.Label : undefined;
79
80
  // TODO: customComponent will be optional in v4
80
81
  const clientProps = {
81
82
  field: clientField
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/providers/TableColumns/buildColumnState/index.tsx"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type {\n ClientComponentProps,\n ClientField,\n CollectionPreferences,\n CollectionSlug,\n Column,\n DefaultCellComponentProps,\n Document,\n Field,\n PaginatedDocs,\n Payload,\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedFieldsPermissions,\n ServerComponentProps,\n StaticLabel,\n ViewTypes,\n} from 'payload'\n\nimport {\n fieldIsHiddenOrDisabled,\n fieldIsID,\n fieldIsPresentationalOnly,\n flattenTopLevelFields,\n} from 'payload/shared'\nimport React from 'react'\n\nimport type { SortColumnProps } from '../../../elements/SortColumn/index.js'\n\nimport { RenderServerComponent } from '../../../elements/RenderServerComponent/index.js'\nimport {\n SortColumn,\n // eslint-disable-next-line payload/no-imports-from-exports-dir -- MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587\n} from '../../../exports/client/index.js'\nimport { filterFieldsWithPermissions } from './filterFieldsWithPermissions.js'\nimport { isColumnActive } from './isColumnActive.js'\nimport { renderCell } from './renderCell.js'\nimport { sortFieldMap } from './sortFieldMap.js'\n\nexport type BuildColumnStateArgs = {\n beforeRows?: Column[]\n clientFields: ClientField[]\n columns?: CollectionPreferences['columns']\n customCellProps: DefaultCellComponentProps['customCellProps']\n enableLinkedCell?: boolean\n enableRowSelections: boolean\n enableRowTypes?: boolean\n fieldPermissions?: SanitizedFieldsPermissions\n i18n: I18nClient\n payload: Payload\n req?: PayloadRequest\n serverFields: Field[]\n sortColumnProps?: Partial<SortColumnProps>\n useAsTitle: SanitizedCollectionConfig['admin']['useAsTitle']\n viewType?: ViewTypes\n} & (\n | {\n collectionSlug: CollectionSlug\n dataType: 'monomorphic'\n docs: PaginatedDocs['docs']\n }\n | {\n collectionSlug?: undefined\n dataType: 'polymorphic'\n docs: {\n relationTo: CollectionSlug\n value: Document\n }[]\n }\n)\n\nexport const buildColumnState = (args: BuildColumnStateArgs): Column[] => {\n const {\n beforeRows,\n clientFields,\n collectionSlug,\n columns,\n customCellProps,\n dataType,\n docs,\n enableLinkedCell = true,\n enableRowSelections,\n fieldPermissions,\n i18n,\n payload,\n req,\n serverFields,\n sortColumnProps,\n useAsTitle,\n viewType,\n } = args\n\n // clientFields contains the fake `id` column\n let sortedFieldMap = flattenTopLevelFields(\n filterFieldsWithPermissions({ fieldPermissions, fields: clientFields }),\n {\n i18n,\n keepPresentationalFields: true,\n moveSubFieldsToTop: true,\n },\n ) as ClientField[]\n\n let _sortedFieldMap = flattenTopLevelFields(\n filterFieldsWithPermissions({\n fieldPermissions,\n fields: serverFields,\n }),\n {\n i18n,\n keepPresentationalFields: true,\n moveSubFieldsToTop: true,\n },\n ) as Field[] // TODO: think of a way to avoid this additional flatten\n\n // place the `ID` field first, if it exists\n // do the same for the `useAsTitle` field with precedence over the `ID` field\n // then sort the rest of the fields based on the `defaultColumns` or `columns`\n const idFieldIndex = sortedFieldMap?.findIndex((field) => fieldIsID(field))\n\n if (idFieldIndex > -1) {\n const idField = sortedFieldMap.splice(idFieldIndex, 1)[0]\n sortedFieldMap.unshift(idField)\n }\n\n const useAsTitleFieldIndex = useAsTitle\n ? sortedFieldMap.findIndex((field) => 'name' in field && field.name === useAsTitle)\n : -1\n\n if (useAsTitleFieldIndex > -1) {\n const useAsTitleField = sortedFieldMap.splice(useAsTitleFieldIndex, 1)[0]\n sortedFieldMap.unshift(useAsTitleField)\n }\n\n const sortTo = columns\n\n if (sortTo) {\n // sort the fields to the order of `defaultColumns` or `columns`\n sortedFieldMap = sortFieldMap<ClientField>(sortedFieldMap, sortTo)\n _sortedFieldMap = sortFieldMap<Field>(_sortedFieldMap, sortTo) // TODO: think of a way to avoid this additional sort\n }\n\n const activeColumnsIndices = []\n\n const sorted: Column[] = sortedFieldMap?.reduce((acc, clientField, colIndex) => {\n if (fieldIsHiddenOrDisabled(clientField) && !fieldIsID(clientField)) {\n return acc\n }\n\n const accessor =\n (clientField as any).accessor ?? ('name' in clientField ? clientField.name : undefined)\n\n const serverField = _sortedFieldMap.find((f) => {\n const fAccessor = (f as any).accessor ?? ('name' in f ? f.name : undefined)\n return fAccessor === accessor\n })\n\n const hasCustomCell =\n serverField?.admin &&\n 'components' in serverField.admin &&\n serverField.admin.components &&\n 'Cell' in serverField.admin.components &&\n serverField.admin.components.Cell\n\n if (serverField && serverField.type === 'group' && !hasCustomCell) {\n return acc // skip any group without a custom cell\n }\n\n const columnPref = columns?.find(\n (preference) => clientField && 'name' in clientField && preference.accessor === accessor,\n )\n\n const isActive = isColumnActive({\n accessor,\n activeColumnsIndices,\n column: columnPref,\n columns,\n })\n\n if (isActive && !activeColumnsIndices.includes(colIndex)) {\n activeColumnsIndices.push(colIndex)\n }\n\n let CustomLabel = undefined\n\n if (dataType === 'monomorphic') {\n const CustomLabelToRender =\n serverField &&\n 'admin' in serverField &&\n 'components' in serverField.admin &&\n 'Label' in serverField.admin.components &&\n serverField.admin.components.Label !== undefined // let it return `null`\n ? serverField.admin.components.Label\n : undefined\n\n // TODO: customComponent will be optional in v4\n const clientProps: Omit<ClientComponentProps, 'customComponents'> = {\n field: clientField,\n }\n\n const customLabelServerProps: Pick<\n ServerComponentProps,\n 'clientField' | 'collectionSlug' | 'field' | 'i18n' | 'payload'\n > = {\n clientField,\n collectionSlug,\n field: serverField,\n i18n,\n payload,\n }\n\n CustomLabel = CustomLabelToRender\n ? RenderServerComponent({\n clientProps,\n Component: CustomLabelToRender,\n importMap: payload.importMap,\n serverProps: customLabelServerProps,\n })\n : undefined\n }\n\n const fieldAffectsDataSubFields =\n clientField &&\n clientField.type &&\n (clientField.type === 'array' ||\n clientField.type === 'group' ||\n clientField.type === 'blocks')\n\n const label =\n clientField && 'labelWithPrefix' in clientField && clientField.labelWithPrefix !== undefined\n ? clientField.labelWithPrefix\n : 'label' in clientField\n ? clientField.label\n : undefined\n\n // Convert accessor to dot notation specifically for SortColumn sorting behavior\n const dotAccessor = accessor?.replace(/-/g, '.')\n\n const Heading = (\n <SortColumn\n disable={fieldAffectsDataSubFields || fieldIsPresentationalOnly(clientField) || undefined}\n Label={CustomLabel}\n label={label as StaticLabel}\n name={dotAccessor}\n {...(sortColumnProps || {})}\n />\n )\n\n const column: Column = {\n accessor,\n active: isActive,\n CustomLabel,\n field: clientField,\n Heading,\n renderedCells: isActive\n ? docs.map((doc, rowIndex) => {\n return renderCell({\n clientField,\n collectionSlug: dataType === 'monomorphic' ? collectionSlug : doc.relationTo,\n columnIndex: colIndex,\n customCellProps,\n doc: dataType === 'monomorphic' ? doc : doc.value,\n enableRowSelections,\n i18n,\n isLinkedColumn: enableLinkedCell && colIndex === activeColumnsIndices[0],\n payload,\n req,\n rowIndex,\n serverField,\n viewType,\n })\n })\n : [],\n }\n\n acc.push(column)\n\n return acc\n }, [])\n\n if (beforeRows) {\n sorted.unshift(...beforeRows)\n }\n\n return sorted\n}\n"],"names":["fieldIsHiddenOrDisabled","fieldIsID","fieldIsPresentationalOnly","flattenTopLevelFields","React","RenderServerComponent","SortColumn","filterFieldsWithPermissions","isColumnActive","renderCell","sortFieldMap","buildColumnState","args","beforeRows","clientFields","collectionSlug","columns","customCellProps","dataType","docs","enableLinkedCell","enableRowSelections","fieldPermissions","i18n","payload","req","serverFields","sortColumnProps","useAsTitle","viewType","sortedFieldMap","fields","keepPresentationalFields","moveSubFieldsToTop","_sortedFieldMap","idFieldIndex","findIndex","field","idField","splice","unshift","useAsTitleFieldIndex","name","useAsTitleField","sortTo","activeColumnsIndices","sorted","reduce","acc","clientField","colIndex","accessor","undefined","serverField","find","f","fAccessor","hasCustomCell","admin","components","Cell","type","columnPref","preference","isActive","column","includes","push","CustomLabel","CustomLabelToRender","Label","clientProps","customLabelServerProps","Component","importMap","serverProps","fieldAffectsDataSubFields","label","labelWithPrefix","dotAccessor","replace","Heading","disable","active","renderedCells","map","doc","rowIndex","relationTo","columnIndex","value","isLinkedColumn"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/providers/TableColumns/buildColumnState/index.tsx"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type {\n ClientComponentProps,\n ClientField,\n CollectionPreferences,\n CollectionSlug,\n Column,\n DefaultCellComponentProps,\n Document,\n Field,\n PaginatedDocs,\n Payload,\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedFieldsPermissions,\n ServerComponentProps,\n StaticLabel,\n ViewTypes,\n} from 'payload'\n\nimport {\n fieldIsHiddenOrDisabled,\n fieldIsID,\n fieldIsPresentationalOnly,\n flattenTopLevelFields,\n} from 'payload/shared'\nimport React from 'react'\n\nimport type { SortColumnProps } from '../../../elements/SortColumn/index.js'\n\nimport { RenderServerComponent } from '../../../elements/RenderServerComponent/index.js'\nimport {\n SortColumn,\n // eslint-disable-next-line payload/no-imports-from-exports-dir -- MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587\n} from '../../../exports/client/index.js'\nimport { filterFieldsWithPermissions } from './filterFieldsWithPermissions.js'\nimport { isColumnActive } from './isColumnActive.js'\nimport { renderCell } from './renderCell.js'\nimport { sortFieldMap } from './sortFieldMap.js'\n\nexport type BuildColumnStateArgs = {\n beforeRows?: Column[]\n clientFields: ClientField[]\n columns?: CollectionPreferences['columns']\n customCellProps: DefaultCellComponentProps['customCellProps']\n enableLinkedCell?: boolean\n enableRowSelections: boolean\n enableRowTypes?: boolean\n fieldPermissions?: SanitizedFieldsPermissions\n i18n: I18nClient\n payload: Payload\n req?: PayloadRequest\n serverFields: Field[]\n sortColumnProps?: Partial<SortColumnProps>\n useAsTitle: SanitizedCollectionConfig['admin']['useAsTitle']\n viewType?: ViewTypes\n} & (\n | {\n collectionSlug: CollectionSlug\n dataType: 'monomorphic'\n docs: PaginatedDocs['docs']\n }\n | {\n collectionSlug?: undefined\n dataType: 'polymorphic'\n docs: {\n relationTo: CollectionSlug\n value: Document\n }[]\n }\n)\n\nexport const buildColumnState = (args: BuildColumnStateArgs): Column[] => {\n const {\n beforeRows,\n clientFields,\n collectionSlug,\n columns,\n customCellProps,\n dataType,\n docs,\n enableLinkedCell = true,\n enableRowSelections,\n fieldPermissions,\n i18n,\n payload,\n req,\n serverFields,\n sortColumnProps,\n useAsTitle,\n viewType,\n } = args\n\n // clientFields contains the fake `id` column\n let sortedFieldMap = flattenTopLevelFields(\n filterFieldsWithPermissions({ fieldPermissions, fields: clientFields }),\n {\n i18n,\n keepPresentationalFields: true,\n moveSubFieldsToTop: true,\n },\n ) as ClientField[]\n\n let _sortedFieldMap = flattenTopLevelFields(\n filterFieldsWithPermissions({\n fieldPermissions,\n fields: serverFields,\n }),\n {\n i18n,\n keepPresentationalFields: true,\n moveSubFieldsToTop: true,\n },\n ) as Field[] // TODO: think of a way to avoid this additional flatten\n\n // place the `ID` field first, if it exists\n // do the same for the `useAsTitle` field with precedence over the `ID` field\n // then sort the rest of the fields based on the `defaultColumns` or `columns`\n const idFieldIndex = sortedFieldMap?.findIndex((field) => fieldIsID(field))\n\n if (idFieldIndex > -1) {\n const idField = sortedFieldMap.splice(idFieldIndex, 1)[0]\n sortedFieldMap.unshift(idField)\n }\n\n const useAsTitleFieldIndex = useAsTitle\n ? sortedFieldMap.findIndex((field) => 'name' in field && field.name === useAsTitle)\n : -1\n\n if (useAsTitleFieldIndex > -1) {\n const useAsTitleField = sortedFieldMap.splice(useAsTitleFieldIndex, 1)[0]\n sortedFieldMap.unshift(useAsTitleField)\n }\n\n const sortTo = columns\n\n if (sortTo) {\n // sort the fields to the order of `defaultColumns` or `columns`\n sortedFieldMap = sortFieldMap<ClientField>(sortedFieldMap, sortTo)\n _sortedFieldMap = sortFieldMap<Field>(_sortedFieldMap, sortTo) // TODO: think of a way to avoid this additional sort\n }\n\n const activeColumnsIndices = []\n\n const sorted: Column[] = sortedFieldMap?.reduce((acc, clientField, colIndex) => {\n if (fieldIsHiddenOrDisabled(clientField) && !fieldIsID(clientField)) {\n return acc\n }\n\n const accessor =\n (clientField as any).accessor ?? ('name' in clientField ? clientField.name : undefined)\n\n const serverField = _sortedFieldMap.find((f) => {\n const fAccessor = (f as any).accessor ?? ('name' in f ? f.name : undefined)\n return fAccessor === accessor\n })\n\n const hasCustomCell =\n serverField?.admin &&\n 'components' in serverField.admin &&\n serverField.admin.components &&\n 'Cell' in serverField.admin.components &&\n serverField.admin.components.Cell\n\n if (serverField && serverField.type === 'group' && !hasCustomCell) {\n return acc // skip any group without a custom cell\n }\n\n const columnPref = columns?.find(\n (preference) => clientField && 'name' in clientField && preference.accessor === accessor,\n )\n\n const isActive = isColumnActive({\n accessor,\n activeColumnsIndices,\n column: columnPref,\n columns,\n })\n\n if (isActive && !activeColumnsIndices.includes(colIndex)) {\n activeColumnsIndices.push(colIndex)\n }\n\n let CustomLabel = undefined\n\n if (dataType === 'monomorphic') {\n const CustomLabelToRender =\n serverField &&\n 'admin' in serverField &&\n 'components' in serverField.admin &&\n 'Label' in serverField.admin.components &&\n serverField.admin.components.Label !== undefined // let it return `null`\n ? serverField.admin.components.Label\n : undefined\n\n // TODO: customComponent will be optional in v4\n const clientProps: Omit<ClientComponentProps, 'customComponents'> = {\n field: clientField,\n }\n\n const customLabelServerProps: Pick<\n ServerComponentProps,\n 'clientField' | 'collectionSlug' | 'field' | 'i18n' | 'payload'\n > = {\n clientField,\n collectionSlug,\n field: serverField,\n i18n,\n payload,\n }\n\n CustomLabel = CustomLabelToRender\n ? RenderServerComponent({\n clientProps,\n Component: CustomLabelToRender,\n importMap: payload.importMap,\n serverProps: customLabelServerProps,\n })\n : undefined\n }\n\n const fieldAffectsDataSubFields =\n clientField &&\n clientField.type &&\n (clientField.type === 'array' ||\n clientField.type === 'group' ||\n clientField.type === 'blocks')\n\n const label =\n clientField && 'labelWithPrefix' in clientField && clientField.labelWithPrefix !== undefined\n ? clientField.labelWithPrefix\n : 'label' in clientField\n ? clientField.label\n : undefined\n\n // Convert accessor to dot notation specifically for SortColumn sorting behavior\n const dotAccessor = accessor?.replace(/-/g, '.')\n\n const Heading = (\n <SortColumn\n disable={fieldAffectsDataSubFields || fieldIsPresentationalOnly(clientField) || undefined}\n Label={CustomLabel}\n label={label as StaticLabel}\n name={dotAccessor}\n {...(sortColumnProps || {})}\n />\n )\n\n const column: Column = {\n accessor,\n active: isActive,\n CustomLabel,\n field: clientField,\n Heading,\n renderedCells: isActive\n ? docs.map((doc, rowIndex) => {\n return renderCell({\n clientField,\n collectionSlug: dataType === 'monomorphic' ? collectionSlug : doc.relationTo,\n columnIndex: colIndex,\n customCellProps,\n doc: dataType === 'monomorphic' ? doc : doc.value,\n enableRowSelections,\n i18n,\n isLinkedColumn: enableLinkedCell && colIndex === activeColumnsIndices[0],\n payload,\n req,\n rowIndex,\n serverField,\n viewType,\n })\n })\n : [],\n }\n\n acc.push(column)\n\n return acc\n }, [])\n\n if (beforeRows) {\n sorted.unshift(...beforeRows)\n }\n\n return sorted\n}\n"],"names":["fieldIsHiddenOrDisabled","fieldIsID","fieldIsPresentationalOnly","flattenTopLevelFields","React","RenderServerComponent","SortColumn","filterFieldsWithPermissions","isColumnActive","renderCell","sortFieldMap","buildColumnState","args","beforeRows","clientFields","collectionSlug","columns","customCellProps","dataType","docs","enableLinkedCell","enableRowSelections","fieldPermissions","i18n","payload","req","serverFields","sortColumnProps","useAsTitle","viewType","sortedFieldMap","fields","keepPresentationalFields","moveSubFieldsToTop","_sortedFieldMap","idFieldIndex","findIndex","field","idField","splice","unshift","useAsTitleFieldIndex","name","useAsTitleField","sortTo","activeColumnsIndices","sorted","reduce","acc","clientField","colIndex","accessor","undefined","serverField","find","f","fAccessor","hasCustomCell","admin","components","Cell","type","columnPref","preference","isActive","column","includes","push","CustomLabel","CustomLabelToRender","Label","clientProps","customLabelServerProps","Component","importMap","serverProps","fieldAffectsDataSubFields","label","labelWithPrefix","dotAccessor","replace","Heading","disable","active","renderedCells","map","doc","rowIndex","relationTo","columnIndex","value","isLinkedColumn"],"mappings":"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"}
@@ -3,7 +3,8 @@ import { MissingEditorProp } from 'payload';
3
3
  import { formatAdminURL } from 'payload/shared';
4
4
  import { RenderCustomComponent } from '../../../elements/RenderCustomComponent/index.js';
5
5
  import { RenderServerComponent } from '../../../elements/RenderServerComponent/index.js';
6
- import { DefaultCell, RenderDefaultCell } from '../../../exports/client/index.js';
6
+ import { DefaultCell, RenderDefaultCell } from // eslint-disable-next-line payload/no-imports-from-exports-dir -- MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587
7
+ '../../../exports/client/index.js';
7
8
  import { hasOptionLabelJSXElement } from '../../../utilities/hasOptionLabelJSXElement.js';
8
9
  import { findValueFromPath } from './findValueFromPath.js';
9
10
  export function renderCell({ clientField, collectionSlug, columnIndex, customCellProps, doc, enableRowSelections, i18n, isLinkedColumn, payload, req, rowIndex, serverField, viewType }) {
@@ -95,9 +96,9 @@ export function renderCell({ clientField, collectionSlug, columnIndex, customCel
95
96
  let CustomCell = null;
96
97
  if (serverField?.type === 'richText') {
97
98
  if (!serverField?.editor) {
98
- throw new MissingEditorProp(serverField) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
99
- ;
99
+ throw new MissingEditorProp(serverField);
100
100
  }
101
+ // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
101
102
  if (typeof serverField?.editor === 'function') {
102
103
  throw new Error('Attempted to access unsanitized rich text editor.');
103
104
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/providers/TableColumns/buildColumnState/renderCell.tsx"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type {\n ClientField,\n DefaultCellComponentProps,\n DefaultServerCellComponentProps,\n Document,\n Field,\n Payload,\n PayloadRequest,\n ViewTypes,\n} from 'payload'\n\nimport { MissingEditorProp } from 'payload'\nimport { formatAdminURL } from 'payload/shared'\n\nimport { RenderCustomComponent } from '../../../elements/RenderCustomComponent/index.js'\nimport { RenderServerComponent } from '../../../elements/RenderServerComponent/index.js'\nimport {\n DefaultCell,\n RenderDefaultCell,\n // eslint-disable-next-line payload/no-imports-from-exports-dir -- MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587\n} from '../../../exports/client/index.js'\nimport { hasOptionLabelJSXElement } from '../../../utilities/hasOptionLabelJSXElement.js'\nimport { findValueFromPath } from './findValueFromPath.js'\n\ntype RenderCellArgs = {\n readonly clientField: ClientField\n readonly collectionSlug: string\n readonly columnIndex: number\n readonly customCellProps: DefaultCellComponentProps['customCellProps']\n readonly doc: Document\n readonly enableRowSelections: boolean\n readonly i18n: I18nClient\n readonly isLinkedColumn: boolean\n readonly payload: Payload\n readonly req?: PayloadRequest\n readonly rowIndex: number\n readonly serverField: Field\n readonly viewType?: ViewTypes\n}\nexport function renderCell({\n clientField,\n collectionSlug,\n columnIndex,\n customCellProps,\n doc,\n enableRowSelections,\n i18n,\n isLinkedColumn,\n payload,\n req,\n rowIndex,\n serverField,\n viewType,\n}: RenderCellArgs) {\n const baseCellClientProps: DefaultCellComponentProps = {\n cellData: undefined,\n collectionSlug,\n customCellProps,\n field: clientField,\n rowData: undefined,\n viewType,\n }\n\n const accessor: string | undefined =\n ('accessor' in clientField ? (clientField.accessor as string) : undefined) ??\n ('name' in clientField ? clientField.name : undefined)\n\n // Check if there's a custom formatDocURL function for this linked column\n let shouldLink = isLinkedColumn\n let customLinkURL: string | undefined\n\n if (isLinkedColumn && req) {\n const collectionConfig = payload.collections[collectionSlug]?.config\n const formatDocURL = collectionConfig?.admin?.formatDocURL\n\n if (typeof formatDocURL === 'function') {\n // Generate the default URL that would normally be used\n const adminRoute = req.payload.config.routes?.admin || '/admin'\n const defaultURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}${viewType === 'trash' ? '/trash' : ''}/${encodeURIComponent(String(doc.id))}`,\n })\n\n const customURL = formatDocURL({\n collectionSlug,\n defaultURL,\n doc,\n req,\n viewType,\n })\n\n if (customURL === null) {\n // formatDocURL returned null = disable linking entirely\n shouldLink = false\n } else if (typeof customURL === 'string') {\n // formatDocURL returned a string = use custom URL\n shouldLink = true\n customLinkURL = customURL\n } else {\n // formatDocURL returned unexpected type = disable linking for safety\n shouldLink = false\n }\n }\n }\n\n // For _status field, use _displayStatus if available (for showing \"changed\" status in list view)\n const cellData =\n 'name' in clientField && accessor === '_status' && '_displayStatus' in doc\n ? doc._displayStatus\n : 'name' in clientField\n ? findValueFromPath(doc, accessor)\n : undefined\n\n // For _status field, add 'changed' option for display purposes\n // The 'changed' status is computed at runtime\n let enrichedClientField = clientField\n if ('name' in clientField && accessor === '_status' && clientField.type === 'select') {\n const hasChangedOption = clientField.options?.some(\n (opt) => (typeof opt === 'object' ? opt.value : opt) === 'changed',\n )\n if (!hasChangedOption) {\n enrichedClientField = {\n ...clientField,\n options: [\n ...(clientField.options || []),\n {\n label: i18n.t('version:draftHasPublishedVersion'),\n value: 'changed',\n },\n ],\n }\n }\n }\n\n const cellClientProps: DefaultCellComponentProps = {\n ...baseCellClientProps,\n cellData,\n field: enrichedClientField,\n link: shouldLink,\n linkURL: customLinkURL,\n rowData: doc,\n }\n\n const cellServerProps: DefaultServerCellComponentProps = {\n cellData: cellClientProps.cellData,\n className: baseCellClientProps.className,\n collectionConfig: payload.collections[collectionSlug].config,\n collectionSlug,\n columnIndex,\n customCellProps: baseCellClientProps.customCellProps,\n field: serverField,\n i18n,\n link: shouldLink,\n linkURL: customLinkURL,\n onClick: baseCellClientProps.onClick,\n payload,\n rowData: doc,\n }\n\n let CustomCell = null\n\n if (serverField?.type === 'richText') {\n if (!serverField?.editor) {\n throw new MissingEditorProp(serverField) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof serverField?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n if (!serverField.admin) {\n serverField.admin = {}\n }\n\n if (!serverField.admin.components) {\n serverField.admin.components = {}\n }\n\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: serverField.editor.CellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else {\n const CustomCellComponent = serverField?.admin?.components?.Cell\n\n if (CustomCellComponent) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: CustomCellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else if (\n cellClientProps.cellData &&\n cellClientProps.field &&\n hasOptionLabelJSXElement(cellClientProps)\n ) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: DefaultCell,\n importMap: payload.importMap,\n })\n } else {\n const CustomCellComponent = serverField?.admin?.components?.Cell\n\n if (CustomCellComponent) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: CustomCellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else {\n CustomCell = undefined\n }\n }\n }\n\n return (\n <RenderCustomComponent\n CustomComponent={CustomCell}\n Fallback={\n <RenderDefaultCell\n clientProps={cellClientProps}\n columnIndex={columnIndex}\n enableRowSelections={enableRowSelections}\n isLinkedColumn={isLinkedColumn}\n />\n }\n key={`${rowIndex}-${columnIndex}`}\n />\n )\n}\n"],"names":["MissingEditorProp","formatAdminURL","RenderCustomComponent","RenderServerComponent","DefaultCell","RenderDefaultCell","hasOptionLabelJSXElement","findValueFromPath","renderCell","clientField","collectionSlug","columnIndex","customCellProps","doc","enableRowSelections","i18n","isLinkedColumn","payload","req","rowIndex","serverField","viewType","baseCellClientProps","cellData","undefined","field","rowData","accessor","name","shouldLink","customLinkURL","collectionConfig","collections","config","formatDocURL","admin","adminRoute","routes","defaultURL","path","encodeURIComponent","String","id","customURL","_displayStatus","enrichedClientField","type","hasChangedOption","options","some","opt","value","label","t","cellClientProps","link","linkURL","cellServerProps","className","onClick","CustomCell","editor","Error","components","clientProps","Component","CellComponent","importMap","serverProps","CustomCellComponent","Cell","CustomComponent","Fallback"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/providers/TableColumns/buildColumnState/renderCell.tsx"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type {\n ClientField,\n DefaultCellComponentProps,\n DefaultServerCellComponentProps,\n Document,\n Field,\n Payload,\n PayloadRequest,\n ViewTypes,\n} from 'payload'\n\nimport { MissingEditorProp } from 'payload'\nimport { formatAdminURL } from 'payload/shared'\n\nimport { RenderCustomComponent } from '../../../elements/RenderCustomComponent/index.js'\nimport { RenderServerComponent } from '../../../elements/RenderServerComponent/index.js'\nimport {\n DefaultCell,\n RenderDefaultCell,\n // eslint-disable-next-line payload/no-imports-from-exports-dir -- MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587\n} from '../../../exports/client/index.js'\nimport { hasOptionLabelJSXElement } from '../../../utilities/hasOptionLabelJSXElement.js'\nimport { findValueFromPath } from './findValueFromPath.js'\n\ntype RenderCellArgs = {\n readonly clientField: ClientField\n readonly collectionSlug: string\n readonly columnIndex: number\n readonly customCellProps: DefaultCellComponentProps['customCellProps']\n readonly doc: Document\n readonly enableRowSelections: boolean\n readonly i18n: I18nClient\n readonly isLinkedColumn: boolean\n readonly payload: Payload\n readonly req?: PayloadRequest\n readonly rowIndex: number\n readonly serverField: Field\n readonly viewType?: ViewTypes\n}\nexport function renderCell({\n clientField,\n collectionSlug,\n columnIndex,\n customCellProps,\n doc,\n enableRowSelections,\n i18n,\n isLinkedColumn,\n payload,\n req,\n rowIndex,\n serverField,\n viewType,\n}: RenderCellArgs) {\n const baseCellClientProps: DefaultCellComponentProps = {\n cellData: undefined,\n collectionSlug,\n customCellProps,\n field: clientField,\n rowData: undefined,\n viewType,\n }\n\n const accessor: string | undefined =\n ('accessor' in clientField ? (clientField.accessor as string) : undefined) ??\n ('name' in clientField ? clientField.name : undefined)\n\n // Check if there's a custom formatDocURL function for this linked column\n let shouldLink = isLinkedColumn\n let customLinkURL: string | undefined\n\n if (isLinkedColumn && req) {\n const collectionConfig = payload.collections[collectionSlug]?.config\n const formatDocURL = collectionConfig?.admin?.formatDocURL\n\n if (typeof formatDocURL === 'function') {\n // Generate the default URL that would normally be used\n const adminRoute = req.payload.config.routes?.admin || '/admin'\n const defaultURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}${viewType === 'trash' ? '/trash' : ''}/${encodeURIComponent(String(doc.id))}`,\n })\n\n const customURL = formatDocURL({\n collectionSlug,\n defaultURL,\n doc,\n req,\n viewType,\n })\n\n if (customURL === null) {\n // formatDocURL returned null = disable linking entirely\n shouldLink = false\n } else if (typeof customURL === 'string') {\n // formatDocURL returned a string = use custom URL\n shouldLink = true\n customLinkURL = customURL\n } else {\n // formatDocURL returned unexpected type = disable linking for safety\n shouldLink = false\n }\n }\n }\n\n // For _status field, use _displayStatus if available (for showing \"changed\" status in list view)\n const cellData =\n 'name' in clientField && accessor === '_status' && '_displayStatus' in doc\n ? doc._displayStatus\n : 'name' in clientField\n ? findValueFromPath(doc, accessor)\n : undefined\n\n // For _status field, add 'changed' option for display purposes\n // The 'changed' status is computed at runtime\n let enrichedClientField = clientField\n if ('name' in clientField && accessor === '_status' && clientField.type === 'select') {\n const hasChangedOption = clientField.options?.some(\n (opt) => (typeof opt === 'object' ? opt.value : opt) === 'changed',\n )\n if (!hasChangedOption) {\n enrichedClientField = {\n ...clientField,\n options: [\n ...(clientField.options || []),\n {\n label: i18n.t('version:draftHasPublishedVersion'),\n value: 'changed',\n },\n ],\n }\n }\n }\n\n const cellClientProps: DefaultCellComponentProps = {\n ...baseCellClientProps,\n cellData,\n field: enrichedClientField,\n link: shouldLink,\n linkURL: customLinkURL,\n rowData: doc,\n }\n\n const cellServerProps: DefaultServerCellComponentProps = {\n cellData: cellClientProps.cellData,\n className: baseCellClientProps.className,\n collectionConfig: payload.collections[collectionSlug].config,\n collectionSlug,\n columnIndex,\n customCellProps: baseCellClientProps.customCellProps,\n field: serverField,\n i18n,\n link: shouldLink,\n linkURL: customLinkURL,\n onClick: baseCellClientProps.onClick,\n payload,\n rowData: doc,\n }\n\n let CustomCell = null\n\n if (serverField?.type === 'richText') {\n if (!serverField?.editor) {\n throw new MissingEditorProp(serverField) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof serverField?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n if (!serverField.admin) {\n serverField.admin = {}\n }\n\n if (!serverField.admin.components) {\n serverField.admin.components = {}\n }\n\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: serverField.editor.CellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else {\n const CustomCellComponent = serverField?.admin?.components?.Cell\n\n if (CustomCellComponent) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: CustomCellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else if (\n cellClientProps.cellData &&\n cellClientProps.field &&\n hasOptionLabelJSXElement(cellClientProps)\n ) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: DefaultCell,\n importMap: payload.importMap,\n })\n } else {\n const CustomCellComponent = serverField?.admin?.components?.Cell\n\n if (CustomCellComponent) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: CustomCellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else {\n CustomCell = undefined\n }\n }\n }\n\n return (\n <RenderCustomComponent\n CustomComponent={CustomCell}\n Fallback={\n <RenderDefaultCell\n clientProps={cellClientProps}\n columnIndex={columnIndex}\n enableRowSelections={enableRowSelections}\n isLinkedColumn={isLinkedColumn}\n />\n }\n key={`${rowIndex}-${columnIndex}`}\n />\n )\n}\n"],"names":["MissingEditorProp","formatAdminURL","RenderCustomComponent","RenderServerComponent","DefaultCell","RenderDefaultCell","hasOptionLabelJSXElement","findValueFromPath","renderCell","clientField","collectionSlug","columnIndex","customCellProps","doc","enableRowSelections","i18n","isLinkedColumn","payload","req","rowIndex","serverField","viewType","baseCellClientProps","cellData","undefined","field","rowData","accessor","name","shouldLink","customLinkURL","collectionConfig","collections","config","formatDocURL","admin","adminRoute","routes","defaultURL","path","encodeURIComponent","String","id","customURL","_displayStatus","enrichedClientField","type","hasChangedOption","options","some","opt","value","label","t","cellClientProps","link","linkURL","cellServerProps","className","onClick","CustomCell","editor","Error","components","clientProps","Component","CellComponent","importMap","serverProps","CustomCellComponent","Cell","CustomComponent","Fallback"],"mappings":"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"}
@@ -1,3 +1,19 @@
1
- export { };
1
+ export { }; /**
2
+ * @deprecated
3
+ */ /**
4
+ * @deprecated
5
+ */ /**
6
+ * @deprecated
7
+ */ /**
8
+ * @deprecated
9
+ */ /**
10
+ * @deprecated
11
+ */ /**
12
+ * @deprecated
13
+ */ /**
14
+ * @deprecated
15
+ */ /**
16
+ * @deprecated
17
+ */
2
18
 
3
19
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/providers/TableColumns/types.ts"],"sourcesContent":["import type { CollectionPreferences, Column } from 'payload'\n\nimport type { SortColumnProps } from '../../elements/SortColumn/index.js'\n\nexport interface ITableColumns {\n columns: Column[]\n LinkedCellOverride?: React.ReactNode\n moveColumn: (args: { fromIndex: number; toIndex: number }) => Promise<void>\n resetColumnsState: () => Promise<void>\n setActiveColumns: (columns: string[]) => Promise<void>\n toggleColumn: (column: string) => Promise<void>\n}\n\nexport type TableColumnsProviderProps = {\n readonly children: React.ReactNode\n readonly collectionSlug: string | string[]\n readonly columnState: Column[]\n /**\n * @deprecated\n */\n readonly docs?: any[]\n /**\n * @deprecated\n */\n readonly enableRowSelections?: boolean\n readonly LinkedCellOverride?: React.ReactNode\n /**\n * @deprecated\n */\n readonly listPreferences?: CollectionPreferences\n /**\n * @deprecated\n */\n readonly preferenceKey?: string\n /**\n * @deprecated\n */\n readonly renderRowTypes?: boolean\n /**\n * @deprecated\n */\n readonly setTable?: (Table: React.ReactNode) => void\n /**\n * @deprecated\n */\n readonly sortColumnProps?: Partial<SortColumnProps>\n /**\n * @deprecated\n */\n readonly tableAppearance?: 'condensed' | 'default'\n}\n"],"names":[],"mappings":"AAaA,WAqCC"}
1
+ {"version":3,"sources":["../../../src/providers/TableColumns/types.ts"],"sourcesContent":["import type { CollectionPreferences, Column } from 'payload'\n\nimport type { SortColumnProps } from '../../elements/SortColumn/index.js'\n\nexport interface ITableColumns {\n columns: Column[]\n LinkedCellOverride?: React.ReactNode\n moveColumn: (args: { fromIndex: number; toIndex: number }) => Promise<void>\n resetColumnsState: () => Promise<void>\n setActiveColumns: (columns: string[]) => Promise<void>\n toggleColumn: (column: string) => Promise<void>\n}\n\nexport type TableColumnsProviderProps = {\n readonly children: React.ReactNode\n readonly collectionSlug: string | string[]\n readonly columnState: Column[]\n /**\n * @deprecated\n */\n readonly docs?: any[]\n /**\n * @deprecated\n */\n readonly enableRowSelections?: boolean\n readonly LinkedCellOverride?: React.ReactNode\n /**\n * @deprecated\n */\n readonly listPreferences?: CollectionPreferences\n /**\n * @deprecated\n */\n readonly preferenceKey?: string\n /**\n * @deprecated\n */\n readonly renderRowTypes?: boolean\n /**\n * @deprecated\n */\n readonly setTable?: (Table: React.ReactNode) => void\n /**\n * @deprecated\n */\n readonly sortColumnProps?: Partial<SortColumnProps>\n /**\n * @deprecated\n */\n readonly tableAppearance?: 'condensed' | 'default'\n}\n"],"names":[],"mappings":"AAaA,WAqCC,CAjCC;;GAEC,IAED;;GAEC,IAGD;;GAEC,IAED;;GAEC,IAED;;GAEC,IAED;;GAEC,IAED;;GAEC,IAED;;GAEC"}
@@ -2,11 +2,10 @@ export function abortAndIgnore(abortController) {
2
2
  if (abortController) {
3
3
  try {
4
4
  abortController.abort();
5
- } catch (_err) {
6
- // swallow error
7
- }
5
+ } catch (_err) {}
8
6
  }
9
7
  }
8
+ // swallow error
10
9
  /**
11
10
  * Use this function when an effect is triggered multiple times over and you want to cancel the previous effect.
12
11
  * It will abort the previous effect and create a new AbortController for the next effect.
@@ -19,10 +18,9 @@ export function abortAndIgnore(abortController) {
19
18
  if (abortControllerRef.current) {
20
19
  try {
21
20
  abortControllerRef.current.abort();
22
- } catch (_err) {
23
- // swallow error
24
- }
21
+ } catch (_err) {}
25
22
  }
23
+ // swallow error
26
24
  abortControllerRef.current = newController;
27
25
  return newController;
28
26
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/abortAndIgnore.ts"],"sourcesContent":["export function abortAndIgnore(abortController: AbortController) {\n if (abortController) {\n try {\n abortController.abort()\n } catch (_err) {\n // swallow error\n }\n }\n}\n\n/**\n * Use this function when an effect is triggered multiple times over and you want to cancel the previous effect.\n * It will abort the previous effect and create a new AbortController for the next effect.\n * Important: You must also _reset_ the `abortControllerRef` after the effect is done, otherwise the next effect will be aborted immediately.\n * For example, run `abortControllerRef.current = null` in a `finally` block or after an awaited promise.\n * @param abortControllerRef\n * @returns {AbortController}\n */\nexport function handleAbortRef(\n abortControllerRef: React.RefObject<AbortController>,\n): AbortController {\n const newController = new AbortController()\n\n if (abortControllerRef.current) {\n try {\n abortControllerRef.current.abort()\n } catch (_err) {\n // swallow error\n }\n }\n\n abortControllerRef.current = newController\n\n return newController\n}\n"],"names":["abortAndIgnore","abortController","abort","_err","handleAbortRef","abortControllerRef","newController","AbortController","current"],"mappings":"AAAA,OAAO,SAASA,eAAeC,eAAgC;IAC7D,IAAIA,iBAAiB;QACnB,IAAI;YACFA,gBAAgBC,KAAK;QACvB,EAAE,OAAOC,MAAM;QACb,gBAAgB;QAClB;IACF;AACF;AAEA;;;;;;;CAOC,GACD,OAAO,SAASC,eACdC,kBAAoD;IAEpD,MAAMC,gBAAgB,IAAIC;IAE1B,IAAIF,mBAAmBG,OAAO,EAAE;QAC9B,IAAI;YACFH,mBAAmBG,OAAO,CAACN,KAAK;QAClC,EAAE,OAAOC,MAAM;QACb,gBAAgB;QAClB;IACF;IAEAE,mBAAmBG,OAAO,GAAGF;IAE7B,OAAOA;AACT"}
1
+ {"version":3,"sources":["../../src/utilities/abortAndIgnore.ts"],"sourcesContent":["export function abortAndIgnore(abortController: AbortController) {\n if (abortController) {\n try {\n abortController.abort()\n } catch (_err) {\n // swallow error\n }\n }\n}\n\n/**\n * Use this function when an effect is triggered multiple times over and you want to cancel the previous effect.\n * It will abort the previous effect and create a new AbortController for the next effect.\n * Important: You must also _reset_ the `abortControllerRef` after the effect is done, otherwise the next effect will be aborted immediately.\n * For example, run `abortControllerRef.current = null` in a `finally` block or after an awaited promise.\n * @param abortControllerRef\n * @returns {AbortController}\n */\nexport function handleAbortRef(\n abortControllerRef: React.RefObject<AbortController>,\n): AbortController {\n const newController = new AbortController()\n\n if (abortControllerRef.current) {\n try {\n abortControllerRef.current.abort()\n } catch (_err) {\n // swallow error\n }\n }\n\n abortControllerRef.current = newController\n\n return newController\n}\n"],"names":["abortAndIgnore","abortController","abort","_err","handleAbortRef","abortControllerRef","newController","AbortController","current"],"mappings":"AAAA,OAAO,SAASA,eAAeC,eAAgC;IAC7D,IAAIA,iBAAiB;QACnB,IAAI;YACFA,gBAAgBC,KAAK;QACvB,EAAE,OAAOC,MAAM,CAEf;IACF;AACF;AAHM,gBAAgB;AAKtB;;;;;;;CAOC,GACD,OAAO,SAASC,eACdC,kBAAoD;IAEpD,MAAMC,gBAAgB,IAAIC;IAE1B,IAAIF,mBAAmBG,OAAO,EAAE;QAC9B,IAAI;YACFH,mBAAmBG,OAAO,CAACN,KAAK;QAClC,EAAE,OAAOC,MAAM,CAEf;IACF;IAFI,gBAAgB;IAIpBE,mBAAmBG,OAAO,GAAGF;IAE7B,OAAOA;AACT"}
@@ -72,9 +72,9 @@ export const traverseFields = ({ config, fields, i18n, parentIndexPath, parentSc
72
72
  break;
73
73
  case 'richText':
74
74
  if (!field?.editor) {
75
- throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
76
- ;
75
+ throw new MissingEditorProp(field);
77
76
  }
77
+ // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
78
78
  if (typeof field.editor === 'function') {
79
79
  throw new Error('Attempted to access unsanitized rich text editor.');
80
80
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utilities/buildFieldSchemaMap/traverseFields.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type { Field, FieldSchemaMap, SanitizedConfig } from 'payload'\n\nimport { MissingEditorProp } from 'payload'\nimport { fieldAffectsData, getFieldPaths, tabHasName } from 'payload/shared'\n\ntype Args = {\n config: SanitizedConfig\n fields: Field[]\n i18n: I18n<any, any>\n parentIndexPath: string\n parentSchemaPath: string\n schemaMap: FieldSchemaMap\n}\n\nexport const traverseFields = ({\n config,\n fields,\n i18n,\n parentIndexPath,\n parentSchemaPath,\n schemaMap,\n}: Args) => {\n for (const [index, field] of fields.entries()) {\n const { indexPath, schemaPath } = getFieldPaths({\n field,\n index,\n parentIndexPath: 'name' in field ? '' : parentIndexPath,\n parentPath: '',\n parentSchemaPath,\n })\n\n schemaMap.set(schemaPath, field)\n\n switch (field.type) {\n case 'array':\n traverseFields({\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: schemaPath,\n schemaMap,\n })\n\n break\n\n case 'blocks':\n ;(field.blockReferences ?? field.blocks).map((_block) => {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block =\n typeof _block === 'string' ? config.blocks.find((b) => b.slug === _block) : _block\n\n const blockSchemaPath = `${schemaPath}.${block.slug}`\n\n schemaMap.set(blockSchemaPath, block)\n traverseFields({\n config,\n fields: block.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: blockSchemaPath,\n schemaMap,\n })\n })\n\n break\n\n case 'collapsible':\n case 'row':\n traverseFields({\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: indexPath,\n parentSchemaPath,\n schemaMap,\n })\n\n break\n\n case 'group':\n if (fieldAffectsData(field)) {\n traverseFields({\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: schemaPath,\n schemaMap,\n })\n } else {\n traverseFields({\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: indexPath,\n parentSchemaPath,\n schemaMap,\n })\n }\n\n break\n\n case 'richText':\n if (!field?.editor) {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof field.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n if (typeof field.editor.generateSchemaMap === 'function') {\n field.editor.generateSchemaMap({\n config,\n field,\n i18n,\n schemaMap,\n schemaPath,\n })\n }\n\n break\n\n case 'tabs':\n field.tabs.map((tab, tabIndex) => {\n const isNamedTab = tabHasName(tab)\n\n const { indexPath: tabIndexPath, schemaPath: tabSchemaPath } = getFieldPaths({\n field: {\n ...tab,\n type: 'tab',\n },\n index: tabIndex,\n parentIndexPath: indexPath,\n parentPath: '',\n parentSchemaPath,\n })\n\n schemaMap.set(tabSchemaPath, tab)\n\n traverseFields({\n config,\n fields: tab.fields,\n i18n,\n parentIndexPath: isNamedTab ? '' : tabIndexPath,\n parentSchemaPath: isNamedTab ? tabSchemaPath : parentSchemaPath,\n schemaMap,\n })\n })\n\n break\n }\n }\n}\n"],"names":["MissingEditorProp","fieldAffectsData","getFieldPaths","tabHasName","traverseFields","config","fields","i18n","parentIndexPath","parentSchemaPath","schemaMap","index","field","entries","indexPath","schemaPath","parentPath","set","type","blockReferences","blocks","map","_block","block","find","b","slug","blockSchemaPath","editor","Error","generateSchemaMap","tabs","tab","tabIndex","isNamedTab","tabIndexPath","tabSchemaPath"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utilities/buildFieldSchemaMap/traverseFields.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type { Field, FieldSchemaMap, SanitizedConfig } from 'payload'\n\nimport { MissingEditorProp } from 'payload'\nimport { fieldAffectsData, getFieldPaths, tabHasName } from 'payload/shared'\n\ntype Args = {\n config: SanitizedConfig\n fields: Field[]\n i18n: I18n<any, any>\n parentIndexPath: string\n parentSchemaPath: string\n schemaMap: FieldSchemaMap\n}\n\nexport const traverseFields = ({\n config,\n fields,\n i18n,\n parentIndexPath,\n parentSchemaPath,\n schemaMap,\n}: Args) => {\n for (const [index, field] of fields.entries()) {\n const { indexPath, schemaPath } = getFieldPaths({\n field,\n index,\n parentIndexPath: 'name' in field ? '' : parentIndexPath,\n parentPath: '',\n parentSchemaPath,\n })\n\n schemaMap.set(schemaPath, field)\n\n switch (field.type) {\n case 'array':\n traverseFields({\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: schemaPath,\n schemaMap,\n })\n\n break\n\n case 'blocks':\n ;(field.blockReferences ?? field.blocks).map((_block) => {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block =\n typeof _block === 'string' ? config.blocks.find((b) => b.slug === _block) : _block\n\n const blockSchemaPath = `${schemaPath}.${block.slug}`\n\n schemaMap.set(blockSchemaPath, block)\n traverseFields({\n config,\n fields: block.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: blockSchemaPath,\n schemaMap,\n })\n })\n\n break\n\n case 'collapsible':\n case 'row':\n traverseFields({\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: indexPath,\n parentSchemaPath,\n schemaMap,\n })\n\n break\n\n case 'group':\n if (fieldAffectsData(field)) {\n traverseFields({\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: schemaPath,\n schemaMap,\n })\n } else {\n traverseFields({\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: indexPath,\n parentSchemaPath,\n schemaMap,\n })\n }\n\n break\n\n case 'richText':\n if (!field?.editor) {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof field.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n if (typeof field.editor.generateSchemaMap === 'function') {\n field.editor.generateSchemaMap({\n config,\n field,\n i18n,\n schemaMap,\n schemaPath,\n })\n }\n\n break\n\n case 'tabs':\n field.tabs.map((tab, tabIndex) => {\n const isNamedTab = tabHasName(tab)\n\n const { indexPath: tabIndexPath, schemaPath: tabSchemaPath } = getFieldPaths({\n field: {\n ...tab,\n type: 'tab',\n },\n index: tabIndex,\n parentIndexPath: indexPath,\n parentPath: '',\n parentSchemaPath,\n })\n\n schemaMap.set(tabSchemaPath, tab)\n\n traverseFields({\n config,\n fields: tab.fields,\n i18n,\n parentIndexPath: isNamedTab ? '' : tabIndexPath,\n parentSchemaPath: isNamedTab ? tabSchemaPath : parentSchemaPath,\n schemaMap,\n })\n })\n\n break\n }\n }\n}\n"],"names":["MissingEditorProp","fieldAffectsData","getFieldPaths","tabHasName","traverseFields","config","fields","i18n","parentIndexPath","parentSchemaPath","schemaMap","index","field","entries","indexPath","schemaPath","parentPath","set","type","blockReferences","blocks","map","_block","block","find","b","slug","blockSchemaPath","editor","Error","generateSchemaMap","tabs","tab","tabIndex","isNamedTab","tabIndexPath","tabSchemaPath"],"mappings":"AAGA,SAASA,iBAAiB,QAAQ,UAAS;AAC3C,SAASC,gBAAgB,EAAEC,aAAa,EAAEC,UAAU,QAAQ,iBAAgB;AAW5E,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,MAAM,EACNC,MAAM,EACNC,IAAI,EACJC,eAAe,EACfC,gBAAgB,EAChBC,SAAS,EACJ;IACL,KAAK,MAAM,CAACC,OAAOC,MAAM,IAAIN,OAAOO,OAAO,GAAI;QAC7C,MAAM,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGb,cAAc;YAC9CU;YACAD;YACAH,iBAAiB,UAAUI,QAAQ,KAAKJ;YACxCQ,YAAY;YACZP;QACF;QAEAC,UAAUO,GAAG,CAACF,YAAYH;QAE1B,OAAQA,MAAMM,IAAI;YAChB,KAAK;gBACHd,eAAe;oBACbC;oBACAC,QAAQM,MAAMN,MAAM;oBACpBC;oBACAC,iBAAiB;oBACjBC,kBAAkBM;oBAClBL;gBACF;gBAEA;YAEF,KAAK;;gBACDE,CAAAA,MAAMO,eAAe,IAAIP,MAAMQ,MAAM,AAAD,EAAGC,GAAG,CAAC,CAACC;oBAC5C,uFAAuF;oBACvF,MAAMC,QACJ,OAAOD,WAAW,WAAWjB,OAAOe,MAAM,CAACI,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKJ,UAAUA;oBAE9E,MAAMK,kBAAkB,GAAGZ,WAAW,CAAC,EAAEQ,MAAMG,IAAI,EAAE;oBAErDhB,UAAUO,GAAG,CAACU,iBAAiBJ;oBAC/BnB,eAAe;wBACbC;wBACAC,QAAQiB,MAAMjB,MAAM;wBACpBC;wBACAC,iBAAiB;wBACjBC,kBAAkBkB;wBAClBjB;oBACF;gBACF;gBAEA;YAEF,KAAK;YACL,KAAK;gBACHN,eAAe;oBACbC;oBACAC,QAAQM,MAAMN,MAAM;oBACpBC;oBACAC,iBAAiBM;oBACjBL;oBACAC;gBACF;gBAEA;YAEF,KAAK;gBACH,IAAIT,iBAAiBW,QAAQ;oBAC3BR,eAAe;wBACbC;wBACAC,QAAQM,MAAMN,MAAM;wBACpBC;wBACAC,iBAAiB;wBACjBC,kBAAkBM;wBAClBL;oBACF;gBACF,OAAO;oBACLN,eAAe;wBACbC;wBACAC,QAAQM,MAAMN,MAAM;wBACpBC;wBACAC,iBAAiBM;wBACjBL;wBACAC;oBACF;gBACF;gBAEA;YAEF,KAAK;gBACH,IAAI,CAACE,OAAOgB,QAAQ;oBAClB,MAAM,IAAI5B,kBAAkBY;gBAC9B;gBADqC,8HAA8H;gBAGnK,IAAI,OAAOA,MAAMgB,MAAM,KAAK,YAAY;oBACtC,MAAM,IAAIC,MAAM;gBAClB;gBAEA,IAAI,OAAOjB,MAAMgB,MAAM,CAACE,iBAAiB,KAAK,YAAY;oBACxDlB,MAAMgB,MAAM,CAACE,iBAAiB,CAAC;wBAC7BzB;wBACAO;wBACAL;wBACAG;wBACAK;oBACF;gBACF;gBAEA;YAEF,KAAK;gBACHH,MAAMmB,IAAI,CAACV,GAAG,CAAC,CAACW,KAAKC;oBACnB,MAAMC,aAAa/B,WAAW6B;oBAE9B,MAAM,EAAElB,WAAWqB,YAAY,EAAEpB,YAAYqB,aAAa,EAAE,GAAGlC,cAAc;wBAC3EU,OAAO;4BACL,GAAGoB,GAAG;4BACNd,MAAM;wBACR;wBACAP,OAAOsB;wBACPzB,iBAAiBM;wBACjBE,YAAY;wBACZP;oBACF;oBAEAC,UAAUO,GAAG,CAACmB,eAAeJ;oBAE7B5B,eAAe;wBACbC;wBACAC,QAAQ0B,IAAI1B,MAAM;wBAClBC;wBACAC,iBAAiB0B,aAAa,KAAKC;wBACnC1B,kBAAkByB,aAAaE,gBAAgB3B;wBAC/CC;oBACF;gBACF;gBAEA;QACJ;IACF;AACF,EAAC"}