{"version":3,"file":"8962.0cedc4c919aff84ce58c.js","mappings":"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","sources":["webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderNotice.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderNotices.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderMenuTrigger.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderLoadingIndicator.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderMenuProvider.tsx","webpack://grafana/./public/app/features/dashboard/utils/getPanelMenu.ts","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderMenu.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderMenuWrapper.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeader.tsx","webpack://grafana/./public/app/plugins/panel/timeseries/overrides/colorSeriesConfigFactory.ts","webpack://grafana/./public/app/routes/utils.ts","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelChrome.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelChromeAngular.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/LazyLoader.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/DashboardPanel.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderCorner.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/SeriesVisibilityConfigFactory.ts","webpack://grafana/./public/app/features/dashboard/state/initDashboard.ts","webpack://grafana/./public/app/features/dashboard/state/analyticsProcessor.ts","webpack://grafana/./public/app/features/inspector/types.ts","webpack://grafana/./public/app/features/panel/state/selectors.ts"],"sourcesContent":["import React, { FC } from 'react';\nimport { QueryResultMetaNotice } from '@grafana/data';\nimport { Icon, Tooltip } from '@grafana/ui';\n\ninterface Props {\n notice: QueryResultMetaNotice;\n onClick: (e: React.SyntheticEvent, tab: string) => void;\n}\n\nexport const PanelHeaderNotice: FC = ({ notice, onClick }) => {\n const iconName =\n notice.severity === 'error' || notice.severity === 'warning' ? 'exclamation-triangle' : 'info-circle';\n\n return (\n \n {notice.inspect ? (\n
onClick(e, notice.inspect!)}>\n \n
\n ) : (\n \n \n \n )}\n
\n );\n};\n","import React, { FC, useCallback } from 'react';\nimport { DataFrame, QueryResultMetaNotice } from '@grafana/data';\nimport { PanelHeaderNotice } from './PanelHeaderNotice';\nimport { locationService } from '@grafana/runtime';\n\ninterface Props {\n panelId: number;\n frames: DataFrame[];\n}\n\nexport const PanelHeaderNotices: FC = ({ frames, panelId }) => {\n const openInspect = useCallback(\n (e: React.SyntheticEvent, tab: string) => {\n e.stopPropagation();\n locationService.partial({ inspect: panelId, inspectTab: tab });\n },\n [panelId]\n );\n\n // dedupe on severity\n const notices: Record = {};\n for (const frame of frames) {\n if (!frame.meta || !frame.meta.notices) {\n continue;\n }\n\n for (const notice of frame.meta.notices) {\n notices[notice.severity] = notice;\n }\n }\n\n return (\n <>\n {Object.values(notices).map((notice) => (\n \n ))}\n \n );\n};\n","import React, { FC, HTMLAttributes, MouseEvent, ReactElement, useCallback, useState } from 'react';\nimport { CartesianCoords2D } from '@grafana/data';\n\ninterface PanelHeaderMenuTriggerApi {\n panelMenuOpen: boolean;\n closeMenu: () => void;\n}\n\ninterface Props extends HTMLAttributes {\n children: (props: PanelHeaderMenuTriggerApi) => ReactElement;\n}\n\nexport const PanelHeaderMenuTrigger: FC = ({ children, ...divProps }) => {\n const [clickCoordinates, setClickCoordinates] = useState({ x: 0, y: 0 });\n const [panelMenuOpen, setPanelMenuOpen] = useState(false);\n const onMenuToggle = useCallback(\n (event: MouseEvent) => {\n if (!isClick(clickCoordinates, eventToClickCoordinates(event))) {\n return;\n }\n\n event.stopPropagation();\n\n setPanelMenuOpen(!panelMenuOpen);\n },\n [clickCoordinates, panelMenuOpen, setPanelMenuOpen]\n );\n const onMouseDown = useCallback(\n (event: MouseEvent) => {\n setClickCoordinates(eventToClickCoordinates(event));\n },\n [setClickCoordinates]\n );\n\n return (\n
\n {children({ panelMenuOpen, closeMenu: () => setPanelMenuOpen(false) })}\n
\n );\n};\n\nfunction isClick(current: CartesianCoords2D, clicked: CartesianCoords2D): boolean {\n return clicked.x === current.x && clicked.y === current.y;\n}\n\nfunction eventToClickCoordinates(event: MouseEvent): CartesianCoords2D {\n return {\n x: Math.floor(event.clientX),\n y: Math.floor(event.clientY),\n };\n}\n","import React, { FC } from 'react';\nimport { css } from '@emotion/css';\nimport { GrafanaTheme, LoadingState } from '@grafana/data';\nimport { Icon, Tooltip, useStyles } from '@grafana/ui';\n\ninterface Props {\n state: LoadingState;\n onClick: () => void;\n}\n\nexport const PanelHeaderLoadingIndicator: FC = ({ state, onClick }) => {\n const styles = useStyles(getStyles);\n\n if (state === LoadingState.Loading) {\n return (\n
\n \n \n \n
\n );\n }\n\n if (state === LoadingState.Streaming) {\n return (\n
\n
\n
\n );\n }\n\n return null;\n};\n\nfunction getStyles(theme: GrafanaTheme) {\n return {\n streamIndicator: css`\n width: 10px;\n height: 10px;\n background: ${theme.colors.textFaint};\n box-shadow: 0 0 2px ${theme.colors.textFaint};\n border-radius: 50%;\n position: relative;\n top: 6px;\n right: 1px;\n `,\n };\n}\n","import { FC, ReactElement, useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { PanelMenuItem } from '@grafana/data';\n\nimport { DashboardModel, PanelModel } from '../../state';\nimport { StoreState } from '../../../../types';\nimport { getPanelMenu } from '../../utils/getPanelMenu';\nimport { getPanelStateForModel } from 'app/features/panel/state/selectors';\n\ninterface PanelHeaderMenuProviderApi {\n items: PanelMenuItem[];\n}\n\ninterface Props {\n panel: PanelModel;\n dashboard: DashboardModel;\n children: (props: PanelHeaderMenuProviderApi) => ReactElement;\n}\n\nexport const PanelHeaderMenuProvider: FC = ({ panel, dashboard, children }) => {\n const [items, setItems] = useState([]);\n const angularComponent = useSelector((state: StoreState) => getPanelStateForModel(state, panel)?.angularComponent);\n\n useEffect(() => {\n setItems(getPanelMenu(dashboard, panel, angularComponent));\n }, [dashboard, panel, angularComponent, setItems]);\n\n return children({ items });\n};\n","import { store } from 'app/store/store';\nimport { AngularComponent, getDataSourceSrv, locationService } from '@grafana/runtime';\nimport { PanelMenuItem } from '@grafana/data';\nimport {\n addLibraryPanel,\n copyPanel,\n duplicatePanel,\n removePanel,\n sharePanel,\n unlinkLibraryPanel,\n} from 'app/features/dashboard/utils/panel';\nimport { isPanelModelLibraryPanel } from 'app/features/library-panels/guard';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { contextSrv } from '../../../core/services/context_srv';\nimport { navigateToExplore } from '../../explore/state/main';\nimport { getExploreUrl } from '../../../core/utils/explore';\nimport { getTimeSrv } from '../services/TimeSrv';\nimport { PanelCtrl } from 'app/angular/panel/panel_ctrl';\nimport config from 'app/core/config';\n\nexport function getPanelMenu(\n dashboard: DashboardModel,\n panel: PanelModel,\n angularComponent?: AngularComponent | null\n): PanelMenuItem[] {\n const onViewPanel = (event: React.MouseEvent) => {\n event.preventDefault();\n locationService.partial({\n viewPanel: panel.id,\n });\n };\n\n const onEditPanel = (event: React.MouseEvent) => {\n event.preventDefault();\n locationService.partial({\n editPanel: panel.id,\n });\n };\n\n const onSharePanel = (event: React.MouseEvent) => {\n event.preventDefault();\n sharePanel(dashboard, panel);\n };\n\n const onAddLibraryPanel = (event: React.MouseEvent) => {\n event.preventDefault();\n addLibraryPanel(dashboard, panel);\n };\n\n const onUnlinkLibraryPanel = (event: React.MouseEvent) => {\n event.preventDefault();\n unlinkLibraryPanel(panel);\n };\n\n const onInspectPanel = (tab?: string) => {\n locationService.partial({\n inspect: panel.id,\n inspectTab: tab,\n });\n };\n\n const onMore = (event: React.MouseEvent) => {\n event.preventDefault();\n };\n\n const onDuplicatePanel = (event: React.MouseEvent) => {\n event.preventDefault();\n duplicatePanel(dashboard, panel);\n };\n\n const onCopyPanel = (event: React.MouseEvent) => {\n event.preventDefault();\n copyPanel(panel);\n };\n\n const onRemovePanel = (event: React.MouseEvent) => {\n event.preventDefault();\n removePanel(dashboard, panel, true);\n };\n\n const onNavigateToExplore = (event: React.MouseEvent) => {\n event.preventDefault();\n const openInNewWindow =\n event.ctrlKey || event.metaKey ? (url: string) => window.open(`${config.appSubUrl}${url}`) : undefined;\n store.dispatch(navigateToExplore(panel, { getDataSourceSrv, getTimeSrv, getExploreUrl, openInNewWindow }) as any);\n };\n\n const menu: PanelMenuItem[] = [];\n\n if (!panel.isEditing) {\n menu.push({\n text: 'View',\n iconClassName: 'eye',\n onClick: onViewPanel,\n shortcut: 'v',\n });\n }\n\n if (dashboard.canEditPanel(panel) && !panel.isEditing) {\n menu.push({\n text: 'Edit',\n iconClassName: 'edit',\n onClick: onEditPanel,\n shortcut: 'e',\n });\n }\n\n menu.push({\n text: 'Share',\n iconClassName: 'share-alt',\n onClick: onSharePanel,\n shortcut: 'p s',\n });\n\n if (contextSrv.hasAccessToExplore() && !(panel.plugin && panel.plugin.meta.skipDataQuery)) {\n menu.push({\n text: 'Explore',\n iconClassName: 'compass',\n shortcut: 'x',\n onClick: onNavigateToExplore,\n });\n }\n\n const inspectMenu: PanelMenuItem[] = [];\n\n // Only show these inspect actions for data plugins\n if (panel.plugin && !panel.plugin.meta.skipDataQuery) {\n inspectMenu.push({\n text: 'Data',\n onClick: (e: React.MouseEvent) => onInspectPanel('data'),\n });\n\n if (dashboard.meta.canEdit) {\n inspectMenu.push({\n text: 'Query',\n onClick: (e: React.MouseEvent) => onInspectPanel('query'),\n });\n }\n }\n\n inspectMenu.push({\n text: 'Panel JSON',\n onClick: (e: React.MouseEvent) => onInspectPanel('json'),\n });\n\n menu.push({\n type: 'submenu',\n text: 'Inspect',\n iconClassName: 'info-circle',\n onClick: (e: React.MouseEvent) => onInspectPanel(),\n shortcut: 'i',\n subMenu: inspectMenu,\n });\n\n const subMenu: PanelMenuItem[] = [];\n\n if (dashboard.canEditPanel(panel) && !(panel.isViewing || panel.isEditing)) {\n subMenu.push({\n text: 'Duplicate',\n onClick: onDuplicatePanel,\n shortcut: 'p d',\n });\n\n subMenu.push({\n text: 'Copy',\n onClick: onCopyPanel,\n });\n\n if (isPanelModelLibraryPanel(panel)) {\n subMenu.push({\n text: 'Unlink library panel',\n onClick: onUnlinkLibraryPanel,\n });\n } else {\n subMenu.push({\n text: 'Create library panel',\n onClick: onAddLibraryPanel,\n });\n }\n }\n\n // add old angular panel options\n if (angularComponent) {\n const scope = angularComponent.getScope();\n const panelCtrl: PanelCtrl = scope.$$childHead.ctrl;\n const angularMenuItems = panelCtrl.getExtendedMenu();\n\n for (const item of angularMenuItems) {\n const reactItem: PanelMenuItem = {\n text: item.text,\n href: item.href,\n shortcut: item.shortcut,\n };\n\n if (item.click) {\n reactItem.onClick = () => {\n scope.$eval(item.click, { ctrl: panelCtrl });\n };\n }\n\n subMenu.push(reactItem);\n }\n }\n\n if (!panel.isEditing && subMenu.length) {\n menu.push({\n type: 'submenu',\n text: 'More...',\n iconClassName: 'cube',\n subMenu,\n onClick: onMore,\n });\n }\n\n if (dashboard.canEditPanel(panel) && !panel.isEditing && !panel.isViewing) {\n menu.push({ type: 'divider', text: '' });\n\n menu.push({\n text: 'Remove',\n iconClassName: 'trash-alt',\n onClick: onRemovePanel,\n shortcut: 'p r',\n });\n }\n\n return menu;\n}\n","import React, { PureComponent } from 'react';\nimport { PanelHeaderMenuItem } from './PanelHeaderMenuItem';\nimport { PanelMenuItem } from '@grafana/data';\n\nexport interface Props {\n items: PanelMenuItem[];\n}\n\nexport class PanelHeaderMenu extends PureComponent {\n renderItems = (menu: PanelMenuItem[], isSubMenu = false) => {\n return (\n
    \n {menu.map((menuItem, idx: number) => {\n return (\n \n {menuItem.subMenu && this.renderItems(menuItem.subMenu, true)}\n \n );\n })}\n
\n );\n };\n\n render() {\n return
{this.renderItems(this.props.items)}
;\n }\n}\n","import React, { FC } from 'react';\nimport { ClickOutsideWrapper } from '@grafana/ui';\nimport { PanelHeaderMenuProvider } from './PanelHeaderMenuProvider';\nimport { PanelHeaderMenu } from './PanelHeaderMenu';\nimport { DashboardModel, PanelModel } from '../../state';\n\ninterface Props {\n panel: PanelModel;\n dashboard: DashboardModel;\n show: boolean;\n onClose: () => void;\n}\n\nexport const PanelHeaderMenuWrapper: FC = ({ show, onClose, panel, dashboard }) => {\n if (!show) {\n return null;\n }\n\n return (\n \n \n {({ items }) => {\n return ;\n }}\n \n \n );\n};\n","import React, { FC } from 'react';\nimport { css, cx } from '@emotion/css';\nimport { DataLink, GrafanaTheme2, PanelData } from '@grafana/data';\nimport { Icon, useStyles2 } from '@grafana/ui';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport PanelHeaderCorner from './PanelHeaderCorner';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { getPanelLinksSupplier } from 'app/features/panel/panellinks/linkSuppliers';\nimport { PanelHeaderNotices } from './PanelHeaderNotices';\nimport { PanelHeaderMenuTrigger } from './PanelHeaderMenuTrigger';\nimport { PanelHeaderLoadingIndicator } from './PanelHeaderLoadingIndicator';\nimport { PanelHeaderMenuWrapper } from './PanelHeaderMenuWrapper';\n\nexport interface Props {\n panel: PanelModel;\n dashboard: DashboardModel;\n title?: string;\n description?: string;\n links?: DataLink[];\n error?: string;\n alertState?: string;\n isViewing: boolean;\n isEditing: boolean;\n data: PanelData;\n}\n\nexport const PanelHeader: FC = ({ panel, error, isViewing, isEditing, data, alertState, dashboard }) => {\n const onCancelQuery = () => panel.getQueryRunner().cancelQuery();\n const title = panel.getDisplayTitle();\n const className = cx('panel-header', !(isViewing || isEditing) ? 'grid-drag-handle' : '');\n const styles = useStyles2(panelStyles);\n\n return (\n <>\n \n \n
\n \n {({ closeMenu, panelMenuOpen }) => {\n return (\n
\n \n {alertState ? (\n \n ) : null}\n

{title}

\n \n \n {data.request && data.request.timeInfo && (\n \n {data.request.timeInfo}\n \n )}\n
\n );\n }}\n
\n
\n \n );\n};\n\nconst panelStyles = (theme: GrafanaTheme2) => {\n return {\n titleText: css`\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: calc(100% - 38px);\n cursor: pointer;\n font-weight: ${theme.typography.fontWeightMedium};\n font-size: ${theme.typography.body.fontSize};\n margin: 0;\n\n &:hover {\n color: ${theme.colors.text.primary};\n }\n .panel-has-alert & {\n max-width: calc(100% - 54px);\n }\n `,\n };\n};\n","import {\n ConfigOverrideRule,\n DynamicConfigValue,\n FieldColorModeId,\n FieldConfigSource,\n FieldMatcherID,\n} from '@grafana/data';\n\nexport const changeSeriesColorConfigFactory = (\n label: string,\n color: string,\n fieldConfig: FieldConfigSource\n): FieldConfigSource => {\n const { overrides } = fieldConfig;\n const currentIndex = fieldConfig.overrides.findIndex((override) => {\n return override.matcher.id === FieldMatcherID.byName && override.matcher.options === label;\n });\n\n if (currentIndex < 0) {\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, createOverride(label, color)],\n };\n }\n\n const overridesCopy = Array.from(overrides);\n const existing = overridesCopy[currentIndex];\n const propertyIndex = existing.properties.findIndex((p) => p.id === 'color');\n\n if (propertyIndex < 0) {\n overridesCopy[currentIndex] = {\n ...existing,\n properties: [...existing.properties, createProperty(color)],\n };\n\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n const propertiesCopy = Array.from(existing.properties);\n propertiesCopy[propertyIndex] = createProperty(color);\n\n overridesCopy[currentIndex] = {\n ...existing,\n properties: propertiesCopy,\n };\n\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n};\n\nconst createOverride = (label: string, color: string): ConfigOverrideRule => {\n return {\n matcher: {\n id: FieldMatcherID.byName,\n options: label,\n },\n properties: [createProperty(color)],\n };\n};\n\nconst createProperty = (color: string): DynamicConfigValue => {\n return {\n id: 'color',\n value: {\n mode: FieldColorModeId.Fixed,\n fixedColor: color,\n },\n };\n};\n","export function isSoloRoute(path: string): boolean {\n return /(d-solo|dashboard-solo)/.test(path?.toLowerCase());\n}\n","import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { Subscription } from 'rxjs';\nimport { locationService, RefreshEvent } from '@grafana/runtime';\nimport {\n AbsoluteTimeRange,\n AnnotationChangeEvent,\n AnnotationEventUIModel,\n CoreApp,\n DashboardCursorSync,\n EventFilterOptions,\n FieldConfigSource,\n getDefaultTimeRange,\n LoadingState,\n PanelData,\n PanelPlugin,\n PanelPluginMeta,\n TimeRange,\n toDataFrameDTO,\n toUtc,\n} from '@grafana/data';\nimport { ErrorBoundary, PanelContext, PanelContextProvider, SeriesVisibilityChangeMode } from '@grafana/ui';\nimport { VizLegendOptions } from '@grafana/schema';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { PanelHeader } from './PanelHeader/PanelHeader';\nimport { getTimeSrv, TimeSrv } from '../services/TimeSrv';\nimport { applyPanelTimeOverrides } from 'app/features/dashboard/utils/panel';\nimport { profiler } from 'app/core/profiler';\nimport config from 'app/core/config';\nimport { DashboardModel, PanelModel } from '../state';\nimport { PANEL_BORDER } from 'app/core/constants';\nimport { loadSnapshotData } from '../utils/loadSnapshotData';\nimport { RenderEvent } from 'app/types/events';\nimport { changeSeriesColorConfigFactory } from 'app/plugins/panel/timeseries/overrides/colorSeriesConfigFactory';\nimport { seriesVisibilityConfigFactory } from './SeriesVisibilityConfigFactory';\nimport { deleteAnnotation, saveAnnotation, updateAnnotation } from '../../annotations/api';\nimport { getDashboardQueryRunner } from '../../query/state/DashboardQueryRunner/DashboardQueryRunner';\nimport { liveTimer } from './liveTimer';\nimport { isSoloRoute } from '../../../routes/utils';\n\nconst DEFAULT_PLUGIN_ERROR = 'Error in plugin';\n\nexport interface Props {\n panel: PanelModel;\n dashboard: DashboardModel;\n plugin: PanelPlugin;\n isViewing: boolean;\n isEditing: boolean;\n isInView: boolean;\n width: number;\n height: number;\n onInstanceStateChange: (value: any) => void;\n}\n\nexport interface State {\n isFirstLoad: boolean;\n renderCounter: number;\n errorMessage?: string;\n refreshWhenInView: boolean;\n context: PanelContext;\n data: PanelData;\n liveTime?: TimeRange;\n}\n\nexport class PanelChrome extends PureComponent {\n private readonly timeSrv: TimeSrv = getTimeSrv();\n private subs = new Subscription();\n private eventFilter: EventFilterOptions = { onlyLocal: true };\n\n constructor(props: Props) {\n super(props);\n\n // Can this eventBus be on PanelModel? when we have more complex event filtering, that may be a better option\n const eventBus = props.dashboard.events.newScopedBus(`panel:${props.panel.id}`, this.eventFilter);\n\n this.state = {\n isFirstLoad: true,\n renderCounter: 0,\n refreshWhenInView: false,\n context: {\n eventBus,\n app: this.getPanelContextApp(),\n sync: this.getSync,\n onSeriesColorChange: this.onSeriesColorChange,\n onToggleSeriesVisibility: this.onSeriesVisibilityChange,\n onAnnotationCreate: this.onAnnotationCreate,\n onAnnotationUpdate: this.onAnnotationUpdate,\n onAnnotationDelete: this.onAnnotationDelete,\n canAddAnnotations: () => Boolean(props.dashboard.meta.canEdit || props.dashboard.meta.canMakeEditable),\n onInstanceStateChange: this.onInstanceStateChange,\n onToggleLegendSort: this.onToggleLegendSort,\n },\n data: this.getInitialPanelDataState(),\n };\n }\n\n // Due to a mutable panel model we get the sync settings via function that proactively reads from the model\n getSync = () => (this.props.isEditing ? DashboardCursorSync.Off : this.props.dashboard.graphTooltip);\n\n onInstanceStateChange = (value: any) => {\n this.props.onInstanceStateChange(value);\n\n this.setState({\n context: {\n ...this.state.context,\n instanceState: value,\n },\n });\n };\n\n getPanelContextApp() {\n if (this.props.isEditing) {\n return CoreApp.PanelEditor;\n }\n if (this.props.isViewing) {\n return CoreApp.PanelViewer;\n }\n\n return CoreApp.Dashboard;\n }\n\n onSeriesColorChange = (label: string, color: string) => {\n this.onFieldConfigChange(changeSeriesColorConfigFactory(label, color, this.props.panel.fieldConfig));\n };\n\n onSeriesVisibilityChange = (label: string, mode: SeriesVisibilityChangeMode) => {\n this.onFieldConfigChange(\n seriesVisibilityConfigFactory(label, mode, this.props.panel.fieldConfig, this.state.data.series)\n );\n };\n\n onToggleLegendSort = (sortKey: string) => {\n const legendOptions: VizLegendOptions = this.props.panel.options.legend;\n\n // We don't want to do anything when legend options are not available\n if (!legendOptions) {\n return;\n }\n\n let sortDesc = legendOptions.sortDesc;\n let sortBy = legendOptions.sortBy;\n if (sortKey !== sortBy) {\n sortDesc = undefined;\n }\n\n // if already sort ascending, disable sorting\n if (sortDesc === false) {\n sortBy = undefined;\n sortDesc = undefined;\n } else {\n sortDesc = !sortDesc;\n sortBy = sortKey;\n }\n\n this.onOptionsChange({\n ...this.props.panel.options,\n legend: { ...legendOptions, sortBy, sortDesc },\n });\n };\n\n getInitialPanelDataState(): PanelData {\n return {\n state: LoadingState.NotStarted,\n series: [],\n timeRange: getDefaultTimeRange(),\n };\n }\n\n componentDidMount() {\n const { panel, dashboard } = this.props;\n\n // Subscribe to panel events\n this.subs.add(panel.events.subscribe(RefreshEvent, this.onRefresh));\n this.subs.add(panel.events.subscribe(RenderEvent, this.onRender));\n\n dashboard.panelInitialized(this.props.panel);\n\n // Move snapshot data into the query response\n if (this.hasPanelSnapshot) {\n this.setState({\n data: loadSnapshotData(panel, dashboard),\n isFirstLoad: false,\n });\n return;\n }\n\n if (!this.wantsQueryExecution) {\n this.setState({ isFirstLoad: false });\n }\n\n this.subs.add(\n panel\n .getQueryRunner()\n .getData({ withTransforms: true, withFieldConfig: true })\n .subscribe({\n next: (data) => this.onDataUpdate(data),\n })\n );\n\n // Listen for live timer events\n liveTimer.listen(this);\n }\n\n componentWillUnmount() {\n this.subs.unsubscribe();\n liveTimer.remove(this);\n }\n\n liveTimeChanged(liveTime: TimeRange) {\n const { data } = this.state;\n if (data.timeRange) {\n const delta = liveTime.to.valueOf() - data.timeRange.to.valueOf();\n if (delta < 100) {\n // 10hz\n console.log('Skip tick render', this.props.panel.title, delta);\n return;\n }\n }\n this.setState({ liveTime });\n }\n\n componentDidUpdate(prevProps: Props) {\n const { isInView, width } = this.props;\n const { context } = this.state;\n\n const app = this.getPanelContextApp();\n\n if (context.app !== app) {\n this.setState({\n context: {\n ...context,\n app,\n },\n });\n }\n\n // View state has changed\n if (isInView !== prevProps.isInView) {\n if (isInView) {\n // Check if we need a delayed refresh\n if (this.state.refreshWhenInView) {\n this.onRefresh();\n }\n }\n }\n\n // The timer depends on panel width\n if (width !== prevProps.width) {\n liveTimer.updateInterval(this);\n }\n }\n\n // Updates the response with information from the stream\n // The next is outside a react synthetic event so setState is not batched\n // So in this context we can only do a single call to setState\n onDataUpdate(data: PanelData) {\n const { dashboard, panel, plugin } = this.props;\n\n // Ignore this data update if we are now a non data panel\n if (plugin.meta.skipDataQuery) {\n this.setState({ data: this.getInitialPanelDataState() });\n return;\n }\n\n let { isFirstLoad } = this.state;\n let errorMessage: string | undefined;\n\n switch (data.state) {\n case LoadingState.Loading:\n // Skip updating state data if it is already in loading state\n // This is to avoid rendering partial loading responses\n if (this.state.data.state === LoadingState.Loading) {\n return;\n }\n break;\n case LoadingState.Error:\n const { error } = data;\n if (error) {\n if (errorMessage !== error.message) {\n errorMessage = error.message;\n }\n }\n break;\n case LoadingState.Done:\n // If we are doing a snapshot save data in panel model\n if (dashboard.snapshot) {\n panel.snapshotData = data.series.map((frame) => toDataFrameDTO(frame));\n }\n if (isFirstLoad) {\n isFirstLoad = false;\n }\n break;\n }\n\n this.setState({ isFirstLoad, errorMessage, data, liveTime: undefined });\n }\n\n onRefresh = () => {\n const { panel, isInView, width } = this.props;\n\n if (!isInView) {\n this.setState({ refreshWhenInView: true });\n return;\n }\n\n const timeData = applyPanelTimeOverrides(panel, this.timeSrv.timeRange());\n\n // Issue Query\n if (this.wantsQueryExecution) {\n if (width < 0) {\n return;\n }\n\n if (this.state.refreshWhenInView) {\n this.setState({ refreshWhenInView: false });\n }\n panel.runAllPanelQueries(this.props.dashboard.id, this.props.dashboard.getTimezone(), timeData, width);\n } else {\n // The panel should render on refresh as well if it doesn't have a query, like clock panel\n this.setState({\n data: { ...this.state.data, timeRange: this.timeSrv.timeRange() },\n renderCounter: this.state.renderCounter + 1,\n liveTime: undefined,\n });\n }\n };\n\n onRender = () => {\n const stateUpdate = { renderCounter: this.state.renderCounter + 1 };\n this.setState(stateUpdate);\n };\n\n onOptionsChange = (options: any) => {\n this.props.panel.updateOptions(options);\n };\n\n onFieldConfigChange = (config: FieldConfigSource) => {\n this.props.panel.updateFieldConfig(config);\n };\n\n onPanelError = (error: Error) => {\n const errorMessage = error.message || DEFAULT_PLUGIN_ERROR;\n if (this.state.errorMessage !== errorMessage) {\n this.setState({ errorMessage });\n }\n };\n\n onPanelErrorRecover = () => {\n this.setState({ errorMessage: undefined });\n };\n\n onAnnotationCreate = async (event: AnnotationEventUIModel) => {\n const isRegion = event.from !== event.to;\n const anno = {\n dashboardId: this.props.dashboard.id,\n panelId: this.props.panel.id,\n isRegion,\n time: event.from,\n timeEnd: isRegion ? event.to : 0,\n tags: event.tags,\n text: event.description,\n };\n await saveAnnotation(anno);\n getDashboardQueryRunner().run({ dashboard: this.props.dashboard, range: this.timeSrv.timeRange() });\n this.state.context.eventBus.publish(new AnnotationChangeEvent(anno));\n };\n\n onAnnotationDelete = async (id: string) => {\n await deleteAnnotation({ id });\n getDashboardQueryRunner().run({ dashboard: this.props.dashboard, range: this.timeSrv.timeRange() });\n this.state.context.eventBus.publish(new AnnotationChangeEvent({ id }));\n };\n\n onAnnotationUpdate = async (event: AnnotationEventUIModel) => {\n const isRegion = event.from !== event.to;\n const anno = {\n id: event.id,\n dashboardId: this.props.dashboard.id,\n panelId: this.props.panel.id,\n isRegion,\n time: event.from,\n timeEnd: isRegion ? event.to : 0,\n tags: event.tags,\n text: event.description,\n };\n await updateAnnotation(anno);\n\n getDashboardQueryRunner().run({ dashboard: this.props.dashboard, range: this.timeSrv.timeRange() });\n this.state.context.eventBus.publish(new AnnotationChangeEvent(anno));\n };\n\n get hasPanelSnapshot() {\n const { panel } = this.props;\n return panel.snapshotData && panel.snapshotData.length;\n }\n\n get wantsQueryExecution() {\n return !(this.props.plugin.meta.skipDataQuery || this.hasPanelSnapshot);\n }\n\n onChangeTimeRange = (timeRange: AbsoluteTimeRange) => {\n this.timeSrv.setTime({\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n });\n };\n\n shouldSignalRenderingCompleted(loadingState: LoadingState, pluginMeta: PanelPluginMeta) {\n return loadingState === LoadingState.Done || pluginMeta.skipDataQuery;\n }\n\n skipFirstRender(loadingState: LoadingState) {\n const { isFirstLoad } = this.state;\n return (\n this.wantsQueryExecution &&\n isFirstLoad &&\n (loadingState === LoadingState.Loading || loadingState === LoadingState.NotStarted)\n );\n }\n\n renderPanel(width: number, height: number) {\n const { panel, plugin, dashboard } = this.props;\n const { renderCounter, data } = this.state;\n const { theme } = config;\n const { state: loadingState } = data;\n\n // do not render component until we have first data\n if (this.skipFirstRender(loadingState)) {\n return null;\n }\n\n // This is only done to increase a counter that is used by backend\n // image rendering to know when to capture image\n if (this.shouldSignalRenderingCompleted(loadingState, plugin.meta)) {\n profiler.renderingCompleted();\n }\n\n const PanelComponent = plugin.panel!;\n const timeRange = this.state.liveTime ?? data.timeRange ?? this.timeSrv.timeRange();\n const headerHeight = this.hasOverlayHeader() ? 0 : theme.panelHeaderHeight;\n const chromePadding = plugin.noPadding ? 0 : theme.panelPadding;\n const panelWidth = width - chromePadding * 2 - PANEL_BORDER;\n const innerPanelHeight = height - headerHeight - chromePadding * 2 - PANEL_BORDER;\n const panelContentClassNames = classNames({\n 'panel-content': true,\n 'panel-content--no-padding': plugin.noPadding,\n });\n const panelOptions = panel.getOptions();\n\n // Update the event filter (dashboard settings may have changed)\n // Yes this is called ever render for a function that is triggered on every mouse move\n this.eventFilter.onlyLocal = dashboard.graphTooltip === 0;\n\n return (\n <>\n
\n \n \n \n
\n \n );\n }\n\n hasOverlayHeader() {\n const { panel } = this.props;\n const { data } = this.state;\n\n // always show normal header if we have time override\n if (data.request && data.request.timeInfo) {\n return false;\n }\n\n return !panel.hasTitle();\n }\n\n render() {\n const { dashboard, panel, isViewing, isEditing, width, height, plugin } = this.props;\n const { errorMessage, data } = this.state;\n const { transparent } = panel;\n\n const alertState = data.alertState?.state;\n\n const containerClassNames = classNames({\n 'panel-container': true,\n 'panel-container--absolute': isSoloRoute(locationService.getLocation().pathname),\n 'panel-container--transparent': transparent,\n 'panel-container--no-title': this.hasOverlayHeader(),\n [`panel-alert-state--${alertState}`]: alertState !== undefined,\n });\n\n return (\n \n \n \n {({ error }) => {\n if (error) {\n return null;\n }\n return this.renderPanel(width, height);\n }}\n \n \n );\n }\n}\n","import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { Subscription } from 'rxjs';\nimport { connect, MapDispatchToProps, MapStateToProps } from 'react-redux';\nimport { AngularComponent, getAngularLoader, locationService } from '@grafana/runtime';\nimport { getDefaultTimeRange, LoadingState, PanelData, PanelPlugin } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { PanelHeader } from './PanelHeader/PanelHeader';\nimport { getTimeSrv, TimeSrv } from '../services/TimeSrv';\nimport { setPanelAngularComponent } from 'app/features/panel/state/reducers';\nimport config from 'app/core/config';\nimport { DashboardModel, PanelModel } from '../state';\nimport { StoreState } from 'app/types';\nimport { PANEL_BORDER } from 'app/core/constants';\nimport { isSoloRoute } from '../../../routes/utils';\nimport { getPanelStateForModel } from 'app/features/panel/state/selectors';\n\ninterface OwnProps {\n panel: PanelModel;\n dashboard: DashboardModel;\n plugin: PanelPlugin;\n isViewing: boolean;\n isEditing: boolean;\n isInView: boolean;\n width: number;\n height: number;\n}\n\ninterface ConnectedProps {\n angularComponent?: AngularComponent;\n}\n\ninterface DispatchProps {\n setPanelAngularComponent: typeof setPanelAngularComponent;\n}\n\nexport type Props = OwnProps & ConnectedProps & DispatchProps;\n\nexport interface State {\n data: PanelData;\n errorMessage?: string;\n}\n\ninterface AngularScopeProps {\n panel: PanelModel;\n dashboard: DashboardModel;\n size: {\n height: number;\n width: number;\n };\n}\n\nexport class PanelChromeAngularUnconnected extends PureComponent {\n element: HTMLElement | null = null;\n timeSrv: TimeSrv = getTimeSrv();\n scopeProps?: AngularScopeProps;\n subs = new Subscription();\n\n constructor(props: Props) {\n super(props);\n this.state = {\n data: {\n state: LoadingState.NotStarted,\n series: [],\n timeRange: getDefaultTimeRange(),\n },\n };\n }\n\n componentDidMount() {\n const { panel } = this.props;\n this.loadAngularPanel();\n\n // subscribe to data events\n const queryRunner = panel.getQueryRunner();\n\n // we are not displaying any of this data so no need for transforms or field config\n this.subs.add(\n queryRunner.getData({ withTransforms: false, withFieldConfig: false }).subscribe({\n next: (data: PanelData) => this.onPanelDataUpdate(data),\n })\n );\n }\n\n onPanelDataUpdate(data: PanelData) {\n let errorMessage: string | undefined;\n\n if (data.state === LoadingState.Error) {\n const { error } = data;\n if (error) {\n if (errorMessage !== error.message) {\n errorMessage = error.message;\n }\n }\n }\n\n this.setState({ data, errorMessage });\n }\n\n componentWillUnmount() {\n this.subs.unsubscribe();\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n const { plugin, height, width, panel } = this.props;\n\n if (prevProps.plugin !== plugin) {\n this.loadAngularPanel();\n }\n\n if (prevProps.width !== width || prevProps.height !== height) {\n if (this.scopeProps) {\n this.scopeProps.size.height = this.getInnerPanelHeight();\n this.scopeProps.size.width = this.getInnerPanelWidth();\n panel.render();\n }\n }\n }\n\n getInnerPanelHeight() {\n const { plugin, height } = this.props;\n const { theme } = config;\n\n const headerHeight = this.hasOverlayHeader() ? 0 : theme.panelHeaderHeight;\n const chromePadding = plugin.noPadding ? 0 : theme.panelPadding;\n return height - headerHeight - chromePadding * 2 - PANEL_BORDER;\n }\n\n getInnerPanelWidth() {\n const { plugin, width } = this.props;\n const { theme } = config;\n\n const chromePadding = plugin.noPadding ? 0 : theme.panelPadding;\n return width - chromePadding * 2 - PANEL_BORDER;\n }\n\n loadAngularPanel() {\n const { panel, dashboard, setPanelAngularComponent } = this.props;\n\n // if we have no element or already have loaded the panel return\n if (!this.element) {\n return;\n }\n\n const loader = getAngularLoader();\n const template = '';\n\n this.scopeProps = {\n panel: panel,\n dashboard: dashboard,\n size: { width: this.getInnerPanelWidth(), height: this.getInnerPanelHeight() },\n };\n\n setPanelAngularComponent({\n key: panel.key,\n angularComponent: loader.load(this.element, this.scopeProps, template),\n });\n }\n\n hasOverlayHeader() {\n const { panel } = this.props;\n const { data } = this.state;\n\n // always show normal header if we have time override\n if (data.request && data.request.timeInfo) {\n return false;\n }\n\n return !panel.hasTitle();\n }\n\n render() {\n const { dashboard, panel, isViewing, isEditing, plugin } = this.props;\n const { errorMessage, data } = this.state;\n const { transparent } = panel;\n\n const alertState = data.alertState?.state;\n\n const containerClassNames = classNames({\n 'panel-container': true,\n 'panel-container--absolute': isSoloRoute(locationService.getLocation().pathname),\n 'panel-container--transparent': transparent,\n 'panel-container--no-title': this.hasOverlayHeader(),\n 'panel-has-alert': panel.alert !== undefined,\n [`panel-alert-state--${alertState}`]: alertState !== undefined,\n });\n\n const panelContentClassNames = classNames({\n 'panel-content': true,\n 'panel-content--no-padding': plugin.noPadding,\n });\n\n return (\n
\n \n
\n
(this.element = element)} className=\"panel-height-helper\" />\n
\n
\n );\n }\n}\n\nconst mapStateToProps: MapStateToProps = (state, props) => {\n return {\n angularComponent: getPanelStateForModel(state, props.panel)?.angularComponent,\n };\n};\n\nconst mapDispatchToProps: MapDispatchToProps = { setPanelAngularComponent };\n\nexport const PanelChromeAngular = connect(mapStateToProps, mapDispatchToProps)(PanelChromeAngularUnconnected);\n","import React, { useRef, useState } from 'react';\nimport { useUniqueId } from 'app/plugins/datasource/influxdb/components/useUniqueId';\nimport { useEffectOnce } from 'react-use';\n\nexport interface Props {\n children: React.ReactNode | (({ isInView }: { isInView: boolean }) => React.ReactNode);\n width?: number;\n height?: number;\n onLoad?: () => void;\n onChange?: (isInView: boolean) => void;\n}\n\nexport function LazyLoader({ children, width, height, onLoad, onChange }: Props) {\n const id = useUniqueId();\n const [loaded, setLoaded] = useState(false);\n const [isInView, setIsInView] = useState(false);\n const wrapperRef = useRef(null);\n\n useEffectOnce(() => {\n LazyLoader.addCallback(id, (entry) => {\n if (!loaded && entry.isIntersecting) {\n setLoaded(true);\n onLoad?.();\n }\n\n setIsInView(entry.isIntersecting);\n onChange?.(entry.isIntersecting);\n });\n\n const wrapperEl = wrapperRef.current;\n\n if (wrapperEl) {\n LazyLoader.observer.observe(wrapperEl);\n }\n\n return () => {\n delete LazyLoader.callbacks[id];\n wrapperEl && LazyLoader.observer.unobserve(wrapperEl);\n if (Object.keys(LazyLoader.callbacks).length === 0) {\n LazyLoader.observer.disconnect();\n }\n };\n });\n\n return (\n
\n {loaded && (typeof children === 'function' ? children({ isInView }) : children)}\n
\n );\n}\n\nLazyLoader.callbacks = {} as Record void>;\nLazyLoader.addCallback = (id: string, c: (e: IntersectionObserverEntry) => void) => (LazyLoader.callbacks[id] = c);\nLazyLoader.observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n LazyLoader.callbacks[entry.target.id](entry);\n }\n },\n { rootMargin: '100px' }\n);\n","import React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { PanelChrome } from './PanelChrome';\nimport { PanelChromeAngular } from './PanelChromeAngular';\nimport { DashboardModel, PanelModel } from '../state';\nimport { StoreState } from 'app/types';\nimport { PanelPlugin } from '@grafana/data';\nimport { cleanUpPanelState, setPanelInstanceState } from '../../panel/state/reducers';\nimport { initPanelState } from '../../panel/state/actions';\nimport { LazyLoader } from './LazyLoader';\n\nexport interface OwnProps {\n panel: PanelModel;\n stateKey: string;\n dashboard: DashboardModel;\n isEditing: boolean;\n isViewing: boolean;\n width: number;\n height: number;\n skipStateCleanUp?: boolean;\n lazy?: boolean;\n}\n\nconst mapStateToProps = (state: StoreState, props: OwnProps) => {\n const panelState = state.panels[props.stateKey];\n if (!panelState) {\n return { plugin: null };\n }\n\n return {\n plugin: panelState.plugin,\n instanceState: panelState.instanceState,\n };\n};\n\nconst mapDispatchToProps = {\n initPanelState,\n cleanUpPanelState,\n setPanelInstanceState,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport type Props = OwnProps & ConnectedProps;\n\nexport class DashboardPanelUnconnected extends PureComponent {\n static defaultProps: Partial = {\n lazy: true,\n };\n\n specialPanels: { [key: string]: Function } = {};\n\n componentDidMount() {\n this.props.panel.isInView = !this.props.lazy;\n if (!this.props.plugin) {\n this.props.initPanelState(this.props.panel);\n }\n }\n\n componentWillUnmount() {\n // Most of the time an unmount should result in cleanup but in PanelEdit it should not\n if (!this.props.skipStateCleanUp) {\n this.props.cleanUpPanelState({ key: this.props.stateKey });\n }\n }\n\n onInstanceStateChange = (value: any) => {\n this.props.setPanelInstanceState({ key: this.props.stateKey, value });\n };\n\n onVisibilityChange = (v: boolean) => {\n this.props.panel.isInView = v;\n };\n\n renderPanel(plugin: PanelPlugin) {\n const { dashboard, panel, isViewing, isEditing, width, height, lazy } = this.props;\n\n const renderPanelChrome = (isInView: boolean) =>\n plugin.angularPanelCtrl ? (\n \n ) : (\n \n );\n\n return lazy ? (\n \n {({ isInView }) => renderPanelChrome(isInView)}\n \n ) : (\n renderPanelChrome(true)\n );\n }\n\n render() {\n const { plugin } = this.props;\n\n // If we have not loaded plugin exports yet, wait\n if (!plugin) {\n return null;\n }\n\n return this.renderPanel(plugin);\n }\n}\n\nexport const DashboardPanel = connector(DashboardPanelUnconnected);\n","import React, { Component } from 'react';\n\nimport { renderMarkdown, LinkModelSupplier, ScopedVars } from '@grafana/data';\nimport { Tooltip, PopoverContent } from '@grafana/ui';\nimport { locationService, getTemplateSrv } from '@grafana/runtime';\n\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { getTimeSrv, TimeSrv } from 'app/features/dashboard/services/TimeSrv';\nimport { InspectTab } from 'app/features/inspector/types';\nimport { selectors } from '@grafana/e2e-selectors';\n\nenum InfoMode {\n Error = 'Error',\n Info = 'Info',\n Links = 'Links',\n}\n\ninterface Props {\n panel: PanelModel;\n title?: string;\n description?: string;\n scopedVars?: ScopedVars;\n links?: LinkModelSupplier;\n error?: string;\n}\n\nexport class PanelHeaderCorner extends Component {\n timeSrv: TimeSrv = getTimeSrv();\n\n getInfoMode = () => {\n const { panel, error } = this.props;\n if (error) {\n return InfoMode.Error;\n }\n if (!!panel.description) {\n return InfoMode.Info;\n }\n if (panel.links && panel.links.length) {\n return InfoMode.Links;\n }\n\n return undefined;\n };\n\n getInfoContent = (): JSX.Element => {\n const { panel } = this.props;\n const markdown = panel.description || '';\n const interpolatedMarkdown = getTemplateSrv().replace(markdown, panel.scopedVars);\n const markedInterpolatedMarkdown = renderMarkdown(interpolatedMarkdown);\n const links = this.props.links && this.props.links.getLinks(panel.replaceVariables);\n\n return (\n
\n
\n\n {links && links.length > 0 && (\n \n )}\n
\n );\n };\n\n /**\n * Open the Panel Inspector when we click on an error\n */\n onClickError = () => {\n locationService.partial({\n inspect: this.props.panel.id,\n inspectTab: InspectTab.Error,\n });\n };\n\n renderCornerType(infoMode: InfoMode, content: PopoverContent, onClick?: () => void) {\n const theme = infoMode === InfoMode.Error ? 'error' : 'info';\n const className = `panel-info-corner panel-info-corner--${infoMode.toLowerCase()}`;\n const ariaLabel = selectors.components.Panels.Panel.headerCornerInfo(infoMode.toLowerCase());\n\n return (\n \n
\n \n \n
\n
\n );\n }\n\n render() {\n const { error } = this.props;\n const infoMode: InfoMode | undefined = this.getInfoMode();\n\n if (!infoMode) {\n return null;\n }\n\n if (infoMode === InfoMode.Error && error) {\n return this.renderCornerType(infoMode, error, this.onClickError);\n }\n\n if (infoMode === InfoMode.Info || infoMode === InfoMode.Links) {\n return this.renderCornerType(infoMode, this.getInfoContent);\n }\n\n return null;\n }\n}\n\nexport default PanelHeaderCorner;\n","import {\n ByNamesMatcherMode,\n DataFrame,\n DynamicConfigValue,\n FieldConfigSource,\n FieldMatcherID,\n FieldType,\n getFieldDisplayName,\n isSystemOverrideWithRef,\n SystemConfigOverrideRule,\n} from '@grafana/data';\nimport { SeriesVisibilityChangeMode } from '@grafana/ui';\n\nconst displayOverrideRef = 'hideSeriesFrom';\nconst isHideSeriesOverride = isSystemOverrideWithRef(displayOverrideRef);\n\nexport function seriesVisibilityConfigFactory(\n label: string,\n mode: SeriesVisibilityChangeMode,\n fieldConfig: FieldConfigSource,\n data: DataFrame[]\n) {\n const { overrides } = fieldConfig;\n\n const displayName = label;\n const currentIndex = overrides.findIndex(isHideSeriesOverride);\n\n if (currentIndex < 0) {\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n const override = createOverride([displayName]);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const displayNames = getDisplayNames(data, displayName);\n const override = createOverride(displayNames);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const overridesCopy = Array.from(overrides);\n const [current] = overridesCopy.splice(currentIndex, 1) as SystemConfigOverrideRule[];\n\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n const existing = getExistingDisplayNames(current);\n\n if (existing[0] === displayName && existing.length === 1) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n const override = createOverride([displayName]);\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n }\n\n const override = createExtendedOverride(current, displayName);\n\n if (allFieldsAreExcluded(override, data)) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n}\n\nfunction createOverride(\n names: string[],\n mode = ByNamesMatcherMode.exclude,\n property?: DynamicConfigValue\n): SystemConfigOverrideRule {\n property = property ?? {\n id: 'custom.hideFrom',\n value: {\n viz: true,\n legend: false,\n tooltip: false,\n },\n };\n\n return {\n __systemRef: displayOverrideRef,\n matcher: {\n id: FieldMatcherID.byNames,\n options: {\n mode: mode,\n names: names,\n prefix: mode === ByNamesMatcherMode.exclude ? 'All except:' : undefined,\n readOnly: true,\n },\n },\n properties: [\n {\n ...property,\n value: {\n viz: true,\n legend: false,\n tooltip: false,\n },\n },\n ],\n };\n}\n\nconst createExtendedOverride = (\n current: SystemConfigOverrideRule,\n displayName: string,\n mode = ByNamesMatcherMode.exclude\n): SystemConfigOverrideRule => {\n const property = current.properties.find((p) => p.id === 'custom.hideFrom');\n const existing = getExistingDisplayNames(current);\n const index = existing.findIndex((name) => name === displayName);\n\n if (index < 0) {\n existing.push(displayName);\n } else {\n existing.splice(index, 1);\n }\n\n return createOverride(existing, mode, property);\n};\n\nconst getExistingDisplayNames = (rule: SystemConfigOverrideRule): string[] => {\n const names = rule.matcher.options?.names;\n if (!Array.isArray(names)) {\n return [];\n }\n return names;\n};\n\nconst allFieldsAreExcluded = (override: SystemConfigOverrideRule, data: DataFrame[]): boolean => {\n return getExistingDisplayNames(override).length === getDisplayNames(data).length;\n};\n\nconst getDisplayNames = (data: DataFrame[], excludeName?: string): string[] => {\n const unique = new Set();\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (name === excludeName) {\n continue;\n }\n\n unique.add(name);\n }\n }\n\n return Array.from(unique);\n};\n","// Services & Utils\nimport { createErrorNotification } from 'app/core/copy/appNotification';\nimport { backendSrv } from 'app/core/services/backend_srv';\nimport { DashboardSrv, getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\nimport { dashboardLoaderSrv } from 'app/features/dashboard/services/DashboardLoaderSrv';\nimport { getTimeSrv, TimeSrv } from 'app/features/dashboard/services/TimeSrv';\nimport { keybindingSrv } from 'app/core/services/keybindingSrv';\n// Actions\nimport { notifyApp } from 'app/core/actions';\nimport {\n clearDashboardQueriesToUpdateOnLoad,\n dashboardInitCompleted,\n dashboardInitFailed,\n dashboardInitFetching,\n dashboardInitServices,\n dashboardInitSlow,\n} from './reducers';\n// Types\nimport { DashboardDTO, DashboardInitPhase, DashboardRoutes, StoreState, ThunkDispatch, ThunkResult } from 'app/types';\nimport { DashboardModel } from './DashboardModel';\nimport { DataQuery, locationUtil, setWeekStart } from '@grafana/data';\nimport { initVariablesTransaction } from '../../variables/state/actions';\nimport { emitDashboardViewEvent } from './analyticsProcessor';\nimport { dashboardWatcher } from 'app/features/live/dashboard/dashboardWatcher';\nimport { config, locationService } from '@grafana/runtime';\nimport { createDashboardQueryRunner } from '../../query/state/DashboardQueryRunner/DashboardQueryRunner';\n\nexport interface InitDashboardArgs {\n urlUid?: string;\n urlSlug?: string;\n urlType?: string;\n urlFolderId?: string | null;\n routeName?: string;\n fixUrl: boolean;\n}\n\nasync function fetchDashboard(\n args: InitDashboardArgs,\n dispatch: ThunkDispatch,\n getState: () => StoreState\n): Promise {\n try {\n switch (args.routeName) {\n case DashboardRoutes.Home: {\n // load home dash\n const dashDTO: DashboardDTO = await backendSrv.get('/api/dashboards/home');\n\n // if user specified a custom home dashboard redirect to that\n if (dashDTO.redirectUri) {\n const newUrl = locationUtil.stripBaseFromUrl(dashDTO.redirectUri);\n locationService.replace(newUrl);\n return null;\n }\n\n // disable some actions on the default home dashboard\n dashDTO.meta.canSave = false;\n dashDTO.meta.canShare = false;\n dashDTO.meta.canStar = false;\n return dashDTO;\n }\n case DashboardRoutes.Normal: {\n const dashDTO: DashboardDTO = await dashboardLoaderSrv.loadDashboard(args.urlType, args.urlSlug, args.urlUid);\n\n if (args.fixUrl && dashDTO.meta.url) {\n // check if the current url is correct (might be old slug)\n const dashboardUrl = locationUtil.stripBaseFromUrl(dashDTO.meta.url);\n const currentPath = locationService.getLocation().pathname;\n\n if (dashboardUrl !== currentPath) {\n // Spread current location to persist search params used for navigation\n locationService.replace({\n ...locationService.getLocation(),\n pathname: dashboardUrl,\n });\n console.log('not correct url correcting', dashboardUrl, currentPath);\n }\n }\n return dashDTO;\n }\n case DashboardRoutes.New: {\n return getNewDashboardModelData(args.urlFolderId);\n }\n default:\n throw { message: 'Unknown route ' + args.routeName };\n }\n } catch (err) {\n // Ignore cancelled errors\n if (err.cancelled) {\n return null;\n }\n\n dispatch(dashboardInitFailed({ message: 'Failed to fetch dashboard', error: err }));\n console.error(err);\n return null;\n }\n}\n\n/**\n * This action (or saga) does everything needed to bootstrap a dashboard & dashboard model.\n * First it handles the process of fetching the dashboard, correcting the url if required (causing redirects/url updates)\n *\n * This is used both for single dashboard & solo panel routes, home & new dashboard routes.\n *\n * Then it handles the initializing of the old angular services that the dashboard components & panels still depend on\n *\n */\nexport function initDashboard(args: InitDashboardArgs): ThunkResult {\n return async (dispatch, getState) => {\n // set fetching state\n dispatch(dashboardInitFetching());\n\n // Detect slow loading / initializing and set state flag\n // This is in order to not show loading indication for fast loading dashboards as it creates blinking/flashing\n setTimeout(() => {\n if (getState().dashboard.getModel() === null) {\n dispatch(dashboardInitSlow());\n }\n }, 500);\n\n // fetch dashboard data\n const dashDTO = await fetchDashboard(args, dispatch, getState);\n\n // returns null if there was a redirect or error\n if (!dashDTO) {\n return;\n }\n\n // set initializing state\n dispatch(dashboardInitServices());\n\n // create model\n let dashboard: DashboardModel;\n try {\n dashboard = new DashboardModel(dashDTO.dashboard, dashDTO.meta);\n } catch (err) {\n dispatch(dashboardInitFailed({ message: 'Failed create dashboard model', error: err }));\n console.error(err);\n return;\n }\n\n // add missing orgId query param\n const storeState = getState();\n const queryParams = locationService.getSearchObject();\n\n if (!queryParams.orgId) {\n // TODO this is currently not possible with the LocationService API\n locationService.partial({ orgId: storeState.user.orgId }, true);\n }\n\n // init services\n const timeSrv: TimeSrv = getTimeSrv();\n const dashboardSrv: DashboardSrv = getDashboardSrv();\n\n // legacy srv state, we need this value updated for built-in annotations\n dashboardSrv.setCurrent(dashboard);\n\n timeSrv.init(dashboard);\n\n if (storeState.dashboard.modifiedQueries) {\n const { panelId, queries } = storeState.dashboard.modifiedQueries;\n dashboard.meta.fromExplore = !!(panelId && queries);\n }\n\n // template values service needs to initialize completely before the rest of the dashboard can load\n await dispatch(initVariablesTransaction(args.urlUid!, dashboard));\n\n // DashboardQueryRunner needs to run after all variables have been resolved so that any annotation query including a variable\n // will be correctly resolved\n const runner = createDashboardQueryRunner({ dashboard, timeSrv });\n runner.run({ dashboard, range: timeSrv.timeRange() });\n\n if (getState().templating.transaction.uid !== args.urlUid) {\n // if a previous dashboard has slow running variable queries the batch uid will be the new one\n // but the args.urlUid will be the same as before initVariablesTransaction was called so then we can't continue initializing\n // the previous dashboard.\n return;\n }\n\n // If dashboard is in a different init phase it means it cancelled during service init\n if (getState().dashboard.initPhase !== DashboardInitPhase.Services) {\n return;\n }\n\n try {\n dashboard.processRepeats();\n\n // handle auto fix experimental feature\n if (queryParams.autofitpanels) {\n dashboard.autoFitPanels(window.innerHeight, queryParams.kiosk);\n }\n\n keybindingSrv.setupDashboardBindings(dashboard);\n } catch (err) {\n dispatch(notifyApp(createErrorNotification('Dashboard init failed', err)));\n console.error(err);\n }\n\n if (storeState.dashboard.modifiedQueries) {\n const { panelId, queries } = storeState.dashboard.modifiedQueries;\n updateQueriesWhenComingFromExplore(dispatch, dashboard, panelId, queries);\n }\n\n // send open dashboard event\n if (args.routeName !== DashboardRoutes.New) {\n emitDashboardViewEvent(dashboard);\n\n // Listen for changes on the current dashboard\n dashboardWatcher.watch(dashboard.uid);\n } else {\n dashboardWatcher.leave();\n }\n\n // set week start\n if (dashboard.weekStart !== '') {\n setWeekStart(dashboard.weekStart);\n } else {\n setWeekStart(config.bootData.user.weekStart);\n }\n\n // yay we are done\n dispatch(dashboardInitCompleted(dashboard));\n };\n}\n\nfunction getNewDashboardModelData(urlFolderId?: string | null): any {\n const data = {\n meta: {\n canStar: false,\n canShare: false,\n isNew: true,\n folderId: 0,\n },\n dashboard: {\n title: 'New dashboard',\n panels: [\n {\n type: 'add-panel',\n gridPos: { x: 0, y: 0, w: 12, h: 9 },\n title: 'Panel Title',\n },\n ],\n },\n };\n\n if (urlFolderId) {\n data.meta.folderId = parseInt(urlFolderId, 10);\n }\n\n return data;\n}\n\nfunction updateQueriesWhenComingFromExplore(\n dispatch: ThunkDispatch,\n dashboard: DashboardModel,\n originPanelId: number,\n queries: DataQuery[]\n) {\n const panelArrId = dashboard.panels.findIndex((panel) => panel.id === originPanelId);\n\n if (panelArrId > -1) {\n dashboard.panels[panelArrId].targets = queries;\n }\n\n // Clear update state now that we're done\n dispatch(clearDashboardQueriesToUpdateOnLoad());\n}\n","import { DashboardModel } from './DashboardModel';\nimport { reportMetaAnalytics, MetaAnalyticsEventName, DashboardViewEventPayload } from '@grafana/runtime';\n\nexport function emitDashboardViewEvent(dashboard: DashboardModel) {\n const eventData: DashboardViewEventPayload = {\n dashboardId: dashboard.id,\n dashboardName: dashboard.title,\n dashboardUid: dashboard.uid,\n folderName: dashboard.meta.folderTitle,\n eventName: MetaAnalyticsEventName.DashboardView,\n };\n\n reportMetaAnalytics(eventData);\n}\n","export enum InspectTab {\n Data = 'data',\n Meta = 'meta', // When result metadata exists\n Error = 'error',\n Stats = 'stats',\n JSON = 'json',\n Query = 'query',\n Actions = 'actions', // ALPHA!\n}\n","import { PanelModel } from 'app/features/dashboard/state';\nimport { StoreState } from 'app/types';\nimport { PanelState } from './reducers';\n\nexport function getPanelStateForModel(state: StoreState, model: PanelModel): PanelState | undefined {\n return state.panels[model.key];\n}\n"],"names":["PanelHeaderNotice","notice","onClick","iconName","severity","Tooltip","content","text","inspect","className","e","Icon","name","style","marginRight","href","link","target","rel","PanelHeaderNotices","frames","panelId","openInspect","useCallback","tab","stopPropagation","locationService","inspectTab","notices","frame","meta","Object","values","map","PanelHeaderMenuTrigger","children","divProps","clickCoordinates","setClickCoordinates","useState","x","y","panelMenuOpen","setPanelMenuOpen","onMenuToggle","event","current","clicked","eventToClickCoordinates","onMouseDown","closeMenu","Math","floor","clientX","clientY","PanelHeaderLoadingIndicator","state","styles","useStyles","getStyles","LoadingState","title","streamIndicator","theme","css","colors","textFaint","PanelHeaderMenuProvider","panel","dashboard","items","setItems","angularComponent","useSelector","getPanelStateForModel","useEffect","onViewPanel","preventDefault","viewPanel","id","onEditPanel","editPanel","onAddLibraryPanel","addLibraryPanel","onUnlinkLibraryPanel","unlinkLibraryPanel","onInspectPanel","onMore","onDuplicatePanel","duplicatePanel","onCopyPanel","copyPanel","onRemovePanel","removePanel","onNavigateToExplore","openInNewWindow","ctrlKey","metaKey","url","window","open","config","undefined","store","navigateToExplore","getDataSourceSrv","getTimeSrv","getExploreUrl","menu","isEditing","push","iconClassName","shortcut","canEditPanel","sharePanel","contextSrv","plugin","skipDataQuery","inspectMenu","canEdit","type","subMenu","isViewing","isPanelModelLibraryPanel","scope","getScope","panelCtrl","$$childHead","ctrl","angularMenuItems","getExtendedMenu","item","reactItem","click","$eval","length","getPanelMenu","PanelHeaderMenu","PureComponent","isSubMenu","role","menuItem","idx","PanelHeaderMenuItem","renderItems","render","this","props","PanelHeaderMenuWrapper","show","onClose","ClickOutsideWrapper","parent","document","PanelHeader","error","data","alertState","getDisplayTitle","cx","useStyles2","panelStyles","getQueryRunner","cancelQuery","PanelHeaderCorner","description","scopedVars","links","getPanelLinksSupplier","selectors","series","size","titleText","request","timeInfo","typography","fontWeightMedium","body","fontSize","primary","createOverride","label","color","matcher","FieldMatcherID","options","properties","createProperty","value","mode","FieldColorModeId","fixedColor","isSoloRoute","path","test","toLowerCase","PanelChrome","constructor","super","Subscription","onlyLocal","DashboardCursorSync","graphTooltip","onInstanceStateChange","setState","context","instanceState","onFieldConfigChange","fieldConfig","overrides","currentIndex","findIndex","override","overridesCopy","Array","from","existing","propertyIndex","p","propertiesCopy","changeSeriesColorConfigFactory","seriesVisibilityConfigFactory","sortKey","legendOptions","legend","sortDesc","sortBy","onOptionsChange","isInView","width","refreshWhenInView","timeData","applyPanelTimeOverrides","timeSrv","timeRange","wantsQueryExecution","runAllPanelQueries","getTimezone","renderCounter","liveTime","stateUpdate","updateOptions","updateFieldConfig","errorMessage","message","async","isRegion","to","anno","dashboardId","time","timeEnd","tags","saveAnnotation","getDashboardQueryRunner","run","range","eventBus","publish","AnnotationChangeEvent","deleteAnnotation","updateAnnotation","setTime","toUtc","events","newScopedBus","eventFilter","isFirstLoad","app","getPanelContextApp","sync","getSync","onSeriesColorChange","onToggleSeriesVisibility","onSeriesVisibilityChange","onAnnotationCreate","onAnnotationUpdate","onAnnotationDelete","canAddAnnotations","Boolean","canMakeEditable","onToggleLegendSort","getInitialPanelDataState","CoreApp","getDefaultTimeRange","componentDidMount","subs","add","subscribe","RefreshEvent","onRefresh","RenderEvent","onRender","panelInitialized","hasPanelSnapshot","loadSnapshotData","getData","withTransforms","withFieldConfig","next","onDataUpdate","liveTimer","componentWillUnmount","unsubscribe","liveTimeChanged","delta","valueOf","console","log","componentDidUpdate","prevProps","snapshot","snapshotData","toDataFrameDTO","shouldSignalRenderingCompleted","loadingState","pluginMeta","skipFirstRender","renderPanel","height","profiler","PanelComponent","headerHeight","hasOverlayHeader","panelHeaderHeight","chromePadding","noPadding","panelPadding","panelWidth","PANEL_BORDER","innerPanelHeight","panelContentClassNames","classNames","panelOptions","getOptions","PanelContextProvider","timeZone","transparent","replaceVariables","onChangeTimeRange","hasTitle","containerClassNames","pathname","ErrorBoundary","dependencies","onError","onPanelError","onRecover","onPanelErrorRecover","PanelChromeAngularUnconnected","loadAngularPanel","queryRunner","onPanelDataUpdate","prevState","scopeProps","getInnerPanelHeight","getInnerPanelWidth","setPanelAngularComponent","element","loader","getAngularLoader","key","load","alert","ref","mapDispatchToProps","PanelChromeAngular","connect","LazyLoader","onLoad","onChange","useUniqueId","loaded","setLoaded","setIsInView","wrapperRef","useRef","useEffectOnce","addCallback","entry","isIntersecting","wrapperEl","observer","observe","callbacks","unobserve","keys","disconnect","c","IntersectionObserver","entries","rootMargin","initPanelState","cleanUpPanelState","setPanelInstanceState","connector","panelState","panels","stateKey","DashboardPanelUnconnected","v","lazy","skipStateCleanUp","renderPanelChrome","angularPanelCtrl","onVisibilityChange","DashboardPanel","InfoMode","Component","Error","Info","Links","markdown","interpolatedMarkdown","getTemplateSrv","replace","markedInterpolatedMarkdown","renderMarkdown","getLinks","dangerouslySetInnerHTML","__html","InspectTab","renderCornerType","infoMode","ariaLabel","placement","getInfoMode","onClickError","getInfoContent","displayOverrideRef","isHideSeriesOverride","isSystemOverrideWithRef","displayName","SeriesVisibilityChangeMode","getDisplayNames","splice","getExistingDisplayNames","createExtendedOverride","allFieldsAreExcluded","names","ByNamesMatcherMode","property","viz","tooltip","__systemRef","prefix","readOnly","find","index","rule","isArray","excludeName","unique","Set","field","fields","FieldType","getFieldDisplayName","fetchDashboard","args","dispatch","getState","routeName","DashboardRoutes","dashDTO","backendSrv","redirectUri","newUrl","locationUtil","canSave","canShare","canStar","dashboardLoaderSrv","urlType","urlSlug","urlUid","fixUrl","dashboardUrl","currentPath","urlFolderId","isNew","folderId","gridPos","w","h","parseInt","getNewDashboardModelData","err","cancelled","dashboardInitFailed","initDashboard","dashboardInitFetching","setTimeout","getModel","dashboardInitSlow","dashboardInitServices","DashboardModel","storeState","queryParams","orgId","user","getDashboardSrv","setCurrent","init","modifiedQueries","queries","fromExplore","initVariablesTransaction","createDashboardQueryRunner","templating","transaction","uid","initPhase","DashboardInitPhase","processRepeats","autofitpanels","autoFitPanels","innerHeight","kiosk","keybindingSrv","notifyApp","createErrorNotification","originPanelId","panelArrId","targets","clearDashboardQueriesToUpdateOnLoad","updateQueriesWhenComingFromExplore","eventData","dashboardName","dashboardUid","folderName","folderTitle","eventName","MetaAnalyticsEventName","reportMetaAnalytics","emitDashboardViewEvent","dashboardWatcher","weekStart","setWeekStart","dashboardInitCompleted","model"],"sourceRoot":""}