@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.
- package/dist/elements/AnimateHeight/usePatchAnimateHeight.js +2 -2
- package/dist/elements/AnimateHeight/usePatchAnimateHeight.js.map +1 -1
- package/dist/elements/Autosave/index.js +1 -0
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/BulkUpload/EditMany/index.js +2 -2
- package/dist/elements/BulkUpload/EditMany/index.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +8 -8
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/BulkUpload/index.js +12 -1
- package/dist/elements/BulkUpload/index.js.map +1 -1
- package/dist/elements/Button/index.js +2 -2
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/types.js +13 -1
- package/dist/elements/Button/types.js.map +1 -1
- package/dist/elements/Card/index.js +5 -1
- package/dist/elements/Card/index.js.map +1 -1
- package/dist/elements/CodeEditor/CodeEditor.js +2 -2
- package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
- package/dist/elements/CodeEditor/types.js +3 -1
- package/dist/elements/CodeEditor/types.js.map +1 -1
- package/dist/elements/Collapsible/index.js +8 -1
- package/dist/elements/Collapsible/index.js.map +1 -1
- package/dist/elements/Combobox/index.js +6 -0
- package/dist/elements/Combobox/index.js.map +1 -1
- package/dist/elements/DatePicker/DatePicker.js +1 -0
- package/dist/elements/DatePicker/DatePicker.js.map +1 -1
- package/dist/elements/DatePicker/getFormattedLocale.js +1 -0
- package/dist/elements/DatePicker/getFormattedLocale.js.map +1 -1
- package/dist/elements/DeleteMany/index.js +25 -1
- package/dist/elements/DeleteMany/index.js.map +1 -1
- package/dist/elements/DocumentControls/index.js +1 -1
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/Provider.js +5 -1
- package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
- package/dist/elements/DocumentDrawer/types.js +11 -1
- package/dist/elements/DocumentDrawer/types.js.map +1 -1
- package/dist/elements/DraggableSortable/useDraggableSortable/index.js +1 -0
- package/dist/elements/DraggableSortable/useDraggableSortable/index.js.map +1 -1
- package/dist/elements/Drawer/index.js +3 -1
- package/dist/elements/Drawer/index.js.map +1 -1
- package/dist/elements/EditMany/DrawerContent.js +15 -1
- package/dist/elements/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/EditMany/index.js +3 -1
- package/dist/elements/EditMany/index.js.map +1 -1
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +8 -1
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +1 -1
- package/dist/elements/FolderView/FolderFileCard/index.js +1 -0
- package/dist/elements/FolderView/FolderFileCard/index.js.map +1 -1
- package/dist/elements/FolderView/MoveDocToFolder/index.js +2 -3
- package/dist/elements/FolderView/MoveDocToFolder/index.js.map +1 -1
- package/dist/elements/HTMLDiff/diff/index.js +24 -3
- package/dist/elements/HTMLDiff/diff/index.js.map +1 -1
- package/dist/elements/HydrateAuthProvider/index.js +6 -1
- package/dist/elements/HydrateAuthProvider/index.js.map +1 -1
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js +3 -1
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -1
- package/dist/elements/Link/index.js +5 -1
- package/dist/elements/Link/index.js.map +1 -1
- package/dist/elements/ListControls/types.js +7 -1
- package/dist/elements/ListControls/types.js.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.js +2 -2
- package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/ListDrawer/Provider.js +8 -1
- package/dist/elements/ListDrawer/Provider.js.map +1 -1
- package/dist/elements/ListDrawer/index.js +2 -1
- package/dist/elements/ListDrawer/index.js.map +1 -1
- package/dist/elements/ListDrawer/types.js +5 -1
- package/dist/elements/ListDrawer/types.js.map +1 -1
- package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +5 -1
- package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
- package/dist/elements/ListSelection/index.js +11 -1
- package/dist/elements/ListSelection/index.js.map +1 -1
- package/dist/elements/LivePreview/Toolbar/Controls/index.js +1 -1
- package/dist/elements/LivePreview/Toolbar/Controls/index.js.map +1 -1
- package/dist/elements/Logout/index.js +5 -1
- package/dist/elements/Logout/index.js.map +1 -1
- package/dist/elements/Pill/index.js +5 -2
- package/dist/elements/Pill/index.js.map +1 -1
- package/dist/elements/PublishMany/index.js +3 -1
- package/dist/elements/PublishMany/index.js.map +1 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.js +1 -2
- package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
- package/dist/elements/ReactSelect/index.js +2 -2
- package/dist/elements/ReactSelect/index.js.map +1 -1
- package/dist/elements/ReactSelect/types.js +8 -1
- package/dist/elements/ReactSelect/types.js.map +1 -1
- package/dist/elements/RelationshipTable/index.js +2 -2
- package/dist/elements/RelationshipTable/index.js.map +1 -1
- package/dist/elements/RestoreMany/index.js +1 -0
- package/dist/elements/RestoreMany/index.js.map +1 -1
- package/dist/elements/SaveButton/index.js +1 -2
- package/dist/elements/SaveButton/index.js.map +1 -1
- package/dist/elements/SaveDraftButton/index.js +1 -2
- package/dist/elements/SaveDraftButton/index.js.map +1 -1
- package/dist/elements/SearchFilter/types.js +19 -1
- package/dist/elements/SearchFilter/types.js.map +1 -1
- package/dist/elements/Status/index.js +2 -2
- package/dist/elements/Status/index.js.map +1 -1
- package/dist/elements/StepNav/index.js +5 -1
- package/dist/elements/StepNav/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Select/index.js +4 -4
- package/dist/elements/Table/DefaultCell/fields/Select/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +2 -1
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/Table/RelationshipProvider/index.js +3 -0
- package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
- package/dist/elements/Thumbnail/createThumbnail.js +12 -12
- package/dist/elements/Thumbnail/createThumbnail.js.map +1 -1
- package/dist/elements/Tooltip/index.js +3 -1
- package/dist/elements/Tooltip/index.js.map +1 -1
- package/dist/elements/UnpublishMany/index.js +3 -1
- package/dist/elements/UnpublishMany/index.js.map +1 -1
- package/dist/elements/Upload/index.js +8 -8
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Number/index.js +1 -0
- package/dist/elements/WhereBuilder/Condition/Number/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js +5 -6
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Text/index.js +1 -0
- package/dist/elements/WhereBuilder/Condition/Text/index.js.map +1 -1
- package/dist/elements/WhereBuilder/index.js +2 -2
- package/dist/elements/WhereBuilder/index.js.map +1 -1
- package/dist/exports/client/index.js +26 -2
- package/dist/exports/client/index.js.map +1 -1
- package/dist/exports/shared/index.js +2 -1
- package/dist/exports/shared/index.js.map +1 -1
- package/dist/fields/Blocks/BlockSelector/index.js +3 -1
- package/dist/fields/Blocks/BlockSelector/index.js.map +1 -1
- package/dist/fields/Email/index.js +1 -1
- package/dist/fields/Email/index.js.map +1 -1
- package/dist/fields/Group/index.js +1 -1
- package/dist/fields/Group/index.js.map +1 -1
- package/dist/fields/Number/index.js +5 -3
- package/dist/fields/Number/index.js.map +1 -1
- package/dist/fields/Password/types.js +11 -1
- package/dist/fields/Password/types.js.map +1 -1
- package/dist/fields/Point/index.js +2 -2
- package/dist/fields/Point/index.js.map +1 -1
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.js +4 -1
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.js.map +1 -1
- package/dist/fields/Relationship/select-components/SingleValue/index.js +4 -1
- package/dist/fields/Relationship/select-components/SingleValue/index.js.map +1 -1
- package/dist/fields/Text/index.js +3 -2
- package/dist/fields/Text/index.js.map +1 -1
- package/dist/fields/Upload/Input.js +3 -1
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/fields/Upload/types.js +1 -0
- package/dist/fields/Upload/types.js.map +1 -1
- package/dist/fields/shared/index.js +2 -3
- package/dist/fields/shared/index.js.map +1 -1
- package/dist/forms/Form/fieldReducer.js +2 -1
- package/dist/forms/Form/fieldReducer.js.map +1 -1
- package/dist/forms/Form/index.js +12 -9
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/mergeServerFormState.js +11 -3
- package/dist/forms/Form/mergeServerFormState.js.map +1 -1
- package/dist/forms/Form/reduceToSerializableFields.js +2 -2
- package/dist/forms/Form/reduceToSerializableFields.js.map +1 -1
- package/dist/forms/Form/types.js +52 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/forms/NullifyField/index.js +2 -1
- package/dist/forms/NullifyField/index.js.map +1 -1
- package/dist/forms/WatchChildErrors/index.js +6 -1
- package/dist/forms/WatchChildErrors/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +20 -0
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/index.js +33 -1
- package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js +2 -2
- package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/iterateFields.js +16 -0
- package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js +2 -2
- package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +22 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.js +5 -1
- package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
- package/dist/forms/useField/index.js +1 -0
- package/dist/forms/useField/index.js.map +1 -1
- package/dist/forms/useField/types.js +19 -1
- package/dist/forms/useField/types.js.map +1 -1
- package/dist/hooks/useControllableState.js +9 -1
- package/dist/hooks/useControllableState.js.map +1 -1
- package/dist/hooks/useDelayedRender.js +3 -1
- package/dist/hooks/useDelayedRender.js.map +1 -1
- package/dist/hooks/useHotkey.js +2 -2
- package/dist/hooks/useHotkey.js.map +1 -1
- package/dist/hooks/usePayloadAPI.js +3 -4
- package/dist/hooks/usePayloadAPI.js.map +1 -1
- package/dist/hooks/usePopupWindow.js +2 -2
- package/dist/hooks/usePopupWindow.js.map +1 -1
- package/dist/hooks/useQueue.js +15 -7
- package/dist/hooks/useQueue.js.map +1 -1
- package/dist/hooks/useResize.js +4 -3
- package/dist/hooks/useResize.js.map +1 -1
- package/dist/providers/Auth/index.js +35 -3
- package/dist/providers/Auth/index.js.map +1 -1
- package/dist/providers/Config/index.js +10 -1
- package/dist/providers/Config/index.js.map +1 -1
- package/dist/providers/DocumentInfo/index.js +6 -7
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/DocumentInfo/types.js +25 -1
- package/dist/providers/DocumentInfo/types.js.map +1 -1
- package/dist/providers/Folders/index.js +44 -2
- package/dist/providers/Folders/index.js.map +1 -1
- package/dist/providers/ListQuery/types.js +5 -1
- package/dist/providers/ListQuery/types.js.map +1 -1
- package/dist/providers/LivePreview/context.js +11 -1
- package/dist/providers/LivePreview/context.js.map +1 -1
- package/dist/providers/LivePreview/index.js +7 -4
- package/dist/providers/LivePreview/index.js.map +1 -1
- package/dist/providers/Preferences/index.js +7 -2
- package/dist/providers/Preferences/index.js.map +1 -1
- package/dist/providers/RouteTransition/index.js +9 -9
- package/dist/providers/RouteTransition/index.js.map +1 -1
- package/dist/providers/Selection/index.js +7 -2
- package/dist/providers/Selection/index.js.map +1 -1
- package/dist/providers/ServerFunctions/index.js +25 -22
- package/dist/providers/ServerFunctions/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.js +10 -9
- package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js +4 -3
- package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
- package/dist/providers/TableColumns/types.js +17 -1
- package/dist/providers/TableColumns/types.js.map +1 -1
- package/dist/utilities/abortAndIgnore.js +4 -6
- package/dist/utilities/abortAndIgnore.js.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js +2 -2
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
- package/dist/utilities/copyDataFromLocale.js +6 -2
- package/dist/utilities/copyDataFromLocale.js.map +1 -1
- package/dist/utilities/getDisplayedFieldValue.js +8 -8
- package/dist/utilities/getDisplayedFieldValue.js.map +1 -1
- package/dist/utilities/getFolderResultsComponentAndData.js +2 -1
- package/dist/utilities/getFolderResultsComponentAndData.js.map +1 -1
- package/dist/utilities/handleFormStateLocking.js +2 -2
- package/dist/utilities/handleFormStateLocking.js.map +1 -1
- package/dist/utilities/hasSavePermission.js +5 -1
- package/dist/utilities/hasSavePermission.js.map +1 -1
- package/dist/utilities/isURLAllowed.js +6 -6
- package/dist/utilities/isURLAllowed.js.map +1 -1
- package/dist/utilities/renderTable.js +2 -1
- package/dist/utilities/renderTable.js.map +1 -1
- package/dist/utilities/schedulePublishHandler.js +3 -1
- package/dist/utilities/schedulePublishHandler.js.map +1 -1
- package/dist/utilities/upsertPreferences.js +1 -0
- package/dist/utilities/upsertPreferences.js.map +1 -1
- package/dist/views/Edit/index.js +7 -7
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/List/ListHeader/index.js +6 -1
- package/dist/views/List/ListHeader/index.js.map +1 -1
- 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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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
|
|
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
|
-
})
|
|
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)
|
|
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
|
|
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
|
-
|
|
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":";AAoBA,SACEA,uBAAuB,EACvBC,SAAS,EACTC,yBAAyB,EACzBC,qBAAqB,QAChB,iBAAgB;AACvB,OAAOC,WAAW,QAAO;AAIzB,SAASC,qBAAqB,QAAQ,mDAAkD;AACxF,SACEC,UAAU,QACV,6KAA6K;AACxK,mCAAkC;AACzC,SAASC,2BAA2B,QAAQ,mCAAkC;AAC9E,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,YAAY,QAAQ,oBAAmB;AAkChD,OAAO,MAAMC,mBAAmB,CAACC;IAC/B,MAAM,EACJC,UAAU,EACVC,YAAY,EACZC,cAAc,EACdC,OAAO,EACPC,eAAe,EACfC,QAAQ,EACRC,IAAI,EACJC,mBAAmB,IAAI,EACvBC,mBAAmB,EACnBC,gBAAgB,EAChBC,IAAI,EACJC,OAAO,EACPC,GAAG,EACHC,YAAY,EACZC,eAAe,EACfC,UAAU,EACVC,QAAQ,EACT,GAAGjB;IAEJ,6CAA6C;IAC7C,IAAIkB,iBAAiB3B,sBACnBI,4BAA4B;QAAEe;QAAkBS,QAAQjB;IAAa,IACrE;QACES;QACAS,0BAA0B;QAC1BC,oBAAoB;IACtB;IAGF,IAAIC,kBAAkB/B,sBACpBI,4BAA4B;QAC1Be;QACAS,QAAQL;IACV,IACA;QACEH;QACAS,0BAA0B;QAC1BC,oBAAoB;IACtB;IACW,wDAAwD;IAErE,2CAA2C;IAC3C,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAME,eAAeL,gBAAgBM,UAAU,CAACC,QAAUpC,UAAUoC;IAEpE,IAAIF,eAAe,CAAC,GAAG;QACrB,MAAMG,UAAUR,eAAeS,MAAM,CAACJ,cAAc,EAAE,CAAC,EAAE;QACzDL,eAAeU,OAAO,CAACF;IACzB;IAEA,MAAMG,uBAAuBb,aACzBE,eAAeM,SAAS,CAAC,CAACC,QAAU,UAAUA,SAASA,MAAMK,IAAI,KAAKd,cACtE,CAAC;IAEL,IAAIa,uBAAuB,CAAC,GAAG;QAC7B,MAAME,kBAAkBb,eAAeS,MAAM,CAACE,sBAAsB,EAAE,CAAC,EAAE;QACzEX,eAAeU,OAAO,CAACG;IACzB;IAEA,MAAMC,SAAS5B;IAEf,IAAI4B,QAAQ;QACV,gEAAgE;QAChEd,iBAAiBpB,aAA0BoB,gBAAgBc;QAC3DV,kBAAkBxB,aAAoBwB,iBAAiBU;IACzD;IADiE,qDAAqD;IAGtH,MAAMC,uBAAuB,EAAE;IAE/B,MAAMC,SAAmBhB,gBAAgBiB,OAAO,CAACC,KAAKC,aAAaC;QACjE,IAAIlD,wBAAwBiD,gBAAgB,CAAChD,UAAUgD,cAAc;YACnE,OAAOD;QACT;QAEA,MAAMG,WACJ,AAACF,YAAoBE,QAAQ,IAAK,CAAA,UAAUF,cAAcA,YAAYP,IAAI,GAAGU,SAAQ;QAEvF,MAAMC,cAAcnB,gBAAgBoB,IAAI,CAAC,CAACC;YACxC,MAAMC,YAAY,AAACD,EAAUJ,QAAQ,IAAK,CAAA,UAAUI,IAAIA,EAAEb,IAAI,GAAGU,SAAQ;YACzE,OAAOI,cAAcL;QACvB;QAEA,MAAMM,gBACJJ,aAAaK,SACb,gBAAgBL,YAAYK,KAAK,IACjCL,YAAYK,KAAK,CAACC,UAAU,IAC5B,UAAUN,YAAYK,KAAK,CAACC,UAAU,IACtCN,YAAYK,KAAK,CAACC,UAAU,CAACC,IAAI;QAEnC,IAAIP,eAAeA,YAAYQ,IAAI,KAAK,WAAW,CAACJ,eAAe;YACjE,OAAOT;QACT;QADa,uCAAuC;QAGpD,MAAMc,aAAa9C,SAASsC,KAC1B,CAACS,aAAed,eAAe,UAAUA,eAAec,WAAWZ,QAAQ,KAAKA;QAGlF,MAAMa,WAAWxD,eAAe;YAC9B2C;YACAN;YACAoB,QAAQH;YACR9C;QACF;QAEA,IAAIgD,YAAY,CAACnB,qBAAqBqB,QAAQ,CAAChB,WAAW;YACxDL,qBAAqBsB,IAAI,CAACjB;QAC5B;QAEA,IAAIkB,cAAchB;QAElB,IAAIlC,aAAa,eAAe;YAC9B,MAAMmD,sBACJhB,eACA,WAAWA,eACX,gBAAgBA,YAAYK,KAAK,IACjC,WAAWL,YAAYK,KAAK,CAACC,UAAU,IACvCN,YAAYK,KAAK,CAACC,UAAU,CAACW,KAAK,KAAKlB,YAAU,uBAAuB;YACpEC,YAAYK,KAAK,CAACC,UAAU,CAACW,KAAK,GAClClB;YAEN,+CAA+C;YAC/C,MAAMmB,cAA8D;gBAClElC,OAAOY;YACT;YAEA,MAAMuB,yBAGF;gBACFvB;gBACAlC;gBACAsB,OAAOgB;gBACP9B;gBACAC;YACF;YAEA4C,cAAcC,sBACVhE,sBAAsB;gBACpBkE;gBACAE,WAAWJ;gBACXK,WAAWlD,QAAQkD,SAAS;gBAC5BC,aAAaH;YACf,KACApB;QACN;QAEA,MAAMwB,4BACJ3B,eACAA,YAAYY,IAAI,IACfZ,CAAAA,YAAYY,IAAI,KAAK,WACpBZ,YAAYY,IAAI,KAAK,WACrBZ,YAAYY,IAAI,KAAK,QAAO;QAEhC,MAAMgB,QACJ5B,eAAe,qBAAqBA,eAAeA,YAAY6B,eAAe,KAAK1B,YAC/EH,YAAY6B,eAAe,GAC3B,WAAW7B,cACTA,YAAY4B,KAAK,GACjBzB;QAER,gFAAgF;QAChF,MAAM2B,cAAc5B,UAAU6B,QAAQ,MAAM;QAE5C,MAAMC,wBACJ,KAAC3E;YACC4E,SAASN,6BAA6B1E,0BAA0B+C,gBAAgBG;YAChFkB,OAAOF;YACPS,OAAOA;YACPnC,MAAMqC;YACL,GAAIpD,mBAAmB,CAAC,CAAC;;QAI9B,MAAMsC,SAAiB;YACrBd;YACAgC,QAAQnB;YACRI;YACA/B,OAAOY;YACPgC;YACAG,eAAepB,WACX7C,KAAKkE,GAAG,CAAC,CAACC,KAAKC;gBACb,OAAO9E,WAAW;oBAChBwC;oBACAlC,gBAAgBG,aAAa,gBAAgBH,iBAAiBuE,IAAIE,UAAU;oBAC5EC,aAAavC;oBACbjC;oBACAqE,KAAKpE,aAAa,gBAAgBoE,MAAMA,IAAII,KAAK;oBACjDrE;oBACAE;oBACAoE,gBAAgBvE,oBAAoB8B,aAAaL,oBAAoB,CAAC,EAAE;oBACxErB;oBACAC;oBACA8D;oBACAlC;oBACAxB;gBACF;YACF,KACA,EAAE;QACR;QAEAmB,IAAImB,IAAI,CAACF;QAET,OAAOjB;IACT,GAAG,EAAE;IAEL,IAAInC,YAAY;QACdiC,OAAON,OAAO,IAAI3B;IACpB;IAEA,OAAOiC;AACT,EAAC"}
|
|
@@ -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
|
|
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)
|
|
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
|
|
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)
|
|
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":"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,
|
|
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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"}
|