{"version":3,"file":"5042.766de06cfa1d0a077de4.js","mappings":"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","sources":["webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderCorner.tsx","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/DashboardPanel.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"],"sourcesContent":["import React, { Component } from 'react';\n\nimport { renderMarkdown, LinkModelSupplier, ScopedVars } from '@grafana/data';\nimport { Tooltip, PopoverContent } from '@grafana/ui';\nimport { getLocationSrv, 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 getLocationSrv().update({ partial: true, query: { inspect: this.props.panel.id, inspectTab: InspectTab.Error } });\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 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';\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(\n (state: StoreState) => state.dashboard.panels[panel.id]?.angularComponent || null\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 '../../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 path?.toLowerCase().includes('/d-solo/');\n}\n","import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { Subscription } from 'rxjs';\nimport { locationService } from '@grafana/runtime';\nimport {\n AbsoluteTimeRange,\n AnnotationChangeEvent,\n AnnotationEventUIModel,\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 { 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 { RefreshEvent, 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}\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 Component {\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 sync: props.isEditing ? DashboardCursorSync.Off : props.dashboard.graphTooltip,\n eventBus,\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 },\n data: this.getInitialPanelDataState(),\n };\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 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, isEditing, width } = this.props;\n\n if (prevProps.dashboard.graphTooltip !== this.props.dashboard.graphTooltip) {\n this.setState((s) => {\n return {\n context: { ...s.context, sync: isEditing ? DashboardCursorSync.Off : this.props.dashboard.graphTooltip },\n };\n });\n }\n\n if (isEditing !== prevProps.isEditing) {\n this.setState((s) => {\n return {\n context: { ...s.context, sync: isEditing ? DashboardCursorSync.Off : this.props.dashboard.graphTooltip },\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 shouldComponentUpdate(prevProps: Props, prevState: State) {\n const { plugin, panel } = this.props;\n\n // If plugin changed we need to process fieldOverrides again\n // We do this by asking panel query runner to resend last result\n if (prevProps.plugin !== plugin) {\n panel.getQueryRunner().resendLastResult();\n return false;\n }\n\n return true;\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 = (message: string) => {\n if (this.state.errorMessage !== message) {\n this.setState({ errorMessage: message });\n }\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 } = this.props;\n const { errorMessage, data } = this.state;\n const { transparent } = panel;\n\n let alertState = config.unifiedAlertingEnabled ? undefined : 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 this.onPanelError(error.message || DEFAULT_PLUGIN_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 '../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';\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 | null;\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.cleanUpAngularPanel();\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.cleanUpAngularPanel();\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 panelId: panel.id,\n angularComponent: loader.load(this.element, this.scopeProps, template),\n });\n }\n\n cleanUpAngularPanel() {\n const { angularComponent, setPanelAngularComponent, panel } = this.props;\n\n if (angularComponent) {\n angularComponent.destroy();\n }\n\n setPanelAngularComponent({ panelId: panel.id, angularComponent: null });\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 let alertState = config.unifiedAlertingEnabled ? undefined : 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: state.dashboard.panels[props.panel.id].angularComponent,\n };\n};\n\nconst mapDispatchToProps: MapDispatchToProps = { setPanelAngularComponent };\n\nexport const PanelChromeAngular = connect(mapStateToProps, mapDispatchToProps)(PanelChromeAngularUnconnected);\n","// Libraries\nimport React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\n// Components\nimport { PanelChrome } from './PanelChrome';\nimport { PanelChromeAngular } from './PanelChromeAngular';\n\n// Actions\nimport { initDashboardPanel } from '../state/actions';\n\n// Types\nimport { DashboardModel, PanelModel } from '../state';\nimport { StoreState } from 'app/types';\nimport { PanelPlugin } from '@grafana/data';\n\nexport interface OwnProps {\n panel: PanelModel;\n dashboard: DashboardModel;\n isEditing: boolean;\n isViewing: boolean;\n isInView: boolean;\n width: number;\n height: number;\n}\n\nexport interface State {\n isLazy: boolean;\n}\n\nconst mapStateToProps = (state: StoreState, props: OwnProps) => {\n const panelState = state.dashboard.panels[props.panel.id];\n if (!panelState) {\n return { plugin: null };\n }\n\n return {\n plugin: panelState.plugin,\n };\n};\n\nconst mapDispatchToProps = { initDashboardPanel };\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport type Props = OwnProps & ConnectedProps;\n\nexport class DashboardPanelUnconnected extends PureComponent {\n specialPanels: { [key: string]: Function } = {};\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n isLazy: !props.isInView,\n };\n }\n\n componentDidMount() {\n this.props.initDashboardPanel(this.props.panel);\n }\n\n componentDidUpdate() {\n if (this.state.isLazy && this.props.isInView) {\n this.setState({ isLazy: false });\n }\n }\n\n renderPanel(plugin: PanelPlugin) {\n const { dashboard, panel, isViewing, isInView, isEditing, width, height } = this.props;\n\n if (plugin.angularPanelCtrl) {\n return (\n \n );\n }\n\n return (\n \n );\n }\n\n render() {\n const { plugin } = this.props;\n const { isLazy } = this.state;\n\n // If we have not loaded plugin exports yet, wait\n if (!plugin) {\n return null;\n }\n\n // If we are lazy state don't render anything\n if (isLazy) {\n return null;\n }\n\n return this.renderPanel(plugin);\n }\n}\n\nexport const DashboardPanel = connector(DashboardPanelUnconnected);\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 } from '@grafana/data';\nimport { initVariablesTransaction } from '../../variables/state/actions';\nimport { emitDashboardViewEvent } from './analyticsProcessor';\nimport { dashboardWatcher } from 'app/features/live/dashboard/dashboardWatcher';\nimport { 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 // 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"],"names":["InfoMode","PanelHeaderCorner","Component","getTimeSrv","panel","error","this","props","Error","description","Info","links","length","Links","markdown","interpolatedMarkdown","getTemplateSrv","replace","scopedVars","markedInterpolatedMarkdown","renderMarkdown","getLinks","replaceVariables","className","dangerouslySetInnerHTML","__html","map","link","idx","href","target","title","getLocationSrv","update","partial","query","inspect","id","inspectTab","InspectTab","renderCornerType","infoMode","content","onClick","theme","toLowerCase","ariaLabel","selectors","Tooltip","placement","render","getInfoMode","onClickError","getInfoContent","PanelHeaderNotice","notice","iconName","severity","text","e","Icon","name","style","marginRight","rel","PanelHeaderNotices","frames","panelId","openInspect","useCallback","tab","stopPropagation","locationService","notices","frame","meta","Object","values","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","streamIndicator","css","colors","textFaint","PanelHeaderMenuProvider","dashboard","items","setItems","angularComponent","useSelector","panels","useEffect","onViewPanel","preventDefault","viewPanel","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","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","getPanelMenu","PanelHeaderMenu","PureComponent","isSubMenu","role","menuItem","PanelHeaderMenuItem","renderItems","PanelHeaderMenuWrapper","show","onClose","ClickOutsideWrapper","parent","document","PanelHeader","data","alertState","getDisplayTitle","cx","useStyles2","panelStyles","getQueryRunner","cancelQuery","getPanelLinksSupplier","series","size","titleText","request","timeInfo","typography","fontWeightMedium","body","fontSize","primary","createOverride","label","color","matcher","FieldMatcherID","options","properties","createProperty","value","mode","FieldColorModeId","fixedColor","isSoloRoute","path","includes","PanelChrome","constructor","super","Subscription","onlyLocal","onFieldConfigChange","fieldConfig","overrides","currentIndex","findIndex","override","overridesCopy","Array","from","existing","propertyIndex","p","propertiesCopy","changeSeriesColorConfigFactory","seriesVisibilityConfigFactory","isInView","width","setState","refreshWhenInView","timeData","applyPanelTimeOverrides","timeSrv","timeRange","wantsQueryExecution","runAllPanelQueries","getTimezone","renderCounter","liveTime","stateUpdate","updateOptions","updateFieldConfig","message","errorMessage","async","isRegion","to","anno","dashboardId","time","timeEnd","tags","saveAnnotation","getDashboardQueryRunner","run","range","context","eventBus","publish","AnnotationChangeEvent","deleteAnnotation","updateAnnotation","setTime","toUtc","events","newScopedBus","eventFilter","isFirstLoad","sync","DashboardCursorSync","graphTooltip","onSeriesColorChange","onToggleSeriesVisibility","onSeriesVisibilityChange","onAnnotationCreate","onAnnotationUpdate","onAnnotationDelete","canAddAnnotations","Boolean","canMakeEditable","getInitialPanelDataState","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","s","shouldComponentUpdate","prevState","resendLastResult","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","onOptionsChange","onChangeTimeRange","hasTitle","containerClassNames","pathname","ErrorBoundary","onPanelError","PanelChromeAngularUnconnected","loadAngularPanel","queryRunner","onPanelDataUpdate","cleanUpAngularPanel","scopeProps","getInnerPanelHeight","getInnerPanelWidth","setPanelAngularComponent","element","loader","getAngularLoader","load","destroy","alert","ref","mapDispatchToProps","PanelChromeAngular","connect","initDashboardPanel","connector","panelState","DashboardPanelUnconnected","isLazy","angularPanelCtrl","DashboardPanel","displayOverrideRef","isHideSeriesOverride","isSystemOverrideWithRef","displayName","SeriesVisibilityChangeMode","getDisplayNames","splice","getExistingDisplayNames","createExtendedOverride","allFieldsAreExcluded","names","ByNamesMatcherMode","property","viz","legend","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","dashboardInitCompleted"],"sourceRoot":""}