{"version":3,"file":"8881.0dfd49f78dc93c695e30.js","mappings":"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","sources":["webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/Field.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/LogsQueryEditor/FormatAsField.tsx","webpack://grafana/./public/app/core/utils/deferred.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/LogsQueryEditor/QueryField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ResourcePicker/EntryIcon.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ResourcePicker/styles.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ResourcePicker/NestedEntry.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ResourcePicker/NestedRow.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ResourcePicker/ResourcePicker.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/LogsQueryEditor/ResourceField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/LogsQueryEditor/useMigrations.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/LogsQueryEditor/LogsQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/LogsQueryEditor/setQueryValue.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/setQueryValue.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/SubscriptionField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ArgQueryEditor/QueryField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ArgQueryEditor/ArgQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/AggregationField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/DimensionFields.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/LegendFormatField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/MetricNameField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/MetricNamespaceField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/ResourceGroupsField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/ResourceNameField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/ResourceTypeField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/TimeGrainField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/TopField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/dataHooks.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/MetricsQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/NewMetricsQueryEditor/MetricsQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/deprecated/components/ApplicationInsightsEditor/index.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/deprecated/components/InsightsAnalyticsEditor/index.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/QueryEditor/QueryTypeField.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/QueryEditor/usePreparedQuery.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/QueryEditor/QueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ResourcePicker/types.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ResourcePicker/utils.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/Space.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/components/deprecated/utils.tsx","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/time_grain_converter.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/types/query.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/types/types.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/utils/common.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/utils/migrateQuery.ts","webpack://grafana/./public/app/plugins/datasource/grafana-azure-monitor-datasource/utils/useLastError.ts","webpack://grafana/../../opt/drone/yarncache/immer-npm-9.0.12-e8cd7358fa-bcbec6d76d.zip/node_modules/immer/dist/immer.esm.js"],"sourcesContent":["import React from 'react';\n\nimport { InlineField } from '@grafana/ui';\nimport { Props as InlineFieldProps } from '@grafana/ui/src/components/Forms/InlineField';\n\nconst DEFAULT_LABEL_WIDTH = 18;\n\nexport const Field = (props: InlineFieldProps) => {\n  return <InlineField labelWidth={DEFAULT_LABEL_WIDTH} {...props} />;\n};\n","import React, { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps } from '../../types';\nimport { Field } from '../Field';\n\nimport { setFormatAs } from './setQueryValue';\n\nconst FORMAT_OPTIONS: Array<SelectableValue<string>> = [\n  { label: 'Time series', value: 'time_series' },\n  { label: 'Table', value: 'table' },\n];\n\nconst FormatAsField: React.FC<AzureQueryEditorFieldProps> = ({ query, variableOptionGroup, onQueryChange }) => {\n  const options = useMemo(() => [...FORMAT_OPTIONS, variableOptionGroup], [variableOptionGroup]);\n\n  const handleChange = useCallback(\n    (change: SelectableValue<string>) => {\n      const { value } = change;\n      if (!value) {\n        return;\n      }\n\n      const newQuery = setFormatAs(query, value);\n      onQueryChange(newQuery);\n    },\n    [onQueryChange, query]\n  );\n\n  return (\n    <Field label=\"Format as\">\n      <Select\n        menuShouldPortal\n        inputId=\"azure-monitor-logs-workspaces-field\"\n        value={query.azureLogAnalytics?.resultFormat}\n        onChange={handleChange}\n        options={options}\n        width={38}\n      />\n    </Field>\n  );\n};\n\nexport default FormatAsField;\n","export class Deferred<T = any> {\n  resolve?: (reason: T | PromiseLike<T>) => void;\n  reject?: (reason?: any) => void;\n  promise: Promise<T>;\n\n  constructor() {\n    this.resolve = undefined;\n    this.reject = undefined;\n\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = resolve;\n      this.reject = reject;\n    });\n    Object.freeze(this);\n  }\n}\n","import React, { useCallback, useEffect, useRef } from 'react';\n\nimport { CodeEditor, Monaco, MonacoEditor } from '@grafana/ui';\nimport { Deferred } from 'app/core/utils/deferred';\n\nimport { AzureQueryEditorFieldProps } from '../../types';\n\nimport { setKustoQuery } from './setQueryValue';\n\ninterface MonacoPromise {\n  editor: MonacoEditor;\n  monaco: Monaco;\n}\n\ninterface MonacoLanguages {\n  kusto: {\n    getKustoWorker: () => Promise<\n      (url: any) => Promise<{\n        setSchema: (schema: any, clusterUrl: string, name: string) => void;\n      }>\n    >;\n  };\n}\n\nconst QueryField: React.FC<AzureQueryEditorFieldProps> = ({ query, datasource, onQueryChange }) => {\n  const monacoPromiseRef = useRef<Deferred<MonacoPromise>>();\n  function getPromise() {\n    if (!monacoPromiseRef.current) {\n      monacoPromiseRef.current = new Deferred<MonacoPromise>();\n    }\n\n    return monacoPromiseRef.current.promise;\n  }\n\n  useEffect(() => {\n    if (!query.azureLogAnalytics?.resource) {\n      return;\n    }\n\n    const promises = [\n      datasource.azureLogAnalyticsDatasource.getKustoSchema(query.azureLogAnalytics.resource),\n      getPromise(),\n    ] as const;\n\n    // the kusto schema call might fail, but its okay for that to happen silently\n    Promise.all(promises).then(([schema, { monaco, editor }]) => {\n      const languages = monaco.languages as unknown as MonacoLanguages;\n\n      languages.kusto\n        .getKustoWorker()\n        .then((kusto) => {\n          const model = editor.getModel();\n          return model && kusto(model.uri);\n        })\n        .then((worker) => {\n          worker?.setSchema(schema, 'https://help.kusto.windows.net', 'Samples');\n        });\n    });\n  }, [datasource.azureLogAnalyticsDatasource, query.azureLogAnalytics?.resource]);\n\n  const handleEditorMount = useCallback((editor: MonacoEditor, monaco: Monaco) => {\n    monacoPromiseRef.current?.resolve?.({ editor, monaco });\n  }, []);\n\n  const onChange = useCallback(\n    (newQuery: string) => {\n      onQueryChange(setKustoQuery(query, newQuery));\n    },\n    [onQueryChange, query]\n  );\n\n  return (\n    <CodeEditor\n      value={query.azureLogAnalytics?.query ?? ''}\n      language=\"kusto\"\n      height={200}\n      width=\"100%\"\n      showMiniMap={false}\n      onBlur={onChange}\n      onSave={onChange}\n      onEditorDidMount={handleEditorMount}\n    />\n  );\n};\n\nexport default QueryField;\n","import React from 'react';\n\nimport { Icon } from '@grafana/ui';\n\nimport { ResourceRow, ResourceRowType } from './types';\n\ninterface EntryIconProps {\n  entry: ResourceRow;\n  isOpen: boolean;\n}\n\nexport const EntryIcon: React.FC<EntryIconProps> = ({ isOpen, entry: { type } }) => {\n  switch (type) {\n    case ResourceRowType.Subscription:\n      return <Icon name=\"layer-group\" />;\n\n    case ResourceRowType.ResourceGroup:\n      return <Icon name={isOpen ? 'folder-open' : 'folder'} />;\n\n    case ResourceRowType.Resource:\n      return <Icon name=\"cube\" />;\n\n    case ResourceRowType.VariableGroup:\n      return <Icon name=\"x\" />;\n\n    case ResourceRowType.Variable:\n      return <Icon name=\"x\" />;\n\n    default:\n      return null;\n  }\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n  table: css({\n    width: '100%',\n    tableLayout: 'fixed',\n  }),\n\n  tableScroller: css({\n    maxHeight: '50vh',\n    overflow: 'auto',\n  }),\n\n  header: css({\n    background: theme.colors.background.secondary,\n  }),\n\n  row: css({\n    borderBottom: `1px solid ${theme.colors.border.weak}`,\n\n    '&:last-of-type': {\n      borderBottomColor: theme.colors.border.medium,\n    },\n  }),\n\n  disabledRow: css({\n    opacity: 0.5,\n  }),\n\n  cell: css({\n    padding: theme.spacing(1, 1, 1, 0),\n    width: '25%',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    '&:first-of-type': {\n      width: '50%',\n      padding: theme.spacing(1, 1, 1, 2),\n    },\n  }),\n\n  collapseButton: css({ margin: 0 }),\n\n  loadingCell: css({\n    textAlign: 'center',\n  }),\n\n  spinner: css({\n    marginBottom: 0,\n  }),\n\n  nestedEntry: css({\n    display: 'flex',\n    alignItems: 'center',\n  }),\n\n  entryContentItem: css({\n    margin: theme.spacing(0, 1, 0, 0),\n  }),\n\n  truncated: css({\n    minWidth: 0,\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n  }),\n\n  nestedRowCheckbox: css({\n    zIndex: 0,\n  }),\n\n  selectionFooter: css({\n    position: 'sticky',\n    bottom: 0,\n    background: theme.colors.background.primary,\n    paddingTop: theme.spacing(2),\n  }),\n\n  loadingWrapper: css({\n    textAlign: 'center',\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n    color: theme.colors.text.secondary,\n  }),\n});\n\nexport default getStyles;\n","import { cx } from '@emotion/css';\nimport React, { useCallback, useEffect } from 'react';\n\nimport { Checkbox, IconButton, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport { Space } from '../Space';\n\nimport { EntryIcon } from './EntryIcon';\nimport getStyles from './styles';\nimport { ResourceRow } from './types';\n\ninterface NestedEntryProps {\n  level: number;\n  entry: ResourceRow;\n  isSelected: boolean;\n  isSelectable: boolean;\n  isOpen: boolean;\n  isDisabled: boolean;\n  scrollIntoView?: boolean;\n  onToggleCollapse: (row: ResourceRow) => void;\n  onSelectedChange: (row: ResourceRow, selected: boolean) => void;\n}\n\nexport const NestedEntry: React.FC<NestedEntryProps> = ({\n  entry,\n  isSelected,\n  isDisabled,\n  isOpen,\n  isSelectable,\n  scrollIntoView,\n  level,\n  onToggleCollapse,\n  onSelectedChange,\n}) => {\n  const theme = useTheme2();\n  const styles = useStyles2(getStyles);\n  const hasChildren = !!entry.children;\n\n  const handleToggleCollapse = useCallback(() => {\n    onToggleCollapse(entry);\n  }, [onToggleCollapse, entry]);\n\n  const handleSelectedChanged = useCallback(\n    (ev: React.ChangeEvent<HTMLInputElement>) => {\n      const isSelected = ev.target.checked;\n      onSelectedChange(entry, isSelected);\n    },\n    [entry, onSelectedChange]\n  );\n\n  const checkboxId = `${scrollIntoView ? 'table' : 'summary'}_checkbox_${entry.uri}`;\n\n  // Scroll to the selected element if it's not in the view\n  // Only do it once, when the component is mounted\n  useEffect(() => {\n    if (isSelected && scrollIntoView) {\n      document.getElementById(checkboxId)?.scrollIntoView({\n        behavior: 'smooth',\n        block: 'center',\n      });\n    }\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n  return (\n    <div className={styles.nestedEntry} style={{ marginLeft: level * (3 * theme.spacing.gridSize) }}>\n      {hasChildren ? (\n        <IconButton\n          className={styles.collapseButton}\n          name={isOpen ? 'angle-down' : 'angle-right'}\n          aria-label={isOpen ? `Collapse ${entry.name}` : `Expand ${entry.name}`}\n          onClick={handleToggleCollapse}\n          id={entry.id}\n        />\n      ) : (\n        <Space layout=\"inline\" h={2} />\n      )}\n\n      <Space layout=\"inline\" h={2} />\n\n      {isSelectable && (\n        <>\n          <Checkbox\n            id={checkboxId}\n            onChange={handleSelectedChanged}\n            disabled={isDisabled}\n            value={isSelected}\n            className={styles.nestedRowCheckbox}\n          />\n          <Space layout=\"inline\" h={2} />\n        </>\n      )}\n\n      <EntryIcon entry={entry} isOpen={isOpen} />\n      <Space layout=\"inline\" h={1} />\n\n      <label htmlFor={checkboxId} className={cx(styles.entryContentItem, styles.truncated)}>\n        {entry.name}\n      </label>\n    </div>\n  );\n};\n","import { cx } from '@emotion/css';\nimport React, { useEffect, useState } from 'react';\n\nimport { FadeTransition, LoadingPlaceholder, useStyles2 } from '@grafana/ui';\n\nimport { NestedEntry } from './NestedEntry';\nimport getStyles from './styles';\nimport { ResourceRow, ResourceRowGroup, ResourceRowType } from './types';\nimport { findRow } from './utils';\n\ninterface NestedRowProps {\n  row: ResourceRow;\n  level: number;\n  selectedRows: ResourceRowGroup;\n  requestNestedRows: (row: ResourceRow) => Promise<void>;\n  onRowSelectedChange: (row: ResourceRow, selected: boolean) => void;\n  selectableEntryTypes: ResourceRowType[];\n  scrollIntoView?: boolean;\n}\n\nconst NestedRow: React.FC<NestedRowProps> = ({\n  row,\n  selectedRows,\n  level,\n  requestNestedRows,\n  onRowSelectedChange,\n  selectableEntryTypes,\n  scrollIntoView,\n}) => {\n  const styles = useStyles2(getStyles);\n  const [rowStatus, setRowStatus] = useState<'open' | 'closed' | 'loading'>('closed');\n\n  const isSelected = !!selectedRows.find((v) => v.uri === row.uri);\n  const isDisabled = selectedRows.length > 0 && !isSelected;\n  const isOpen = rowStatus === 'open';\n\n  const onRowToggleCollapse = async () => {\n    if (rowStatus === 'open') {\n      setRowStatus('closed');\n      return;\n    }\n    setRowStatus('loading');\n    requestNestedRows(row)\n      .then(() => setRowStatus('open'))\n      .catch(() => setRowStatus('closed'));\n  };\n\n  // opens the resource group on load of component if there was a previously saved selection\n  useEffect(() => {\n    // Assuming we don't have multi-select yet\n    const selectedRow = selectedRows[0];\n\n    const containsChild = selectedRow && !!findRow(row.children ?? [], selectedRow.uri);\n\n    if (containsChild) {\n      setRowStatus('open');\n    }\n  }, [selectedRows, row]);\n\n  return (\n    <>\n      <tr className={cx(styles.row, isDisabled && styles.disabledRow)} key={row.id}>\n        <td className={styles.cell}>\n          <NestedEntry\n            level={level}\n            isSelected={isSelected}\n            isDisabled={isDisabled}\n            isOpen={isOpen}\n            entry={row}\n            onToggleCollapse={onRowToggleCollapse}\n            onSelectedChange={onRowSelectedChange}\n            isSelectable={selectableEntryTypes.some((type) => type === row.type)}\n            scrollIntoView={scrollIntoView}\n          />\n        </td>\n\n        <td className={styles.cell}>{row.typeLabel}</td>\n\n        <td className={styles.cell}>{row.location ?? '-'}</td>\n      </tr>\n\n      {isOpen &&\n        row.children &&\n        Object.keys(row.children).length > 0 &&\n        row.children.map((childRow) => (\n          <NestedRow\n            key={childRow.uri}\n            row={childRow}\n            selectedRows={selectedRows}\n            level={level + 1}\n            requestNestedRows={requestNestedRows}\n            onRowSelectedChange={onRowSelectedChange}\n            selectableEntryTypes={selectableEntryTypes}\n            scrollIntoView={scrollIntoView}\n          />\n        ))}\n\n      <FadeTransition visible={rowStatus === 'loading'}>\n        <tr>\n          <td className={cx(styles.cell, styles.loadingCell)} colSpan={3}>\n            <LoadingPlaceholder text=\"Loading...\" className={styles.spinner} />\n          </td>\n        </tr>\n      </FadeTransition>\n    </>\n  );\n};\n\nexport default NestedRow;\n","import { cx } from '@emotion/css';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Alert, Button, Icon, Input, LoadingPlaceholder, Tooltip, useStyles2, Collapse, Label } from '@grafana/ui';\n\nimport ResourcePickerData from '../../resourcePicker/resourcePickerData';\nimport messageFromError from '../../utils/messageFromError';\nimport { Space } from '../Space';\n\nimport NestedRow from './NestedRow';\nimport getStyles from './styles';\nimport { ResourceRow, ResourceRowGroup, ResourceRowType } from './types';\nimport { addResources, findRow, parseResourceURI } from './utils';\n\ninterface ResourcePickerProps {\n  resourcePickerData: ResourcePickerData;\n  resourceURI: string | undefined;\n  selectableEntryTypes: ResourceRowType[];\n\n  onApply: (resourceURI: string | undefined) => void;\n  onCancel: () => void;\n}\n\nconst ResourcePicker = ({\n  resourcePickerData,\n  resourceURI,\n  onApply,\n  onCancel,\n  selectableEntryTypes,\n}: ResourcePickerProps) => {\n  const styles = useStyles2(getStyles);\n\n  type LoadingStatus = 'NotStarted' | 'Started' | 'Done';\n  const [loadingStatus, setLoadingStatus] = useState<LoadingStatus>('NotStarted');\n  const [azureRows, setAzureRows] = useState<ResourceRowGroup>([]);\n  const [internalSelectedURI, setInternalSelectedURI] = useState<string | undefined>(resourceURI);\n  const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n  const [isAdvancedOpen, setIsAdvancedOpen] = useState(resourceURI?.includes('$'));\n  // Sync the resourceURI prop to internal state\n  useEffect(() => {\n    setInternalSelectedURI(resourceURI);\n  }, [resourceURI]);\n\n  // Request initial data on first mount\n  useEffect(() => {\n    if (loadingStatus === 'NotStarted') {\n      const loadInitialData = async () => {\n        try {\n          setLoadingStatus('Started');\n          let resources = await resourcePickerData.getSubscriptions();\n          if (!internalSelectedURI) {\n            setAzureRows(resources);\n            setLoadingStatus('Done');\n            return;\n          }\n\n          const parsedURI = parseResourceURI(internalSelectedURI ?? '');\n          if (parsedURI) {\n            const resourceGroupURI = `/subscriptions/${parsedURI.subscriptionID}/resourceGroups/${parsedURI.resourceGroup}`;\n\n            // if a resource group was previously selected, but the resource groups under the parent subscription have not been loaded yet\n            if (parsedURI.resourceGroup && !findRow(resources, resourceGroupURI)) {\n              const resourceGroups = await resourcePickerData.getResourceGroupsBySubscriptionId(\n                parsedURI.subscriptionID\n              );\n              resources = addResources(resources, `/subscriptions/${parsedURI.subscriptionID}`, resourceGroups);\n            }\n\n            // if a resource was previously selected, but the resources under the parent resource group have not been loaded yet\n            if (parsedURI.resource && !findRow(azureRows, parsedURI.resource ?? '')) {\n              const resourcesForResourceGroup = await resourcePickerData.getResourcesForResourceGroup(resourceGroupURI);\n              resources = addResources(resources, resourceGroupURI, resourcesForResourceGroup);\n            }\n          }\n          setAzureRows(resources);\n          setLoadingStatus('Done');\n        } catch (error) {\n          setLoadingStatus('Done');\n          setErrorMessage(messageFromError(error));\n        }\n      };\n\n      loadInitialData();\n    }\n  }, [resourcePickerData, internalSelectedURI, azureRows, loadingStatus]);\n\n  // Map the selected item into an array of rows\n  const selectedResourceRows = useMemo(() => {\n    const found = internalSelectedURI && findRow(azureRows, internalSelectedURI);\n\n    return found\n      ? [\n          {\n            ...found,\n            children: undefined,\n          },\n        ]\n      : [];\n  }, [internalSelectedURI, azureRows]);\n\n  // Request resources for a expanded resource group\n  const requestNestedRows = useCallback(\n    async (resourceGroupOrSubscription: ResourceRow) => {\n      // clear error message (also when loading cached resources)\n      setErrorMessage(undefined);\n\n      // If we already have children, we don't need to re-fetch them.\n      if (resourceGroupOrSubscription.children?.length) {\n        return;\n      }\n\n      try {\n        const rows =\n          resourceGroupOrSubscription.type === ResourceRowType.Subscription\n            ? await resourcePickerData.getResourceGroupsBySubscriptionId(resourceGroupOrSubscription.id)\n            : await resourcePickerData.getResourcesForResourceGroup(resourceGroupOrSubscription.id);\n\n        const newRows = addResources(azureRows, resourceGroupOrSubscription.uri, rows);\n\n        setAzureRows(newRows);\n      } catch (error) {\n        setErrorMessage(messageFromError(error));\n        throw error;\n      }\n    },\n    [resourcePickerData, azureRows]\n  );\n\n  const handleSelectionChanged = useCallback((row: ResourceRow, isSelected: boolean) => {\n    isSelected ? setInternalSelectedURI(row.uri) : setInternalSelectedURI(undefined);\n  }, []);\n\n  const handleApply = useCallback(() => {\n    onApply(internalSelectedURI);\n  }, [internalSelectedURI, onApply]);\n\n  return (\n    <div>\n      {loadingStatus === 'Started' ? (\n        <div className={styles.loadingWrapper}>\n          <LoadingPlaceholder text={'Loading...'} />\n        </div>\n      ) : (\n        <>\n          <table className={styles.table}>\n            <thead>\n              <tr className={cx(styles.row, styles.header)}>\n                <td className={styles.cell}>Scope</td>\n                <td className={styles.cell}>Type</td>\n                <td className={styles.cell}>Location</td>\n              </tr>\n            </thead>\n          </table>\n\n          <div className={styles.tableScroller}>\n            <table className={styles.table}>\n              <tbody>\n                {azureRows.map((row) => (\n                  <NestedRow\n                    key={row.uri}\n                    row={row}\n                    selectedRows={selectedResourceRows}\n                    level={0}\n                    requestNestedRows={requestNestedRows}\n                    onRowSelectedChange={handleSelectionChanged}\n                    selectableEntryTypes={selectableEntryTypes}\n                    scrollIntoView={true}\n                  />\n                ))}\n              </tbody>\n            </table>\n          </div>\n\n          <div className={styles.selectionFooter}>\n            {selectedResourceRows.length > 0 && (\n              <>\n                <h5>Selection</h5>\n\n                <div className={styles.tableScroller}>\n                  <table className={styles.table}>\n                    <tbody>\n                      {selectedResourceRows.map((row) => (\n                        <NestedRow\n                          key={row.uri}\n                          row={row}\n                          selectedRows={selectedResourceRows}\n                          level={0}\n                          requestNestedRows={requestNestedRows}\n                          onRowSelectedChange={handleSelectionChanged}\n                          selectableEntryTypes={selectableEntryTypes}\n                        />\n                      ))}\n                    </tbody>\n                  </table>\n                </div>\n                <Space v={2} />\n              </>\n            )}\n\n            <Collapse\n              collapsible\n              label=\"Advanced\"\n              isOpen={isAdvancedOpen}\n              onToggle={() => setIsAdvancedOpen(!isAdvancedOpen)}\n            >\n              <Label htmlFor={`input-${internalSelectedURI}`}>\n                <h6>\n                  Resource URI{' '}\n                  <Tooltip\n                    content={\n                      <>\n                        Manually edit the{' '}\n                        <a\n                          href=\"https://docs.microsoft.com/en-us/azure/azure-monitor/logs/log-standard-columns#_resourceid\"\n                          rel=\"noopener noreferrer\"\n                          target=\"_blank\"\n                        >\n                          resource uri.{' '}\n                        </a>\n                        Supports the use of multiple template variables (ex: /subscriptions/$subId/resourceGroups/$rg)\n                      </>\n                    }\n                    placement=\"right\"\n                    interactive={true}\n                  >\n                    <Icon name=\"info-circle\" />\n                  </Tooltip>\n                </h6>\n              </Label>\n              <Input\n                id={`input-${internalSelectedURI}`}\n                value={internalSelectedURI}\n                onChange={(event) => setInternalSelectedURI(event.currentTarget.value)}\n                placeholder=\"ex: /subscriptions/$subId\"\n              />\n            </Collapse>\n            <Space v={2} />\n\n            <Button disabled={!!errorMessage} onClick={handleApply}>\n              Apply\n            </Button>\n\n            <Space layout=\"inline\" h={1} />\n\n            <Button onClick={onCancel} variant=\"secondary\">\n              Cancel\n            </Button>\n          </div>\n        </>\n      )}\n      {errorMessage && (\n        <>\n          <Space v={2} />\n          <Alert severity=\"error\" title=\"An error occurred while requesting resources from Azure Monitor\">\n            {errorMessage}\n          </Alert>\n        </>\n      )}\n    </div>\n  );\n};\n\nexport default ResourcePicker;\n","import { css } from '@emotion/css';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Button, Icon, Modal, useStyles2 } from '@grafana/ui';\n\nimport Datasource from '../../datasource';\nimport { AzureQueryEditorFieldProps, AzureResourceSummaryItem } from '../../types';\nimport { Field } from '../Field';\nimport ResourcePicker from '../ResourcePicker';\nimport { ResourceRowType } from '../ResourcePicker/types';\nimport { parseResourceURI } from '../ResourcePicker/utils';\nimport { Space } from '../Space';\n\nimport { setResource } from './setQueryValue';\n\nfunction parseResourceDetails(resourceURI: string) {\n  const parsed = parseResourceURI(resourceURI);\n\n  if (!parsed) {\n    return undefined;\n  }\n\n  return {\n    subscriptionName: parsed.subscriptionID,\n    resourceGroupName: parsed.resourceGroup,\n    resourceName: parsed.resource,\n  };\n}\n\nconst ResourceField: React.FC<AzureQueryEditorFieldProps> = ({ query, datasource, onQueryChange }) => {\n  const styles = useStyles2(getStyles);\n  const { resource } = query.azureLogAnalytics ?? {};\n  const [pickerIsOpen, setPickerIsOpen] = useState(false);\n\n  const handleOpenPicker = useCallback(() => {\n    setPickerIsOpen(true);\n  }, []);\n\n  const closePicker = useCallback(() => {\n    setPickerIsOpen(false);\n  }, []);\n\n  const handleApply = useCallback(\n    (resourceURI: string | undefined) => {\n      onQueryChange(setResource(query, resourceURI));\n      closePicker();\n    },\n    [closePicker, onQueryChange, query]\n  );\n\n  return (\n    <>\n      <Modal\n        className={styles.modal}\n        title=\"Select a resource\"\n        isOpen={pickerIsOpen}\n        onDismiss={closePicker}\n        // The growing number of rows added to the modal causes a focus\n        // error in the modal, making it impossible to click on new elements\n        trapFocus={false}\n      >\n        <ResourcePicker\n          resourcePickerData={datasource.resourcePickerData}\n          resourceURI={resource}\n          onApply={handleApply}\n          onCancel={closePicker}\n          selectableEntryTypes={[\n            ResourceRowType.Subscription,\n            ResourceRowType.ResourceGroup,\n            ResourceRowType.Resource,\n            ResourceRowType.Variable,\n          ]}\n        />\n      </Modal>\n\n      <Field label=\"Resource\">\n        <Button variant=\"secondary\" onClick={handleOpenPicker} type=\"button\">\n          <ResourceLabel resource={resource} datasource={datasource} />\n        </Button>\n      </Field>\n    </>\n  );\n};\n\ninterface ResourceLabelProps {\n  resource: string | undefined;\n  datasource: Datasource;\n}\n\nconst ResourceLabel = ({ resource, datasource }: ResourceLabelProps) => {\n  const [resourceComponents, setResourceComponents] = useState(parseResourceDetails(resource ?? ''));\n\n  useEffect(() => {\n    if (resource && parseResourceDetails(resource)) {\n      datasource.resourcePickerData.getResourceURIDisplayProperties(resource).then(setResourceComponents);\n    } else {\n      setResourceComponents(undefined);\n    }\n  }, [datasource.resourcePickerData, resource]);\n\n  if (!resource) {\n    return <>Select a resource</>;\n  }\n\n  if (resourceComponents) {\n    return <FormattedResource resource={resourceComponents} />;\n  }\n\n  if (resource.startsWith('$')) {\n    return (\n      <span>\n        <Icon name=\"x\" /> {resource}\n      </span>\n    );\n  }\n\n  return <>{resource}</>;\n};\n\ninterface FormattedResourceProps {\n  resource: AzureResourceSummaryItem;\n}\n\nconst FormattedResource = ({ resource }: FormattedResourceProps) => {\n  return (\n    <span>\n      <Icon name=\"layer-group\" /> {resource.subscriptionName}\n      {resource.resourceGroupName && (\n        <>\n          <Separator />\n          <Icon name=\"folder\" /> {resource.resourceGroupName}\n        </>\n      )}\n      {resource.resourceName && (\n        <>\n          <Separator />\n          <Icon name=\"cube\" /> {resource.resourceName}\n        </>\n      )}\n    </span>\n  );\n};\n\nconst Separator = () => (\n  <>\n    <Space layout=\"inline\" h={2} />\n    {'/'}\n    <Space layout=\"inline\" h={2} />\n  </>\n);\n\nexport default ResourceField;\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n  modal: css({\n    width: theme.breakpoints.values.lg,\n  }),\n});\n","import { useEffect, useState } from 'react';\n\nimport Datasource from '../../datasource';\nimport { AzureMonitorQuery } from '../../types';\nimport { isGUIDish } from '../ResourcePicker/utils';\n\nasync function migrateWorkspaceQueryToResourceQuery(\n  datasource: Datasource,\n  query: AzureMonitorQuery,\n  onChange: (newQuery: AzureMonitorQuery) => void\n) {\n  if (query.azureLogAnalytics?.workspace !== undefined && !query.azureLogAnalytics.resource) {\n    const isWorkspaceGUID = isGUIDish(query.azureLogAnalytics.workspace);\n    let resource: string;\n\n    if (isWorkspaceGUID) {\n      resource = await datasource.resourcePickerData.getResourceURIFromWorkspace(query.azureLogAnalytics.workspace);\n    } else {\n      // The value of workspace is probably a template variable so we just migrate it over as-is\n      resource = query.azureLogAnalytics.workspace;\n    }\n\n    const newQuery = {\n      ...query,\n      azureLogAnalytics: {\n        ...query.azureLogAnalytics,\n        resource: resource,\n        workspace: undefined,\n      },\n    };\n\n    delete newQuery.azureLogAnalytics.workspace;\n\n    onChange(newQuery);\n  }\n}\n\ninterface ErrorMessage {\n  title: string;\n  message: string;\n}\n\nexport default function useMigrations(\n  datasource: Datasource,\n  query: AzureMonitorQuery,\n  onChange: (newQuery: AzureMonitorQuery) => void\n) {\n  const [migrationError, setMigrationError] = useState<ErrorMessage>();\n\n  useEffect(() => {\n    migrateWorkspaceQueryToResourceQuery(datasource, query, onChange).catch((err) =>\n      setMigrationError({\n        title: 'Unable to migrate workspace as a resource',\n        message: err.message,\n      })\n    );\n  }, [datasource, query, onChange]);\n\n  return migrationError;\n}\n","import React from 'react';\n\nimport { Alert, InlineFieldRow } from '@grafana/ui';\n\nimport Datasource from '../../datasource';\nimport { AzureMonitorErrorish, AzureMonitorOption, AzureMonitorQuery } from '../../types';\n\nimport FormatAsField from './FormatAsField';\nimport QueryField from './QueryField';\nimport ResourceField from './ResourceField';\nimport useMigrations from './useMigrations';\n\ninterface LogsQueryEditorProps {\n  query: AzureMonitorQuery;\n  datasource: Datasource;\n  subscriptionId?: string;\n  onChange: (newQuery: AzureMonitorQuery) => void;\n  variableOptionGroup: { label: string; options: AzureMonitorOption[] };\n  setError: (source: string, error: AzureMonitorErrorish | undefined) => void;\n  hideFormatAs?: boolean;\n}\n\nconst LogsQueryEditor: React.FC<LogsQueryEditorProps> = ({\n  query,\n  datasource,\n  subscriptionId,\n  variableOptionGroup,\n  onChange,\n  setError,\n  hideFormatAs,\n}) => {\n  const migrationError = useMigrations(datasource, query, onChange);\n\n  return (\n    <div data-testid=\"azure-monitor-logs-query-editor\">\n      <InlineFieldRow>\n        <ResourceField\n          query={query}\n          datasource={datasource}\n          subscriptionId={subscriptionId}\n          variableOptionGroup={variableOptionGroup}\n          onQueryChange={onChange}\n          setError={setError}\n        />\n      </InlineFieldRow>\n\n      <QueryField\n        query={query}\n        datasource={datasource}\n        subscriptionId={subscriptionId}\n        variableOptionGroup={variableOptionGroup}\n        onQueryChange={onChange}\n        setError={setError}\n      />\n\n      {!hideFormatAs && (\n        <FormatAsField\n          query={query}\n          datasource={datasource}\n          subscriptionId={subscriptionId}\n          variableOptionGroup={variableOptionGroup}\n          onQueryChange={onChange}\n          setError={setError}\n        />\n      )}\n\n      {migrationError && <Alert title={migrationError.title}>{migrationError.message}</Alert>}\n    </div>\n  );\n};\n\nexport default LogsQueryEditor;\n","import { AzureMonitorQuery } from '../../types';\n\nexport function setKustoQuery(query: AzureMonitorQuery, kustoQuery: string): AzureMonitorQuery {\n  return {\n    ...query,\n    azureLogAnalytics: {\n      ...query.azureLogAnalytics,\n      query: kustoQuery,\n    },\n  };\n}\n\nexport function setFormatAs(query: AzureMonitorQuery, formatAs: string): AzureMonitorQuery {\n  return {\n    ...query,\n    azureLogAnalytics: {\n      ...query.azureLogAnalytics,\n      resultFormat: formatAs,\n    },\n  };\n}\n\nexport function setResource(query: AzureMonitorQuery, resourceURI: string | undefined): AzureMonitorQuery {\n  return {\n    ...query,\n    azureLogAnalytics: {\n      ...query.azureLogAnalytics,\n      resource: resourceURI,\n    },\n  };\n}\n","import { AzureMetricDimension, AzureMonitorQuery } from '../../types';\n\nexport function setSubscriptionID(query: AzureMonitorQuery, subscriptionID: string): AzureMonitorQuery {\n  if (query.subscription === subscriptionID) {\n    return query;\n  }\n\n  return {\n    ...query,\n    subscription: subscriptionID,\n    azureMonitor: {\n      ...query.azureMonitor,\n      resourceGroup: undefined,\n      metricDefinition: undefined,\n      metricNamespace: undefined,\n      resourceName: undefined,\n      metricName: undefined,\n      aggregation: undefined,\n      timeGrain: '',\n      dimensionFilters: [],\n    },\n  };\n}\n\nexport function setResourceGroup(query: AzureMonitorQuery, resourceGroup: string | undefined): AzureMonitorQuery {\n  if (query.azureMonitor?.resourceGroup === resourceGroup) {\n    return query;\n  }\n\n  return {\n    ...query,\n    azureMonitor: {\n      ...query.azureMonitor,\n      resourceGroup: resourceGroup,\n      metricDefinition: undefined,\n      metricNamespace: undefined,\n      resourceName: undefined,\n      metricName: undefined,\n      aggregation: undefined,\n      timeGrain: '',\n      dimensionFilters: [],\n    },\n  };\n}\n\n// In the query as \"metricDefinition\" for some reason\nexport function setResourceType(query: AzureMonitorQuery, resourceType: string | undefined): AzureMonitorQuery {\n  if (query.azureMonitor?.metricDefinition === resourceType) {\n    return query;\n  }\n\n  const newQuery = {\n    ...query,\n    azureMonitor: {\n      ...query.azureMonitor,\n      metricDefinition: resourceType,\n      resourceName: undefined,\n      metricNamespace: undefined,\n      metricName: undefined,\n      aggregation: undefined,\n      timeGrain: '',\n      dimensionFilters: [],\n    },\n  };\n\n  return newQuery;\n}\n\nexport function setResourceName(query: AzureMonitorQuery, resourceName: string | undefined): AzureMonitorQuery {\n  if (query.azureMonitor?.resourceName === resourceName) {\n    return query;\n  }\n\n  return {\n    ...query,\n    azureMonitor: {\n      ...query.azureMonitor,\n      resourceName: resourceName,\n      metricNamespace: undefined,\n      metricName: undefined,\n      aggregation: undefined,\n      timeGrain: '',\n      dimensionFilters: [],\n    },\n  };\n}\n\nexport function setMetricNamespace(query: AzureMonitorQuery, metricNamespace: string | undefined): AzureMonitorQuery {\n  if (query.azureMonitor?.metricNamespace === metricNamespace) {\n    return query;\n  }\n\n  return {\n    ...query,\n    azureMonitor: {\n      ...query.azureMonitor,\n      metricNamespace: metricNamespace,\n      metricName: undefined,\n      aggregation: undefined,\n      timeGrain: '',\n      dimensionFilters: [],\n    },\n  };\n}\n\nexport function setMetricName(query: AzureMonitorQuery, metricName: string | undefined): AzureMonitorQuery {\n  if (query.azureMonitor?.metricName === metricName) {\n    return query;\n  }\n\n  return {\n    ...query,\n    azureMonitor: {\n      ...query.azureMonitor,\n      metricName: metricName,\n      aggregation: undefined,\n      timeGrain: '',\n      dimensionFilters: [],\n    },\n  };\n}\n\nexport function setAggregation(query: AzureMonitorQuery, aggregation: string): AzureMonitorQuery {\n  if (query.azureMonitor?.aggregation === aggregation) {\n    return query;\n  }\n\n  return {\n    ...query,\n    azureMonitor: {\n      ...query.azureMonitor,\n      aggregation: aggregation,\n    },\n  };\n}\n\nexport function setTimeGrain(query: AzureMonitorQuery, timeGrain: string): AzureMonitorQuery {\n  if (query.azureMonitor?.timeGrain === timeGrain) {\n    return query;\n  }\n\n  return {\n    ...query,\n    azureMonitor: {\n      ...query.azureMonitor,\n      timeGrain: timeGrain,\n    },\n  };\n}\n\nexport function setDimensionFilters(query: AzureMonitorQuery, dimensions: AzureMetricDimension[]): AzureMonitorQuery {\n  if (query.azureMonitor?.dimensionFilters === dimensions) {\n    return query;\n  }\n\n  return {\n    ...query,\n    azureMonitor: {\n      ...query.azureMonitor,\n      dimensionFilters: dimensions,\n    },\n  };\n}\n\nexport function appendDimensionFilter(\n  query: AzureMonitorQuery,\n  dimension = '',\n  operator = 'eq',\n  filter = '*'\n): AzureMonitorQuery {\n  const existingFilters = query.azureMonitor?.dimensionFilters ?? [];\n\n  return setDimensionFilters(query, [\n    ...existingFilters,\n    {\n      dimension,\n      operator,\n      filter,\n    },\n  ]);\n}\n\nexport function removeDimensionFilter(query: AzureMonitorQuery, indexToRemove: number): AzureMonitorQuery {\n  const existingFilters = query.azureMonitor?.dimensionFilters ?? [];\n  const newFilters = [...existingFilters];\n  newFilters.splice(indexToRemove, 1);\n  return setDimensionFilters(query, newFilters);\n}\n\nexport function setDimensionFilterValue<Key extends keyof AzureMetricDimension>(\n  query: AzureMonitorQuery,\n  index: number,\n  fieldName: Key,\n  value: AzureMetricDimension[Key]\n): AzureMonitorQuery {\n  const existingFilters = query.azureMonitor?.dimensionFilters ?? [];\n  const newFilters = [...existingFilters];\n  const newFilter = newFilters[index];\n  newFilter[fieldName] = value;\n  return setDimensionFilters(query, newFilters);\n}\n\nexport function setTop(query: AzureMonitorQuery, top: string): AzureMonitorQuery {\n  if (query.azureMonitor?.top === top) {\n    return query;\n  }\n\n  return {\n    ...query,\n    azureMonitor: {\n      ...query.azureMonitor,\n      top: top,\n    },\n  };\n}\n\nexport function setLegendAlias(query: AzureMonitorQuery, alias: string): AzureMonitorQuery {\n  if (query.azureMonitor?.alias === alias) {\n    return query;\n  }\n\n  return {\n    ...query,\n    azureMonitor: {\n      ...query.azureMonitor,\n      alias: alias,\n    },\n  };\n}\n","import React, { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select, MultiSelect } from '@grafana/ui';\n\nimport { AzureMonitorQuery, AzureQueryEditorFieldProps, AzureMonitorOption, AzureQueryType } from '../types';\nimport { findOptions } from '../utils/common';\n\nimport { Field } from './Field';\n\ninterface SubscriptionFieldProps extends AzureQueryEditorFieldProps {\n  onQueryChange: (newQuery: AzureMonitorQuery) => void;\n  subscriptions: AzureMonitorOption[];\n  multiSelect?: boolean;\n}\n\nconst SubscriptionField: React.FC<SubscriptionFieldProps> = ({\n  query,\n  subscriptions,\n  variableOptionGroup,\n  onQueryChange,\n  multiSelect = false,\n}) => {\n  const handleChange = useCallback(\n    (change: SelectableValue<string>) => {\n      if (!change.value) {\n        return;\n      }\n\n      let newQuery: AzureMonitorQuery = {\n        ...query,\n        subscription: change.value,\n      };\n\n      if (query.queryType === AzureQueryType.AzureMonitor) {\n        newQuery.azureMonitor = {\n          ...newQuery.azureMonitor,\n          resourceGroup: undefined,\n          metricDefinition: undefined,\n          metricNamespace: undefined,\n          resourceName: undefined,\n          metricName: undefined,\n          aggregation: undefined,\n          timeGrain: '',\n          dimensionFilters: [],\n        };\n      }\n\n      onQueryChange(newQuery);\n    },\n    [query, onQueryChange]\n  );\n\n  const onSubscriptionsChange = useCallback(\n    (change: Array<SelectableValue<string>>) => {\n      if (!change) {\n        return;\n      }\n\n      query.subscriptions = change.map((c) => c.value ?? '');\n\n      onQueryChange(query);\n    },\n    [query, onQueryChange]\n  );\n\n  const options = useMemo(() => [...subscriptions, variableOptionGroup], [subscriptions, variableOptionGroup]);\n\n  return multiSelect ? (\n    <Field label=\"Subscriptions\">\n      <MultiSelect\n        menuShouldPortal\n        isClearable\n        value={findOptions([...subscriptions, ...variableOptionGroup.options], query.subscriptions)}\n        inputId=\"azure-monitor-subscriptions-field\"\n        onChange={onSubscriptionsChange}\n        options={options}\n        width={38}\n      />\n    </Field>\n  ) : (\n    <Field label=\"Subscription\">\n      <Select\n        menuShouldPortal\n        value={query.subscription}\n        inputId=\"azure-monitor-subscriptions-field\"\n        onChange={handleChange}\n        options={options}\n        width={38}\n        allowCustomValue\n      />\n    </Field>\n  );\n};\n\nexport default SubscriptionField;\n","import React, { useCallback } from 'react';\n\nimport { CodeEditor } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps } from '../../types';\n\nconst QueryField: React.FC<AzureQueryEditorFieldProps> = ({ query, onQueryChange }) => {\n  const onChange = useCallback(\n    (newQuery: string) => {\n      onQueryChange({\n        ...query,\n        azureResourceGraph: {\n          ...query.azureResourceGraph,\n          query: newQuery,\n        },\n      });\n    },\n    [onQueryChange, query]\n  );\n\n  return (\n    <CodeEditor\n      value={query.azureResourceGraph?.query ?? ''}\n      language=\"kusto\"\n      height={200}\n      width={1000}\n      showMiniMap={false}\n      onBlur={onChange}\n      onSave={onChange}\n    />\n  );\n};\n\nexport default QueryField;\n","import React, { useEffect, useState, useRef } from 'react';\n\nimport { InlineFieldRow } from '@grafana/ui';\n\nimport Datasource from '../../datasource';\nimport { AzureMonitorErrorish, AzureMonitorOption, AzureMonitorQuery } from '../../types';\nimport SubscriptionField from '../SubscriptionField';\n\nimport QueryField from './QueryField';\n\ninterface LogsQueryEditorProps {\n  query: AzureMonitorQuery;\n  datasource: Datasource;\n  subscriptionId?: string;\n  onChange: (newQuery: AzureMonitorQuery) => void;\n  variableOptionGroup: { label: string; options: AzureMonitorOption[] };\n  setError: (source: string, error: AzureMonitorErrorish | undefined) => void;\n}\n\nconst ERROR_SOURCE = 'arg-subscriptions';\nconst ArgQueryEditor: React.FC<LogsQueryEditorProps> = ({\n  query,\n  datasource,\n  subscriptionId,\n  variableOptionGroup,\n  onChange,\n  setError,\n}) => {\n  const fetchedRef = useRef(false);\n  const [subscriptions, setSubscriptions] = useState<AzureMonitorOption[]>([]);\n\n  useEffect(() => {\n    if (fetchedRef.current) {\n      return;\n    }\n\n    fetchedRef.current = true;\n    datasource.azureMonitorDatasource\n      .getSubscriptions()\n      .then((results) => {\n        const fetchedSubscriptions = results.map((v) => ({ label: v.text, value: v.value, description: v.value }));\n        setSubscriptions(fetchedSubscriptions);\n        setError(ERROR_SOURCE, undefined);\n\n        if (!query.subscriptions?.length && fetchedSubscriptions?.length) {\n          onChange({\n            ...query,\n            subscriptions: [query.subscription ?? fetchedSubscriptions[0].value],\n          });\n        }\n      })\n      .catch((err) => setError(ERROR_SOURCE, err));\n  }, [datasource, onChange, query, setError]);\n\n  return (\n    <div data-testid=\"azure-monitor-logs-query-editor\">\n      <InlineFieldRow>\n        <SubscriptionField\n          multiSelect\n          subscriptions={subscriptions}\n          query={query}\n          datasource={datasource}\n          subscriptionId={subscriptionId}\n          variableOptionGroup={variableOptionGroup}\n          onQueryChange={onChange}\n          setError={setError}\n        />\n      </InlineFieldRow>\n\n      <QueryField\n        query={query}\n        datasource={datasource}\n        subscriptionId={subscriptionId}\n        variableOptionGroup={variableOptionGroup}\n        onQueryChange={onChange}\n        setError={setError}\n      />\n    </div>\n  );\n};\n\nexport default ArgQueryEditor;\n","import React, { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps, AzureMonitorOption } from '../../types';\nimport { Field } from '../Field';\n\nimport { setAggregation } from './setQueryValue';\n\ninterface AggregationFieldProps extends AzureQueryEditorFieldProps {\n  aggregationOptions: AzureMonitorOption[];\n  isLoading: boolean;\n}\n\nconst AggregationField: React.FC<AggregationFieldProps> = ({\n  query,\n  variableOptionGroup,\n  onQueryChange,\n  aggregationOptions,\n  isLoading,\n}) => {\n  const handleChange = useCallback(\n    (change: SelectableValue<string>) => {\n      if (!change.value) {\n        return;\n      }\n\n      const newQuery = setAggregation(query, change.value);\n      onQueryChange(newQuery);\n    },\n    [onQueryChange, query]\n  );\n\n  const options = useMemo(\n    () => [...aggregationOptions, variableOptionGroup],\n    [aggregationOptions, variableOptionGroup]\n  );\n\n  return (\n    <Field label=\"Aggregation\">\n      <Select\n        menuShouldPortal\n        inputId=\"azure-monitor-metrics-aggregation-field\"\n        value={query.azureMonitor?.aggregation}\n        onChange={handleChange}\n        options={options}\n        width={38}\n        isLoading={isLoading}\n      />\n    </Field>\n  );\n};\n\nexport default AggregationField;\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { SelectableValue, DataFrame, PanelData } from '@grafana/data';\nimport { Button, Select, HorizontalGroup, VerticalGroup } from '@grafana/ui';\n\nimport { AzureMetricDimension, AzureMonitorOption, AzureMonitorQuery, AzureQueryEditorFieldProps } from '../../types';\nimport { Field } from '../Field';\n\nimport { appendDimensionFilter, removeDimensionFilter, setDimensionFilterValue } from './setQueryValue';\n\ninterface DimensionFieldsProps extends AzureQueryEditorFieldProps {\n  dimensionOptions: AzureMonitorOption[];\n}\n\ninterface DimensionLabels {\n  [key: string]: Set<string>;\n}\n\nconst useDimensionLabels = (data: PanelData | undefined, query: AzureMonitorQuery) => {\n  const [dimensionLabels, setDimensionLabels] = useState<DimensionLabels>({});\n  useEffect(() => {\n    let labelsObj: DimensionLabels = {};\n    if (data?.series?.length) {\n      // Identify which series' in the dataframe are relevant to the current query\n      const series: DataFrame[] = data.series.flat().filter((series) => series.refId === query.refId);\n      const fields = series.flatMap((series) => series.fields);\n      // Retrieve labels for series fields\n      const labels = fields\n        .map((fields) => fields.labels)\n        .flat()\n        .filter((item) => item!);\n      for (const label of labels) {\n        // Labels only exist for series that have a dimension selected\n        if (label) {\n          for (const [dimension, value] of Object.entries(label)) {\n            if (labelsObj[dimension]) {\n              labelsObj[dimension].add(value);\n            } else {\n              labelsObj[dimension] = new Set([value]);\n            }\n          }\n        }\n      }\n    }\n    setDimensionLabels((prevLabels) => {\n      const newLabels: DimensionLabels = {};\n      for (const label of Object.keys(labelsObj)) {\n        if (prevLabels[label] && labelsObj[label].size < prevLabels[label].size) {\n          newLabels[label] = prevLabels[label];\n        } else {\n          newLabels[label] = labelsObj[label];\n        }\n      }\n      return newLabels;\n    });\n  }, [data?.series, query.refId]);\n  return dimensionLabels;\n};\n\nconst DimensionFields: React.FC<DimensionFieldsProps> = ({ data, query, dimensionOptions, onQueryChange }) => {\n  const dimensionFilters = useMemo(\n    () => query.azureMonitor?.dimensionFilters ?? [],\n    [query.azureMonitor?.dimensionFilters]\n  );\n\n  const dimensionLabels = useDimensionLabels(data, query);\n\n  const dimensionOperators: Array<SelectableValue<string>> = [\n    { label: '==', value: 'eq' },\n    { label: '!=', value: 'ne' },\n    { label: 'starts with', value: 'sw' },\n  ];\n\n  const validDimensionOptions = useMemo(() => {\n    // We filter out any dimensions that have already been used in a filter as the API doesn't support having multiple filters with the same dimension name.\n    // The Azure portal also doesn't support this feature so it makes sense for consistency.\n    let t = dimensionOptions;\n    if (dimensionFilters.length) {\n      t = dimensionOptions.filter(\n        (val) => !dimensionFilters.some((dimensionFilter) => dimensionFilter.dimension === val.value)\n      );\n    }\n    return t;\n  }, [dimensionFilters, dimensionOptions]);\n\n  const addFilter = () => {\n    onQueryChange(appendDimensionFilter(query));\n  };\n\n  const removeFilter = (index: number) => {\n    onQueryChange(removeDimensionFilter(query, index));\n  };\n\n  const onFieldChange = <Key extends keyof AzureMetricDimension>(\n    filterIndex: number,\n    fieldName: Key,\n    value: AzureMetricDimension[Key]\n  ) => {\n    onQueryChange(setDimensionFilterValue(query, filterIndex, fieldName, value));\n  };\n\n  const onFilterInputChange = (index: number, v: SelectableValue<string> | null) => {\n    onFieldChange(index, 'filter', v?.value ?? '');\n  };\n\n  const getValidDimensionOptions = (selectedDimension: string) => {\n    return validDimensionOptions.concat(dimensionOptions.filter((item) => item.value === selectedDimension));\n  };\n\n  const getValidFilterOptions = (selectedFilter: string | undefined, dimension: string) => {\n    const dimensionFilters = Array.from(dimensionLabels[dimension.toLowerCase()] ?? []);\n    if (dimensionFilters.find((filter) => filter === selectedFilter)) {\n      return dimensionFilters.map((filter) => ({ value: filter, label: filter }));\n    }\n    return [...dimensionFilters, ...(selectedFilter && selectedFilter !== '*' ? [selectedFilter] : [])].map((item) => ({\n      value: item,\n      label: item,\n    }));\n  };\n\n  const getValidOperators = (selectedOperator: string) => {\n    if (dimensionOperators.find((operator: SelectableValue) => operator.value === selectedOperator)) {\n      return dimensionOperators;\n    }\n    return [...dimensionOperators, ...(selectedOperator ? [{ label: selectedOperator, value: selectedOperator }] : [])];\n  };\n\n  return (\n    <Field label=\"Dimension\">\n      <VerticalGroup spacing=\"xs\">\n        {dimensionFilters.map((filter, index) => (\n          <HorizontalGroup key={index} spacing=\"xs\">\n            <Select\n              menuShouldPortal\n              placeholder=\"Field\"\n              value={filter.dimension}\n              options={getValidDimensionOptions(filter.dimension)}\n              onChange={(v) => onFieldChange(index, 'dimension', v.value ?? '')}\n              width={38}\n            />\n            <Select\n              menuShouldPortal\n              placeholder=\"Operation\"\n              value={filter.operator}\n              options={getValidOperators(filter.operator)}\n              onChange={(v) => onFieldChange(index, 'operator', v.value ?? '')}\n              allowCustomValue\n            />\n            <Select\n              menuShouldPortal\n              placeholder=\"Select value\"\n              value={filter.filter ? filter.filter : ''}\n              allowCustomValue\n              options={getValidFilterOptions(filter.filter, filter.dimension)}\n              onChange={(v) => onFilterInputChange(index, v)}\n              isClearable\n            />\n\n            <Button\n              variant=\"secondary\"\n              size=\"md\"\n              icon=\"trash-alt\"\n              aria-label=\"Remove\"\n              onClick={() => removeFilter(index)}\n            ></Button>\n          </HorizontalGroup>\n        ))}\n\n        <Button variant=\"secondary\" size=\"md\" onClick={addFilter}>\n          Add new dimension\n        </Button>\n      </VerticalGroup>\n    </Field>\n  );\n};\n\nexport default DimensionFields;\n","import React, { useCallback, useState } from 'react';\n\nimport { Input } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps } from '../../types';\nimport { Field } from '../Field';\n\nimport { setLegendAlias } from './setQueryValue';\n\nconst LegendFormatField: React.FC<AzureQueryEditorFieldProps> = ({ onQueryChange, query }) => {\n  const [value, setValue] = useState<string>(query.azureMonitor?.alias ?? '');\n\n  // As calling onQueryChange initiates a the datasource refresh, we only want to call it once\n  // the field loses focus\n  const handleChange = useCallback((ev: React.FormEvent) => {\n    if (ev.target instanceof HTMLInputElement) {\n      setValue(ev.target.value);\n    }\n  }, []);\n\n  const handleBlur = useCallback(() => {\n    const newQuery = setLegendAlias(query, value);\n    onQueryChange(newQuery);\n  }, [onQueryChange, query, value]);\n\n  return (\n    <Field label=\"Legend format\">\n      <Input\n        id=\"azure-monitor-metrics-legend-field\"\n        placeholder=\"Alias patterns\"\n        value={value}\n        onChange={handleChange}\n        onBlur={handleBlur}\n        width={38}\n      />\n    </Field>\n  );\n};\n\nexport default LegendFormatField;\n","import React, { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps, AzureMonitorOption } from '../../types';\nimport { Field } from '../Field';\n\nimport { setMetricName } from './setQueryValue';\n\ninterface MetricNameProps extends AzureQueryEditorFieldProps {\n  metricNames: AzureMonitorOption[];\n}\n\nconst MetricNameField: React.FC<MetricNameProps> = ({ metricNames, query, variableOptionGroup, onQueryChange }) => {\n  const handleChange = useCallback(\n    (change: SelectableValue<string>) => {\n      if (!change.value) {\n        return;\n      }\n\n      const newQuery = setMetricName(query, change.value);\n      onQueryChange(newQuery);\n    },\n    [onQueryChange, query]\n  );\n\n  const options = useMemo(() => [...metricNames, variableOptionGroup], [metricNames, variableOptionGroup]);\n\n  return (\n    <Field label=\"Metric\">\n      <Select\n        menuShouldPortal\n        inputId=\"azure-monitor-metrics-metric-field\"\n        value={query.azureMonitor?.metricName ?? null}\n        onChange={handleChange}\n        options={options}\n        width={38}\n        allowCustomValue\n      />\n    </Field>\n  );\n};\n\nexport default MetricNameField;\n","import React, { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps, AzureMonitorOption } from '../../types';\nimport { Field } from '../Field';\n\nimport { setMetricNamespace } from './setQueryValue';\n\ninterface MetricNamespaceFieldProps extends AzureQueryEditorFieldProps {\n  metricNamespaces: AzureMonitorOption[];\n}\n\nconst MetricNamespaceField: React.FC<MetricNamespaceFieldProps> = ({\n  metricNamespaces,\n  query,\n  variableOptionGroup,\n  onQueryChange,\n}) => {\n  const handleChange = useCallback(\n    (change: SelectableValue<string>) => {\n      if (!change.value) {\n        return;\n      }\n\n      const newQuery = setMetricNamespace(query, change.value);\n      onQueryChange(newQuery);\n    },\n    [onQueryChange, query]\n  );\n\n  const options = useMemo(() => [...metricNamespaces, variableOptionGroup], [metricNamespaces, variableOptionGroup]);\n  const optionValues = metricNamespaces\n    .map((m) => m.value.toLowerCase())\n    .concat(variableOptionGroup.options.map((p) => p.value));\n  const value = query.azureMonitor?.metricNamespace;\n  if (value && !optionValues.includes(value.toLowerCase())) {\n    options.push({ label: value, value });\n  }\n\n  return (\n    <Field label=\"Metric namespace\">\n      <Select\n        menuShouldPortal\n        inputId=\"azure-monitor-metrics-metric-namespace-field\"\n        value={query.azureMonitor?.metricNamespace}\n        onChange={handleChange}\n        options={options}\n        width={38}\n        allowCustomValue\n      />\n    </Field>\n  );\n};\n\nexport default MetricNamespaceField;\n","import React, { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps, AzureMonitorOption } from '../../types';\nimport { Field } from '../Field';\n\nimport { setResourceGroup } from './setQueryValue';\n\ninterface ResourceGroupsFieldProps extends AzureQueryEditorFieldProps {\n  resourceGroups: AzureMonitorOption[];\n}\n\nconst ResourceGroupsField: React.FC<ResourceGroupsFieldProps> = ({\n  query,\n  resourceGroups,\n  variableOptionGroup,\n  onQueryChange,\n  setError,\n}) => {\n  const handleChange = useCallback(\n    (change: SelectableValue<string>) => {\n      const newQuery = setResourceGroup(query, change.value);\n      onQueryChange(newQuery);\n    },\n    [onQueryChange, query]\n  );\n\n  const options = useMemo(() => [...resourceGroups, variableOptionGroup], [resourceGroups, variableOptionGroup]);\n\n  return (\n    <Field label=\"Resource group\">\n      <Select\n        menuShouldPortal\n        inputId=\"azure-monitor-metrics-resource-group-field\"\n        value={query.azureMonitor?.resourceGroup}\n        onChange={handleChange}\n        options={options}\n        width={38}\n        allowCustomValue\n      />\n    </Field>\n  );\n};\n\nexport default ResourceGroupsField;\n","import React, { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps, AzureMonitorOption } from '../../types';\nimport { Field } from '../Field';\n\nimport { setResourceName } from './setQueryValue';\n\ninterface ResourceNameFieldProps extends AzureQueryEditorFieldProps {\n  resourceNames: AzureMonitorOption[];\n}\n\nconst ResourceNameField: React.FC<ResourceNameFieldProps> = ({\n  resourceNames,\n  query,\n  variableOptionGroup,\n  onQueryChange,\n}) => {\n  const handleChange = useCallback(\n    (change: SelectableValue<string>) => {\n      const newQuery = setResourceName(query, change.value);\n      onQueryChange(newQuery);\n    },\n    [onQueryChange, query]\n  );\n\n  const options = useMemo(() => [...resourceNames, variableOptionGroup], [resourceNames, variableOptionGroup]);\n  const value = query.azureMonitor?.resourceName ?? null;\n\n  return (\n    <Field label=\"Resource name\">\n      <Select\n        menuShouldPortal\n        inputId=\"azure-monitor-metrics-resource-name-field\"\n        value={value}\n        onChange={handleChange}\n        options={options}\n        width={38}\n        allowCustomValue\n      />\n    </Field>\n  );\n};\n\nexport default ResourceNameField;\n","import React, { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps, AzureMonitorOption } from '../../types';\nimport { Field } from '../Field';\n\nimport { setResourceType } from './setQueryValue';\n\ninterface NamespaceFieldProps extends AzureQueryEditorFieldProps {\n  resourceTypes: AzureMonitorOption[];\n}\n\nconst NamespaceField: React.FC<NamespaceFieldProps> = ({\n  resourceTypes,\n  query,\n  variableOptionGroup,\n  onQueryChange,\n}) => {\n  const handleChange = useCallback(\n    (change: SelectableValue<string>) => {\n      if (!change.value) {\n        return;\n      }\n\n      const newQuery = setResourceType(query, change.value);\n      onQueryChange(newQuery);\n    },\n    [onQueryChange, query]\n  );\n\n  const options = useMemo(() => [...resourceTypes, variableOptionGroup], [resourceTypes, variableOptionGroup]);\n\n  return (\n    <Field label=\"Resource type\">\n      {/* It's expected that the label reads Resource type but the property is metricDefinition */}\n      <Select\n        menuShouldPortal\n        inputId=\"azure-monitor-metrics-resource-type-field\"\n        value={query.azureMonitor?.metricDefinition}\n        onChange={handleChange}\n        options={options}\n        width={38}\n        allowCustomValue\n      />\n    </Field>\n  );\n};\n\nexport default NamespaceField;\n","import React, { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport TimegrainConverter from '../../time_grain_converter';\nimport { AzureQueryEditorFieldProps, AzureMonitorOption } from '../../types';\nimport { Field } from '../Field';\n\nimport { setTimeGrain } from './setQueryValue';\n\ninterface TimeGrainFieldProps extends AzureQueryEditorFieldProps {\n  timeGrainOptions: AzureMonitorOption[];\n}\n\nconst TimeGrainField: React.FC<TimeGrainFieldProps> = ({\n  query,\n  timeGrainOptions,\n  variableOptionGroup,\n  onQueryChange,\n}) => {\n  const handleChange = useCallback(\n    (change: SelectableValue<string>) => {\n      if (!change.value) {\n        return;\n      }\n\n      const newQuery = setTimeGrain(query, change.value);\n      onQueryChange(newQuery);\n    },\n    [onQueryChange, query]\n  );\n\n  const timeGrains = useMemo(() => {\n    const autoInterval = TimegrainConverter.findClosestTimeGrain(\n      '1m',\n      timeGrainOptions.map((o) => TimegrainConverter.createKbnUnitFromISO8601Duration(o.value)) || [\n        '1m',\n        '5m',\n        '15m',\n        '30m',\n        '1h',\n        '6h',\n        '12h',\n        '1d',\n      ]\n    );\n\n    const baseTimeGrains = timeGrainOptions.map((v) => (v.value === 'auto' ? { ...v, description: autoInterval } : v));\n\n    return [...baseTimeGrains, variableOptionGroup];\n  }, [timeGrainOptions, variableOptionGroup]);\n\n  return (\n    <Field label=\"Time grain\">\n      <Select\n        menuShouldPortal\n        inputId=\"azure-monitor-metrics-time-grain-field\"\n        value={query.azureMonitor?.timeGrain}\n        onChange={handleChange}\n        options={timeGrains}\n        width={38}\n      />\n    </Field>\n  );\n};\n\nexport default TimeGrainField;\n","import React, { useCallback, useState } from 'react';\n\nimport { Input } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps } from '../../types';\nimport { Field } from '../Field';\n\nimport { setTop } from './setQueryValue';\n\nconst TopField: React.FC<AzureQueryEditorFieldProps> = ({ onQueryChange, query }) => {\n  const [value, setValue] = useState<string>(query.azureMonitor?.top ?? '');\n\n  // As calling onQueryChange initiates a the datasource refresh, we only want to call it once\n  // the field loses focus\n  const handleChange = useCallback((ev: React.FormEvent) => {\n    if (ev.target instanceof HTMLInputElement) {\n      setValue(ev.target.value);\n    }\n  }, []);\n\n  const handleBlur = useCallback(() => {\n    const newQuery = setTop(query, value);\n    onQueryChange(newQuery);\n  }, [onQueryChange, query, value]);\n\n  return (\n    <Field label=\"Top\">\n      <Input\n        id=\"azure-monitor-metrics-top-field\"\n        value={value}\n        onChange={handleChange}\n        onBlur={handleBlur}\n        width={16}\n      />\n    </Field>\n  );\n};\n\nexport default TopField;\n","import { useEffect, useMemo, useState } from 'react';\n\nimport { rangeUtil } from '@grafana/data';\n\nimport Datasource from '../../datasource';\nimport TimegrainConverter from '../../time_grain_converter';\nimport { AzureMonitorErrorish, AzureMonitorOption, AzureMonitorQuery } from '../../types';\nimport { hasOption, toOption } from '../../utils/common';\n\nimport { setMetricNamespace, setSubscriptionID } from './setQueryValue';\n\nexport interface MetricMetadata {\n  aggOptions: AzureMonitorOption[];\n  timeGrains: AzureMonitorOption[];\n  dimensions: AzureMonitorOption[];\n  isLoading: boolean;\n\n  // These two properties are only used within the hook, and not elsewhere\n  supportedAggTypes: string[];\n  primaryAggType: string | undefined;\n}\n\ntype SetErrorFn = (source: string, error: AzureMonitorErrorish | undefined) => void;\ntype OnChangeFn = (newQuery: AzureMonitorQuery) => void;\n\nexport type DataHook = (\n  query: AzureMonitorQuery,\n  datasource: Datasource,\n  onChange: OnChangeFn,\n  setError: SetErrorFn\n) => AzureMonitorOption[];\n\nexport function useAsyncState<T>(asyncFn: () => Promise<T>, setError: Function, dependencies: unknown[]) {\n  // Use the lazy initial state functionality of useState to assign a random ID to the API call\n  // to track where errors come from. See useLastError.\n  const [errorSource] = useState(() => Math.random());\n  const [value, setValue] = useState<T>();\n\n  const finalValue = useMemo(() => value ?? [], [value]);\n\n  useEffect(() => {\n    asyncFn()\n      .then((results) => {\n        setValue(results);\n        setError(errorSource, undefined);\n      })\n      .catch((err) => {\n        setError(errorSource, err);\n      });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, dependencies);\n\n  return finalValue;\n}\nexport type MetricsMetadataHook = (\n  query: AzureMonitorQuery,\n  datasource: Datasource,\n  onChange: OnChangeFn\n) => MetricMetadata;\n\nexport const updateSubscriptions = (\n  query: AzureMonitorQuery,\n  subscriptionOptions: AzureMonitorOption[],\n  onChange: OnChangeFn,\n  defaultSubscription?: string\n) => {\n  const { subscription } = query;\n\n  // Return early if subscriptions havent loaded, or if the query already has a subscription\n  if (\n    !subscriptionOptions.length ||\n    (subscription && (hasOption(subscriptionOptions, subscription) || subscription.includes('$')))\n  ) {\n    return;\n  }\n\n  const defaultSub = defaultSubscription || subscriptionOptions[0].value;\n\n  if (!subscription && defaultSub && hasOption(subscriptionOptions, defaultSub)) {\n    onChange(setSubscriptionID(query, defaultSub));\n  }\n\n  // Check if the current subscription is in the list of subscriptions\n  if (subscription && !hasOption(subscriptionOptions, subscription)) {\n    if (hasOption(subscriptionOptions, defaultSub)) {\n      // Use the default sub if is on theh list\n      onChange(setSubscriptionID(query, defaultSub));\n    } else {\n      // Neither the current subscription nor the defaultSub is on the list, remove it\n      onChange(setSubscriptionID(query, ''));\n    }\n  }\n};\n\nexport const useSubscriptions: DataHook = (query, datasource, onChange, setError) => {\n  const defaultSubscription = datasource.azureMonitorDatasource.defaultSubscriptionId;\n  const { subscription } = query;\n\n  const subscriptionOptions = useAsyncState(\n    async () => {\n      const results = await datasource.azureMonitorDatasource.getSubscriptions();\n      const options = formatOptions(results, subscription);\n\n      return options;\n    },\n    setError,\n    []\n  );\n\n  useEffect(() => {\n    updateSubscriptions(query, subscriptionOptions, onChange, defaultSubscription);\n  }, [subscriptionOptions, query, defaultSubscription, onChange]);\n\n  return subscriptionOptions;\n};\n\nexport const useResourceGroups: DataHook = (query, datasource, onChange, setError) => {\n  const { subscription } = query;\n  const { resourceGroup } = query.azureMonitor ?? {};\n\n  return useAsyncState(\n    async () => {\n      if (!subscription) {\n        return;\n      }\n\n      const results = await datasource.getResourceGroups(subscription);\n      const options = formatOptions(results, resourceGroup);\n\n      return options;\n    },\n    setError,\n    [subscription]\n  );\n};\n\nexport const useResourceTypes: DataHook = (query, datasource, onChange, setError) => {\n  const { subscription } = query;\n  const { resourceGroup, metricDefinition } = query.azureMonitor ?? {};\n\n  return useAsyncState(\n    async () => {\n      if (!(subscription && resourceGroup)) {\n        return;\n      }\n\n      const results = await datasource.getMetricDefinitions(subscription, resourceGroup);\n      const options = formatOptions(results, metricDefinition);\n\n      return options;\n    },\n    setError,\n    [subscription, resourceGroup]\n  );\n};\n\nexport const useResourceNames: DataHook = (query, datasource, onChange, setError) => {\n  const { subscription } = query;\n  const { resourceGroup, metricDefinition, resourceName } = query.azureMonitor ?? {};\n\n  return useAsyncState(\n    async () => {\n      if (!(subscription && resourceGroup && metricDefinition)) {\n        return;\n      }\n\n      const results = await datasource.getResourceNames(subscription, resourceGroup, metricDefinition);\n      const options = formatOptions(results, resourceName);\n\n      return options;\n    },\n    setError,\n    [subscription, resourceGroup, metricDefinition]\n  );\n};\n\nexport const useMetricNamespaces: DataHook = (query, datasource, onChange, setError) => {\n  const { subscription } = query;\n  const { resourceGroup, metricDefinition, resourceName, metricNamespace } = query.azureMonitor ?? {};\n\n  const metricNamespaces = useAsyncState(\n    async () => {\n      if (!(subscription && resourceGroup && metricDefinition && resourceName)) {\n        return;\n      }\n\n      const results = await datasource.getMetricNamespaces(subscription, resourceGroup, metricDefinition, resourceName);\n      const options = formatOptions(results, metricNamespace);\n\n      // Do some cleanup of the query state if need be\n      if (!metricNamespace && options.length) {\n        onChange(setMetricNamespace(query, options[0].value));\n      }\n\n      return options;\n    },\n    setError,\n    [subscription, resourceGroup, metricDefinition, resourceName]\n  );\n\n  return metricNamespaces;\n};\n\nexport const useMetricNames: DataHook = (query, datasource, onChange, setError) => {\n  const { subscription } = query;\n  const { resourceGroup, metricDefinition, resourceName, metricNamespace, metricName } = query.azureMonitor ?? {};\n\n  return useAsyncState(\n    async () => {\n      if (!(subscription && resourceGroup && metricDefinition && resourceName && metricNamespace)) {\n        return;\n      }\n\n      const results = await datasource.getMetricNames(\n        subscription,\n        resourceGroup,\n        metricDefinition,\n        resourceName,\n        metricNamespace\n      );\n\n      const options = formatOptions(results, metricName);\n\n      return options;\n    },\n    setError,\n    [subscription, resourceGroup, metricDefinition, resourceName, metricNamespace]\n  );\n};\n\nexport const useMetricMetadata = (query: AzureMonitorQuery, datasource: Datasource, onChange: OnChangeFn) => {\n  const [metricMetadata, setMetricMetadata] = useState<MetricMetadata>({\n    aggOptions: [],\n    timeGrains: [],\n    dimensions: [],\n    isLoading: false,\n    supportedAggTypes: [],\n    primaryAggType: undefined,\n  });\n\n  const { subscription } = query;\n  const { resourceGroup, metricDefinition, resourceName, metricNamespace, metricName, aggregation, timeGrain } =\n    query.azureMonitor ?? {};\n\n  // Fetch new metric metadata when the fields change\n  useEffect(() => {\n    if (!(subscription && resourceGroup && metricDefinition && resourceName && metricNamespace && metricName)) {\n      return;\n    }\n\n    datasource\n      .getMetricMetadata(subscription, resourceGroup, metricDefinition, resourceName, metricNamespace, metricName)\n      .then((metadata) => {\n        // TODO: Move the aggregationTypes and timeGrain defaults into `getMetricMetadata`\n        const aggregations = (metadata.supportedAggTypes || [metadata.primaryAggType]).map((v) => ({\n          label: v,\n          value: v,\n        }));\n        setMetricMetadata({\n          aggOptions: aggregations,\n          timeGrains: metadata.supportedTimeGrains,\n          dimensions: metadata.dimensions,\n          isLoading: false,\n          supportedAggTypes: metadata.supportedAggTypes ?? [],\n          primaryAggType: metadata.primaryAggType,\n        });\n      });\n  }, [datasource, subscription, resourceGroup, metricDefinition, resourceName, metricNamespace, metricName]);\n\n  // Update the query state in response to the meta data changing\n  useEffect(() => {\n    const newAggregation = aggregation || metricMetadata.primaryAggType;\n    const newTimeGrain = timeGrain || 'auto';\n\n    if (newAggregation !== aggregation || newTimeGrain !== timeGrain) {\n      onChange({\n        ...query,\n        azureMonitor: {\n          ...query.azureMonitor,\n          aggregation: newAggregation,\n          timeGrain: newTimeGrain,\n          allowedTimeGrainsMs: metricMetadata.timeGrains\n            .filter((timeGrain) => timeGrain.value !== 'auto')\n            .map((timeGrain) =>\n              rangeUtil.intervalToMs(TimegrainConverter.createKbnUnitFromISO8601Duration(timeGrain.value))\n            ),\n        },\n      });\n    }\n  }, [onChange, metricMetadata, aggregation, timeGrain, query]);\n\n  return metricMetadata;\n};\n\nfunction formatOptions(\n  rawResults: Array<{\n    text: string;\n    value: string;\n  }>,\n  selectedValue?: string\n) {\n  const options = rawResults.map(toOption);\n\n  // account for custom values that might have been set in json file like ones crafted with a template variable (ex: \"cloud-datasource-resource-$Environment\")\n  if (selectedValue && !options.find((option) => option.value === selectedValue)) {\n    options.push({ label: selectedValue, value: selectedValue });\n  }\n\n  return options;\n}\n","import React from 'react';\n\nimport { PanelData } from '@grafana/data/src/types';\nimport { InlineFieldRow } from '@grafana/ui';\n\nimport Datasource from '../../datasource';\nimport { AzureMonitorQuery, AzureMonitorOption, AzureMonitorErrorish } from '../../types';\nimport SubscriptionField from '../SubscriptionField';\n\nimport AggregationField from './AggregationField';\nimport DimensionFields from './DimensionFields';\nimport LegendFormatField from './LegendFormatField';\nimport MetricNameField from './MetricNameField';\nimport MetricNamespaceField from './MetricNamespaceField';\nimport ResourceGroupsField from './ResourceGroupsField';\nimport ResourceNameField from './ResourceNameField';\nimport ResourceTypeField from './ResourceTypeField';\nimport TimeGrainField from './TimeGrainField';\nimport TopField from './TopField';\nimport {\n  useMetricNames,\n  useMetricNamespaces,\n  useResourceGroups,\n  useResourceNames,\n  useResourceTypes,\n  useSubscriptions,\n  useMetricMetadata,\n} from './dataHooks';\n\ninterface MetricsQueryEditorProps {\n  data: PanelData | undefined;\n  query: AzureMonitorQuery;\n  datasource: Datasource;\n  subscriptionId?: string;\n  onChange: (newQuery: AzureMonitorQuery) => void;\n  variableOptionGroup: { label: string; options: AzureMonitorOption[] };\n  setError: (source: string, error: AzureMonitorErrorish | undefined) => void;\n}\n\nconst MetricsQueryEditor: React.FC<MetricsQueryEditorProps> = ({\n  data,\n  query,\n  datasource,\n  subscriptionId,\n  variableOptionGroup,\n  onChange,\n  setError,\n}) => {\n  const metricsMetadata = useMetricMetadata(query, datasource, onChange);\n  const subscriptions = useSubscriptions(query, datasource, onChange, setError);\n  const resourceGroups = useResourceGroups(query, datasource, onChange, setError);\n  const resourceTypes = useResourceTypes(query, datasource, onChange, setError);\n  const resourceNames = useResourceNames(query, datasource, onChange, setError);\n  const metricNames = useMetricNames(query, datasource, onChange, setError);\n  const metricNamespaces = useMetricNamespaces(query, datasource, onChange, setError);\n\n  return (\n    <div data-testid=\"azure-monitor-metrics-query-editor\">\n      <InlineFieldRow>\n        <SubscriptionField\n          subscriptions={subscriptions}\n          query={query}\n          datasource={datasource}\n          subscriptionId={subscriptionId}\n          variableOptionGroup={variableOptionGroup}\n          onQueryChange={onChange}\n          setError={setError}\n        />\n\n        <ResourceGroupsField\n          resourceGroups={resourceGroups}\n          query={query}\n          datasource={datasource}\n          subscriptionId={subscriptionId}\n          variableOptionGroup={variableOptionGroup}\n          onQueryChange={onChange}\n          setError={setError}\n        />\n      </InlineFieldRow>\n\n      <InlineFieldRow>\n        <ResourceTypeField\n          resourceTypes={resourceTypes}\n          query={query}\n          datasource={datasource}\n          subscriptionId={subscriptionId}\n          variableOptionGroup={variableOptionGroup}\n          onQueryChange={onChange}\n          setError={setError}\n        />\n        <ResourceNameField\n          resourceNames={resourceNames}\n          query={query}\n          datasource={datasource}\n          subscriptionId={subscriptionId}\n          variableOptionGroup={variableOptionGroup}\n          onQueryChange={onChange}\n          setError={setError}\n        />\n      </InlineFieldRow>\n\n      <InlineFieldRow>\n        <MetricNamespaceField\n          metricNamespaces={metricNamespaces}\n          query={query}\n          datasource={datasource}\n          subscriptionId={subscriptionId}\n          variableOptionGroup={variableOptionGroup}\n          onQueryChange={onChange}\n          setError={setError}\n        />\n        <MetricNameField\n          metricNames={metricNames}\n          query={query}\n          datasource={datasource}\n          subscriptionId={subscriptionId}\n          variableOptionGroup={variableOptionGroup}\n          onQueryChange={onChange}\n          setError={setError}\n        />\n      </InlineFieldRow>\n      <InlineFieldRow>\n        <AggregationField\n          query={query}\n          datasource={datasource}\n          subscriptionId={subscriptionId}\n          variableOptionGroup={variableOptionGroup}\n          onQueryChange={onChange}\n          setError={setError}\n          aggregationOptions={metricsMetadata?.aggOptions ?? []}\n          isLoading={metricsMetadata.isLoading}\n        />\n        <TimeGrainField\n          query={query}\n          datasource={datasource}\n          subscriptionId={subscriptionId}\n          variableOptionGroup={variableOptionGroup}\n          onQueryChange={onChange}\n          setError={setError}\n          timeGrainOptions={metricsMetadata?.timeGrains ?? []}\n        />\n      </InlineFieldRow>\n      <DimensionFields\n        data={data}\n        query={query}\n        datasource={datasource}\n        subscriptionId={subscriptionId}\n        variableOptionGroup={variableOptionGroup}\n        onQueryChange={onChange}\n        setError={setError}\n        dimensionOptions={metricsMetadata?.dimensions ?? []}\n      />\n      <TopField\n        query={query}\n        datasource={datasource}\n        subscriptionId={subscriptionId}\n        variableOptionGroup={variableOptionGroup}\n        onQueryChange={onChange}\n        setError={setError}\n      />\n      <LegendFormatField\n        query={query}\n        datasource={datasource}\n        subscriptionId={subscriptionId}\n        variableOptionGroup={variableOptionGroup}\n        onQueryChange={onChange}\n        setError={setError}\n      />\n    </div>\n  );\n};\n\nexport default MetricsQueryEditor;\n","import React from 'react';\n\ninterface MetricsQueryEditorProps {}\n\nconst MetricsQueryEditor: React.FC<MetricsQueryEditorProps> = ({}) => {\n  return <div data-testid=\"azure-monitor-metrics-query-editor-with-resource-picker\">New Query Editor</div>;\n};\n\nexport default MetricsQueryEditor;\n","import React from 'react';\n\nimport { Alert, Input } from '@grafana/ui';\n\nimport { Field } from '../../../Field';\nimport { DeprecatedAzureMonitorQuery } from '../../types';\n\nconst ReadOnlyTimeGrain = ({\n  timeGrainCount,\n  timeGrainType,\n  timeGrainUnit,\n}: {\n  timeGrainCount: string;\n  timeGrainType: string;\n  timeGrainUnit: string;\n}) => {\n  const timeFields = timeGrainType === 'specific' ? ['specific', timeGrainCount, timeGrainUnit] : [timeGrainType];\n\n  return (\n    <Field label=\"Timegrain\">\n      <>\n        {timeFields.map((timeField) => (\n          <Input value={timeField} disabled={true} onChange={() => {}} key={timeField} width={10} />\n        ))}\n      </>\n    </Field>\n  );\n};\n\nconst ApplicationInsightsEditor = ({ query }: { query: DeprecatedAzureMonitorQuery }) => {\n  const groupBy = query.appInsights?.dimension || [];\n\n  return (\n    <div data-testid=\"azure-monitor-application-insights-query-editor\">\n      <Field label=\"Metric\" disabled={true}>\n        <Input\n          value={query.appInsights?.metricName}\n          disabled={true}\n          onChange={() => {}}\n          id=\"azure-monitor-application-insights-metric\"\n        />\n      </Field>\n      <Field label=\"Aggregation\" disabled={true}>\n        <Input value={query.appInsights?.aggregation} disabled={true} onChange={() => {}} />\n      </Field>\n      {groupBy.length > 0 && (\n        <Field label=\"Group by\">\n          <>\n            {groupBy.map((dimension) => (\n              <Input value={dimension} disabled={true} onChange={() => {}} key={dimension} />\n            ))}\n          </>\n        </Field>\n      )}\n      <Field label=\"Filter\" disabled={true}>\n        <Input value={query.appInsights?.dimensionFilter} disabled={true} onChange={() => {}} />\n      </Field>\n      <ReadOnlyTimeGrain\n        timeGrainCount={query.appInsights?.timeGrainCount || ''}\n        timeGrainType={query.appInsights?.timeGrainType || 'auto'}\n        timeGrainUnit={query.appInsights?.timeGrainUnit || 'minute'}\n      />\n      <Field label=\"Legend format\" disabled={true}>\n        <Input placeholder=\"Alias patterns\" value={query.appInsights?.alias} onChange={() => {}} disabled={true} />\n      </Field>\n      <Alert severity=\"info\" title=\"Deprecated\">\n        Application Insights is deprecated and is now read only. Migrate your queries to Metrics to make changes.\n      </Alert>\n    </div>\n  );\n};\n\nexport default ApplicationInsightsEditor;\n","import React from 'react';\n\nimport { Alert, CodeEditor, Select } from '@grafana/ui';\n\nimport { AzureMonitorOption } from '../../../../types';\nimport { Field } from '../../../Field';\nimport { Space } from '../../../Space';\nimport { DeprecatedAzureMonitorQuery } from '../../types';\n\ninterface InsightsAnalyticsEditorProps {\n  query: DeprecatedAzureMonitorQuery;\n}\n\nconst FORMAT_OPTIONS: Array<AzureMonitorOption<string>> = [\n  { label: 'Time series', value: 'time_series' },\n  { label: 'Table', value: 'table' },\n];\n\nconst InsightsAnalyticsEditor: React.FC<InsightsAnalyticsEditorProps> = ({ query }) => {\n  return (\n    <div data-testid=\"azure-monitor-insights-analytics-query-editor\">\n      <CodeEditor\n        language=\"kusto\"\n        value={query.insightsAnalytics?.query ?? ''}\n        height={200}\n        width=\"100%\"\n        readOnly={true}\n        showMiniMap={false}\n      />\n\n      <Field label=\"Format as\">\n        <Select\n          menuShouldPortal\n          inputId=\"azure-monitor-logs-workspaces-field\"\n          value={query.insightsAnalytics?.resultFormat}\n          disabled={true}\n          options={FORMAT_OPTIONS}\n          onChange={() => {}}\n          width={38}\n        />\n      </Field>\n\n      <Space v={2} />\n\n      <Alert severity=\"info\" title=\"Deprecated\">\n        Insights Analytics is deprecated and is now read only. Migrate your queries to Logs to make changes.\n      </Alert>\n    </div>\n  );\n};\n\nexport default InsightsAnalyticsEditor;\n","import React, { useCallback, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { AzureMonitorQuery, AzureQueryType, DeprecatedAzureQueryType } from '../../types';\nimport { Field } from '../Field';\nimport { gtGrafana9 } from '../deprecated/utils';\n\ninterface QueryTypeFieldProps {\n  query: AzureMonitorQuery;\n  onQueryChange: (newQuery: AzureMonitorQuery) => void;\n}\n\nconst QueryTypeField: React.FC<QueryTypeFieldProps> = ({ query, onQueryChange }) => {\n  // Use useState to capture the initial value on first mount. We're not interested in when it changes\n  // We only show App Insights and Insights Analytics if they were initially selected. Otherwise, hide them.\n  const [initialQueryType] = useState(query.queryType);\n\n  const queryTypes: Array<{ value: AzureQueryType | DeprecatedAzureQueryType; label: string }> = [\n    { value: AzureQueryType.AzureMonitor, label: 'Metrics' },\n    { value: AzureQueryType.LogAnalytics, label: 'Logs' },\n    { value: AzureQueryType.AzureResourceGraph, label: 'Azure Resource Graph' },\n  ];\n\n  if (\n    !gtGrafana9() &&\n    (initialQueryType === DeprecatedAzureQueryType.ApplicationInsights ||\n      initialQueryType === DeprecatedAzureQueryType.InsightsAnalytics)\n  ) {\n    queryTypes.push(\n      { value: DeprecatedAzureQueryType.ApplicationInsights, label: 'Application Insights' },\n      { value: DeprecatedAzureQueryType.InsightsAnalytics, label: 'Insights Analytics' }\n    );\n  }\n\n  const handleChange = useCallback(\n    (change: SelectableValue<AzureQueryType | DeprecatedAzureQueryType>) => {\n      change.value &&\n        onQueryChange({\n          ...query,\n          queryType: change.value,\n        });\n    },\n    [onQueryChange, query]\n  );\n\n  return (\n    <Field label=\"Service\">\n      <Select\n        menuShouldPortal\n        inputId=\"azure-monitor-query-type-field\"\n        value={query.queryType}\n        options={queryTypes}\n        onChange={handleChange}\n        width={38}\n      />\n    </Field>\n  );\n};\n\nexport default QueryTypeField;\n","import deepEqual from 'fast-deep-equal';\nimport { defaults } from 'lodash';\nimport { useEffect, useMemo } from 'react';\n\nimport { AzureMonitorQuery, AzureQueryType } from '../../types';\nimport migrateQuery from '../../utils/migrateQuery';\n\nconst DEFAULT_QUERY = {\n  queryType: AzureQueryType.AzureMonitor,\n};\n\nconst prepareQuery = (query: AzureMonitorQuery) => {\n  // Note: _.defaults does not apply default values deeply.\n  const withDefaults = defaults({}, query, DEFAULT_QUERY);\n  const migratedQuery = migrateQuery(withDefaults);\n\n  // If we didn't make any changes to the object, then return the original object to keep the\n  // identity the same, and not trigger any other useEffects or anything.\n  return deepEqual(migratedQuery, query) ? query : migratedQuery;\n};\n\n/**\n * Returns queries with some defaults + migrations, and calls onChange function to notify if it changes\n */\nconst usePreparedQuery = (query: AzureMonitorQuery, onChangeQuery: (newQuery: AzureMonitorQuery) => void) => {\n  const preparedQuery = useMemo(() => prepareQuery(query), [query]);\n\n  useEffect(() => {\n    if (preparedQuery !== query) {\n      onChangeQuery(preparedQuery);\n    }\n  }, [preparedQuery, query, onChangeQuery]);\n\n  return preparedQuery;\n};\n\nexport default usePreparedQuery;\n","import { debounce } from 'lodash';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { QueryEditorProps } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { Alert } from '@grafana/ui';\n\nimport AzureMonitorDatasource from '../../datasource';\nimport {\n  AzureDataSourceJsonData,\n  AzureMonitorErrorish,\n  AzureMonitorOption,\n  AzureMonitorQuery,\n  AzureQueryType,\n  DeprecatedAzureQueryType,\n} from '../../types';\nimport useLastError from '../../utils/useLastError';\nimport ArgQueryEditor from '../ArgQueryEditor';\nimport LogsQueryEditor from '../LogsQueryEditor';\nimport MetricsQueryEditor from '../MetricsQueryEditor';\nimport NewMetricsQueryEditor from '../NewMetricsQueryEditor/MetricsQueryEditor';\nimport { Space } from '../Space';\nimport ApplicationInsightsEditor from '../deprecated/components/ApplicationInsightsEditor';\nimport InsightsAnalyticsEditor from '../deprecated/components/InsightsAnalyticsEditor';\nimport { gtGrafana9 } from '../deprecated/utils';\n\nimport QueryTypeField from './QueryTypeField';\nimport usePreparedQuery from './usePreparedQuery';\n\nexport type AzureMonitorQueryEditorProps = QueryEditorProps<\n  AzureMonitorDatasource,\n  AzureMonitorQuery,\n  AzureDataSourceJsonData\n>;\n\nconst QueryEditor: React.FC<AzureMonitorQueryEditorProps> = ({\n  query: baseQuery,\n  datasource,\n  onChange,\n  onRunQuery: baseOnRunQuery,\n  data,\n}) => {\n  const [errorMessage, setError] = useLastError();\n  const onRunQuery = useMemo(() => debounce(baseOnRunQuery, 500), [baseOnRunQuery]);\n\n  const onQueryChange = useCallback(\n    (newQuery: AzureMonitorQuery) => {\n      onChange(newQuery);\n      onRunQuery();\n    },\n    [onChange, onRunQuery]\n  );\n\n  const query = usePreparedQuery(baseQuery, onQueryChange);\n\n  const subscriptionId = query.subscription || datasource.azureMonitorDatasource.defaultSubscriptionId;\n  const variableOptionGroup = {\n    label: 'Template Variables',\n    options: datasource.getVariables().map((v) => ({ label: v, value: v })),\n  };\n\n  return (\n    <div data-testid=\"azure-monitor-query-editor\">\n      <QueryTypeField query={query} onQueryChange={onQueryChange} />\n\n      <EditorForQueryType\n        data={data}\n        subscriptionId={subscriptionId}\n        query={query}\n        datasource={datasource}\n        onChange={onQueryChange}\n        variableOptionGroup={variableOptionGroup}\n        setError={setError}\n      />\n\n      {errorMessage && (\n        <>\n          <Space v={2} />\n          <Alert severity=\"error\" title=\"An error occurred while requesting metadata from Azure Monitor\">\n            {errorMessage}\n          </Alert>\n        </>\n      )}\n    </div>\n  );\n};\n\ninterface EditorForQueryTypeProps extends Omit<AzureMonitorQueryEditorProps, 'onRunQuery'> {\n  subscriptionId?: string;\n  variableOptionGroup: { label: string; options: AzureMonitorOption[] };\n  setError: (source: string, error: AzureMonitorErrorish | undefined) => void;\n}\n\nconst EditorForQueryType: React.FC<EditorForQueryTypeProps> = ({\n  data,\n  subscriptionId,\n  query,\n  datasource,\n  variableOptionGroup,\n  onChange,\n  setError,\n}) => {\n  switch (query.queryType) {\n    case AzureQueryType.AzureMonitor:\n      if (config.featureToggles.azureMonitorResourcePickerForMetrics) {\n        return <NewMetricsQueryEditor />;\n      }\n      return (\n        <MetricsQueryEditor\n          data={data}\n          subscriptionId={subscriptionId}\n          query={query}\n          datasource={datasource}\n          onChange={onChange}\n          variableOptionGroup={variableOptionGroup}\n          setError={setError}\n        />\n      );\n\n    case AzureQueryType.LogAnalytics:\n      return (\n        <LogsQueryEditor\n          subscriptionId={subscriptionId}\n          query={query}\n          datasource={datasource}\n          onChange={onChange}\n          variableOptionGroup={variableOptionGroup}\n          setError={setError}\n        />\n      );\n\n    case AzureQueryType.AzureResourceGraph:\n      return (\n        <ArgQueryEditor\n          subscriptionId={subscriptionId}\n          query={query}\n          datasource={datasource}\n          onChange={onChange}\n          variableOptionGroup={variableOptionGroup}\n          setError={setError}\n        />\n      );\n\n    /** Remove with Grafana 9 */\n    case DeprecatedAzureQueryType.ApplicationInsights:\n      if (gtGrafana9()) {\n        return (\n          <Alert title=\"Deprecated\">\n            Application Insights has been deprecated.{' '}\n            <a\n              href=\"https://grafana.com/docs/grafana/latest/datasources/azuremonitor/deprecated-application-insights/#application-insights\"\n              target=\"_blank\"\n              rel=\"noreferrer\"\n            >\n              Use the Metrics service instead\n            </a>\n            .\n          </Alert>\n        );\n      }\n      return <ApplicationInsightsEditor query={query} />;\n\n    case DeprecatedAzureQueryType.InsightsAnalytics:\n      if (gtGrafana9()) {\n        return (\n          <Alert title=\"Deprecated\">\n            Insight Analytics has been deprecated.{' '}\n            <a\n              href=\"https://grafana.com/docs/grafana/latest/datasources/azuremonitor/deprecated-application-insights/#insights-analytics\"\n              target=\"_blank\"\n              rel=\"noreferrer\"\n            >\n              Queries can be written with Kusto in the Logs query type by selecting your Application Insights resource\n            </a>\n            .\n          </Alert>\n        );\n      }\n      return <InsightsAnalyticsEditor query={query} />;\n    /** ===================== */\n\n    default:\n      return <Alert title=\"Unknown query type\" />;\n  }\n\n  return null;\n};\n\nexport default QueryEditor;\n","export enum ResourceRowType {\n  Subscription = 'Subscription',\n  ResourceGroup = 'ResourceGroup',\n  Resource = 'Resource',\n  VariableGroup = 'TemplateVariableGroup',\n  Variable = 'TemplateVariable',\n}\n\nexport interface ResourceRow {\n  id: string; // azure's raw data id usually passes along a uri (except in the case of subscriptions), to make things less confusing for ourselves we parse the id string out of the uri or vice versa\n  uri: string; // ex: /subscriptions/subid123\n  name: string;\n  type: ResourceRowType;\n  typeLabel: string;\n  location?: string;\n  children?: ResourceRowGroup;\n}\n\nexport type ResourceRowGroup = ResourceRow[];\n","import produce from 'immer';\n\nimport { ResourceRow, ResourceRowGroup } from './types';\n\n// This regex matches URIs representing:\n//  - subscriptions: /subscriptions/44693801-6ee6-49de-9b2d-9106972f9572\n//  - resource groups: /subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources\n//  - resources: /subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources/providers/Microsoft.Compute/virtualMachines/GithubTestDataVM\nconst RESOURCE_URI_REGEX =\n  /\\/subscriptions\\/(?<subscriptionID>[^/]+)(?:\\/resourceGroups\\/(?<resourceGroup>[^/]+)(?:\\/providers.+\\/(?<resource>[^/]+))?)?/;\n\ntype RegexGroups = Record<string, string | undefined>;\n\nexport function parseResourceURI(resourceURI: string) {\n  const matches = RESOURCE_URI_REGEX.exec(resourceURI);\n  const groups: RegexGroups = matches?.groups ?? {};\n  const { subscriptionID, resourceGroup, resource } = groups;\n\n  if (!subscriptionID) {\n    return undefined;\n  }\n\n  return { subscriptionID, resourceGroup, resource };\n}\n\nexport function isGUIDish(input: string) {\n  return !!input.match(/^[A-Z0-9]+/i);\n}\n\nexport function findRow(rows: ResourceRowGroup, uri: string): ResourceRow | undefined {\n  for (const row of rows) {\n    if (row.uri.toLowerCase() === uri.toLowerCase()) {\n      return row;\n    }\n\n    if (row.children) {\n      const result = findRow(row.children, uri);\n\n      if (result) {\n        return result;\n      }\n    }\n  }\n\n  return undefined;\n}\n\nexport function addResources(rows: ResourceRowGroup, targetParentId: string, newResources: ResourceRowGroup) {\n  return produce(rows, (draftState) => {\n    const draftRow = findRow(draftState, targetParentId);\n\n    // we can't find the selected resource in our list of resources,\n    // probably means user has either mistyped in the input field\n    // or is using template variables.\n    // either way no need to throw, just show that none of the resources are checked\n    if (!draftRow) {\n      return;\n    }\n\n    draftRow.children = newResources;\n  });\n}\n","import { css, cx } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { stylesFactory, useTheme2 } from '@grafana/ui';\n\nexport interface SpaceProps {\n  v?: number;\n  h?: number;\n  layout?: 'block' | 'inline';\n}\n\nexport const Space = (props: SpaceProps) => {\n  const theme = useTheme2();\n  const styles = getStyles(theme, props);\n\n  return <span className={cx(styles.wrapper)} />;\n};\n\nSpace.defaultProps = {\n  v: 0,\n  h: 0,\n  layout: 'block',\n};\n\nconst getStyles = stylesFactory((theme: GrafanaTheme2, props: SpaceProps) => ({\n  wrapper: css([\n    {\n      paddingRight: theme.spacing(props.h ?? 0),\n      paddingBottom: theme.spacing(props.v ?? 0),\n    },\n    props.layout === 'inline' && {\n      display: 'inline-block',\n    },\n    props.layout === 'block' && {\n      display: 'block',\n    },\n  ]),\n}));\n","import { gt, valid } from 'semver';\n\nimport { config } from '@grafana/runtime';\n\nimport { AzureDataSourceSettings } from '../../types';\n\nexport function isAppInsightsConfigured(options: AzureDataSourceSettings) {\n  return !!(options.jsonData.appInsightsAppId && options.secureJsonFields.appInsightsApiKey);\n}\n\nexport function gtGrafana9() {\n  // AppInsights configuration will be removed with Grafana 9\n  return valid(config.buildInfo.version) && gt(config.buildInfo.version, '9.0.0-beta1');\n}\n","import { includes, filter } from 'lodash';\n\nimport { rangeUtil } from '@grafana/data';\n\nexport default class TimeGrainConverter {\n  static createISO8601Duration(timeGrain: string | number, timeGrainUnit: any) {\n    const timeIntervals = ['hour', 'minute', 'h', 'm'];\n    if (includes(timeIntervals, timeGrainUnit)) {\n      return `PT${timeGrain}${timeGrainUnit[0].toUpperCase()}`;\n    }\n\n    return `P${timeGrain}${timeGrainUnit[0].toUpperCase()}`;\n  }\n\n  static createISO8601DurationFromInterval(interval: string) {\n    const timeGrain = +interval.slice(0, interval.length - 1);\n    const unit = interval[interval.length - 1];\n\n    if (interval.indexOf('ms') > -1) {\n      return TimeGrainConverter.createISO8601Duration(1, 'm');\n    }\n\n    if (interval[interval.length - 1] === 's') {\n      let toMinutes = (timeGrain * 60) % 60;\n\n      if (toMinutes < 1) {\n        toMinutes = 1;\n      }\n\n      return TimeGrainConverter.createISO8601Duration(toMinutes, 'm');\n    }\n\n    return TimeGrainConverter.createISO8601Duration(timeGrain, unit);\n  }\n\n  static findClosestTimeGrain(interval: any, allowedTimeGrains: string[]) {\n    const timeGrains = filter(allowedTimeGrains, (o) => o !== 'auto');\n\n    let closest = timeGrains[0];\n    const intervalMs = rangeUtil.intervalToMs(interval);\n\n    for (let i = 0; i < timeGrains.length; i++) {\n      // abs (num - val) < abs (num - curr):\n      if (intervalMs > rangeUtil.intervalToMs(timeGrains[i])) {\n        if (i + 1 < timeGrains.length) {\n          closest = timeGrains[i + 1];\n        } else {\n          closest = timeGrains[i];\n        }\n      }\n    }\n\n    return closest;\n  }\n\n  static createTimeGrainFromISO8601Duration(duration: string) {\n    let offset = 1;\n    if (duration.substring(0, 2) === 'PT') {\n      offset = 2;\n    }\n\n    const value = duration.substring(offset, duration.length - 1);\n    const unit = duration.substring(duration.length - 1);\n\n    return value + ' ' + TimeGrainConverter.timeUnitToText(+value, unit);\n  }\n\n  static timeUnitToText(value: number, unit: string) {\n    let text = '';\n\n    if (unit === 'S') {\n      text = 'second';\n    }\n    if (unit === 'M') {\n      text = 'minute';\n    }\n    if (unit === 'H') {\n      text = 'hour';\n    }\n    if (unit === 'D') {\n      text = 'day';\n    }\n\n    if (value > 1) {\n      return text + 's';\n    }\n\n    return text;\n  }\n\n  static createKbnUnitFromISO8601Duration(duration: string) {\n    if (duration === 'auto') {\n      return 'auto';\n    }\n\n    let offset = 1;\n    if (duration.substring(0, 2) === 'PT') {\n      offset = 2;\n    }\n\n    const value = duration.substring(offset, duration.length - 1);\n    const unit = duration.substring(duration.length - 1);\n\n    return value + TimeGrainConverter.timeUnitToKbn(+value, unit);\n  }\n\n  static timeUnitToKbn(value: number, unit: string) {\n    if (unit === 'S') {\n      return 's';\n    }\n    if (unit === 'M') {\n      return 'm';\n    }\n    if (unit === 'H') {\n      return 'h';\n    }\n    if (unit === 'D') {\n      return 'd';\n    }\n\n    return '';\n  }\n}\n","import { DeprecatedAzureMonitorQuery } from '../components/deprecated/types';\n\nimport { GrafanaTemplateVariableQuery } from './templateVariables';\n\nexport enum AzureQueryType {\n  AzureMonitor = 'Azure Monitor',\n  LogAnalytics = 'Azure Log Analytics',\n  AzureResourceGraph = 'Azure Resource Graph',\n  GrafanaTemplateVariableFn = 'Grafana Template Variable Function',\n}\n\n// DeprecatedAzureQueryType won't be available after Grafana 9\nexport enum DeprecatedAzureQueryType {\n  ApplicationInsights = 'Application Insights',\n  InsightsAnalytics = 'Insights Analytics',\n}\n\n/**\n * Represents the query as it moves through the frontend query editor and datasource files.\n * It can represent new queries that are still being edited, so all properties are optional\n */\nexport interface AzureMonitorQuery extends DeprecatedAzureMonitorQuery {\n  queryType?: AzureQueryType | DeprecatedAzureQueryType;\n\n  subscription?: string;\n\n  /** ARG uses multiple subscriptions */\n  subscriptions?: string[];\n\n  azureMonitor?: AzureMetricQuery;\n  azureLogAnalytics?: AzureLogsQuery;\n  azureResourceGraph?: AzureResourceGraphQuery;\n  grafanaTemplateVariableFn?: GrafanaTemplateVariableQuery;\n}\n\n/**\n * Azure Monitor Metrics sub-query properties\n */\nexport interface AzureMetricQuery {\n  resourceGroup?: string;\n\n  /** Resource type */\n  metricDefinition?: string;\n\n  resourceName?: string;\n  metricNamespace?: string;\n  metricName?: string;\n  timeGrain?: string;\n  aggregation?: string;\n  dimensionFilters?: AzureMetricDimension[];\n  alias?: string;\n  top?: string;\n  allowedTimeGrainsMs?: number[];\n\n  /** @deprecated */\n  timeGrainUnit?: string;\n\n  /** @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration */\n  dimension?: string;\n\n  /** @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration */\n  dimensionFilter?: string;\n}\n\n/**\n * Azure Monitor Logs sub-query properties\n */\nexport interface AzureLogsQuery {\n  query?: string;\n  resultFormat?: string;\n  resource?: string;\n\n  workspace?: string;\n}\n\n/**\n * Azure Monitor ARG sub-query properties\n */\nexport interface AzureResourceGraphQuery {\n  query?: string;\n  resultFormat?: string;\n}\n\nexport interface AzureMetricDimension {\n  dimension: string;\n  operator: string;\n  filter?: string;\n}\n","import {\n  DataSourceInstanceSettings,\n  DataSourceJsonData,\n  DataSourceSettings,\n  PanelData,\n  TableData,\n} from '@grafana/data';\n\nimport Datasource from '../datasource';\n\nimport { AzureMonitorQuery } from './query';\n\nexport type AzureDataSourceSettings = DataSourceSettings<AzureDataSourceJsonData, AzureDataSourceSecureJsonData>;\nexport type AzureDataSourceInstanceSettings = DataSourceInstanceSettings<AzureDataSourceJsonData>;\n\nexport interface DatasourceValidationResult {\n  status: 'success' | 'error';\n  message: string;\n  title?: string;\n}\n\n/**\n * Azure clouds known to Azure Monitor.\n */\nexport enum AzureCloud {\n  Public = 'AzureCloud',\n  China = 'AzureChinaCloud',\n  USGovernment = 'AzureUSGovernment',\n  Germany = 'AzureGermanCloud',\n  None = '',\n}\n\nexport type AzureAuthType = 'msi' | 'clientsecret';\n\nexport type ConcealedSecret = symbol;\n\ninterface AzureCredentialsBase {\n  authType: AzureAuthType;\n  defaultSubscriptionId?: string;\n}\n\nexport interface AzureManagedIdentityCredentials extends AzureCredentialsBase {\n  authType: 'msi';\n}\n\nexport interface AzureClientSecretCredentials extends AzureCredentialsBase {\n  authType: 'clientsecret';\n  azureCloud?: string;\n  tenantId?: string;\n  clientId?: string;\n  clientSecret?: string | ConcealedSecret;\n}\n\nexport type AzureCredentials = AzureManagedIdentityCredentials | AzureClientSecretCredentials;\n\nexport interface AzureDataSourceJsonData extends DataSourceJsonData {\n  cloudName: string;\n  azureAuthType?: AzureAuthType;\n\n  // monitor\n  tenantId?: string;\n  clientId?: string;\n  subscriptionId?: string;\n\n  // logs\n  /** @deprecated Azure Logs credentials */\n  azureLogAnalyticsSameAs?: boolean;\n  /** @deprecated Azure Logs credentials */\n  logAnalyticsTenantId?: string;\n  /** @deprecated Azure Logs credentials */\n  logAnalyticsClientId?: string;\n  /** @deprecated Azure Logs credentials */\n  logAnalyticsSubscriptionId?: string;\n  /** @deprecated Azure Logs credentials */\n  logAnalyticsDefaultWorkspace?: string;\n\n  // App Insights\n  appInsightsAppId?: string;\n}\n\nexport interface AzureDataSourceSecureJsonData {\n  clientSecret?: string;\n  appInsightsApiKey?: string;\n}\n\n// Represents an errors that come back from frontend requests.\n// Not totally sure how accurate this type is.\nexport type AzureMonitorErrorish = Error;\n\n// Azure Monitor API Types\nexport interface AzureMonitorMetricsMetadataResponse {\n  value: AzureMonitorMetricMetadataItem[];\n}\n\nexport interface AzureMonitorMetricMetadataItem {\n  id: string;\n  resourceId: string;\n  primaryAggregationType: string;\n  supportedAggregationTypes: string[];\n  name: AzureMonitorLocalizedValue;\n  dimensions?: AzureMonitorLocalizedValue[];\n  metricAvailabilities?: AzureMonitorMetricAvailabilityMetadata[];\n}\n\nexport interface AzureMonitorMetricAvailabilityMetadata {\n  timeGrain: string;\n  retention: string;\n}\n\nexport interface AzureMonitorLocalizedValue {\n  value: string;\n  localizedValue: string;\n}\n\nexport interface AzureMonitorMetricDefinitionsResponse {\n  data: {\n    value: Array<{ name: string; type: string; location?: string }>;\n  };\n  status: number;\n  statusText: string;\n}\n\nexport interface AzureMonitorResourceGroupsResponse {\n  data: {\n    value: Array<{ name: string }>;\n  };\n  status: number;\n  statusText: string;\n}\n\nexport interface AzureLogsVariable {\n  text: string;\n  value: string;\n}\n\nexport interface AzureLogsTableData extends TableData {\n  columns: AzureLogsTableColumn[];\n  rows: any[];\n  type: string;\n}\n\nexport interface AzureLogsTableColumn {\n  text: string;\n  type: string;\n}\n\nexport interface AzureMonitorOption<T = string> {\n  label: string;\n  value: T;\n  options?: AzureMonitorOption[];\n}\n\nexport interface AzureQueryEditorFieldProps {\n  data?: PanelData;\n  query: AzureMonitorQuery;\n  datasource: Datasource;\n  subscriptionId?: string;\n  variableOptionGroup: { label: string; options: AzureMonitorOption[] };\n\n  onQueryChange: (newQuery: AzureMonitorQuery) => void;\n  setError: (source: string, error: AzureMonitorErrorish | undefined) => void;\n}\n\nexport interface AzureResourceSummaryItem {\n  subscriptionName: string;\n  resourceGroupName: string | undefined;\n  resourceName: string | undefined;\n}\n\nexport interface RawAzureSubscriptionItem {\n  subscriptionName: string;\n  subscriptionId: string;\n}\n\nexport interface RawAzureResourceGroupItem {\n  resourceGroupURI: string;\n  resourceGroupName: string;\n}\n\nexport interface RawAzureResourceItem {\n  id: string;\n  name: string;\n  subscriptionId: string;\n  resourceGroup: string;\n  type: string;\n  location: string;\n}\n\nexport interface AzureGraphResponse<T = unknown> {\n  data: T;\n  // skipToken is used for pagination, to get the next page\n  $skipToken?: string;\n}\n\n// https://docs.microsoft.com/en-us/rest/api/azureresourcegraph/resourcegraph(2021-03-01)/resources/resources#queryrequestoptions\nexport interface AzureResourceGraphOptions {\n  $skip: number;\n  $skipToken: string;\n  $top: number;\n  allowPartialScopes: boolean;\n  resultFormat: 'objectArray' | 'table';\n}\n","import { map } from 'lodash';\n\nimport { rangeUtil } from '@grafana/data';\nimport { VariableWithMultiSupport } from 'app/features/variables/types';\n\nimport TimegrainConverter from '../time_grain_converter';\nimport { AzureMonitorOption } from '../types';\n\nexport const hasOption = (options: AzureMonitorOption[], value: string): boolean =>\n  options.some((v) => (v.options ? hasOption(v.options, value) : v.value === value));\n\nexport const findOptions = (options: AzureMonitorOption[], values: string[] = []) => {\n  if (values.length === 0) {\n    return [];\n  }\n  const set = values.reduce((accum, item) => {\n    accum.add(item);\n    return accum;\n  }, new Set());\n  return options.filter((option) => set.has(option.value));\n};\n\nexport const toOption = (v: { text: string; value: string }) => ({ value: v.value, label: v.text });\n\nexport function convertTimeGrainsToMs<T extends { value: string }>(timeGrains: T[]) {\n  const allowedTimeGrainsMs: number[] = [];\n  timeGrains.forEach((tg: any) => {\n    if (tg.value !== 'auto') {\n      allowedTimeGrainsMs.push(rangeUtil.intervalToMs(TimegrainConverter.createKbnUnitFromISO8601Duration(tg.value)));\n    }\n  });\n  return allowedTimeGrainsMs;\n}\n\n// Route definitions shared with the backend.\n// Check: /pkg/tsdb/azuremonitor/azuremonitor-resource-handler.go <registerRoutes>\nexport const routeNames = {\n  azureMonitor: 'azuremonitor',\n  logAnalytics: 'loganalytics',\n  appInsights: 'appinsights',\n  resourceGraph: 'resourcegraph',\n};\n\nexport function interpolateVariable(value: any, variable: VariableWithMultiSupport) {\n  if (typeof value === 'string') {\n    // When enabling multiple responses, quote the value to mimic the array result below\n    // even if only one response is selected. This does not apply if only the \"include all\"\n    // option is enabled but with a custom value.\n    if (variable.multi || (variable.includeAll && !variable.allValue)) {\n      return \"'\" + value + \"'\";\n    } else {\n      return value;\n    }\n  }\n\n  if (typeof value === 'number') {\n    return value;\n  }\n\n  const quotedValues = map(value, (val) => {\n    if (typeof value === 'number') {\n      return value;\n    }\n\n    return \"'\" + val + \"'\";\n  });\n  return quotedValues.join(',');\n}\n","import { setKustoQuery } from '../components/LogsQueryEditor/setQueryValue';\nimport {\n  appendDimensionFilter,\n  setTimeGrain as setMetricsTimeGrain,\n} from '../components/MetricsQueryEditor/setQueryValue';\nimport TimegrainConverter from '../time_grain_converter';\nimport { AzureMonitorQuery, AzureQueryType, DeprecatedAzureQueryType } from '../types';\n\nconst OLD_DEFAULT_DROPDOWN_VALUE = 'select';\n\nexport default function migrateQuery(query: AzureMonitorQuery): AzureMonitorQuery {\n  let workingQuery = query;\n\n  // The old angular controller also had a `migrateApplicationInsightsKeys` migraiton that\n  // migrated old properties to other properties that still do not appear to be used anymore, so\n  // we decided to not include that migration anymore\n  // See https://github.com/grafana/grafana/blob/a6a09add/public/app/plugins/datasource/grafana-azure-monitor-datasource/query_ctrl.ts#L269-L288\n\n  workingQuery = migrateTimeGrains(workingQuery);\n  workingQuery = migrateLogAnalyticsToFromTimes(workingQuery);\n  workingQuery = migrateToDefaultNamespace(workingQuery);\n  workingQuery = migrateApplicationInsightsDimensions(workingQuery);\n  workingQuery = migrateMetricsDimensionFilters(workingQuery);\n\n  return workingQuery;\n}\n\nfunction migrateTimeGrains(query: AzureMonitorQuery): AzureMonitorQuery {\n  let workingQuery = query;\n\n  if (workingQuery.azureMonitor?.timeGrainUnit && workingQuery.azureMonitor.timeGrain !== 'auto') {\n    const newTimeGrain = TimegrainConverter.createISO8601Duration(\n      workingQuery.azureMonitor.timeGrain ?? 'auto',\n      workingQuery.azureMonitor.timeGrainUnit\n    );\n    workingQuery = setMetricsTimeGrain(workingQuery, newTimeGrain);\n\n    delete workingQuery.azureMonitor?.timeGrainUnit;\n  }\n\n  if (workingQuery.appInsights?.timeGrainUnit && workingQuery.appInsights.timeGrain !== 'auto') {\n    const appInsights = {\n      ...workingQuery.appInsights,\n    };\n\n    if (workingQuery.appInsights.timeGrainCount) {\n      appInsights.timeGrain = TimegrainConverter.createISO8601Duration(\n        workingQuery.appInsights.timeGrainCount,\n        workingQuery.appInsights.timeGrainUnit\n      );\n    } else {\n      appInsights.timeGrainCount = workingQuery.appInsights.timeGrain;\n\n      if (workingQuery.appInsights.timeGrain) {\n        appInsights.timeGrain = TimegrainConverter.createISO8601Duration(\n          workingQuery.appInsights.timeGrain,\n          workingQuery.appInsights.timeGrainUnit\n        );\n      }\n    }\n\n    workingQuery = {\n      ...workingQuery,\n      appInsights: appInsights,\n    };\n  }\n\n  return workingQuery;\n}\n\nfunction migrateLogAnalyticsToFromTimes(query: AzureMonitorQuery): AzureMonitorQuery {\n  let workingQuery = query;\n\n  if (workingQuery.azureLogAnalytics?.query?.match(/\\$__from\\s/gi)) {\n    workingQuery = setKustoQuery(\n      workingQuery,\n      workingQuery.azureLogAnalytics.query.replace(/\\$__from\\s/gi, '$__timeFrom() ')\n    );\n  }\n\n  if (workingQuery.azureLogAnalytics?.query?.match(/\\$__to\\s/gi)) {\n    workingQuery = setKustoQuery(\n      workingQuery,\n      workingQuery.azureLogAnalytics.query.replace(/\\$__to\\s/gi, '$__timeTo() ')\n    );\n  }\n\n  return workingQuery;\n}\n\nfunction migrateToDefaultNamespace(query: AzureMonitorQuery): AzureMonitorQuery {\n  const haveMetricNamespace =\n    query.azureMonitor?.metricNamespace && query.azureMonitor.metricNamespace !== OLD_DEFAULT_DROPDOWN_VALUE;\n\n  if (!haveMetricNamespace && query.azureMonitor?.metricDefinition) {\n    return {\n      ...query,\n      azureMonitor: {\n        ...query.azureMonitor,\n        metricNamespace: query.azureMonitor.metricDefinition,\n      },\n    };\n  }\n\n  return query;\n}\n\nfunction migrateApplicationInsightsDimensions(query: AzureMonitorQuery): AzureMonitorQuery {\n  const dimension = query?.appInsights?.dimension as unknown;\n\n  if (dimension && typeof dimension === 'string') {\n    return {\n      ...query,\n      appInsights: {\n        ...query.appInsights,\n        dimension: [dimension],\n      },\n    };\n  }\n\n  return query;\n}\n\n// Exported because its also used directly in the datasource.ts for some reason\nfunction migrateMetricsDimensionFilters(query: AzureMonitorQuery): AzureMonitorQuery {\n  let workingQuery = query;\n\n  const oldDimension = workingQuery.azureMonitor?.dimension;\n  if (oldDimension && oldDimension !== 'None') {\n    workingQuery = appendDimensionFilter(\n      workingQuery,\n      oldDimension,\n      'eq',\n      workingQuery.azureMonitor?.dimensionFilter || ''\n    );\n  }\n\n  return workingQuery;\n}\n\n// datasource.ts also contains some migrations, which have been moved to here. Unsure whether\n// they should also do all the other migrations...\nexport function datasourceMigrations(query: AzureMonitorQuery): AzureMonitorQuery {\n  let workingQuery = query;\n\n  if (workingQuery.queryType === DeprecatedAzureQueryType.ApplicationInsights && workingQuery.appInsights?.rawQuery) {\n    workingQuery = {\n      ...workingQuery,\n      queryType: DeprecatedAzureQueryType.InsightsAnalytics,\n      appInsights: undefined,\n      insightsAnalytics: {\n        query: workingQuery.appInsights.rawQuery,\n        resultFormat: 'time_series',\n      },\n    };\n  }\n\n  if (!workingQuery.queryType) {\n    workingQuery = {\n      ...workingQuery,\n      queryType: AzureQueryType.AzureMonitor,\n    };\n  }\n\n  if (workingQuery.queryType === AzureQueryType.AzureMonitor && workingQuery.azureMonitor) {\n    workingQuery = migrateMetricsDimensionFilters(workingQuery);\n  }\n\n  return workingQuery;\n}\n","import { useState, useCallback, useMemo } from 'react';\n\nimport { AzureMonitorErrorish } from '../types';\n\nimport messageFromError from './messageFromError';\n\ntype SourcedError = [string, AzureMonitorErrorish];\n\nexport default function useLastError() {\n  const [errors, setErrors] = useState<SourcedError[]>([]);\n\n  // Handles errors from any child components that request data to display their options\n  const addError = useCallback((errorSource: string, error: AzureMonitorErrorish | undefined) => {\n    setErrors((errors) => {\n      const errorsCopy = [...errors];\n      const index = errors.findIndex(([vSource]) => vSource === errorSource);\n\n      // If there's already an error, remove it. If we're setting a new error\n      // below, we'll move it to the front\n      if (index > -1) {\n        errorsCopy.splice(index, 1);\n      }\n\n      // And then add the new error to the top of the array. If error is defined, it was already\n      // removed above.\n      if (error) {\n        errorsCopy.unshift([errorSource, error]);\n      }\n\n      return errorsCopy;\n    });\n  }, []);\n\n  const errorMessage = useMemo(() => {\n    const recentError = errors[0];\n    return recentError && messageFromError(recentError[1]);\n  }, [errors]);\n\n  return [errorMessage, addError] as const;\n}\n","function n(n){for(var r=arguments.length,t=Array(r>1?r-1:0),e=1;e<r;e++)t[e-1]=arguments[e];if(\"production\"!==process.env.NODE_ENV){var i=Y[n],o=i?\"function\"==typeof i?i.apply(null,t):i:\"unknown error nr: \"+n;throw Error(\"[Immer] \"+o)}throw Error(\"[Immer] minified error nr: \"+n+(t.length?\" \"+t.map((function(n){return\"'\"+n+\"'\"})).join(\",\"):\"\")+\". Find the full error at: https://bit.ly/3cXEKWf\")}function r(n){return!!n&&!!n[Q]}function t(n){return!!n&&(function(n){if(!n||\"object\"!=typeof n)return!1;var r=Object.getPrototypeOf(n);if(null===r)return!0;var t=Object.hasOwnProperty.call(r,\"constructor\")&&r.constructor;return t===Object||\"function\"==typeof t&&Function.toString.call(t)===Z}(n)||Array.isArray(n)||!!n[L]||!!n.constructor[L]||s(n)||v(n))}function e(t){return r(t)||n(23,t),t[Q].t}function i(n,r,t){void 0===t&&(t=!1),0===o(n)?(t?Object.keys:nn)(n).forEach((function(e){t&&\"symbol\"==typeof e||r(e,n[e],n)})):n.forEach((function(t,e){return r(e,t,n)}))}function o(n){var r=n[Q];return r?r.i>3?r.i-4:r.i:Array.isArray(n)?1:s(n)?2:v(n)?3:0}function u(n,r){return 2===o(n)?n.has(r):Object.prototype.hasOwnProperty.call(n,r)}function a(n,r){return 2===o(n)?n.get(r):n[r]}function f(n,r,t){var e=o(n);2===e?n.set(r,t):3===e?(n.delete(r),n.add(t)):n[r]=t}function c(n,r){return n===r?0!==n||1/n==1/r:n!=n&&r!=r}function s(n){return X&&n instanceof Map}function v(n){return q&&n instanceof Set}function p(n){return n.o||n.t}function l(n){if(Array.isArray(n))return Array.prototype.slice.call(n);var r=rn(n);delete r[Q];for(var t=nn(r),e=0;e<t.length;e++){var i=t[e],o=r[i];!1===o.writable&&(o.writable=!0,o.configurable=!0),(o.get||o.set)&&(r[i]={configurable:!0,writable:!0,enumerable:o.enumerable,value:n[i]})}return Object.create(Object.getPrototypeOf(n),r)}function d(n,e){return void 0===e&&(e=!1),y(n)||r(n)||!t(n)?n:(o(n)>1&&(n.set=n.add=n.clear=n.delete=h),Object.freeze(n),e&&i(n,(function(n,r){return d(r,!0)}),!0),n)}function h(){n(2)}function y(n){return null==n||\"object\"!=typeof n||Object.isFrozen(n)}function b(r){var t=tn[r];return t||n(18,r),t}function m(n,r){tn[n]||(tn[n]=r)}function _(){return\"production\"===process.env.NODE_ENV||U||n(0),U}function j(n,r){r&&(b(\"Patches\"),n.u=[],n.s=[],n.v=r)}function O(n){g(n),n.p.forEach(S),n.p=null}function g(n){n===U&&(U=n.l)}function w(n){return U={p:[],l:U,h:n,m:!0,_:0}}function S(n){var r=n[Q];0===r.i||1===r.i?r.j():r.O=!0}function P(r,e){e._=e.p.length;var i=e.p[0],o=void 0!==r&&r!==i;return e.h.g||b(\"ES5\").S(e,r,o),o?(i[Q].P&&(O(e),n(4)),t(r)&&(r=M(e,r),e.l||x(e,r)),e.u&&b(\"Patches\").M(i[Q].t,r,e.u,e.s)):r=M(e,i,[]),O(e),e.u&&e.v(e.u,e.s),r!==H?r:void 0}function M(n,r,t){if(y(r))return r;var e=r[Q];if(!e)return i(r,(function(i,o){return A(n,e,r,i,o,t)}),!0),r;if(e.A!==n)return r;if(!e.P)return x(n,e.t,!0),e.t;if(!e.I){e.I=!0,e.A._--;var o=4===e.i||5===e.i?e.o=l(e.k):e.o;i(3===e.i?new Set(o):o,(function(r,i){return A(n,e,o,r,i,t)})),x(n,o,!1),t&&n.u&&b(\"Patches\").R(e,t,n.u,n.s)}return e.o}function A(e,i,o,a,c,s){if(\"production\"!==process.env.NODE_ENV&&c===o&&n(5),r(c)){var v=M(e,c,s&&i&&3!==i.i&&!u(i.D,a)?s.concat(a):void 0);if(f(o,a,v),!r(v))return;e.m=!1}if(t(c)&&!y(c)){if(!e.h.F&&e._<1)return;M(e,c),i&&i.A.l||x(e,c)}}function x(n,r,t){void 0===t&&(t=!1),n.h.F&&n.m&&d(r,t)}function z(n,r){var t=n[Q];return(t?p(t):n)[r]}function I(n,r){if(r in n)for(var t=Object.getPrototypeOf(n);t;){var e=Object.getOwnPropertyDescriptor(t,r);if(e)return e;t=Object.getPrototypeOf(t)}}function k(n){n.P||(n.P=!0,n.l&&k(n.l))}function E(n){n.o||(n.o=l(n.t))}function R(n,r,t){var e=s(r)?b(\"MapSet\").N(r,t):v(r)?b(\"MapSet\").T(r,t):n.g?function(n,r){var t=Array.isArray(n),e={i:t?1:0,A:r?r.A:_(),P:!1,I:!1,D:{},l:r,t:n,k:null,o:null,j:null,C:!1},i=e,o=en;t&&(i=[e],o=on);var u=Proxy.revocable(i,o),a=u.revoke,f=u.proxy;return e.k=f,e.j=a,f}(r,t):b(\"ES5\").J(r,t);return(t?t.A:_()).p.push(e),e}function D(e){return r(e)||n(22,e),function n(r){if(!t(r))return r;var e,u=r[Q],c=o(r);if(u){if(!u.P&&(u.i<4||!b(\"ES5\").K(u)))return u.t;u.I=!0,e=F(r,c),u.I=!1}else e=F(r,c);return i(e,(function(r,t){u&&a(u.t,r)===t||f(e,r,n(t))})),3===c?new Set(e):e}(e)}function F(n,r){switch(r){case 2:return new Map(n);case 3:return Array.from(n)}return l(n)}function N(){function t(n,r){var t=s[n];return t?t.enumerable=r:s[n]=t={configurable:!0,enumerable:r,get:function(){var r=this[Q];return\"production\"!==process.env.NODE_ENV&&f(r),en.get(r,n)},set:function(r){var t=this[Q];\"production\"!==process.env.NODE_ENV&&f(t),en.set(t,n,r)}},t}function e(n){for(var r=n.length-1;r>=0;r--){var t=n[r][Q];if(!t.P)switch(t.i){case 5:a(t)&&k(t);break;case 4:o(t)&&k(t)}}}function o(n){for(var r=n.t,t=n.k,e=nn(t),i=e.length-1;i>=0;i--){var o=e[i];if(o!==Q){var a=r[o];if(void 0===a&&!u(r,o))return!0;var f=t[o],s=f&&f[Q];if(s?s.t!==a:!c(f,a))return!0}}var v=!!r[Q];return e.length!==nn(r).length+(v?0:1)}function a(n){var r=n.k;if(r.length!==n.t.length)return!0;var t=Object.getOwnPropertyDescriptor(r,r.length-1);if(t&&!t.get)return!0;for(var e=0;e<r.length;e++)if(!r.hasOwnProperty(e))return!0;return!1}function f(r){r.O&&n(3,JSON.stringify(p(r)))}var s={};m(\"ES5\",{J:function(n,r){var e=Array.isArray(n),i=function(n,r){if(n){for(var e=Array(r.length),i=0;i<r.length;i++)Object.defineProperty(e,\"\"+i,t(i,!0));return e}var o=rn(r);delete o[Q];for(var u=nn(o),a=0;a<u.length;a++){var f=u[a];o[f]=t(f,n||!!o[f].enumerable)}return Object.create(Object.getPrototypeOf(r),o)}(e,n),o={i:e?5:4,A:r?r.A:_(),P:!1,I:!1,D:{},l:r,t:n,k:i,o:null,O:!1,C:!1};return Object.defineProperty(i,Q,{value:o,writable:!0}),i},S:function(n,t,o){o?r(t)&&t[Q].A===n&&e(n.p):(n.u&&function n(r){if(r&&\"object\"==typeof r){var t=r[Q];if(t){var e=t.t,o=t.k,f=t.D,c=t.i;if(4===c)i(o,(function(r){r!==Q&&(void 0!==e[r]||u(e,r)?f[r]||n(o[r]):(f[r]=!0,k(t)))})),i(e,(function(n){void 0!==o[n]||u(o,n)||(f[n]=!1,k(t))}));else if(5===c){if(a(t)&&(k(t),f.length=!0),o.length<e.length)for(var s=o.length;s<e.length;s++)f[s]=!1;else for(var v=e.length;v<o.length;v++)f[v]=!0;for(var p=Math.min(o.length,e.length),l=0;l<p;l++)o.hasOwnProperty(l)||(f[l]=!0),void 0===f[l]&&n(o[l])}}}}(n.p[0]),e(n.p))},K:function(n){return 4===n.i?o(n):a(n)}})}function T(){function e(n){if(!t(n))return n;if(Array.isArray(n))return n.map(e);if(s(n))return new Map(Array.from(n.entries()).map((function(n){return[n[0],e(n[1])]})));if(v(n))return new Set(Array.from(n).map(e));var r=Object.create(Object.getPrototypeOf(n));for(var i in n)r[i]=e(n[i]);return u(n,L)&&(r[L]=n[L]),r}function f(n){return r(n)?e(n):n}var c=\"add\";m(\"Patches\",{$:function(r,t){return t.forEach((function(t){for(var i=t.path,u=t.op,f=r,s=0;s<i.length-1;s++){var v=o(f),p=\"\"+i[s];0!==v&&1!==v||\"__proto__\"!==p&&\"constructor\"!==p||n(24),\"function\"==typeof f&&\"prototype\"===p&&n(24),\"object\"!=typeof(f=a(f,p))&&n(15,i.join(\"/\"))}var l=o(f),d=e(t.value),h=i[i.length-1];switch(u){case\"replace\":switch(l){case 2:return f.set(h,d);case 3:n(16);default:return f[h]=d}case c:switch(l){case 1:return\"-\"===h?f.push(d):f.splice(h,0,d);case 2:return f.set(h,d);case 3:return f.add(d);default:return f[h]=d}case\"remove\":switch(l){case 1:return f.splice(h,1);case 2:return f.delete(h);case 3:return f.delete(t.value);default:return delete f[h]}default:n(17,u)}})),r},R:function(n,r,t,e){switch(n.i){case 0:case 4:case 2:return function(n,r,t,e){var o=n.t,s=n.o;i(n.D,(function(n,i){var v=a(o,n),p=a(s,n),l=i?u(o,n)?\"replace\":c:\"remove\";if(v!==p||\"replace\"!==l){var d=r.concat(n);t.push(\"remove\"===l?{op:l,path:d}:{op:l,path:d,value:p}),e.push(l===c?{op:\"remove\",path:d}:\"remove\"===l?{op:c,path:d,value:f(v)}:{op:\"replace\",path:d,value:f(v)})}}))}(n,r,t,e);case 5:case 1:return function(n,r,t,e){var i=n.t,o=n.D,u=n.o;if(u.length<i.length){var a=[u,i];i=a[0],u=a[1];var s=[e,t];t=s[0],e=s[1]}for(var v=0;v<i.length;v++)if(o[v]&&u[v]!==i[v]){var p=r.concat([v]);t.push({op:\"replace\",path:p,value:f(u[v])}),e.push({op:\"replace\",path:p,value:f(i[v])})}for(var l=i.length;l<u.length;l++){var d=r.concat([l]);t.push({op:c,path:d,value:f(u[l])})}i.length<u.length&&e.push({op:\"replace\",path:r.concat([\"length\"]),value:i.length})}(n,r,t,e);case 3:return function(n,r,t,e){var i=n.t,o=n.o,u=0;i.forEach((function(n){if(!o.has(n)){var i=r.concat([u]);t.push({op:\"remove\",path:i,value:n}),e.unshift({op:c,path:i,value:n})}u++})),u=0,o.forEach((function(n){if(!i.has(n)){var o=r.concat([u]);t.push({op:c,path:o,value:n}),e.unshift({op:\"remove\",path:o,value:n})}u++}))}(n,r,t,e)}},M:function(n,r,t,e){t.push({op:\"replace\",path:[],value:r===H?void 0:r}),e.push({op:\"replace\",path:[],value:n})}})}function C(){function r(n,r){function t(){this.constructor=n}a(n,r),n.prototype=(t.prototype=r.prototype,new t)}function e(n){n.o||(n.D=new Map,n.o=new Map(n.t))}function o(n){n.o||(n.o=new Set,n.t.forEach((function(r){if(t(r)){var e=R(n.A.h,r,n);n.p.set(r,e),n.o.add(e)}else n.o.add(r)})))}function u(r){r.O&&n(3,JSON.stringify(p(r)))}var a=function(n,r){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var t in r)r.hasOwnProperty(t)&&(n[t]=r[t])})(n,r)},f=function(){function n(n,r){return this[Q]={i:2,l:r,A:r?r.A:_(),P:!1,I:!1,o:void 0,D:void 0,t:n,k:this,C:!1,O:!1},this}r(n,Map);var o=n.prototype;return Object.defineProperty(o,\"size\",{get:function(){return p(this[Q]).size}}),o.has=function(n){return p(this[Q]).has(n)},o.set=function(n,r){var t=this[Q];return u(t),p(t).has(n)&&p(t).get(n)===r||(e(t),k(t),t.D.set(n,!0),t.o.set(n,r),t.D.set(n,!0)),this},o.delete=function(n){if(!this.has(n))return!1;var r=this[Q];return u(r),e(r),k(r),r.t.has(n)?r.D.set(n,!1):r.D.delete(n),r.o.delete(n),!0},o.clear=function(){var n=this[Q];u(n),p(n).size&&(e(n),k(n),n.D=new Map,i(n.t,(function(r){n.D.set(r,!1)})),n.o.clear())},o.forEach=function(n,r){var t=this;p(this[Q]).forEach((function(e,i){n.call(r,t.get(i),i,t)}))},o.get=function(n){var r=this[Q];u(r);var i=p(r).get(n);if(r.I||!t(i))return i;if(i!==r.t.get(n))return i;var o=R(r.A.h,i,r);return e(r),r.o.set(n,o),o},o.keys=function(){return p(this[Q]).keys()},o.values=function(){var n,r=this,t=this.keys();return(n={})[V]=function(){return r.values()},n.next=function(){var n=t.next();return n.done?n:{done:!1,value:r.get(n.value)}},n},o.entries=function(){var n,r=this,t=this.keys();return(n={})[V]=function(){return r.entries()},n.next=function(){var n=t.next();if(n.done)return n;var e=r.get(n.value);return{done:!1,value:[n.value,e]}},n},o[V]=function(){return this.entries()},n}(),c=function(){function n(n,r){return this[Q]={i:3,l:r,A:r?r.A:_(),P:!1,I:!1,o:void 0,t:n,k:this,p:new Map,O:!1,C:!1},this}r(n,Set);var t=n.prototype;return Object.defineProperty(t,\"size\",{get:function(){return p(this[Q]).size}}),t.has=function(n){var r=this[Q];return u(r),r.o?!!r.o.has(n)||!(!r.p.has(n)||!r.o.has(r.p.get(n))):r.t.has(n)},t.add=function(n){var r=this[Q];return u(r),this.has(n)||(o(r),k(r),r.o.add(n)),this},t.delete=function(n){if(!this.has(n))return!1;var r=this[Q];return u(r),o(r),k(r),r.o.delete(n)||!!r.p.has(n)&&r.o.delete(r.p.get(n))},t.clear=function(){var n=this[Q];u(n),p(n).size&&(o(n),k(n),n.o.clear())},t.values=function(){var n=this[Q];return u(n),o(n),n.o.values()},t.entries=function(){var n=this[Q];return u(n),o(n),n.o.entries()},t.keys=function(){return this.values()},t[V]=function(){return this.values()},t.forEach=function(n,r){for(var t=this.values(),e=t.next();!e.done;)n.call(r,e.value,e.value,this),e=t.next()},n}();m(\"MapSet\",{N:function(n,r){return new f(n,r)},T:function(n,r){return new c(n,r)}})}function J(){N(),C(),T()}function K(n){return n}function $(n){return n}var G,U,W=\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol(\"x\"),X=\"undefined\"!=typeof Map,q=\"undefined\"!=typeof Set,B=\"undefined\"!=typeof Proxy&&void 0!==Proxy.revocable&&\"undefined\"!=typeof Reflect,H=W?Symbol.for(\"immer-nothing\"):((G={})[\"immer-nothing\"]=!0,G),L=W?Symbol.for(\"immer-draftable\"):\"__$immer_draftable\",Q=W?Symbol.for(\"immer-state\"):\"__$immer_state\",V=\"undefined\"!=typeof Symbol&&Symbol.iterator||\"@@iterator\",Y={0:\"Illegal state\",1:\"Immer drafts cannot have computed properties\",2:\"This object has been frozen and should not be mutated\",3:function(n){return\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \"+n},4:\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",5:\"Immer forbids circular references\",6:\"The first or second argument to `produce` must be a function\",7:\"The third argument to `produce` must be a function or undefined\",8:\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",9:\"First argument to `finishDraft` must be a draft returned by `createDraft`\",10:\"The given draft is already finalized\",11:\"Object.defineProperty() cannot be used on an Immer draft\",12:\"Object.setPrototypeOf() cannot be used on an Immer draft\",13:\"Immer only supports deleting array indices\",14:\"Immer only supports setting array indices and the 'length' property\",15:function(n){return\"Cannot apply patch, path doesn't resolve: \"+n},16:'Sets cannot have \"replace\" patches.',17:function(n){return\"Unsupported patch operation: \"+n},18:function(n){return\"The plugin for '\"+n+\"' has not been loaded into Immer. To enable the plugin, import and call `enable\"+n+\"()` when initializing your application.\"},20:\"Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available\",21:function(n){return\"produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '\"+n+\"'\"},22:function(n){return\"'current' expects a draft, got: \"+n},23:function(n){return\"'original' expects a draft, got: \"+n},24:\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"},Z=\"\"+Object.prototype.constructor,nn=\"undefined\"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(n){return Object.getOwnPropertyNames(n).concat(Object.getOwnPropertySymbols(n))}:Object.getOwnPropertyNames,rn=Object.getOwnPropertyDescriptors||function(n){var r={};return nn(n).forEach((function(t){r[t]=Object.getOwnPropertyDescriptor(n,t)})),r},tn={},en={get:function(n,r){if(r===Q)return n;var e=p(n);if(!u(e,r))return function(n,r,t){var e,i=I(r,t);return i?\"value\"in i?i.value:null===(e=i.get)||void 0===e?void 0:e.call(n.k):void 0}(n,e,r);var i=e[r];return n.I||!t(i)?i:i===z(n.t,r)?(E(n),n.o[r]=R(n.A.h,i,n)):i},has:function(n,r){return r in p(n)},ownKeys:function(n){return Reflect.ownKeys(p(n))},set:function(n,r,t){var e=I(p(n),r);if(null==e?void 0:e.set)return e.set.call(n.k,t),!0;if(!n.P){var i=z(p(n),r),o=null==i?void 0:i[Q];if(o&&o.t===t)return n.o[r]=t,n.D[r]=!1,!0;if(c(t,i)&&(void 0!==t||u(n.t,r)))return!0;E(n),k(n)}return n.o[r]===t&&\"number\"!=typeof t&&(void 0!==t||r in n.o)||(n.o[r]=t,n.D[r]=!0,!0)},deleteProperty:function(n,r){return void 0!==z(n.t,r)||r in n.t?(n.D[r]=!1,E(n),k(n)):delete n.D[r],n.o&&delete n.o[r],!0},getOwnPropertyDescriptor:function(n,r){var t=p(n),e=Reflect.getOwnPropertyDescriptor(t,r);return e?{writable:!0,configurable:1!==n.i||\"length\"!==r,enumerable:e.enumerable,value:t[r]}:e},defineProperty:function(){n(11)},getPrototypeOf:function(n){return Object.getPrototypeOf(n.t)},setPrototypeOf:function(){n(12)}},on={};i(en,(function(n,r){on[n]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)}})),on.deleteProperty=function(r,t){return\"production\"!==process.env.NODE_ENV&&isNaN(parseInt(t))&&n(13),on.set.call(this,r,t,void 0)},on.set=function(r,t,e){return\"production\"!==process.env.NODE_ENV&&\"length\"!==t&&isNaN(parseInt(t))&&n(14),en.set.call(this,r[0],t,e,r[0])};var un=function(){function e(r){var e=this;this.g=B,this.F=!0,this.produce=function(r,i,o){if(\"function\"==typeof r&&\"function\"!=typeof i){var u=i;i=r;var a=e;return function(n){var r=this;void 0===n&&(n=u);for(var t=arguments.length,e=Array(t>1?t-1:0),o=1;o<t;o++)e[o-1]=arguments[o];return a.produce(n,(function(n){var t;return(t=i).call.apply(t,[r,n].concat(e))}))}}var f;if(\"function\"!=typeof i&&n(6),void 0!==o&&\"function\"!=typeof o&&n(7),t(r)){var c=w(e),s=R(e,r,void 0),v=!0;try{f=i(s),v=!1}finally{v?O(c):g(c)}return\"undefined\"!=typeof Promise&&f instanceof Promise?f.then((function(n){return j(c,o),P(n,c)}),(function(n){throw O(c),n})):(j(c,o),P(f,c))}if(!r||\"object\"!=typeof r){if(void 0===(f=i(r))&&(f=r),f===H&&(f=void 0),e.F&&d(f,!0),o){var p=[],l=[];b(\"Patches\").M(r,f,p,l),o(p,l)}return f}n(21,r)},this.produceWithPatches=function(n,r){if(\"function\"==typeof n)return function(r){for(var t=arguments.length,i=Array(t>1?t-1:0),o=1;o<t;o++)i[o-1]=arguments[o];return e.produceWithPatches(r,(function(r){return n.apply(void 0,[r].concat(i))}))};var t,i,o=e.produce(n,r,(function(n,r){t=n,i=r}));return\"undefined\"!=typeof Promise&&o instanceof Promise?o.then((function(n){return[n,t,i]})):[o,t,i]},\"boolean\"==typeof(null==r?void 0:r.useProxies)&&this.setUseProxies(r.useProxies),\"boolean\"==typeof(null==r?void 0:r.autoFreeze)&&this.setAutoFreeze(r.autoFreeze)}var i=e.prototype;return i.createDraft=function(e){t(e)||n(8),r(e)&&(e=D(e));var i=w(this),o=R(this,e,void 0);return o[Q].C=!0,g(i),o},i.finishDraft=function(r,t){var e=r&&r[Q];\"production\"!==process.env.NODE_ENV&&(e&&e.C||n(9),e.I&&n(10));var i=e.A;return j(i,t),P(void 0,i)},i.setAutoFreeze=function(n){this.F=n},i.setUseProxies=function(r){r&&!B&&n(20),this.g=r},i.applyPatches=function(n,t){var e;for(e=t.length-1;e>=0;e--){var i=t[e];if(0===i.path.length&&\"replace\"===i.op){n=i.value;break}}e>-1&&(t=t.slice(e+1));var o=b(\"Patches\").$;return r(n)?o(n,t):this.produce(n,(function(n){return o(n,t)}))},e}(),an=new un,fn=an.produce,cn=an.produceWithPatches.bind(an),sn=an.setAutoFreeze.bind(an),vn=an.setUseProxies.bind(an),pn=an.applyPatches.bind(an),ln=an.createDraft.bind(an),dn=an.finishDraft.bind(an);export default fn;export{un as Immer,pn as applyPatches,K as castDraft,$ as castImmutable,ln as createDraft,D as current,J as enableAllPlugins,N as enableES5,C as enableMapSet,T as enablePatches,dn as finishDraft,d as freeze,L as immerable,r as isDraft,t as isDraftable,H as nothing,e as original,fn as produce,cn as produceWithPatches,sn as setAutoFreeze,vn as setUseProxies};\n//# sourceMappingURL=immer.esm.js.map\n"],"names":["Field","props","InlineField","labelWidth","FORMAT_OPTIONS","label","value","query","variableOptionGroup","onQueryChange","options","useMemo","handleChange","useCallback","change","newQuery","setFormatAs","Select","menuShouldPortal","inputId","azureLogAnalytics","resultFormat","onChange","width","Deferred","constructor","this","resolve","undefined","reject","promise","Promise","Object","freeze","datasource","monacoPromiseRef","useRef","useEffect","resource","promises","azureLogAnalyticsDatasource","getKustoSchema","current","all","then","schema","monaco","editor","languages","kusto","getKustoWorker","model","getModel","uri","worker","setSchema","handleEditorMount","setKustoQuery","CodeEditor","language","height","showMiniMap","onBlur","onSave","onEditorDidMount","EntryIcon","isOpen","entry","type","ResourceRowType","Icon","name","theme","table","css","tableLayout","tableScroller","maxHeight","overflow","header","background","colors","secondary","row","borderBottom","border","weak","borderBottomColor","medium","disabledRow","opacity","cell","padding","spacing","textOverflow","collapseButton","margin","loadingCell","textAlign","spinner","marginBottom","nestedEntry","display","alignItems","entryContentItem","truncated","minWidth","whiteSpace","nestedRowCheckbox","zIndex","selectionFooter","position","bottom","primary","paddingTop","loadingWrapper","paddingBottom","color","text","NestedEntry","isSelected","isDisabled","isSelectable","scrollIntoView","level","onToggleCollapse","onSelectedChange","useTheme2","styles","useStyles2","getStyles","hasChildren","children","handleToggleCollapse","handleSelectedChanged","ev","target","checked","checkboxId","document","getElementById","behavior","block","className","style","marginLeft","gridSize","IconButton","onClick","id","Space","layout","h","Checkbox","disabled","htmlFor","cx","NestedRow","selectedRows","requestNestedRows","onRowSelectedChange","selectableEntryTypes","rowStatus","setRowStatus","useState","find","v","length","selectedRow","findRow","async","catch","some","typeLabel","location","keys","map","childRow","FadeTransition","visible","colSpan","LoadingPlaceholder","resourcePickerData","resourceURI","onApply","onCancel","loadingStatus","setLoadingStatus","azureRows","setAzureRows","internalSelectedURI","setInternalSelectedURI","errorMessage","setErrorMessage","isAdvancedOpen","setIsAdvancedOpen","includes","resources","getSubscriptions","parsedURI","parseResourceURI","resourceGroupURI","subscriptionID","resourceGroup","resourceGroups","getResourceGroupsBySubscriptionId","addResources","resourcesForResourceGroup","getResourcesForResourceGroup","error","messageFromError","loadInitialData","selectedResourceRows","found","resourceGroupOrSubscription","rows","newRows","handleSelectionChanged","handleApply","Collapse","collapsible","onToggle","Label","Tooltip","content","href","rel","placement","interactive","Input","event","currentTarget","placeholder","Button","variant","Alert","severity","title","parseResourceDetails","parsed","subscriptionName","resourceGroupName","resourceName","ResourceLabel","resourceComponents","setResourceComponents","getResourceURIDisplayProperties","FormattedResource","startsWith","Separator","pickerIsOpen","setPickerIsOpen","handleOpenPicker","closePicker","setResource","Modal","modal","onDismiss","trapFocus","breakpoints","values","lg","useMigrations","migrationError","setMigrationError","workspace","isGUIDish","getResourceURIFromWorkspace","migrateWorkspaceQueryToResourceQuery","err","message","subscriptionId","setError","hideFormatAs","InlineFieldRow","kustoQuery","formatAs","setSubscriptionID","subscription","azureMonitor","metricDefinition","metricNamespace","metricName","aggregation","timeGrain","dimensionFilters","setResourceGroup","setResourceType","resourceType","setResourceName","setMetricNamespace","setMetricName","setAggregation","setTimeGrain","setDimensionFilters","dimensions","appendDimensionFilter","dimension","operator","filter","existingFilters","removeDimensionFilter","indexToRemove","newFilters","splice","setDimensionFilterValue","index","fieldName","setTop","top","setLegendAlias","alias","subscriptions","multiSelect","queryType","AzureQueryType","onSubscriptionsChange","c","MultiSelect","isClearable","findOptions","allowCustomValue","azureResourceGraph","ERROR_SOURCE","fetchedRef","setSubscriptions","azureMonitorDatasource","results","fetchedSubscriptions","description","aggregationOptions","isLoading","data","dimensionOptions","dimensionLabels","setDimensionLabels","labelsObj","series","labels","flat","refId","flatMap","fields","item","entries","add","Set","prevLabels","newLabels","size","useDimensionLabels","dimensionOperators","validDimensionOptions","t","val","dimensionFilter","onFieldChange","filterIndex","getValidFilterOptions","selectedFilter","Array","from","toLowerCase","VerticalGroup","HorizontalGroup","selectedDimension","concat","selectedOperator","onFilterInputChange","icon","removeFilter","setValue","HTMLInputElement","handleBlur","metricNames","metricNamespaces","optionValues","m","p","push","resourceNames","resourceTypes","timeGrainOptions","timeGrains","autoInterval","TimegrainConverter","o","useAsyncState","asyncFn","dependencies","errorSource","Math","random","finalValue","useSubscriptions","defaultSubscription","defaultSubscriptionId","subscriptionOptions","formatOptions","hasOption","defaultSub","updateSubscriptions","rawResults","selectedValue","toOption","option","metricsMetadata","metricMetadata","setMetricMetadata","aggOptions","supportedAggTypes","primaryAggType","getMetricMetadata","metadata","aggregations","supportedTimeGrains","newAggregation","newTimeGrain","allowedTimeGrainsMs","rangeUtil","useMetricMetadata","getResourceGroups","useResourceGroups","getMetricDefinitions","useResourceTypes","getResourceNames","useResourceNames","getMetricNames","useMetricNames","getMetricNamespaces","useMetricNamespaces","ResourceTypeField","ReadOnlyTimeGrain","timeGrainCount","timeGrainType","timeGrainUnit","timeFields","timeField","groupBy","appInsights","insightsAnalytics","readOnly","initialQueryType","queryTypes","gtGrafana9","DeprecatedAzureQueryType","DEFAULT_QUERY","onChangeQuery","preparedQuery","withDefaults","defaults","migratedQuery","migrateQuery","deepEqual","prepareQuery","EditorForQueryType","config","LogsQueryEditor","baseQuery","onRunQuery","baseOnRunQuery","useLastError","debounce","usePreparedQuery","getVariables","RESOURCE_URI_REGEX","matches","exec","groups","input","match","result","targetParentId","newResources","produce","draftState","draftRow","wrapper","defaultProps","stylesFactory","paddingRight","isAppInsightsConfigured","jsonData","appInsightsAppId","secureJsonFields","appInsightsApiKey","valid","gt","TimeGrainConverter","toUpperCase","interval","slice","unit","indexOf","createISO8601Duration","toMinutes","allowedTimeGrains","closest","intervalMs","i","duration","offset","substring","timeUnitToText","timeUnitToKbn","AzureCloud","set","reduce","accum","has","routeNames","logAnalytics","resourceGraph","interpolateVariable","variable","multi","includeAll","allValue","join","OLD_DEFAULT_DROPDOWN_VALUE","workingQuery","setMetricsTimeGrain","migrateTimeGrains","replace","migrateLogAnalyticsToFromTimes","migrateToDefaultNamespace","migrateApplicationInsightsDimensions","migrateMetricsDimensionFilters","oldDimension","datasourceMigrations","rawQuery","errors","setErrors","addError","errorsCopy","findIndex","vSource","unshift","recentError","n","r","arguments","e","Error","Q","getPrototypeOf","hasOwnProperty","call","Function","toString","Z","isArray","L","s","nn","forEach","u","prototype","a","get","f","delete","X","Map","q","l","rn","writable","configurable","enumerable","create","d","y","clear","isFrozen","b","tn","_","U","j","O","g","S","w","P","M","x","H","A","I","k","R","D","F","z","getOwnPropertyDescriptor","E","N","T","C","en","on","Proxy","revocable","revoke","proxy","J","K","G","W","Symbol","B","Reflect","for","iterator","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","getOwnPropertyDescriptors","deleteProperty","defineProperty","setPrototypeOf","apply","un","produceWithPatches","useProxies","setUseProxies","autoFreeze","setAutoFreeze","createDraft","finishDraft","applyPatches","path","op","$","an","fn","bind"],"sourceRoot":""}