\n
\n {canEdit && (\n
\n \n \n
\n )}\n {this.props.panel.collapsed === true && (\n /* disabling the a11y rules here as the button handles keyboard interactions */\n /* this is just to provide a better experience for mouse users */\n /* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */\n
\n \n
\n )}\n {canEdit &&
}\n
\n );\n }\n}\n","import classNames from 'classnames';\nimport React, { PureComponent, CSSProperties, useRef, useCallback, useReducer, useMemo } from 'react';\nimport ReactGridLayout, { ItemCallback } from 'react-grid-layout';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { Subscription } from 'rxjs';\n\nimport { zIndex } from '@grafana/data/src/themes/zIndex';\nimport { config } from '@grafana/runtime';\nimport { LayoutItemContext } from '@grafana/ui';\nimport appEvents from 'app/core/app_events';\nimport { GRID_CELL_HEIGHT, GRID_CELL_VMARGIN, GRID_COLUMN_COUNT } from 'app/core/constants';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { VariablesChanged } from 'app/features/variables/types';\nimport { DashboardPanelsChangedEvent } from 'app/types/events';\n\nimport { AddLibraryPanelWidget } from '../components/AddLibraryPanelWidget';\nimport { DashboardRow } from '../components/DashboardRow';\nimport { DashboardModel, PanelModel } from '../state';\nimport { GridPos } from '../state/PanelModel';\n\nimport DashboardEmpty from './DashboardEmpty';\nimport { DashboardPanel } from './DashboardPanel';\n\nexport const PANEL_FILTER_VARIABLE = 'systemPanelFilterVar';\n\nexport interface Props {\n dashboard: DashboardModel;\n isEditable: boolean;\n editPanel: PanelModel | null;\n viewPanel: PanelModel | null;\n hidePanelMenus?: boolean;\n}\n\ninterface State {\n panelFilter?: RegExp;\n}\n\nexport class DashboardGrid extends PureComponent