@grafana/scenes 6.30.0--canary.1215.16966039806.0 → 6.30.0--canary.1215.16967377320.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.
@@ -69,11 +69,15 @@ const _SceneGridLayout = class _SceneGridLayout extends SceneObjectBase {
69
69
  let newParent = this.findGridItemSceneParent(gridLayout, indexOfUpdatedItem - 1);
70
70
  let newChildren = this.state.children;
71
71
  if (sceneChild instanceof SceneGridRow && newParent instanceof SceneGridRow) {
72
- if (!this.isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem, newParent)) {
72
+ if (!this.isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem)) {
73
73
  this._loadOldLayout = true;
74
74
  }
75
75
  newParent = this;
76
76
  }
77
+ if (newParent instanceof SceneGridRow && isRepeatCloneOrChildOf(newParent)) {
78
+ this._loadOldLayout = true;
79
+ return;
80
+ }
77
81
  if (newParent !== sceneChild.parent) {
78
82
  newChildren = this.moveChildTo(sceneChild, newParent);
79
83
  }
@@ -190,10 +194,7 @@ const _SceneGridLayout = class _SceneGridLayout extends SceneObjectBase {
190
194
  /**
191
195
  * Helper func to check if we are dropping a row in between panels of another row
192
196
  */
193
- isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem, newParent) {
194
- if (isRepeatCloneOrChildOf(newParent)) {
195
- return false;
196
- }
197
+ isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem) {
197
198
  if (gridLayout[gridLayout.length - 1].i === updatedItem.i) {
198
199
  return true;
199
200
  }
@@ -235,7 +236,7 @@ const _SceneGridLayout = class _SceneGridLayout extends SceneObjectBase {
235
236
  }
236
237
  return rootChildren;
237
238
  }
