@payloadcms/next 3.78.0-canary.6 → 3.78.0-canary.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/prod/styles.css +1 -1
  2. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.d.ts +11 -0
  3. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.d.ts.map +1 -0
  4. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.js +128 -0
  5. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.js.map +1 -0
  6. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.d.ts +8 -0
  7. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.d.ts.map +1 -0
  8. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js +78 -0
  9. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js.map +1 -0
  10. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts +1 -0
  11. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts.map +1 -1
  12. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +30 -20
  13. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  14. package/dist/views/Dashboard/Default/ModularDashboard/index.d.ts.map +1 -1
  15. package/dist/views/Dashboard/Default/ModularDashboard/index.js +8 -30
  16. package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -1
  17. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.d.ts +1 -0
  18. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.d.ts.map +1 -1
  19. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +30 -23
  20. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
  21. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.d.ts.map +1 -1
  22. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js +2 -1
  23. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js.map +1 -1
  24. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.d.ts +1 -0
  25. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.d.ts.map +1 -1
  26. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +5 -3
  27. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  28. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.d.ts +1 -0
  29. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.d.ts.map +1 -1
  30. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js +23 -3
  31. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js.map +1 -1
  32. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromConfig.d.ts +4 -0
  33. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromConfig.d.ts.map +1 -0
  34. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromConfig.js +21 -0
  35. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromConfig.js.map +1 -0
  36. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.d.ts +4 -0
  37. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.d.ts.map +1 -0
  38. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.js +10 -0
  39. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.js.map +1 -0
  40. package/dist/views/Dashboard/Default/ModularDashboard/utils/localeUtils.d.ts +23 -0
  41. package/dist/views/Dashboard/Default/ModularDashboard/utils/localeUtils.d.ts.map +1 -0
  42. package/dist/views/Dashboard/Default/ModularDashboard/utils/localeUtils.js +103 -0
  43. package/dist/views/Dashboard/Default/ModularDashboard/utils/localeUtils.js.map +1 -0
  44. package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.d.ts.map +1 -1
  45. package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js +7 -2
  46. package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js.map +1 -1
  47. package/dist/views/Version/Restore/index.d.ts.map +1 -1
  48. package/dist/views/Version/Restore/index.js +2 -3
  49. package/dist/views/Version/Restore/index.js.map +1 -1
  50. package/dist/views/Versions/index.d.ts.map +1 -1
  51. package/dist/views/Versions/index.js +4 -4
  52. package/dist/views/Versions/index.js.map +1 -1
  53. package/package.json +7 -7
