{"version":3,"file":"1361.ab4ae426fe963d8ccfbc.js","mappings":"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","sources":["webpack://grafana/./public/app/features/plugins/angularDeprecation/AngularDeprecationPluginNotice.tsx","webpack://grafana/./public/app/core/components/PluginHelp/PluginHelp.tsx","webpack://grafana/./public/app/features/query/state/updateQueries.ts","webpack://grafana/./public/app/features/query/components/QueryGroupOptions.tsx","webpack://grafana/./public/app/features/query/components/QueryGroup.tsx"],"sourcesContent":["import React, { useState } from 'react';\n\nimport { PluginType } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Alert } from '@grafana/ui';\n\ntype Props = {\n className?: string;\n\n pluginId?: string;\n pluginType?: PluginType;\n\n angularSupportEnabled?: boolean;\n showPluginDetailsLink?: boolean;\n\n interactionElementId?: string;\n};\n\nfunction deprecationMessage(pluginType?: string, angularSupportEnabled?: boolean): string {\n let pluginTypeString: string;\n switch (pluginType) {\n case PluginType.app:\n pluginTypeString = 'app plugin';\n break;\n case PluginType.panel:\n pluginTypeString = 'panel plugin';\n break;\n case PluginType.datasource:\n pluginTypeString = 'data source plugin';\n break;\n default:\n pluginTypeString = 'plugin';\n }\n let msg = `This ${pluginTypeString} uses a deprecated, legacy platform based on AngularJS and `;\n if (angularSupportEnabled === undefined) {\n return msg + ' may be incompatible depending on your Grafana configuration.';\n }\n if (angularSupportEnabled) {\n return msg + ' will stop working in future releases of Grafana.';\n }\n return msg + ' is incompatible with your current Grafana configuration.';\n}\n\n// An Alert showing information about Angular deprecation notice.\n// If the plugin does not use Angular (!plugin.angularDetected), it returns null.\nexport function AngularDeprecationPluginNotice(props: Props): React.ReactElement | null {\n const { className, angularSupportEnabled, pluginId, pluginType, showPluginDetailsLink, interactionElementId } = props;\n const [dismissed, setDismissed] = useState(false);\n\n const interactionAttributes: Record = {};\n if (pluginId) {\n interactionAttributes.pluginId = pluginId;\n }\n if (interactionElementId) {\n interactionAttributes.elementId = interactionElementId;\n }\n\n return dismissed ? null : (\n setDismissed(true)}>\n

{deprecationMessage(pluginType, angularSupportEnabled)}

\n
\n
    \n
  • \n {\n reportInteraction('angular_deprecation_docs_clicked', interactionAttributes);\n }}\n >\n Read our deprecation notice and migration advice.\n \n
  • \n {showPluginDetailsLink && pluginId ? (\n
  • \n \n View plugin details\n \n
  • \n ) : null}\n
\n
\n
\n );\n}\n","import React from 'react';\nimport { useAsync } from 'react-use';\n\nimport { renderMarkdown } from '@grafana/data';\nimport { getBackendSrv } from '@grafana/runtime';\nimport { LoadingPlaceholder } from '@grafana/ui';\n\ninterface Props {\n pluginId: string;\n}\n\nexport function PluginHelp({ pluginId }: Props) {\n const { value, loading, error } = useAsync(async () => {\n return getBackendSrv().get(`/api/plugins/${pluginId}/markdown/query_help`);\n }, []);\n\n const renderedMarkdown = renderMarkdown(value);\n\n if (loading) {\n return ;\n }\n\n if (error) {\n return

An error occurred when loading help.

;\n }\n\n if (value === '') {\n return

No query help could be found.

;\n }\n\n return
;\n}\n","import { CoreApp, DataSourceApi, hasQueryExportSupport, hasQueryImportSupport } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { isExpressionReference } from '@grafana/runtime/src/utils/DataSourceWithBackend';\nimport { DataQuery } from '@grafana/schema';\nimport { getNextRefIdChar } from 'app/core/utils/query';\n\nexport async function updateQueries(\n nextDS: DataSourceApi,\n nextDSUidOrVariableExpression: string,\n queries: DataQuery[],\n currentDS?: DataSourceApi\n): Promise {\n let nextQueries = queries;\n const datasource = { type: nextDS.type, uid: nextDSUidOrVariableExpression };\n const DEFAULT_QUERY = { ...nextDS?.getDefaultQuery?.(CoreApp.PanelEditor), datasource, refId: 'A' };\n\n // we are changing data source type\n if (currentDS?.meta.id !== nextDS.meta.id) {\n // If changing to mixed do nothing\n if (nextDS.meta.mixed) {\n return queries;\n }\n // when both data sources support abstract queries\n else if (hasQueryExportSupport(currentDS) && hasQueryImportSupport(nextDS)) {\n const abstractQueries = await currentDS.exportToAbstractQueries(queries);\n nextQueries = await nextDS.importFromAbstractQueries(abstractQueries);\n }\n // when datasource supports query import\n else if (currentDS && nextDS.importQueries) {\n nextQueries = await nextDS.importQueries(queries, currentDS);\n }\n // Otherwise clear queries that do not match the next datasource UID\n else {\n if (currentDS) {\n const templateSrv = getTemplateSrv();\n const reducedQueries: DataQuery[] = [];\n let nextUid = nextDS.uid;\n const nextIsTemplate = templateSrv.containsTemplate(nextDSUidOrVariableExpression);\n if (nextIsTemplate) {\n nextUid = templateSrv.replace(nextDS.uid);\n }\n // Queries will only be preserved if the datasource UID of the query matches the UID\n // of the next chosen datasource\n const nextDsQueries = queries.reduce((reduced, currentQuery) => {\n if (currentQuery.datasource) {\n let currUid = currentQuery.datasource.uid;\n const currIsTemplate = templateSrv.containsTemplate(currUid);\n if (currIsTemplate) {\n currUid = templateSrv.replace(currentQuery.datasource.uid);\n }\n if (currUid === nextUid && currIsTemplate === nextIsTemplate) {\n currentQuery.refId = getNextRefIdChar(reduced);\n return reduced.concat([currentQuery]);\n }\n }\n return reduced;\n }, reducedQueries);\n\n if (nextDsQueries.length > 0) {\n return nextDsQueries;\n }\n }\n\n return [DEFAULT_QUERY];\n }\n }\n\n if (nextQueries.length === 0) {\n return [DEFAULT_QUERY];\n }\n\n // Set data source on all queries except expression queries\n return nextQueries.map((query) => {\n if (!isExpressionReference(query.datasource) && !nextDS.meta.mixed) {\n query.datasource = datasource;\n }\n return query;\n });\n}\n","import { css } from '@emotion/css';\nimport React, { PureComponent, ChangeEvent, FocusEvent } from 'react';\n\nimport { rangeUtil, PanelData, DataSourceApi } from '@grafana/data';\nimport { Switch, Input, InlineFormLabel, stylesFactory } from '@grafana/ui';\nimport { QueryOperationRow } from 'app/core/components/QueryOperationRow/QueryOperationRow';\nimport { config } from 'app/core/config';\nimport { QueryGroupOptions } from 'app/types';\n\ninterface Props {\n options: QueryGroupOptions;\n dataSource: DataSourceApi;\n data: PanelData;\n onChange: (options: QueryGroupOptions) => void;\n}\n\ninterface State {\n timeRangeFrom: string;\n timeRangeShift: string;\n timeRangeHide: boolean;\n isOpen: boolean;\n relativeTimeIsValid: boolean;\n timeShiftIsValid: boolean;\n}\n\nexport class QueryGroupOptionsEditor extends PureComponent {\n constructor(props: Props) {\n super(props);\n\n const { options } = props;\n\n this.state = {\n timeRangeFrom: options.timeRange?.from || '',\n timeRangeShift: options.timeRange?.shift || '',\n timeRangeHide: options.timeRange?.hide ?? false,\n isOpen: false,\n relativeTimeIsValid: true,\n timeShiftIsValid: true,\n };\n }\n\n onRelativeTimeChange = (event: ChangeEvent) => {\n this.setState({\n timeRangeFrom: event.target.value,\n });\n };\n\n onTimeShiftChange = (event: ChangeEvent) => {\n this.setState({\n timeRangeShift: event.target.value,\n });\n };\n\n onOverrideTime = (event: FocusEvent) => {\n const { options, onChange } = this.props;\n\n const newValue = emptyToNull(event.target.value);\n const isValid = timeRangeValidation(newValue);\n\n if (isValid && options.timeRange?.from !== newValue) {\n onChange({\n ...options,\n timeRange: {\n ...(options.timeRange ?? {}),\n from: newValue,\n },\n });\n }\n\n this.setState({ relativeTimeIsValid: isValid });\n };\n\n onTimeShift = (event: FocusEvent) => {\n const { options, onChange } = this.props;\n\n const newValue = emptyToNull(event.target.value);\n const isValid = timeRangeValidation(newValue);\n\n if (isValid && options.timeRange?.shift !== newValue) {\n onChange({\n ...options,\n timeRange: {\n ...(options.timeRange ?? {}),\n shift: newValue,\n },\n });\n }\n\n this.setState({ timeShiftIsValid: isValid });\n };\n\n onToggleTimeOverride = () => {\n const { onChange, options } = this.props;\n\n this.setState({ timeRangeHide: !this.state.timeRangeHide }, () => {\n onChange({\n ...options,\n timeRange: {\n ...(options.timeRange ?? {}),\n hide: this.state.timeRangeHide,\n },\n });\n });\n };\n\n onCacheTimeoutBlur = (event: ChangeEvent) => {\n const { options, onChange } = this.props;\n onChange({\n ...options,\n cacheTimeout: emptyToNull(event.target.value),\n });\n };\n\n onQueryCachingTTLBlur = (event: ChangeEvent) => {\n const { options, onChange } = this.props;\n\n let ttl: number | null = parseInt(event.target.value, 10);\n\n if (isNaN(ttl) || ttl === 0) {\n ttl = null;\n }\n\n onChange({\n ...options,\n queryCachingTTL: ttl,\n });\n };\n\n onMaxDataPointsBlur = (event: ChangeEvent) => {\n const { options, onChange } = this.props;\n\n let maxDataPoints: number | null = parseInt(event.currentTarget.value, 10);\n\n if (isNaN(maxDataPoints) || maxDataPoints === 0) {\n maxDataPoints = null;\n }\n\n if (maxDataPoints !== options.maxDataPoints) {\n onChange({\n ...options,\n maxDataPoints,\n });\n }\n };\n\n onMinIntervalBlur = (event: ChangeEvent) => {\n const { options, onChange } = this.props;\n const minInterval = emptyToNull(event.target.value);\n if (minInterval !== options.minInterval) {\n onChange({\n ...options,\n minInterval,\n });\n }\n };\n\n renderCacheTimeoutOption() {\n const { dataSource, options } = this.props;\n\n const tooltip = `If your time series store has a query cache this option can override the default cache timeout. Specify a\n numeric value in seconds.`;\n\n if (!dataSource.meta.queryOptions?.cacheTimeout) {\n return null;\n }\n\n return (\n
\n
\n \n Cache timeout\n \n \n
\n
\n );\n }\n\n renderQueryCachingTTLOption() {\n const { dataSource, options } = this.props;\n\n const tooltip = `Cache time-to-live: How long results from this queries in this panel will be cached, in milliseconds. Defaults to the TTL in the caching configuration for this datasource.`;\n\n if (!dataSource.cachingConfig?.enabled) {\n return null;\n }\n\n return (\n
\n
\n \n Cache TTL\n \n \n
\n
\n );\n }\n\n renderMaxDataPointsOption() {\n const { data, options } = this.props;\n const realMd = data.request?.maxDataPoints;\n const value = options.maxDataPoints ?? '';\n const isAuto = value === '';\n\n return (\n
\n
\n \n The maximum data points per series. Used directly by some data sources and used in calculation of auto\n interval. With streaming data this value is used for the rolling buffer.\n \n }\n >\n Max data points\n \n \n {isAuto && (\n <>\n
=
\n
Width of panel
\n \n )}\n
\n
\n );\n }\n\n renderIntervalOption() {\n const { data, dataSource, options } = this.props;\n const realInterval = data.request?.interval;\n const minIntervalOnDs = dataSource.interval ?? 'No limit';\n\n return (\n <>\n
\n
\n \n A lower limit for the interval. Recommended to be set to write frequency, for example 1m{' '}\n if your data is written every minute. Default value can be set in data source settings for most data\n sources.\n \n }\n >\n Min interval\n \n \n
\n
\n
\n
\n \n The evaluated interval that is sent to data source and is used in $__interval and{' '}\n $__interval_ms. This value is not exactly equal to{' '}\n Time range / max data points, it will approximate a series of magic number.\n \n }\n >\n Interval\n \n {realInterval}\n
=
\n
Time range / max data points
\n
\n
\n \n );\n }\n\n onOpenOptions = () => {\n this.setState({ isOpen: true });\n };\n\n onCloseOptions = () => {\n this.setState({ isOpen: false });\n };\n\n renderCollapsedText(styles: StylesType): React.ReactNode | undefined {\n const { data, options } = this.props;\n const { isOpen } = this.state;\n\n if (isOpen) {\n return undefined;\n }\n\n let mdDesc = options.maxDataPoints ?? '';\n if (mdDesc === '' && data.request) {\n mdDesc = `auto = ${data.request.maxDataPoints}`;\n }\n\n let intervalDesc = options.minInterval;\n if (data.request) {\n intervalDesc = `${data.request.interval}`;\n }\n\n return (\n <>\n {
MD = {mdDesc}
}\n {
Interval = {intervalDesc}
}\n \n );\n }\n\n render() {\n const { timeRangeHide: hideTimeOverride, relativeTimeIsValid, timeShiftIsValid } = this.state;\n const { timeRangeFrom: relativeTime, timeRangeShift: timeShift, isOpen } = this.state;\n const styles = getStyles();\n\n return (\n \n {this.renderMaxDataPointsOption()}\n {this.renderIntervalOption()}\n {this.renderCacheTimeoutOption()}\n {this.renderQueryCachingTTLOption()}\n\n
\n \n Overrides the relative time range for individual panels, which causes them to be different than what is\n selected in the dashboard time picker in the top-right corner of the dashboard. For example to configure\n the Last 5 minutes the Relative time should be now-5m and 5m, or variables\n like $_relativeTime.\n \n }\n >\n Relative time\n \n \n
\n\n
\n \n Overrides the time range for individual panels by shifting its start and end relative to the time\n picker. For example to configure the Last 1h the Time shift should be now-1h and{' '}\n 1h, or variables like $_timeShift.\n \n }\n >\n Time shift\n \n \n
\n {(timeShift || relativeTime) && (\n
\n Hide time info\n \n
\n )}\n \n );\n }\n}\n\nconst timeRangeValidation = (value: string | null) => {\n if (!value) {\n return true;\n }\n\n return rangeUtil.isValidTimeSpan(value);\n};\n\nconst emptyToNull = (value: string) => {\n return value === '' ? null : value;\n};\n\nconst getStyles = stylesFactory(() => {\n const { theme } = config;\n\n return {\n collapsedText: css`\n margin-left: ${theme.spacing.md};\n font-size: ${theme.typography.size.sm};\n color: ${theme.colors.textWeak};\n `,\n };\n});\n\ntype StylesType = ReturnType;\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\nimport { Unsubscribable } from 'rxjs';\n\nimport {\n CoreApp,\n DataSourceApi,\n DataSourceInstanceSettings,\n getDefaultTimeRange,\n LoadingState,\n PanelData,\n PluginType,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { getDataSourceSrv, locationService } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport { Button, CustomScrollbar, HorizontalGroup, InlineFormLabel, Modal, stylesFactory } from '@grafana/ui';\nimport { PluginHelp } from 'app/core/components/PluginHelp/PluginHelp';\nimport config from 'app/core/config';\nimport { backendSrv } from 'app/core/services/backend_srv';\nimport { addQuery, queryIsEmpty } from 'app/core/utils/query';\nimport { DataSourceModal } from 'app/features/datasources/components/picker/DataSourceModal';\nimport { DataSourcePicker } from 'app/features/datasources/components/picker/DataSourcePicker';\nimport { dataSource as expressionDatasource } from 'app/features/expressions/ExpressionDatasource';\nimport { AngularDeprecationPluginNotice } from 'app/features/plugins/angularDeprecation/AngularDeprecationPluginNotice';\nimport { DashboardQueryEditor, isSharedDashboardQuery } from 'app/plugins/datasource/dashboard';\nimport { GrafanaQuery } from 'app/plugins/datasource/grafana/types';\nimport { QueryGroupOptions } from 'app/types';\n\nimport { isAngularDatasourcePlugin } from '../../plugins/angularDeprecation/utils';\nimport { PanelQueryRunner } from '../state/PanelQueryRunner';\nimport { updateQueries } from '../state/updateQueries';\n\nimport { GroupActionComponents } from './QueryActionComponent';\nimport { QueryEditorRows } from './QueryEditorRows';\nimport { QueryGroupOptionsEditor } from './QueryGroupOptions';\n\nexport interface Props {\n queryRunner: PanelQueryRunner;\n options: QueryGroupOptions;\n onOpenQueryInspector?: () => void;\n onRunQueries: () => void;\n onOptionsChange: (options: QueryGroupOptions) => void;\n}\n\ninterface State {\n dataSource?: DataSourceApi;\n dsSettings?: DataSourceInstanceSettings;\n queries: DataQuery[];\n helpContent: React.ReactNode;\n isLoadingHelp: boolean;\n isPickerOpen: boolean;\n isDataSourceModalOpen: boolean;\n data: PanelData;\n isHelpOpen: boolean;\n defaultDataSource?: DataSourceApi;\n scrollElement?: HTMLDivElement;\n}\n\nexport class QueryGroup extends PureComponent {\n backendSrv = backendSrv;\n dataSourceSrv = getDataSourceSrv();\n querySubscription: Unsubscribable | null = null;\n\n state: State = {\n isDataSourceModalOpen: !!locationService.getSearchObject().firstPanel,\n isLoadingHelp: false,\n helpContent: null,\n isPickerOpen: false,\n isHelpOpen: false,\n queries: [],\n data: {\n state: LoadingState.NotStarted,\n series: [],\n timeRange: getDefaultTimeRange(),\n },\n };\n\n async componentDidMount() {\n const { options, queryRunner } = this.props;\n\n this.querySubscription = queryRunner.getData({ withTransforms: false, withFieldConfig: false }).subscribe({\n next: (data: PanelData) => this.onPanelDataUpdate(data),\n });\n\n this.setNewQueriesAndDatasource(options);\n\n // Clean up the first panel flag since the modal is now open\n if (!!locationService.getSearchObject().firstPanel) {\n locationService.partial({ firstPanel: null }, true);\n }\n }\n\n componentWillUnmount() {\n if (this.querySubscription) {\n this.querySubscription.unsubscribe();\n this.querySubscription = null;\n }\n }\n\n async componentDidUpdate() {\n const { options } = this.props;\n\n const currentDS = await getDataSourceSrv().get(options.dataSource);\n if (this.state.dataSource && currentDS.uid !== this.state.dataSource?.uid) {\n this.setNewQueriesAndDatasource(options);\n }\n }\n\n async setNewQueriesAndDatasource(options: QueryGroupOptions) {\n try {\n const ds = await this.dataSourceSrv.get(options.dataSource);\n const dsSettings = this.dataSourceSrv.getInstanceSettings(options.dataSource);\n\n const defaultDataSource = await this.dataSourceSrv.get();\n const datasource = ds.getRef();\n const queries = options.queries.map((q) => ({\n ...(queryIsEmpty(q) && ds?.getDefaultQuery?.(CoreApp.PanelEditor)),\n datasource,\n ...q,\n }));\n\n this.setState({\n queries,\n dataSource: ds,\n dsSettings,\n defaultDataSource,\n });\n } catch (error) {\n console.log('failed to load data source', error);\n }\n }\n\n onPanelDataUpdate(data: PanelData) {\n this.setState({ data });\n }\n\n onChangeDataSource = async (\n newSettings: DataSourceInstanceSettings,\n defaultQueries?: DataQuery[] | GrafanaQuery[]\n ) => {\n const { dsSettings } = this.state;\n const currentDS = dsSettings ? await getDataSourceSrv().get(dsSettings.uid) : undefined;\n const nextDS = await getDataSourceSrv().get(newSettings.uid);\n\n // We need to pass in newSettings.uid as well here as that can be a variable expression and we want to store that in the query model not the current ds variable value\n const queries = defaultQueries || (await updateQueries(nextDS, newSettings.uid, this.state.queries, currentDS));\n\n const dataSource = await this.dataSourceSrv.get(newSettings.name);\n\n this.onChange({\n queries,\n dataSource: {\n name: newSettings.name,\n uid: newSettings.uid,\n type: newSettings.meta.id,\n default: newSettings.isDefault,\n },\n });\n\n this.setState({\n queries,\n dataSource: dataSource,\n dsSettings: newSettings,\n });\n\n if (defaultQueries) {\n this.props.onRunQueries();\n }\n };\n\n onAddQueryClick = () => {\n const { queries } = this.state;\n this.onQueriesChange(addQuery(queries, this.newQuery()));\n this.onScrollBottom();\n };\n\n newQuery(): Partial {\n const { dsSettings, defaultDataSource } = this.state;\n\n const ds = !dsSettings?.meta.mixed ? dsSettings : defaultDataSource;\n\n return {\n ...this.state.dataSource?.getDefaultQuery?.(CoreApp.PanelEditor),\n datasource: { uid: ds?.uid, type: ds?.type },\n };\n }\n\n onChange(changedProps: Partial) {\n this.props.onOptionsChange({\n ...this.props.options,\n ...changedProps,\n });\n }\n\n onAddExpressionClick = () => {\n this.onQueriesChange(addQuery(this.state.queries, expressionDatasource.newQuery()));\n this.onScrollBottom();\n };\n\n onScrollBottom = () => {\n setTimeout(() => {\n if (this.state.scrollElement) {\n this.state.scrollElement.scrollTo({ top: 10000 });\n }\n }, 20);\n };\n\n onUpdateAndRun = (options: QueryGroupOptions) => {\n this.props.onOptionsChange(options);\n this.props.onRunQueries();\n };\n\n renderTopSection(styles: QueriesTabStyles) {\n const { onOpenQueryInspector, options } = this.props;\n const { dataSource, data } = this.state;\n\n return (\n
\n
\n \n Data source\n \n
{this.renderDataSourcePickerWithPrompt()}
\n {dataSource && (\n <>\n
\n \n
\n
\n \n
\n {onOpenQueryInspector && (\n
\n \n Query inspector\n \n
\n )}\n \n )}\n
\n {dataSource && isAngularDatasourcePlugin(dataSource.uid) && (\n \n )}\n
\n );\n }\n\n onOpenHelp = () => {\n this.setState({ isHelpOpen: true });\n };\n\n onCloseHelp = () => {\n this.setState({ isHelpOpen: false });\n };\n\n onCloseDataSourceModal = () => {\n this.setState({ isDataSourceModalOpen: false });\n };\n\n renderDataSourcePickerWithPrompt = () => {\n const { isDataSourceModalOpen } = this.state;\n\n const commonProps = {\n metrics: true,\n mixed: true,\n dashboard: true,\n variables: true,\n current: this.props.options.dataSource,\n uploadFile: true,\n onChange: async (ds: DataSourceInstanceSettings, defaultQueries?: DataQuery[] | GrafanaQuery[]) => {\n await this.onChangeDataSource(ds, defaultQueries);\n this.onCloseDataSourceModal();\n },\n };\n\n return (\n <>\n {isDataSourceModalOpen && config.featureToggles.advancedDataSourcePicker && (\n \n )}\n \n \n );\n };\n\n onAddQuery = (query: Partial) => {\n const { dsSettings, queries } = this.state;\n this.onQueriesChange(addQuery(queries, query, { type: dsSettings?.type, uid: dsSettings?.uid }));\n this.onScrollBottom();\n };\n\n onQueriesChange = (queries: DataQuery[] | GrafanaQuery[]) => {\n this.onChange({ queries });\n this.setState({ queries });\n };\n\n renderQueries(dsSettings: DataSourceInstanceSettings) {\n const { onRunQueries } = this.props;\n const { data, queries } = this.state;\n if (isSharedDashboardQuery(dsSettings.name)) {\n return (\n \n );\n }\n\n return (\n
\n \n
\n );\n }\n\n isExpressionsSupported(dsSettings: DataSourceInstanceSettings): boolean {\n return (dsSettings.meta.alerting || dsSettings.meta.mixed) === true;\n }\n\n renderExtraActions() {\n return GroupActionComponents.getAllExtraRenderAction()\n .map((action, index) =>\n action({\n onAddQuery: this.onAddQuery,\n onChangeDataSource: this.onChangeDataSource,\n key: index,\n })\n )\n .filter(Boolean);\n }\n\n renderAddQueryRow(dsSettings: DataSourceInstanceSettings, styles: QueriesTabStyles) {\n const showAddButton = !isSharedDashboardQuery(dsSettings.name);\n\n return (\n \n {showAddButton && (\n \n Add query\n \n )}\n {config.expressionsEnabled && this.isExpressionsSupported(dsSettings) && (\n \n Expression \n \n )}\n {this.renderExtraActions()}\n \n );\n }\n\n setScrollRef = (scrollElement: HTMLDivElement): void => {\n this.setState({ scrollElement });\n };\n\n render() {\n const { isHelpOpen, dsSettings } = this.state;\n const styles = getStyles();\n\n return (\n \n
\n {this.renderTopSection(styles)}\n {dsSettings && (\n <>\n
{this.renderQueries(dsSettings)}
\n {this.renderAddQueryRow(dsSettings, styles)}\n {isHelpOpen && (\n \n \n \n )}\n \n )}\n
\n
\n );\n }\n}\n\nconst getStyles = stylesFactory(() => {\n const { theme } = config;\n\n return {\n innerWrapper: css`\n display: flex;\n flex-direction: column;\n padding: ${theme.spacing.md};\n `,\n dataSourceRow: css`\n display: flex;\n margin-bottom: ${theme.spacing.md};\n `,\n dataSourceRowItem: css`\n margin-right: ${theme.spacing.inlineFormMargin};\n `,\n dataSourceRowItemOptions: css`\n flex-grow: 1;\n margin-right: ${theme.spacing.inlineFormMargin};\n `,\n queriesWrapper: css`\n padding-bottom: 16px;\n `,\n expressionWrapper: css``,\n expressionButton: css`\n margin-right: ${theme.spacing.sm};\n `,\n };\n});\n\ntype QueriesTabStyles = ReturnType;\n"],"names":["deprecationMessage","pluginType","angularSupportEnabled","pluginTypeString","msg","AngularDeprecationPluginNotice","props","className","pluginId","showPluginDetailsLink","interactionElementId","dismissed","setDismissed","interactionAttributes","PluginHelp","value","loading","error","useAsync","renderedMarkdown","LoadingPlaceholder","updateQueries","nextDS","nextDSUidOrVariableExpression","queries","currentDS","nextQueries","datasource","DEFAULT_QUERY","abstractQueries","templateSrv","reducedQueries","nextUid","nextIsTemplate","nextDsQueries","reduced","currentQuery","currUid","currIsTemplate","query","QueryGroupOptionsEditor","event","options","onChange","newValue","emptyToNull","isValid","timeRangeValidation","ttl","maxDataPoints","minInterval","dataSource","tooltip","Input","data","realMd","isAuto","realInterval","minIntervalOnDs","styles","isOpen","mdDesc","intervalDesc","hideTimeOverride","relativeTimeIsValid","timeShiftIsValid","relativeTime","timeShift","getStyles","QueryOperationRow","Switch","stylesFactory","theme","config","QueryGroup","newSettings","defaultQueries","dsSettings","isDataSourceModalOpen","commonProps","ds","DataSourceModal","DataSourcePicker","scrollElement","queryRunner","defaultDataSource","q","changedProps","onOpenQueryInspector","Button","selectors","onRunQueries","QueryEditorRows","action","index","showAddButton","isHelpOpen","CustomScrollbar","Modal"],"sourceRoot":""}