238
- toGridCell(child, parentKey) {
239
+ toGridCell(child) {
239
240
  var _a, _b;
240
241
  const size = child.state;
241
242
  let x = (_a = size.x) != null ? _a : 0;
@@ -257,10 +258,10 @@ const _SceneGridLayout = class _SceneGridLayout extends SceneObjectBase {
257
258
  buildGridLayout(width, height) {
258
259
  let cells = [];
259
260
  for (const child of this.state.children) {
260
- cells.push(this.toGridCell(child, ""));
261
+ cells.push(this.toGridCell(child));
261
262
  if (child instanceof SceneGridRow && !child.state.isCollapsed) {
262
263
  for (const rowChild of child.state.children) {
263
- cells.push(this.toGridCell(rowChild, child.state.key));
264
+ cells.push(this.toGridCell(rowChild));
264
265
  }
265
266
  }
266
267
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SceneGridLayout.js","sources":["../../../../../src/components/layout/grid/SceneGridLayout.tsx"],"sourcesContent":["import { PointerEvent } from 'react';\nimport ReactGridLayout from 'react-grid-layout';\n\nimport { SceneObjectBase } from '../../../core/SceneObjectBase';\nimport { SceneLayout, SceneObjectState } from '../../../core/types';\nimport { DEFAULT_PANEL_SPAN } from './constants';\nimport { isSceneGridRow } from './SceneGridItem';\nimport { SceneGridLayoutRenderer } from './SceneGridLayoutRenderer';\n\nimport { SceneGridRow } from './SceneGridRow';\nimport { SceneGridItemLike, SceneGridItemPlacement, SceneGridLayoutDragStartEvent } from './types';\nimport { fitPanelsInHeight } from './utils';\nimport { VizPanel } from '../../VizPanel/VizPanel';\nimport { isRepeatCloneOrChildOf } from '../../../utils/utils';\n\ninterface SceneGridLayoutState extends SceneObjectState {\n /**\n * Turn on or off dragging for all items. Individual items can still disabled via isDraggable property\n **/\n isDraggable?: boolean;\n /** Enable or disable item resizing */\n isResizable?: boolean;\n isLazy?: boolean;\n /**\n * Fit panels to height of the grid. This will scale down the panels vertically to fit available height.\n * The row height is not changed, only the y position and height of the panels.\n * UNSAFE: This feature is experimental and it might change in the future.\n */\n UNSAFE_fitPanels?: boolean;\n children: SceneGridItemLike[];\n}\n\nexport class SceneGridLayout extends SceneObjectBase<SceneGridLayoutState> implements SceneLayout {\n public static Component = SceneGridLayoutRenderer;\n\n private _skipOnLayoutChange = false;\n private _oldLayout: ReactGridLayout.Layout[] = [];\n private _loadOldLayout = false;\n\n public constructor(state: SceneGridLayoutState) {\n super({\n ...state,\n children: sortChildrenByPosition(state.children),\n });\n }\n\n /**\n * SceneLayout interface. Used for example by VizPanelRenderer\n */\n public isDraggable(): boolean {\n return this.state.isDraggable ?? false;\n }\n\n public getDragClass() {\n return `grid-drag-handle-${this.state.key}`;\n }\n\n public getDragClassCancel() {\n return `grid-drag-cancel`;\n }\n\n public getDragHooks() {\n return {\n onDragStart: (evt: PointerEvent, panel: VizPanel) => {\n this.publishEvent(new SceneGridLayoutDragStartEvent({ evt, panel }), true);\n },\n };\n }\n\n public toggleRow(row: SceneGridRow) {\n const isCollapsed = row.state.isCollapsed;\n\n if (!isCollapsed) {\n row.setState({ isCollapsed: true });\n // To force re-render\n this.setState({});\n return;\n }\n\n const rowChildren = row.state.children;\n\n if (rowChildren.length === 0) {\n row.setState({ isCollapsed: false });\n this.setState({});\n return;\n }\n\n // Ok we are expanding row. We need to update row children y pos (incase they are incorrect) and push items below down\n // Code copied from DashboardModel toggleRow()\n\n const rowY = row.state.y!;\n const firstPanelYPos = rowChildren[0].state.y ?? rowY;\n const yDiff = firstPanelYPos - (rowY + 1);\n\n // y max will represent the bottom y pos after all panels have been added\n // needed to know home much panels below should be pushed down\n let yMax = rowY;\n\n for (const panel of rowChildren) {\n // set the y gridPos if it wasn't already set\n const newSize = { ...panel.state };\n newSize.y = newSize.y ?? rowY;\n // make sure y is adjusted (in case row moved while collapsed)\n newSize.y -= yDiff;\n\n if (newSize.y! !== panel.state.y!) {\n panel.setState(newSize);\n }\n\n // update insert post and y max\n yMax = Math.max(yMax, Number(newSize.y!) + Number(newSize.height!));\n }\n\n const pushDownAmount = yMax - rowY - 1;\n\n // push panels below down\n for (const child of this.state.children) {\n if (child.state.y! > rowY) {\n this.pushChildDown(child, pushDownAmount);\n }\n\n if (isSceneGridRow(child) && child !== row) {\n for (const rowChild of child.state.children) {\n if (rowChild.state.y! > rowY) {\n this.pushChildDown(rowChild, pushDownAmount);\n }\n }\n }\n }\n\n row.setState({ isCollapsed: false });\n // Trigger re-render\n this.setState({});\n }\n\n public ignoreLayoutChange(shouldIgnore: boolean) {\n this._skipOnLayoutChange = shouldIgnore;\n }\n\n public onLayoutChange = (layout: ReactGridLayout.Layout[]) => {\n if (this._skipOnLayoutChange) {\n // Layout has been updated by other RTL handler already\n this._skipOnLayoutChange = false;\n return;\n }\n\n // We replace with the old layout only if the current state is invalid\n if (this._loadOldLayout) {\n layout = [...this._oldLayout];\n this._loadOldLayout = false;\n }\n\n for (const item of layout) {\n const child = this.getSceneLayoutChild(item.i);\n\n const nextSize: SceneGridItemPlacement = {\n x: item.x,\n y: item.y,\n width: item.w,\n height: item.h,\n };\n\n if (!isItemSizeEqual(child.state, nextSize)) {\n child.setState({\n ...nextSize,\n });\n }\n }\n\n this.setState({ children: sortChildrenByPosition(this.state.children) });\n };\n\n /**\n * Will also scan row children and return child of the row\n */\n public getSceneLayoutChild(key: string): SceneGridItemLike {\n for (const child of this.state.children) {\n if (child.state.key === key) {\n return child;\n }\n\n if (child instanceof SceneGridRow) {\n for (const rowChild of child.state.children) {\n if (rowChild.state.key === key) {\n return rowChild;\n }\n }\n }\n }\n\n throw new Error('Scene layout child not found for GridItem');\n }\n\n public onResizeStop: ReactGridLayout.ItemCallback = (_, o, n) => {\n const child = this.getSceneLayoutChild(n.i);\n child.setState({\n width: n.w,\n height: n.h,\n });\n };\n\n private pushChildDown(child: SceneGridItemLike, amount: number) {\n child.setState({\n y: child.state.y! + amount,\n });\n }\n\n /**\n * We assume the layout array is sorted according to y pos, and walk upwards until we find a row.\n * If it is collapsed there is no row to add it to. The default is then to return the SceneGridLayout itself\n */\n private findGridItemSceneParent(layout: ReactGridLayout.Layout[], startAt: number): SceneGridRow | SceneGridLayout {\n for (let i = startAt; i >= 0; i--) {\n const gridItem = layout[i];\n const sceneChild = this.getSceneLayoutChild(gridItem.i);\n\n if (sceneChild instanceof SceneGridRow) {\n // the closest row is collapsed return null\n if (sceneChild.state.isCollapsed) {\n return this;\n }\n\n return sceneChild;\n }\n }\n\n return this;\n }\n\n /**\n * Helper func to check if we are dropping a row in between panels of another row\n */\n private isRowDropValid(\n gridLayout: ReactGridLayout.Layout[],\n updatedItem: ReactGridLayout.Layout,\n indexOfUpdatedItem: number,\n newParent: SceneGridRow\n ): boolean {\n // Do not allow moving panel into repeated row clone\n if (isRepeatCloneOrChildOf(newParent)) {\n return false;\n }\n\n // if the row is dropped at the end of the dashboard grid layout, we accept this valid state\n if (gridLayout[gridLayout.length - 1].i === updatedItem.i) {\n return true;\n }\n\n // if the next child after the updated item is a scene grid row, then we are either at the top\n // of the dashboard, or between rows\n // if it's not a grid row, but it's parent is the layout, it means we are not in between a\n // rows children, so also valid state\n const nextSceneChild = this.getSceneLayoutChild(gridLayout[indexOfUpdatedItem + 1].i);\n if (nextSceneChild instanceof SceneGridRow) {\n return true;\n } else if (nextSceneChild.parent instanceof SceneGridLayout) {\n return true;\n }\n\n return false;\n }\n\n /**\n * This likely needs a slightly different approach. Where we clone or deactivate or and re-activate the moved child\n */\n public moveChildTo(child: SceneGridItemLike, target: SceneGridLayout | SceneGridRow) {\n const currentParent = child.parent!;\n let rootChildren = this.state.children;\n\n const newChild = child.clone({ key: child.state.key });\n\n // Remove from current parent row\n if (currentParent instanceof SceneGridRow) {\n const newRow = currentParent.clone();\n newRow.setState({\n children: newRow.state.children.filter((c) => c.state.key !== child.state.key),\n });\n\n // new children with new row\n rootChildren = rootChildren.map((c) => (c === currentParent ? newRow : c));\n\n // if target is also a row\n if (target instanceof SceneGridRow) {\n const targetRow = target.clone();\n targetRow.setState({ children: [...targetRow.state.children, newChild] });\n rootChildren = rootChildren.map((c) => (c === target ? targetRow : c));\n } else {\n // target is the main grid\n rootChildren = [...rootChildren, newChild];\n }\n } else {\n if (!(target instanceof SceneGridLayout)) {\n // current parent is the main grid remove it from there\n rootChildren = rootChildren.filter((c) => c.state.key !== child.state.key);\n // Clone the target row and add the child\n const targetRow = target.clone();\n targetRow.setState({ children: [...targetRow.state.children, newChild] });\n // Replace row with new row\n rootChildren = rootChildren.map((c) => (c === target ? targetRow : c));\n }\n }\n\n return rootChildren;\n }\n\n public onDragStart: ReactGridLayout.ItemCallback = (gridLayout) => {\n this._oldLayout = [...gridLayout];\n };\n\n public onDragStop: ReactGridLayout.ItemCallback = (gridLayout, o, updatedItem) => {\n const sceneChild = this.getSceneLayoutChild(updatedItem.i)!;\n\n // Need to resort the grid layout based on new position (needed to find the new parent)\n gridLayout = sortGridLayout(gridLayout);\n\n // Update children positions if they have changed\n for (let i = 0; i < gridLayout.length; i++) {\n const gridItem = gridLayout[i];\n const child = this.getSceneLayoutChild(gridItem.i)!;\n const childSize = child.state;\n\n if (childSize?.x !== gridItem.x || childSize?.y !== gridItem.y) {\n child.setState({\n x: gridItem.x,\n y: gridItem.y,\n });\n }\n }\n\n // Update the parent if the child if it has moved to a row or back to the grid\n const indexOfUpdatedItem = gridLayout.findIndex((item) => item.i === updatedItem.i);\n let newParent = this.findGridItemSceneParent(gridLayout, indexOfUpdatedItem - 1);\n let newChildren = this.state.children;\n\n // if the child is a row and we are moving it under an uncollapsed row, keep the scene grid layout as parent\n // and set the old layout flag if the state is invalid. We allow setting the children in an invalid state,\n // as the layout will be updated in onLayoutChange and avoid flickering\n if (sceneChild instanceof SceneGridRow && newParent instanceof SceneGridRow) {\n if (!this.isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem, newParent)) {\n this._loadOldLayout = true;\n }\n\n newParent = this;\n }\n\n if (newParent !== sceneChild.parent) {\n newChildren = this.moveChildTo(sceneChild, newParent);\n }\n\n this.setState({ children: sortChildrenByPosition(newChildren) });\n this._skipOnLayoutChange = true;\n };\n\n private toGridCell(child: SceneGridItemLike, parentKey: string): ReactGridLayout.Layout {\n const size = child.state;\n\n let x = size.x ?? 0;\n let y = size.y ?? 0;\n const w = Number.isInteger(Number(size.width)) ? Number(size.width) : DEFAULT_PANEL_SPAN;\n const h = Number.isInteger(Number(size.height)) ? Number(size.height) : DEFAULT_PANEL_SPAN;\n\n let isDraggable = child.state.isDraggable;\n let isResizable = child.state.isResizable;\n\n if (child instanceof SceneGridRow) {\n isDraggable = child.state.isCollapsed ? true : false;\n isResizable = false;\n }\n\n // If this is a repeated row, we should not allow dragging\n if (isRepeatCloneOrChildOf(child)) {\n isDraggable = false;\n isResizable = false;\n }\n\n return { i: child.state.key!, x, y, h, w, isResizable, isDraggable };\n }\n\n public buildGridLayout(width: number, height: number): ReactGridLayout.Layout[] {\n let cells: ReactGridLayout.Layout[] = [];\n\n for (const child of this.state.children) {\n cells.push(this.toGridCell(child, ''));\n\n if (child instanceof SceneGridRow && !child.state.isCollapsed) {\n for (const rowChild of child.state.children) {\n cells.push(this.toGridCell(rowChild, child.state.key!));\n }\n }\n }\n\n // Sort by position\n cells = sortGridLayout(cells);\n\n if (this.state.UNSAFE_fitPanels) {\n cells = fitPanelsInHeight(cells, height);\n }\n\n if (width < 768) {\n // We should not persist the mobile layout\n this._skipOnLayoutChange = true;\n return cells.map((cell) => ({ ...cell, w: 24 }));\n }\n\n this._skipOnLayoutChange = false;\n\n return cells;\n }\n}\n\nfunction isItemSizeEqual(a: SceneGridItemPlacement, b: SceneGridItemPlacement) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\nfunction sortChildrenByPosition(children: SceneGridItemLike[]) {\n children.forEach((child) => {\n if (child instanceof SceneGridRow) {\n child.setState({ children: sortChildrenByPosition(child.state.children) });\n }\n });\n\n return [...children].sort((a, b) => {\n return a.state.y! - b.state.y! || a.state.x! - b.state.x!;\n });\n}\n\nfunction sortGridLayout(layout: ReactGridLayout.Layout[]) {\n return [...layout].sort((a, b) => a.y - b.y || a.x! - b.x);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SceneGridLayout.js","sources":["../../../../../src/components/layout/grid/SceneGridLayout.tsx"],"sourcesContent":["import { PointerEvent } from 'react';\nimport ReactGridLayout from 'react-grid-layout';\n\nimport { SceneObjectBase } from '../../../core/SceneObjectBase';\nimport { SceneLayout, SceneObjectState } from '../../../core/types';\nimport { DEFAULT_PANEL_SPAN } from './constants';\nimport { isSceneGridRow } from './SceneGridItem';\nimport { SceneGridLayoutRenderer } from './SceneGridLayoutRenderer';\n\nimport { SceneGridRow } from './SceneGridRow';\nimport { SceneGridItemLike, SceneGridItemPlacement, SceneGridLayoutDragStartEvent } from './types';\nimport { fitPanelsInHeight } from './utils';\nimport { VizPanel } from '../../VizPanel/VizPanel';\nimport { isRepeatCloneOrChildOf } from '../../../utils/utils';\n\ninterface SceneGridLayoutState extends SceneObjectState {\n /**\n * Turn on or off dragging for all items. Individual items can still disabled via isDraggable property\n **/\n isDraggable?: boolean;\n /** Enable or disable item resizing */\n isResizable?: boolean;\n isLazy?: boolean;\n /**\n * Fit panels to height of the grid. This will scale down the panels vertically to fit available height.\n * The row height is not changed, only the y position and height of the panels.\n * UNSAFE: This feature is experimental and it might change in the future.\n */\n UNSAFE_fitPanels?: boolean;\n children: SceneGridItemLike[];\n}\n\nexport class SceneGridLayout extends SceneObjectBase<SceneGridLayoutState> implements SceneLayout {\n public static Component = SceneGridLayoutRenderer;\n\n private _skipOnLayoutChange = false;\n private _oldLayout: ReactGridLayout.Layout[] = [];\n private _loadOldLayout = false;\n\n public constructor(state: SceneGridLayoutState) {\n super({\n ...state,\n children: sortChildrenByPosition(state.children),\n });\n }\n\n /**\n * SceneLayout interface. Used for example by VizPanelRenderer\n */\n public isDraggable(): boolean {\n return this.state.isDraggable ?? false;\n }\n\n public getDragClass() {\n return `grid-drag-handle-${this.state.key}`;\n }\n\n public getDragClassCancel() {\n return `grid-drag-cancel`;\n }\n\n public getDragHooks() {\n return {\n onDragStart: (evt: PointerEvent, panel: VizPanel) => {\n this.publishEvent(new SceneGridLayoutDragStartEvent({ evt, panel }), true);\n },\n };\n }\n\n public toggleRow(row: SceneGridRow) {\n const isCollapsed = row.state.isCollapsed;\n\n if (!isCollapsed) {\n row.setState({ isCollapsed: true });\n // To force re-render\n this.setState({});\n return;\n }\n\n const rowChildren = row.state.children;\n\n if (rowChildren.length === 0) {\n row.setState({ isCollapsed: false });\n this.setState({});\n return;\n }\n\n // Ok we are expanding row. We need to update row children y pos (incase they are incorrect) and push items below down\n // Code copied from DashboardModel toggleRow()\n\n const rowY = row.state.y!;\n const firstPanelYPos = rowChildren[0].state.y ?? rowY;\n const yDiff = firstPanelYPos - (rowY + 1);\n\n // y max will represent the bottom y pos after all panels have been added\n // needed to know home much panels below should be pushed down\n let yMax = rowY;\n\n for (const panel of rowChildren) {\n // set the y gridPos if it wasn't already set\n const newSize = { ...panel.state };\n newSize.y = newSize.y ?? rowY;\n // make sure y is adjusted (in case row moved while collapsed)\n newSize.y -= yDiff;\n\n if (newSize.y! !== panel.state.y!) {\n panel.setState(newSize);\n }\n\n // update insert post and y max\n yMax = Math.max(yMax, Number(newSize.y!) + Number(newSize.height!));\n }\n\n const pushDownAmount = yMax - rowY - 1;\n\n // push panels below down\n for (const child of this.state.children) {\n if (child.state.y! > rowY) {\n this.pushChildDown(child, pushDownAmount);\n }\n\n if (isSceneGridRow(child) && child !== row) {\n for (const rowChild of child.state.children) {\n if (rowChild.state.y! > rowY) {\n this.pushChildDown(rowChild, pushDownAmount);\n }\n }\n }\n }\n\n row.setState({ isCollapsed: false });\n // Trigger re-render\n this.setState({});\n }\n\n public ignoreLayoutChange(shouldIgnore: boolean) {\n this._skipOnLayoutChange = shouldIgnore;\n }\n\n public onLayoutChange = (layout: ReactGridLayout.Layout[]) => {\n if (this._skipOnLayoutChange) {\n // Layout has been updated by other RTL handler already\n this._skipOnLayoutChange = false;\n return;\n }\n\n // We replace with the old layout only if the current state is invalid\n if (this._loadOldLayout) {\n layout = [...this._oldLayout];\n this._loadOldLayout = false;\n }\n\n for (const item of layout) {\n const child = this.getSceneLayoutChild(item.i);\n\n const nextSize: SceneGridItemPlacement = {\n x: item.x,\n y: item.y,\n width: item.w,\n height: item.h,\n };\n\n if (!isItemSizeEqual(child.state, nextSize)) {\n child.setState({\n ...nextSize,\n });\n }\n }\n\n this.setState({ children: sortChildrenByPosition(this.state.children) });\n };\n\n /**\n * Will also scan row children and return child of the row\n */\n public getSceneLayoutChild(key: string): SceneGridItemLike {\n for (const child of this.state.children) {\n if (child.state.key === key) {\n return child;\n }\n\n if (child instanceof SceneGridRow) {\n for (const rowChild of child.state.children) {\n if (rowChild.state.key === key) {\n return rowChild;\n }\n }\n }\n }\n\n throw new Error('Scene layout child not found for GridItem');\n }\n\n public onResizeStop: ReactGridLayout.ItemCallback = (_, o, n) => {\n const child = this.getSceneLayoutChild(n.i);\n child.setState({\n width: n.w,\n height: n.h,\n });\n };\n\n private pushChildDown(child: SceneGridItemLike, amount: number) {\n child.setState({\n y: child.state.y! + amount,\n });\n }\n\n /**\n * We assume the layout array is sorted according to y pos, and walk upwards until we find a row.\n * If it is collapsed there is no row to add it to. The default is then to return the SceneGridLayout itself\n */\n private findGridItemSceneParent(layout: ReactGridLayout.Layout[], startAt: number): SceneGridRow | SceneGridLayout {\n for (let i = startAt; i >= 0; i--) {\n const gridItem = layout[i];\n const sceneChild = this.getSceneLayoutChild(gridItem.i);\n\n if (sceneChild instanceof SceneGridRow) {\n // the closest row is collapsed return null\n if (sceneChild.state.isCollapsed) {\n return this;\n }\n\n return sceneChild;\n }\n }\n\n return this;\n }\n\n /**\n * Helper func to check if we are dropping a row in between panels of another row\n */\n private isRowDropValid(\n gridLayout: ReactGridLayout.Layout[],\n updatedItem: ReactGridLayout.Layout,\n indexOfUpdatedItem: number\n ): boolean {\n // if the row is dropped at the end of the dashboard grid layout, we accept this valid state\n if (gridLayout[gridLayout.length - 1].i === updatedItem.i) {\n return true;\n }\n\n // if the next child after the updated item is a scene grid row, then we are either at the top\n // of the dashboard, or between rows\n // if it's not a grid row, but it's parent is the layout, it means we are not in between a\n // rows children, so also valid state\n const nextSceneChild = this.getSceneLayoutChild(gridLayout[indexOfUpdatedItem + 1].i);\n if (nextSceneChild instanceof SceneGridRow) {\n return true;\n } else if (nextSceneChild.parent instanceof SceneGridLayout) {\n return true;\n }\n\n return false;\n }\n\n /**\n * This likely needs a slightly different approach. Where we clone or deactivate or and re-activate the moved child\n */\n public moveChildTo(child: SceneGridItemLike, target: SceneGridLayout | SceneGridRow) {\n const currentParent = child.parent!;\n let rootChildren = this.state.children;\n\n const newChild = child.clone({ key: child.state.key });\n\n // Remove from current parent row\n if (currentParent instanceof SceneGridRow) {\n const newRow = currentParent.clone();\n newRow.setState({\n children: newRow.state.children.filter((c) => c.state.key !== child.state.key),\n });\n\n // new children with new row\n rootChildren = rootChildren.map((c) => (c === currentParent ? newRow : c));\n\n // if target is also a row\n if (target instanceof SceneGridRow) {\n const targetRow = target.clone();\n targetRow.setState({ children: [...targetRow.state.children, newChild] });\n rootChildren = rootChildren.map((c) => (c === target ? targetRow : c));\n } else {\n // target is the main grid\n rootChildren = [...rootChildren, newChild];\n }\n } else {\n if (!(target instanceof SceneGridLayout)) {\n // current parent is the main grid remove it from there\n rootChildren = rootChildren.filter((c) => c.state.key !== child.state.key);\n // Clone the target row and add the child\n const targetRow = target.clone();\n targetRow.setState({ children: [...targetRow.state.children, newChild] });\n // Replace row with new row\n rootChildren = rootChildren.map((c) => (c === target ? targetRow : c));\n }\n }\n\n return rootChildren;\n }\n\n public onDragStart: ReactGridLayout.ItemCallback = (gridLayout) => {\n this._oldLayout = [...gridLayout];\n };\n\n public onDragStop: ReactGridLayout.ItemCallback = (gridLayout, o, updatedItem) => {\n const sceneChild = this.getSceneLayoutChild(updatedItem.i)!;\n\n // Need to resort the grid layout based on new position (needed to find the new parent)\n gridLayout = sortGridLayout(gridLayout);\n\n // Update children positions if they have changed\n for (let i = 0; i < gridLayout.length; i++) {\n const gridItem = gridLayout[i];\n const child = this.getSceneLayoutChild(gridItem.i)!;\n const childSize = child.state;\n\n if (childSize?.x !== gridItem.x || childSize?.y !== gridItem.y) {\n child.setState({\n x: gridItem.x,\n y: gridItem.y,\n });\n }\n }\n\n // Update the parent if the child if it has moved to a row or back to the grid\n const indexOfUpdatedItem = gridLayout.findIndex((item) => item.i === updatedItem.i);\n let newParent = this.findGridItemSceneParent(gridLayout, indexOfUpdatedItem - 1);\n let newChildren = this.state.children;\n\n // if the child is a row and we are moving it under an uncollapsed row, keep the scene grid layout as parent\n // and set the old layout flag if the state is invalid. We allow setting the children in an invalid state,\n // as the layout will be updated in onLayoutChange and avoid flickering\n if (sceneChild instanceof SceneGridRow && newParent instanceof SceneGridRow) {\n if (!this.isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem)) {\n this._loadOldLayout = true;\n }\n\n newParent = this;\n }\n\n // Dot not allow dragging into repeated row clone\n if (newParent instanceof SceneGridRow && isRepeatCloneOrChildOf(newParent)) {\n this._loadOldLayout = true;\n return;\n }\n\n if (newParent !== sceneChild.parent) {\n newChildren = this.moveChildTo(sceneChild, newParent);\n }\n\n this.setState({ children: sortChildrenByPosition(newChildren) });\n this._skipOnLayoutChange = true;\n };\n\n private toGridCell(child: SceneGridItemLike): ReactGridLayout.Layout {\n const size = child.state;\n\n let x = size.x ?? 0;\n let y = size.y ?? 0;\n const w = Number.isInteger(Number(size.width)) ? Number(size.width) : DEFAULT_PANEL_SPAN;\n const h = Number.isInteger(Number(size.height)) ? Number(size.height) : DEFAULT_PANEL_SPAN;\n\n let isDraggable = child.state.isDraggable;\n let isResizable = child.state.isResizable;\n\n if (child instanceof SceneGridRow) {\n isDraggable = child.state.isCollapsed ? true : false;\n isResizable = false;\n }\n\n // If this is a repeated row, we should not allow dragging\n if (isRepeatCloneOrChildOf(child)) {\n isDraggable = false;\n isResizable = false;\n }\n\n return { i: child.state.key!, x, y, h, w, isResizable, isDraggable };\n }\n\n public buildGridLayout(width: number, height: number): ReactGridLayout.Layout[] {\n let cells: ReactGridLayout.Layout[] = [];\n\n for (const child of this.state.children) {\n cells.push(this.toGridCell(child));\n\n if (child instanceof SceneGridRow && !child.state.isCollapsed) {\n for (const rowChild of child.state.children) {\n cells.push(this.toGridCell(rowChild));\n }\n }\n }\n\n // Sort by position\n cells = sortGridLayout(cells);\n\n if (this.state.UNSAFE_fitPanels) {\n cells = fitPanelsInHeight(cells, height);\n }\n\n if (width < 768) {\n // We should not persist the mobile layout\n this._skipOnLayoutChange = true;\n return cells.map((cell) => ({ ...cell, w: 24 }));\n }\n\n this._skipOnLayoutChange = false;\n\n return cells;\n }\n}\n\nfunction isItemSizeEqual(a: SceneGridItemPlacement, b: SceneGridItemPlacement) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\nfunction sortChildrenByPosition(children: SceneGridItemLike[]) {\n children.forEach((child) => {\n if (child instanceof SceneGridRow) {\n child.setState({ children: sortChildrenByPosition(child.state.children) });\n }\n });\n\n return [...children].sort((a, b) => {\n return a.state.y! - b.state.y! || a.state.x! - b.state.x!;\n });\n}\n\nfunction sortGridLayout(layout: ReactGridLayout.Layout[]) {\n return [...layout].sort((a, b) => a.y - b.y || a.x! - b.x);\n}\n"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -11536,11 +11536,15 @@ const _SceneGridLayout = class _SceneGridLayout extends SceneObjectBase {
11536
11536
  let newParent = this.findGridItemSceneParent(gridLayout, indexOfUpdatedItem - 1);
11537
11537
  let newChildren = this.state.children;
11538
11538
  if (sceneChild instanceof SceneGridRow && newParent instanceof SceneGridRow) {
11539
- if (!this.isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem, newParent)) {
11539
+ if (!this.isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem)) {
11540
11540
  this._loadOldLayout = true;
11541
11541
  }
11542
11542
  newParent = this;
11543
11543
  }
11544
+ if (newParent instanceof SceneGridRow && isRepeatCloneOrChildOf(newParent)) {
11545
+ this._loadOldLayout = true;
11546
+ return;
11547
+ }
11544
11548
  if (newParent !== sceneChild.parent) {
11545
11549
  newChildren = this.moveChildTo(sceneChild, newParent);
11546
11550
  }
@@ -11657,10 +11661,7 @@ const _SceneGridLayout = class _SceneGridLayout extends SceneObjectBase {
11657
11661
  /**
11658
11662
  * Helper func to check if we are dropping a row in between panels of another row
11659
11663
  */
11660
- isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem, newParent) {
11661
- if (isRepeatCloneOrChildOf(newParent)) {
11662
- return false;
11663
- }
11664
+ isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem) {
11664
11665
  if (gridLayout[gridLayout.length - 1].i === updatedItem.i) {
11665
11666
  return true;
11666
11667
  }
@@ -11702,7 +11703,7 @@ const _SceneGridLayout = class _SceneGridLayout extends SceneObjectBase {
11702
11703
  }
11703
11704
  return rootChildren;
11704
11705
  }
11705
- toGridCell(child, parentKey) {
11706
+ toGridCell(child) {
11706
11707
  var _a, _b;
11707
11708
  const size = child.state;
11708
11709
  let x = (_a = size.x) != null ? _a : 0;
@@ -11724,10 +11725,10 @@ const _SceneGridLayout = class _SceneGridLayout extends SceneObjectBase {
11724
11725
  buildGridLayout(width, height) {
11725
11726
  let cells = [];
11726
11727
  for (const child of this.state.children) {
11727
- cells.push(this.toGridCell(child, ""));
11728
+ cells.push(this.toGridCell(child));
11728
11729
  if (child instanceof SceneGridRow && !child.state.isCollapsed) {
11729
11730
  for (const rowChild of child.state.children) {
11730
- cells.push(this.toGridCell(rowChild, child.state.key));
11731
+ cells.push(this.toGridCell(rowChild));
11731
11732
  }
11732
11733
  }
11733
11734
  }