@gravity-ui/dashkit 10.1.0 → 10.1.2

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.
@@ -15,6 +15,7 @@ export default class GridLayout extends React.PureComponent<GridLayoutProps, Gri
15
15
  private _memoGroupsItems;
16
16
  private _sharedDragRef;
17
17
  private _sharedDragPositionRef;
18
+ private _groupResetRegistryRef;
18
19
  private _timeout?;
19
20
  private _lastReloadAt?;
20
21
  private _parendDragNode;
@@ -62,6 +63,7 @@ export default class GridLayout extends React.PureComponent<GridLayoutProps, Gri
62
63
  w?: number;
63
64
  h?: number;
64
65
  } | false | undefined;
66
+ _clearSharedDragState(): void;
65
67
  renderTemporaryPlaceholder(gridLayout: Partial<ReactGridLayoutProps>): JSX.Element | null;
66
68
  renderGroup(group: string, renderLayout: ConfigLayout[], renderItems: ConfigItem[], offset?: number, groupGridProperties?: (props: ReactGridLayoutProps) => ReactGridLayoutProps): JSX.Element;
67
69
  render(): JSX.Element | (string | number | boolean | JSX.Element | React.ReactFragment | null | undefined)[];
@@ -25,6 +25,9 @@ class GridLayout extends react_1.default.PureComponent {
25
25
  this._memoGroupsItems = {};
26
26
  this._sharedDragRef = { current: { isDragging: false, sourceGroup: null } };
27
27
  this._sharedDragPositionRef = { current: null };
28
+ this._groupResetRegistryRef = {
29
+ current: new Map(),
30
+ };
28
31
  this._parendDragNode = null;
29
32
  this.onVisibilityChange = () => {
30
33
  this.setState({
@@ -89,8 +92,7 @@ class GridLayout extends react_1.default.PureComponent {
89
92
  return;
90
93
  }
91
94
  const groupedLayout = this.mergeGroupsLayout(group, newLayout);
92
- this._sharedDragRef.current = { isDragging: false, sourceGroup: null };
93
- this._sharedDragPositionRef.current = null;
95
+ this._clearSharedDragState();
94
96
  this.setState({
95
97
  isDragging: false,
96
98
  currentDraggingElement: null,
@@ -125,8 +127,7 @@ class GridLayout extends react_1.default.PureComponent {
125
127
  }
126
128
  return item;
127
129
  });
128
- this._sharedDragRef.current = { isDragging: false, sourceGroup: null };
129
- this._sharedDragPositionRef.current = null;
130
+ this._clearSharedDragState();
130
131
  this.setState({
131
132
  isDragging: false,
132
133
  currentDraggingElement: null,
@@ -417,7 +418,9 @@ class GridLayout extends react_1.default.PureComponent {
417
418
  this.setState({ isDragging: true });
418
419
  }
419
420
  else {
420
- this._sharedDragRef.current = { isDragging: true, sourceGroup: group };
421
+ if (!this._sharedDragRef.current.isDragging) {
422
+ this._sharedDragRef.current = { isDragging: true, sourceGroup: group };
423
+ }
421
424
  this._initDragCoordinatesWatcher(element);
422
425
  this.updateDraggingElementState(group, layoutItem, e);
423
426
  this.setState({ isDragging: true });
@@ -463,6 +466,13 @@ class GridLayout extends react_1.default.PureComponent {
463
466
  });
464
467
  }
465
468
  }
469
+ _clearSharedDragState() {
470
+ this._sharedDragRef.current = { isDragging: false, sourceGroup: null };
471
+ this._sharedDragPositionRef.current = null;
472
+ // Reset all group placeholders — covers the case where mouseup happens
473
+ // in a gap between groups and no individual group's mouseUpHandler fires.
474
+ this._groupResetRegistryRef.current.forEach((reset) => reset());
475
+ }
466
476
  renderTemporaryPlaceholder(gridLayout) {
467
477
  const { temporaryLayout, noOverlay, draggableHandleClassName } = this.context;
468
478
  if (!temporaryLayout || !temporaryLayout.dragProps) {
@@ -495,7 +505,7 @@ class GridLayout extends react_1.default.PureComponent {
495
505
  const groupIsAnyDragging = isDragging && isSourceGroup;
496
506
  const groupCurrentDraggingItemId = isSourceGroup ? currentDraggingItemId : null;
497
507
  const groupIsAnyDraggedOut = isSourceGroup ? isDraggedOut : false;
498
- return (react_1.default.createElement(GroupLayout_1.GroupLayout, { key: `group_${group}`, group: group, renderItems: renderItems, offset: offset, properties: stableProperties, compactType: compactType, callbacks: callbacks, layout: layout, temporaryPlaceholder: this.renderTemporaryPlaceholder(stableProperties), dragStateRef: this._sharedDragRef, sharedDragPositionRef: this._sharedDragPositionRef, isDragCaptured: isDragCaptured, isAnyDragging: groupIsAnyDragging, currentDraggingItemId: groupCurrentDraggingItemId, isAnyDraggedOut: groupIsAnyDraggedOut, adjustWidgetLayout: this.adjustWidgetLayout, getMemoForwardRefCallback: this.getMemoForwardRefCallback }));
508
+ return (react_1.default.createElement(GroupLayout_1.GroupLayout, { key: `group_${group}`, group: group, renderItems: renderItems, offset: offset, properties: stableProperties, compactType: compactType, callbacks: callbacks, layout: layout, temporaryPlaceholder: this.renderTemporaryPlaceholder(stableProperties), dragStateRef: this._sharedDragRef, sharedDragPositionRef: this._sharedDragPositionRef, groupResetRegistryRef: this._groupResetRegistryRef, isDragCaptured: isDragCaptured, isAnyDragging: groupIsAnyDragging, currentDraggingItemId: groupCurrentDraggingItemId, isAnyDraggedOut: groupIsAnyDraggedOut, adjustWidgetLayout: this.adjustWidgetLayout, getMemoForwardRefCallback: this.getMemoForwardRefCallback }));
499
509
  }
500
510
  render() {
501
511
  const { config, groups, editMode, context } = this.context;
@@ -1 +1 @@
1
- {"version":3,"file":"GridLayout.js","sourceRoot":"../../../../src","sources":["components/GridLayout/GridLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DragOverEvent} from 'react-grid-layout';\n\nimport type {PluginRef, PluginWidgetProps, ReactGridLayoutProps} from 'src/typings';\n\nimport {COMPACT_TYPE_HORIZONTAL_NOWRAP, DEFAULT_GROUP, TEMPORARY_ITEM_ID} from '../../constants';\nimport type {DashKitCtxShape} from '../../context';\nimport {DashKitContext} from '../../context';\nimport type {ConfigItem, ConfigLayout, DraggedOverItem} from '../../shared';\nimport {resolveLayoutGroup} from '../../utils';\nimport GridItem from '../GridItem/GridItem';\n\nimport {GroupLayout} from './GroupLayout';\nimport type {\n CurrentDraggingElement,\n GridLayoutProps,\n GridLayoutState,\n GroupCallbacks,\n LayoutAndPropsByGroup,\n ManipulationCallbackArgs,\n MemoGroupLayout,\n ReloadItemsOptions,\n} from './types';\n\nconst hasPluginId = (value: PluginRef): value is {props: {id: string}} => {\n return (\n value !== null &&\n 'props' in value &&\n typeof value.props === 'object' &&\n value.props !== null &&\n 'id' in value.props &&\n typeof value.props.id === 'string'\n );\n};\n\nexport default class GridLayout extends React.PureComponent<GridLayoutProps, GridLayoutState> {\n static contextType = DashKitContext;\n context!: DashKitCtxShape;\n\n pluginsRefs: Array<PluginRef>;\n\n private _memoForwardedPluginRef: Array<(pluginRef: PluginRef) => void> = [];\n private _memoGroupsProps: Record<string, Partial<ReactGridLayoutProps>> = {};\n private _memoGroupsLayouts: Record<string, MemoGroupLayout> = {};\n private _memoCallbacksForGroups: Record<string, GroupCallbacks> = {};\n private _memoGroupsItems: Record<string, ConfigItem[]> = {};\n\n private _sharedDragRef: React.MutableRefObject<{\n isDragging: boolean;\n sourceGroup: string | null;\n }> = {current: {isDragging: false, sourceGroup: null}};\n private _sharedDragPositionRef: React.MutableRefObject<{\n offsetX: number;\n offsetY: number;\n } | null> = {current: null};\n\n private _timeout?: NodeJS.Timeout;\n private _lastReloadAt?: number;\n private _parendDragNode: HTMLElement | null = null;\n\n constructor(props: GridLayoutProps, context: DashKitCtxShape) {\n super(props, context);\n this.pluginsRefs = [];\n this.state = {\n isDragging: false,\n isDraggedOut: false,\n isPageHidden: false,\n currentDraggingElement: null,\n draggedOverGroup: null,\n };\n }\n\n componentDidMount() {\n this.reloadItems();\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n }\n\n componentDidUpdate() {\n clearTimeout(this._timeout);\n this.reloadItems();\n }\n\n componentWillUnmount() {\n clearTimeout(this._timeout);\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n\n this._memoCallbacksForGroups = {};\n this._memoGroupsProps = {};\n this._memoGroupsLayouts = {};\n this._memoGroupsItems = {};\n this._memoForwardedPluginRef = [];\n }\n\n onVisibilityChange = () => {\n this.setState({\n isPageHidden: document.hidden,\n });\n };\n\n adjustWidgetLayout: PluginWidgetProps['adjustWidgetLayout'] = ({\n widgetId,\n needSetDefault,\n adjustedWidgetLayout,\n }) => {\n const {layout, memorizeOriginalLayout, revertToOriginalLayout} = this.context;\n\n if (needSetDefault) {\n revertToOriginalLayout(widgetId);\n return;\n }\n\n if (!adjustedWidgetLayout) {\n return;\n }\n\n const correspondedLayoutItemIndex = layout.findIndex(\n (layoutItem) => layoutItem.i === widgetId,\n );\n\n memorizeOriginalLayout(\n widgetId,\n {...layout[correspondedLayoutItemIndex]},\n adjustedWidgetLayout,\n );\n };\n\n getItemsMeta = () => {\n const {getItemsMeta} = this.context;\n return getItemsMeta(this.pluginsRefs);\n };\n\n getActiveLayout(): ConfigLayout[] {\n const {layout, temporaryLayout} = this.context;\n\n return temporaryLayout?.data || layout;\n }\n\n getMemoGroupLayout(group: string, layout: ConfigLayout[]): MemoGroupLayout {\n // fastest possible way to match json\n const key = JSON.stringify(layout);\n\n if (this._memoGroupsLayouts[group]) {\n if (this._memoGroupsLayouts[group].key === key) {\n return this._memoGroupsLayouts[group];\n } else {\n this._memoGroupsLayouts[group].key = key;\n this._memoGroupsLayouts[group].layout = layout;\n }\n } else {\n this._memoGroupsLayouts[group] = {\n key,\n layout,\n };\n }\n\n return this._memoGroupsLayouts[group];\n }\n\n getMemoGroupCallbacks(group: string): GroupCallbacks {\n if (!this._memoCallbacksForGroups[group]) {\n const onDragStart = this._onDragStart.bind(this, group);\n const onDrag = this._onDrag.bind(this, group);\n const onDragStop = this._onDragStop.bind(this, group);\n\n const onResizeStart = this._onResizeStart.bind(this, group);\n const onResize = this._onResize.bind(this, group);\n const onResizeStop = this._onResizeStop.bind(this, group);\n\n const onDrop = this._onDrop.bind(this, group);\n const onDropDragOver = this._onDropDragOver.bind(this, group);\n const onDragTargetRestore = this._onTargetRestore.bind(this);\n\n this._memoCallbacksForGroups[group] = {\n onDragStart,\n onDrag,\n onDragStop,\n onResizeStart,\n onResize,\n onResizeStop,\n onDrop,\n onDropDragOver,\n onDragTargetRestore,\n };\n }\n\n return this._memoCallbacksForGroups[group];\n }\n\n getMemoGroupItems(group: string, nextItems: ConfigItem[]): ConfigItem[] {\n const prev = this._memoGroupsItems[group];\n if (\n prev &&\n prev.length === nextItems.length &&\n prev.every((item, i) => item === nextItems[i])\n ) {\n return prev;\n }\n this._memoGroupsItems[group] = nextItems;\n return nextItems;\n }\n\n getMemoGroupProps = (\n group: string,\n renderLayout: ConfigLayout[],\n nextProperties: Partial<ReactGridLayoutProps>,\n ) => {\n // Return stable ref to prevent useMemo invalidation when properties are shallowly equal.\n const prevProperties = this._memoGroupsProps[group];\n const keysNext = Object.keys(nextProperties) as Array<keyof ReactGridLayoutProps>;\n const stableProperties =\n prevProperties &&\n Object.keys(prevProperties).length === keysNext.length &&\n keysNext.every((k) => prevProperties[k] === nextProperties[k])\n ? prevProperties\n : nextProperties;\n\n // Needed for _onDropDragOver\n this._memoGroupsProps[group] = stableProperties;\n\n return {\n layout: this.getMemoGroupLayout(group, renderLayout).layout,\n callbacks: this.getMemoGroupCallbacks(group),\n stableProperties,\n };\n };\n\n getLayoutAndPropsByGroup = (group: string): LayoutAndPropsByGroup => {\n return {\n properties: this._memoGroupsProps[group],\n layout: this._memoGroupsLayouts[group].layout,\n };\n };\n\n getMemoForwardRefCallback = (refIndex: number) => {\n if (!this._memoForwardedPluginRef[refIndex]) {\n this._memoForwardedPluginRef[refIndex] = (pluginRef: PluginRef) => {\n this.pluginsRefs[refIndex] = pluginRef;\n };\n }\n\n return this._memoForwardedPluginRef[refIndex];\n };\n\n mergeGroupsLayout(\n group: string,\n newLayout: ConfigLayout[],\n temporaryItem?: ConfigLayout,\n ): ConfigLayout[] {\n const renderLayout = this.getActiveLayout();\n const itemsByGroup = renderLayout.reduce<Record<string, ConfigLayout>>(\n (memo, item) => {\n memo[item.i] = item;\n return memo;\n },\n temporaryItem ? {[temporaryItem.i]: temporaryItem} : {},\n );\n\n const newItemsLayoutById = newLayout.reduce<Record<string, ConfigLayout>>((memo, item) => {\n const parent = itemsByGroup[item.i]?.parent;\n memo[item.i] = {...item};\n\n if (parent) {\n memo[item.i].parent = parent;\n }\n return memo;\n }, {});\n\n return renderLayout.map((currentItem) => {\n const itemParent = resolveLayoutGroup(itemsByGroup[currentItem.i]);\n\n if (itemParent === group) {\n return newItemsLayoutById[currentItem.i];\n }\n\n return currentItem;\n });\n }\n\n reloadItems(options?: ReloadItemsOptions) {\n const {targetIds, force} = options || {};\n\n const {\n editMode,\n settings: {autoupdateInterval, silentLoading} = {},\n reloadItems,\n } = this.context;\n\n const {isPageHidden} = this.state;\n\n const autoupdateIntervalMs = Number(autoupdateInterval) * 1000;\n\n const targetPlugins = targetIds\n ? this.pluginsRefs.filter(\n (plugin) => hasPluginId(plugin) && targetIds.includes(plugin.props.id),\n )\n : this.pluginsRefs;\n\n if (autoupdateIntervalMs) {\n const timeSinceLastReload = new Date().getTime() - (this._lastReloadAt || 0);\n const reloadIntervalRemains = autoupdateIntervalMs - timeSinceLastReload;\n\n if (force || (!isPageHidden && !editMode && reloadIntervalRemains <= 0)) {\n this._lastReloadAt = new Date().getTime();\n reloadItems(targetPlugins, {silentLoading: Boolean(silentLoading), noVeil: true});\n }\n\n this._timeout = setTimeout(\n () => this.reloadItems(),\n reloadIntervalRemains <= 0 ? autoupdateIntervalMs : reloadIntervalRemains,\n );\n } else if (force) {\n reloadItems(targetPlugins, {silentLoading: Boolean(silentLoading), noVeil: true});\n }\n }\n\n prepareDefaultArguments(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ): ManipulationCallbackArgs {\n return {\n group,\n layout,\n oldItem,\n newItem,\n placeholder,\n e,\n element,\n };\n }\n\n updateDraggingElementState(group: string, layoutItem: ConfigLayout, e: MouseEvent) {\n let currentDraggingElement: CurrentDraggingElement | null =\n this.state.currentDraggingElement;\n\n if (!currentDraggingElement) {\n const {temporaryLayout} = this.context;\n const layoutId = layoutItem.i;\n\n const item = temporaryLayout\n ? temporaryLayout.dragProps\n : this.context.configItems.find(({id}) => id === layoutId);\n\n if (!item) {\n return;\n }\n\n let {offsetX, offsetY} =\n (e as MouseEvent & {nativeEvent?: MouseEvent}).nativeEvent || {};\n if (offsetX === undefined || offsetY === undefined) {\n const target = e.currentTarget as HTMLElement;\n const gridRect = target?.getBoundingClientRect();\n\n offsetX = e.clientX - (gridRect?.left || 0);\n offsetY = e.clientY - (gridRect?.top || 0);\n }\n\n currentDraggingElement = {\n group,\n layoutItem,\n item,\n cursorPosition: {offsetX, offsetY},\n };\n\n // Update imperatively so DragOverLayout reads fresh cursor offset without re-render.\n this._sharedDragPositionRef.current = {offsetX, offsetY};\n }\n\n this.setState({currentDraggingElement, draggedOverGroup: group});\n }\n\n _initDragCoordinatesWatcher(element: HTMLElement) {\n if (!this._parendDragNode) {\n this._parendDragNode = element.parentElement;\n this.setState({isDraggedOut: false});\n }\n }\n\n // When element is going back and prointer-event: none is removed mouse enter event is not fired\n // So to trigger it we are forcing this event by adding transparent block under the mouse\n _forceCursorCapture(\n parentElement: HTMLElement,\n position: {top: number; left: number},\n parentRect: DOMRect,\n ) {\n const block = document.createElement('div');\n block.classList.add('react-grid-focus-capture');\n\n const blockSize = 44;\n const offset = blockSize / 2;\n\n // Keeping elemnt inside current grid\n const top = Math.min(Math.max(position.top - offset, 0), parentRect.height - blockSize);\n const left = Math.min(Math.max(position.left - offset, 0), parentRect.width - blockSize);\n\n block.style.width = `${blockSize}px`;\n block.style.height = `${blockSize}px`;\n block.style.top = `${top}px`;\n block.style.left = `${left}px`;\n\n parentElement.appendChild(block);\n\n setTimeout(() => {\n block.remove();\n }, 100);\n }\n\n _updateDragCoordinates(e: MouseEvent) {\n const parent = this._parendDragNode;\n\n if (!parent) {\n return;\n }\n\n const parentRect = parent.getBoundingClientRect();\n const {clientX, clientY} = e;\n\n let isDraggedOut = this.state.isDraggedOut;\n if (\n clientX < parentRect.left ||\n clientX > parentRect.right ||\n clientY < parentRect.top ||\n clientY > parentRect.bottom\n ) {\n isDraggedOut = true;\n } else {\n isDraggedOut = false;\n }\n\n if (isDraggedOut !== this.state.isDraggedOut) {\n this.setState({isDraggedOut});\n\n if (!isDraggedOut) {\n this._forceCursorCapture(\n parent,\n {\n top: clientY - parentRect.top,\n left: clientX - parentRect.left,\n },\n parentRect,\n );\n }\n }\n }\n\n _resetDragWatcher() {\n this._parendDragNode = null;\n this.setState({isDraggedOut: false});\n }\n\n _onDragStart(\n group: string,\n _newLayout: ConfigLayout[],\n layoutItem: ConfigLayout,\n _newItem: ConfigLayout,\n _placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n this.context.onDragStart?.call(\n this,\n this.prepareDefaultArguments(\n group,\n _newLayout,\n layoutItem,\n _newItem,\n _placeholder,\n e,\n element,\n ),\n );\n\n if (this.context.dragOverPlugin) {\n this.setState({isDragging: true});\n } else {\n this._sharedDragRef.current = {isDragging: true, sourceGroup: group};\n this._initDragCoordinatesWatcher(element);\n this.updateDraggingElementState(group, layoutItem, e);\n this.setState({isDragging: true});\n }\n }\n\n _onDrag(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n if (!this.context.dragOverPlugin) {\n this._updateDragCoordinates(e);\n }\n\n this.context.onDrag?.call(\n this,\n this.prepareDefaultArguments(group, layout, oldItem, newItem, placeholder, e, element),\n );\n }\n\n _onDragStop(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n this._resetDragWatcher();\n\n this._onStop(group, layout);\n\n this.context.onDragStop?.call(\n this,\n this.prepareDefaultArguments(group, layout, oldItem, newItem, placeholder, e, element),\n );\n }\n\n _onResizeStart(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n this.setState({\n isDragging: true,\n });\n\n this.context.onResizeStart?.call(\n this,\n this.prepareDefaultArguments(group, layout, oldItem, newItem, placeholder, e, element),\n );\n }\n\n _onResize(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n this.context.onResize?.call(\n this,\n this.prepareDefaultArguments(group, layout, oldItem, newItem, placeholder, e, element),\n );\n }\n\n _onResizeStop(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n this._onStop(group, layout);\n\n this.context.onResizeStop?.call(\n this,\n this.prepareDefaultArguments(group, layout, oldItem, newItem, placeholder, e, element),\n );\n }\n\n _onTargetRestore() {\n if (this.context.temporaryLayout) {\n return;\n }\n\n const {currentDraggingElement} = this.state;\n\n if (currentDraggingElement) {\n this.setState({\n draggedOverGroup: currentDraggingElement.group,\n });\n }\n }\n\n _onStop = (group: string, newLayout: ConfigLayout[]) => {\n const {layoutChange, onDrop, temporaryLayout} = this.context;\n const {draggedOverGroup, currentDraggingElement} = this.state;\n\n if (\n currentDraggingElement &&\n draggedOverGroup !== null &&\n draggedOverGroup !== currentDraggingElement.group\n ) {\n // Skipping layout update when change event called for source grid\n // and waiting _onDrop\n return;\n }\n\n const groupedLayout = this.mergeGroupsLayout(group, newLayout);\n\n this._sharedDragRef.current = {isDragging: false, sourceGroup: null};\n this._sharedDragPositionRef.current = null;\n this.setState({\n isDragging: false,\n currentDraggingElement: null,\n draggedOverGroup: null,\n });\n\n if (temporaryLayout) {\n const temporaryItem = groupedLayout.find(({i}) => i === TEMPORARY_ITEM_ID);\n if (onDrop && temporaryItem) {\n onDrop(groupedLayout, temporaryItem);\n }\n } else {\n layoutChange(groupedLayout);\n }\n };\n\n _onSharedDrop = (targetGroup: string, newLayout: ConfigLayout[], tempItem: ConfigLayout) => {\n const {currentDraggingElement} = this.state;\n const {layoutChange} = this.context;\n\n if (!currentDraggingElement) {\n return;\n }\n\n const sourceLayoutItem = currentDraggingElement.layoutItem;\n\n const groupedLayout = this.mergeGroupsLayout(targetGroup, newLayout, tempItem).map(\n (item) => {\n if (item.i === sourceLayoutItem.i) {\n const copy = {...tempItem};\n\n delete copy.parent;\n if (targetGroup !== DEFAULT_GROUP) {\n copy.parent = targetGroup;\n }\n copy.i = sourceLayoutItem.i;\n\n return copy;\n }\n\n return item;\n },\n );\n\n this._sharedDragRef.current = {isDragging: false, sourceGroup: null};\n this._sharedDragPositionRef.current = null;\n this.setState({\n isDragging: false,\n currentDraggingElement: null,\n draggedOverGroup: null,\n });\n\n // TODO temporaryLayout\n layoutChange(groupedLayout);\n };\n\n _onExternalDrop = (\n group: string,\n newLayout: ConfigLayout[],\n item: ConfigLayout,\n e: MouseEvent,\n ) => {\n const {onDrop} = this.context;\n\n if (group !== DEFAULT_GROUP) {\n item.parent = group;\n }\n\n const groupedLayout = this.mergeGroupsLayout(group, newLayout, item);\n this._sharedDragRef.current = {isDragging: false, sourceGroup: null};\n this.setState({isDragging: false});\n\n onDrop?.(groupedLayout, item, e);\n };\n\n _onDrop = (\n group: string,\n newLayout: ConfigLayout[],\n item: ConfigLayout | undefined,\n e: MouseEvent,\n ): void | false => {\n if (!item || !this.context.editMode) {\n return false;\n }\n\n const {draggedOverGroup, currentDraggingElement} = this.state;\n if (currentDraggingElement && draggedOverGroup === group) {\n this._onSharedDrop(group, newLayout, item);\n } else {\n this._onExternalDrop(group, newLayout, item, e);\n }\n };\n\n _onDropDragOver = (\n group: string,\n e: DragOverEvent,\n ): {w?: number; h?: number} | false | undefined => {\n const {editMode, dragOverPlugin, onDropDragOver, temporaryLayout} = this.context;\n const {currentDraggingElement} = this.state;\n\n // TODO If temporary item is trying to change group\n if (temporaryLayout && currentDraggingElement) {\n return false;\n }\n\n if (!editMode || (!dragOverPlugin && !currentDraggingElement)) {\n return false;\n }\n\n const {properties, layout} = this.getLayoutAndPropsByGroup(group);\n\n if (currentDraggingElement) {\n const {h, w, i} = currentDraggingElement.layoutItem;\n const {type} = currentDraggingElement.item;\n const sharedItem: DraggedOverItem = {\n h,\n w,\n i,\n type,\n parent: currentDraggingElement.group,\n };\n\n return onDropDragOver(e, group, properties, layout, sharedItem);\n }\n\n if (dragOverPlugin) {\n return onDropDragOver(e, group, properties, layout);\n }\n\n return false;\n };\n\n renderTemporaryPlaceholder(gridLayout: Partial<ReactGridLayoutProps>) {\n const {temporaryLayout, noOverlay, draggableHandleClassName} = this.context;\n\n if (!temporaryLayout || !temporaryLayout.dragProps) {\n return null;\n }\n\n const id = TEMPORARY_ITEM_ID;\n const {type} = temporaryLayout.dragProps;\n\n return (\n <GridItem\n key={id}\n id={id}\n item={{id, type, data: {}} as ConfigItem}\n layout={temporaryLayout.data}\n adjustWidgetLayout={this.adjustWidgetLayout}\n isDragging={this.state.isDragging}\n isPlaceholder={true}\n noOverlay={noOverlay}\n withCustomHandle={Boolean(draggableHandleClassName)}\n gridLayout={gridLayout}\n />\n );\n }\n\n renderGroup(\n group: string,\n renderLayout: ConfigLayout[],\n renderItems: ConfigItem[],\n offset = 0,\n groupGridProperties?: (props: ReactGridLayoutProps) => ReactGridLayoutProps,\n ) {\n const {registerManager} = this.context;\n const {currentDraggingElement, draggedOverGroup, isDragging, isDraggedOut} = this.state;\n\n const hasOwnGroupProperties = typeof groupGridProperties === 'function';\n const properties = hasOwnGroupProperties\n ? groupGridProperties({...registerManager.gridLayout})\n : registerManager.gridLayout;\n\n const {callbacks, layout, stableProperties} = this.getMemoGroupProps(\n group,\n renderLayout,\n properties,\n );\n\n const compactType: 'vertical' | 'horizontal' | null | undefined =\n stableProperties.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP\n ? 'horizontal'\n : stableProperties.compactType;\n\n const isDragCaptured = Boolean(\n currentDraggingElement &&\n group === currentDraggingElement.group &&\n draggedOverGroup !== null &&\n draggedOverGroup !== group,\n );\n const currentDraggingItemId =\n currentDraggingElement && 'id' in currentDraggingElement.item\n ? currentDraggingElement.item.id\n : null;\n\n // Non-source groups get stable false/null — memo skips re-render on drag move.\n const isSourceGroup = Boolean(currentDraggingElement?.group === group);\n const groupIsAnyDragging = isDragging && isSourceGroup;\n const groupCurrentDraggingItemId = isSourceGroup ? currentDraggingItemId : null;\n const groupIsAnyDraggedOut = isSourceGroup ? isDraggedOut : false;\n\n return (\n <GroupLayout\n key={`group_${group}`}\n group={group}\n renderItems={renderItems}\n offset={offset}\n properties={stableProperties}\n compactType={compactType}\n callbacks={callbacks}\n layout={layout}\n temporaryPlaceholder={this.renderTemporaryPlaceholder(stableProperties)}\n dragStateRef={this._sharedDragRef}\n sharedDragPositionRef={this._sharedDragPositionRef}\n isDragCaptured={isDragCaptured}\n isAnyDragging={groupIsAnyDragging}\n currentDraggingItemId={groupCurrentDraggingItemId}\n isAnyDraggedOut={groupIsAnyDraggedOut}\n adjustWidgetLayout={this.adjustWidgetLayout}\n getMemoForwardRefCallback={this.getMemoForwardRefCallback}\n />\n );\n }\n\n render() {\n const {config, groups, editMode, context} = this.context;\n\n this.pluginsRefs.length = this.context.configItems.length;\n\n const defaultRenderLayout: ConfigLayout[] = [];\n const defaultRenderItems: ConfigItem[] = [];\n const layoutMap: Record<string, string> = {};\n\n const groupedLayout = this.getActiveLayout().reduce<Record<string, ConfigLayout[]>>(\n (memo, item) => {\n if (item.parent) {\n if (!memo[item.parent]) {\n memo[item.parent] = [];\n }\n\n memo[item.parent].push(item);\n layoutMap[item.i] = item.parent;\n } else {\n defaultRenderLayout.push(item);\n }\n\n return memo;\n },\n {},\n );\n\n const itemsByGroup = this.context.configItems.reduce<Record<string, ConfigItem[]>>(\n (memo, item) => {\n const group = layoutMap[item.id];\n if (group) {\n if (!memo[group]) {\n memo[group] = [];\n }\n memo[group].push(item);\n } else {\n defaultRenderItems.push(item);\n }\n\n return memo;\n },\n {},\n );\n\n let offset = 0;\n\n if (groups) {\n return groups.map((group) => {\n const id = group.id || DEFAULT_GROUP;\n\n let layout, items;\n\n if (id === DEFAULT_GROUP) {\n layout = defaultRenderLayout;\n items = defaultRenderItems;\n } else {\n layout = groupedLayout[id] || [];\n items = itemsByGroup[id] || [];\n }\n\n const stableItems = this.getMemoGroupItems(id, items);\n const element = this.renderGroup(\n id,\n layout,\n stableItems,\n offset,\n group.gridProperties,\n );\n offset += stableItems.length;\n\n if (group.render) {\n const groupContext = {\n isMobile: false,\n config,\n editMode,\n items,\n layout,\n context,\n };\n return group.render(id, element, groupContext);\n }\n\n return element;\n });\n } else {\n const stableDefaultItems = this.getMemoGroupItems(DEFAULT_GROUP, defaultRenderItems);\n return this.renderGroup(DEFAULT_GROUP, defaultRenderLayout, stableDefaultItems, offset);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"GridLayout.js","sourceRoot":"../../../../src","sources":["components/GridLayout/GridLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DragOverEvent} from 'react-grid-layout';\n\nimport type {PluginRef, PluginWidgetProps, ReactGridLayoutProps} from 'src/typings';\n\nimport {COMPACT_TYPE_HORIZONTAL_NOWRAP, DEFAULT_GROUP, TEMPORARY_ITEM_ID} from '../../constants';\nimport type {DashKitCtxShape} from '../../context';\nimport {DashKitContext} from '../../context';\nimport type {ConfigItem, ConfigLayout, DraggedOverItem} from '../../shared';\nimport {resolveLayoutGroup} from '../../utils';\nimport GridItem from '../GridItem/GridItem';\n\nimport {GroupLayout} from './GroupLayout';\nimport type {\n CurrentDraggingElement,\n GridLayoutProps,\n GridLayoutState,\n GroupCallbacks,\n LayoutAndPropsByGroup,\n ManipulationCallbackArgs,\n MemoGroupLayout,\n ReloadItemsOptions,\n} from './types';\n\nconst hasPluginId = (value: PluginRef): value is {props: {id: string}} => {\n return (\n value !== null &&\n 'props' in value &&\n typeof value.props === 'object' &&\n value.props !== null &&\n 'id' in value.props &&\n typeof value.props.id === 'string'\n );\n};\n\nexport default class GridLayout extends React.PureComponent<GridLayoutProps, GridLayoutState> {\n static contextType = DashKitContext;\n context!: DashKitCtxShape;\n\n pluginsRefs: Array<PluginRef>;\n\n private _memoForwardedPluginRef: Array<(pluginRef: PluginRef) => void> = [];\n private _memoGroupsProps: Record<string, Partial<ReactGridLayoutProps>> = {};\n private _memoGroupsLayouts: Record<string, MemoGroupLayout> = {};\n private _memoCallbacksForGroups: Record<string, GroupCallbacks> = {};\n private _memoGroupsItems: Record<string, ConfigItem[]> = {};\n\n private _sharedDragRef: React.MutableRefObject<{\n isDragging: boolean;\n sourceGroup: string | null;\n }> = {current: {isDragging: false, sourceGroup: null}};\n private _sharedDragPositionRef: React.MutableRefObject<{\n offsetX: number;\n offsetY: number;\n } | null> = {current: null};\n private _groupResetRegistryRef: React.MutableRefObject<Map<string, () => void>> = {\n current: new Map(),\n };\n\n private _timeout?: NodeJS.Timeout;\n private _lastReloadAt?: number;\n private _parendDragNode: HTMLElement | null = null;\n\n constructor(props: GridLayoutProps, context: DashKitCtxShape) {\n super(props, context);\n this.pluginsRefs = [];\n this.state = {\n isDragging: false,\n isDraggedOut: false,\n isPageHidden: false,\n currentDraggingElement: null,\n draggedOverGroup: null,\n };\n }\n\n componentDidMount() {\n this.reloadItems();\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n }\n\n componentDidUpdate() {\n clearTimeout(this._timeout);\n this.reloadItems();\n }\n\n componentWillUnmount() {\n clearTimeout(this._timeout);\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n\n this._memoCallbacksForGroups = {};\n this._memoGroupsProps = {};\n this._memoGroupsLayouts = {};\n this._memoGroupsItems = {};\n this._memoForwardedPluginRef = [];\n }\n\n onVisibilityChange = () => {\n this.setState({\n isPageHidden: document.hidden,\n });\n };\n\n adjustWidgetLayout: PluginWidgetProps['adjustWidgetLayout'] = ({\n widgetId,\n needSetDefault,\n adjustedWidgetLayout,\n }) => {\n const {layout, memorizeOriginalLayout, revertToOriginalLayout} = this.context;\n\n if (needSetDefault) {\n revertToOriginalLayout(widgetId);\n return;\n }\n\n if (!adjustedWidgetLayout) {\n return;\n }\n\n const correspondedLayoutItemIndex = layout.findIndex(\n (layoutItem) => layoutItem.i === widgetId,\n );\n\n memorizeOriginalLayout(\n widgetId,\n {...layout[correspondedLayoutItemIndex]},\n adjustedWidgetLayout,\n );\n };\n\n getItemsMeta = () => {\n const {getItemsMeta} = this.context;\n return getItemsMeta(this.pluginsRefs);\n };\n\n getActiveLayout(): ConfigLayout[] {\n const {layout, temporaryLayout} = this.context;\n\n return temporaryLayout?.data || layout;\n }\n\n getMemoGroupLayout(group: string, layout: ConfigLayout[]): MemoGroupLayout {\n // fastest possible way to match json\n const key = JSON.stringify(layout);\n\n if (this._memoGroupsLayouts[group]) {\n if (this._memoGroupsLayouts[group].key === key) {\n return this._memoGroupsLayouts[group];\n } else {\n this._memoGroupsLayouts[group].key = key;\n this._memoGroupsLayouts[group].layout = layout;\n }\n } else {\n this._memoGroupsLayouts[group] = {\n key,\n layout,\n };\n }\n\n return this._memoGroupsLayouts[group];\n }\n\n getMemoGroupCallbacks(group: string): GroupCallbacks {\n if (!this._memoCallbacksForGroups[group]) {\n const onDragStart = this._onDragStart.bind(this, group);\n const onDrag = this._onDrag.bind(this, group);\n const onDragStop = this._onDragStop.bind(this, group);\n\n const onResizeStart = this._onResizeStart.bind(this, group);\n const onResize = this._onResize.bind(this, group);\n const onResizeStop = this._onResizeStop.bind(this, group);\n\n const onDrop = this._onDrop.bind(this, group);\n const onDropDragOver = this._onDropDragOver.bind(this, group);\n const onDragTargetRestore = this._onTargetRestore.bind(this);\n\n this._memoCallbacksForGroups[group] = {\n onDragStart,\n onDrag,\n onDragStop,\n onResizeStart,\n onResize,\n onResizeStop,\n onDrop,\n onDropDragOver,\n onDragTargetRestore,\n };\n }\n\n return this._memoCallbacksForGroups[group];\n }\n\n getMemoGroupItems(group: string, nextItems: ConfigItem[]): ConfigItem[] {\n const prev = this._memoGroupsItems[group];\n if (\n prev &&\n prev.length === nextItems.length &&\n prev.every((item, i) => item === nextItems[i])\n ) {\n return prev;\n }\n this._memoGroupsItems[group] = nextItems;\n return nextItems;\n }\n\n getMemoGroupProps = (\n group: string,\n renderLayout: ConfigLayout[],\n nextProperties: Partial<ReactGridLayoutProps>,\n ) => {\n // Return stable ref to prevent useMemo invalidation when properties are shallowly equal.\n const prevProperties = this._memoGroupsProps[group];\n const keysNext = Object.keys(nextProperties) as Array<keyof ReactGridLayoutProps>;\n const stableProperties =\n prevProperties &&\n Object.keys(prevProperties).length === keysNext.length &&\n keysNext.every((k) => prevProperties[k] === nextProperties[k])\n ? prevProperties\n : nextProperties;\n\n // Needed for _onDropDragOver\n this._memoGroupsProps[group] = stableProperties;\n\n return {\n layout: this.getMemoGroupLayout(group, renderLayout).layout,\n callbacks: this.getMemoGroupCallbacks(group),\n stableProperties,\n };\n };\n\n getLayoutAndPropsByGroup = (group: string): LayoutAndPropsByGroup => {\n return {\n properties: this._memoGroupsProps[group],\n layout: this._memoGroupsLayouts[group].layout,\n };\n };\n\n getMemoForwardRefCallback = (refIndex: number) => {\n if (!this._memoForwardedPluginRef[refIndex]) {\n this._memoForwardedPluginRef[refIndex] = (pluginRef: PluginRef) => {\n this.pluginsRefs[refIndex] = pluginRef;\n };\n }\n\n return this._memoForwardedPluginRef[refIndex];\n };\n\n mergeGroupsLayout(\n group: string,\n newLayout: ConfigLayout[],\n temporaryItem?: ConfigLayout,\n ): ConfigLayout[] {\n const renderLayout = this.getActiveLayout();\n const itemsByGroup = renderLayout.reduce<Record<string, ConfigLayout>>(\n (memo, item) => {\n memo[item.i] = item;\n return memo;\n },\n temporaryItem ? {[temporaryItem.i]: temporaryItem} : {},\n );\n\n const newItemsLayoutById = newLayout.reduce<Record<string, ConfigLayout>>((memo, item) => {\n const parent = itemsByGroup[item.i]?.parent;\n memo[item.i] = {...item};\n\n if (parent) {\n memo[item.i].parent = parent;\n }\n return memo;\n }, {});\n\n return renderLayout.map((currentItem) => {\n const itemParent = resolveLayoutGroup(itemsByGroup[currentItem.i]);\n\n if (itemParent === group) {\n return newItemsLayoutById[currentItem.i];\n }\n\n return currentItem;\n });\n }\n\n reloadItems(options?: ReloadItemsOptions) {\n const {targetIds, force} = options || {};\n\n const {\n editMode,\n settings: {autoupdateInterval, silentLoading} = {},\n reloadItems,\n } = this.context;\n\n const {isPageHidden} = this.state;\n\n const autoupdateIntervalMs = Number(autoupdateInterval) * 1000;\n\n const targetPlugins = targetIds\n ? this.pluginsRefs.filter(\n (plugin) => hasPluginId(plugin) && targetIds.includes(plugin.props.id),\n )\n : this.pluginsRefs;\n\n if (autoupdateIntervalMs) {\n const timeSinceLastReload = new Date().getTime() - (this._lastReloadAt || 0);\n const reloadIntervalRemains = autoupdateIntervalMs - timeSinceLastReload;\n\n if (force || (!isPageHidden && !editMode && reloadIntervalRemains <= 0)) {\n this._lastReloadAt = new Date().getTime();\n reloadItems(targetPlugins, {silentLoading: Boolean(silentLoading), noVeil: true});\n }\n\n this._timeout = setTimeout(\n () => this.reloadItems(),\n reloadIntervalRemains <= 0 ? autoupdateIntervalMs : reloadIntervalRemains,\n );\n } else if (force) {\n reloadItems(targetPlugins, {silentLoading: Boolean(silentLoading), noVeil: true});\n }\n }\n\n prepareDefaultArguments(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ): ManipulationCallbackArgs {\n return {\n group,\n layout,\n oldItem,\n newItem,\n placeholder,\n e,\n element,\n };\n }\n\n updateDraggingElementState(group: string, layoutItem: ConfigLayout, e: MouseEvent) {\n let currentDraggingElement: CurrentDraggingElement | null =\n this.state.currentDraggingElement;\n\n if (!currentDraggingElement) {\n const {temporaryLayout} = this.context;\n const layoutId = layoutItem.i;\n\n const item = temporaryLayout\n ? temporaryLayout.dragProps\n : this.context.configItems.find(({id}) => id === layoutId);\n\n if (!item) {\n return;\n }\n\n let {offsetX, offsetY} =\n (e as MouseEvent & {nativeEvent?: MouseEvent}).nativeEvent || {};\n if (offsetX === undefined || offsetY === undefined) {\n const target = e.currentTarget as HTMLElement;\n const gridRect = target?.getBoundingClientRect();\n\n offsetX = e.clientX - (gridRect?.left || 0);\n offsetY = e.clientY - (gridRect?.top || 0);\n }\n\n currentDraggingElement = {\n group,\n layoutItem,\n item,\n cursorPosition: {offsetX, offsetY},\n };\n\n // Update imperatively so DragOverLayout reads fresh cursor offset without re-render.\n this._sharedDragPositionRef.current = {offsetX, offsetY};\n }\n\n this.setState({currentDraggingElement, draggedOverGroup: group});\n }\n\n _initDragCoordinatesWatcher(element: HTMLElement) {\n if (!this._parendDragNode) {\n this._parendDragNode = element.parentElement;\n this.setState({isDraggedOut: false});\n }\n }\n\n // When element is going back and prointer-event: none is removed mouse enter event is not fired\n // So to trigger it we are forcing this event by adding transparent block under the mouse\n _forceCursorCapture(\n parentElement: HTMLElement,\n position: {top: number; left: number},\n parentRect: DOMRect,\n ) {\n const block = document.createElement('div');\n block.classList.add('react-grid-focus-capture');\n\n const blockSize = 44;\n const offset = blockSize / 2;\n\n // Keeping elemnt inside current grid\n const top = Math.min(Math.max(position.top - offset, 0), parentRect.height - blockSize);\n const left = Math.min(Math.max(position.left - offset, 0), parentRect.width - blockSize);\n\n block.style.width = `${blockSize}px`;\n block.style.height = `${blockSize}px`;\n block.style.top = `${top}px`;\n block.style.left = `${left}px`;\n\n parentElement.appendChild(block);\n\n setTimeout(() => {\n block.remove();\n }, 100);\n }\n\n _updateDragCoordinates(e: MouseEvent) {\n const parent = this._parendDragNode;\n\n if (!parent) {\n return;\n }\n\n const parentRect = parent.getBoundingClientRect();\n const {clientX, clientY} = e;\n\n let isDraggedOut = this.state.isDraggedOut;\n if (\n clientX < parentRect.left ||\n clientX > parentRect.right ||\n clientY < parentRect.top ||\n clientY > parentRect.bottom\n ) {\n isDraggedOut = true;\n } else {\n isDraggedOut = false;\n }\n\n if (isDraggedOut !== this.state.isDraggedOut) {\n this.setState({isDraggedOut});\n\n if (!isDraggedOut) {\n this._forceCursorCapture(\n parent,\n {\n top: clientY - parentRect.top,\n left: clientX - parentRect.left,\n },\n parentRect,\n );\n }\n }\n }\n\n _resetDragWatcher() {\n this._parendDragNode = null;\n this.setState({isDraggedOut: false});\n }\n\n _onDragStart(\n group: string,\n _newLayout: ConfigLayout[],\n layoutItem: ConfigLayout,\n _newItem: ConfigLayout,\n _placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n this.context.onDragStart?.call(\n this,\n this.prepareDefaultArguments(\n group,\n _newLayout,\n layoutItem,\n _newItem,\n _placeholder,\n e,\n element,\n ),\n );\n\n if (this.context.dragOverPlugin) {\n this.setState({isDragging: true});\n } else {\n if (!this._sharedDragRef.current.isDragging) {\n this._sharedDragRef.current = {isDragging: true, sourceGroup: group};\n }\n this._initDragCoordinatesWatcher(element);\n this.updateDraggingElementState(group, layoutItem, e);\n this.setState({isDragging: true});\n }\n }\n\n _onDrag(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n if (!this.context.dragOverPlugin) {\n this._updateDragCoordinates(e);\n }\n\n this.context.onDrag?.call(\n this,\n this.prepareDefaultArguments(group, layout, oldItem, newItem, placeholder, e, element),\n );\n }\n\n _onDragStop(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n this._resetDragWatcher();\n\n this._onStop(group, layout);\n\n this.context.onDragStop?.call(\n this,\n this.prepareDefaultArguments(group, layout, oldItem, newItem, placeholder, e, element),\n );\n }\n\n _onResizeStart(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n this.setState({\n isDragging: true,\n });\n\n this.context.onResizeStart?.call(\n this,\n this.prepareDefaultArguments(group, layout, oldItem, newItem, placeholder, e, element),\n );\n }\n\n _onResize(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n this.context.onResize?.call(\n this,\n this.prepareDefaultArguments(group, layout, oldItem, newItem, placeholder, e, element),\n );\n }\n\n _onResizeStop(\n group: string,\n layout: ConfigLayout[],\n oldItem: ConfigLayout,\n newItem: ConfigLayout,\n placeholder: ConfigLayout,\n e: MouseEvent,\n element: HTMLElement,\n ) {\n this._onStop(group, layout);\n\n this.context.onResizeStop?.call(\n this,\n this.prepareDefaultArguments(group, layout, oldItem, newItem, placeholder, e, element),\n );\n }\n\n _onTargetRestore() {\n if (this.context.temporaryLayout) {\n return;\n }\n\n const {currentDraggingElement} = this.state;\n\n if (currentDraggingElement) {\n this.setState({\n draggedOverGroup: currentDraggingElement.group,\n });\n }\n }\n\n _onStop = (group: string, newLayout: ConfigLayout[]) => {\n const {layoutChange, onDrop, temporaryLayout} = this.context;\n const {draggedOverGroup, currentDraggingElement} = this.state;\n\n if (\n currentDraggingElement &&\n draggedOverGroup !== null &&\n draggedOverGroup !== currentDraggingElement.group\n ) {\n // Skipping layout update when change event called for source grid\n // and waiting _onDrop\n return;\n }\n\n const groupedLayout = this.mergeGroupsLayout(group, newLayout);\n\n this._clearSharedDragState();\n this.setState({\n isDragging: false,\n currentDraggingElement: null,\n draggedOverGroup: null,\n });\n\n if (temporaryLayout) {\n const temporaryItem = groupedLayout.find(({i}) => i === TEMPORARY_ITEM_ID);\n if (onDrop && temporaryItem) {\n onDrop(groupedLayout, temporaryItem);\n }\n } else {\n layoutChange(groupedLayout);\n }\n };\n\n _onSharedDrop = (targetGroup: string, newLayout: ConfigLayout[], tempItem: ConfigLayout) => {\n const {currentDraggingElement} = this.state;\n const {layoutChange} = this.context;\n\n if (!currentDraggingElement) {\n return;\n }\n\n const sourceLayoutItem = currentDraggingElement.layoutItem;\n\n const groupedLayout = this.mergeGroupsLayout(targetGroup, newLayout, tempItem).map(\n (item) => {\n if (item.i === sourceLayoutItem.i) {\n const copy = {...tempItem};\n\n delete copy.parent;\n if (targetGroup !== DEFAULT_GROUP) {\n copy.parent = targetGroup;\n }\n copy.i = sourceLayoutItem.i;\n\n return copy;\n }\n\n return item;\n },\n );\n\n this._clearSharedDragState();\n this.setState({\n isDragging: false,\n currentDraggingElement: null,\n draggedOverGroup: null,\n });\n\n // TODO temporaryLayout\n layoutChange(groupedLayout);\n };\n\n _onExternalDrop = (\n group: string,\n newLayout: ConfigLayout[],\n item: ConfigLayout,\n e: MouseEvent,\n ) => {\n const {onDrop} = this.context;\n\n if (group !== DEFAULT_GROUP) {\n item.parent = group;\n }\n\n const groupedLayout = this.mergeGroupsLayout(group, newLayout, item);\n this._sharedDragRef.current = {isDragging: false, sourceGroup: null};\n this.setState({isDragging: false});\n\n onDrop?.(groupedLayout, item, e);\n };\n\n _onDrop = (\n group: string,\n newLayout: ConfigLayout[],\n item: ConfigLayout | undefined,\n e: MouseEvent,\n ): void | false => {\n if (!item || !this.context.editMode) {\n return false;\n }\n\n const {draggedOverGroup, currentDraggingElement} = this.state;\n if (currentDraggingElement && draggedOverGroup === group) {\n this._onSharedDrop(group, newLayout, item);\n } else {\n this._onExternalDrop(group, newLayout, item, e);\n }\n };\n\n _onDropDragOver = (\n group: string,\n e: DragOverEvent,\n ): {w?: number; h?: number} | false | undefined => {\n const {editMode, dragOverPlugin, onDropDragOver, temporaryLayout} = this.context;\n const {currentDraggingElement} = this.state;\n\n // TODO If temporary item is trying to change group\n if (temporaryLayout && currentDraggingElement) {\n return false;\n }\n\n if (!editMode || (!dragOverPlugin && !currentDraggingElement)) {\n return false;\n }\n\n const {properties, layout} = this.getLayoutAndPropsByGroup(group);\n\n if (currentDraggingElement) {\n const {h, w, i} = currentDraggingElement.layoutItem;\n const {type} = currentDraggingElement.item;\n const sharedItem: DraggedOverItem = {\n h,\n w,\n i,\n type,\n parent: currentDraggingElement.group,\n };\n\n return onDropDragOver(e, group, properties, layout, sharedItem);\n }\n\n if (dragOverPlugin) {\n return onDropDragOver(e, group, properties, layout);\n }\n\n return false;\n };\n\n _clearSharedDragState() {\n this._sharedDragRef.current = {isDragging: false, sourceGroup: null};\n this._sharedDragPositionRef.current = null;\n\n // Reset all group placeholders — covers the case where mouseup happens\n // in a gap between groups and no individual group's mouseUpHandler fires.\n this._groupResetRegistryRef.current.forEach((reset) => reset());\n }\n\n renderTemporaryPlaceholder(gridLayout: Partial<ReactGridLayoutProps>) {\n const {temporaryLayout, noOverlay, draggableHandleClassName} = this.context;\n\n if (!temporaryLayout || !temporaryLayout.dragProps) {\n return null;\n }\n\n const id = TEMPORARY_ITEM_ID;\n const {type} = temporaryLayout.dragProps;\n\n return (\n <GridItem\n key={id}\n id={id}\n item={{id, type, data: {}} as ConfigItem}\n layout={temporaryLayout.data}\n adjustWidgetLayout={this.adjustWidgetLayout}\n isDragging={this.state.isDragging}\n isPlaceholder={true}\n noOverlay={noOverlay}\n withCustomHandle={Boolean(draggableHandleClassName)}\n gridLayout={gridLayout}\n />\n );\n }\n\n renderGroup(\n group: string,\n renderLayout: ConfigLayout[],\n renderItems: ConfigItem[],\n offset = 0,\n groupGridProperties?: (props: ReactGridLayoutProps) => ReactGridLayoutProps,\n ) {\n const {registerManager} = this.context;\n const {currentDraggingElement, draggedOverGroup, isDragging, isDraggedOut} = this.state;\n\n const hasOwnGroupProperties = typeof groupGridProperties === 'function';\n const properties = hasOwnGroupProperties\n ? groupGridProperties({...registerManager.gridLayout})\n : registerManager.gridLayout;\n\n const {callbacks, layout, stableProperties} = this.getMemoGroupProps(\n group,\n renderLayout,\n properties,\n );\n\n const compactType: 'vertical' | 'horizontal' | null | undefined =\n stableProperties.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP\n ? 'horizontal'\n : stableProperties.compactType;\n\n const isDragCaptured = Boolean(\n currentDraggingElement &&\n group === currentDraggingElement.group &&\n draggedOverGroup !== null &&\n draggedOverGroup !== group,\n );\n const currentDraggingItemId =\n currentDraggingElement && 'id' in currentDraggingElement.item\n ? currentDraggingElement.item.id\n : null;\n\n // Non-source groups get stable false/null — memo skips re-render on drag move.\n const isSourceGroup = Boolean(currentDraggingElement?.group === group);\n const groupIsAnyDragging = isDragging && isSourceGroup;\n const groupCurrentDraggingItemId = isSourceGroup ? currentDraggingItemId : null;\n const groupIsAnyDraggedOut = isSourceGroup ? isDraggedOut : false;\n\n return (\n <GroupLayout\n key={`group_${group}`}\n group={group}\n renderItems={renderItems}\n offset={offset}\n properties={stableProperties}\n compactType={compactType}\n callbacks={callbacks}\n layout={layout}\n temporaryPlaceholder={this.renderTemporaryPlaceholder(stableProperties)}\n dragStateRef={this._sharedDragRef}\n sharedDragPositionRef={this._sharedDragPositionRef}\n groupResetRegistryRef={this._groupResetRegistryRef}\n isDragCaptured={isDragCaptured}\n isAnyDragging={groupIsAnyDragging}\n currentDraggingItemId={groupCurrentDraggingItemId}\n isAnyDraggedOut={groupIsAnyDraggedOut}\n adjustWidgetLayout={this.adjustWidgetLayout}\n getMemoForwardRefCallback={this.getMemoForwardRefCallback}\n />\n );\n }\n\n render() {\n const {config, groups, editMode, context} = this.context;\n\n this.pluginsRefs.length = this.context.configItems.length;\n\n const defaultRenderLayout: ConfigLayout[] = [];\n const defaultRenderItems: ConfigItem[] = [];\n const layoutMap: Record<string, string> = {};\n\n const groupedLayout = this.getActiveLayout().reduce<Record<string, ConfigLayout[]>>(\n (memo, item) => {\n if (item.parent) {\n if (!memo[item.parent]) {\n memo[item.parent] = [];\n }\n\n memo[item.parent].push(item);\n layoutMap[item.i] = item.parent;\n } else {\n defaultRenderLayout.push(item);\n }\n\n return memo;\n },\n {},\n );\n\n const itemsByGroup = this.context.configItems.reduce<Record<string, ConfigItem[]>>(\n (memo, item) => {\n const group = layoutMap[item.id];\n if (group) {\n if (!memo[group]) {\n memo[group] = [];\n }\n memo[group].push(item);\n } else {\n defaultRenderItems.push(item);\n }\n\n return memo;\n },\n {},\n );\n\n let offset = 0;\n\n if (groups) {\n return groups.map((group) => {\n const id = group.id || DEFAULT_GROUP;\n\n let layout, items;\n\n if (id === DEFAULT_GROUP) {\n layout = defaultRenderLayout;\n items = defaultRenderItems;\n } else {\n layout = groupedLayout[id] || [];\n items = itemsByGroup[id] || [];\n }\n\n const stableItems = this.getMemoGroupItems(id, items);\n const element = this.renderGroup(\n id,\n layout,\n stableItems,\n offset,\n group.gridProperties,\n );\n offset += stableItems.length;\n\n if (group.render) {\n const groupContext = {\n isMobile: false,\n config,\n editMode,\n items,\n layout,\n context,\n };\n return group.render(id, element, groupContext);\n }\n\n return element;\n });\n } else {\n const stableDefaultItems = this.getMemoGroupItems(DEFAULT_GROUP, defaultRenderItems);\n return this.renderGroup(DEFAULT_GROUP, defaultRenderLayout, stableDefaultItems, offset);\n }\n }\n}\n"]}
@@ -20,6 +20,7 @@ export interface GroupLayoutProps {
20
20
  offsetX: number;
21
21
  offsetY: number;
22
22
  } | null>;
23
+ groupResetRegistryRef: React.MutableRefObject<Map<string, () => void>>;
23
24
  isAnyDragging: boolean;
24
25
  currentDraggingItemId: string | null;
25
26
  isAnyDraggedOut: boolean;
@@ -22,7 +22,7 @@ function groupLayoutPropsAreEqual(prev, next) {
22
22
  const hasTmpPlaceholderChanged = prev.temporaryPlaceholder !== next.temporaryPlaceholder;
23
23
  return !needRerenderIfChanged && !needRerenderGroupScoped && !hasTmpPlaceholderChanged;
24
24
  }
25
- exports.GroupLayout = react_1.default.memo(function GroupLayout({ group, renderItems, offset, properties, compactType, callbacks, layout, temporaryPlaceholder, dragStateRef, sharedDragPositionRef, isDragCaptured, isAnyDragging, currentDraggingItemId, isAnyDraggedOut, adjustWidgetLayout, getMemoForwardRefCallback, }) {
25
+ exports.GroupLayout = react_1.default.memo(function GroupLayout({ group, renderItems, offset, properties, compactType, callbacks, layout, temporaryPlaceholder, dragStateRef, sharedDragPositionRef, groupResetRegistryRef, isDragCaptured, isAnyDragging, currentDraggingItemId, isAnyDraggedOut, adjustWidgetLayout, getMemoForwardRefCallback, }) {
26
26
  const { editMode, noOverlay, focusable, draggableHandleClassName, outerDnDEnable, onItemMountChange, onItemRender, onItemFocus, onItemBlur, } = react_1.default.useContext(context_1.DashKitContext);
27
27
  // Use group-specific noOverlay if it was explicitly set via groupGridProperties,
28
28
  // otherwise fallback to the dashboard-level noOverlay from context.
@@ -31,7 +31,7 @@ exports.GroupLayout = react_1.default.memo(function GroupLayout({ group, renderI
31
31
  const itemElements = react_1.default.useMemo(() => {
32
32
  return renderItems.map((item, i) => {
33
33
  const keyId = item.id;
34
- const isDragging = isAnyDragging && keyId === currentDraggingItemId;
34
+ const isDragging = editMode && isAnyDragging && keyId === currentDraggingItemId;
35
35
  const isDraggedOut = isDragging && isAnyDraggedOut;
36
36
  return (react_1.default.createElement(GridItem_1.default, { key: keyId, forwardedPluginRef: getMemoForwardRefCallback(offset + i), id: keyId, item: item, layout: layout, adjustWidgetLayout: adjustWidgetLayout, isDragging: isDragging, isDraggedOut: isDraggedOut || undefined, noOverlay: resolvedNoOverlay, focusable: focusable, withCustomHandle: Boolean(draggableHandleClassName), onItemMountChange: onItemMountChange, onItemRender: onItemRender, gridLayout: properties, onItemFocus: onItemFocus, onItemBlur: onItemBlur }));
37
37
  });
@@ -52,8 +52,9 @@ exports.GroupLayout = react_1.default.memo(function GroupLayout({ group, renderI
52
52
  onItemFocus,
53
53
  onItemBlur,
54
54
  getMemoForwardRefCallback,
55
+ editMode,
55
56
  ]);
56
- return (react_1.default.createElement(ReactGridLayout_1.Layout, Object.assign({ key: `group_${group}`, isDraggable: editMode, isResizable: editMode }, properties, { compactType: compactType, layout: layout, draggableCancel: `.${constants_1.DRAGGABLE_CANCEL_CLASS_NAME}`, draggableHandle: draggableHandleClassName ? `.${draggableHandleClassName}` : undefined, onDragStart: callbacks.onDragStart, onDrag: callbacks.onDrag, onDragStop: callbacks.onDragStop, onResizeStart: callbacks.onResizeStart, onResize: callbacks.onResize, onResizeStop: callbacks.onResizeStop, onDragTargetRestore: callbacks.onDragTargetRestore, onDropDragOver: callbacks.onDropDragOver, onDrop: callbacks.onDrop, dragStateRef: dragStateRef, sharedDragPositionRef: sharedDragPositionRef, group: group, isDragCaptured: isDragCaptured, isDroppable: Boolean(outerDnDEnable) && editMode }),
57
+ return (react_1.default.createElement(ReactGridLayout_1.Layout, Object.assign({ key: `group_${group}`, isDraggable: editMode, isResizable: editMode }, properties, { compactType: compactType, layout: layout, draggableCancel: `.${constants_1.DRAGGABLE_CANCEL_CLASS_NAME}`, draggableHandle: draggableHandleClassName ? `.${draggableHandleClassName}` : undefined, onDragStart: callbacks.onDragStart, onDrag: callbacks.onDrag, onDragStop: callbacks.onDragStop, onResizeStart: callbacks.onResizeStart, onResize: callbacks.onResize, onResizeStop: callbacks.onResizeStop, onDragTargetRestore: callbacks.onDragTargetRestore, onDropDragOver: callbacks.onDropDragOver, onDrop: callbacks.onDrop, dragStateRef: dragStateRef, sharedDragPositionRef: sharedDragPositionRef, groupResetRegistryRef: groupResetRegistryRef, group: group, isDragCaptured: isDragCaptured, isDroppable: Boolean(outerDnDEnable) && editMode }),
57
58
  itemElements,
58
59
  temporaryPlaceholder));
59
60
  }, groupLayoutPropsAreEqual);
@@ -1 +1 @@
1
- {"version":3,"file":"GroupLayout.js","sourceRoot":"../../../../src","sources":["components/GridLayout/GroupLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {DRAGGABLE_CANCEL_CLASS_NAME} from '../../constants';\nimport {DashKitContext} from '../../context';\nimport type {ConfigItem, ConfigLayout} from '../../shared';\nimport type {PluginRef, PluginWidgetProps, ReactGridLayoutProps} from '../../typings';\nimport GridItem from '../GridItem/GridItem';\n\nimport {Layout} from './ReactGridLayout';\nimport type {GroupCallbacks} from './types';\nimport {shallowArrayEqual, shallowObjectEqual} from './utils';\n\nexport interface GroupLayoutProps {\n group: string;\n renderItems: ConfigItem[];\n offset: number;\n\n // Pre-computed by GridLayout.renderGroup (stable refs via getMemoGroupProps)\n properties: Partial<ReactGridLayoutProps>;\n compactType: 'vertical' | 'horizontal' | null | undefined;\n callbacks: GroupCallbacks;\n layout: ConfigLayout[];\n temporaryPlaceholder: React.ReactNode;\n\n // Refs read imperatively by DragOverLayout — no re-render on drag start.\n isDragCaptured: boolean;\n dragStateRef: React.MutableRefObject<{isDragging: boolean; sourceGroup: string | null}>;\n sharedDragPositionRef: React.MutableRefObject<{offsetX: number; offsetY: number} | null>;\n\n // Drag state scoped to this group only (always false/null for non-source groups)\n isAnyDragging: boolean;\n currentDraggingItemId: string | null;\n isAnyDraggedOut: boolean;\n\n // Stable instance method refs from GridLayout (arrow function class properties)\n adjustWidgetLayout: PluginWidgetProps['adjustWidgetLayout'];\n getMemoForwardRefCallback: (index: number) => (ref: PluginRef) => void;\n}\n\nfunction groupLayoutPropsAreEqual(prev: GroupLayoutProps, next: GroupLayoutProps): boolean {\n const needRerenderIfChanged =\n prev.group !== next.group ||\n prev.layout !== next.layout ||\n prev.offset !== next.offset ||\n !shallowArrayEqual(prev.renderItems, next.renderItems) ||\n !shallowObjectEqual(prev.properties, next.properties);\n\n // Drag refs are stable and never trigger re-renders; only group-scoped state matters.\n const needRerenderGroupScoped =\n prev.isDragCaptured !== next.isDragCaptured ||\n prev.isAnyDragging !== next.isAnyDragging ||\n prev.currentDraggingItemId !== next.currentDraggingItemId ||\n prev.isAnyDraggedOut !== next.isAnyDraggedOut;\n\n const hasTmpPlaceholderChanged = prev.temporaryPlaceholder !== next.temporaryPlaceholder;\n\n return !needRerenderIfChanged && !needRerenderGroupScoped && !hasTmpPlaceholderChanged;\n}\n\nexport const GroupLayout = React.memo(function GroupLayout({\n group,\n renderItems,\n offset,\n properties,\n compactType,\n callbacks,\n layout,\n temporaryPlaceholder,\n dragStateRef,\n sharedDragPositionRef,\n isDragCaptured,\n isAnyDragging,\n currentDraggingItemId,\n isAnyDraggedOut,\n adjustWidgetLayout,\n getMemoForwardRefCallback,\n}: GroupLayoutProps) {\n const {\n editMode,\n noOverlay,\n focusable,\n draggableHandleClassName,\n outerDnDEnable,\n onItemMountChange,\n onItemRender,\n onItemFocus,\n onItemBlur,\n } = React.useContext(DashKitContext);\n\n // Use group-specific noOverlay if it was explicitly set via groupGridProperties,\n // otherwise fallback to the dashboard-level noOverlay from context.\n const resolvedNoOverlay = 'noOverlay' in properties ? properties.noOverlay : noOverlay;\n\n // Memoize items array; non-source groups have stable false/null drag props so React skips their subtrees.\n const itemElements = React.useMemo(() => {\n return renderItems.map((item, i) => {\n const keyId = item.id;\n\n const isDragging = isAnyDragging && keyId === currentDraggingItemId;\n const isDraggedOut = isDragging && isAnyDraggedOut;\n\n return (\n <GridItem\n key={keyId}\n forwardedPluginRef={getMemoForwardRefCallback(offset + i)}\n id={keyId}\n item={item}\n layout={layout}\n adjustWidgetLayout={adjustWidgetLayout}\n isDragging={isDragging}\n isDraggedOut={isDraggedOut || undefined}\n noOverlay={resolvedNoOverlay}\n focusable={focusable}\n withCustomHandle={Boolean(draggableHandleClassName)}\n onItemMountChange={onItemMountChange}\n onItemRender={onItemRender}\n gridLayout={properties}\n onItemFocus={onItemFocus}\n onItemBlur={onItemBlur}\n />\n );\n });\n }, [\n renderItems,\n isAnyDragging,\n currentDraggingItemId,\n isAnyDraggedOut,\n offset,\n layout,\n adjustWidgetLayout,\n resolvedNoOverlay,\n focusable,\n draggableHandleClassName,\n onItemMountChange,\n onItemRender,\n properties,\n onItemFocus,\n onItemBlur,\n getMemoForwardRefCallback,\n ]);\n\n return (\n <Layout\n key={`group_${group}`}\n isDraggable={editMode}\n isResizable={editMode}\n {...properties}\n compactType={compactType}\n layout={layout}\n draggableCancel={`.${DRAGGABLE_CANCEL_CLASS_NAME}`}\n draggableHandle={draggableHandleClassName ? `.${draggableHandleClassName}` : undefined}\n onDragStart={callbacks.onDragStart}\n onDrag={callbacks.onDrag}\n onDragStop={callbacks.onDragStop}\n onResizeStart={callbacks.onResizeStart}\n onResize={callbacks.onResize}\n onResizeStop={callbacks.onResizeStop}\n onDragTargetRestore={callbacks.onDragTargetRestore}\n onDropDragOver={callbacks.onDropDragOver}\n onDrop={callbacks.onDrop}\n dragStateRef={dragStateRef}\n sharedDragPositionRef={sharedDragPositionRef}\n group={group}\n isDragCaptured={isDragCaptured}\n isDroppable={Boolean(outerDnDEnable) && editMode}\n >\n {itemElements}\n {temporaryPlaceholder}\n </Layout>\n );\n}, groupLayoutPropsAreEqual);\n"]}
1
+ {"version":3,"file":"GroupLayout.js","sourceRoot":"../../../../src","sources":["components/GridLayout/GroupLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {DRAGGABLE_CANCEL_CLASS_NAME} from '../../constants';\nimport {DashKitContext} from '../../context';\nimport type {ConfigItem, ConfigLayout} from '../../shared';\nimport type {PluginRef, PluginWidgetProps, ReactGridLayoutProps} from '../../typings';\nimport GridItem from '../GridItem/GridItem';\n\nimport {Layout} from './ReactGridLayout';\nimport type {GroupCallbacks} from './types';\nimport {shallowArrayEqual, shallowObjectEqual} from './utils';\n\nexport interface GroupLayoutProps {\n group: string;\n renderItems: ConfigItem[];\n offset: number;\n\n // Pre-computed by GridLayout.renderGroup (stable refs via getMemoGroupProps)\n properties: Partial<ReactGridLayoutProps>;\n compactType: 'vertical' | 'horizontal' | null | undefined;\n callbacks: GroupCallbacks;\n layout: ConfigLayout[];\n temporaryPlaceholder: React.ReactNode;\n\n // Refs read imperatively by DragOverLayout — no re-render on drag start.\n isDragCaptured: boolean;\n dragStateRef: React.MutableRefObject<{isDragging: boolean; sourceGroup: string | null}>;\n sharedDragPositionRef: React.MutableRefObject<{offsetX: number; offsetY: number} | null>;\n groupResetRegistryRef: React.MutableRefObject<Map<string, () => void>>;\n\n // Drag state scoped to this group only (always false/null for non-source groups)\n isAnyDragging: boolean;\n currentDraggingItemId: string | null;\n isAnyDraggedOut: boolean;\n\n // Stable instance method refs from GridLayout (arrow function class properties)\n adjustWidgetLayout: PluginWidgetProps['adjustWidgetLayout'];\n getMemoForwardRefCallback: (index: number) => (ref: PluginRef) => void;\n}\n\nfunction groupLayoutPropsAreEqual(prev: GroupLayoutProps, next: GroupLayoutProps): boolean {\n const needRerenderIfChanged =\n prev.group !== next.group ||\n prev.layout !== next.layout ||\n prev.offset !== next.offset ||\n !shallowArrayEqual(prev.renderItems, next.renderItems) ||\n !shallowObjectEqual(prev.properties, next.properties);\n\n // Drag refs are stable and never trigger re-renders; only group-scoped state matters.\n const needRerenderGroupScoped =\n prev.isDragCaptured !== next.isDragCaptured ||\n prev.isAnyDragging !== next.isAnyDragging ||\n prev.currentDraggingItemId !== next.currentDraggingItemId ||\n prev.isAnyDraggedOut !== next.isAnyDraggedOut;\n\n const hasTmpPlaceholderChanged = prev.temporaryPlaceholder !== next.temporaryPlaceholder;\n\n return !needRerenderIfChanged && !needRerenderGroupScoped && !hasTmpPlaceholderChanged;\n}\n\nexport const GroupLayout = React.memo(function GroupLayout({\n group,\n renderItems,\n offset,\n properties,\n compactType,\n callbacks,\n layout,\n temporaryPlaceholder,\n dragStateRef,\n sharedDragPositionRef,\n groupResetRegistryRef,\n isDragCaptured,\n isAnyDragging,\n currentDraggingItemId,\n isAnyDraggedOut,\n adjustWidgetLayout,\n getMemoForwardRefCallback,\n}: GroupLayoutProps) {\n const {\n editMode,\n noOverlay,\n focusable,\n draggableHandleClassName,\n outerDnDEnable,\n onItemMountChange,\n onItemRender,\n onItemFocus,\n onItemBlur,\n } = React.useContext(DashKitContext);\n\n // Use group-specific noOverlay if it was explicitly set via groupGridProperties,\n // otherwise fallback to the dashboard-level noOverlay from context.\n const resolvedNoOverlay = 'noOverlay' in properties ? properties.noOverlay : noOverlay;\n\n // Memoize items array; non-source groups have stable false/null drag props so React skips their subtrees.\n const itemElements = React.useMemo(() => {\n return renderItems.map((item, i) => {\n const keyId = item.id;\n\n const isDragging = editMode && isAnyDragging && keyId === currentDraggingItemId;\n const isDraggedOut = isDragging && isAnyDraggedOut;\n\n return (\n <GridItem\n key={keyId}\n forwardedPluginRef={getMemoForwardRefCallback(offset + i)}\n id={keyId}\n item={item}\n layout={layout}\n adjustWidgetLayout={adjustWidgetLayout}\n isDragging={isDragging}\n isDraggedOut={isDraggedOut || undefined}\n noOverlay={resolvedNoOverlay}\n focusable={focusable}\n withCustomHandle={Boolean(draggableHandleClassName)}\n onItemMountChange={onItemMountChange}\n onItemRender={onItemRender}\n gridLayout={properties}\n onItemFocus={onItemFocus}\n onItemBlur={onItemBlur}\n />\n );\n });\n }, [\n renderItems,\n isAnyDragging,\n currentDraggingItemId,\n isAnyDraggedOut,\n offset,\n layout,\n adjustWidgetLayout,\n resolvedNoOverlay,\n focusable,\n draggableHandleClassName,\n onItemMountChange,\n onItemRender,\n properties,\n onItemFocus,\n onItemBlur,\n getMemoForwardRefCallback,\n editMode,\n ]);\n\n return (\n <Layout\n key={`group_${group}`}\n isDraggable={editMode}\n isResizable={editMode}\n {...properties}\n compactType={compactType}\n layout={layout}\n draggableCancel={`.${DRAGGABLE_CANCEL_CLASS_NAME}`}\n draggableHandle={draggableHandleClassName ? `.${draggableHandleClassName}` : undefined}\n onDragStart={callbacks.onDragStart}\n onDrag={callbacks.onDrag}\n onDragStop={callbacks.onDragStop}\n onResizeStart={callbacks.onResizeStart}\n onResize={callbacks.onResize}\n onResizeStop={callbacks.onResizeStop}\n onDragTargetRestore={callbacks.onDragTargetRestore}\n onDropDragOver={callbacks.onDropDragOver}\n onDrop={callbacks.onDrop}\n dragStateRef={dragStateRef}\n sharedDragPositionRef={sharedDragPositionRef}\n groupResetRegistryRef={groupResetRegistryRef}\n group={group}\n isDragCaptured={isDragCaptured}\n isDroppable={Boolean(outerDnDEnable) && editMode}\n >\n {itemElements}\n {temporaryPlaceholder}\n </Layout>\n );\n}, groupLayoutPropsAreEqual);\n"]}
@@ -15,5 +15,6 @@ export declare const Layout: React.ComponentClass<ReactGridLayout.ReactGridLayou
15
15
  group?: string;
16
16
  onDragTargetRestore?: () => void;
17
17
  transformScaleRef?: React.MutableRefObject<number>;
18
+ groupResetRegistryRef?: React.MutableRefObject<Map<string, () => void>>;
18
19
  } & ReactGridLayout.WidthProviderProps, any>;
19
20
  export {};
@@ -85,12 +85,10 @@ class DragOverLayout extends react_grid_layout_1.default {
85
85
  this.parentOnDragStop(i, x, y, sintEv);
86
86
  }
87
87
  };
88
- // Returns true when another group's item is being dragged over this grid.
89
- // Reads from the ref directly — no re-render required to stay current.
90
88
  this.isSharedDragTarget = () => {
91
89
  var _a;
92
90
  const drag = (_a = this.props.dragStateRef) === null || _a === void 0 ? void 0 : _a.current;
93
- return Boolean((drag === null || drag === void 0 ? void 0 : drag.isDragging) && (drag === null || drag === void 0 ? void 0 : drag.sourceGroup) !== this.props.group);
91
+ return Boolean(drag === null || drag === void 0 ? void 0 : drag.isDragging);
94
92
  };
95
93
  // Proxy mouse events -> drag methods for dnd between groups
96
94
  this.mouseEnterHandler = (e) => {
@@ -112,7 +110,9 @@ class DragOverLayout extends react_grid_layout_1.default {
112
110
  }
113
111
  };
114
112
  this.mouseMoveHandler = (e) => {
115
- if (this.isSharedDragTarget()) {
113
+ var _a;
114
+ if (this.isSharedDragTarget() &&
115
+ this.props.group !== ((_a = this.props.dragStateRef) === null || _a === void 0 ? void 0 : _a.current.sourceGroup)) {
116
116
  if (!e.nativeEvent) {
117
117
  // Emulate nativeEvent for firefox
118
118
  const target = this.getInnerElement() || e.target;
@@ -127,16 +127,16 @@ class DragOverLayout extends react_grid_layout_1.default {
127
127
  }
128
128
  };
129
129
  this.mouseUpHandler = (e) => {
130
- var _a, _b;
130
+ var _a, _b, _c;
131
131
  if (this.isSharedDragTarget()) {
132
132
  e.preventDefault();
133
133
  const { droppingItem } = this.props;
134
134
  const { layout } = this.state;
135
135
  const item = layout.find((l) => l.i === (droppingItem === null || droppingItem === void 0 ? void 0 : droppingItem.i));
136
- // reset dragEnter counter on drop
137
- this.resetExternalPlaceholder();
136
+ // reset dragEnter counter on drop for all registered groups
137
+ (_a = this.props.groupResetRegistryRef) === null || _a === void 0 ? void 0 : _a.current.forEach((reset) => reset());
138
138
  if (item) {
139
- (_b = (_a = this.props).onDrop) === null || _b === void 0 ? void 0 : _b.call(_a, layout, item, e);
139
+ (_c = (_b = this.props).onDrop) === null || _c === void 0 ? void 0 : _c.call(_b, layout, item, e);
140
140
  }
141
141
  }
142
142
  };
@@ -150,8 +150,11 @@ class DragOverLayout extends react_grid_layout_1.default {
150
150
  this.onDragStop = this.extendedOnDragStop;
151
151
  }
152
152
  componentDidMount() {
153
- var _a;
153
+ var _a, _b;
154
154
  (_a = super.componentDidMount) === null || _a === void 0 ? void 0 : _a.call(this);
155
+ if (this.props.group !== undefined) {
156
+ (_b = this.props.groupResetRegistryRef) === null || _b === void 0 ? void 0 : _b.current.set(this.props.group, this.resetExternalPlaceholder);
157
+ }
155
158
  // If cursor is moved out of the window there is a bug
156
159
  // which leaves placeholder element in grid, this action needed to reset this state
157
160
  window.addEventListener('dragend', this.resetExternalPlaceholder);
@@ -164,6 +167,10 @@ class DragOverLayout extends react_grid_layout_1.default {
164
167
  }
165
168
  }
166
169
  componentWillUnmount() {
170
+ var _a;
171
+ if (this.props.group !== undefined) {
172
+ (_a = this.props.groupResetRegistryRef) === null || _a === void 0 ? void 0 : _a.current.delete(this.props.group);
173
+ }
167
174
  window.removeEventListener('dragend', this.resetExternalPlaceholder);
168
175
  const innerElement = this.getInnerElement();
169
176
  if (innerElement) {