{"version":3,"file":"97.e92ec293e84c22efbf0c.js","mappings":"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","sources":["webpack://grafana/./public/app/features/dashboard/dashgrid/LazyLoader.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/PanelHeader/PanelHeaderLoadingIndicator.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderMenuTrigger.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderMenu.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/PanelHeaderMenuWrapper.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/PanelHeader.tsx","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/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/dashboard/utils/loadSnapshotData.ts","webpack://grafana/./public/app/features/inspector/types.ts","webpack://grafana/./public/app/features/panel/panellinks/linkSuppliers.ts","webpack://grafana/./public/app/features/panel/state/selectors.ts"],"sourcesContent":["import React, { useRef, useState } from 'react';\nimport { useEffectOnce } from 'react-use';\n\nimport { useUniqueId } from 'app/plugins/datasource/influxdb/components/useUniqueId';\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 {\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 { css } from '@emotion/css';\nimport React, { FC } from 'react';\n\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 React, { FC, HTMLAttributes, MouseEvent, ReactElement, useCallback, useState } from 'react';\n\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\n const onMenuToggle = useCallback(\n (event: MouseEvent) => {\n if (!isClick(clickCoordinates, eventToClickCoordinates(event))) {\n return;\n }\n\n setPanelMenuOpen(!panelMenuOpen);\n },\n [clickCoordinates, panelMenuOpen, setPanelMenuOpen]\n );\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, { PureComponent } from 'react';\n\nimport { PanelMenuItem } from '@grafana/data';\n\nimport { PanelHeaderMenuItem } from './PanelHeaderMenuItem';\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 { FC, ReactElement, useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { PanelMenuItem } from '@grafana/data';\nimport { getPanelStateForModel } from 'app/features/panel/state/selectors';\n\nimport { StoreState } from '../../../../types';\nimport { DashboardModel, PanelModel } from '../../state';\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((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 { t } from '@lingui/macro';\n\nimport { PanelMenuItem } from '@grafana/data';\nimport { AngularComponent, getDataSourceSrv, locationService } from '@grafana/runtime';\nimport { PanelCtrl } from 'app/angular/panel/panel_ctrl';\nimport config from 'app/core/config';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport {\n addLibraryPanel,\n copyPanel,\n duplicatePanel,\n removePanel,\n sharePanel,\n toggleLegend,\n unlinkLibraryPanel,\n} from 'app/features/dashboard/utils/panel';\nimport { isPanelModelLibraryPanel } from 'app/features/library-panels/guard';\nimport { store } from 'app/store/store';\n\nimport { contextSrv } from '../../../core/services/context_srv';\nimport { getExploreUrl } from '../../../core/utils/explore';\nimport { navigateToExplore } from '../../explore/state/main';\nimport { getTimeSrv } from '../services/TimeSrv';\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 onToggleLegend = (event: React.MouseEvent) => {\n event.preventDefault();\n toggleLegend(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 const viewTextTranslation = t({\n id: 'panel.header-menu.view',\n message: `View`,\n });\n menu.push({\n text: viewTextTranslation,\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 const shareTextTranslation = t({\n id: 'panel.header-menu.share',\n message: `Share`,\n });\n\n menu.push({\n text: shareTextTranslation,\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 onClick: onNavigateToExplore,\n shortcut: 'x',\n });\n }\n\n menu.push({\n text: panel.options.legend?.showLegend ? 'Hide legend' : 'Show legend',\n iconClassName: 'exchange-alt',\n onClick: onToggleLegend,\n shortcut: 'p l',\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 const dataTextTranslation = t({\n id: 'panel.header-menu.inspect-data',\n message: `Data`,\n });\n\n inspectMenu.push({\n text: dataTextTranslation,\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 const jsonTextTranslation = t({\n id: 'panel.header-menu.inspect-json',\n message: `Panel JSON`,\n });\n\n inspectMenu.push({\n text: jsonTextTranslation,\n onClick: (e: React.MouseEvent) => onInspectPanel('json'),\n });\n\n const inspectTextTranslation = t({\n id: 'panel.header-menu.inspect',\n message: `Inspect`,\n });\n menu.push({\n type: 'submenu',\n text: inspectTextTranslation,\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 const moreTextTranslation = t({\n id: 'panel.header-menu.more',\n message: `More...`,\n });\n menu.push({\n type: 'submenu',\n text: moreTextTranslation,\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, { FC } from 'react';\n\nimport { DashboardModel, PanelModel } from '../../state';\n\nimport { PanelHeaderMenu } from './PanelHeaderMenu';\nimport { PanelHeaderMenuProvider } from './PanelHeaderMenuProvider';\n\ninterface Props {\n panel: PanelModel;\n dashboard: DashboardModel;\n onClose: () => void;\n}\n\nexport const PanelHeaderMenuWrapper: FC = ({ panel, dashboard }) => {\n return (\n \n {({ items }) => {\n return ;\n }}\n \n );\n};\n","import React, { FC } from 'react';\n\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';\n\nimport { DataFrame, QueryResultMetaNotice } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\n\nimport { PanelHeaderNotice } from './PanelHeaderNotice';\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 { css, cx } from '@emotion/css';\nimport React, { FC } from 'react';\n\nimport { DataLink, GrafanaTheme2, PanelData } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Icon, useStyles2, ClickOutsideWrapper } from '@grafana/ui';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { getPanelLinksSupplier } from 'app/features/panel/panellinks/linkSuppliers';\n\nimport PanelHeaderCorner from './PanelHeaderCorner';\nimport { PanelHeaderLoadingIndicator } from './PanelHeaderLoadingIndicator';\nimport { PanelHeaderMenuTrigger } from './PanelHeaderMenuTrigger';\nimport { PanelHeaderMenuWrapper } from './PanelHeaderMenuWrapper';\nimport { PanelHeaderNotices } from './PanelHeaderNotices';\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 \n {alertState ? (\n \n ) : null}\n

{title}

\n {!dashboard.meta.publicDashboardAccessToken && (\n
\n \n {panelMenuOpen ? (\n \n ) : null}\n
\n )}\n {data.request && data.request.timeInfo && (\n \n {data.request.timeInfo}\n \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 classNames from 'classnames';\nimport React, { PureComponent } from 'react';\nimport { Subscription } from 'rxjs';\n\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 { selectors } from '@grafana/e2e-selectors';\nimport { config, locationService, RefreshEvent } from '@grafana/runtime';\nimport { VizLegendOptions } from '@grafana/schema';\nimport { ErrorBoundary, PanelContext, PanelContextProvider, SeriesVisibilityChangeMode } from '@grafana/ui';\nimport { PANEL_BORDER } from 'app/core/constants';\nimport { profiler } from 'app/core/profiler';\nimport { applyPanelTimeOverrides } from 'app/features/dashboard/utils/panel';\nimport { changeSeriesColorConfigFactory } from 'app/plugins/panel/timeseries/overrides/colorSeriesConfigFactory';\nimport { RenderEvent } from 'app/types/events';\n\nimport { isSoloRoute } from '../../../routes/utils';\nimport { deleteAnnotation, saveAnnotation, updateAnnotation } from '../../annotations/api';\nimport { getDashboardQueryRunner } from '../../query/state/DashboardQueryRunner/DashboardQueryRunner';\nimport { getTimeSrv, TimeSrv } from '../services/TimeSrv';\nimport { DashboardModel, PanelModel } from '../state';\nimport { loadSnapshotData } from '../utils/loadSnapshotData';\n\nimport { PanelHeader } from './PanelHeader/PanelHeader';\nimport { seriesVisibilityConfigFactory } from './SeriesVisibilityConfigFactory';\nimport { liveTimer } from './liveTimer';\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 onInstanceStateChange: this.onInstanceStateChange,\n onToggleLegendSort: this.onToggleLegendSort,\n canAddAnnotations: props.dashboard.canAddAnnotations.bind(props.dashboard),\n canEditAnnotations: props.dashboard.canEditAnnotations.bind(props.dashboard),\n canDeleteAnnotations: props.dashboard.canDeleteAnnotations.bind(props.dashboard),\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 { dashboard, 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(\n dashboard.id,\n dashboard.getTimezone(),\n timeData,\n width,\n dashboard.meta.publicDashboardAccessToken\n );\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 dashboardUID: this.props.dashboard.uid,\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 dashboardUID: this.props.dashboard.uid,\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 classNames from 'classnames';\nimport React, { PureComponent } from 'react';\nimport { connect, MapDispatchToProps, MapStateToProps } from 'react-redux';\nimport { Subscription } from 'rxjs';\n\nimport { getDefaultTimeRange, LoadingState, PanelData, PanelPlugin } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { AngularComponent, getAngularLoader, locationService } from '@grafana/runtime';\nimport config from 'app/core/config';\nimport { PANEL_BORDER } from 'app/core/constants';\nimport { setPanelAngularComponent } from 'app/features/panel/state/reducers';\nimport { getPanelStateForModel } from 'app/features/panel/state/selectors';\nimport { StoreState } from 'app/types';\n\nimport { isSoloRoute } from '../../../routes/utils';\nimport { getTimeSrv, TimeSrv } from '../services/TimeSrv';\nimport { DashboardModel, PanelModel } from '../state';\n\nimport { PanelHeader } from './PanelHeader/PanelHeader';\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, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { StoreState } from 'app/types';\n\nimport { initPanelState } from '../../panel/state/actions';\nimport { setPanelInstanceState } from '../../panel/state/reducers';\nimport { DashboardModel, PanelModel } from '../state';\n\nimport { LazyLoader } from './LazyLoader';\nimport { PanelChrome } from './PanelChrome';\nimport { PanelChromeAngular } from './PanelChromeAngular';\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 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 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 componentDidMount() {\n this.props.panel.isInView = !this.props.lazy;\n if (!this.props.lazy) {\n this.onPanelLoad();\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 onPanelLoad = () => {\n if (!this.props.plugin) {\n this.props.initPanelState(this.props.panel);\n }\n };\n\n render() {\n const { dashboard, panel, isViewing, isEditing, width, height, lazy, plugin } = this.props;\n\n const renderPanelChrome = (isInView: boolean) =>\n plugin &&\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\nexport const DashboardPanel = connector(DashboardPanelUnconnected);\n","import React, { Component } from 'react';\n\nimport { renderMarkdown, LinkModelSupplier, ScopedVars } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { locationService, getTemplateSrv } from '@grafana/runtime';\nimport { Tooltip, PopoverContent } from '@grafana/ui';\nimport { getTimeSrv, TimeSrv } from 'app/features/dashboard/services/TimeSrv';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { InspectTab } from 'app/features/inspector/types';\n\nenum InfoMode {\n Error = 'Error',\n Info = 'Info',\n Links = 'Links',\n}\n\nexport interface 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","import { DataQuery, locationUtil, setWeekStart, DashboardLoadedEvent } from '@grafana/data';\nimport { config, isFetchError, locationService } from '@grafana/runtime';\nimport { notifyApp } from 'app/core/actions';\nimport appEvents from 'app/core/app_events';\nimport { createErrorNotification } from 'app/core/copy/appNotification';\nimport { backendSrv } from 'app/core/services/backend_srv';\nimport { keybindingSrv } from 'app/core/services/keybindingSrv';\nimport store from 'app/core/store';\nimport { dashboardLoaderSrv } from 'app/features/dashboard/services/DashboardLoaderSrv';\nimport { DashboardSrv, getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\nimport { getTimeSrv, TimeSrv } from 'app/features/dashboard/services/TimeSrv';\nimport { dashboardWatcher } from 'app/features/live/dashboard/dashboardWatcher';\nimport { toStateKey } from 'app/features/variables/utils';\nimport { DashboardDTO, DashboardInitPhase, DashboardRoutes, StoreState, ThunkDispatch, ThunkResult } from 'app/types';\n\nimport { createDashboardQueryRunner } from '../../query/state/DashboardQueryRunner/DashboardQueryRunner';\nimport { initVariablesTransaction } from '../../variables/state/actions';\nimport { getIfExistsLastKey } from '../../variables/state/selectors';\n\nimport { DashboardModel } from './DashboardModel';\nimport { PanelModel } from './PanelModel';\nimport { emitDashboardViewEvent } from './analyticsProcessor';\nimport { dashboardInitCompleted, dashboardInitFailed, dashboardInitFetching, dashboardInitServices } from './reducers';\n\nexport interface InitDashboardArgs {\n urlUid?: string;\n urlSlug?: string;\n urlType?: string;\n urlFolderId?: string;\n panelType?: string;\n accessToken?: string;\n routeName?: string;\n fixUrl: boolean;\n}\n\nasync function fetchDashboard(\n args: InitDashboardArgs,\n dispatch: ThunkDispatch,\n getState: () => StoreState\n): Promise {\n // When creating new or adding panels to a dashboard from explore we load it from local storage\n const model = store.getObject(DASHBOARD_FROM_LS_KEY);\n if (model) {\n removeDashboardToFetchFromLocalStorage();\n return model;\n }\n\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.Public: {\n return await dashboardLoaderSrv.loadDashboard('public', args.urlSlug, args.accessToken);\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, args.panelType);\n }\n case DashboardRoutes.Path: {\n const path = args.urlSlug ?? '';\n return await dashboardLoaderSrv.loadDashboard(DashboardRoutes.Path, path, path);\n }\n default:\n throw { message: 'Unknown route ' + args.routeName };\n }\n } catch (err) {\n // Ignore cancelled errors\n if (isFetchError(err) && 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\nconst getQueriesByDatasource = (\n panels: PanelModel[],\n queries: { [datasourceId: string]: DataQuery[] } = {}\n): { [datasourceId: string]: DataQuery[] } => {\n panels.forEach((panel) => {\n if (panel.panels) {\n getQueriesByDatasource(panel.panels, queries);\n } else if (panel.targets) {\n panel.targets.forEach((target) => {\n if (target.datasource?.type) {\n if (queries[target.datasource.type]) {\n queries[target.datasource.type].push(target);\n } else {\n queries[target.datasource.type] = [target];\n }\n }\n });\n }\n });\n return queries;\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 // 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 const dashboardUid = toStateKey(args.urlUid ?? dashboard.uid);\n // template values service needs to initialize completely before the rest of the dashboard can load\n await dispatch(initVariablesTransaction(dashboardUid, 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 (getIfExistsLastKey(getState()) !== dashboardUid) {\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 if (err instanceof Error) {\n dispatch(notifyApp(createErrorNotification('Dashboard init failed', err)));\n }\n console.error(err);\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 // Propagate an app-wide event about the dashboard being loaded\n appEvents.publish(\n new DashboardLoadedEvent({\n dashboardId: dashboard.uid,\n orgId: storeState.user.orgId,\n userId: storeState.user.user?.id,\n grafanaVersion: config.buildInfo.version,\n queries: getQueriesByDatasource(dashboard.panels),\n })\n );\n\n // yay we are done\n dispatch(dashboardInitCompleted(dashboard));\n };\n}\n\nexport function getNewDashboardModelData(urlFolderId?: string, panelType?: string): any {\n const data = {\n meta: {\n canStar: false,\n canShare: false,\n canDelete: false,\n isNew: true,\n folderId: 0,\n },\n dashboard: {\n title: 'New dashboard',\n panels: [\n {\n type: panelType ?? '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\nconst DASHBOARD_FROM_LS_KEY = 'DASHBOARD_FROM_LS_KEY';\n\nexport function setDashboardToFetchFromLocalStorage(model: DashboardDTO) {\n store.setObject(DASHBOARD_FROM_LS_KEY, model);\n}\n\nexport function removeDashboardToFetchFromLocalStorage() {\n store.delete(DASHBOARD_FROM_LS_KEY);\n}\n","import { reportMetaAnalytics, MetaAnalyticsEventName, DashboardViewEventPayload } from '@grafana/runtime';\n\nimport { DashboardModel } from './DashboardModel';\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","import { applyFieldOverrides, ArrayDataFrame, getDefaultTimeRange, LoadingState, PanelData } from '@grafana/data';\nimport { config } from 'app/core/config';\n\nimport { SnapshotWorker } from '../../query/state/DashboardQueryRunner/SnapshotWorker';\nimport { getProcessedDataFrames } from '../../query/state/runRequest';\nimport { getTimeSrv } from '../services/TimeSrv';\nimport { DashboardModel, PanelModel } from '../state';\n\nimport { applyPanelTimeOverrides } from './panel';\n\nexport function loadSnapshotData(panel: PanelModel, dashboard: DashboardModel): PanelData {\n const data = getProcessedDataFrames(panel.snapshotData);\n const worker = new SnapshotWorker();\n const options = { dashboard, range: getDefaultTimeRange() };\n const annotationEvents = worker.canWork(options) ? worker.getAnnotationsInSnapshot(dashboard, panel.id) : [];\n const annotations = [new ArrayDataFrame(annotationEvents)];\n const timeData = applyPanelTimeOverrides(panel, getTimeSrv().timeRange());\n\n return {\n timeRange: timeData.timeRange,\n state: LoadingState.Done,\n series: applyFieldOverrides({\n data,\n fieldConfig: {\n defaults: {},\n overrides: [],\n },\n replaceVariables: panel.replaceVariables,\n fieldConfigRegistry: panel.plugin!.fieldConfigRegistry,\n theme: config.theme2,\n timeZone: dashboard.getTimezone(),\n }),\n annotations,\n };\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 {\n DataLink,\n DisplayValue,\n FieldDisplay,\n formattedValueToString,\n getFieldDisplayValuesProxy,\n getTimeField,\n InterpolateFunction,\n Labels,\n LinkModelSupplier,\n ScopedVar,\n ScopedVars,\n} from '@grafana/data';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\n\nimport { getLinkSrv } from './link_srv';\n\ninterface SeriesVars {\n name?: string;\n refId?: string;\n}\n\ninterface FieldVars {\n name: string;\n labels?: Labels;\n}\n\ninterface ValueVars {\n raw: any;\n numeric: number;\n text: string;\n time?: number;\n calc?: string;\n}\n\ninterface DataViewVars {\n name?: string;\n refId?: string;\n fields?: Record;\n}\n\ninterface DataLinkScopedVars extends ScopedVars {\n __series: ScopedVar;\n __field: ScopedVar;\n __value: ScopedVar;\n __data: ScopedVar;\n}\n\n/**\n * Link suppliers creates link models based on a link origin\n */\nexport const getFieldLinksSupplier = (value: FieldDisplay): LinkModelSupplier | undefined => {\n const links = value.field.links;\n if (!links || links.length === 0) {\n return undefined;\n }\n\n return {\n getLinks: (replaceVariables: InterpolateFunction) => {\n const scopedVars: Partial = {};\n\n if (value.view) {\n const { dataFrame } = value.view;\n\n scopedVars['__series'] = {\n value: {\n name: dataFrame.name,\n refId: dataFrame.refId,\n },\n text: 'Series',\n };\n\n const field = value.colIndex !== undefined ? dataFrame.fields[value.colIndex] : undefined;\n\n if (field) {\n scopedVars['__field'] = {\n value: {\n name: field.name,\n labels: field.labels,\n },\n text: 'Field',\n };\n\n if (value.rowIndex !== undefined && value.rowIndex >= 0) {\n const { timeField } = getTimeField(dataFrame);\n scopedVars['__value'] = {\n value: {\n raw: field.values.get(value.rowIndex),\n numeric: value.display.numeric,\n text: formattedValueToString(value.display),\n time: timeField ? timeField.values.get(value.rowIndex) : undefined,\n },\n text: 'Value',\n };\n }\n\n // Expose other values on the row\n if (value.view) {\n scopedVars['__data'] = {\n value: {\n name: dataFrame.name,\n refId: dataFrame.refId,\n fields: getFieldDisplayValuesProxy({\n frame: dataFrame,\n rowIndex: value.rowIndex!,\n }),\n },\n text: 'Data',\n };\n }\n } else {\n // calculation\n scopedVars['__value'] = {\n value: {\n raw: value.display.numeric,\n numeric: value.display.numeric,\n text: formattedValueToString(value.display),\n calc: value.name,\n },\n text: 'Value',\n };\n }\n } else {\n console.log('VALUE', value);\n }\n\n const replace: InterpolateFunction = (value: string, vars: ScopedVars | undefined, fmt?: string | Function) => {\n const finalVars: ScopedVars = {\n ...(scopedVars as ScopedVars),\n ...vars,\n };\n return replaceVariables(value, finalVars, fmt);\n };\n\n return links.map((link: DataLink) => {\n return getLinkSrv().getDataLinkUIModel(link, replace, value);\n });\n },\n };\n};\n\nexport const getPanelLinksSupplier = (panel: PanelModel): LinkModelSupplier | undefined => {\n const links = panel.links;\n\n if (!links || links.length === 0) {\n return undefined;\n }\n\n return {\n getLinks: () => {\n return links.map((link) => {\n return getLinkSrv().getDataLinkUIModel(link, panel.replaceVariables, panel);\n });\n },\n };\n};\n","import { PanelModel } from 'app/features/dashboard/state';\nimport { StoreState } from 'app/types';\n\nimport { PanelState } from './reducers';\n\nexport function getPanelStateForModel(state: StoreState, model: PanelModel): PanelState | undefined {\n return state.panels[model.key];\n}\n"],"names":["LazyLoader","children","width","height","onLoad","onChange","id","useUniqueId","loaded","setLoaded","useState","isInView","setIsInView","wrapperRef","useRef","useEffectOnce","addCallback","entry","isIntersecting","wrapperEl","current","observer","observe","callbacks","unobserve","Object","keys","length","disconnect","ref","style","c","IntersectionObserver","entries","target","rootMargin","createOverride","label","color","matcher","FieldMatcherID","options","properties","createProperty","value","mode","FieldColorModeId","fixedColor","isSoloRoute","path","test","toLowerCase","PanelHeaderLoadingIndicator","state","onClick","styles","useStyles","getStyles","LoadingState","className","Tooltip","content","Icon","name","title","streamIndicator","theme","css","colors","textFaint","PanelHeaderMenuTrigger","divProps","clickCoordinates","setClickCoordinates","x","y","panelMenuOpen","setPanelMenuOpen","onMenuToggle","useCallback","event","clicked","eventToClickCoordinates","onMouseDown","closeMenu","Math","floor","clientX","clientY","PanelHeaderMenu","PureComponent","menu","isSubMenu","role","map","menuItem","idx","PanelHeaderMenuItem","type","text","iconClassName","shortcut","subMenu","renderItems","render","this","props","items","PanelHeaderMenuProvider","panel","dashboard","setItems","angularComponent","useSelector","getPanelStateForModel","useEffect","onViewPanel","preventDefault","locationService","viewPanel","onEditPanel","editPanel","onAddLibraryPanel","addLibraryPanel","onUnlinkLibraryPanel","unlinkLibraryPanel","onInspectPanel","tab","inspect","inspectTab","onMore","onDuplicatePanel","duplicatePanel","onCopyPanel","copyPanel","onRemovePanel","removePanel","onNavigateToExplore","openInNewWindow","ctrlKey","metaKey","url","window","open","config","undefined","store","navigateToExplore","getDataSourceSrv","getTimeSrv","getExploreUrl","isEditing","viewTextTranslation","push","canEditPanel","shareTextTranslation","sharePanel","contextSrv","plugin","meta","skipDataQuery","legend","showLegend","toggleLegend","inspectMenu","dataTextTranslation","e","canEdit","jsonTextTranslation","inspectTextTranslation","isViewing","isPanelModelLibraryPanel","scope","getScope","panelCtrl","$$childHead","ctrl","angularMenuItems","getExtendedMenu","item","reactItem","href","click","$eval","moreTextTranslation","getPanelMenu","PanelHeaderMenuWrapper","PanelHeaderNotice","notice","iconName","severity","marginRight","link","rel","PanelHeaderNotices","frames","panelId","openInspect","stopPropagation","notices","frame","values","PanelHeader","error","data","alertState","getDisplayTitle","cx","useStyles2","panelStyles","getQueryRunner","cancelQuery","PanelHeaderCorner","description","scopedVars","links","getPanelLinksSupplier","selectors","ClickOutsideWrapper","parent","document","series","size","titleText","publicDashboardAccessToken","onClose","request","timeInfo","typography","fontWeightMedium","body","fontSize","primary","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","sortDesc","sortBy","onOptionsChange","refreshWhenInView","timeData","applyPanelTimeOverrides","timeSrv","timeRange","wantsQueryExecution","runAllPanelQueries","getTimezone","renderCounter","liveTime","stateUpdate","updateOptions","updateFieldConfig","errorMessage","message","async","isRegion","to","anno","dashboardUID","uid","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","onToggleLegendSort","canAddAnnotations","bind","canEditAnnotations","canDeleteAnnotations","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","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","mapDispatchToProps","PanelChromeAngular","connect","initPanelState","setPanelInstanceState","connector","panelState","panels","stateKey","DashboardPanelUnconnected","v","lazy","onPanelLoad","renderPanelChrome","angularPanelCtrl","onVisibilityChange","DashboardPanel","InfoMode","Component","Error","Info","Links","markdown","interpolatedMarkdown","getTemplateSrv","replace","markedInterpolatedMarkdown","renderMarkdown","getLinks","dangerouslySetInnerHTML","__html","InspectTab","renderCornerType","infoMode","ariaLabel","placement","interactive","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","getQueriesByDatasource","queries","forEach","targets","datasource","initDashboard","args","dispatch","getState","dashboardInitFetching","dashDTO","model","DASHBOARD_FROM_LS_KEY","removeDashboardToFetchFromLocalStorage","routeName","DashboardRoutes","backendSrv","redirectUri","newUrl","locationUtil","canSave","canShare","canStar","dashboardLoaderSrv","urlSlug","accessToken","urlType","urlUid","fixUrl","dashboardUrl","currentPath","getNewDashboardModelData","urlFolderId","panelType","err","isFetchError","cancelled","dashboardInitFailed","fetchDashboard","dashboardInitServices","DashboardModel","storeState","queryParams","orgId","user","getDashboardSrv","setCurrent","init","dashboardUid","toStateKey","initVariablesTransaction","createDashboardQueryRunner","getIfExistsLastKey","initPhase","DashboardInitPhase","processRepeats","autofitpanels","autoFitPanels","innerHeight","kiosk","keybindingSrv","notifyApp","createErrorNotification","eventData","dashboardId","dashboardName","folderName","folderTitle","eventName","MetaAnalyticsEventName","reportMetaAnalytics","emitDashboardViewEvent","dashboardWatcher","weekStart","setWeekStart","appEvents","DashboardLoadedEvent","userId","grafanaVersion","dashboardInitCompleted","canDelete","isNew","folderId","gridPos","w","h","parseInt","setDashboardToFetchFromLocalStorage","getProcessedDataFrames","worker","SnapshotWorker","annotationEvents","canWork","getAnnotationsInSnapshot","annotations","ArrayDataFrame","applyFieldOverrides","defaults","fieldConfigRegistry","getFieldLinksSupplier","view","dataFrame","refId","colIndex","labels","rowIndex","timeField","getTimeField","raw","get","numeric","display","formattedValueToString","getFieldDisplayValuesProxy","calc","vars","fmt","finalVars","getLinkSrv","getDataLinkUIModel"],"sourceRoot":""}