@payloadcms/next 3.76.0-canary.3 → 3.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js.map +1 -1
- package/dist/views/Document/getDocumentData.js +1 -1
- package/dist/views/Document/getDocumentData.js.map +1 -1
- package/dist/views/Document/getIsLocked.js +1 -1
- package/dist/views/Document/getIsLocked.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
- package/dist/views/Version/metadata.js +1 -1
- package/dist/views/Version/metadata.js.map +1 -1
- package/dist/views/Versions/metadata.js +1 -1
- package/dist/views/Versions/metadata.js.map +1 -1
- package/package.json +9 -9
|
@@ -181,7 +181,7 @@ const droppableJumpKeyboardCoordinateGetter = (event, {
|
|
|
181
181
|
const viewportHeight = window.innerHeight;
|
|
182
182
|
const targetRect = targetDroppable.rect;
|
|
183
183
|
const scrollPadding = 20 // Extra padding to ensure element is fully visible
|
|
184
|
-
|
|
184
|
+
;
|
|
185
185
|
// Check if target droppable is fully visible in viewport
|
|
186
186
|
const isAboveViewport = targetRect.top < scrollPadding;
|
|
187
187
|
const isBelowViewport = targetRect.bottom > viewportHeight - scrollPadding;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sensors.js","names":["KeyboardCode","KeyboardSensor","PointerSensor","useSensor","useSensors","getDroppablePositions","positionTolerance","rowTolerance","result","currentRow","currentY","allDroppables","Array","from","document","querySelectorAll","i","length","element","rect","getBoundingClientRect","width","height","centerX","left","centerY","top","testId","getAttribute","isBeforeDroppable","endsWith","hasOverlapping","some","other","otherIndex","otherRect","otherCenterX","otherCenterY","Math","abs","push","row","findClosestRow","droppables","posY","closestRow","minYDistance","Infinity","droppable","yDistance","findClosestDroppableInRow","rowIndex","posX","closestIndex","minXDistance","xDistance","index","findTargetDroppable","currentCenterX","currentCenterY","direction","currentDroppable","currentIndex","targetRow","droppableJumpKeyboardCoordinateGetter","event","context","currentCoordinates","collisionRect","code","includes","preventDefault","scrollableAncestors","targetDroppable","viewportHeight","window","innerHeight","targetRect","scrollPadding","isAboveViewport","isBelowViewport","bottom","scrollAmount","scrollBy","behavior","newTargetRect","newTargetCenterX","newTargetCenterY","deltaX","deltaY","x","y","DirectFocusKeyboardSensor","activators","eventName","handler","keyboardCodes","cancel","Esc","end","Space","Enter","start","onActivation","active","nativeEvent","target","node","current","useDashboardSensors","activationConstraint","distance","coordinateGetter"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/sensors.ts"],"sourcesContent":["import type { KeyboardCoordinateGetter, KeyboardSensorOptions } from '@dnd-kit/core'\n\nimport { KeyboardCode, KeyboardSensor, PointerSensor, useSensor, useSensors } from '@dnd-kit/core'\n\ntype DroppablePosition = {\n centerX: number\n centerY: number\n element: Element\n isBeforeDroppable: boolean\n rect: DOMRect\n row: number\n}\n\n/**\n * Get all droppable widget positions, filtering out overlapping \"before\" droppables\n * and assigning row numbers based on Y position.\n */\nfunction getDroppablePositions(): DroppablePosition[] {\n const positionTolerance = 5\n const rowTolerance = 10\n const result: DroppablePosition[] = []\n let currentRow = 0\n let currentY: null | number = null\n\n const allDroppables = Array.from(document.querySelectorAll('.droppable-widget'))\n\n for (let i = 0; i < allDroppables.length; i++) {\n const element = allDroppables[i]\n const rect = element.getBoundingClientRect()\n\n // Skip hidden elements\n if (rect.width === 0 || rect.height === 0) {\n continue\n }\n\n const centerX = rect.left + rect.width / 2\n const centerY = rect.top + rect.height / 2\n const testId = element.getAttribute('data-testid') || ''\n const isBeforeDroppable = testId.endsWith('-before')\n\n // Skip \"before\" droppables that overlap with another droppable\n if (isBeforeDroppable) {\n const hasOverlapping = allDroppables.some((other, otherIndex) => {\n if (otherIndex === i) {\n return false\n }\n const otherRect = other.getBoundingClientRect()\n const otherCenterX = otherRect.left + otherRect.width / 2\n const otherCenterY = otherRect.top + otherRect.height / 2\n return (\n Math.abs(otherCenterX - centerX) < positionTolerance &&\n Math.abs(otherCenterY - centerY) < positionTolerance\n )\n })\n if (hasOverlapping) {\n continue\n }\n }\n\n // Assign row number based on Y position change\n if (currentY === null) {\n currentY = centerY\n } else if (Math.abs(centerY - currentY) >= rowTolerance) {\n currentRow++\n currentY = centerY\n }\n\n result.push({\n centerX,\n centerY,\n element,\n isBeforeDroppable,\n rect,\n row: currentRow,\n })\n }\n\n return result\n}\n\n/**\n * Find the row with the closest Y position to the given posY.\n * Returns the row index, or null if no droppables exist.\n */\nfunction findClosestRow(droppables: DroppablePosition[], posY: number): null | number {\n if (droppables.length === 0) {\n return null\n }\n\n let closestRow = droppables[0].row\n let minYDistance = Infinity\n\n for (const droppable of droppables) {\n const yDistance = Math.abs(droppable.centerY - posY)\n if (yDistance < minYDistance) {\n minYDistance = yDistance\n closestRow = droppable.row\n }\n }\n\n return closestRow\n}\n\n/**\n * Find the closest droppable within a specific row by X position.\n * Returns the droppable and its index, or null if no droppables in that row.\n */\nfunction findClosestDroppableInRow(\n droppables: DroppablePosition[],\n rowIndex: number,\n posX: number,\n): { droppable: DroppablePosition; index: number } | null {\n let closestIndex = -1\n let minXDistance = Infinity\n\n for (let i = 0; i < droppables.length; i++) {\n const droppable = droppables[i]\n if (droppable.row === rowIndex) {\n const xDistance = Math.abs(droppable.centerX - posX)\n if (xDistance < minXDistance) {\n minXDistance = xDistance\n closestIndex = i\n }\n }\n }\n\n if (closestIndex === -1) {\n return null\n }\n\n return { droppable: droppables[closestIndex], index: closestIndex }\n}\n\n/**\n * Find the target droppable based on direction\n * - ArrowRight/Left: Next/previous in DOM order (now that overlapping droppables are filtered)\n * - ArrowUp/Down: Closest in adjacent row (row +1 or -1) by X position\n */\nfunction findTargetDroppable(\n droppables: DroppablePosition[],\n currentCenterX: number,\n currentCenterY: number,\n direction: string,\n): DroppablePosition | null {\n // Find the closest row, then the closest droppable in that row\n const currentRow = findClosestRow(droppables, currentCenterY)\n\n if (currentRow === null) {\n return null\n }\n\n const currentDroppable = findClosestDroppableInRow(droppables, currentRow, currentCenterX)\n\n if (!currentDroppable) {\n return null\n }\n\n const { index: currentIndex } = currentDroppable\n\n switch (direction) {\n case 'ArrowDown': {\n const targetRow = currentRow + 1\n return findClosestDroppableInRow(droppables, targetRow, currentCenterX)?.droppable || null\n }\n\n case 'ArrowLeft':\n // Previous in DOM order\n return droppables[currentIndex - 1] || null\n\n case 'ArrowRight':\n // Next in DOM order\n return droppables[currentIndex + 1] || null\n\n case 'ArrowUp': {\n const targetRow = currentRow - 1\n return findClosestDroppableInRow(droppables, targetRow, currentCenterX)?.droppable || null\n }\n\n default:\n return null\n }\n}\n\n/**\n * Custom coordinate getter that jumps directly to droppable positions\n * instead of moving in pixel increments. This works better with scrolling\n * and provides more predictable navigation.\n */\nconst droppableJumpKeyboardCoordinateGetter: KeyboardCoordinateGetter = (\n event,\n { context, currentCoordinates },\n) => {\n const { collisionRect } = context\n const { code } = event\n\n if (!collisionRect) {\n return currentCoordinates\n }\n\n // Only handle arrow keys\n if (!['ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp'].includes(code)) {\n return currentCoordinates\n }\n\n // Prevent default browser scroll behavior for arrow keys\n event.preventDefault()\n\n // Clear scrollableAncestors to prevent dnd-kit from scrolling instead of moving\n // This must be done on every keydown because context is updated by dnd-kit\n if (context.scrollableAncestors) {\n context.scrollableAncestors.length = 0\n }\n\n // Get all droppable widgets and their positions\n const droppables = getDroppablePositions()\n\n if (droppables.length === 0) {\n return currentCoordinates\n }\n\n // Current position center (viewport coordinates from collisionRect)\n const currentCenterX = collisionRect.left + collisionRect.width / 2\n const currentCenterY = collisionRect.top + collisionRect.height / 2\n\n // Find the target droppable based on direction\n const targetDroppable = findTargetDroppable(droppables, currentCenterX, currentCenterY, code)\n\n // If we found a target, scroll if needed and calculate the delta\n if (targetDroppable) {\n const viewportHeight = window.innerHeight\n const targetRect = targetDroppable.rect\n const scrollPadding = 20 // Extra padding to ensure element is fully visible\n\n // Check if target droppable is fully visible in viewport\n const isAboveViewport = targetRect.top < scrollPadding\n const isBelowViewport = targetRect.bottom > viewportHeight - scrollPadding\n\n // Scroll to make target visible (using instant scroll for synchronous behavior)\n if (isAboveViewport) {\n const scrollAmount = targetRect.top - scrollPadding\n // don't use smooth scroll here, because it will mess up the delta calculation\n window.scrollBy({ behavior: 'instant', top: scrollAmount })\n } else if (isBelowViewport) {\n const scrollAmount = targetRect.bottom - viewportHeight + scrollPadding\n window.scrollBy({ behavior: 'instant', top: scrollAmount })\n }\n\n // After scroll, recalculate target position (it may have changed due to scroll)\n const newTargetRect = targetDroppable.element.getBoundingClientRect()\n const newTargetCenterX = newTargetRect.left + newTargetRect.width / 2\n const newTargetCenterY = newTargetRect.top + newTargetRect.height / 2\n\n // Calculate delta using current overlay position (which didn't change) and new target position\n const deltaX = newTargetCenterX - currentCenterX\n const deltaY = newTargetCenterY - currentCenterY\n\n // Add delta to currentCoordinates to position overlay's center at target's center\n return {\n x: currentCoordinates.x + deltaX,\n y: currentCoordinates.y + deltaY,\n }\n }\n\n // No valid target found, stay in place\n return currentCoordinates\n}\n\n/**\n * Custom KeyboardSensor that only activates when focus is directly on the\n * draggable element, not on any of its descendants. This allows interactive\n * elements inside draggables (like buttons) to work normally with the keyboard.\n */\nclass DirectFocusKeyboardSensor extends KeyboardSensor {\n static override activators = [\n {\n eventName: 'onKeyDown' as const,\n handler: (\n event: React.KeyboardEvent,\n {\n keyboardCodes = {\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter],\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n },\n onActivation,\n }: KeyboardSensorOptions,\n { active }: { active: { node: React.MutableRefObject<HTMLElement | null> } },\n ) => {\n const { code } = event.nativeEvent\n\n // Only activate if focus is directly on the draggable node, not descendants\n if (event.target !== active.node.current) {\n return false\n }\n\n if (keyboardCodes.start.includes(code)) {\n event.preventDefault()\n onActivation?.({ event: event.nativeEvent })\n return true\n }\n\n return false\n },\n },\n ]\n}\n\nexport function useDashboardSensors() {\n return useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(DirectFocusKeyboardSensor, {\n coordinateGetter: droppableJumpKeyboardCoordinateGetter,\n }),\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"sensors.js","names":["KeyboardCode","KeyboardSensor","PointerSensor","useSensor","useSensors","getDroppablePositions","positionTolerance","rowTolerance","result","currentRow","currentY","allDroppables","Array","from","document","querySelectorAll","i","length","element","rect","getBoundingClientRect","width","height","centerX","left","centerY","top","testId","getAttribute","isBeforeDroppable","endsWith","hasOverlapping","some","other","otherIndex","otherRect","otherCenterX","otherCenterY","Math","abs","push","row","findClosestRow","droppables","posY","closestRow","minYDistance","Infinity","droppable","yDistance","findClosestDroppableInRow","rowIndex","posX","closestIndex","minXDistance","xDistance","index","findTargetDroppable","currentCenterX","currentCenterY","direction","currentDroppable","currentIndex","targetRow","droppableJumpKeyboardCoordinateGetter","event","context","currentCoordinates","collisionRect","code","includes","preventDefault","scrollableAncestors","targetDroppable","viewportHeight","window","innerHeight","targetRect","scrollPadding","isAboveViewport","isBelowViewport","bottom","scrollAmount","scrollBy","behavior","newTargetRect","newTargetCenterX","newTargetCenterY","deltaX","deltaY","x","y","DirectFocusKeyboardSensor","activators","eventName","handler","keyboardCodes","cancel","Esc","end","Space","Enter","start","onActivation","active","nativeEvent","target","node","current","useDashboardSensors","activationConstraint","distance","coordinateGetter"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/sensors.ts"],"sourcesContent":["import type { KeyboardCoordinateGetter, KeyboardSensorOptions } from '@dnd-kit/core'\n\nimport { KeyboardCode, KeyboardSensor, PointerSensor, useSensor, useSensors } from '@dnd-kit/core'\n\ntype DroppablePosition = {\n centerX: number\n centerY: number\n element: Element\n isBeforeDroppable: boolean\n rect: DOMRect\n row: number\n}\n\n/**\n * Get all droppable widget positions, filtering out overlapping \"before\" droppables\n * and assigning row numbers based on Y position.\n */\nfunction getDroppablePositions(): DroppablePosition[] {\n const positionTolerance = 5\n const rowTolerance = 10\n const result: DroppablePosition[] = []\n let currentRow = 0\n let currentY: null | number = null\n\n const allDroppables = Array.from(document.querySelectorAll('.droppable-widget'))\n\n for (let i = 0; i < allDroppables.length; i++) {\n const element = allDroppables[i]\n const rect = element.getBoundingClientRect()\n\n // Skip hidden elements\n if (rect.width === 0 || rect.height === 0) {\n continue\n }\n\n const centerX = rect.left + rect.width / 2\n const centerY = rect.top + rect.height / 2\n const testId = element.getAttribute('data-testid') || ''\n const isBeforeDroppable = testId.endsWith('-before')\n\n // Skip \"before\" droppables that overlap with another droppable\n if (isBeforeDroppable) {\n const hasOverlapping = allDroppables.some((other, otherIndex) => {\n if (otherIndex === i) {\n return false\n }\n const otherRect = other.getBoundingClientRect()\n const otherCenterX = otherRect.left + otherRect.width / 2\n const otherCenterY = otherRect.top + otherRect.height / 2\n return (\n Math.abs(otherCenterX - centerX) < positionTolerance &&\n Math.abs(otherCenterY - centerY) < positionTolerance\n )\n })\n if (hasOverlapping) {\n continue\n }\n }\n\n // Assign row number based on Y position change\n if (currentY === null) {\n currentY = centerY\n } else if (Math.abs(centerY - currentY) >= rowTolerance) {\n currentRow++\n currentY = centerY\n }\n\n result.push({\n centerX,\n centerY,\n element,\n isBeforeDroppable,\n rect,\n row: currentRow,\n })\n }\n\n return result\n}\n\n/**\n * Find the row with the closest Y position to the given posY.\n * Returns the row index, or null if no droppables exist.\n */\nfunction findClosestRow(droppables: DroppablePosition[], posY: number): null | number {\n if (droppables.length === 0) {\n return null\n }\n\n let closestRow = droppables[0].row\n let minYDistance = Infinity\n\n for (const droppable of droppables) {\n const yDistance = Math.abs(droppable.centerY - posY)\n if (yDistance < minYDistance) {\n minYDistance = yDistance\n closestRow = droppable.row\n }\n }\n\n return closestRow\n}\n\n/**\n * Find the closest droppable within a specific row by X position.\n * Returns the droppable and its index, or null if no droppables in that row.\n */\nfunction findClosestDroppableInRow(\n droppables: DroppablePosition[],\n rowIndex: number,\n posX: number,\n): { droppable: DroppablePosition; index: number } | null {\n let closestIndex = -1\n let minXDistance = Infinity\n\n for (let i = 0; i < droppables.length; i++) {\n const droppable = droppables[i]\n if (droppable.row === rowIndex) {\n const xDistance = Math.abs(droppable.centerX - posX)\n if (xDistance < minXDistance) {\n minXDistance = xDistance\n closestIndex = i\n }\n }\n }\n\n if (closestIndex === -1) {\n return null\n }\n\n return { droppable: droppables[closestIndex], index: closestIndex }\n}\n\n/**\n * Find the target droppable based on direction\n * - ArrowRight/Left: Next/previous in DOM order (now that overlapping droppables are filtered)\n * - ArrowUp/Down: Closest in adjacent row (row +1 or -1) by X position\n */\nfunction findTargetDroppable(\n droppables: DroppablePosition[],\n currentCenterX: number,\n currentCenterY: number,\n direction: string,\n): DroppablePosition | null {\n // Find the closest row, then the closest droppable in that row\n const currentRow = findClosestRow(droppables, currentCenterY)\n\n if (currentRow === null) {\n return null\n }\n\n const currentDroppable = findClosestDroppableInRow(droppables, currentRow, currentCenterX)\n\n if (!currentDroppable) {\n return null\n }\n\n const { index: currentIndex } = currentDroppable\n\n switch (direction) {\n case 'ArrowDown': {\n const targetRow = currentRow + 1\n return findClosestDroppableInRow(droppables, targetRow, currentCenterX)?.droppable || null\n }\n\n case 'ArrowLeft':\n // Previous in DOM order\n return droppables[currentIndex - 1] || null\n\n case 'ArrowRight':\n // Next in DOM order\n return droppables[currentIndex + 1] || null\n\n case 'ArrowUp': {\n const targetRow = currentRow - 1\n return findClosestDroppableInRow(droppables, targetRow, currentCenterX)?.droppable || null\n }\n\n default:\n return null\n }\n}\n\n/**\n * Custom coordinate getter that jumps directly to droppable positions\n * instead of moving in pixel increments. This works better with scrolling\n * and provides more predictable navigation.\n */\nconst droppableJumpKeyboardCoordinateGetter: KeyboardCoordinateGetter = (\n event,\n { context, currentCoordinates },\n) => {\n const { collisionRect } = context\n const { code } = event\n\n if (!collisionRect) {\n return currentCoordinates\n }\n\n // Only handle arrow keys\n if (!['ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp'].includes(code)) {\n return currentCoordinates\n }\n\n // Prevent default browser scroll behavior for arrow keys\n event.preventDefault()\n\n // Clear scrollableAncestors to prevent dnd-kit from scrolling instead of moving\n // This must be done on every keydown because context is updated by dnd-kit\n if (context.scrollableAncestors) {\n context.scrollableAncestors.length = 0\n }\n\n // Get all droppable widgets and their positions\n const droppables = getDroppablePositions()\n\n if (droppables.length === 0) {\n return currentCoordinates\n }\n\n // Current position center (viewport coordinates from collisionRect)\n const currentCenterX = collisionRect.left + collisionRect.width / 2\n const currentCenterY = collisionRect.top + collisionRect.height / 2\n\n // Find the target droppable based on direction\n const targetDroppable = findTargetDroppable(droppables, currentCenterX, currentCenterY, code)\n\n // If we found a target, scroll if needed and calculate the delta\n if (targetDroppable) {\n const viewportHeight = window.innerHeight\n const targetRect = targetDroppable.rect\n const scrollPadding = 20 // Extra padding to ensure element is fully visible\n\n // Check if target droppable is fully visible in viewport\n const isAboveViewport = targetRect.top < scrollPadding\n const isBelowViewport = targetRect.bottom > viewportHeight - scrollPadding\n\n // Scroll to make target visible (using instant scroll for synchronous behavior)\n if (isAboveViewport) {\n const scrollAmount = targetRect.top - scrollPadding\n // don't use smooth scroll here, because it will mess up the delta calculation\n window.scrollBy({ behavior: 'instant', top: scrollAmount })\n } else if (isBelowViewport) {\n const scrollAmount = targetRect.bottom - viewportHeight + scrollPadding\n window.scrollBy({ behavior: 'instant', top: scrollAmount })\n }\n\n // After scroll, recalculate target position (it may have changed due to scroll)\n const newTargetRect = targetDroppable.element.getBoundingClientRect()\n const newTargetCenterX = newTargetRect.left + newTargetRect.width / 2\n const newTargetCenterY = newTargetRect.top + newTargetRect.height / 2\n\n // Calculate delta using current overlay position (which didn't change) and new target position\n const deltaX = newTargetCenterX - currentCenterX\n const deltaY = newTargetCenterY - currentCenterY\n\n // Add delta to currentCoordinates to position overlay's center at target's center\n return {\n x: currentCoordinates.x + deltaX,\n y: currentCoordinates.y + deltaY,\n }\n }\n\n // No valid target found, stay in place\n return currentCoordinates\n}\n\n/**\n * Custom KeyboardSensor that only activates when focus is directly on the\n * draggable element, not on any of its descendants. This allows interactive\n * elements inside draggables (like buttons) to work normally with the keyboard.\n */\nclass DirectFocusKeyboardSensor extends KeyboardSensor {\n static override activators = [\n {\n eventName: 'onKeyDown' as const,\n handler: (\n event: React.KeyboardEvent,\n {\n keyboardCodes = {\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter],\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n },\n onActivation,\n }: KeyboardSensorOptions,\n { active }: { active: { node: React.MutableRefObject<HTMLElement | null> } },\n ) => {\n const { code } = event.nativeEvent\n\n // Only activate if focus is directly on the draggable node, not descendants\n if (event.target !== active.node.current) {\n return false\n }\n\n if (keyboardCodes.start.includes(code)) {\n event.preventDefault()\n onActivation?.({ event: event.nativeEvent })\n return true\n }\n\n return false\n },\n },\n ]\n}\n\nexport function useDashboardSensors() {\n return useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(DirectFocusKeyboardSensor, {\n coordinateGetter: droppableJumpKeyboardCoordinateGetter,\n }),\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -17,7 +17,7 @@ export const getDocumentData = async ({
|
|
|
17
17
|
...rest
|
|
18
18
|
} = req;
|
|
19
19
|
const isTrashedDoc = segments?.[2] === 'trash' && typeof segments?.[3] === 'string' // id exists at segment 3
|
|
20
|
-
|
|
20
|
+
;
|
|
21
21
|
try {
|
|
22
22
|
if (collectionSlug && id) {
|
|
23
23
|
resolvedData = await payload.findByID({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDocumentData.js","names":["sanitizeID","logError","getDocumentData","id","idArg","collectionSlug","globalSlug","locale","payload","req","segments","user","resolvedData","transactionID","rest","isTrashedDoc","findByID","collection","depth","draft","fallbackLocale","code","overrideAccess","trash","findGlobal","slug","err"],"sources":["../../../src/views/Document/getDocumentData.ts"],"sourcesContent":["import { sanitizeID } from '@payloadcms/ui/shared'\nimport {\n type Locale,\n logError,\n type Payload,\n type PayloadRequest,\n type TypedUser,\n type TypeWithID,\n} from 'payload'\n\ntype Args = {\n collectionSlug?: string\n globalSlug?: string\n id?: number | string\n locale?: Locale\n payload: Payload\n req?: PayloadRequest\n segments?: string[]\n user?: TypedUser\n}\n\nexport const getDocumentData = async ({\n id: idArg,\n collectionSlug,\n globalSlug,\n locale,\n payload,\n req,\n segments,\n user,\n}: Args): Promise<null | Record<string, unknown> | TypeWithID> => {\n const id = sanitizeID(idArg)\n let resolvedData: Record<string, unknown> | TypeWithID = null\n const { transactionID, ...rest } = req\n\n const isTrashedDoc = segments?.[2] === 'trash' && typeof segments?.[3] === 'string' // id exists at segment 3\n\n try {\n if (collectionSlug && id) {\n resolvedData = await payload.findByID({\n id,\n collection: collectionSlug,\n depth: 0,\n draft: true,\n fallbackLocale: false,\n locale: locale?.code,\n overrideAccess: false,\n req: {\n ...rest,\n },\n trash: isTrashedDoc ? true : false,\n user,\n })\n }\n\n if (globalSlug) {\n resolvedData = await payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n draft: true,\n fallbackLocale: false,\n locale: locale?.code,\n overrideAccess: false,\n req: {\n ...rest,\n },\n user,\n })\n }\n } catch (err) {\n logError({ err, payload })\n }\n\n return resolvedData\n}\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ;AAC3B,SAEEC,QAAQ,QAKH;AAaP,OAAO,MAAMC,eAAA,GAAkB,MAAAA,CAAO;EACpCC,EAAA,EAAIC,KAAK;EACTC,cAAc;EACdC,UAAU;EACVC,MAAM;EACNC,OAAO;EACPC,GAAG;EACHC,QAAQ;EACRC;AAAI,CACC;EACL,MAAMR,EAAA,GAAKH,UAAA,CAAWI,KAAA;EACtB,IAAIQ,YAAA,GAAqD;EACzD,MAAM;IAAEC,aAAa;IAAE,GAAGC;EAAA,CAAM,GAAGL,GAAA;EAEnC,MAAMM,YAAA,GAAeL,QAAA,GAAW,EAAE,KAAK,WAAW,OAAOA,QAAA,GAAW,EAAE,KAAK,SAAS;
|
|
1
|
+
{"version":3,"file":"getDocumentData.js","names":["sanitizeID","logError","getDocumentData","id","idArg","collectionSlug","globalSlug","locale","payload","req","segments","user","resolvedData","transactionID","rest","isTrashedDoc","findByID","collection","depth","draft","fallbackLocale","code","overrideAccess","trash","findGlobal","slug","err"],"sources":["../../../src/views/Document/getDocumentData.ts"],"sourcesContent":["import { sanitizeID } from '@payloadcms/ui/shared'\nimport {\n type Locale,\n logError,\n type Payload,\n type PayloadRequest,\n type TypedUser,\n type TypeWithID,\n} from 'payload'\n\ntype Args = {\n collectionSlug?: string\n globalSlug?: string\n id?: number | string\n locale?: Locale\n payload: Payload\n req?: PayloadRequest\n segments?: string[]\n user?: TypedUser\n}\n\nexport const getDocumentData = async ({\n id: idArg,\n collectionSlug,\n globalSlug,\n locale,\n payload,\n req,\n segments,\n user,\n}: Args): Promise<null | Record<string, unknown> | TypeWithID> => {\n const id = sanitizeID(idArg)\n let resolvedData: Record<string, unknown> | TypeWithID = null\n const { transactionID, ...rest } = req\n\n const isTrashedDoc = segments?.[2] === 'trash' && typeof segments?.[3] === 'string' // id exists at segment 3\n\n try {\n if (collectionSlug && id) {\n resolvedData = await payload.findByID({\n id,\n collection: collectionSlug,\n depth: 0,\n draft: true,\n fallbackLocale: false,\n locale: locale?.code,\n overrideAccess: false,\n req: {\n ...rest,\n },\n trash: isTrashedDoc ? true : false,\n user,\n })\n }\n\n if (globalSlug) {\n resolvedData = await payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n draft: true,\n fallbackLocale: false,\n locale: locale?.code,\n overrideAccess: false,\n req: {\n ...rest,\n },\n user,\n })\n }\n } catch (err) {\n logError({ err, payload })\n }\n\n return resolvedData\n}\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ;AAC3B,SAEEC,QAAQ,QAKH;AAaP,OAAO,MAAMC,eAAA,GAAkB,MAAAA,CAAO;EACpCC,EAAA,EAAIC,KAAK;EACTC,cAAc;EACdC,UAAU;EACVC,MAAM;EACNC,OAAO;EACPC,GAAG;EACHC,QAAQ;EACRC;AAAI,CACC;EACL,MAAMR,EAAA,GAAKH,UAAA,CAAWI,KAAA;EACtB,IAAIQ,YAAA,GAAqD;EACzD,MAAM;IAAEC,aAAa;IAAE,GAAGC;EAAA,CAAM,GAAGL,GAAA;EAEnC,MAAMM,YAAA,GAAeL,QAAA,GAAW,EAAE,KAAK,WAAW,OAAOA,QAAA,GAAW,EAAE,KAAK,SAAS;AAAA;EAEpF,IAAI;IACF,IAAIL,cAAA,IAAkBF,EAAA,EAAI;MACxBS,YAAA,GAAe,MAAMJ,OAAA,CAAQQ,QAAQ,CAAC;QACpCb,EAAA;QACAc,UAAA,EAAYZ,cAAA;QACZa,KAAA,EAAO;QACPC,KAAA,EAAO;QACPC,cAAA,EAAgB;QAChBb,MAAA,EAAQA,MAAA,EAAQc,IAAA;QAChBC,cAAA,EAAgB;QAChBb,GAAA,EAAK;UACH,GAAGK;QACL;QACAS,KAAA,EAAOR,YAAA,GAAe,OAAO;QAC7BJ;MACF;IACF;IAEA,IAAIL,UAAA,EAAY;MACdM,YAAA,GAAe,MAAMJ,OAAA,CAAQgB,UAAU,CAAC;QACtCC,IAAA,EAAMnB,UAAA;QACNY,KAAA,EAAO;QACPC,KAAA,EAAO;QACPC,cAAA,EAAgB;QAChBb,MAAA,EAAQA,MAAA,EAAQc,IAAA;QAChBC,cAAA,EAAgB;QAChBb,GAAA,EAAK;UACH,GAAGK;QACL;QACAH;MACF;IACF;EACF,EAAE,OAAOe,GAAA,EAAK;IACZzB,QAAA,CAAS;MAAEyB,GAAA;MAAKlB;IAAQ;EAC1B;EAEA,OAAOI,YAAA;AACT","ignoreList":[]}
|
|
@@ -23,7 +23,7 @@ export const getIsLocked = async ({
|
|
|
23
23
|
}
|
|
24
24
|
const where = {};
|
|
25
25
|
const lockDurationDefault = 300 // Default 5 minutes in seconds
|
|
26
|
-
|
|
26
|
+
;
|
|
27
27
|
const lockDuration = typeof entityConfig.lockDocuments === 'object' ? entityConfig.lockDocuments.duration : lockDurationDefault;
|
|
28
28
|
const lockDurationInMilliseconds = lockDuration * 1000;
|
|
29
29
|
const now = new Date().getTime();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getIsLocked.js","names":["sanitizeID","extractID","getIsLocked","id","collectionConfig","globalConfig","isEditing","req","entityConfig","entityHasLockingEnabled","lockDocuments","undefined","payload","collections","isLocked","where","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","now","Date","getTime","and","globalSlug","equals","slug","updatedAt","greater_than","docs","find","collection","depth","overrideAccess","length","currentEditor","user","value","lastUpdateTime"],"sources":["../../../src/views/Document/getIsLocked.ts"],"sourcesContent":["import type {\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedGlobalConfig,\n TypedUser,\n Where,\n} from 'payload'\n\nimport { sanitizeID } from '@payloadcms/ui/shared'\nimport { extractID } from 'payload/shared'\n\ntype Args = {\n collectionConfig?: SanitizedCollectionConfig\n globalConfig?: SanitizedGlobalConfig\n id?: number | string\n isEditing: boolean\n req: PayloadRequest\n}\n\ntype Result = Promise<{\n currentEditor?: TypedUser\n isLocked: boolean\n lastUpdateTime?: number\n}>\n\nexport const getIsLocked = async ({\n id,\n collectionConfig,\n globalConfig,\n isEditing,\n req,\n}: Args): Result => {\n const entityConfig = collectionConfig || globalConfig\n\n const entityHasLockingEnabled =\n entityConfig?.lockDocuments !== undefined ? entityConfig?.lockDocuments : true\n\n // Check if the locked-documents collection exists\n if (!req.payload.collections?.['payload-locked-documents']) {\n // If the collection doesn't exist, locking is not available\n return {\n isLocked: false,\n }\n }\n\n if (!entityHasLockingEnabled || !isEditing) {\n return {\n isLocked: false,\n }\n }\n\n const where: Where = {}\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof entityConfig.lockDocuments === 'object'\n ? entityConfig.lockDocuments.duration\n : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const now = new Date().getTime()\n\n if (globalConfig) {\n where.and = [\n {\n globalSlug: {\n equals: globalConfig.slug,\n },\n },\n {\n updatedAt: {\n greater_than: new Date(now - lockDurationInMilliseconds),\n },\n },\n ]\n } else {\n where.and = [\n {\n 'document.value': {\n equals: sanitizeID(id),\n },\n },\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n updatedAt: {\n greater_than: new Date(now - lockDurationInMilliseconds),\n },\n },\n ]\n }\n\n const { docs } = await req.payload.find({\n collection: 'payload-locked-documents',\n depth: 1,\n overrideAccess: false,\n req,\n where,\n })\n\n if (docs.length > 0) {\n const currentEditor = docs[0].user?.value\n const lastUpdateTime = new Date(docs[0].updatedAt).getTime()\n\n if (extractID(currentEditor) !== req.user.id) {\n return {\n currentEditor,\n isLocked: true,\n lastUpdateTime,\n }\n }\n }\n\n return {\n isLocked: false,\n }\n}\n"],"mappings":"AAQA,SAASA,UAAU,QAAQ;AAC3B,SAASC,SAAS,QAAQ;AAgB1B,OAAO,MAAMC,WAAA,GAAc,MAAAA,CAAO;EAChCC,EAAE;EACFC,gBAAgB;EAChBC,YAAY;EACZC,SAAS;EACTC;AAAG,CACE;EACL,MAAMC,YAAA,GAAeJ,gBAAA,IAAoBC,YAAA;EAEzC,MAAMI,uBAAA,GACJD,YAAA,EAAcE,aAAA,KAAkBC,SAAA,GAAYH,YAAA,EAAcE,aAAA,GAAgB;EAE5E;EACA,IAAI,CAACH,GAAA,CAAIK,OAAO,CAACC,WAAW,GAAG,2BAA2B,EAAE;IAC1D;IACA,OAAO;MACLC,QAAA,EAAU;IACZ;EACF;EAEA,IAAI,CAACL,uBAAA,IAA2B,CAACH,SAAA,EAAW;IAC1C,OAAO;MACLQ,QAAA,EAAU;IACZ;EACF;EAEA,MAAMC,KAAA,GAAe,CAAC;EAEtB,MAAMC,mBAAA,GAAsB,IAAI;
|
|
1
|
+
{"version":3,"file":"getIsLocked.js","names":["sanitizeID","extractID","getIsLocked","id","collectionConfig","globalConfig","isEditing","req","entityConfig","entityHasLockingEnabled","lockDocuments","undefined","payload","collections","isLocked","where","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","now","Date","getTime","and","globalSlug","equals","slug","updatedAt","greater_than","docs","find","collection","depth","overrideAccess","length","currentEditor","user","value","lastUpdateTime"],"sources":["../../../src/views/Document/getIsLocked.ts"],"sourcesContent":["import type {\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedGlobalConfig,\n TypedUser,\n Where,\n} from 'payload'\n\nimport { sanitizeID } from '@payloadcms/ui/shared'\nimport { extractID } from 'payload/shared'\n\ntype Args = {\n collectionConfig?: SanitizedCollectionConfig\n globalConfig?: SanitizedGlobalConfig\n id?: number | string\n isEditing: boolean\n req: PayloadRequest\n}\n\ntype Result = Promise<{\n currentEditor?: TypedUser\n isLocked: boolean\n lastUpdateTime?: number\n}>\n\nexport const getIsLocked = async ({\n id,\n collectionConfig,\n globalConfig,\n isEditing,\n req,\n}: Args): Result => {\n const entityConfig = collectionConfig || globalConfig\n\n const entityHasLockingEnabled =\n entityConfig?.lockDocuments !== undefined ? entityConfig?.lockDocuments : true\n\n // Check if the locked-documents collection exists\n if (!req.payload.collections?.['payload-locked-documents']) {\n // If the collection doesn't exist, locking is not available\n return {\n isLocked: false,\n }\n }\n\n if (!entityHasLockingEnabled || !isEditing) {\n return {\n isLocked: false,\n }\n }\n\n const where: Where = {}\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof entityConfig.lockDocuments === 'object'\n ? entityConfig.lockDocuments.duration\n : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const now = new Date().getTime()\n\n if (globalConfig) {\n where.and = [\n {\n globalSlug: {\n equals: globalConfig.slug,\n },\n },\n {\n updatedAt: {\n greater_than: new Date(now - lockDurationInMilliseconds),\n },\n },\n ]\n } else {\n where.and = [\n {\n 'document.value': {\n equals: sanitizeID(id),\n },\n },\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n updatedAt: {\n greater_than: new Date(now - lockDurationInMilliseconds),\n },\n },\n ]\n }\n\n const { docs } = await req.payload.find({\n collection: 'payload-locked-documents',\n depth: 1,\n overrideAccess: false,\n req,\n where,\n })\n\n if (docs.length > 0) {\n const currentEditor = docs[0].user?.value\n const lastUpdateTime = new Date(docs[0].updatedAt).getTime()\n\n if (extractID(currentEditor) !== req.user.id) {\n return {\n currentEditor,\n isLocked: true,\n lastUpdateTime,\n }\n }\n }\n\n return {\n isLocked: false,\n }\n}\n"],"mappings":"AAQA,SAASA,UAAU,QAAQ;AAC3B,SAASC,SAAS,QAAQ;AAgB1B,OAAO,MAAMC,WAAA,GAAc,MAAAA,CAAO;EAChCC,EAAE;EACFC,gBAAgB;EAChBC,YAAY;EACZC,SAAS;EACTC;AAAG,CACE;EACL,MAAMC,YAAA,GAAeJ,gBAAA,IAAoBC,YAAA;EAEzC,MAAMI,uBAAA,GACJD,YAAA,EAAcE,aAAA,KAAkBC,SAAA,GAAYH,YAAA,EAAcE,aAAA,GAAgB;EAE5E;EACA,IAAI,CAACH,GAAA,CAAIK,OAAO,CAACC,WAAW,GAAG,2BAA2B,EAAE;IAC1D;IACA,OAAO;MACLC,QAAA,EAAU;IACZ;EACF;EAEA,IAAI,CAACL,uBAAA,IAA2B,CAACH,SAAA,EAAW;IAC1C,OAAO;MACLQ,QAAA,EAAU;IACZ;EACF;EAEA,MAAMC,KAAA,GAAe,CAAC;EAEtB,MAAMC,mBAAA,GAAsB,IAAI;AAAA;EAChC,MAAMC,YAAA,GACJ,OAAOT,YAAA,CAAaE,aAAa,KAAK,WAClCF,YAAA,CAAaE,aAAa,CAACQ,QAAQ,GACnCF,mBAAA;EACN,MAAMG,0BAAA,GAA6BF,YAAA,GAAe;EAElD,MAAMG,GAAA,GAAM,IAAIC,IAAA,GAAOC,OAAO;EAE9B,IAAIjB,YAAA,EAAc;IAChBU,KAAA,CAAMQ,GAAG,GAAG,CACV;MACEC,UAAA,EAAY;QACVC,MAAA,EAAQpB,YAAA,CAAaqB;MACvB;IACF,GACA;MACEC,SAAA,EAAW;QACTC,YAAA,EAAc,IAAIP,IAAA,CAAKD,GAAA,GAAMD,0BAAA;MAC/B;IACF,EACD;EACH,OAAO;IACLJ,KAAA,CAAMQ,GAAG,GAAG,CACV;MACE,kBAAkB;QAChBE,MAAA,EAAQzB,UAAA,CAAWG,EAAA;MACrB;IACF,GACA;MACE,uBAAuB;QACrBsB,MAAA,EAAQrB,gBAAA,CAAiBsB;MAC3B;IACF,GACA;MACEC,SAAA,EAAW;QACTC,YAAA,EAAc,IAAIP,IAAA,CAAKD,GAAA,GAAMD,0BAAA;MAC/B;IACF,EACD;EACH;EAEA,MAAM;IAAEU;EAAI,CAAE,GAAG,MAAMtB,GAAA,CAAIK,OAAO,CAACkB,IAAI,CAAC;IACtCC,UAAA,EAAY;IACZC,KAAA,EAAO;IACPC,cAAA,EAAgB;IAChB1B,GAAA;IACAQ;EACF;EAEA,IAAIc,IAAA,CAAKK,MAAM,GAAG,GAAG;IACnB,MAAMC,aAAA,GAAgBN,IAAI,CAAC,EAAE,CAACO,IAAI,EAAEC,KAAA;IACpC,MAAMC,cAAA,GAAiB,IAAIjB,IAAA,CAAKQ,IAAI,CAAC,EAAE,CAACF,SAAS,EAAEL,OAAO;IAE1D,IAAIrB,SAAA,CAAUkC,aAAA,MAAmB5B,GAAA,CAAI6B,IAAI,CAACjC,EAAE,EAAE;MAC5C,OAAO;QACLgC,aAAA;QACArB,QAAA,EAAU;QACVwB;MACF;IACF;EACF;EAEA,OAAO;IACLxB,QAAA,EAAU;EACZ;AACF","ignoreList":[]}
|
|
@@ -182,7 +182,7 @@ const buildVersionField = ({
|
|
|
182
182
|
if (field?.type === 'richText') {
|
|
183
183
|
if (!field?.editor) {
|
|
184
184
|
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
|
|
185
|
-
|
|
185
|
+
;
|
|
186
186
|
}
|
|
187
187
|
if (typeof field?.editor === 'function') {
|
|
188
188
|
throw new Error('Attempted to access unsanitized rich text editor.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildVersionFields.js","names":["RenderServerComponent","dequal","MissingEditorProp","fieldIsID","fieldShouldBeLocalized","getFieldPaths","getUniqueListBy","tabHasName","diffComponents","buildVersionFields","clientSchemaMap","customDiffComponents","entitySlug","fields","fieldsPermissions","i18n","modifiedOnly","nestingLevel","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","req","selectedLocales","versionFromSiblingData","versionToSiblingData","versionFields","fieldIndex","field","indexPath","path","schemaPath","index","clientField","get","payload","logger","error","clientFieldKey","clientSchemaMapKeys","Array","from","keys","msg","Error","versionField","isLocalized","fieldName","name","valueFrom","valueTo","fieldByLocale","locale","localizedVersionField","buildVersionField","parentFieldsPermissions","baseVersionField","localized","Object","length","push","hasReadPermission","fieldPermissions","undefined","read","CustomComponent","type","editor","CellComponent","DiffComponent","admin","components","Diff","DefaultComponent","tabs","tabIndex","tab","isNamedTab","tabAsField","tabIndexPath","tabPath","tabSchemaPath","tabFieldsPermissions","tabPermissions","tabVersion","label","t","subFieldsPermissions","maxLength","Math","max","isArray","rows","i","fromRow","toRow","blockSlugToMatch","blockType","toBlock","blocks","blockReferences","find","block","slug","fromBlockSlugToMatch","fromBlock","blockFieldsPermissions","permissionsBlockSpecific","clientDiffProps","comparisonValue","diffMethod","versionValue","serverDiffProps","clientProps","Component","Fallback","importMap","key","serverProps"],"sources":["../../../../src/views/Version/RenderFieldsToDiff/buildVersionFields.tsx"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\n\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'\nimport { dequal } from 'dequal/lite'\nimport {\n type BaseVersionField,\n type ClientField,\n type ClientFieldSchemaMap,\n type Field,\n type FieldDiffClientProps,\n type FieldDiffServerProps,\n type FieldTypes,\n type FlattenedBlock,\n MissingEditorProp,\n type PayloadComponent,\n type PayloadRequest,\n type SanitizedFieldPermissions,\n type SanitizedFieldsPermissions,\n type VersionField,\n} from 'payload'\nimport {\n fieldIsID,\n fieldShouldBeLocalized,\n getFieldPaths,\n getUniqueListBy,\n tabHasName,\n} from 'payload/shared'\n\nimport { diffComponents } from './fields/index.js'\n\nexport type BuildVersionFieldsArgs = {\n clientSchemaMap: ClientFieldSchemaMap\n customDiffComponents: Partial<\n Record<FieldTypes, PayloadComponent<FieldDiffServerProps, FieldDiffClientProps>>\n >\n entitySlug: string\n fields: Field[]\n fieldsPermissions: SanitizedFieldsPermissions\n i18n: I18nClient\n modifiedOnly: boolean\n nestingLevel?: number\n parentIndexPath: string\n parentIsLocalized: boolean\n parentPath: string\n parentSchemaPath: string\n req: PayloadRequest\n selectedLocales: string[]\n versionFromSiblingData: object\n versionToSiblingData: object\n}\n\n/**\n * Build up an object that contains rendered diff components for each field.\n * This is then sent to the client to be rendered.\n *\n * Here, the server is responsible for traversing through the document data and building up this\n * version state object.\n */\nexport const buildVersionFields = ({\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n fields,\n fieldsPermissions,\n i18n,\n modifiedOnly,\n nestingLevel = 0,\n parentIndexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n req,\n selectedLocales,\n versionFromSiblingData,\n versionToSiblingData,\n}: BuildVersionFieldsArgs): {\n versionFields: VersionField[]\n} => {\n const versionFields: VersionField[] = []\n let fieldIndex = -1\n\n for (const field of fields) {\n fieldIndex++\n\n if (fieldIsID(field)) {\n continue\n }\n\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: fieldIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n const clientField = clientSchemaMap.get(entitySlug + '.' + schemaPath)\n\n if (!clientField) {\n req.payload.logger.error({\n clientFieldKey: entitySlug + '.' + schemaPath,\n clientSchemaMapKeys: Array.from(clientSchemaMap.keys()),\n msg: 'No client field found for ' + entitySlug + '.' + schemaPath,\n parentPath,\n parentSchemaPath,\n path,\n schemaPath,\n })\n throw new Error('No client field found for ' + entitySlug + '.' + schemaPath)\n }\n\n const versionField: VersionField = {}\n const isLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n const fieldName: null | string = 'name' in field ? field.name : null\n\n const valueFrom = fieldName ? versionFromSiblingData?.[fieldName] : versionFromSiblingData\n const valueTo = fieldName ? versionToSiblingData?.[fieldName] : versionToSiblingData\n\n if (isLocalized) {\n versionField.fieldByLocale = {}\n\n for (const locale of selectedLocales) {\n const localizedVersionField = buildVersionField({\n clientField: clientField as ClientField,\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n field,\n i18n,\n indexPath,\n locale,\n modifiedOnly,\n nestingLevel,\n parentFieldsPermissions: fieldsPermissions,\n parentIsLocalized: true,\n parentPath,\n parentSchemaPath,\n path,\n req,\n schemaPath,\n selectedLocales,\n valueFrom: valueFrom?.[locale],\n valueTo: valueTo?.[locale],\n })\n if (localizedVersionField) {\n versionField.fieldByLocale[locale] = localizedVersionField\n }\n }\n } else {\n const baseVersionField = buildVersionField({\n clientField: clientField as ClientField,\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n field,\n i18n,\n indexPath,\n modifiedOnly,\n nestingLevel,\n parentFieldsPermissions: fieldsPermissions,\n parentIsLocalized: parentIsLocalized || ('localized' in field && field.localized),\n parentPath,\n parentSchemaPath,\n path,\n req,\n schemaPath,\n selectedLocales,\n valueFrom,\n valueTo,\n })\n\n if (baseVersionField) {\n versionField.field = baseVersionField\n }\n }\n\n if (\n versionField.field ||\n (versionField.fieldByLocale && Object.keys(versionField.fieldByLocale).length)\n ) {\n versionFields.push(versionField)\n }\n }\n\n return {\n versionFields,\n }\n}\n\nconst buildVersionField = ({\n clientField,\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n field,\n i18n,\n indexPath,\n locale,\n modifiedOnly,\n nestingLevel,\n parentFieldsPermissions,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n path,\n req,\n schemaPath,\n selectedLocales,\n valueFrom,\n valueTo,\n}: {\n clientField: ClientField\n field: Field\n indexPath: string\n locale?: string\n modifiedOnly?: boolean\n nestingLevel: number\n parentFieldsPermissions: SanitizedFieldsPermissions\n parentIsLocalized: boolean\n path: string\n schemaPath: string\n valueFrom: unknown\n valueTo: unknown\n} & Omit<\n BuildVersionFieldsArgs,\n | 'fields'\n | 'fieldsPermissions'\n | 'parentIndexPath'\n | 'versionFromSiblingData'\n | 'versionToSiblingData'\n>): BaseVersionField | null => {\n let hasReadPermission: boolean = false\n let fieldPermissions: SanitizedFieldPermissions | undefined = undefined\n\n if (typeof parentFieldsPermissions === 'boolean') {\n hasReadPermission = parentFieldsPermissions\n fieldPermissions = parentFieldsPermissions\n } else {\n if ('name' in field) {\n fieldPermissions = parentFieldsPermissions?.[field.name]\n if (typeof fieldPermissions === 'boolean') {\n hasReadPermission = fieldPermissions\n } else if (typeof fieldPermissions?.read === 'boolean') {\n hasReadPermission = fieldPermissions.read\n }\n } else {\n // If the field is unnamed and parentFieldsPermissions is an object, its sub-fields will decide their read permissions state.\n // As far as this field is concerned, we are allowed to read it, as we need to reach its sub-fields to determine their read permissions.\n hasReadPermission = true\n }\n }\n\n if (!hasReadPermission) {\n // HasReadPermission is only valid if the field has a name. E.g. for a tabs field it would incorrectly return `false`.\n return null\n }\n\n if (modifiedOnly && dequal(valueFrom, valueTo)) {\n return null\n }\n\n let CustomComponent = customDiffComponents?.[field.type]\n if (field?.type === '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 (field.editor.CellComponent) {\n CustomComponent = field.editor.DiffComponent\n }\n }\n if (field?.admin?.components?.Diff) {\n CustomComponent = field.admin.components.Diff\n }\n\n const DefaultComponent = diffComponents?.[field.type]\n\n const baseVersionField: BaseVersionField = {\n type: field.type,\n fields: [],\n path,\n schemaPath,\n }\n\n if (field.type === 'tabs' && 'tabs' in field) {\n baseVersionField.tabs = []\n let tabIndex = -1\n for (const tab of field.tabs) {\n tabIndex++\n const isNamedTab = tabHasName(tab)\n\n const tabAsField = { ...tab, type: 'tab' }\n\n const {\n indexPath: tabIndexPath,\n path: tabPath,\n schemaPath: tabSchemaPath,\n } = getFieldPaths({\n field: tabAsField,\n index: tabIndex,\n parentIndexPath: indexPath,\n parentPath: path,\n parentSchemaPath: schemaPath,\n })\n\n let tabFieldsPermissions: SanitizedFieldsPermissions = undefined\n\n // The tabs field does not have its own permissions as it's unnamed => use parentFieldsPermissions\n if (typeof parentFieldsPermissions === 'boolean') {\n tabFieldsPermissions = parentFieldsPermissions\n } else {\n if ('name' in tab) {\n const tabPermissions = parentFieldsPermissions?.[tab.name]\n if (typeof tabPermissions === 'boolean') {\n tabFieldsPermissions = tabPermissions\n } else {\n tabFieldsPermissions = tabPermissions?.fields\n }\n } else {\n tabFieldsPermissions = parentFieldsPermissions\n }\n }\n\n const tabVersion = {\n name: 'name' in tab ? tab.name : null,\n fields: buildVersionFields({\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n fields: tab.fields,\n fieldsPermissions: tabFieldsPermissions,\n i18n,\n modifiedOnly,\n nestingLevel: nestingLevel + 1,\n parentIndexPath: isNamedTab ? '' : tabIndexPath,\n parentIsLocalized: parentIsLocalized || tab.localized,\n parentPath: isNamedTab ? tabPath : 'name' in field ? path : parentPath,\n parentSchemaPath: tabSchemaPath,\n req,\n selectedLocales,\n versionFromSiblingData: 'name' in tab ? valueFrom?.[tab.name] : valueFrom,\n versionToSiblingData: 'name' in tab ? valueTo?.[tab.name] : valueTo,\n }).versionFields,\n label: typeof tab.label === 'function' ? tab.label({ i18n, t: i18n.t }) : tab.label,\n }\n if (tabVersion?.fields?.length) {\n baseVersionField.tabs.push(tabVersion)\n }\n }\n\n if (modifiedOnly && !baseVersionField.tabs.length) {\n return null\n }\n } // At this point, we are dealing with a `row`, `collapsible`, array`, etc\n else if ('fields' in field) {\n let subFieldsPermissions: SanitizedFieldsPermissions = undefined\n\n if ('name' in field && typeof fieldPermissions !== 'undefined') {\n // Named fields like arrays\n subFieldsPermissions =\n typeof fieldPermissions === 'boolean' ? fieldPermissions : fieldPermissions.fields\n } else {\n // Unnamed fields like collapsible and row inherit directly from parent permissions\n subFieldsPermissions = parentFieldsPermissions\n }\n\n if (field.type === 'array' && (valueTo || valueFrom)) {\n const maxLength = Math.max(\n Array.isArray(valueTo) ? valueTo.length : 0,\n Array.isArray(valueFrom) ? valueFrom.length : 0,\n )\n baseVersionField.rows = []\n\n for (let i = 0; i < maxLength; i++) {\n const fromRow = (Array.isArray(valueFrom) && valueFrom?.[i]) || {}\n const toRow = (Array.isArray(valueTo) && valueTo?.[i]) || {}\n\n const versionFields = buildVersionFields({\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n fields: field.fields,\n fieldsPermissions: subFieldsPermissions,\n i18n,\n modifiedOnly,\n nestingLevel: nestingLevel + 1,\n parentIndexPath: 'name' in field ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: ('name' in field ? path : parentPath) + '.' + i,\n parentSchemaPath: schemaPath,\n req,\n selectedLocales,\n versionFromSiblingData: fromRow,\n versionToSiblingData: toRow,\n }).versionFields\n\n if (versionFields?.length) {\n baseVersionField.rows[i] = versionFields\n }\n }\n\n if (!baseVersionField.rows?.length && modifiedOnly) {\n return null\n }\n } else {\n baseVersionField.fields = buildVersionFields({\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n fields: field.fields,\n fieldsPermissions: subFieldsPermissions,\n i18n,\n modifiedOnly,\n nestingLevel: field.type !== 'row' ? nestingLevel + 1 : nestingLevel,\n parentIndexPath: 'name' in field ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || ('localized' in field && field.localized),\n parentPath: 'name' in field ? path : parentPath,\n parentSchemaPath: schemaPath,\n req,\n selectedLocales,\n versionFromSiblingData: valueFrom as object,\n versionToSiblingData: valueTo as object,\n }).versionFields\n\n if (modifiedOnly && !baseVersionField.fields?.length) {\n return null\n }\n }\n } else if (field.type === 'blocks') {\n baseVersionField.rows = []\n\n const maxLength = Math.max(\n Array.isArray(valueTo) ? valueTo.length : 0,\n Array.isArray(valueFrom) ? valueFrom.length : 0,\n )\n\n for (let i = 0; i < maxLength; i++) {\n const fromRow = (Array.isArray(valueFrom) && valueFrom?.[i]) || {}\n const toRow = (Array.isArray(valueTo) && valueTo?.[i]) || {}\n\n const blockSlugToMatch: string = toRow?.blockType ?? fromRow?.blockType\n const toBlock =\n req.payload.blocks[blockSlugToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (block) => typeof block !== 'string' && block.slug === blockSlugToMatch,\n ) as FlattenedBlock | undefined)\n\n let fields = []\n\n if (toRow.blockType === fromRow.blockType) {\n fields = toBlock.fields\n } else {\n const fromBlockSlugToMatch: string = toRow?.blockType ?? fromRow?.blockType\n\n const fromBlock =\n req.payload.blocks[fromBlockSlugToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (block) => typeof block !== 'string' && block.slug === fromBlockSlugToMatch,\n ) as FlattenedBlock | undefined)\n\n if (fromBlock) {\n fields = getUniqueListBy<Field>([...toBlock.fields, ...fromBlock.fields], 'name')\n } else {\n fields = toBlock.fields\n }\n }\n\n let blockFieldsPermissions: SanitizedFieldsPermissions = undefined\n\n // fieldPermissions will be set here, as the blocks field has a name\n if (typeof fieldPermissions === 'boolean') {\n blockFieldsPermissions = fieldPermissions\n } else if (typeof fieldPermissions?.blocks === 'boolean') {\n blockFieldsPermissions = fieldPermissions.blocks\n } else {\n const permissionsBlockSpecific = fieldPermissions?.blocks?.[blockSlugToMatch]\n if (typeof permissionsBlockSpecific === 'boolean') {\n blockFieldsPermissions = permissionsBlockSpecific\n } else {\n blockFieldsPermissions = permissionsBlockSpecific?.fields\n }\n }\n\n const versionFields = buildVersionFields({\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n fields,\n fieldsPermissions: blockFieldsPermissions,\n i18n,\n modifiedOnly,\n nestingLevel: nestingLevel + 1,\n parentIndexPath: 'name' in field ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || ('localized' in field && field.localized),\n parentPath: ('name' in field ? path : parentPath) + '.' + i,\n parentSchemaPath: schemaPath + '.' + toBlock.slug,\n req,\n selectedLocales,\n versionFromSiblingData: fromRow,\n versionToSiblingData: toRow,\n }).versionFields\n\n if (versionFields?.length) {\n baseVersionField.rows[i] = versionFields\n }\n }\n\n if (!baseVersionField.rows?.length && modifiedOnly) {\n return null\n }\n }\n\n const clientDiffProps: FieldDiffClientProps = {\n baseVersionField: {\n ...baseVersionField,\n CustomComponent: undefined,\n },\n /**\n * TODO: Change to valueFrom in 4.0\n */\n comparisonValue: valueFrom,\n /**\n * @deprecated remove in 4.0. Each field should handle its own diffing logic\n */\n diffMethod: 'diffWordsWithSpace',\n field: clientField,\n fieldPermissions:\n typeof fieldPermissions === 'undefined' ? parentFieldsPermissions : fieldPermissions,\n parentIsLocalized,\n\n nestingLevel: nestingLevel ? nestingLevel : undefined,\n /**\n * TODO: Change to valueTo in 4.0\n */\n versionValue: valueTo,\n }\n if (locale) {\n clientDiffProps.locale = locale\n }\n\n const serverDiffProps: FieldDiffServerProps = {\n ...clientDiffProps,\n clientField,\n field,\n i18n,\n req,\n selectedLocales,\n }\n\n baseVersionField.CustomComponent = RenderServerComponent({\n clientProps: clientDiffProps,\n Component: CustomComponent,\n Fallback: DefaultComponent,\n importMap: req.payload.importMap,\n key: 'diff component',\n serverProps: serverDiffProps,\n })\n\n return baseVersionField\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"buildVersionFields.js","names":["RenderServerComponent","dequal","MissingEditorProp","fieldIsID","fieldShouldBeLocalized","getFieldPaths","getUniqueListBy","tabHasName","diffComponents","buildVersionFields","clientSchemaMap","customDiffComponents","entitySlug","fields","fieldsPermissions","i18n","modifiedOnly","nestingLevel","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","req","selectedLocales","versionFromSiblingData","versionToSiblingData","versionFields","fieldIndex","field","indexPath","path","schemaPath","index","clientField","get","payload","logger","error","clientFieldKey","clientSchemaMapKeys","Array","from","keys","msg","Error","versionField","isLocalized","fieldName","name","valueFrom","valueTo","fieldByLocale","locale","localizedVersionField","buildVersionField","parentFieldsPermissions","baseVersionField","localized","Object","length","push","hasReadPermission","fieldPermissions","undefined","read","CustomComponent","type","editor","CellComponent","DiffComponent","admin","components","Diff","DefaultComponent","tabs","tabIndex","tab","isNamedTab","tabAsField","tabIndexPath","tabPath","tabSchemaPath","tabFieldsPermissions","tabPermissions","tabVersion","label","t","subFieldsPermissions","maxLength","Math","max","isArray","rows","i","fromRow","toRow","blockSlugToMatch","blockType","toBlock","blocks","blockReferences","find","block","slug","fromBlockSlugToMatch","fromBlock","blockFieldsPermissions","permissionsBlockSpecific","clientDiffProps","comparisonValue","diffMethod","versionValue","serverDiffProps","clientProps","Component","Fallback","importMap","key","serverProps"],"sources":["../../../../src/views/Version/RenderFieldsToDiff/buildVersionFields.tsx"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\n\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'\nimport { dequal } from 'dequal/lite'\nimport {\n type BaseVersionField,\n type ClientField,\n type ClientFieldSchemaMap,\n type Field,\n type FieldDiffClientProps,\n type FieldDiffServerProps,\n type FieldTypes,\n type FlattenedBlock,\n MissingEditorProp,\n type PayloadComponent,\n type PayloadRequest,\n type SanitizedFieldPermissions,\n type SanitizedFieldsPermissions,\n type VersionField,\n} from 'payload'\nimport {\n fieldIsID,\n fieldShouldBeLocalized,\n getFieldPaths,\n getUniqueListBy,\n tabHasName,\n} from 'payload/shared'\n\nimport { diffComponents } from './fields/index.js'\n\nexport type BuildVersionFieldsArgs = {\n clientSchemaMap: ClientFieldSchemaMap\n customDiffComponents: Partial<\n Record<FieldTypes, PayloadComponent<FieldDiffServerProps, FieldDiffClientProps>>\n >\n entitySlug: string\n fields: Field[]\n fieldsPermissions: SanitizedFieldsPermissions\n i18n: I18nClient\n modifiedOnly: boolean\n nestingLevel?: number\n parentIndexPath: string\n parentIsLocalized: boolean\n parentPath: string\n parentSchemaPath: string\n req: PayloadRequest\n selectedLocales: string[]\n versionFromSiblingData: object\n versionToSiblingData: object\n}\n\n/**\n * Build up an object that contains rendered diff components for each field.\n * This is then sent to the client to be rendered.\n *\n * Here, the server is responsible for traversing through the document data and building up this\n * version state object.\n */\nexport const buildVersionFields = ({\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n fields,\n fieldsPermissions,\n i18n,\n modifiedOnly,\n nestingLevel = 0,\n parentIndexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n req,\n selectedLocales,\n versionFromSiblingData,\n versionToSiblingData,\n}: BuildVersionFieldsArgs): {\n versionFields: VersionField[]\n} => {\n const versionFields: VersionField[] = []\n let fieldIndex = -1\n\n for (const field of fields) {\n fieldIndex++\n\n if (fieldIsID(field)) {\n continue\n }\n\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: fieldIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n const clientField = clientSchemaMap.get(entitySlug + '.' + schemaPath)\n\n if (!clientField) {\n req.payload.logger.error({\n clientFieldKey: entitySlug + '.' + schemaPath,\n clientSchemaMapKeys: Array.from(clientSchemaMap.keys()),\n msg: 'No client field found for ' + entitySlug + '.' + schemaPath,\n parentPath,\n parentSchemaPath,\n path,\n schemaPath,\n })\n throw new Error('No client field found for ' + entitySlug + '.' + schemaPath)\n }\n\n const versionField: VersionField = {}\n const isLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n const fieldName: null | string = 'name' in field ? field.name : null\n\n const valueFrom = fieldName ? versionFromSiblingData?.[fieldName] : versionFromSiblingData\n const valueTo = fieldName ? versionToSiblingData?.[fieldName] : versionToSiblingData\n\n if (isLocalized) {\n versionField.fieldByLocale = {}\n\n for (const locale of selectedLocales) {\n const localizedVersionField = buildVersionField({\n clientField: clientField as ClientField,\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n field,\n i18n,\n indexPath,\n locale,\n modifiedOnly,\n nestingLevel,\n parentFieldsPermissions: fieldsPermissions,\n parentIsLocalized: true,\n parentPath,\n parentSchemaPath,\n path,\n req,\n schemaPath,\n selectedLocales,\n valueFrom: valueFrom?.[locale],\n valueTo: valueTo?.[locale],\n })\n if (localizedVersionField) {\n versionField.fieldByLocale[locale] = localizedVersionField\n }\n }\n } else {\n const baseVersionField = buildVersionField({\n clientField: clientField as ClientField,\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n field,\n i18n,\n indexPath,\n modifiedOnly,\n nestingLevel,\n parentFieldsPermissions: fieldsPermissions,\n parentIsLocalized: parentIsLocalized || ('localized' in field && field.localized),\n parentPath,\n parentSchemaPath,\n path,\n req,\n schemaPath,\n selectedLocales,\n valueFrom,\n valueTo,\n })\n\n if (baseVersionField) {\n versionField.field = baseVersionField\n }\n }\n\n if (\n versionField.field ||\n (versionField.fieldByLocale && Object.keys(versionField.fieldByLocale).length)\n ) {\n versionFields.push(versionField)\n }\n }\n\n return {\n versionFields,\n }\n}\n\nconst buildVersionField = ({\n clientField,\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n field,\n i18n,\n indexPath,\n locale,\n modifiedOnly,\n nestingLevel,\n parentFieldsPermissions,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n path,\n req,\n schemaPath,\n selectedLocales,\n valueFrom,\n valueTo,\n}: {\n clientField: ClientField\n field: Field\n indexPath: string\n locale?: string\n modifiedOnly?: boolean\n nestingLevel: number\n parentFieldsPermissions: SanitizedFieldsPermissions\n parentIsLocalized: boolean\n path: string\n schemaPath: string\n valueFrom: unknown\n valueTo: unknown\n} & Omit<\n BuildVersionFieldsArgs,\n | 'fields'\n | 'fieldsPermissions'\n | 'parentIndexPath'\n | 'versionFromSiblingData'\n | 'versionToSiblingData'\n>): BaseVersionField | null => {\n let hasReadPermission: boolean = false\n let fieldPermissions: SanitizedFieldPermissions | undefined = undefined\n\n if (typeof parentFieldsPermissions === 'boolean') {\n hasReadPermission = parentFieldsPermissions\n fieldPermissions = parentFieldsPermissions\n } else {\n if ('name' in field) {\n fieldPermissions = parentFieldsPermissions?.[field.name]\n if (typeof fieldPermissions === 'boolean') {\n hasReadPermission = fieldPermissions\n } else if (typeof fieldPermissions?.read === 'boolean') {\n hasReadPermission = fieldPermissions.read\n }\n } else {\n // If the field is unnamed and parentFieldsPermissions is an object, its sub-fields will decide their read permissions state.\n // As far as this field is concerned, we are allowed to read it, as we need to reach its sub-fields to determine their read permissions.\n hasReadPermission = true\n }\n }\n\n if (!hasReadPermission) {\n // HasReadPermission is only valid if the field has a name. E.g. for a tabs field it would incorrectly return `false`.\n return null\n }\n\n if (modifiedOnly && dequal(valueFrom, valueTo)) {\n return null\n }\n\n let CustomComponent = customDiffComponents?.[field.type]\n if (field?.type === '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 (field.editor.CellComponent) {\n CustomComponent = field.editor.DiffComponent\n }\n }\n if (field?.admin?.components?.Diff) {\n CustomComponent = field.admin.components.Diff\n }\n\n const DefaultComponent = diffComponents?.[field.type]\n\n const baseVersionField: BaseVersionField = {\n type: field.type,\n fields: [],\n path,\n schemaPath,\n }\n\n if (field.type === 'tabs' && 'tabs' in field) {\n baseVersionField.tabs = []\n let tabIndex = -1\n for (const tab of field.tabs) {\n tabIndex++\n const isNamedTab = tabHasName(tab)\n\n const tabAsField = { ...tab, type: 'tab' }\n\n const {\n indexPath: tabIndexPath,\n path: tabPath,\n schemaPath: tabSchemaPath,\n } = getFieldPaths({\n field: tabAsField,\n index: tabIndex,\n parentIndexPath: indexPath,\n parentPath: path,\n parentSchemaPath: schemaPath,\n })\n\n let tabFieldsPermissions: SanitizedFieldsPermissions = undefined\n\n // The tabs field does not have its own permissions as it's unnamed => use parentFieldsPermissions\n if (typeof parentFieldsPermissions === 'boolean') {\n tabFieldsPermissions = parentFieldsPermissions\n } else {\n if ('name' in tab) {\n const tabPermissions = parentFieldsPermissions?.[tab.name]\n if (typeof tabPermissions === 'boolean') {\n tabFieldsPermissions = tabPermissions\n } else {\n tabFieldsPermissions = tabPermissions?.fields\n }\n } else {\n tabFieldsPermissions = parentFieldsPermissions\n }\n }\n\n const tabVersion = {\n name: 'name' in tab ? tab.name : null,\n fields: buildVersionFields({\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n fields: tab.fields,\n fieldsPermissions: tabFieldsPermissions,\n i18n,\n modifiedOnly,\n nestingLevel: nestingLevel + 1,\n parentIndexPath: isNamedTab ? '' : tabIndexPath,\n parentIsLocalized: parentIsLocalized || tab.localized,\n parentPath: isNamedTab ? tabPath : 'name' in field ? path : parentPath,\n parentSchemaPath: tabSchemaPath,\n req,\n selectedLocales,\n versionFromSiblingData: 'name' in tab ? valueFrom?.[tab.name] : valueFrom,\n versionToSiblingData: 'name' in tab ? valueTo?.[tab.name] : valueTo,\n }).versionFields,\n label: typeof tab.label === 'function' ? tab.label({ i18n, t: i18n.t }) : tab.label,\n }\n if (tabVersion?.fields?.length) {\n baseVersionField.tabs.push(tabVersion)\n }\n }\n\n if (modifiedOnly && !baseVersionField.tabs.length) {\n return null\n }\n } // At this point, we are dealing with a `row`, `collapsible`, array`, etc\n else if ('fields' in field) {\n let subFieldsPermissions: SanitizedFieldsPermissions = undefined\n\n if ('name' in field && typeof fieldPermissions !== 'undefined') {\n // Named fields like arrays\n subFieldsPermissions =\n typeof fieldPermissions === 'boolean' ? fieldPermissions : fieldPermissions.fields\n } else {\n // Unnamed fields like collapsible and row inherit directly from parent permissions\n subFieldsPermissions = parentFieldsPermissions\n }\n\n if (field.type === 'array' && (valueTo || valueFrom)) {\n const maxLength = Math.max(\n Array.isArray(valueTo) ? valueTo.length : 0,\n Array.isArray(valueFrom) ? valueFrom.length : 0,\n )\n baseVersionField.rows = []\n\n for (let i = 0; i < maxLength; i++) {\n const fromRow = (Array.isArray(valueFrom) && valueFrom?.[i]) || {}\n const toRow = (Array.isArray(valueTo) && valueTo?.[i]) || {}\n\n const versionFields = buildVersionFields({\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n fields: field.fields,\n fieldsPermissions: subFieldsPermissions,\n i18n,\n modifiedOnly,\n nestingLevel: nestingLevel + 1,\n parentIndexPath: 'name' in field ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: ('name' in field ? path : parentPath) + '.' + i,\n parentSchemaPath: schemaPath,\n req,\n selectedLocales,\n versionFromSiblingData: fromRow,\n versionToSiblingData: toRow,\n }).versionFields\n\n if (versionFields?.length) {\n baseVersionField.rows[i] = versionFields\n }\n }\n\n if (!baseVersionField.rows?.length && modifiedOnly) {\n return null\n }\n } else {\n baseVersionField.fields = buildVersionFields({\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n fields: field.fields,\n fieldsPermissions: subFieldsPermissions,\n i18n,\n modifiedOnly,\n nestingLevel: field.type !== 'row' ? nestingLevel + 1 : nestingLevel,\n parentIndexPath: 'name' in field ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || ('localized' in field && field.localized),\n parentPath: 'name' in field ? path : parentPath,\n parentSchemaPath: schemaPath,\n req,\n selectedLocales,\n versionFromSiblingData: valueFrom as object,\n versionToSiblingData: valueTo as object,\n }).versionFields\n\n if (modifiedOnly && !baseVersionField.fields?.length) {\n return null\n }\n }\n } else if (field.type === 'blocks') {\n baseVersionField.rows = []\n\n const maxLength = Math.max(\n Array.isArray(valueTo) ? valueTo.length : 0,\n Array.isArray(valueFrom) ? valueFrom.length : 0,\n )\n\n for (let i = 0; i < maxLength; i++) {\n const fromRow = (Array.isArray(valueFrom) && valueFrom?.[i]) || {}\n const toRow = (Array.isArray(valueTo) && valueTo?.[i]) || {}\n\n const blockSlugToMatch: string = toRow?.blockType ?? fromRow?.blockType\n const toBlock =\n req.payload.blocks[blockSlugToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (block) => typeof block !== 'string' && block.slug === blockSlugToMatch,\n ) as FlattenedBlock | undefined)\n\n let fields = []\n\n if (toRow.blockType === fromRow.blockType) {\n fields = toBlock.fields\n } else {\n const fromBlockSlugToMatch: string = toRow?.blockType ?? fromRow?.blockType\n\n const fromBlock =\n req.payload.blocks[fromBlockSlugToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (block) => typeof block !== 'string' && block.slug === fromBlockSlugToMatch,\n ) as FlattenedBlock | undefined)\n\n if (fromBlock) {\n fields = getUniqueListBy<Field>([...toBlock.fields, ...fromBlock.fields], 'name')\n } else {\n fields = toBlock.fields\n }\n }\n\n let blockFieldsPermissions: SanitizedFieldsPermissions = undefined\n\n // fieldPermissions will be set here, as the blocks field has a name\n if (typeof fieldPermissions === 'boolean') {\n blockFieldsPermissions = fieldPermissions\n } else if (typeof fieldPermissions?.blocks === 'boolean') {\n blockFieldsPermissions = fieldPermissions.blocks\n } else {\n const permissionsBlockSpecific = fieldPermissions?.blocks?.[blockSlugToMatch]\n if (typeof permissionsBlockSpecific === 'boolean') {\n blockFieldsPermissions = permissionsBlockSpecific\n } else {\n blockFieldsPermissions = permissionsBlockSpecific?.fields\n }\n }\n\n const versionFields = buildVersionFields({\n clientSchemaMap,\n customDiffComponents,\n entitySlug,\n fields,\n fieldsPermissions: blockFieldsPermissions,\n i18n,\n modifiedOnly,\n nestingLevel: nestingLevel + 1,\n parentIndexPath: 'name' in field ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || ('localized' in field && field.localized),\n parentPath: ('name' in field ? path : parentPath) + '.' + i,\n parentSchemaPath: schemaPath + '.' + toBlock.slug,\n req,\n selectedLocales,\n versionFromSiblingData: fromRow,\n versionToSiblingData: toRow,\n }).versionFields\n\n if (versionFields?.length) {\n baseVersionField.rows[i] = versionFields\n }\n }\n\n if (!baseVersionField.rows?.length && modifiedOnly) {\n return null\n }\n }\n\n const clientDiffProps: FieldDiffClientProps = {\n baseVersionField: {\n ...baseVersionField,\n CustomComponent: undefined,\n },\n /**\n * TODO: Change to valueFrom in 4.0\n */\n comparisonValue: valueFrom,\n /**\n * @deprecated remove in 4.0. Each field should handle its own diffing logic\n */\n diffMethod: 'diffWordsWithSpace',\n field: clientField,\n fieldPermissions:\n typeof fieldPermissions === 'undefined' ? parentFieldsPermissions : fieldPermissions,\n parentIsLocalized,\n\n nestingLevel: nestingLevel ? nestingLevel : undefined,\n /**\n * TODO: Change to valueTo in 4.0\n */\n versionValue: valueTo,\n }\n if (locale) {\n clientDiffProps.locale = locale\n }\n\n const serverDiffProps: FieldDiffServerProps = {\n ...clientDiffProps,\n clientField,\n field,\n i18n,\n req,\n selectedLocales,\n }\n\n baseVersionField.CustomComponent = RenderServerComponent({\n clientProps: clientDiffProps,\n Component: CustomComponent,\n Fallback: DefaultComponent,\n importMap: req.payload.importMap,\n key: 'diff component',\n serverProps: serverDiffProps,\n })\n\n return baseVersionField\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","names":["getTranslation","formatDate","generateMetadata","generateVersionViewMetadata","collectionConfig","config","globalConfig","i18n","t","metaToUse","admin","meta","doc","formattedCreatedAt","createdAt","date","pattern","dateFormat","useAsTitle","entityLabel","labels","singular","titleFromData","description","documentTitle","title","components","views","edit","version","label","serverURL"],"sources":["../../../src/views/Version/metadata.ts"],"sourcesContent":["import type { Metadata } from 'next'\nimport type { MetaConfig } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { formatDate } from '@payloadcms/ui/shared'\n\nimport type { GenerateEditViewMetadata } from '../Document/getMetaBySegment.js'\n\nimport { generateMetadata } from '../../utilities/meta.js'\n\n/**\n * @todo Remove the `MetaConfig` type assertions. They are currently required because of how the `Metadata` type from `next` consumes the `URL` type.\n */\nexport const generateVersionViewMetadata: GenerateEditViewMetadata = async ({\n collectionConfig,\n config,\n globalConfig,\n i18n,\n}): Promise<Metadata> => {\n const { t } = i18n\n\n let metaToUse: MetaConfig = {\n ...(config.admin.meta || {}),\n }\n\n const doc: any = {} // TODO: figure this out\n\n const formattedCreatedAt = doc?.createdAt\n ? formatDate({ date: doc.createdAt, i18n, pattern: config?.admin?.dateFormat })\n : ''\n\n if (collectionConfig) {\n const useAsTitle = collectionConfig?.admin?.useAsTitle || 'id'\n const entityLabel = getTranslation(collectionConfig.labels.singular, i18n)\n const titleFromData = doc?.[useAsTitle]\n\n metaToUse = {\n ...(config.admin.meta || {}),\n description: t('version:viewingVersion', { documentTitle: titleFromData, entityLabel }),\n title: `${t('version:version')}${formattedCreatedAt ? ` - ${formattedCreatedAt}` : ''}${titleFromData ? ` - ${titleFromData}` : ''} - ${entityLabel}`,\n ...(collectionConfig?.admin?.meta || {}),\n ...(collectionConfig?.admin?.components?.views?.edit?.version?.meta || {}),\n }\n }\n\n if (globalConfig) {\n const entityLabel = getTranslation(globalConfig.label, i18n)\n\n metaToUse = {\n ...(config.admin.meta || {}),\n description: t('version:viewingVersionGlobal', { entityLabel }),\n title: `${t('version:version')}${formattedCreatedAt ? ` - ${formattedCreatedAt}` : ''}${entityLabel}`,\n ...((globalConfig?.admin?.meta || {}) as MetaConfig),\n ...((globalConfig?.admin?.components?.views?.edit?.version?.meta || {}) as MetaConfig),\n }\n }\n\n return generateMetadata({\n ...metaToUse,\n serverURL: config.serverURL,\n })\n}\n"],"mappings":"AAGA,SAASA,cAAc,QAAQ;AAC/B,SAASC,UAAU,QAAQ;AAI3B,SAASC,gBAAgB,QAAQ;AAEjC;;;AAGA,OAAO,MAAMC,2BAAA,GAAwD,MAAAA,CAAO;EAC1EC,gBAAgB;EAChBC,MAAM;EACNC,YAAY;EACZC;AAAI,CACL;EACC,MAAM;IAAEC;EAAC,CAAE,GAAGD,IAAA;EAEd,IAAIE,SAAA,GAAwB;IAC1B,IAAIJ,MAAA,CAAOK,KAAK,CAACC,IAAI,IAAI,CAAC,CAAC;EAC7B;EAEA,MAAMC,GAAA,GAAW,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"metadata.js","names":["getTranslation","formatDate","generateMetadata","generateVersionViewMetadata","collectionConfig","config","globalConfig","i18n","t","metaToUse","admin","meta","doc","formattedCreatedAt","createdAt","date","pattern","dateFormat","useAsTitle","entityLabel","labels","singular","titleFromData","description","documentTitle","title","components","views","edit","version","label","serverURL"],"sources":["../../../src/views/Version/metadata.ts"],"sourcesContent":["import type { Metadata } from 'next'\nimport type { MetaConfig } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { formatDate } from '@payloadcms/ui/shared'\n\nimport type { GenerateEditViewMetadata } from '../Document/getMetaBySegment.js'\n\nimport { generateMetadata } from '../../utilities/meta.js'\n\n/**\n * @todo Remove the `MetaConfig` type assertions. They are currently required because of how the `Metadata` type from `next` consumes the `URL` type.\n */\nexport const generateVersionViewMetadata: GenerateEditViewMetadata = async ({\n collectionConfig,\n config,\n globalConfig,\n i18n,\n}): Promise<Metadata> => {\n const { t } = i18n\n\n let metaToUse: MetaConfig = {\n ...(config.admin.meta || {}),\n }\n\n const doc: any = {} // TODO: figure this out\n\n const formattedCreatedAt = doc?.createdAt\n ? formatDate({ date: doc.createdAt, i18n, pattern: config?.admin?.dateFormat })\n : ''\n\n if (collectionConfig) {\n const useAsTitle = collectionConfig?.admin?.useAsTitle || 'id'\n const entityLabel = getTranslation(collectionConfig.labels.singular, i18n)\n const titleFromData = doc?.[useAsTitle]\n\n metaToUse = {\n ...(config.admin.meta || {}),\n description: t('version:viewingVersion', { documentTitle: titleFromData, entityLabel }),\n title: `${t('version:version')}${formattedCreatedAt ? ` - ${formattedCreatedAt}` : ''}${titleFromData ? ` - ${titleFromData}` : ''} - ${entityLabel}`,\n ...(collectionConfig?.admin?.meta || {}),\n ...(collectionConfig?.admin?.components?.views?.edit?.version?.meta || {}),\n }\n }\n\n if (globalConfig) {\n const entityLabel = getTranslation(globalConfig.label, i18n)\n\n metaToUse = {\n ...(config.admin.meta || {}),\n description: t('version:viewingVersionGlobal', { entityLabel }),\n title: `${t('version:version')}${formattedCreatedAt ? ` - ${formattedCreatedAt}` : ''}${entityLabel}`,\n ...((globalConfig?.admin?.meta || {}) as MetaConfig),\n ...((globalConfig?.admin?.components?.views?.edit?.version?.meta || {}) as MetaConfig),\n }\n }\n\n return generateMetadata({\n ...metaToUse,\n serverURL: config.serverURL,\n })\n}\n"],"mappings":"AAGA,SAASA,cAAc,QAAQ;AAC/B,SAASC,UAAU,QAAQ;AAI3B,SAASC,gBAAgB,QAAQ;AAEjC;;;AAGA,OAAO,MAAMC,2BAAA,GAAwD,MAAAA,CAAO;EAC1EC,gBAAgB;EAChBC,MAAM;EACNC,YAAY;EACZC;AAAI,CACL;EACC,MAAM;IAAEC;EAAC,CAAE,GAAGD,IAAA;EAEd,IAAIE,SAAA,GAAwB;IAC1B,IAAIJ,MAAA,CAAOK,KAAK,CAACC,IAAI,IAAI,CAAC,CAAC;EAC7B;EAEA,MAAMC,GAAA,GAAW,CAAC,EAAE;AAAA;EAEpB,MAAMC,kBAAA,GAAqBD,GAAA,EAAKE,SAAA,GAC5Bb,UAAA,CAAW;IAAEc,IAAA,EAAMH,GAAA,CAAIE,SAAS;IAAEP,IAAA;IAAMS,OAAA,EAASX,MAAA,EAAQK,KAAA,EAAOO;EAAW,KAC3E;EAEJ,IAAIb,gBAAA,EAAkB;IACpB,MAAMc,UAAA,GAAad,gBAAA,EAAkBM,KAAA,EAAOQ,UAAA,IAAc;IAC1D,MAAMC,WAAA,GAAcnB,cAAA,CAAeI,gBAAA,CAAiBgB,MAAM,CAACC,QAAQ,EAAEd,IAAA;IACrE,MAAMe,aAAA,GAAgBV,GAAA,GAAMM,UAAA,CAAW;IAEvCT,SAAA,GAAY;MACV,IAAIJ,MAAA,CAAOK,KAAK,CAACC,IAAI,IAAI,CAAC,CAAC;MAC3BY,WAAA,EAAaf,CAAA,CAAE,0BAA0B;QAAEgB,aAAA,EAAeF,aAAA;QAAeH;MAAY;MACrFM,KAAA,EAAO,GAAGjB,CAAA,CAAE,qBAAqBK,kBAAA,GAAqB,MAAMA,kBAAA,EAAoB,GAAG,KAAKS,aAAA,GAAgB,MAAMA,aAAA,EAAe,GAAG,QAAQH,WAAA,EAAa;MACrJ,IAAIf,gBAAA,EAAkBM,KAAA,EAAOC,IAAA,IAAQ,CAAC,CAAC;MACvC,IAAIP,gBAAA,EAAkBM,KAAA,EAAOgB,UAAA,EAAYC,KAAA,EAAOC,IAAA,EAAMC,OAAA,EAASlB,IAAA,IAAQ,CAAC,CAAC;IAC3E;EACF;EAEA,IAAIL,YAAA,EAAc;IAChB,MAAMa,WAAA,GAAcnB,cAAA,CAAeM,YAAA,CAAawB,KAAK,EAAEvB,IAAA;IAEvDE,SAAA,GAAY;MACV,IAAIJ,MAAA,CAAOK,KAAK,CAACC,IAAI,IAAI,CAAC,CAAC;MAC3BY,WAAA,EAAaf,CAAA,CAAE,gCAAgC;QAAEW;MAAY;MAC7DM,KAAA,EAAO,GAAGjB,CAAA,CAAE,qBAAqBK,kBAAA,GAAqB,MAAMA,kBAAA,EAAoB,GAAG,KAAKM,WAAA,EAAa;MACrG,IAAKb,YAAA,EAAcI,KAAA,EAAOC,IAAA,IAAQ,CAAC,CAAC;MACpC,IAAKL,YAAA,EAAcI,KAAA,EAAOgB,UAAA,EAAYC,KAAA,EAAOC,IAAA,EAAMC,OAAA,EAASlB,IAAA,IAAQ,CAAC,CAAC;IACxE;EACF;EAEA,OAAOT,gBAAA,CAAiB;IACtB,GAAGO,SAAS;IACZsB,SAAA,EAAW1B,MAAA,CAAO0B;EACpB;AACF","ignoreList":[]}
|
|
@@ -17,7 +17,7 @@ export const generateVersionsViewMetadata = async ({
|
|
|
17
17
|
...(config.admin.meta || {})
|
|
18
18
|
};
|
|
19
19
|
const data = {} // TODO: figure this out
|
|
20
|
-
|
|
20
|
+
;
|
|
21
21
|
if (collectionConfig) {
|
|
22
22
|
const useAsTitle = collectionConfig?.admin?.useAsTitle || 'id';
|
|
23
23
|
const titleFromData = data?.[useAsTitle];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","names":["getTranslation","generateMetadata","generateVersionsViewMetadata","collectionConfig","config","globalConfig","i18n","t","entityLabel","labels","singular","label","metaToUse","admin","meta","data","useAsTitle","titleFromData","description","documentTitle","entitySlug","slug","title","components","views","edit","versions","serverURL"],"sources":["../../../src/views/Versions/metadata.ts"],"sourcesContent":["import type { Metadata } from 'next'\nimport type { MetaConfig } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport type { GenerateEditViewMetadata } from '../Document/getMetaBySegment.js'\n\nimport { generateMetadata } from '../../utilities/meta.js'\n\n/**\n * @todo Remove the `MetaConfig` type assertions. They are currently required because of how the `Metadata` type from `next` consumes the `URL` type.\n */\nexport const generateVersionsViewMetadata: GenerateEditViewMetadata = async ({\n collectionConfig,\n config,\n globalConfig,\n i18n,\n}): Promise<Metadata> => {\n const { t } = i18n\n\n const entityLabel = collectionConfig\n ? getTranslation(collectionConfig.labels.singular, i18n)\n : globalConfig\n ? getTranslation(globalConfig.label, i18n)\n : ''\n\n let metaToUse: MetaConfig = {\n ...(config.admin.meta || {}),\n }\n\n const data: any = {} // TODO: figure this out\n\n if (collectionConfig) {\n const useAsTitle = collectionConfig?.admin?.useAsTitle || 'id'\n const titleFromData = data?.[useAsTitle]\n\n metaToUse = {\n ...(config.admin.meta || {}),\n description: t('version:viewingVersions', {\n documentTitle: data?.[useAsTitle],\n entitySlug: collectionConfig.slug,\n }),\n title: `${t('version:versions')}${titleFromData ? ` - ${titleFromData}` : ''} - ${entityLabel}`,\n ...(collectionConfig?.admin.meta || {}),\n ...(collectionConfig?.admin?.components?.views?.edit?.versions?.meta || {}),\n }\n }\n\n if (globalConfig) {\n metaToUse = {\n ...(config.admin.meta || {}),\n description: t('version:viewingVersionsGlobal', { entitySlug: globalConfig.slug }),\n title: `${t('version:versions')} - ${entityLabel}`,\n ...((globalConfig?.admin.meta || {}) as MetaConfig),\n ...((globalConfig?.admin?.components?.views?.edit?.versions?.meta || {}) as MetaConfig),\n }\n }\n\n return generateMetadata({\n ...metaToUse,\n serverURL: config.serverURL,\n })\n}\n"],"mappings":"AAGA,SAASA,cAAc,QAAQ;AAI/B,SAASC,gBAAgB,QAAQ;AAEjC;;;AAGA,OAAO,MAAMC,4BAAA,GAAyD,MAAAA,CAAO;EAC3EC,gBAAgB;EAChBC,MAAM;EACNC,YAAY;EACZC;AAAI,CACL;EACC,MAAM;IAAEC;EAAC,CAAE,GAAGD,IAAA;EAEd,MAAME,WAAA,GAAcL,gBAAA,GAChBH,cAAA,CAAeG,gBAAA,CAAiBM,MAAM,CAACC,QAAQ,EAAEJ,IAAA,IACjDD,YAAA,GACEL,cAAA,CAAeK,YAAA,CAAaM,KAAK,EAAEL,IAAA,IACnC;EAEN,IAAIM,SAAA,GAAwB;IAC1B,IAAIR,MAAA,CAAOS,KAAK,CAACC,IAAI,IAAI,CAAC,CAAC;EAC7B;EAEA,MAAMC,IAAA,GAAY,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"metadata.js","names":["getTranslation","generateMetadata","generateVersionsViewMetadata","collectionConfig","config","globalConfig","i18n","t","entityLabel","labels","singular","label","metaToUse","admin","meta","data","useAsTitle","titleFromData","description","documentTitle","entitySlug","slug","title","components","views","edit","versions","serverURL"],"sources":["../../../src/views/Versions/metadata.ts"],"sourcesContent":["import type { Metadata } from 'next'\nimport type { MetaConfig } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport type { GenerateEditViewMetadata } from '../Document/getMetaBySegment.js'\n\nimport { generateMetadata } from '../../utilities/meta.js'\n\n/**\n * @todo Remove the `MetaConfig` type assertions. They are currently required because of how the `Metadata` type from `next` consumes the `URL` type.\n */\nexport const generateVersionsViewMetadata: GenerateEditViewMetadata = async ({\n collectionConfig,\n config,\n globalConfig,\n i18n,\n}): Promise<Metadata> => {\n const { t } = i18n\n\n const entityLabel = collectionConfig\n ? getTranslation(collectionConfig.labels.singular, i18n)\n : globalConfig\n ? getTranslation(globalConfig.label, i18n)\n : ''\n\n let metaToUse: MetaConfig = {\n ...(config.admin.meta || {}),\n }\n\n const data: any = {} // TODO: figure this out\n\n if (collectionConfig) {\n const useAsTitle = collectionConfig?.admin?.useAsTitle || 'id'\n const titleFromData = data?.[useAsTitle]\n\n metaToUse = {\n ...(config.admin.meta || {}),\n description: t('version:viewingVersions', {\n documentTitle: data?.[useAsTitle],\n entitySlug: collectionConfig.slug,\n }),\n title: `${t('version:versions')}${titleFromData ? ` - ${titleFromData}` : ''} - ${entityLabel}`,\n ...(collectionConfig?.admin.meta || {}),\n ...(collectionConfig?.admin?.components?.views?.edit?.versions?.meta || {}),\n }\n }\n\n if (globalConfig) {\n metaToUse = {\n ...(config.admin.meta || {}),\n description: t('version:viewingVersionsGlobal', { entitySlug: globalConfig.slug }),\n title: `${t('version:versions')} - ${entityLabel}`,\n ...((globalConfig?.admin.meta || {}) as MetaConfig),\n ...((globalConfig?.admin?.components?.views?.edit?.versions?.meta || {}) as MetaConfig),\n }\n }\n\n return generateMetadata({\n ...metaToUse,\n serverURL: config.serverURL,\n })\n}\n"],"mappings":"AAGA,SAASA,cAAc,QAAQ;AAI/B,SAASC,gBAAgB,QAAQ;AAEjC;;;AAGA,OAAO,MAAMC,4BAAA,GAAyD,MAAAA,CAAO;EAC3EC,gBAAgB;EAChBC,MAAM;EACNC,YAAY;EACZC;AAAI,CACL;EACC,MAAM;IAAEC;EAAC,CAAE,GAAGD,IAAA;EAEd,MAAME,WAAA,GAAcL,gBAAA,GAChBH,cAAA,CAAeG,gBAAA,CAAiBM,MAAM,CAACC,QAAQ,EAAEJ,IAAA,IACjDD,YAAA,GACEL,cAAA,CAAeK,YAAA,CAAaM,KAAK,EAAEL,IAAA,IACnC;EAEN,IAAIM,SAAA,GAAwB;IAC1B,IAAIR,MAAA,CAAOS,KAAK,CAACC,IAAI,IAAI,CAAC,CAAC;EAC7B;EAEA,MAAMC,IAAA,GAAY,CAAC,EAAE;AAAA;EAErB,IAAIZ,gBAAA,EAAkB;IACpB,MAAMa,UAAA,GAAab,gBAAA,EAAkBU,KAAA,EAAOG,UAAA,IAAc;IAC1D,MAAMC,aAAA,GAAgBF,IAAA,GAAOC,UAAA,CAAW;IAExCJ,SAAA,GAAY;MACV,IAAIR,MAAA,CAAOS,KAAK,CAACC,IAAI,IAAI,CAAC,CAAC;MAC3BI,WAAA,EAAaX,CAAA,CAAE,2BAA2B;QACxCY,aAAA,EAAeJ,IAAA,GAAOC,UAAA,CAAW;QACjCI,UAAA,EAAYjB,gBAAA,CAAiBkB;MAC/B;MACAC,KAAA,EAAO,GAAGf,CAAA,CAAE,sBAAsBU,aAAA,GAAgB,MAAMA,aAAA,EAAe,GAAG,QAAQT,WAAA,EAAa;MAC/F,IAAIL,gBAAA,EAAkBU,KAAA,CAAMC,IAAA,IAAQ,CAAC,CAAC;MACtC,IAAIX,gBAAA,EAAkBU,KAAA,EAAOU,UAAA,EAAYC,KAAA,EAAOC,IAAA,EAAMC,QAAA,EAAUZ,IAAA,IAAQ,CAAC,CAAC;IAC5E;EACF;EAEA,IAAIT,YAAA,EAAc;IAChBO,SAAA,GAAY;MACV,IAAIR,MAAA,CAAOS,KAAK,CAACC,IAAI,IAAI,CAAC,CAAC;MAC3BI,WAAA,EAAaX,CAAA,CAAE,iCAAiC;QAAEa,UAAA,EAAYf,YAAA,CAAagB;MAAK;MAChFC,KAAA,EAAO,GAAGf,CAAA,CAAE,yBAAyBC,WAAA,EAAa;MAClD,IAAKH,YAAA,EAAcQ,KAAA,CAAMC,IAAA,IAAQ,CAAC,CAAC;MACnC,IAAKT,YAAA,EAAcQ,KAAA,EAAOU,UAAA,EAAYC,KAAA,EAAOC,IAAA,EAAMC,QAAA,EAAUZ,IAAA,IAAQ,CAAC,CAAC;IACzE;EACF;EAEA,OAAOb,gBAAA,CAAiB;IACtB,GAAGW,SAAS;IACZe,SAAA,EAAWvB,MAAA,CAAOuB;EACpB;AACF","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/next",
|
|
3
|
-
"version": "3.76.0
|
|
3
|
+
"version": "3.76.0",
|
|
4
4
|
"homepage": "https://payloadcms.com",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -99,9 +99,9 @@
|
|
|
99
99
|
"qs-esm": "7.0.2",
|
|
100
100
|
"sass": "1.77.4",
|
|
101
101
|
"uuid": "10.0.0",
|
|
102
|
-
"@payloadcms/graphql": "3.76.0
|
|
103
|
-
"@payloadcms/translations": "3.76.0
|
|
104
|
-
"@payloadcms/ui": "3.76.0
|
|
102
|
+
"@payloadcms/graphql": "3.76.0",
|
|
103
|
+
"@payloadcms/translations": "3.76.0",
|
|
104
|
+
"@payloadcms/ui": "3.76.0"
|
|
105
105
|
},
|
|
106
106
|
"devDependencies": {
|
|
107
107
|
"@babel/cli": "7.27.2",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"@babel/preset-env": "7.27.2",
|
|
110
110
|
"@babel/preset-react": "7.27.1",
|
|
111
111
|
"@babel/preset-typescript": "7.27.1",
|
|
112
|
-
"@next/eslint-plugin-next": "16.2.0-canary.
|
|
112
|
+
"@next/eslint-plugin-next": "16.2.0-canary.29",
|
|
113
113
|
"@types/busboy": "1.5.4",
|
|
114
114
|
"@types/react": "19.2.9",
|
|
115
115
|
"@types/react-dom": "19.2.3",
|
|
@@ -118,13 +118,13 @@
|
|
|
118
118
|
"esbuild": "0.27.1",
|
|
119
119
|
"esbuild-sass-plugin": "3.3.1",
|
|
120
120
|
"swc-plugin-transform-remove-imports": "8.3.0",
|
|
121
|
-
"
|
|
122
|
-
"
|
|
121
|
+
"@payloadcms/eslint-config": "3.28.0",
|
|
122
|
+
"payload": "3.76.0"
|
|
123
123
|
},
|
|
124
124
|
"peerDependencies": {
|
|
125
125
|
"graphql": "^16.8.1",
|
|
126
|
-
"next": "
|
|
127
|
-
"payload": "3.76.0
|
|
126
|
+
"next": ">=15.2.9 <15.3.0 || >=15.3.9 <15.4.0 || >=15.4.11 <15.5.0 || >=16.2.0-canary.10 <17.0.0",
|
|
127
|
+
"payload": "3.76.0"
|
|
128
128
|
},
|
|
129
129
|
"engines": {
|
|
130
130
|
"node": "^18.20.2 || >=20.9.0"
|