@@ -0,0 +1,103 @@
1
+ import { fieldAffectsData, fieldHasSubFields, tabHasName } from 'payload/shared';
2
+ function isLocalized(field) {
3
+ return 'localized' in field && Boolean(field.localized);
4
+ }
5
+ function getObjectValue(value) {
6
+ return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : {};
7
+ }
8
+ /**
9
+ * Extracts locale-specific data from widget data stored in preferences.
10
+ *
11
+ * Localized fields are stored as `{ fieldName: { en: "Hello", de: "Hallo" } }` in preferences.
12
+ * This function flattens them to `{ fieldName: "Hello" }` for the given locale,
13
+ * which is the format the form state builder expects.
14
+ *
15
+ * Recursively handles nested field types (group, row, collapsible, tabs).
16
+ */
17
+ export function extractLocaleData(widgetData, locale, fields) {
18
+ const result = {};
19
+ for (const field of fields) {
20
+ if (field.type === 'tabs') {
21
+ for (const tab of field.tabs) {
22
+ const tabFields = tab.fields;
23
+ if (tabHasName(tab)) {
24
+ result[tab.name] = extractLocaleData(getObjectValue(widgetData[tab.name]), locale, tabFields);
25
+ } else {
26
+ Object.assign(result, extractLocaleData(widgetData, locale, tabFields));
27
+ }
28
+ }
29
+ continue;
30
+ }
31
+ if (fieldHasSubFields(field) && !fieldAffectsData(field)) {
32
+ Object.assign(result, extractLocaleData(widgetData, locale, field.fields));
33
+ continue;
34
+ }
35
+ if (!fieldAffectsData(field)) {
36
+ continue;
37
+ }
38
+ const {
39
+ name
40
+ } = field;
41
+ const value = widgetData[name];
42
+ if (fieldHasSubFields(field)) {
43
+ result[name] = extractLocaleData(getObjectValue(value), locale, field.fields);
44
+ continue;
45
+ }
46
+ if (isLocalized(field) && value !== undefined && typeof value === 'object' && value !== null && !Array.isArray(value)) {
47
+ result[name] = value[locale];
48
+ } else {
49
+ result[name] = value;
50
+ }
51
+ }
52
+ return result;
53
+ }
54
+ /**
55
+ * Merges locale-specific form data back into the full widget data structure.
56
+ *
57
+ * Non-localized fields are stored directly. Localized fields are stored as
58
+ * `{ fieldName: { en: "Hello", de: "Hallo" } }` so each locale's value is preserved independently.
59
+ *
60
+ * Recursively handles nested field types (group, row, collapsible, tabs).
61
+ */
62
+ export function mergeLocaleData(existingData, formData, locale, fields) {
63
+ const result = {
64
+ ...existingData
65
+ };
66
+ for (const field of fields) {
67
+ if (field.type === 'tabs') {
68
+ for (const tab of field.tabs) {
69
+ const tabFields = tab.fields;
70
+ if (tabHasName(tab)) {
71
+ result[tab.name] = mergeLocaleData(getObjectValue(result[tab.name]), getObjectValue(formData[tab.name]), locale, tabFields);
72
+ } else {
73
+ Object.assign(result, mergeLocaleData(result, formData, locale, tabFields));
74
+ }
75
+ }
76
+ continue;
77
+ }
78
+ if (fieldHasSubFields(field) && !fieldAffectsData(field)) {
79
+ Object.assign(result, mergeLocaleData(result, formData, locale, field.fields));
80
+ continue;
81
+ }
82
+ if (!fieldAffectsData(field)) {
83
+ continue;
84
+ }
85
+ const {
86
+ name
87
+ } = field;
88
+ if (fieldHasSubFields(field)) {
89
+ result[name] = mergeLocaleData(getObjectValue(result[name]), getObjectValue(formData[name]), locale, field.fields);
90
+ continue;
91
+ }
92
+ if (isLocalized(field)) {
93
+ result[name] = {
94
+ ...getObjectValue(result[name]),
95
+ [locale]: formData[name]
96
+ };
97
+ } else {
98
+ result[name] = formData[name];
99
+ }
100
+ }
101
+ return result;
102
+ }
103
+ //# sourceMappingURL=localeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localeUtils.js","names":["fieldAffectsData","fieldHasSubFields","tabHasName","isLocalized","field","Boolean","localized","getObjectValue","value","Array","isArray","extractLocaleData","widgetData","locale","fields","result","type","tab","tabs","tabFields","name","Object","assign","undefined","mergeLocaleData","existingData","formData"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/localeUtils.ts"],"sourcesContent":["import type { ClientField, Field } from 'payload'\n\nimport { fieldAffectsData, fieldHasSubFields, tabHasName } from 'payload/shared'\n\ntype AnyField = ClientField | Field\n\nfunction isLocalized(field: AnyField): boolean {\n return 'localized' in field && Boolean(field.localized)\n}\n\nfunction getObjectValue(value: unknown): Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\n}\n\n/**\n * Extracts locale-specific data from widget data stored in preferences.\n *\n * Localized fields are stored as `{ fieldName: { en: \"Hello\", de: \"Hallo\" } }` in preferences.\n * This function flattens them to `{ fieldName: \"Hello\" }` for the given locale,\n * which is the format the form state builder expects.\n *\n * Recursively handles nested field types (group, row, collapsible, tabs).\n */\nexport function extractLocaleData(\n widgetData: Record<string, unknown>,\n locale: string,\n fields: readonly AnyField[],\n): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const field of fields) {\n if (field.type === 'tabs') {\n for (const tab of field.tabs) {\n const tabFields = tab.fields as AnyField[]\n if (tabHasName(tab)) {\n result[tab.name] = extractLocaleData(\n getObjectValue(widgetData[tab.name]),\n locale,\n tabFields,\n )\n } else {\n Object.assign(result, extractLocaleData(widgetData, locale, tabFields))\n }\n }\n continue\n }\n\n if (fieldHasSubFields(field) && !fieldAffectsData(field)) {\n Object.assign(result, extractLocaleData(widgetData, locale, field.fields as AnyField[]))\n continue\n }\n\n if (!fieldAffectsData(field)) {\n continue\n }\n\n const { name } = field\n const value = widgetData[name]\n\n if (fieldHasSubFields(field)) {\n result[name] = extractLocaleData(getObjectValue(value), locale, field.fields as AnyField[])\n continue\n }\n\n if (\n isLocalized(field) &&\n value !== undefined &&\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value)\n ) {\n result[name] = (value as Record<string, unknown>)[locale]\n } else {\n result[name] = value\n }\n }\n\n return result\n}\n\n/**\n * Merges locale-specific form data back into the full widget data structure.\n *\n * Non-localized fields are stored directly. Localized fields are stored as\n * `{ fieldName: { en: \"Hello\", de: \"Hallo\" } }` so each locale's value is preserved independently.\n *\n * Recursively handles nested field types (group, row, collapsible, tabs).\n */\nexport function mergeLocaleData(\n existingData: Record<string, unknown>,\n formData: Record<string, unknown>,\n locale: string,\n fields: readonly AnyField[],\n): Record<string, unknown> {\n const result: Record<string, unknown> = { ...existingData }\n\n for (const field of fields) {\n if (field.type === 'tabs') {\n for (const tab of field.tabs) {\n const tabFields = tab.fields as AnyField[]\n if (tabHasName(tab)) {\n result[tab.name] = mergeLocaleData(\n getObjectValue(result[tab.name]),\n getObjectValue(formData[tab.name]),\n locale,\n tabFields,\n )\n } else {\n Object.assign(result, mergeLocaleData(result, formData, locale, tabFields))\n }\n }\n continue\n }\n\n if (fieldHasSubFields(field) && !fieldAffectsData(field)) {\n Object.assign(result, mergeLocaleData(result, formData, locale, field.fields as AnyField[]))\n continue\n }\n\n if (!fieldAffectsData(field)) {\n continue\n }\n\n const { name } = field\n\n if (fieldHasSubFields(field)) {\n result[name] = mergeLocaleData(\n getObjectValue(result[name]),\n getObjectValue(formData[name]),\n locale,\n field.fields as AnyField[],\n )\n continue\n }\n\n if (isLocalized(field)) {\n result[name] = { ...getObjectValue(result[name]), [locale]: formData[name] }\n } else {\n result[name] = formData[name]\n }\n }\n\n return result\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"sensors.d.ts","sourceRoot":"","sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/sensors.ts"],"names":[],"mappings":"AAmTA,wBAAgB,mBAAmB,sFAWlC"}
1
+ {"version":3,"file":"sensors.d.ts","sourceRoot":"","sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/sensors.ts"],"names":[],"mappings":"AA0TA,wBAAgB,mBAAmB,sFAiBlC"}
@@ -1,4 +1,4 @@
1
- import { KeyboardCode, KeyboardSensor, PointerSensor, useSensor, useSensors } from '@dnd-kit/core';
1
+ import { KeyboardCode, KeyboardSensor, MouseSensor, TouchSensor, useSensor, useSensors } from '@dnd-kit/core';
2
2
  /**
3
3
  * Get all droppable widget positions, filtering out overlapping "before" droppables
4
4
  * and assigning row numbers based on Y position.
@@ -253,10 +253,15 @@ class DirectFocusKeyboardSensor extends KeyboardSensor {
253
253
  }];
254
254
  }
255
255
  export function useDashboardSensors() {
256
- return useSensors(useSensor(PointerSensor, {
256
+ return useSensors(useSensor(MouseSensor, {
257
257
  activationConstraint: {
258
258
  distance: 5
259
259
  }
260
+ }), useSensor(TouchSensor, {
261
+ activationConstraint: {
262
+ delay: 200,
263
+ tolerance: 5
264
+ }
260
265
  }), useSensor(DirectFocusKeyboardSensor, {
261
266
  coordinateGetter: droppableJumpKeyboardCoordinateGetter
262
267
  }));
@@ -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","MouseSensor","TouchSensor","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","delay","tolerance","coordinateGetter"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/sensors.ts"],"sourcesContent":["import type { KeyboardCoordinateGetter, KeyboardSensorOptions } from '@dnd-kit/core'\n\nimport {\n KeyboardCode,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n useSensor,\n useSensors,\n} 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(MouseSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(TouchSensor, {\n activationConstraint: {\n delay: 200,\n tolerance: 5,\n },\n }),\n useSensor(DirectFocusKeyboardSensor, {\n coordinateGetter: droppableJumpKeyboardCoordinateGetter,\n }),\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Version/Restore/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAiBpG,OAAO,cAAc,CAAA;AAErB,OAAO,KAA0C,MAAM,OAAO,CAAA;AAK9D,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;IACzC,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,KAAK,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAA;IACtD,aAAa,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oBAAoB,EAAE,MAAM,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkHnC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Version/Restore/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAiBpG,OAAO,cAAc,CAAA;AAErB,OAAO,KAA0C,MAAM,OAAO,CAAA;AAK9D,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;IACzC,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,KAAK,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAA;IACtD,aAAa,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oBAAoB,EAAE,MAAM,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAoHnC,CAAA"}
@@ -24,8 +24,7 @@ export const Restore = ({
24
24
  routes: {
25
25
  admin: adminRoute,
26
26
  api: apiRoute
27
- },
28
- serverURL
27
+ }
29
28
  }
30
29
  } = useConfig();
31
30
  const {
@@ -40,7 +39,7 @@ export const Restore = ({
40
39
  const {
41
40
  startRouteTransition
42
41
  } = useRouteTransition();
43
- const restoreMessage = t('version:aboutToRestoreGlobal', {
42
+ const restoreMessage = t(globalConfig ? 'version:aboutToRestoreGlobal' : 'version:aboutToRestore', {
44
43
  label: getTranslation(label, i18n),
45
44
  versionDate: versionDateFormatted
46
45
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getTranslation","Button","ConfirmationModal","PopupList","toast","useConfig","useModal","useRouteTransition","useTranslation","requests","useRouter","formatAdminURL","React","Fragment","useCallback","useState","baseClass","modalSlug","Restore","className","collectionConfig","globalConfig","label","originalDocID","status","versionDateFormatted","versionID","config","routes","admin","adminRoute","api","apiRoute","serverURL","toggleModal","router","i18n","t","draft","setDraft","startRouteTransition","restoreMessage","versionDate","canRestoreAsDraft","versions","drafts","handleRestore","fetchURL","path","redirectURL","slug","res","post","headers","language","json","success","message","push","error","_jsxs","_jsx","filter","Boolean","join","buttonStyle","onClick","size","SubMenuPopupContent","ButtonGroup","body","confirmingLabel","heading","onConfirm"],"sources":["../../../../src/views/Version/Restore/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, ClientGlobalConfig, SanitizedCollectionConfig } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n ConfirmationModal,\n PopupList,\n toast,\n useConfig,\n useModal,\n useRouteTransition,\n useTranslation,\n} from '@payloadcms/ui'\nimport { requests } from '@payloadcms/ui/shared'\nimport { useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\n\nimport './index.scss'\n\nimport React, { Fragment, useCallback, useState } from 'react'\n\nconst baseClass = 'restore-version'\nconst modalSlug = 'restore-version'\n\ntype Props = {\n className?: string\n collectionConfig?: ClientCollectionConfig\n globalConfig?: ClientGlobalConfig\n label: SanitizedCollectionConfig['labels']['singular']\n originalDocID: number | string\n status?: string\n versionDateFormatted: string\n versionID: string\n}\n\nexport const Restore: React.FC<Props> = ({\n className,\n collectionConfig,\n globalConfig,\n label,\n originalDocID,\n status,\n versionDateFormatted,\n versionID,\n}) => {\n const {\n config: {\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n },\n } = useConfig()\n\n const { toggleModal } = useModal()\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const [draft, setDraft] = useState(false)\n const { startRouteTransition } = useRouteTransition()\n\n const restoreMessage = t('version:aboutToRestoreGlobal', {\n label: getTranslation(label, i18n),\n versionDate: versionDateFormatted,\n })\n\n const canRestoreAsDraft = status !== 'draft' && collectionConfig?.versions?.drafts\n\n const handleRestore = useCallback(async () => {\n let fetchURL = formatAdminURL({\n apiRoute,\n path: '',\n })\n let redirectURL: string\n\n if (collectionConfig) {\n fetchURL = `${fetchURL}/${collectionConfig.slug}/versions/${versionID}?draft=${draft}`\n redirectURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionConfig.slug}/${originalDocID}`,\n })\n }\n\n if (globalConfig) {\n fetchURL = `${fetchURL}/globals/${globalConfig.slug}/versions/${versionID}?draft=${draft}`\n redirectURL = formatAdminURL({\n adminRoute,\n path: `/globals/${globalConfig.slug}`,\n })\n }\n\n const res = await requests.post(fetchURL, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (res.status === 200) {\n const json = await res.json()\n toast.success(json.message)\n return startRouteTransition(() => router.push(redirectURL))\n } else {\n toast.error(t('version:problemRestoringVersion'))\n }\n }, [\n apiRoute,\n collectionConfig,\n globalConfig,\n i18n.language,\n versionID,\n draft,\n adminRoute,\n originalDocID,\n startRouteTransition,\n router,\n t,\n ])\n\n return (\n <Fragment>\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n <Button\n buttonStyle=\"primary\"\n className={[canRestoreAsDraft && `${baseClass}__restore-as-draft-button`]\n .filter(Boolean)\n .join(' ')}\n onClick={() => toggleModal(modalSlug)}\n size=\"xsmall\"\n SubMenuPopupContent={\n canRestoreAsDraft\n ? () => (\n <PopupList.ButtonGroup>\n <PopupList.Button onClick={() => [setDraft(true), toggleModal(modalSlug)]}>\n {t('version:restoreAsDraft')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )\n : null\n }\n >\n {t('version:restoreThisVersion')}\n </Button>\n </div>\n <ConfirmationModal\n body={restoreMessage}\n confirmingLabel={t('version:restoring')}\n heading={t('version:confirmVersionRestoration')}\n modalSlug={modalSlug}\n onConfirm={handleRestore}\n />\n </Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getTranslation","Button","ConfirmationModal","PopupList","toast","useConfig","useModal","useRouteTransition","useTranslation","requests","useRouter","formatAdminURL","React","Fragment","useCallback","useState","baseClass","modalSlug","Restore","className","collectionConfig","globalConfig","label","originalDocID","status","versionDateFormatted","versionID","config","routes","admin","adminRoute","api","apiRoute","toggleModal","router","i18n","t","draft","setDraft","startRouteTransition","restoreMessage","versionDate","canRestoreAsDraft","versions","drafts","handleRestore","fetchURL","path","redirectURL","slug","res","post","headers","language","json","success","message","push","error","_jsxs","_jsx","filter","Boolean","join","buttonStyle","onClick","size","SubMenuPopupContent","ButtonGroup","body","confirmingLabel","heading","onConfirm"],"sources":["../../../../src/views/Version/Restore/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, ClientGlobalConfig, SanitizedCollectionConfig } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n ConfirmationModal,\n PopupList,\n toast,\n useConfig,\n useModal,\n useRouteTransition,\n useTranslation,\n} from '@payloadcms/ui'\nimport { requests } from '@payloadcms/ui/shared'\nimport { useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\n\nimport './index.scss'\n\nimport React, { Fragment, useCallback, useState } from 'react'\n\nconst baseClass = 'restore-version'\nconst modalSlug = 'restore-version'\n\ntype Props = {\n className?: string\n collectionConfig?: ClientCollectionConfig\n globalConfig?: ClientGlobalConfig\n label: SanitizedCollectionConfig['labels']['singular']\n originalDocID: number | string\n status?: string\n versionDateFormatted: string\n versionID: string\n}\n\nexport const Restore: React.FC<Props> = ({\n className,\n collectionConfig,\n globalConfig,\n label,\n originalDocID,\n status,\n versionDateFormatted,\n versionID,\n}) => {\n const {\n config: {\n routes: { admin: adminRoute, api: apiRoute },\n },\n } = useConfig()\n\n const { toggleModal } = useModal()\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const [draft, setDraft] = useState(false)\n const { startRouteTransition } = useRouteTransition()\n\n const restoreMessage = t(\n globalConfig ? 'version:aboutToRestoreGlobal' : 'version:aboutToRestore',\n {\n label: getTranslation(label, i18n),\n versionDate: versionDateFormatted,\n },\n )\n\n const canRestoreAsDraft = status !== 'draft' && collectionConfig?.versions?.drafts\n\n const handleRestore = useCallback(async () => {\n let fetchURL = formatAdminURL({\n apiRoute,\n path: '',\n })\n let redirectURL: string\n\n if (collectionConfig) {\n fetchURL = `${fetchURL}/${collectionConfig.slug}/versions/${versionID}?draft=${draft}`\n redirectURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionConfig.slug}/${originalDocID}`,\n })\n }\n\n if (globalConfig) {\n fetchURL = `${fetchURL}/globals/${globalConfig.slug}/versions/${versionID}?draft=${draft}`\n redirectURL = formatAdminURL({\n adminRoute,\n path: `/globals/${globalConfig.slug}`,\n })\n }\n\n const res = await requests.post(fetchURL, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (res.status === 200) {\n const json = await res.json()\n toast.success(json.message)\n return startRouteTransition(() => router.push(redirectURL))\n } else {\n toast.error(t('version:problemRestoringVersion'))\n }\n }, [\n apiRoute,\n collectionConfig,\n globalConfig,\n i18n.language,\n versionID,\n draft,\n adminRoute,\n originalDocID,\n startRouteTransition,\n router,\n t,\n ])\n\n return (\n <Fragment>\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n <Button\n buttonStyle=\"primary\"\n className={[canRestoreAsDraft && `${baseClass}__restore-as-draft-button`]\n .filter(Boolean)\n .join(' ')}\n onClick={() => toggleModal(modalSlug)}\n size=\"xsmall\"\n SubMenuPopupContent={\n canRestoreAsDraft\n ? () => (\n <PopupList.ButtonGroup>\n <PopupList.Button onClick={() => [setDraft(true), toggleModal(modalSlug)]}>\n {t('version:restoreAsDraft')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )\n : null\n }\n >\n {t('version:restoreThisVersion')}\n </Button>\n </div>\n <ConfirmationModal\n body={restoreMessage}\n confirmingLabel={t('version:restoring')}\n heading={t('version:confirmVersionRestoration')}\n modalSlug={modalSlug}\n onConfirm={handleRestore}\n />\n </Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Versions/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,uBAAuB,EAAkC,MAAM,SAAS,CAAA;AAEtF,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,cAAc,CAAA;AAIrB,wBAAsB,YAAY,CAAC,KAAK,EAAE,uBAAuB,8BAqLhE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Versions/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,uBAAuB,EAAkC,MAAM,SAAS,CAAA;AAEtF,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,cAAc,CAAA;AAIrB,wBAAsB,YAAY,CAAC,KAAK,EAAE,uBAAuB,8BAyLhE"}
@@ -94,11 +94,11 @@ export async function VersionsView(props) {
94
94
  },
95
95
  status: 'published',
96
96
  user,
97
- where: {
97
+ where: localization ? {
98
98
  snapshot: {
99
99
  not_equals: true
100
100
  }
101
- }
101
+ } : undefined
102
102
  }) : Promise.resolve(null), draftsEnabled ? fetchLatestVersion({
103
103
  collectionSlug,
104
104
  depth: 0,
@@ -117,11 +117,11 @@ export async function VersionsView(props) {
117
117
  },
118
118
  status: 'draft',
119
119
  user,
120
- where: {
120
+ where: localization ? {
121
121
  snapshot: {
122
122
  not_equals: true
123
123
  }
124
- }
124
+ } : undefined
125
125
  }) : Promise.resolve(null)]);
126
126
  const fetchURL = formatAdminURL({
127
127
  apiRoute,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Gutter","ListQueryProvider","SetDocumentStepNav","notFound","formatAdminURL","hasDraftsEnabled","isNumber","React","fetchLatestVersion","fetchVersions","VersionDrawerCreatedAtCell","buildVersionColumns","VersionsViewClient","baseClass","VersionsView","props","hasPublishedDoc","initPageResult","collectionConfig","docID","id","globalConfig","req","i18n","payload","config","t","user","routeSegments","segments","searchParams","limit","page","sort","versions","disableGutter","useVersionDrawerCreatedAtCell","draftsEnabled","collectionSlug","slug","globalSlug","isTrashed","localization","routes","api","apiRoute","serverURL","whereQuery","and","push","snapshot","not_equals","defaultLimit","admin","pagination","limitToUse","Number","versionsData","depth","locale","overrideAccess","parseInt","toString","undefined","parentID","where","currentlyPublishedVersion","latestDraftVersion","Promise","all","select","updatedAt","version","_status","status","resolve","fetchURL","path","columns","CreatedAtCellOverride","docs","pluralLabel","labels","plural","label","GutterComponent","Fragment","_jsxs","_jsx","useAsTitle","view","className","data","modifySearchParams","orderableFieldName","orderable","query","paginationLimits","limits"],"sources":["../../../src/views/Versions/index.tsx"],"sourcesContent":["import { Gutter, ListQueryProvider, SetDocumentStepNav } from '@payloadcms/ui'\nimport { notFound } from 'next/navigation.js'\nimport { type DocumentViewServerProps, type PaginatedDocs, type Where } from 'payload'\nimport { formatAdminURL, hasDraftsEnabled, isNumber } from 'payload/shared'\nimport React from 'react'\n\nimport { fetchLatestVersion, fetchVersions } from '../Version/fetchVersions.js'\nimport { VersionDrawerCreatedAtCell } from '../Version/SelectComparison/VersionDrawer/CreatedAtCell.js'\nimport { buildVersionColumns } from './buildColumns.js'\nimport { VersionsViewClient } from './index.client.js'\nimport './index.scss'\n\nconst baseClass = 'versions'\n\nexport async function VersionsView(props: DocumentViewServerProps) {\n const {\n hasPublishedDoc,\n initPageResult: {\n collectionConfig,\n docID: id,\n globalConfig,\n req,\n req: {\n i18n,\n payload: { config },\n t,\n user,\n },\n },\n routeSegments: segments,\n searchParams: { limit, page, sort },\n versions: { disableGutter = false, useVersionDrawerCreatedAtCell = false } = {},\n } = props\n\n const draftsEnabled = hasDraftsEnabled(collectionConfig || globalConfig)\n\n const collectionSlug = collectionConfig?.slug\n const globalSlug = globalConfig?.slug\n\n const isTrashed = segments[2] === 'trash'\n\n const {\n localization,\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const whereQuery: {\n and: Array<{ parent?: { equals: number | string }; snapshot?: { not_equals: boolean } }>\n } & Where = {\n and: [],\n }\n if (localization && draftsEnabled) {\n whereQuery.and.push({\n snapshot: {\n not_equals: true,\n },\n })\n }\n\n const defaultLimit = collectionSlug ? collectionConfig?.admin?.pagination?.defaultLimit : 10\n\n const limitToUse = isNumber(limit) ? Number(limit) : defaultLimit\n\n const versionsData: PaginatedDocs = await fetchVersions({\n collectionSlug,\n depth: 0,\n globalSlug,\n limit: limitToUse,\n locale: req.locale,\n overrideAccess: false,\n page: page ? parseInt(page.toString(), 10) : undefined,\n parentID: id,\n req,\n sort: sort as string,\n user,\n where: whereQuery,\n })\n\n if (!versionsData) {\n return notFound()\n }\n\n const [currentlyPublishedVersion, latestDraftVersion] = await Promise.all([\n hasPublishedDoc\n ? fetchLatestVersion({\n collectionSlug,\n depth: 0,\n globalSlug,\n locale: req.locale,\n overrideAccess: false,\n parentID: id,\n req,\n select: {\n id: true,\n updatedAt: true,\n version: {\n _status: true,\n updatedAt: true,\n },\n },\n status: 'published',\n user,\n where: {\n snapshot: {\n not_equals: true,\n },\n },\n })\n : Promise.resolve(null),\n draftsEnabled\n ? fetchLatestVersion({\n collectionSlug,\n depth: 0,\n globalSlug,\n locale: req.locale,\n overrideAccess: false,\n parentID: id,\n req,\n select: {\n id: true,\n updatedAt: true,\n version: {\n _status: true,\n updatedAt: true,\n },\n },\n status: 'draft',\n user,\n where: {\n snapshot: {\n not_equals: true,\n },\n },\n })\n : Promise.resolve(null),\n ])\n\n const fetchURL = formatAdminURL({\n apiRoute,\n path: collectionSlug ? `/${collectionSlug}/versions` : `/${globalSlug}/versions`,\n })\n\n const columns = buildVersionColumns({\n collectionConfig,\n CreatedAtCellOverride: useVersionDrawerCreatedAtCell ? VersionDrawerCreatedAtCell : undefined,\n currentlyPublishedVersion,\n docID: id,\n docs: versionsData?.docs,\n globalConfig,\n i18n,\n isTrashed,\n latestDraftVersion,\n })\n\n const pluralLabel =\n typeof collectionConfig?.labels?.plural === 'function'\n ? collectionConfig.labels.plural({ i18n, t })\n : (collectionConfig?.labels?.plural ?? globalConfig?.label)\n\n const GutterComponent = disableGutter ? React.Fragment : Gutter\n\n return (\n <React.Fragment>\n <SetDocumentStepNav\n collectionSlug={collectionSlug}\n globalSlug={globalSlug}\n id={id}\n isTrashed={isTrashed}\n pluralLabel={pluralLabel}\n useAsTitle={collectionConfig?.admin?.useAsTitle || globalSlug}\n view={i18n.t('version:versions')}\n />\n <main className={baseClass}>\n <GutterComponent className={`${baseClass}__wrap`}>\n <ListQueryProvider\n data={versionsData}\n modifySearchParams\n orderableFieldName={collectionConfig?.orderable === true ? '_order' : undefined}\n query={{\n limit: limitToUse,\n sort: sort as string,\n }}\n >\n <VersionsViewClient\n baseClass={baseClass}\n columns={columns}\n fetchURL={fetchURL}\n paginationLimits={collectionConfig?.admin?.pagination?.limits}\n />\n </ListQueryProvider>\n </GutterComponent>\n </main>\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Gutter","ListQueryProvider","SetDocumentStepNav","notFound","formatAdminURL","hasDraftsEnabled","isNumber","React","fetchLatestVersion","fetchVersions","VersionDrawerCreatedAtCell","buildVersionColumns","VersionsViewClient","baseClass","VersionsView","props","hasPublishedDoc","initPageResult","collectionConfig","docID","id","globalConfig","req","i18n","payload","config","t","user","routeSegments","segments","searchParams","limit","page","sort","versions","disableGutter","useVersionDrawerCreatedAtCell","draftsEnabled","collectionSlug","slug","globalSlug","isTrashed","localization","routes","api","apiRoute","serverURL","whereQuery","and","push","snapshot","not_equals","defaultLimit","admin","pagination","limitToUse","Number","versionsData","depth","locale","overrideAccess","parseInt","toString","undefined","parentID","where","currentlyPublishedVersion","latestDraftVersion","Promise","all","select","updatedAt","version","_status","status","resolve","fetchURL","path","columns","CreatedAtCellOverride","docs","pluralLabel","labels","plural","label","GutterComponent","Fragment","_jsxs","_jsx","useAsTitle","view","className","data","modifySearchParams","orderableFieldName","orderable","query","paginationLimits","limits"],"sources":["../../../src/views/Versions/index.tsx"],"sourcesContent":["import { Gutter, ListQueryProvider, SetDocumentStepNav } from '@payloadcms/ui'\nimport { notFound } from 'next/navigation.js'\nimport { type DocumentViewServerProps, type PaginatedDocs, type Where } from 'payload'\nimport { formatAdminURL, hasDraftsEnabled, isNumber } from 'payload/shared'\nimport React from 'react'\n\nimport { fetchLatestVersion, fetchVersions } from '../Version/fetchVersions.js'\nimport { VersionDrawerCreatedAtCell } from '../Version/SelectComparison/VersionDrawer/CreatedAtCell.js'\nimport { buildVersionColumns } from './buildColumns.js'\nimport { VersionsViewClient } from './index.client.js'\nimport './index.scss'\n\nconst baseClass = 'versions'\n\nexport async function VersionsView(props: DocumentViewServerProps) {\n const {\n hasPublishedDoc,\n initPageResult: {\n collectionConfig,\n docID: id,\n globalConfig,\n req,\n req: {\n i18n,\n payload: { config },\n t,\n user,\n },\n },\n routeSegments: segments,\n searchParams: { limit, page, sort },\n versions: { disableGutter = false, useVersionDrawerCreatedAtCell = false } = {},\n } = props\n\n const draftsEnabled = hasDraftsEnabled(collectionConfig || globalConfig)\n\n const collectionSlug = collectionConfig?.slug\n const globalSlug = globalConfig?.slug\n\n const isTrashed = segments[2] === 'trash'\n\n const {\n localization,\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const whereQuery: {\n and: Array<{ parent?: { equals: number | string }; snapshot?: { not_equals: boolean } }>\n } & Where = {\n and: [],\n }\n if (localization && draftsEnabled) {\n whereQuery.and.push({\n snapshot: {\n not_equals: true,\n },\n })\n }\n\n const defaultLimit = collectionSlug ? collectionConfig?.admin?.pagination?.defaultLimit : 10\n\n const limitToUse = isNumber(limit) ? Number(limit) : defaultLimit\n\n const versionsData: PaginatedDocs = await fetchVersions({\n collectionSlug,\n depth: 0,\n globalSlug,\n limit: limitToUse,\n locale: req.locale,\n overrideAccess: false,\n page: page ? parseInt(page.toString(), 10) : undefined,\n parentID: id,\n req,\n sort: sort as string,\n user,\n where: whereQuery,\n })\n\n if (!versionsData) {\n return notFound()\n }\n\n const [currentlyPublishedVersion, latestDraftVersion] = await Promise.all([\n hasPublishedDoc\n ? fetchLatestVersion({\n collectionSlug,\n depth: 0,\n globalSlug,\n locale: req.locale,\n overrideAccess: false,\n parentID: id,\n req,\n select: {\n id: true,\n updatedAt: true,\n version: {\n _status: true,\n updatedAt: true,\n },\n },\n status: 'published',\n user,\n where: localization\n ? {\n snapshot: {\n not_equals: true,\n },\n }\n : undefined,\n })\n : Promise.resolve(null),\n draftsEnabled\n ? fetchLatestVersion({\n collectionSlug,\n depth: 0,\n globalSlug,\n locale: req.locale,\n overrideAccess: false,\n parentID: id,\n req,\n select: {\n id: true,\n updatedAt: true,\n version: {\n _status: true,\n updatedAt: true,\n },\n },\n status: 'draft',\n user,\n where: localization\n ? {\n snapshot: {\n not_equals: true,\n },\n }\n : undefined,\n })\n : Promise.resolve(null),\n ])\n\n const fetchURL = formatAdminURL({\n apiRoute,\n path: collectionSlug ? `/${collectionSlug}/versions` : `/${globalSlug}/versions`,\n })\n\n const columns = buildVersionColumns({\n collectionConfig,\n CreatedAtCellOverride: useVersionDrawerCreatedAtCell ? VersionDrawerCreatedAtCell : undefined,\n currentlyPublishedVersion,\n docID: id,\n docs: versionsData?.docs,\n globalConfig,\n i18n,\n isTrashed,\n latestDraftVersion,\n })\n\n const pluralLabel =\n typeof collectionConfig?.labels?.plural === 'function'\n ? collectionConfig.labels.plural({ i18n, t })\n : (collectionConfig?.labels?.plural ?? globalConfig?.label)\n\n const GutterComponent = disableGutter ? React.Fragment : Gutter\n\n return (\n <React.Fragment>\n <SetDocumentStepNav\n collectionSlug={collectionSlug}\n globalSlug={globalSlug}\n id={id}\n isTrashed={isTrashed}\n pluralLabel={pluralLabel}\n useAsTitle={collectionConfig?.admin?.useAsTitle || globalSlug}\n view={i18n.t('version:versions')}\n />\n <main className={baseClass}>\n <GutterComponent className={`${baseClass}__wrap`}>\n <ListQueryProvider\n data={versionsData}\n modifySearchParams\n orderableFieldName={collectionConfig?.orderable === true ? '_order' : undefined}\n query={{\n limit: limitToUse,\n sort: sort as string,\n }}\n >\n <VersionsViewClient\n baseClass={baseClass}\n columns={columns}\n fetchURL={fetchURL}\n paginationLimits={collectionConfig?.admin?.pagination?.limits}\n />\n </ListQueryProvider>\n </GutterComponent>\n </main>\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/next",
3
- "version": "3.78.0-canary.6",
3
+ "version": "3.78.0-canary.8",
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/translations": "3.78.0-canary.6",
103
- "@payloadcms/graphql": "3.78.0-canary.6",
104
- "@payloadcms/ui": "3.78.0-canary.6"
102
+ "@payloadcms/graphql": "3.78.0-canary.8",
103
+ "@payloadcms/translations": "3.78.0-canary.8",
104
+ "@payloadcms/ui": "3.78.0-canary.8"
105
105
  },
106
106
  "devDependencies": {
107
107
  "@babel/cli": "7.27.2",
@@ -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
- "payload": "3.78.0-canary.6",
122
- "@payloadcms/eslint-config": "3.28.0"
121
+ "@payloadcms/eslint-config": "3.28.0",
122
+ "payload": "3.78.0-canary.8"
123
123
  },
124
124
  "peerDependencies": {
125
125
  "graphql": "^16.8.1",
126
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.78.0-canary.6"
127
+ "payload": "3.78.0-canary.8"
128
128
  },
129
129
  "engines": {
130
130
  "node": "^18.20.2 || >=20.9.0"