{"version":3,"file":"AlertingUpgrade.c757b99e306db50cdb16.js","mappings":"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","sources":["webpack://grafana/./public/app/features/alerting/unified/api/upgradeApi.ts","webpack://grafana/./public/app/features/alerting/Upgrade.tsx","webpack://grafana/./public/app/features/alerting/unified/components/notification-policies/Matchers.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/ActionIcon.tsx","webpack://grafana/./public/app/features/search/tempI18nPhrases.ts"],"sourcesContent":["import { FetchError, isFetchError } from '@grafana/runtime';\n\nimport {\n createErrorNotification,\n createSuccessNotification,\n createWarningNotification,\n} from '../../../../core/copy/appNotification';\nimport { notifyApp } from '../../../../core/reducers/appNotification';\nimport { ObjectMatcher } from '../../../../plugins/datasource/alertmanager/types';\n\nimport { alertingApi } from './alertingApi';\n\nexport interface OrgMigrationSummary {\n newDashboards: number;\n newAlerts: number;\n newChannels: number;\n removed: boolean;\n hasErrors: boolean;\n}\n\nexport interface OrgMigrationState {\n orgId: number;\n migratedDashboards: DashboardUpgrade[];\n migratedChannels: ContactPair[];\n errors: string[];\n}\n\nexport interface DashboardUpgrade {\n migratedAlerts: AlertPair[];\n dashboardId: number;\n dashboardUid: string;\n dashboardName: string;\n folderUid: string;\n folderName: string;\n newFolderUid?: string;\n newFolderName?: string;\n provisioned: boolean;\n error?: string;\n warning: string;\n\n isUpgrading: boolean;\n}\n\nexport interface AlertPair {\n legacyAlert: LegacyAlert;\n alertRule?: AlertRuleUpgrade;\n error?: string;\n\n isUpgrading: boolean;\n}\n\nexport interface ContactPair {\n legacyChannel: LegacyChannel;\n contactPoint?: ContactPointUpgrade;\n provisioned: boolean;\n error?: string;\n\n isUpgrading: boolean;\n}\n\nexport interface LegacyAlert {\n id: number;\n dashboardId: number;\n panelId: number;\n name: string;\n}\n\nexport interface AlertRuleUpgrade {\n uid: string;\n title: string;\n sendsTo: string[];\n}\n\nexport interface LegacyChannel {\n id: number;\n name: string;\n type: string;\n}\n\nexport interface ContactPointUpgrade {\n name: string;\n type: string;\n routeMatchers: ObjectMatcher[];\n}\n\nfunction isFetchBaseQueryError(error: unknown): error is { error: FetchError } {\n return typeof error === 'object' && error != null && 'error' in error;\n}\n\nexport const upgradeApi = alertingApi.injectEndpoints({\n endpoints: (build) => ({\n upgradeChannel: build.mutation({\n query: ({ channelId, skipExisting }) => ({\n url: `/api/v1/upgrade/channels/${channelId}${skipExisting ? '?skipExisting=true' : ''}`,\n method: 'POST',\n showSuccessAlert: false,\n showErrorAlert: false,\n }),\n invalidatesTags: ['OrgMigrationState'],\n async onQueryStarted({ channelId }, { dispatch, queryFulfilled }) {\n try {\n dispatch(\n upgradeApi.util.updateQueryData('getOrgUpgradeSummary', undefined, (draft) => {\n const index = (draft.migratedChannels ?? []).findIndex((pair) => pair.legacyChannel?.id === channelId);\n if (index !== -1) {\n draft.migratedChannels[index].isUpgrading = true;\n }\n })\n );\n const { data } = await queryFulfilled;\n if (data.hasErrors) {\n dispatch(notifyApp(createWarningNotification(`Failed to upgrade notification channel '${channelId}'`)));\n } else {\n if (data.removed) {\n dispatch(\n notifyApp(\n createSuccessNotification(\n `Notification channel '${channelId}' not found, removed from list of upgrades`\n )\n )\n );\n } else {\n dispatch(notifyApp(createSuccessNotification(`Upgraded notification channel '${channelId}'`)));\n }\n }\n } catch (e) {\n if (isFetchBaseQueryError(e) && isFetchError(e.error)) {\n dispatch(notifyApp(createErrorNotification('Request failed', e.error.data.message)));\n } else {\n dispatch(notifyApp(createErrorNotification(`Request failed`)));\n }\n }\n },\n }),\n upgradeAllChannels: build.mutation({\n query: ({ skipExisting }) => ({\n url: `/api/v1/upgrade/channels${skipExisting ? '?skipExisting=true' : ''}`,\n method: 'POST',\n showSuccessAlert: false,\n showErrorAlert: false,\n }),\n invalidatesTags: ['OrgMigrationState'],\n async onQueryStarted({ skipExisting }, { dispatch, queryFulfilled }) {\n try {\n const { data } = await queryFulfilled;\n if (data.hasErrors) {\n dispatch(\n notifyApp(\n createWarningNotification(\n `Issues while upgrading ${data.newChannels} ${skipExisting ? 'new ' : ''}notification channels`\n )\n )\n );\n } else {\n dispatch(\n notifyApp(\n createSuccessNotification(\n `Upgraded ${data.newChannels} ${skipExisting ? 'new ' : ''}notification channels`\n )\n )\n );\n }\n } catch (e) {\n if (isFetchBaseQueryError(e) && isFetchError(e.error)) {\n dispatch(notifyApp(createErrorNotification('Request failed', e.error.data.message)));\n } else {\n dispatch(notifyApp(createErrorNotification(`Request failed`)));\n }\n }\n },\n }),\n upgradeAlert: build.mutation({\n query: ({ dashboardId, panelId, skipExisting }) => ({\n url: `/api/v1/upgrade/dashboards/${dashboardId}/panels/${panelId}${skipExisting ? '?skipExisting=true' : ''}`,\n method: 'POST',\n showSuccessAlert: false,\n showErrorAlert: false,\n }),\n invalidatesTags: ['OrgMigrationState'],\n async onQueryStarted({ dashboardId, panelId }, { dispatch, queryFulfilled }) {\n try {\n dispatch(\n upgradeApi.util.updateQueryData('getOrgUpgradeSummary', undefined, (draft) => {\n const index = (draft.migratedDashboards ?? []).findIndex((du) => du.dashboardId === dashboardId);\n if (index !== -1) {\n const alertIndex = (draft.migratedDashboards[index]?.migratedAlerts ?? []).findIndex(\n (pair) => pair.legacyAlert?.panelId === panelId\n );\n if (alertIndex !== -1) {\n draft.migratedDashboards[index].migratedAlerts[alertIndex].isUpgrading = true;\n }\n }\n })\n );\n const { data } = await queryFulfilled;\n if (data.hasErrors) {\n dispatch(\n notifyApp(\n createWarningNotification(`Failed to upgrade alert from dashboard '${dashboardId}', panel '${panelId}'`)\n )\n );\n } else {\n if (data.removed) {\n dispatch(\n notifyApp(\n createSuccessNotification(\n `Alert from dashboard '${dashboardId}', panel '${panelId}' not found, removed from list of upgrades`\n )\n )\n );\n } else {\n dispatch(\n notifyApp(\n createSuccessNotification(`Upgraded alert from dashboard '${dashboardId}', panel '${panelId}'`)\n )\n );\n }\n }\n } catch (e) {\n if (isFetchBaseQueryError(e) && isFetchError(e.error)) {\n dispatch(notifyApp(createErrorNotification('Request failed', e.error.data.message)));\n } else {\n dispatch(notifyApp(createErrorNotification(`Request failed`)));\n }\n }\n },\n }),\n upgradeDashboard: build.mutation({\n query: ({ dashboardId, skipExisting }) => ({\n url: `/api/v1/upgrade/dashboards/${dashboardId}${skipExisting ? '?skipExisting=true' : ''}`,\n method: 'POST',\n showSuccessAlert: false,\n showErrorAlert: false,\n }),\n invalidatesTags: ['OrgMigrationState'],\n async onQueryStarted({ dashboardId, skipExisting }, { dispatch, queryFulfilled }) {\n try {\n dispatch(\n upgradeApi.util.updateQueryData('getOrgUpgradeSummary', undefined, (draft) => {\n const index = (draft.migratedDashboards ?? []).findIndex((du) => du.dashboardId === dashboardId);\n if (index !== -1) {\n draft.migratedDashboards[index].isUpgrading = true;\n }\n })\n );\n const { data } = await queryFulfilled;\n if (data.hasErrors) {\n dispatch(\n notifyApp(\n createWarningNotification(\n `Issues while upgrading ${data.newAlerts} ${\n skipExisting ? 'new ' : ''\n }alerts from dashboard '${dashboardId}'`\n )\n )\n );\n } else {\n if (data.removed) {\n dispatch(\n notifyApp(\n createSuccessNotification(`Dashboard '${dashboardId}' not found, removed from list of upgrades`)\n )\n );\n } else {\n dispatch(\n notifyApp(\n createSuccessNotification(\n `Upgraded ${data.newAlerts} ${skipExisting ? 'new ' : ''}alerts from dashboard '${dashboardId}'`\n )\n )\n );\n }\n }\n } catch (e) {\n if (isFetchBaseQueryError(e) && isFetchError(e.error)) {\n dispatch(notifyApp(createErrorNotification('Request failed', e.error.data.message)));\n } else {\n dispatch(notifyApp(createErrorNotification(`Request failed`)));\n }\n }\n },\n }),\n upgradeAllDashboards: build.mutation({\n query: ({ skipExisting }) => ({\n url: `/api/v1/upgrade/dashboards${skipExisting ? '?skipExisting=true' : ''}`,\n method: 'POST',\n showSuccessAlert: false,\n showErrorAlert: false,\n }),\n invalidatesTags: ['OrgMigrationState'],\n async onQueryStarted({ skipExisting }, { dispatch, queryFulfilled }) {\n try {\n const { data } = await queryFulfilled;\n if (data.hasErrors) {\n dispatch(\n notifyApp(\n createWarningNotification(\n `Issues while upgrading ${data.newAlerts} ${skipExisting ? 'new ' : ''}alerts in ${\n data.newDashboards\n } dashboards`\n )\n )\n );\n } else {\n dispatch(\n notifyApp(\n createSuccessNotification(\n `Upgraded ${data.newAlerts} ${skipExisting ? 'new ' : ''}alerts in ${data.newDashboards} dashboards`\n )\n )\n );\n }\n } catch (e) {\n if (isFetchBaseQueryError(e) && isFetchError(e.error)) {\n dispatch(notifyApp(createErrorNotification('Request failed', e.error.data.message)));\n } else {\n dispatch(notifyApp(createErrorNotification(`Request failed`)));\n }\n }\n },\n }),\n upgradeOrg: build.mutation({\n query: ({ skipExisting }) => ({\n url: `/api/v1/upgrade/org${skipExisting ? '?skipExisting=true' : ''}`,\n method: 'POST',\n showSuccessAlert: false,\n showErrorAlert: false,\n }),\n invalidatesTags: ['OrgMigrationState'],\n async onQueryStarted({ skipExisting }, { dispatch, getCacheEntry, queryFulfilled }) {\n try {\n const { data } = await queryFulfilled;\n if (data.hasErrors) {\n dispatch(\n notifyApp(\n createWarningNotification(\n `Issues while upgrading ${data.newAlerts} ${skipExisting ? 'new ' : ''}alerts in ${\n data.newDashboards\n } dashboards and ${data.newChannels} ${skipExisting ? 'new ' : ''}notification channels`\n )\n )\n );\n } else {\n dispatch(\n notifyApp(\n createSuccessNotification(\n `Upgraded ${data.newAlerts} ${skipExisting ? 'new ' : ''}alerts in ${\n data.newDashboards\n } dashboards and ${data.newChannels} ${skipExisting ? 'new ' : ''}notification channels`\n )\n )\n );\n }\n } catch (e) {\n if (isFetchBaseQueryError(e) && isFetchError(e.error)) {\n dispatch(notifyApp(createErrorNotification('Request failed', e.error.data.message)));\n } else {\n dispatch(notifyApp(createErrorNotification(`Request failed`)));\n }\n }\n },\n }),\n cancelOrgUpgrade: build.mutation({\n query: () => ({\n url: `/api/v1/upgrade/org`,\n method: 'DELETE',\n }),\n invalidatesTags: ['OrgMigrationState'],\n async onQueryStarted(undefined, { dispatch }) {\n // This helps prevent flickering of old tables after the cancel button is clicked.\n try {\n dispatch(\n upgradeApi.util.updateQueryData('getOrgUpgradeSummary', undefined, (draft) => {\n const defaultState: OrgMigrationState = {\n orgId: 0,\n migratedDashboards: [],\n migratedChannels: [],\n errors: [],\n };\n Object.assign(draft, defaultState);\n })\n );\n } catch {}\n },\n }),\n getOrgUpgradeSummary: build.query({\n query: () => ({\n url: `/api/v1/upgrade/org`,\n }),\n providesTags: ['OrgMigrationState'],\n transformResponse: (summary: OrgMigrationState): OrgMigrationState => {\n summary.migratedDashboards = summary.migratedDashboards ?? [];\n summary.migratedChannels = summary.migratedChannels ?? [];\n summary.errors = summary.errors ?? [];\n\n // Sort to show the most problematic rows first.\n summary.migratedDashboards.forEach((dashUpgrade) => {\n // dashUpgrade.isUpgrading = false;\n dashUpgrade.migratedAlerts = dashUpgrade.migratedAlerts ?? [];\n dashUpgrade.error = dashUpgrade.error ?? '';\n dashUpgrade.warning = dashUpgrade.warning ?? '';\n dashUpgrade.migratedAlerts.sort((a, b) => {\n const byError = (b.error ?? '').localeCompare(a.error ?? '');\n if (byError !== 0) {\n return byError;\n }\n return (a.legacyAlert?.name ?? '').localeCompare(b.legacyAlert?.name ?? '');\n });\n });\n summary.migratedDashboards.sort((a, b) => {\n const byErrors = (b.error ?? '').localeCompare(a.error ?? '');\n if (byErrors !== 0) {\n return byErrors;\n }\n const byNestedErrors =\n b.migratedAlerts.filter((a) => a.error).length - a.migratedAlerts.filter((a) => a.error).length;\n if (byNestedErrors !== 0) {\n return byNestedErrors;\n }\n const byWarnings = (b.warning ?? '').localeCompare(a.warning ?? '');\n if (byWarnings !== 0) {\n return byWarnings;\n }\n const byFolder = a.folderName.localeCompare(b.folderName);\n if (byFolder !== 0) {\n return byFolder;\n }\n return a.dashboardName.localeCompare(b.dashboardName);\n });\n\n // Sort contacts.\n summary.migratedChannels.sort((a, b) => {\n const byErrors = (b.error ? 1 : 0) - (a.error ? 1 : 0);\n if (byErrors !== 0) {\n return byErrors;\n }\n return (a.legacyChannel?.name ?? '').localeCompare(b.legacyChannel?.name ?? '');\n });\n\n return summary;\n },\n }),\n }),\n});\n","import { css, cx } from '@emotion/css';\nimport uFuzzy from '@leeoniya/ufuzzy';\nimport { createSelector } from '@reduxjs/toolkit';\nimport { debounce } from 'lodash';\nimport pluralize from 'pluralize';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useLocalStorage } from 'react-use';\n\nimport { GrafanaTheme2, UrlQueryMap } from '@grafana/data';\nimport { Stack } from '@grafana/experimental';\nimport { locationService } from '@grafana/runtime';\nimport {\n Alert,\n Badge,\n Button,\n ConfirmModal,\n FilterInput,\n HorizontalGroup,\n Icon,\n Link,\n LoadingPlaceholder,\n Spinner,\n Tab,\n TabContent,\n TabsBar,\n TagList,\n Text,\n TextLink,\n Tooltip,\n useStyles2,\n} from '@grafana/ui';\nimport { Page } from 'app/core/components/Page/Page';\nimport { useQueryParams } from 'app/core/hooks/useQueryParams';\n\nimport { getSearchPlaceholder } from '../search/tempI18nPhrases';\n\nimport { AlertPair, ContactPair, DashboardUpgrade, OrgMigrationState, upgradeApi } from './unified/api/upgradeApi';\nimport { DynamicTable, DynamicTableColumnProps, DynamicTableItemProps } from './unified/components/DynamicTable';\nimport { DynamicTableWithGuidelines } from './unified/components/DynamicTableWithGuidelines';\nimport { Matchers } from './unified/components/notification-policies/Matchers';\nimport { ActionIcon } from './unified/components/rules/ActionIcon';\nimport { createContactPointLink, makeDashboardLink, makeFolderAlertsLink } from './unified/utils/misc';\nimport { createUrl } from './unified/utils/url';\n\nexport const UpgradePage = () => {\n const [, { isLoading: isUpgradeLoading }] = upgradeApi.useUpgradeOrgMutation({\n fixedCacheKey: 'upgrade-org-loading',\n });\n const [, { isLoading: isCancelLoading }] = upgradeApi.useCancelOrgUpgradeMutation({\n fixedCacheKey: 'cancel-org-upgrade-loading',\n });\n const {\n currentData: summary,\n isError: isFetchError,\n error: fetchError,\n isLoading: isLoading,\n } = upgradeApi.useGetOrgUpgradeSummaryQuery(undefined, {\n pollingInterval: 10000,\n skip: isCancelLoading || isUpgradeLoading, // Stop polling when upgrade or cancel is in progress.\n });\n\n const alertCount = (summary?.migratedDashboards ?? []).reduce(\n (acc, cur) => acc + (cur?.migratedAlerts?.length ?? 0),\n 0\n );\n const contactCount = summary?.migratedChannels?.length ?? 0;\n\n const errors = summary?.errors ?? [];\n const hasData = alertCount > 0 || contactCount > 0 || errors.length > 0;\n\n const cancelUpgrade = useMemo(() => {\n if (!isFetchError && hasData) {\n return ;\n }\n return null;\n }, [isFetchError, hasData]);\n\n const showError = isFetchError;\n const showLoading = isLoading;\n const showData = !isLoading && !isFetchError && hasData;\n\n return (\n \n \n {showError && (\n \n {fetchError instanceof Error ? fetchError.message : 'Unknown error.'}\n \n )}\n {showLoading && }\n {showData && (\n <>\n \n \n \n )}\n \n \n );\n};\n\ninterface UpgradeTabsProps {\n alertCount: number;\n contactCount: number;\n}\n\nexport const UpgradeTabs = ({ alertCount, contactCount }: UpgradeTabsProps) => {\n const styles = useStyles2(getStyles);\n\n const [queryParams, setQueryParams] = useQueryParams();\n const { tab } = getActiveTabFromUrl(queryParams);\n\n const [activeTab, setActiveTab] = useState(tab);\n\n useEffect(() => {\n setActiveTab(tab);\n }, [tab]);\n\n return (\n <>\n \n

\n Preview of how your existing alert rules and notification channels wll be upgraded to the new Grafana\n Alerting.\n
\n Once you are happy with the results, you can permanently upgrade by modifying the Grafana configuration.\n

\n

\n {'For more information, please refer to the '}\n \n Grafana Alerting Migration Guide\n \n

\n
\n \n {\n setActiveTab(ActiveTab.Alerts);\n setQueryParams({ tab: ActiveTab.Alerts });\n }}\n />\n {\n setActiveTab(ActiveTab.Contacts);\n setQueryParams({ tab: ActiveTab.Contacts });\n }}\n />\n \n \n <>\n {activeTab === ActiveTab.Alerts && }\n {activeTab === ActiveTab.Contacts && }\n \n \n \n );\n};\n\nconst CancelUpgradeButton = () => {\n const styles = useStyles2(getStyles);\n const [startOver] = upgradeApi.useCancelOrgUpgradeMutation({ fixedCacheKey: 'cancel-org-upgrade-loading' });\n const [showConfirmStartOver, setShowConfirmStartOver] = useState(false);\n\n const cancelUpgrade = async () => {\n startOver();\n setShowConfirmStartOver(false);\n };\n\n return (\n <>\n setShowConfirmStartOver(true)}\n icon={'trash-alt'}\n className={''}\n >\n {'Reset upgrade'}\n \n {showConfirmStartOver && (\n \n All new Grafana Alerting resources will be deleted.\n \n This includes: alert rules, contact points, notification policies, silences, mute timings, and any\n manual changes you have made.\n \n \n No legacy alerts or notification channels will be affected.\n \n }\n confirmText=\"Reset upgrade\"\n onConfirm={cancelUpgrade}\n dismissText={'Keep reviewing'}\n onDismiss={() => setShowConfirmStartOver(false)}\n />\n )}\n \n );\n};\n\nenum ActiveTab {\n Alerts = 'alerts',\n Contacts = 'contacts',\n}\n\ninterface QueryParamValues {\n tab: ActiveTab;\n}\n\nfunction getActiveTabFromUrl(queryParams: UrlQueryMap): QueryParamValues {\n let tab = ActiveTab.Alerts; // default tab\n\n if (queryParams['tab'] === ActiveTab.Alerts) {\n tab = ActiveTab.Alerts;\n }\n\n if (queryParams['tab'] === ActiveTab.Contacts) {\n tab = ActiveTab.Contacts;\n }\n\n return {\n tab,\n };\n}\n\nconst AlertTabContentWrapper = () => {\n const columns = useAlertColumns();\n const filterParam = 'alertFilter';\n const [queryParam, updateQueryParam] = useSingleQueryParam(filterParam);\n\n const [startAlertUpgrade, { isLoading: isAlertLoading }] = upgradeApi.useUpgradeAllDashboardsMutation({\n fixedCacheKey: 'upgrade-alerts-loading',\n });\n const [_, { isLoading: isChannelLoading }] = upgradeApi.useUpgradeAllChannelsMutation({\n fixedCacheKey: 'upgrade-channels-loading',\n });\n const isUpgrading = isChannelLoading || isAlertLoading;\n\n const selectRows = useMemo(() => {\n const emptyArray: Array> = [];\n return createSelector(\n (res: OrgMigrationState | undefined) => res?.migratedDashboards ?? [],\n (rows) => rows ?? emptyArray\n );\n }, []);\n\n const { items } = upgradeApi.useGetOrgUpgradeSummaryQuery(undefined, {\n selectFromResult: ({ data }) => ({\n items: selectRows(data),\n }),\n });\n\n const searchSpaceMap = useCallback(\n (dashUpgrade: DashboardUpgrade) =>\n `${dashUpgrade.folderName} ${dashUpgrade.dashboardName} ${dashUpgrade.newFolderName} ${dashUpgrade.migratedAlerts\n .map((a) => a.legacyAlert?.name ?? '')\n .join(' ')}`,\n []\n );\n const renderExpandedContent = useCallback(\n ({ data: dashUpgrade }: { data: DashboardUpgrade }) => (\n \n ),\n []\n );\n\n const syncNewButton = useMemo(() => {\n const syncAlerting = async () => {\n await startAlertUpgrade({ skipExisting: true });\n };\n\n return (\n \n \n \n );\n }, [startAlertUpgrade, isUpgrading]);\n\n const syncAllButton = useMemo(() => {\n const syncAlerting = async () => {\n await startAlertUpgrade({ skipExisting: false });\n };\n\n return (\n \n \n \n );\n }, [startAlertUpgrade, isUpgrading]);\n\n return (\n \n );\n};\nAlertTabContentWrapper.displayName = 'AlertTabContentWrapper';\n\nconst ChannelTabContentWrapper = () => {\n const columns = useChannelColumns();\n\n const filterParam = 'contactFilter';\n const [queryParam, updateQueryParam] = useSingleQueryParam(filterParam);\n\n const [startChannelUpgrade, { isLoading: isChannelLoading }] = upgradeApi.useUpgradeAllChannelsMutation({\n fixedCacheKey: 'upgrade-channels-loading',\n });\n const [, { isLoading: isAlertLoading }] = upgradeApi.useUpgradeAllDashboardsMutation({\n fixedCacheKey: 'upgrade-alerts-loading',\n });\n const isUpgrading = isChannelLoading || isAlertLoading;\n\n const selectRows = useMemo(() => {\n const emptyArray: Array> = [];\n return createSelector(\n (res: OrgMigrationState | undefined) => res?.migratedChannels ?? [],\n (rows) => rows ?? emptyArray\n );\n }, []);\n\n const { items } = upgradeApi.useGetOrgUpgradeSummaryQuery(undefined, {\n selectFromResult: ({ data }) => ({\n items: selectRows(data),\n }),\n });\n\n const searchSpaceMap = useCallback(\n (pair: ContactPair) => `${pair.legacyChannel?.name} ${pair.contactPoint?.name} ${pair.legacyChannel?.type}`,\n []\n );\n\n const syncNewButton = useMemo(() => {\n const syncAlerting = async () => {\n await startChannelUpgrade({ skipExisting: true });\n };\n\n return (\n \n \n \n );\n }, [startChannelUpgrade, isUpgrading]);\n\n const syncAllButton = useMemo(() => {\n const syncAlerting = async () => {\n await startChannelUpgrade({ skipExisting: false });\n };\n\n return (\n \n \n \n );\n }, [startChannelUpgrade, isUpgrading]);\n\n return (\n \n );\n};\nChannelTabContentWrapper.displayName = 'ChannelTabContentWrapper';\n\nfunction useSingleQueryParam(name: string): [string | undefined, (values: string) => void] {\n const { search } = useLocation();\n const param = useMemo(() => {\n return new URLSearchParams(search).get(name) || '';\n }, [name, search]);\n const update = useCallback(\n (value: string) => {\n return locationService.partial({ [name]: value || null });\n },\n [name]\n );\n return [param, update];\n}\n\ninterface UpgradeTabContentProps {\n rows?: T[];\n updateQueryParam?: (values: string) => void;\n queryParam?: string;\n searchSpaceMap: (row: T) => string;\n searchPlaceholder: string;\n syncNewButton: JSX.Element;\n syncAllButton: JSX.Element;\n isUpgrading: boolean;\n columns: Array>;\n isExpandable?: boolean;\n renderExpandedContent?: (item: DynamicTableItemProps) => React.ReactNode;\n emptyMessage: string;\n}\n\nconst UpgradeTabContent = ({\n rows = [],\n queryParam,\n updateQueryParam,\n searchSpaceMap,\n columns,\n isExpandable = false,\n renderExpandedContent,\n emptyMessage,\n searchPlaceholder,\n syncNewButton,\n syncAllButton,\n isUpgrading,\n}: UpgradeTabContentProps) => {\n const styles = useStyles2(getStyles);\n\n const isLoading = isUpgrading || isUpgrading;\n\n const filterFn = useMemo(() => {\n return createfilterByMapping(searchSpaceMap, rows);\n }, [searchSpaceMap, rows]);\n\n const items = useMemo((): Array> => {\n return filterFn(queryParam).map((row, Idx) => {\n return {\n id: `${searchSpaceMap(row)} - ${Idx}`,\n data: row,\n };\n });\n }, [searchSpaceMap, filterFn, queryParam]);\n\n const showGuidelines = false;\n const wrapperClass = cx(styles.wrapper, { [styles.wrapperMargin]: showGuidelines });\n\n const TableComponent = showGuidelines ? DynamicTableWithGuidelines : DynamicTable;\n\n const pagination = useMemo(() => ({ itemsPerPage: 50 }), []);\n\n return (\n <>\n
\n \n \n {\n updateQueryParam?.(phrase || '');\n }}\n searchPhrase={queryParam || ''}\n />\n {syncNewButton}\n {syncAllButton}\n \n \n
\n {isLoading && }\n {!isLoading && !!items.length && (\n
\n \n
\n )}\n {!isLoading && !items.length &&
{emptyMessage}
}\n \n );\n};\n\nconst ChannelTabContent = React.memo(UpgradeTabContent);\nconst AlertTabContent = React.memo(UpgradeTabContent);\n\nconst useChannelColumns = (): Array> => {\n const styles = useStyles2(getStyles);\n\n const { useUpgradeChannelMutation } = upgradeApi;\n const [migrateChannel] = useUpgradeChannelMutation();\n\n return useMemo(\n () => [\n {\n id: 'contact-level-error',\n label: '',\n renderCell: ({ data: contactPair }) => {\n if (!contactPair.error) {\n return null;\n }\n const warning =\n contactPair?.error === 'channel not upgraded' || contactPair?.error === 'channel no longer exists';\n return (\n \n \n \n );\n },\n size: '45px',\n },\n {\n id: 'legacyChannel',\n label: 'Legacy Channel',\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: contactPair }) => {\n if (!contactPair?.legacyChannel) {\n return null;\n }\n\n if (!contactPair.legacyChannel.name && contactPair.contactPoint?.name) {\n return ;\n }\n\n if (!contactPair.legacyChannel.name) {\n return ;\n }\n return (\n \n \n {contactPair.legacyChannel.name}\n \n {contactPair.legacyChannel?.type && }\n \n );\n },\n size: 5,\n },\n {\n id: 'arrow',\n label: '',\n renderCell: ({ data: contactPair }) => {\n if (!contactPair?.contactPoint) {\n return null;\n }\n return ;\n },\n size: '45px',\n },\n {\n id: 'route',\n label: 'Notification Policy',\n renderCell: ({ data: contactPair }) => {\n return ;\n },\n size: 5,\n },\n {\n id: 'arrow2',\n label: '',\n renderCell: ({ data: contactPair }) => {\n if (!contactPair?.contactPoint) {\n return null;\n }\n return ;\n },\n size: '45px',\n },\n {\n id: 'contactPoint',\n label: 'Contact Point',\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: contactPair }) => {\n return (\n \n {contactPair?.contactPoint && (\n <>\n \n {contactPair.contactPoint.name}\n \n \n \n )}\n \n );\n },\n size: 5,\n },\n {\n id: 'provisioned',\n label: '',\n renderCell: ({ data: contactPair }) => {\n return contactPair.provisioned ? (\n \n ) : null;\n },\n size: '100px',\n },\n {\n id: 'actions',\n label: 'Actions',\n renderCell: ({ data: pair }) => {\n if (!pair?.legacyChannel) {\n return null;\n }\n if (pair.legacyChannel.id <= 0) {\n return null;\n }\n if (pair.isUpgrading) {\n return (\n \n \n \n );\n }\n if (pair?.error === 'channel not upgraded') {\n return (\n \n migrateChannel({ channelId: pair.legacyChannel.id, skipExisting: false })}\n />\n \n );\n }\n if (pair?.error === 'channel no longer exists') {\n return (\n \n migrateChannel({ channelId: pair.legacyChannel.id, skipExisting: false })}\n />\n \n );\n }\n return (\n \n migrateChannel({ channelId: pair.legacyChannel.id, skipExisting: false })}\n />\n \n );\n },\n size: '70px',\n },\n ],\n [styles.textLink, styles.errorIcon, styles.warningIcon, styles.badge, styles.spinner, migrateChannel]\n );\n};\n\nconst useAlertColumns = (): Array> => {\n const styles = useStyles2(getStyles);\n\n const { useUpgradeDashboardMutation } = upgradeApi;\n const [migrateDashboard] = useUpgradeDashboardMutation();\n\n return useMemo(\n () => [\n {\n id: 'dashboard-level-error',\n label: '',\n renderCell: ({ data: dashUpgrade }) => {\n if (!dashUpgrade.error) {\n return null;\n }\n const warning =\n dashUpgrade?.error === 'dashboard not upgraded' || dashUpgrade?.error === 'dashboard no longer exists';\n return (\n \n \n \n );\n },\n size: '45px',\n },\n {\n id: 'folder',\n label: 'Folder',\n renderCell: ({ data: dashUpgrade }) => {\n if (!dashUpgrade.folderName) {\n return (\n \n \n \n \n );\n }\n return (\n \n \n \n {dashUpgrade.folderName}\n \n \n );\n },\n size: 2,\n },\n {\n id: 'dashboard',\n label: 'Dashboard',\n renderCell: ({ data: dashUpgrade }) => {\n if (!dashUpgrade.dashboardName) {\n return (\n \n \n \n \n );\n }\n return (\n \n \n \n {dashUpgrade.dashboardName}\n \n \n );\n },\n size: 2,\n },\n {\n id: 'new-folder-arrow',\n label: '',\n renderCell: ({ data: dashUpgrade }) => {\n const migratedFolderUid = dashUpgrade?.newFolderUid;\n const folderChanged = migratedFolderUid!! && migratedFolderUid !== dashUpgrade.folderUid;\n if (folderChanged && dashUpgrade?.newFolderName) {\n return ;\n }\n return null;\n },\n size: '45px',\n },\n {\n id: 'new-folder',\n label: 'New folder',\n renderCell: ({ data: dashUpgrade }) => {\n const migratedFolderUid = dashUpgrade?.newFolderUid;\n if (migratedFolderUid && migratedFolderUid !== dashUpgrade.folderUid && dashUpgrade?.newFolderName) {\n const newFolderWarning = dashUpgrade.warning.includes('dashboard alerts moved');\n return (\n \n \n \n {dashUpgrade.newFolderName}\n \n {newFolderWarning && (\n \n \n \n )}\n \n );\n }\n return null;\n },\n size: 3,\n },\n {\n id: 'provisioned',\n label: '',\n className: styles.tableBadges,\n renderCell: ({ data: dashUpgrade }) => {\n const provisionedWarning = dashUpgrade.warning.includes('provisioned status:');\n return (\n <>\n {dashUpgrade.provisioned && (\n \n )}\n \n );\n },\n size: '100px',\n },\n {\n id: 'error-badge',\n label: '',\n className: styles.tableBadges,\n renderCell: ({ data: dashUpgrade }) => {\n const migratedAlerts = dashUpgrade?.migratedAlerts ?? [];\n const nestedErrors = migratedAlerts.map((alertPair) => alertPair.error ?? '').filter((error) => !!error);\n if (nestedErrors.length === 0) {\n return null;\n }\n return ;\n },\n size: '90px',\n },\n {\n id: 'alert-count-badge',\n label: '',\n className: styles.tableBadges,\n renderCell: ({ data: dashUpgrade }) => {\n const migratedAlerts = dashUpgrade?.migratedAlerts ?? [];\n return (\n \n );\n },\n size: '115px',\n },\n {\n id: 'actions',\n label: 'Actions',\n renderCell: ({ data: dashUpgrade }) => {\n if (dashUpgrade.isUpgrading) {\n return (\n \n \n \n );\n }\n if (dashUpgrade?.error === 'dashboard not upgraded') {\n return (\n \n migrateDashboard({ dashboardId: dashUpgrade.dashboardId, skipExisting: false })}\n />\n \n );\n }\n if (dashUpgrade?.error === 'dashboard no longer exists') {\n return (\n \n migrateDashboard({ dashboardId: dashUpgrade.dashboardId, skipExisting: false })}\n />\n \n );\n }\n return (\n \n {dashUpgrade.dashboardId && (\n migrateDashboard({ dashboardId: dashUpgrade.dashboardId, skipExisting: false })}\n />\n )}\n \n );\n },\n size: '70px',\n },\n ],\n [\n styles.tableBadges,\n styles.errorIcon,\n styles.warningIcon,\n styles.textLink,\n styles.badge,\n styles.spinner,\n migrateDashboard,\n ]\n );\n};\n\nconst ufuzzy = new uFuzzy({\n intraMode: 1,\n intraIns: 1,\n intraSub: 1,\n intraTrn: 1,\n intraDel: 1,\n});\n\nconst createfilterByMapping = (searchSpaceMap: (row: T) => string, filterables: T[]) => {\n const haystack = filterables.map(searchSpaceMap);\n return (filter: string | undefined) => {\n if (!filter) {\n return filterables;\n }\n\n const [idxs, info, order] = ufuzzy.search(haystack, filter, 5);\n if (info && order) {\n return order.map((idx) => filterables[info.idx[idx]]);\n } else if (idxs) {\n return idxs.map((idx) => filterables[idx]);\n }\n\n return filterables;\n };\n};\n\ninterface SearchProps {\n searchFn: (searchPhrase: string) => void;\n searchPhrase: string | undefined;\n placeholder?: string;\n}\n\nconst Search = ({ searchFn, searchPhrase, placeholder }: SearchProps) => {\n const [searchFilter, setSearchFilter] = useState(searchPhrase);\n\n const debouncedSearch = useMemo(() => debounce(searchFn, 600), [searchFn]);\n\n useEffect(() => {\n setSearchFilter(searchPhrase);\n return () => {\n // Stop the invocation of the debounced function after unmounting\n debouncedSearch?.cancel();\n };\n }, [debouncedSearch, searchPhrase]);\n\n return (\n {\n setSearchFilter(value || '');\n if (value === '') {\n // This is so clicking clear is instant. Otherwise, clearing and switching tabs before debounce is ready will lose filter state.\n debouncedSearch?.cancel();\n searchFn('');\n } else {\n debouncedSearch(value || '');\n }\n }}\n />\n );\n};\n\ninterface AlertTableProps {\n dashboardId: number;\n dashboardUid: string;\n showGuidelines?: boolean;\n emptyMessage?: string;\n}\n\nconst AlertTable = ({\n dashboardId,\n dashboardUid,\n showGuidelines = false,\n emptyMessage = 'No alert upgrades found.',\n}: AlertTableProps) => {\n const styles = useStyles2(getStyles);\n\n const selectRowsForDashUpgrade = useMemo(() => {\n const emptyArray: Array> = [];\n return createSelector(\n (res: OrgMigrationState | undefined) => res?.migratedDashboards ?? [],\n (res: OrgMigrationState | undefined, dashboardId: number) => dashboardId,\n (migratedDashboards, dashboardId) =>\n migratedDashboards\n ?.find((du) => du.dashboardId === dashboardId)\n ?.migratedAlerts.map((alertPair, Idx) => {\n return {\n id: `${alertPair?.legacyAlert?.id}-${Idx}`,\n data: alertPair,\n };\n }) ?? emptyArray\n );\n }, []);\n\n const { items } = upgradeApi.useGetOrgUpgradeSummaryQuery(undefined, {\n selectFromResult: ({ data }) => ({\n items: selectRowsForDashUpgrade(data, dashboardId),\n }),\n });\n\n const { useUpgradeAlertMutation } = upgradeApi;\n const [migrateAlert] = useUpgradeAlertMutation();\n\n const wrapperClass = cx(styles.wrapper, styles.rulesTable, { [styles.wrapperMargin]: showGuidelines });\n\n const columns: Array> = [\n {\n id: 'alert-level-error',\n label: '',\n renderCell: ({ data: alertPair }) => {\n if (!alertPair.error) {\n return null;\n }\n const warning = alertPair?.error === 'alert not upgraded' || alertPair?.error.endsWith('no longer exists');\n return (\n \n \n \n );\n },\n size: '45px',\n },\n {\n id: 'legacyAlert',\n label: 'Legacy alert rule',\n renderCell: ({ data: alertPair }) => {\n if (!alertPair?.legacyAlert) {\n return null;\n }\n const deleted = (alertPair.error ?? '').endsWith('no longer exists');\n if (deleted) {\n return ;\n }\n return (\n <>\n {dashboardUid ? (\n \n {alertPair.legacyAlert.name || 'Missing Title'}\n \n ) : (\n \n )}\n \n );\n },\n size: 5,\n },\n {\n id: 'arrow',\n label: '',\n renderCell: ({ data: alertPair }) => {\n if (!alertPair?.legacyAlert) {\n return null;\n }\n return ;\n },\n size: '45px',\n },\n {\n id: 'alertRule',\n label: 'New alert rule',\n renderCell: ({ data: alertPair }) => {\n return (\n \n {alertPair?.alertRule && (\n \n {alertPair.alertRule?.title ?? ''}\n \n )}\n \n );\n },\n size: 5,\n },\n {\n id: 'contacts',\n label: 'Sends To',\n renderCell: ({ data: alertPair }) => {\n return (\n <>\n {alertPair?.alertRule && (\n \n )}\n \n );\n },\n size: 3,\n },\n {\n id: 'actions',\n label: 'Actions',\n renderCell: ({ data: alertPair }) => {\n if (!alertPair?.legacyAlert) {\n return null;\n }\n if (alertPair.legacyAlert.dashboardId <= 0 || alertPair.legacyAlert.panelId <= 0) {\n return null;\n }\n if (alertPair.isUpgrading) {\n return (\n \n \n \n );\n }\n if (alertPair?.error === 'alert not upgraded') {\n return (\n \n \n migrateAlert({\n dashboardId: alertPair.legacyAlert.dashboardId,\n panelId: alertPair.legacyAlert.panelId,\n skipExisting: false,\n })\n }\n />\n \n );\n }\n if (alertPair?.error?.endsWith('no longer exists')) {\n return (\n \n \n migrateAlert({\n dashboardId: alertPair.legacyAlert.dashboardId,\n panelId: alertPair.legacyAlert.panelId,\n skipExisting: false,\n })\n }\n />\n \n );\n }\n return (\n \n \n migrateAlert({\n dashboardId: alertPair.legacyAlert.dashboardId,\n panelId: alertPair.legacyAlert.panelId,\n skipExisting: false,\n })\n }\n />\n \n );\n },\n size: '70px',\n },\n ];\n\n if (!items.length) {\n return
{emptyMessage}
;\n }\n\n const TableComponent = showGuidelines ? DynamicTableWithGuidelines : DynamicTable;\n\n return (\n
\n \n
\n );\n};\n\ninterface ErrorSummaryButtonProps {\n count: number;\n onClick: () => void;\n}\n\nconst ErrorSummaryButton = ({ count, onClick }: ErrorSummaryButtonProps) => {\n return (\n \n \n \n \n \n );\n};\n\ninterface ErrorSummaryProps {\n errors: string[];\n}\n\nconst ErrorSummary = ({ errors }: ErrorSummaryProps) => {\n const [expanded, setExpanded] = useState(false);\n const [closed, setClosed] = useLocalStorage('grafana.unifiedalerting.upgrade.hideErrors', true);\n const styles = useStyles2(getStyles);\n\n return (\n <>\n {!!errors.length && closed && setClosed(false)} />}\n {!!errors.length && !closed && (\n setClosed(true)}\n >\n {expanded && errors.map((item, idx) =>
{item}
)}\n {!expanded && (\n <>\n
{errors[0]}
\n {errors.length >= 2 && (\n setExpanded(true)}\n >\n {errors.length - 1} more {pluralize('error', errors.length - 1)}\n \n )}\n \n )}\n \n )}\n \n );\n};\n\ninterface LoadingProps {\n text?: string;\n}\n\nconst Loading = ({ text = 'Loading...' }: LoadingProps) => {\n return (\n
\n \n
\n );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n wrapperMargin: css({\n [theme.breakpoints.up('md')]: {\n marginLeft: '36px',\n },\n }),\n\n emptyMessage: css({\n padding: theme.spacing(1),\n }),\n\n wrapper: css({\n width: 'auto',\n borderRadius: theme.shape.radius.default,\n }),\n\n pagination: css({\n display: 'flex',\n margin: '0',\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(0.25),\n justifyContent: 'center',\n borderLeft: `1px solid ${theme.colors.border.medium}`,\n borderRight: `1px solid ${theme.colors.border.medium}`,\n borderBottom: `1px solid ${theme.colors.border.medium}`,\n }),\n\n rulesTable: css({\n marginTop: theme.spacing(3),\n }),\n\n errorIcon: css({\n fill: theme.colors.error.text,\n }),\n\n warningIcon: css({\n fill: theme.colors.warning.text,\n }),\n\n searchWrapper: css({\n marginBottom: theme.spacing(2),\n }),\n\n textLink: css({\n color: theme.colors.text.link,\n cursor: 'pointer',\n\n '&:hover': {\n textDecoration: 'underline',\n },\n }),\n\n errorLink: css({\n color: theme.colors.error.text,\n cursor: 'pointer',\n\n '&:hover': {\n textDecoration: 'underline',\n },\n }),\n\n tabContent: css({\n marginTop: theme.spacing(2),\n }),\n\n moreButton: css({\n padding: '0',\n }),\n\n tableBadges: css({\n justifyContent: 'flex-end',\n }),\n\n badge: css({\n width: '100%',\n justifyContent: 'center',\n }),\n\n separator: css({\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n marginTop: theme.spacing(2),\n }),\n\n spinner: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: theme.spacing(3),\n height: theme.spacing(3),\n }),\n});\n\nexport default UpgradePage;\n","import { css } from '@emotion/css';\nimport { take, takeRight, uniqueId } from 'lodash';\nimport React, { FC } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { getTagColorsFromName, useStyles2, Stack } from '@grafana/ui';\nimport { ObjectMatcher } from 'app/plugins/datasource/alertmanager/types';\n\nimport { MatcherFormatter, matcherFormatter } from '../../utils/matchers';\nimport { HoverCard } from '../HoverCard';\n\ntype MatchersProps = { matchers: ObjectMatcher[]; formatter?: MatcherFormatter };\n\n// renders the first N number of matchers\nconst Matchers: FC = ({ matchers, formatter = 'default' }) => {\n const styles = useStyles2(getStyles);\n\n const NUM_MATCHERS = 5;\n\n const firstFew = take(matchers, NUM_MATCHERS);\n const rest = takeRight(matchers, matchers.length - NUM_MATCHERS);\n const hasMoreMatchers = rest.length > 0;\n\n return (\n \n \n {firstFew.map((matcher) => (\n \n ))}\n {/* TODO hover state to show all matchers we're not showing */}\n {hasMoreMatchers && (\n \n {rest.map((matcher) => (\n \n ))}\n \n }\n >\n \n
{`and ${rest.length} more`}
\n
\n \n )}\n
\n
\n );\n};\n\ninterface MatcherBadgeProps {\n matcher: ObjectMatcher;\n formatter?: MatcherFormatter;\n}\n\nconst MatcherBadge: FC = ({ matcher, formatter = 'default' }) => {\n const styles = useStyles2(getStyles);\n\n return (\n
\n \n {matcherFormatter[formatter](matcher)}\n \n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n matcher: (label: string) => {\n const { color, borderColor } = getTagColorsFromName(label);\n\n return {\n wrapper: css`\n color: #fff;\n background: ${color};\n padding: ${theme.spacing(0.33)} ${theme.spacing(0.66)};\n font-size: ${theme.typography.bodySmall.fontSize};\n\n border: solid 1px ${borderColor};\n border-radius: ${theme.shape.borderRadius(2)};\n `,\n };\n },\n metadata: css`\n color: ${theme.colors.text.secondary};\n\n font-size: ${theme.typography.bodySmall.fontSize};\n font-weight: ${theme.typography.bodySmall.fontWeight};\n `,\n});\n\nexport { Matchers };\n","import React from 'react';\n\nimport { IconName, Tooltip, LinkButton, Button } from '@grafana/ui';\nimport { PopoverContent, TooltipPlacement } from '@grafana/ui/src/components/Tooltip';\n\ninterface Props {\n tooltip: PopoverContent;\n icon: IconName;\n className?: string;\n tooltipPlacement?: TooltipPlacement;\n to?: string;\n target?: string;\n onClick?: () => void;\n 'data-testid'?: string;\n}\n\nexport const ActionIcon = ({\n tooltip,\n icon,\n to,\n target,\n onClick,\n className,\n tooltipPlacement = 'top',\n ...rest\n}: Props) => {\n const ariaLabel = typeof tooltip === 'string' ? tooltip : undefined;\n\n return (\n \n {to ? (\n \n ) : (\n \n )}\n \n );\n};\n","// Temporary place to collect phrases we reuse between new and old browse/search\n// TODO: remove this when new Browse Dashboards UI is no longer feature flagged\n\nimport { t } from 'app/core/internationalization';\n\nexport function getSearchPlaceholder(includePanels = false) {\n return includePanels\n ? t('search.search-input.include-panels-placeholder', 'Search for dashboards, folders, and panels')\n : t('search.search-input.placeholder', 'Search for dashboards and folders');\n}\n\nexport function getNewDashboardPhrase() {\n return t('search.dashboard-actions.new-dashboard', 'New dashboard');\n}\n\nexport function getNewFolderPhrase() {\n return t('search.dashboard-actions.new-folder', 'New folder');\n}\n\nexport function getImportPhrase() {\n return t('search.dashboard-actions.import', 'Import');\n}\n\nexport function getNewPhrase() {\n return t('search.dashboard-actions.new', 'New');\n}\n"],"names":["isFetchBaseQueryError","error","upgradeApi","alertingApi","build","channelId","skipExisting","dispatch","queryFulfilled","draft","index","pair","data","e","dashboardId","panelId","du","alertIndex","getCacheEntry","undefined","summary","dashUpgrade","a","b","byError","byErrors","byNestedErrors","byWarnings","byFolder","UpgradePage","isUpgradeLoading","isCancelLoading","isFetchError","fetchError","isLoading","alertCount","acc","cur","contactCount","errors","hasData","cancelUpgrade","CancelUpgradeButton","showError","showLoading","showData","Page","Alert","Loading","ErrorSummary","UpgradeTabs","styles","getStyles","queryParams","setQueryParams","useQueryParams","tab","getActiveTabFromUrl","activeTab","setActiveTab","TextLink","TabsBar","Tab","TabContent","AlertTabContentWrapper","ChannelTabContentWrapper","startOver","showConfirmStartOver","setShowConfirmStartOver","Button","ConfirmModal","Stack","Text","ActiveTab","columns","useAlertColumns","filterParam","queryParam","updateQueryParam","useSingleQueryParam","startAlertUpgrade","isAlertLoading","_","isChannelLoading","isUpgrading","selectRows","emptyArray","res","rows","items","searchSpaceMap","renderExpandedContent","AlertTable","syncNewButton","syncAlerting","Tooltip","syncAllButton","AlertTabContent","useChannelColumns","startChannelUpgrade","ChannelTabContent","name","search","param","update","value","UpgradeTabContent","isExpandable","emptyMessage","searchPlaceholder","filterFn","createfilterByMapping","row","Idx","showGuidelines","wrapperClass","TableComponent","DynamicTableWithGuidelines","DynamicTable","pagination","Search","phrase","useUpgradeChannelMutation","migrateChannel","contactPair","warning","Icon","Badge","Link","Matchers","Spinner","ActionIcon","useUpgradeDashboardMutation","migrateDashboard","migratedFolderUid","newFolderWarning","provisionedWarning","nestedErrors","alertPair","migratedAlerts","ufuzzy","filterables","haystack","filter","idxs","info","order","idx","searchFn","searchPhrase","placeholder","searchFilter","setSearchFilter","debouncedSearch","FilterInput","dashboardUid","selectRowsForDashUpgrade","migratedDashboards","useUpgradeAlertMutation","migrateAlert","TagList","ErrorSummaryButton","count","onClick","expanded","setExpanded","closed","setClosed","useLocalStorage","item","text","LoadingPlaceholder","theme","matchers","formatter","NUM_MATCHERS","firstFew","rest","hasMoreMatchers","matcher","MatcherBadge","label","color","borderColor","tooltip","icon","to","target","className","tooltipPlacement","ariaLabel","getSearchPlaceholder","includePanels","getNewDashboardPhrase","getNewFolderPhrase","getImportPhrase","getNewPhrase"],"sourceRoot":""}