@gravity-ui/dashkit 10.0.0 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/components/GridItem/GridItem.js +13 -0
- package/build/cjs/components/GridItem/GridItem.js.map +1 -1
- package/build/cjs/components/GridLayout/GridLayout.d.ts +6 -1
- package/build/cjs/components/GridLayout/GridLayout.js +54 -34
- package/build/cjs/components/GridLayout/GridLayout.js.map +1 -1
- package/build/cjs/components/GridLayout/GroupLayout.d.ts +29 -0
- package/build/cjs/components/GridLayout/GroupLayout.js +60 -0
- package/build/cjs/components/GridLayout/GroupLayout.js.map +1 -0
- package/build/cjs/components/GridLayout/ReactGridLayout.d.ts +7 -2
- package/build/cjs/components/GridLayout/ReactGridLayout.js +24 -11
- package/build/cjs/components/GridLayout/ReactGridLayout.js.map +1 -1
- package/build/cjs/components/GridLayout/utils.d.ts +2 -0
- package/build/cjs/components/GridLayout/utils.js +25 -0
- package/build/cjs/components/GridLayout/utils.js.map +1 -0
- package/build/cjs/hocs/prepareItem.js +19 -5
- package/build/cjs/hocs/prepareItem.js.map +1 -1
- package/build/cjs/package.json +1 -1
- package/build/cjs/typings/common.d.ts +7 -0
- package/build/cjs/typings/common.js.map +1 -1
- package/build/esm/components/GridItem/GridItem.js +13 -0
- package/build/esm/components/GridItem/GridItem.js.map +1 -1
- package/build/esm/components/GridLayout/GridLayout.d.ts +6 -1
- package/build/esm/components/GridLayout/GridLayout.js +55 -35
- package/build/esm/components/GridLayout/GridLayout.js.map +1 -1
- package/build/esm/components/GridLayout/GroupLayout.d.ts +29 -0
- package/build/esm/components/GridLayout/GroupLayout.js +56 -0
- package/build/esm/components/GridLayout/GroupLayout.js.map +1 -0
- package/build/esm/components/GridLayout/ReactGridLayout.d.ts +7 -2
- package/build/esm/components/GridLayout/ReactGridLayout.js +24 -11
- package/build/esm/components/GridLayout/ReactGridLayout.js.map +1 -1
- package/build/esm/components/GridLayout/utils.d.ts +2 -0
- package/build/esm/components/GridLayout/utils.js +21 -0
- package/build/esm/components/GridLayout/utils.js.map +1 -0
- package/build/esm/hocs/prepareItem.js +19 -5
- package/build/esm/hocs/prepareItem.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/typings/common.d.ts +7 -0
- package/build/esm/typings/common.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { COMPACT_TYPE_HORIZONTAL_NOWRAP, DEFAULT_GROUP,
|
|
2
|
+
import { COMPACT_TYPE_HORIZONTAL_NOWRAP, DEFAULT_GROUP, TEMPORARY_ITEM_ID } from "../../constants/index.js";
|
|
3
3
|
import { DashKitContext } from "../../context/index.js";
|
|
4
4
|
import { resolveLayoutGroup } from "../../utils/index.js";
|
|
5
5
|
import GridItem from "../GridItem/GridItem.js";
|
|
6
|
-
import {
|
|
6
|
+
import { GroupLayout } from "./GroupLayout.js";
|
|
7
7
|
const hasPluginId = (value) => {
|
|
8
8
|
return (value !== null &&
|
|
9
9
|
'props' in value &&
|
|
@@ -19,6 +19,9 @@ class GridLayout extends React.PureComponent {
|
|
|
19
19
|
this._memoGroupsProps = {};
|
|
20
20
|
this._memoGroupsLayouts = {};
|
|
21
21
|
this._memoCallbacksForGroups = {};
|
|
22
|
+
this._memoGroupsItems = {};
|
|
23
|
+
this._sharedDragRef = { current: { isDragging: false, sourceGroup: null } };
|
|
24
|
+
this._sharedDragPositionRef = { current: null };
|
|
22
25
|
this._parendDragNode = null;
|
|
23
26
|
this.onVisibilityChange = () => {
|
|
24
27
|
this.setState({
|
|
@@ -41,12 +44,21 @@ class GridLayout extends React.PureComponent {
|
|
|
41
44
|
const { getItemsMeta } = this.context;
|
|
42
45
|
return getItemsMeta(this.pluginsRefs);
|
|
43
46
|
};
|
|
44
|
-
this.getMemoGroupProps = (group, renderLayout,
|
|
47
|
+
this.getMemoGroupProps = (group, renderLayout, nextProperties) => {
|
|
48
|
+
// Return stable ref to prevent useMemo invalidation when properties are shallowly equal.
|
|
49
|
+
const prevProperties = this._memoGroupsProps[group];
|
|
50
|
+
const keysNext = Object.keys(nextProperties);
|
|
51
|
+
const stableProperties = prevProperties &&
|
|
52
|
+
Object.keys(prevProperties).length === keysNext.length &&
|
|
53
|
+
keysNext.every((k) => prevProperties[k] === nextProperties[k])
|
|
54
|
+
? prevProperties
|
|
55
|
+
: nextProperties;
|
|
45
56
|
// Needed for _onDropDragOver
|
|
46
|
-
this._memoGroupsProps[group] =
|
|
57
|
+
this._memoGroupsProps[group] = stableProperties;
|
|
47
58
|
return {
|
|
48
59
|
layout: this.getMemoGroupLayout(group, renderLayout).layout,
|
|
49
60
|
callbacks: this.getMemoGroupCallbacks(group),
|
|
61
|
+
stableProperties,
|
|
50
62
|
};
|
|
51
63
|
};
|
|
52
64
|
this.getLayoutAndPropsByGroup = (group) => {
|
|
@@ -74,6 +86,8 @@ class GridLayout extends React.PureComponent {
|
|
|
74
86
|
return;
|
|
75
87
|
}
|
|
76
88
|
const groupedLayout = this.mergeGroupsLayout(group, newLayout);
|
|
89
|
+
this._sharedDragRef.current = { isDragging: false, sourceGroup: null };
|
|
90
|
+
this._sharedDragPositionRef.current = null;
|
|
77
91
|
this.setState({
|
|
78
92
|
isDragging: false,
|
|
79
93
|
currentDraggingElement: null,
|
|
@@ -108,6 +122,8 @@ class GridLayout extends React.PureComponent {
|
|
|
108
122
|
}
|
|
109
123
|
return item;
|
|
110
124
|
});
|
|
125
|
+
this._sharedDragRef.current = { isDragging: false, sourceGroup: null };
|
|
126
|
+
this._sharedDragPositionRef.current = null;
|
|
111
127
|
this.setState({
|
|
112
128
|
isDragging: false,
|
|
113
129
|
currentDraggingElement: null,
|
|
@@ -122,6 +138,7 @@ class GridLayout extends React.PureComponent {
|
|
|
122
138
|
item.parent = group;
|
|
123
139
|
}
|
|
124
140
|
const groupedLayout = this.mergeGroupsLayout(group, newLayout, item);
|
|
141
|
+
this._sharedDragRef.current = { isDragging: false, sourceGroup: null };
|
|
125
142
|
this.setState({ isDragging: false });
|
|
126
143
|
onDrop === null || onDrop === void 0 ? void 0 : onDrop(groupedLayout, item, e);
|
|
127
144
|
};
|
|
@@ -188,6 +205,7 @@ class GridLayout extends React.PureComponent {
|
|
|
188
205
|
this._memoCallbacksForGroups = {};
|
|
189
206
|
this._memoGroupsProps = {};
|
|
190
207
|
this._memoGroupsLayouts = {};
|
|
208
|
+
this._memoGroupsItems = {};
|
|
191
209
|
this._memoForwardedPluginRef = [];
|
|
192
210
|
}
|
|
193
211
|
getActiveLayout() {
|
|
@@ -239,6 +257,16 @@ class GridLayout extends React.PureComponent {
|
|
|
239
257
|
}
|
|
240
258
|
return this._memoCallbacksForGroups[group];
|
|
241
259
|
}
|
|
260
|
+
getMemoGroupItems(group, nextItems) {
|
|
261
|
+
const prev = this._memoGroupsItems[group];
|
|
262
|
+
if (prev &&
|
|
263
|
+
prev.length === nextItems.length &&
|
|
264
|
+
prev.every((item, i) => item === nextItems[i])) {
|
|
265
|
+
return prev;
|
|
266
|
+
}
|
|
267
|
+
this._memoGroupsItems[group] = nextItems;
|
|
268
|
+
return nextItems;
|
|
269
|
+
}
|
|
242
270
|
mergeGroupsLayout(group, newLayout, temporaryItem) {
|
|
243
271
|
const renderLayout = this.getActiveLayout();
|
|
244
272
|
const itemsByGroup = renderLayout.reduce((memo, item) => {
|
|
@@ -318,6 +346,8 @@ class GridLayout extends React.PureComponent {
|
|
|
318
346
|
item,
|
|
319
347
|
cursorPosition: { offsetX, offsetY },
|
|
320
348
|
};
|
|
349
|
+
// Update imperatively so DragOverLayout reads fresh cursor offset without re-render.
|
|
350
|
+
this._sharedDragPositionRef.current = { offsetX, offsetY };
|
|
321
351
|
}
|
|
322
352
|
this.setState({ currentDraggingElement, draggedOverGroup: group });
|
|
323
353
|
}
|
|
@@ -384,6 +414,7 @@ class GridLayout extends React.PureComponent {
|
|
|
384
414
|
this.setState({ isDragging: true });
|
|
385
415
|
}
|
|
386
416
|
else {
|
|
417
|
+
this._sharedDragRef.current = { isDragging: true, sourceGroup: group };
|
|
387
418
|
this._initDragCoordinatesWatcher(element);
|
|
388
419
|
this.updateDraggingElementState(group, layoutItem, e);
|
|
389
420
|
this.setState({ isDragging: true });
|
|
@@ -439,42 +470,29 @@ class GridLayout extends React.PureComponent {
|
|
|
439
470
|
return (React.createElement(GridItem, { key: id, id: id, item: { id, type, data: {} }, layout: temporaryLayout.data, adjustWidgetLayout: this.adjustWidgetLayout, isDragging: this.state.isDragging, isPlaceholder: true, noOverlay: noOverlay, withCustomHandle: Boolean(draggableHandleClassName), gridLayout: gridLayout }));
|
|
440
471
|
}
|
|
441
472
|
renderGroup(group, renderLayout, renderItems, offset = 0, groupGridProperties) {
|
|
442
|
-
const { registerManager
|
|
443
|
-
const { currentDraggingElement, draggedOverGroup } = this.state;
|
|
473
|
+
const { registerManager } = this.context;
|
|
474
|
+
const { currentDraggingElement, draggedOverGroup, isDragging, isDraggedOut } = this.state;
|
|
444
475
|
const hasOwnGroupProperties = typeof groupGridProperties === 'function';
|
|
445
476
|
const properties = hasOwnGroupProperties
|
|
446
477
|
? groupGridProperties(Object.assign({}, registerManager.gridLayout))
|
|
447
478
|
: registerManager.gridLayout;
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
const { callbacks, layout } = this.getMemoGroupProps(group, renderLayout, properties);
|
|
453
|
-
const hasSharedDragItem = Boolean(currentDraggingElement && currentDraggingElement.group !== group);
|
|
479
|
+
const { callbacks, layout, stableProperties } = this.getMemoGroupProps(group, renderLayout, properties);
|
|
480
|
+
const compactType = stableProperties.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP
|
|
481
|
+
? 'horizontal'
|
|
482
|
+
: stableProperties.compactType;
|
|
454
483
|
const isDragCaptured = Boolean(currentDraggingElement &&
|
|
455
484
|
group === currentDraggingElement.group &&
|
|
456
485
|
draggedOverGroup !== null &&
|
|
457
486
|
draggedOverGroup !== group);
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
const isDragging = this.state.isDragging;
|
|
468
|
-
const isCurrentDraggedItem = currentDraggingElement &&
|
|
469
|
-
'id' in currentDraggingElement.item &&
|
|
470
|
-
currentDraggingElement.item.id === keyId;
|
|
471
|
-
const isDraggedOut = isCurrentDraggedItem && this.state.isDraggedOut;
|
|
472
|
-
const itemNoOverlay = hasOwnGroupProperties && 'noOverlay' in properties
|
|
473
|
-
? properties.noOverlay
|
|
474
|
-
: noOverlay;
|
|
475
|
-
return (React.createElement(GridItem, { key: keyId, forwardedPluginRef: this.getMemoForwardRefCallback(offset + i), id: keyId, item: item, layout: layout, adjustWidgetLayout: this.adjustWidgetLayout, isDragging: isDragging, isDraggedOut: isDraggedOut || undefined, noOverlay: itemNoOverlay, focusable: focusable, withCustomHandle: Boolean(draggableHandleClassName), onItemMountChange: onItemMountChange, onItemRender: onItemRender, gridLayout: properties, onItemFocus: onItemFocus, onItemBlur: onItemBlur }));
|
|
476
|
-
}),
|
|
477
|
-
this.renderTemporaryPlaceholder(properties)));
|
|
487
|
+
const currentDraggingItemId = currentDraggingElement && 'id' in currentDraggingElement.item
|
|
488
|
+
? currentDraggingElement.item.id
|
|
489
|
+
: null;
|
|
490
|
+
// Non-source groups get stable false/null — memo skips re-render on drag move.
|
|
491
|
+
const isSourceGroup = Boolean((currentDraggingElement === null || currentDraggingElement === void 0 ? void 0 : currentDraggingElement.group) === group);
|
|
492
|
+
const groupIsAnyDragging = isDragging && isSourceGroup;
|
|
493
|
+
const groupCurrentDraggingItemId = isSourceGroup ? currentDraggingItemId : null;
|
|
494
|
+
const groupIsAnyDraggedOut = isSourceGroup ? isDraggedOut : false;
|
|
495
|
+
return (React.createElement(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 }));
|
|
478
496
|
}
|
|
479
497
|
render() {
|
|
480
498
|
const { config, groups, editMode, context } = this.context;
|
|
@@ -521,8 +539,9 @@ class GridLayout extends React.PureComponent {
|
|
|
521
539
|
layout = groupedLayout[id] || [];
|
|
522
540
|
items = itemsByGroup[id] || [];
|
|
523
541
|
}
|
|
524
|
-
const
|
|
525
|
-
|
|
542
|
+
const stableItems = this.getMemoGroupItems(id, items);
|
|
543
|
+
const element = this.renderGroup(id, layout, stableItems, offset, group.gridProperties);
|
|
544
|
+
offset += stableItems.length;
|
|
526
545
|
if (group.render) {
|
|
527
546
|
const groupContext = {
|
|
528
547
|
isMobile: false,
|
|
@@ -538,7 +557,8 @@ class GridLayout extends React.PureComponent {
|
|
|
538
557
|
});
|
|
539
558
|
}
|
|
540
559
|
else {
|
|
541
|
-
|
|
560
|
+
const stableDefaultItems = this.getMemoGroupItems(DEFAULT_GROUP, defaultRenderItems);
|
|
561
|
+
return this.renderGroup(DEFAULT_GROUP, defaultRenderLayout, stableDefaultItems, offset);
|
|
542
562
|
}
|
|
543
563
|
}
|
|
544
564
|
}
|
|
@@ -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 {\n COMPACT_TYPE_HORIZONTAL_NOWRAP,\n DEFAULT_GROUP,\n DRAGGABLE_CANCEL_CLASS_NAME,\n TEMPORARY_ITEM_ID,\n} from '../../constants';\nimport {DashKitContext} from '../../context';\nimport type {DashKitCtxShape} from '../../context';\nimport type {ConfigItem, ConfigLayout, DraggedOverItem} from '../../shared';\nimport {resolveLayoutGroup} from '../../utils';\nimport GridItem from '../GridItem/GridItem';\n\nimport {Layout} from './ReactGridLayout';\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\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._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 getMemoGroupProps = (\n group: string,\n renderLayout: ConfigLayout[],\n properties: Partial<ReactGridLayoutProps>,\n ) => {\n // Needed for _onDropDragOver\n this._memoGroupsProps[group] = properties;\n\n return {\n layout: this.getMemoGroupLayout(group, renderLayout).layout,\n callbacks: this.getMemoGroupCallbacks(group),\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\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._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.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.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.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 {\n registerManager,\n editMode,\n noOverlay,\n focusable,\n draggableHandleClassName,\n outerDnDEnable,\n onItemMountChange,\n onItemRender,\n onItemFocus,\n onItemBlur,\n } = this.context;\n\n const {currentDraggingElement, draggedOverGroup} = this.state;\n const hasOwnGroupProperties = typeof groupGridProperties === 'function';\n const properties = hasOwnGroupProperties\n ? groupGridProperties({...registerManager.gridLayout})\n : registerManager.gridLayout;\n let {compactType} = properties;\n\n if (compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP) {\n compactType = 'horizontal';\n }\n\n const {callbacks, layout} = this.getMemoGroupProps(group, renderLayout, properties);\n const hasSharedDragItem = Boolean(\n currentDraggingElement && currentDraggingElement.group !== group,\n );\n const isDragCaptured = Boolean(\n currentDraggingElement &&\n group === currentDraggingElement.group &&\n draggedOverGroup !== null &&\n draggedOverGroup !== group,\n );\n\n return (\n <Layout\n key={`group_${group}`}\n isDraggable={editMode}\n isResizable={editMode}\n // Group properties\n {...properties}\n // Layout props\n compactType={compactType}\n layout={layout}\n draggableCancel={`.${DRAGGABLE_CANCEL_CLASS_NAME}`}\n draggableHandle={\n draggableHandleClassName ? `.${draggableHandleClassName}` : undefined\n }\n // Default callbacks\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 // External Drag N Drop options\n onDragTargetRestore={callbacks.onDragTargetRestore}\n onDropDragOver={callbacks.onDropDragOver}\n onDrop={callbacks.onDrop}\n hasSharedDragItem={hasSharedDragItem}\n sharedDragPosition={currentDraggingElement?.cursorPosition}\n isDragCaptured={isDragCaptured}\n isDroppable={Boolean(outerDnDEnable) && editMode}\n >\n {renderItems.map((item, i) => {\n const keyId = item.id;\n const isDragging = this.state.isDragging;\n const isCurrentDraggedItem =\n currentDraggingElement &&\n 'id' in currentDraggingElement.item &&\n currentDraggingElement.item.id === keyId;\n const isDraggedOut = isCurrentDraggedItem && this.state.isDraggedOut;\n const itemNoOverlay =\n hasOwnGroupProperties && 'noOverlay' in properties\n ? properties.noOverlay\n : noOverlay;\n\n return (\n <GridItem\n key={keyId}\n forwardedPluginRef={this.getMemoForwardRefCallback(offset + i)} // forwarded ref to plugin\n id={keyId}\n item={item}\n layout={layout}\n adjustWidgetLayout={this.adjustWidgetLayout}\n isDragging={isDragging}\n isDraggedOut={isDraggedOut || undefined}\n noOverlay={itemNoOverlay}\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 {this.renderTemporaryPlaceholder(properties)}\n </Layout>\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 element = this.renderGroup(id, layout, items, offset, group.gridProperties);\n offset += items.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 return this.renderGroup(DEFAULT_GROUP, defaultRenderLayout, defaultRenderItems, 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\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"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ConfigItem, ConfigLayout } from "../../shared/index.js";
|
|
3
|
+
import type { PluginRef, PluginWidgetProps, ReactGridLayoutProps } from "../../typings/index.js";
|
|
4
|
+
import type { GroupCallbacks } from "./types.js";
|
|
5
|
+
export interface GroupLayoutProps {
|
|
6
|
+
group: string;
|
|
7
|
+
renderItems: ConfigItem[];
|
|
8
|
+
offset: number;
|
|
9
|
+
properties: Partial<ReactGridLayoutProps>;
|
|
10
|
+
compactType: 'vertical' | 'horizontal' | null | undefined;
|
|
11
|
+
callbacks: GroupCallbacks;
|
|
12
|
+
layout: ConfigLayout[];
|
|
13
|
+
temporaryPlaceholder: React.ReactNode;
|
|
14
|
+
isDragCaptured: boolean;
|
|
15
|
+
dragStateRef: React.MutableRefObject<{
|
|
16
|
+
isDragging: boolean;
|
|
17
|
+
sourceGroup: string | null;
|
|
18
|
+
}>;
|
|
19
|
+
sharedDragPositionRef: React.MutableRefObject<{
|
|
20
|
+
offsetX: number;
|
|
21
|
+
offsetY: number;
|
|
22
|
+
} | null>;
|
|
23
|
+
isAnyDragging: boolean;
|
|
24
|
+
currentDraggingItemId: string | null;
|
|
25
|
+
isAnyDraggedOut: boolean;
|
|
26
|
+
adjustWidgetLayout: PluginWidgetProps['adjustWidgetLayout'];
|
|
27
|
+
getMemoForwardRefCallback: (index: number) => (ref: PluginRef) => void;
|
|
28
|
+
}
|
|
29
|
+
export declare const GroupLayout: React.NamedExoticComponent<GroupLayoutProps>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { DRAGGABLE_CANCEL_CLASS_NAME } from "../../constants/index.js";
|
|
3
|
+
import { DashKitContext } from "../../context/index.js";
|
|
4
|
+
import GridItem from "../GridItem/GridItem.js";
|
|
5
|
+
import { Layout } from "./ReactGridLayout.js";
|
|
6
|
+
import { shallowArrayEqual, shallowObjectEqual } from "./utils.js";
|
|
7
|
+
function groupLayoutPropsAreEqual(prev, next) {
|
|
8
|
+
const needRerenderIfChanged = prev.group !== next.group ||
|
|
9
|
+
prev.layout !== next.layout ||
|
|
10
|
+
prev.offset !== next.offset ||
|
|
11
|
+
!shallowArrayEqual(prev.renderItems, next.renderItems) ||
|
|
12
|
+
!shallowObjectEqual(prev.properties, next.properties);
|
|
13
|
+
// Drag refs are stable and never trigger re-renders; only group-scoped state matters.
|
|
14
|
+
const needRerenderGroupScoped = prev.isDragCaptured !== next.isDragCaptured ||
|
|
15
|
+
prev.isAnyDragging !== next.isAnyDragging ||
|
|
16
|
+
prev.currentDraggingItemId !== next.currentDraggingItemId ||
|
|
17
|
+
prev.isAnyDraggedOut !== next.isAnyDraggedOut;
|
|
18
|
+
const hasTmpPlaceholderChanged = prev.temporaryPlaceholder !== next.temporaryPlaceholder;
|
|
19
|
+
return !needRerenderIfChanged && !needRerenderGroupScoped && !hasTmpPlaceholderChanged;
|
|
20
|
+
}
|
|
21
|
+
export const GroupLayout = React.memo(function GroupLayout({ group, renderItems, offset, properties, compactType, callbacks, layout, temporaryPlaceholder, dragStateRef, sharedDragPositionRef, isDragCaptured, isAnyDragging, currentDraggingItemId, isAnyDraggedOut, adjustWidgetLayout, getMemoForwardRefCallback, }) {
|
|
22
|
+
const { editMode, noOverlay, focusable, draggableHandleClassName, outerDnDEnable, onItemMountChange, onItemRender, onItemFocus, onItemBlur, } = React.useContext(DashKitContext);
|
|
23
|
+
// Use group-specific noOverlay if it was explicitly set via groupGridProperties,
|
|
24
|
+
// otherwise fallback to the dashboard-level noOverlay from context.
|
|
25
|
+
const resolvedNoOverlay = 'noOverlay' in properties ? properties.noOverlay : noOverlay;
|
|
26
|
+
// Memoize items array; non-source groups have stable false/null drag props so React skips their subtrees.
|
|
27
|
+
const itemElements = React.useMemo(() => {
|
|
28
|
+
return renderItems.map((item, i) => {
|
|
29
|
+
const keyId = item.id;
|
|
30
|
+
const isDragging = isAnyDragging && keyId === currentDraggingItemId;
|
|
31
|
+
const isDraggedOut = isDragging && isAnyDraggedOut;
|
|
32
|
+
return (React.createElement(GridItem, { 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 }));
|
|
33
|
+
});
|
|
34
|
+
}, [
|
|
35
|
+
renderItems,
|
|
36
|
+
isAnyDragging,
|
|
37
|
+
currentDraggingItemId,
|
|
38
|
+
isAnyDraggedOut,
|
|
39
|
+
offset,
|
|
40
|
+
layout,
|
|
41
|
+
adjustWidgetLayout,
|
|
42
|
+
resolvedNoOverlay,
|
|
43
|
+
focusable,
|
|
44
|
+
draggableHandleClassName,
|
|
45
|
+
onItemMountChange,
|
|
46
|
+
onItemRender,
|
|
47
|
+
properties,
|
|
48
|
+
onItemFocus,
|
|
49
|
+
onItemBlur,
|
|
50
|
+
getMemoForwardRefCallback,
|
|
51
|
+
]);
|
|
52
|
+
return (React.createElement(Layout, Object.assign({ key: `group_${group}`, isDraggable: editMode, isResizable: editMode }, properties, { compactType: compactType, layout: layout, draggableCancel: `.${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 }),
|
|
53
|
+
itemElements,
|
|
54
|
+
temporaryPlaceholder));
|
|
55
|
+
}, groupLayoutPropsAreEqual);
|
|
56
|
+
//# sourceMappingURL=GroupLayout.js.map
|
|
@@ -0,0 +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"]}
|
|
@@ -7,8 +7,13 @@ type SharedDragPosition = {
|
|
|
7
7
|
export declare const Layout: React.ComponentClass<ReactGridLayout.ReactGridLayoutProps & {
|
|
8
8
|
innerRef?: React.Ref<HTMLDivElement>;
|
|
9
9
|
isDragCaptured?: boolean;
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
dragStateRef?: React.MutableRefObject<{
|
|
11
|
+
isDragging: boolean;
|
|
12
|
+
sourceGroup: string | null;
|
|
13
|
+
}>;
|
|
14
|
+
sharedDragPositionRef?: React.MutableRefObject<SharedDragPosition | null>;
|
|
15
|
+
group?: string;
|
|
12
16
|
onDragTargetRestore?: () => void;
|
|
17
|
+
transformScaleRef?: React.MutableRefObject<number>;
|
|
13
18
|
} & ReactGridLayout.WidthProviderProps, any>;
|
|
14
19
|
export {};
|