{"version":3,"file":"Connections.b53c715b9b9a782d8647.js","mappings":"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","sources":["webpack://grafana/./public/app/core/components/PageActionBar/PageActionBar.tsx","webpack://grafana/./public/app/core/components/Select/SortPicker.tsx","webpack://grafana/./public/app/features/connections/tabs/ConnectData/CardGrid/CardGrid.tsx","webpack://grafana/./public/app/features/connections/tabs/ConnectData/CategoryHeader/CategoryHeader.tsx","webpack://grafana/./public/app/features/connections/tabs/ConnectData/NoAccessModal/NoAccessModal.tsx","webpack://grafana/./public/app/features/connections/tabs/ConnectData/NoResults/NoResults.tsx","webpack://grafana/./public/app/features/connections/tabs/ConnectData/Search/Search.tsx","webpack://grafana/./public/app/features/connections/tabs/ConnectData/ConnectData.tsx","webpack://grafana/./public/app/features/connections/pages/AddNewConnectionPage.tsx","webpack://grafana/./public/app/features/connections/pages/DataSourceDetailsPage.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourceAddButton.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourcesListCard.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourcesListHeader.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourcesList.tsx","webpack://grafana/./public/app/features/connections/pages/DataSourcesListPage.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourceDashboards.tsx","webpack://grafana/./public/app/features/connections/hooks/useDataSourceSettingsNav.ts","webpack://grafana/./public/app/features/connections/pages/DataSourceDashboardsPage.tsx","webpack://grafana/./public/app/features/datasources/components/BasicSettings.tsx","webpack://grafana/./public/app/features/datasources/components/ButtonRow.tsx","webpack://grafana/./public/app/features/datasources/components/CloudInfoBox.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourceReadOnlyMessage.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourceLoadError.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourceMissingRightsMessage.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourcePluginConfigPage.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourcePluginSettings.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourcePluginState.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourceTestingStatus.tsx","webpack://grafana/./public/app/features/datasources/components/EditDataSource.tsx","webpack://grafana/./public/app/features/datasources/components/EditDataSourceActions.tsx","webpack://grafana/./public/app/features/datasources/components/useDataSourceInfo.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourceTitle.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourceTabPage.tsx","webpack://grafana/./public/app/features/connections/pages/EditDataSourcePage.tsx","webpack://grafana/./public/app/features/plugins/components/PluginsErrorsInfo.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourceTypeCard.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourceTypeCardList.tsx","webpack://grafana/./public/app/features/datasources/components/DataSourceCategories.tsx","webpack://grafana/./public/app/features/datasources/components/NewDataSource.tsx","webpack://grafana/./public/app/features/connections/pages/NewDataSourcePage.tsx","webpack://grafana/./public/app/features/connections/Connections.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { LinkButton, FilterInput, InlineField } from '@grafana/ui';\n\nimport { SortPicker } from '../Select/SortPicker';\n\nexport interface Props {\n searchQuery: string;\n setSearchQuery: (value: string) => void;\n linkButton?: { href: string; title: string; disabled?: boolean };\n target?: string;\n placeholder?: string;\n sortPicker?: {\n onChange: (sortValue: SelectableValue) => void;\n value?: string;\n getSortOptions?: () => Promise;\n };\n}\n\nexport default class PageActionBar extends PureComponent {\n render() {\n const {\n searchQuery,\n linkButton,\n setSearchQuery,\n target,\n placeholder = 'Search by name or type',\n sortPicker,\n } = this.props;\n const linkProps: typeof LinkButton.defaultProps = { href: linkButton?.href, disabled: linkButton?.disabled };\n\n if (target) {\n linkProps.target = target;\n }\n\n return (\n
\n \n \n \n {sortPicker && (\n \n )}\n {linkButton && {linkButton.title}}\n
\n );\n }\n}\n","import React from 'react';\nimport { useAsync } from 'react-use';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Icon, Select } from '@grafana/ui';\nimport { DEFAULT_SORT } from 'app/features/search/constants';\nimport { getGrafanaSearcher } from 'app/features/search/service';\n\nexport interface Props {\n onChange: (sortValue: SelectableValue) => void;\n value?: string;\n placeholder?: string;\n getSortOptions?: () => Promise;\n filter?: string[];\n isClearable?: boolean;\n}\n\nconst defaultSortOptionsGetter = (): Promise => {\n return getGrafanaSearcher().getSortOptions();\n};\n\nexport function SortPicker({ onChange, value, placeholder, filter, getSortOptions, isClearable }: Props) {\n // Using sync Select and manual options fetching here since we need to find the selected option by value\n const options = useAsync<() => Promise>(async () => {\n const vals = await (getSortOptions ?? defaultSortOptionsGetter)();\n if (filter) {\n return vals.filter((v) => filter.includes(v.value));\n }\n return vals;\n }, [getSortOptions, filter]);\n\n if (options.loading) {\n return null;\n }\n\n const isDesc = Boolean(value?.includes('desc') || value?.startsWith('-')); // bluge syntax starts with \"-\"\n return (\n opt.value === value) ?? null}\n options={options.value}\n aria-label=\"Sort\"\n placeholder={placeholder ?? `Sort (Default ${DEFAULT_SORT.label})`}\n prefix={}\n isClearable={isClearable}\n />\n );\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Card, Grid, useStyles2 } from '@grafana/ui';\nimport { PluginAngularBadge } from 'app/features/plugins/admin/components/Badges';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n heading: css({\n fontSize: theme.typography.h5.fontSize,\n fontWeight: 'inherit',\n }),\n figure: css({\n width: 'inherit',\n marginRight: '0px',\n '> img': {\n width: theme.spacing(7),\n },\n }),\n meta: css({\n marginTop: '6px',\n position: 'relative',\n }),\n description: css({\n margin: '0px',\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n card: css({\n gridTemplateAreas: `\n \"Figure Heading Actions\"\n \"Figure Description Actions\"\n \"Figure Meta Actions\"\n \"Figure - Actions\"`,\n }),\n logo: css({\n marginRight: theme.spacing(3),\n marginLeft: theme.spacing(1),\n width: theme.spacing(7),\n maxHeight: theme.spacing(7),\n }),\n});\n\nexport type CardGridItem = {\n id: string;\n name: string;\n description: string;\n url: string;\n logo?: string;\n angularDetected?: boolean;\n};\n\nexport interface CardGridProps {\n items: CardGridItem[];\n onClickItem?: (e: React.MouseEvent, item: CardGridItem) => void;\n}\n\nexport const CardGrid = ({ items, onClickItem }: CardGridProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n \n {items.map((item) => (\n {\n if (onClickItem) {\n onClickItem(e, item);\n }\n }}\n >\n {item.name}\n\n \n \"\"\n \n\n {item.angularDetected ? (\n \n \n \n ) : null}\n \n ))}\n \n );\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2, IconName } from '@grafana/data';\nimport { Icon, useStyles2 } from '@grafana/ui';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n categoryHeader: css`\n align-items: center;\n display: flex;\n margin-bottom: 24px;\n `,\n categoryLabel: css`\n margin-bottom: 0px;\n margin-left: 8px;\n `,\n});\n\ntype Props = { iconName: IconName; label: string };\n\nexport const CategoryHeader = ({ iconName, label }: Props) => {\n const styles = useStyles2(getStyles);\n return (\n
\n \n

{label}

\n
\n );\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2, Modal, Icon, Button } from '@grafana/ui';\n\nimport { type CardGridItem } from '../CardGrid';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n modal: css`\n width: 500px;\n `,\n modalContent: css`\n overflow: visible;\n color: ${theme.colors.text.secondary};\n\n a {\n color: ${theme.colors.text.link};\n }\n `,\n description: css`\n margin-bottom: ${theme.spacing(2)};\n `,\n bottomSection: css`\n display: flex;\n border-top: 1px solid ${theme.colors.border.weak};\n padding-top: ${theme.spacing(3)};\n margin-top: ${theme.spacing(3)};\n `,\n actionsSection: css`\n display: flex;\n justify-content: end;\n margin-top: ${theme.spacing(3)};\n `,\n warningIcon: css`\n color: ${theme.colors.warning.main};\n padding-right: ${theme.spacing()};\n margin-top: ${theme.spacing(0.25)};\n `,\n header: css`\n display: flex;\n align-items: center;\n `,\n headerTitle: css`\n margin: 0;\n `,\n headerLogo: css`\n margin-right: ${theme.spacing(2)};\n width: 32px;\n height: 32px;\n `,\n});\n\nexport type NoAccessModalProps = {\n item: CardGridItem;\n isOpen: boolean;\n onDismiss: () => void;\n};\n\nexport function NoAccessModal({ item, isOpen, onDismiss }: NoAccessModalProps) {\n const styles = useStyles2(getStyles);\n\n return (\n }\n isOpen={isOpen}\n onDismiss={onDismiss}\n >\n
\n
\n {item.description &&
{item.description}
}\n
\n Links\n
\n \n {item.name}\n \n
\n
\n
\n
\n \n
\n
\n

\n Editors cannot add new connections. You may check to see if it is already configured in{' '}\n Data sources.\n

\n

To add a new connection, contact your Grafana admin.

\n
\n
\n
\n \n
\n
\n \n );\n}\n\nexport function NoAccessModalHeader({ item }: { item: CardGridItem }) {\n const styles = useStyles2(getStyles);\n return (\n
\n
\n {item.logo && {`logo}\n

{item.name}

\n
\n
\n );\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { useStyles2 } from '@grafana/ui';\n\nconst getStyles = () => ({\n noResults: css`\n text-align: center;\n padding: 50px 0;\n font-style: italic;\n `,\n});\n\nexport const NoResults = () => {\n const styles = useStyles2(getStyles);\n\n return

No results matching your query were found.

;\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Icon, Input, useStyles2 } from '@grafana/ui';\nimport { t } from 'app/core/internationalization';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n searchContainer: css({\n display: 'flex',\n justifyContent: 'space-between',\n\n position: 'sticky',\n top: 0,\n backgroundColor: theme.colors.background.primary,\n zIndex: 2,\n padding: theme.spacing(2, 0),\n }),\n});\n\nconst placeholder = t('connections.search.placeholder', 'Search all');\n\nexport interface Props {\n onChange: (e: React.FormEvent) => void;\n value: string | undefined;\n}\n\nexport const Search = ({ onChange, value }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n
\n }\n placeholder={placeholder}\n aria-label=\"Search all\"\n />\n
\n );\n};\n","import { css } from '@emotion/css';\nimport React, { useMemo, useState } from 'react';\n\nimport { GrafanaTheme2, PluginType } from '@grafana/data';\nimport { useStyles2, LoadingPlaceholder } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { useQueryParams } from 'app/core/hooks/useQueryParams';\nimport { t } from 'app/core/internationalization';\nimport { useGetAll } from 'app/features/plugins/admin/state/hooks';\nimport { AccessControlAction } from 'app/types';\n\nimport { ROUTES } from '../../constants';\n\nimport { CardGrid, type CardGridItem } from './CardGrid';\nimport { CategoryHeader } from './CategoryHeader';\nimport { NoAccessModal } from './NoAccessModal';\nimport { NoResults } from './NoResults';\nimport { Search } from './Search';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n spacer: css({\n height: theme.spacing(2),\n }),\n modal: css({\n width: '500px',\n }),\n modalContent: css({\n overflow: 'visible',\n }),\n});\n\nexport function AddNewConnection() {\n const [queryParams, setQueryParams] = useQueryParams();\n const searchTerm = queryParams.search ? String(queryParams.search) : '';\n const [isNoAccessModalOpen, setIsNoAccessModalOpen] = useState(false);\n const [focusedItem, setFocusedItem] = useState(null);\n const styles = useStyles2(getStyles);\n const canCreateDataSources = contextSrv.hasPermission(AccessControlAction.DataSourcesCreate);\n\n const handleSearchChange = (e: React.FormEvent) => {\n setQueryParams({\n search: e.currentTarget.value.toLowerCase(),\n });\n };\n\n const { error, plugins, isLoading } = useGetAll({\n keyword: searchTerm,\n type: PluginType.datasource,\n });\n\n const cardGridItems = useMemo(\n () =>\n plugins.map((plugin) => ({\n id: plugin.id,\n name: plugin.name,\n description: plugin.description,\n logo: plugin.info.logos.small,\n url: ROUTES.DataSourcesDetails.replace(':id', plugin.id),\n angularDetected: plugin.angularDetected,\n })),\n [plugins]\n );\n\n const onClickCardGridItem = (e: React.MouseEvent, item: CardGridItem) => {\n if (!canCreateDataSources) {\n e.preventDefault();\n e.stopPropagation();\n\n openModal(item);\n }\n };\n\n const openModal = (item: CardGridItem) => {\n setIsNoAccessModalOpen(true);\n setFocusedItem(item);\n };\n\n const closeModal = () => {\n setIsNoAccessModalOpen(false);\n setFocusedItem(null);\n };\n\n const showNoResults = useMemo(() => !isLoading && !error && plugins.length < 1, [isLoading, error, plugins]);\n const categoryHeaderLabel = t('connections.connect-data.category-header-label', 'Data sources');\n\n return (\n <>\n {focusedItem && }\n \n {/* We need this extra spacing when there are no filters */}\n
\n \n {isLoading ? (\n \n ) : !!error ? (\n

Error: {error.message}

\n ) : (\n \n )}\n {showNoResults && }\n \n );\n}\n","import * as React from 'react';\n\nimport { Page } from 'app/core/components/Page/Page';\n\nimport { AddNewConnection } from '../tabs/ConnectData';\n\nexport function AddNewConnectionPage() {\n return (\n \n \n \n \n \n );\n}\n","import * as React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { Alert, Badge } from '@grafana/ui';\nimport { PluginDetailsPage } from 'app/features/plugins/admin/components/PluginDetailsPage';\nimport { StoreState, useSelector, AppNotificationSeverity } from 'app/types';\n\nimport { ROUTES } from '../constants';\n\nexport function DataSourceDetailsPage() {\n const overrideNavId = 'standalone-plugin-page-/connections/add-new-connection';\n const { id } = useParams<{ id: string }>();\n const navIndex = useSelector((state: StoreState) => state.navIndex);\n const isConnectDataPageOverriden = Boolean(navIndex[overrideNavId]);\n const navId = isConnectDataPageOverriden ? overrideNavId : 'connections-add-new-connection'; // The nav id changes (gets a prefix) if it is overriden by a plugin\n\n return (\n }\n notFoundNavModel={{\n text: 'Unknown datasource',\n subTitle: 'No datasource with this ID could be found.',\n active: true,\n }}\n />\n );\n}\n\nfunction NotFoundDatasource() {\n const { id } = useParams<{ id: string }>();\n\n return (\n \n Maybe you mistyped the URL or the plugin with the id is unavailable.\n
\n To see a list of available datasources please click here.\n
\n );\n}\n","import React from 'react';\n\nimport { config } from '@grafana/runtime';\nimport { LinkButton } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { Trans } from 'app/core/internationalization';\nimport { AccessControlAction } from 'app/types';\n\nimport { useDataSourcesRoutes } from '../state';\n\nexport function DataSourceAddButton(): JSX.Element | null {\n const canCreateDataSource = contextSrv.hasPermission(AccessControlAction.DataSourcesCreate);\n const dataSourcesRoutes = useDataSourcesRoutes();\n\n return canCreateDataSource ? (\n \n Add new data source\n \n ) : null;\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { DataSourceSettings, GrafanaTheme2 } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { Card, LinkButton, Stack, Tag, useStyles2 } from '@grafana/ui';\n\nimport { useDataSourcesRoutes } from '../state';\nimport { trackCreateDashboardClicked, trackExploreClicked } from '../tracking';\nimport { constructDataSourceExploreUrl } from '../utils';\n\nexport interface Props {\n dataSource: DataSourceSettings;\n hasWriteRights: boolean;\n hasExploreRights: boolean;\n}\n\nexport function DataSourcesListCard({ dataSource, hasWriteRights, hasExploreRights }: Props) {\n const dataSourcesRoutes = useDataSourcesRoutes();\n const dsLink = config.appSubUrl + dataSourcesRoutes.Edit.replace(/:uid/gi, dataSource.uid);\n const styles = useStyles2(getStyles);\n\n return (\n \n {dataSource.name}\n \n \"\"\n \n \n {[\n dataSource.typeName,\n dataSource.url,\n dataSource.isDefault && ,\n ]}\n \n \n {/* Build Dashboard */}\n {\n trackCreateDashboardClicked({\n grafana_version: config.buildInfo.version,\n datasource_uid: dataSource.uid,\n plugin_name: dataSource.typeName,\n path: location.pathname,\n });\n }}\n >\n Build a dashboard\n \n\n {/* Explore */}\n {hasExploreRights && (\n {\n trackExploreClicked({\n grafana_version: config.buildInfo.version,\n datasource_uid: dataSource.uid,\n plugin_name: dataSource.typeName,\n path: location.pathname,\n });\n }}\n >\n Explore\n \n )}\n \n \n );\n}\n\nfunction DataSourcesListCardSkeleton({ hasExploreRights }: Pick) {\n const skeletonStyles = useStyles2(getSkeletonStyles);\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n {/* Explore */}\n {hasExploreRights && }\n \n \n \n );\n}\n\nDataSourcesListCard.Skeleton = DataSourcesListCardSkeleton;\n\nconst getSkeletonStyles = () => {\n return {\n button: css({\n lineHeight: 1,\n }),\n figure: css({\n lineHeight: 1,\n }),\n };\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n logo: css({\n objectFit: 'contain',\n }),\n button: css({\n marginLeft: theme.spacing(2),\n }),\n };\n};\n","import React, { useCallback } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport PageActionBar from 'app/core/components/PageActionBar/PageActionBar';\nimport { StoreState, useSelector, useDispatch } from 'app/types';\n\nimport { getDataSourcesSearchQuery, getDataSourcesSort, setDataSourcesSearchQuery, setIsSortAscending } from '../state';\n\nconst ascendingSortValue = 'alpha-asc';\nconst descendingSortValue = 'alpha-desc';\n\nconst sortOptions = [\n // We use this unicode 'en dash' character (U+2013), because it looks nicer\n // than simple dash in this context. This is also used in the response of\n // the `sorting` endpoint, which is used in the search dashboard page.\n { label: 'Sort by A–Z', value: ascendingSortValue },\n { label: 'Sort by Z–A', value: descendingSortValue },\n];\n\nexport function DataSourcesListHeader() {\n const dispatch = useDispatch();\n const setSearchQuery = useCallback((q: string) => dispatch(setDataSourcesSearchQuery(q)), [dispatch]);\n const searchQuery = useSelector(({ dataSources }: StoreState) => getDataSourcesSearchQuery(dataSources));\n\n const setSort = useCallback(\n (sort: SelectableValue) => dispatch(setIsSortAscending(sort.value === ascendingSortValue)),\n [dispatch]\n );\n const isSortAscending = useSelector(({ dataSources }: StoreState) => getDataSourcesSort(dataSources));\n\n const sortPicker = {\n onChange: setSort,\n value: isSortAscending ? ascendingSortValue : descendingSortValue,\n getSortOptions: () => Promise.resolve(sortOptions),\n };\n\n return (\n \n );\n}\n","import { css } from '@emotion/css';\nimport React, { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { DataSourceSettings, GrafanaTheme2 } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { useStyles2 } from '@grafana/ui';\nimport EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA';\nimport { contextSrv } from 'app/core/core';\nimport { StoreState, AccessControlAction, useSelector } from 'app/types';\n\nimport { getDataSources, getDataSourcesCount, useDataSourcesRoutes, useLoadDataSources } from '../state';\nimport { trackDataSourcesListViewed } from '../tracking';\n\nimport { DataSourcesListCard } from './DataSourcesListCard';\nimport { DataSourcesListHeader } from './DataSourcesListHeader';\n\nexport function DataSourcesList() {\n const { isLoading } = useLoadDataSources();\n\n const dataSources = useSelector((state) => getDataSources(state.dataSources));\n const dataSourcesCount = useSelector(({ dataSources }: StoreState) => getDataSourcesCount(dataSources));\n const hasCreateRights = contextSrv.hasPermission(AccessControlAction.DataSourcesCreate);\n const hasWriteRights = contextSrv.hasPermission(AccessControlAction.DataSourcesWrite);\n const hasExploreRights = contextSrv.hasPermission(AccessControlAction.DataSourcesExplore);\n\n return (\n \n );\n}\n\nexport type ViewProps = {\n dataSources: DataSourceSettings[];\n dataSourcesCount: number;\n isLoading: boolean;\n hasCreateRights: boolean;\n hasWriteRights: boolean;\n hasExploreRights: boolean;\n};\n\nexport function DataSourcesListView({\n dataSources,\n dataSourcesCount,\n isLoading,\n hasCreateRights,\n hasWriteRights,\n hasExploreRights,\n}: ViewProps) {\n const styles = useStyles2(getStyles);\n const dataSourcesRoutes = useDataSourcesRoutes();\n const location = useLocation();\n\n useEffect(() => {\n trackDataSourcesListViewed({\n grafana_version: config.buildInfo.version,\n path: location.pathname,\n });\n }, [location]);\n\n if (!isLoading && dataSourcesCount === 0) {\n return (\n \n );\n }\n\n const getDataSourcesList = () => {\n if (isLoading) {\n return new Array(20)\n .fill(null)\n .map((_, index) => );\n }\n\n return dataSources.map((dataSource) => (\n
  • \n \n
  • \n ));\n };\n\n return (\n <>\n {/* List Header */}\n \n\n {/* List */}\n
      {getDataSourcesList()}
    \n \n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n list: css({\n listStyle: 'none',\n display: 'grid',\n // gap: '8px', Add back when legacy support for old Card interface is dropped\n }),\n };\n};\n","import * as React from 'react';\n\nimport { Page } from 'app/core/components/Page/Page';\nimport { DataSourceAddButton } from 'app/features/datasources/components/DataSourceAddButton';\nimport { DataSourcesList } from 'app/features/datasources/components/DataSourcesList';\nimport { getDataSourcesCount } from 'app/features/datasources/state';\nimport { StoreState, useSelector } from 'app/types';\n\nexport function DataSourcesListPage() {\n const dataSourcesCount = useSelector(({ dataSources }: StoreState) => getDataSourcesCount(dataSources));\n\n const actions = dataSourcesCount > 0 ? : undefined;\n return (\n \n \n \n \n \n );\n}\n","import React, { useEffect } from 'react';\n\nimport PageLoader from 'app/core/components/PageLoader/PageLoader';\nimport { importDashboard, removeDashboard } from 'app/features/dashboard/state/actions';\nimport { loadPluginDashboards } from 'app/features/plugins/admin/state/actions';\nimport { PluginDashboard, StoreState, useDispatch, useSelector } from 'app/types';\n\nimport DashboardTable from '../components/DashboardsTable';\nimport { useInitDataSourceSettings } from '../state';\n\nexport type Props = {\n // The UID of the data source\n uid: string;\n};\n\nexport function DataSourceDashboards({ uid }: Props) {\n useInitDataSourceSettings(uid);\n\n const dispatch = useDispatch();\n const dataSource = useSelector((s: StoreState) => s.dataSources.dataSource);\n const dashboards = useSelector((s: StoreState) => s.plugins.dashboards);\n const isLoading = useSelector((s: StoreState) => s.plugins.isLoadingPluginDashboards);\n\n useEffect(() => {\n // Load plugin dashboards only when the datasource has loaded\n if (dataSource.id > 0) {\n dispatch(loadPluginDashboards());\n }\n }, [dispatch, dataSource.id]);\n\n const onImportDashboard = (dashboard: PluginDashboard, overwrite: boolean) => {\n dispatch(\n importDashboard(\n {\n pluginId: dashboard.pluginId,\n path: dashboard.path,\n overwrite,\n inputs: [\n {\n name: '*',\n type: 'datasource',\n pluginId: dataSource.type,\n value: dataSource.name,\n },\n ],\n },\n dashboard.title\n )\n );\n };\n\n const onRemoveDashboard = ({ uid }: PluginDashboard) => {\n dispatch(removeDashboard(uid));\n };\n\n return (\n \n );\n}\n\nexport type ViewProps = {\n isLoading: boolean;\n dashboards: PluginDashboard[];\n onImportDashboard: (dashboard: PluginDashboard, overwrite: boolean) => void;\n onRemoveDashboard: (dashboard: PluginDashboard) => void;\n};\n\nexport const DataSourceDashboardsView = ({\n isLoading,\n dashboards,\n onImportDashboard,\n onRemoveDashboard,\n}: ViewProps) => {\n if (isLoading) {\n return ;\n }\n\n return ;\n};\n","import { useLocation, useParams } from 'react-router-dom';\n\nimport { NavModel, NavModelItem } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { useDataSource, useDataSourceMeta, useDataSourceSettings } from 'app/features/datasources/state/hooks';\nimport { getDataSourceLoadingNav, buildNavModel, getDataSourceNav } from 'app/features/datasources/state/navModel';\nimport { useGetSingle } from 'app/features/plugins/admin/state/hooks';\nimport { useSelector } from 'app/types';\n\nexport function useDataSourceSettingsNav(pageIdParam?: string) {\n const { uid } = useParams<{ uid: string }>();\n const location = useLocation();\n const datasource = useDataSource(uid);\n const dataSourceMeta = useDataSourceMeta(datasource.type);\n const datasourcePlugin = useGetSingle(datasource.type);\n const params = new URLSearchParams(location.search);\n const pageId = pageIdParam || params.get('page');\n\n const { plugin, loadError, loading } = useDataSourceSettings();\n const dsi = getDataSourceSrv()?.getInstanceSettings(uid);\n const hasAlertingEnabled = Boolean(dsi?.meta?.alerting ?? false);\n const isAlertManagerDatasource = dsi?.type === 'alertmanager';\n const alertingSupported = hasAlertingEnabled || isAlertManagerDatasource;\n\n const navIndex = useSelector((state) => state.navIndex);\n const navIndexId = pageId ? `datasource-${pageId}-${uid}` : `datasource-settings-${uid}`;\n let pageNav: NavModel = {\n node: {\n text: 'Data Source Nav Node',\n },\n main: {\n text: 'Data Source Nav Node',\n },\n };\n\n if (loadError) {\n const node: NavModelItem = {\n text: loadError,\n subTitle: 'Data Source Error',\n icon: 'exclamation-triangle',\n };\n\n pageNav = {\n node: node,\n main: node,\n };\n }\n\n if (loading || !plugin) {\n pageNav = getNavModel(navIndex, navIndexId, getDataSourceLoadingNav('settings'));\n }\n\n if (plugin) {\n pageNav = getNavModel(\n navIndex,\n navIndexId,\n getDataSourceNav(buildNavModel(datasource, plugin), pageId || 'settings')\n );\n }\n\n const connectionsPageNav = {\n ...pageNav.main,\n dataSourcePluginName: datasourcePlugin?.name || plugin?.meta.name || '',\n active: true,\n text: datasource.name,\n subTitle: `Type: ${dataSourceMeta.name}`,\n children: (pageNav.main.children || []).map((navModelItem) => ({\n ...navModelItem,\n url: navModelItem.url?.replace('datasources/edit/', '/connections/datasources/edit/'),\n })),\n };\n\n return {\n navId: 'connections-datasources',\n pageNav: connectionsPageNav,\n dataSourceHeader: {\n alertingSupported,\n },\n };\n}\n","import * as React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { Page } from 'app/core/components/Page/Page';\nimport { DataSourceDashboards } from 'app/features/datasources/components/DataSourceDashboards';\n\nimport { useDataSourceSettingsNav } from '../hooks/useDataSourceSettingsNav';\n\nexport function DataSourceDashboardsPage() {\n const { uid } = useParams<{ uid: string }>();\n const { navId, pageNav } = useDataSourceSettingsNav('dashboards');\n\n return (\n \n \n \n \n \n );\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { InlineField, InlineSwitch, Input, Badge, useStyles2 } from '@grafana/ui';\n\nexport interface Props {\n dataSourceName: string;\n isDefault: boolean;\n onNameChange: (name: string) => void;\n onDefaultChange: (value: boolean) => void;\n disabled?: boolean;\n}\n\nexport function BasicSettings({ dataSourceName, isDefault, onDefaultChange, onNameChange, disabled }: Props) {\n return (\n <>\n
    \n
    \n {/* Name */}\n
    \n \n onNameChange(event.currentTarget.value)}\n required\n data-testid={selectors.pages.DataSource.name}\n />\n \n
    \n\n {/* Is Default */}\n \n ) => {\n onDefaultChange(event.currentTarget.checked);\n }}\n />\n \n
    \n
    \n \n );\n}\n\nexport function AlertingEnabled({ enabled }: { enabled: boolean }) {\n const styles = useStyles2(getStyles);\n return (\n
    \n {enabled ? (\n \n ) : (\n \n )}\n
    \n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n badge: css`\n margin-bottom: ${theme.spacing(2)};\n `,\n});\n","import React from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Button } from '@grafana/ui';\n\nexport interface Props {\n canSave: boolean;\n canDelete: boolean;\n onDelete: (event: React.MouseEvent) => void;\n onSubmit: (event: React.MouseEvent) => void;\n onTest: (event: React.MouseEvent) => void;\n}\n\nexport function ButtonRow({ canSave, canDelete, onDelete, onSubmit, onTest }: Props) {\n return (\n
    \n \n Delete\n \n {canSave && (\n \n Save & test\n \n )}\n {!canSave && (\n \n )}\n
    \n );\n}\n","import React from 'react';\n\nimport { DataSourceSettings } from '@grafana/data';\nimport { GrafanaEdition } from '@grafana/data/src/types/config';\nimport { Alert } from '@grafana/ui';\nimport { LocalStorageValueProvider } from 'app/core/components/LocalStorageValueProvider';\nimport { config } from 'app/core/config';\n\nconst LOCAL_STORAGE_KEY = 'datasources.settings.cloudInfoBox.isDismissed';\n\nexport interface Props {\n dataSource: DataSourceSettings;\n}\n\nexport function CloudInfoBox({ dataSource }: Props) {\n let mainDS = '';\n let extraDS = '';\n\n // don't show for already configured data sources or provisioned data sources\n if (dataSource.readOnly || (dataSource.version ?? 0) > 2) {\n return null;\n }\n\n // Skip showing this info box in some editions\n if (config.buildInfo.edition !== GrafanaEdition.OpenSource) {\n return null;\n }\n\n switch (dataSource.type) {\n case 'prometheus':\n mainDS = 'Prometheus';\n extraDS = 'Loki';\n break;\n case 'loki':\n mainDS = 'Loki';\n extraDS = 'Prometheus';\n break;\n default:\n return null;\n }\n\n return (\n storageKey={LOCAL_STORAGE_KEY} defaultValue={false}>\n {(isDismissed, onDismiss) => {\n if (isDismissed) {\n return null;\n }\n return (\n {\n onDismiss(true);\n }}\n >\n Or skip the effort and get {mainDS} (and {extraDS}) as fully-managed, scalable, and hosted data sources from\n Grafana Labs with the{' '}\n \n free-forever Grafana Cloud plan\n \n .\n \n );\n }}\n \n );\n}\n","import React from 'react';\n\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Alert } from '@grafana/ui';\n\nexport const readOnlyMessage =\n 'This data source was added by config and cannot be modified using the UI. Please contact your server admin to update this data source.';\n\nexport function DataSourceReadOnlyMessage() {\n return (\n \n {readOnlyMessage}\n \n );\n}\n","import React from 'react';\n\nimport { Button } from '@grafana/ui';\n\nimport { DataSourceRights } from '../types';\n\nimport { DataSourceReadOnlyMessage } from './DataSourceReadOnlyMessage';\n\nexport type Props = {\n dataSourceRights: DataSourceRights;\n onDelete: () => void;\n};\n\nexport function DataSourceLoadError({ dataSourceRights, onDelete }: Props) {\n const { readOnly, hasDeleteRights } = dataSourceRights;\n const canDelete = !readOnly && hasDeleteRights;\n const navigateBack = () => history.back();\n\n return (\n <>\n {readOnly && }\n\n
    \n {canDelete && (\n \n )}\n\n \n
    \n \n );\n}\n","import React from 'react';\n\nimport { Alert } from '@grafana/ui';\n\nexport const missingRightsMessage =\n 'You are not allowed to modify this data source. Please contact your server admin to update this data source.';\n\nexport function DataSourceMissingRightsMessage() {\n return (\n \n {missingRightsMessage}\n \n );\n}\n","import React from 'react';\n\nimport { GenericDataSourcePlugin } from '../types';\n\nexport type Props = {\n plugin?: GenericDataSourcePlugin | null;\n pageId: string;\n};\n\nexport function DataSourcePluginConfigPage({ plugin, pageId }: Props) {\n if (!plugin || !plugin.configPages) {\n return null;\n }\n\n const page = plugin.configPages.find(({ id }) => id === pageId);\n\n if (page) {\n // TODO: Investigate if any plugins are using this? We should change this interface\n return ;\n }\n\n return
    Page not found: {page}
    ;\n}\n","import { cloneDeep } from 'lodash';\nimport React, { PureComponent } from 'react';\n\nimport { DataSourcePluginMeta, DataSourceSettings } from '@grafana/data';\nimport { AngularComponent, getAngularLoader } from '@grafana/runtime';\n\nimport { GenericDataSourcePlugin } from '../types';\n\nexport interface Props {\n plugin: GenericDataSourcePlugin;\n dataSource: DataSourceSettings;\n dataSourceMeta: DataSourcePluginMeta;\n onModelChange: (dataSource: DataSourceSettings) => void;\n}\n\nexport class DataSourcePluginSettings extends PureComponent {\n element: HTMLDivElement | null = null;\n component?: AngularComponent;\n scopeProps: {\n ctrl: { datasourceMeta: DataSourcePluginMeta; current: DataSourceSettings };\n onModelChanged: (dataSource: DataSourceSettings) => void;\n };\n\n constructor(props: Props) {\n super(props);\n\n this.scopeProps = {\n ctrl: { datasourceMeta: props.dataSourceMeta, current: cloneDeep(props.dataSource) },\n onModelChanged: this.onModelChanged,\n };\n this.onModelChanged = this.onModelChanged.bind(this);\n }\n\n componentDidMount() {\n const { plugin } = this.props;\n\n if (!this.element) {\n return;\n }\n\n if (!plugin.components.ConfigEditor) {\n // React editor is not specified, let's render angular editor\n // How to approach this better? Introduce ReactDataSourcePlugin interface and typeguard it here?\n const loader = getAngularLoader();\n const template = '';\n\n this.component = loader.load(this.element, this.scopeProps, template);\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n const { plugin } = this.props;\n if (!plugin.components.ConfigEditor && this.props.dataSource !== prevProps.dataSource) {\n this.scopeProps.ctrl.current = cloneDeep(this.props.dataSource);\n\n this.component?.digest();\n }\n }\n\n componentWillUnmount() {\n if (this.component) {\n this.component.destroy();\n }\n }\n\n onModelChanged = (dataSource: DataSourceSettings) => {\n this.props.onModelChange(dataSource);\n };\n\n render() {\n const { plugin, dataSource } = this.props;\n\n if (!plugin) {\n return null;\n }\n\n return (\n
    (this.element = element)}>\n {plugin.components.ConfigEditor &&\n React.createElement(plugin.components.ConfigEditor, {\n options: dataSource,\n onOptionsChange: this.onModelChanged,\n })}\n
    \n );\n }\n}\n","import React from 'react';\n\nimport { PluginState } from '@grafana/data';\nimport { PluginStateInfo } from 'app/features/plugins/components/PluginStateInfo';\n\nexport type Props = {\n state?: PluginState;\n};\n\nexport function DataSourcePluginState({ state }: Props) {\n return (\n
    \n
    Plugin state
    \n
    \n \n
    \n
    \n );\n}\n","import { css, cx } from '@emotion/css';\nimport React, { HTMLAttributes } from 'react';\n\nimport { DataSourceSettings as DataSourceSettingsType, GrafanaTheme2 } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { TestingStatus, config } from '@grafana/runtime';\nimport { AlertVariant, Alert, useTheme2, Link } from '@grafana/ui';\n\nimport { contextSrv } from '../../../core/core';\nimport { AccessControlAction } from '../../../types';\nimport { trackCreateDashboardClicked } from '../tracking';\n\nexport type Props = {\n testingStatus?: TestingStatus;\n exploreUrl: string;\n dataSource: DataSourceSettingsType;\n};\n\ninterface AlertMessageProps extends HTMLAttributes {\n title: string;\n severity?: AlertVariant;\n exploreUrl: string;\n dataSourceId: string;\n onDashboardLinkClicked: () => void;\n}\n\nconst getStyles = (theme: GrafanaTheme2, hasTitle: boolean) => {\n return {\n content: css`\n color: ${theme.colors.text.secondary};\n padding-top: ${hasTitle ? theme.spacing(1) : 0};\n max-height: 50vh;\n overflow-y: auto;\n `,\n disabled: css`\n pointer-events: none;\n color: ${theme.colors.text.secondary};\n `,\n };\n};\n\nconst AlertSuccessMessage = ({ title, exploreUrl, dataSourceId, onDashboardLinkClicked }: AlertMessageProps) => {\n const theme = useTheme2();\n const hasTitle = Boolean(title);\n const styles = getStyles(theme, hasTitle);\n const canExploreDataSources = contextSrv.hasPermission(AccessControlAction.DataSourcesExplore);\n\n return (\n
    \n Next, you can start to visualize data by{' '}\n \n building a dashboard\n \n , or by querying data in the{' '}\n \n Explore view\n \n .\n
    \n );\n};\n\nAlertSuccessMessage.displayName = 'AlertSuccessMessage';\n\nconst alertVariants = new Set(['success', 'info', 'warning', 'error']);\nconst isAlertVariant = (str: string): str is AlertVariant => alertVariants.has(str as AlertVariant);\nconst getAlertVariant = (status: string): AlertVariant => {\n if (status.toLowerCase() === 'ok') {\n return 'success';\n }\n return isAlertVariant(status) ? status : 'info';\n};\n\nexport function DataSourceTestingStatus({ testingStatus, exploreUrl, dataSource }: Props) {\n const severity = getAlertVariant(testingStatus?.status ?? 'error');\n const message = testingStatus?.message;\n const detailsMessage = testingStatus?.details?.message;\n const detailsVerboseMessage = testingStatus?.details?.verboseMessage;\n const onDashboardLinkClicked = () => {\n trackCreateDashboardClicked({\n grafana_version: config.buildInfo.version,\n datasource_uid: dataSource.uid,\n plugin_name: dataSource.typeName,\n path: location.pathname,\n });\n };\n\n if (message) {\n return (\n
    \n \n {testingStatus?.details && (\n <>\n {detailsMessage}\n {severity === 'success' ? (\n \n ) : null}\n {detailsVerboseMessage ? (\n
    {String(detailsVerboseMessage)}
    \n ) : null}\n \n )}\n
    \n
    \n );\n }\n\n return null;\n}\n","import { AnyAction } from '@reduxjs/toolkit';\nimport { omit } from 'lodash';\nimport React, { useMemo } from 'react';\n\nimport {\n DataSourcePluginContextProvider,\n DataSourcePluginMeta,\n DataSourceSettings as DataSourceSettingsType,\n PluginExtensionPoints,\n PluginExtensionDataSourceConfigContext,\n DataSourceJsonData,\n DataSourceUpdatedSuccessfully,\n} from '@grafana/data';\nimport { getDataSourceSrv, getPluginComponentExtensions } from '@grafana/runtime';\nimport appEvents from 'app/core/app_events';\nimport PageLoader from 'app/core/components/PageLoader/PageLoader';\nimport { DataSourceSettingsState, useDispatch } from 'app/types';\n\nimport {\n dataSourceLoaded,\n setDataSourceName,\n setIsDefault,\n useDataSource,\n useDataSourceExploreUrl,\n useDataSourceMeta,\n useDataSourceRights,\n useDataSourceSettings,\n useDeleteLoadedDataSource,\n useInitDataSourceSettings,\n useTestDataSource,\n useUpdateDatasource,\n} from '../state';\nimport { trackDsConfigClicked, trackDsConfigUpdated } from '../tracking';\nimport { DataSourceRights } from '../types';\n\nimport { BasicSettings } from './BasicSettings';\nimport { ButtonRow } from './ButtonRow';\nimport { CloudInfoBox } from './CloudInfoBox';\nimport { DataSourceLoadError } from './DataSourceLoadError';\nimport { DataSourceMissingRightsMessage } from './DataSourceMissingRightsMessage';\nimport { DataSourcePluginConfigPage } from './DataSourcePluginConfigPage';\nimport { DataSourcePluginSettings } from './DataSourcePluginSettings';\nimport { DataSourcePluginState } from './DataSourcePluginState';\nimport { DataSourceReadOnlyMessage } from './DataSourceReadOnlyMessage';\nimport { DataSourceTestingStatus } from './DataSourceTestingStatus';\n\nexport type Props = {\n // The ID of the data source\n uid: string;\n // The ID of the custom datasource setting page\n pageId?: string | null;\n};\n\nexport function EditDataSource({ uid, pageId }: Props) {\n useInitDataSourceSettings(uid);\n\n const dispatch = useDispatch();\n const dataSource = useDataSource(uid);\n const dataSourceMeta = useDataSourceMeta(dataSource.type);\n const dataSourceSettings = useDataSourceSettings();\n const dataSourceRights = useDataSourceRights(uid);\n const exploreUrl = useDataSourceExploreUrl(uid);\n const onDelete = useDeleteLoadedDataSource();\n const onTest = useTestDataSource(uid);\n const onUpdate = useUpdateDatasource();\n const onDefaultChange = (value: boolean) => dispatch(setIsDefault(value));\n const onNameChange = (name: string) => dispatch(setDataSourceName(name));\n const onOptionsChange = (ds: DataSourceSettingsType) => dispatch(dataSourceLoaded(ds));\n\n return (\n \n );\n}\n\nexport type ViewProps = {\n pageId?: string | null;\n dataSource: DataSourceSettingsType;\n dataSourceMeta: DataSourcePluginMeta;\n dataSourceSettings: DataSourceSettingsState;\n dataSourceRights: DataSourceRights;\n exploreUrl: string;\n onDelete: () => void;\n onDefaultChange: (isDefault: boolean) => AnyAction;\n onNameChange: (name: string) => AnyAction;\n onOptionsChange: (dataSource: DataSourceSettingsType) => AnyAction;\n onTest: () => void;\n onUpdate: (dataSource: DataSourceSettingsType) => Promise;\n};\n\nexport function EditDataSourceView({\n pageId,\n dataSource,\n dataSourceMeta,\n dataSourceSettings,\n dataSourceRights,\n exploreUrl,\n onDelete,\n onDefaultChange,\n onNameChange,\n onOptionsChange,\n onTest,\n onUpdate,\n}: ViewProps) {\n const { plugin, loadError, testingStatus, loading } = dataSourceSettings;\n const { readOnly, hasWriteRights, hasDeleteRights } = dataSourceRights;\n const hasDataSource = dataSource.id > 0;\n\n const dsi = getDataSourceSrv()?.getInstanceSettings(dataSource.uid);\n\n const onSubmit = async (e: React.MouseEvent | React.FormEvent) => {\n e.preventDefault();\n trackDsConfigClicked('save_and_test');\n\n try {\n await onUpdate({ ...dataSource });\n trackDsConfigUpdated({ item: 'success' });\n appEvents.publish(new DataSourceUpdatedSuccessfully());\n } catch (error) {\n trackDsConfigUpdated({ item: 'fail' });\n return;\n }\n\n onTest();\n };\n\n const extensions = useMemo(() => {\n const allowedPluginIds = ['grafana-pdc-app', 'grafana-auth-app'];\n const extensionPointId = PluginExtensionPoints.DataSourceConfig;\n const { extensions } = getPluginComponentExtensions({ extensionPointId });\n\n return extensions.filter((e) => allowedPluginIds.includes(e.pluginId));\n }, []);\n\n if (loadError) {\n return (\n {\n trackDsConfigClicked('delete');\n onDelete();\n }}\n />\n );\n }\n\n if (loading) {\n return ;\n }\n\n // TODO - is this needed?\n if (!hasDataSource || !dsi) {\n return null;\n }\n\n if (pageId) {\n return (\n \n \n \n );\n }\n\n return (\n
    \n {!hasWriteRights && }\n {readOnly && }\n {dataSourceMeta.state && }\n\n \n\n \n\n {plugin && (\n \n \n \n )}\n\n {/* Extension point */}\n {extensions.map((extension) => {\n const Component = extension.component as React.ComponentType<{\n context: PluginExtensionDataSourceConfigContext;\n }>;\n\n return (\n
    \n \n onOptionsChange({\n ...dataSource,\n jsonData: { ...dataSource.jsonData, ...jsonData },\n }),\n }}\n />\n
    \n );\n })}\n\n \n\n {\n trackDsConfigClicked('delete');\n onDelete();\n }}\n onTest={() => {\n trackDsConfigClicked('test');\n onTest();\n }}\n canDelete={!readOnly && hasDeleteRights}\n canSave={!readOnly && hasWriteRights}\n />\n \n );\n}\n","import React from 'react';\n\nimport { config } from '@grafana/runtime';\nimport { LinkButton } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { AccessControlAction } from 'app/types';\n\nimport { useDataSource } from '../state';\nimport { trackCreateDashboardClicked, trackDsConfigClicked, trackExploreClicked } from '../tracking';\nimport { constructDataSourceExploreUrl } from '../utils';\n\ninterface Props {\n uid: string;\n}\n\nexport function EditDataSourceActions({ uid }: Props) {\n const dataSource = useDataSource(uid);\n const hasExploreRights = contextSrv.hasPermission(AccessControlAction.DataSourcesExplore);\n\n return (\n <>\n {hasExploreRights && (\n {\n trackDsConfigClicked('explore');\n trackExploreClicked({\n grafana_version: config.buildInfo.version,\n datasource_uid: dataSource.uid,\n plugin_name: dataSource.typeName,\n path: location.pathname,\n });\n }}\n >\n Explore data\n \n )}\n {\n trackDsConfigClicked('build_a_dashboard');\n trackCreateDashboardClicked({\n grafana_version: config.buildInfo.version,\n datasource_uid: dataSource.uid,\n plugin_name: dataSource.typeName,\n path: location.pathname,\n });\n }}\n >\n Build a dashboard\n \n \n );\n}\n","import React from 'react';\n\nimport { Badge } from '@grafana/ui';\nimport { PageInfoItem } from 'app/core/components/Page/types';\n\ntype DataSourceInfo = {\n dataSourcePluginName: string;\n alertingSupported: boolean;\n};\n\nexport const useDataSourceInfo = (dataSourceInfo: DataSourceInfo): PageInfoItem[] => {\n const info: PageInfoItem[] = [];\n const alertingEnabled = dataSourceInfo.alertingSupported;\n\n info.push({\n label: 'Type',\n value: dataSourceInfo.dataSourcePluginName,\n });\n\n info.push({\n label: 'Alerting',\n value: (\n \n ),\n });\n\n return info;\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\ninterface Props {\n title: string;\n}\n\nexport function DataSourceTitle({ title }: Props) {\n const styles = useStyles2(getStyles);\n\n return (\n
    \n

    {title}

    \n
    \n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n marginBottom: theme.spacing(2),\n h1: {\n display: 'inline-block',\n },\n }),\n title: css({\n display: 'inline-block',\n margin: '0 0 0 0',\n maxWidth: '40vw',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }),\n };\n};\n","import React from 'react';\n\nimport { Page } from 'app/core/components/Page/Page';\nimport { useDataSourceSettingsNav } from 'app/features/connections/hooks/useDataSourceSettingsNav';\n\nimport { EditDataSource } from '../components/EditDataSource';\nimport { EditDataSourceActions } from '../components/EditDataSourceActions';\nimport { useDataSourceInfo } from '../components/useDataSourceInfo';\n\nimport { DataSourceTitle } from './DataSourceTitle';\n\nexport interface Props {\n uid: string;\n pageId: string | null;\n}\n\nexport function DataSourceTabPage({ uid, pageId }: Props) {\n const { navId, pageNav, dataSourceHeader } = useDataSourceSettingsNav();\n\n const info = useDataSourceInfo({\n dataSourcePluginName: pageNav.dataSourcePluginName,\n alertingSupported: dataSourceHeader.alertingSupported,\n });\n\n return (\n }\n info={info}\n actions={}\n >\n \n \n \n \n );\n}\n\nexport default DataSourceTabPage;\n","import * as React from 'react';\nimport { useLocation, useParams } from 'react-router-dom';\n\nimport DataSourceTabPage from 'app/features/datasources/components/DataSourceTabPage';\n\nexport function EditDataSourcePage() {\n const { uid } = useParams<{ uid: string }>();\n const location = useLocation();\n const params = new URLSearchParams(location.search);\n const pageId = params.get('page');\n\n return ;\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2, PluginErrorCode, PluginSignatureStatus, PluginType } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Alert, HorizontalGroup, Icon, List, PluginSignatureBadge, useStyles2 } from '@grafana/ui';\n\nimport { useGetErrors, useFetchStatus } from '../admin/state/hooks';\n\ntype PluginsErrorInfoProps = {\n filterByPluginType?: PluginType;\n};\n\nexport function PluginsErrorsInfo({ filterByPluginType }: PluginsErrorInfoProps) {\n let errors = useGetErrors(filterByPluginType);\n const { isLoading } = useFetchStatus();\n const styles = useStyles2(getStyles);\n\n if (isLoading || errors.length === 0) {\n return null;\n }\n\n return (\n \n

    The following plugins are disabled and not shown in the list below:

    \n (\n
    \n \n {error.pluginId}\n \n \n
    \n )}\n />\n \n Read more about plugin signing\n \n \n );\n}\n\nfunction mapPluginErrorCodeToSignatureStatus(code: PluginErrorCode) {\n switch (code) {\n case PluginErrorCode.invalidSignature:\n return PluginSignatureStatus.invalid;\n case PluginErrorCode.missingSignature:\n return PluginSignatureStatus.missing;\n case PluginErrorCode.modifiedSignature:\n return PluginSignatureStatus.modified;\n default:\n return PluginSignatureStatus.missing;\n }\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n list: css({\n listStyleType: 'circle',\n }),\n wrapper: css({\n marginTop: theme.spacing(1),\n }),\n badge: css({\n marginTop: 0,\n }),\n docsLink: css({\n display: 'inline-block',\n color: theme.colors.text.link,\n marginTop: theme.spacing(2),\n }),\n };\n}\n","import { css, cx } from '@emotion/css';\nimport React from 'react';\n\nimport { DataSourcePluginMeta, GrafanaTheme2 } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Card, LinkButton, PluginSignatureBadge, useStyles2 } from '@grafana/ui';\n\nexport type Props = {\n dataSourcePlugin: DataSourcePluginMeta;\n onClick: () => void;\n};\n\nexport function DataSourceTypeCard({ onClick, dataSourcePlugin }: Props) {\n const isPhantom = dataSourcePlugin.module === 'phantom';\n const isClickable = !isPhantom && !dataSourcePlugin.unlicensed;\n const learnMoreLink = dataSourcePlugin.info?.links?.length > 0 ? dataSourcePlugin.info.links[0] : null;\n const learnMoreLinkTarget = learnMoreLink?.target ?? '_blank';\n\n const styles = useStyles2(getStyles);\n\n return (\n {}}>\n {/* Name */}\n \n {dataSourcePlugin.name}\n \n\n {/* Logo */}\n \n \"\"\n \n\n {dataSourcePlugin.info.description}\n\n {/* Signature */}\n {!isPhantom && (\n \n \n \n )}\n\n {/* Learn more */}\n \n {learnMoreLink && (\n e.stopPropagation()}\n rel=\"noopener\"\n target={learnMoreLinkTarget}\n variant=\"secondary\"\n >\n {learnMoreLink.name}\n \n )}\n \n \n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n heading: css({\n fontSize: theme.v1.typography.heading.h5,\n fontWeight: 'inherit',\n }),\n figure: css({\n width: 'inherit',\n marginRight: '0px',\n '> img': {\n width: theme.spacing(7),\n },\n }),\n meta: css({\n marginTop: '6px',\n position: 'relative',\n }),\n description: css({\n margin: '0px',\n fontSize: theme.typography.size.sm,\n }),\n actions: css({\n position: 'relative',\n alignSelf: 'center',\n marginTop: '0px',\n opacity: 0,\n\n '.card-parent:hover &, .card-parent:focus-within &': {\n opacity: 1,\n },\n }),\n card: css({\n gridTemplateAreas: `\n \"Figure Heading Actions\"\n \"Figure Description Actions\"\n \"Figure Meta Actions\"\n \"Figure - Actions\"`,\n }),\n logo: css({\n marginRight: theme.v1.spacing.lg,\n marginLeft: theme.v1.spacing.sm,\n width: theme.spacing(7),\n maxHeight: theme.spacing(7),\n }),\n };\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { DataSourcePluginMeta } from '@grafana/data';\nimport { List } from '@grafana/ui';\n\nimport { DataSourceTypeCard } from './DataSourceTypeCard';\n\nexport type Props = {\n // The list of data-source plugins to display\n dataSourcePlugins: DataSourcePluginMeta[];\n // Called when a data-source plugin is clicked on in the list\n onClickDataSourceType: (dataSource: DataSourcePluginMeta) => void;\n};\n\nexport function DataSourceTypeCardList({ dataSourcePlugins, onClickDataSourceType }: Props) {\n if (!dataSourcePlugins || !dataSourcePlugins.length) {\n return null;\n }\n\n return (\n item.id.toString()}\n renderItem={(item) => onClickDataSourceType(item)} />}\n className={css`\n > li {\n margin-bottom: 2px;\n }\n `}\n />\n );\n}\n","import React from 'react';\n\nimport { DataSourcePluginMeta } from '@grafana/data';\nimport { LinkButton } from '@grafana/ui';\nimport { DataSourcePluginCategory } from 'app/types';\n\nimport { ROUTES } from '../../connections/constants';\n\nimport { DataSourceTypeCardList } from './DataSourceTypeCardList';\n\nexport type Props = {\n // The list of data-source plugin categories to display\n categories: DataSourcePluginCategory[];\n\n // Called when a data-source plugin is clicked on in the list\n onClickDataSourceType: (dataSource: DataSourcePluginMeta) => void;\n};\n\nexport function DataSourceCategories({ categories, onClickDataSourceType }: Props) {\n const moreDataSourcesLink = `${ROUTES.AddNewConnection}?cat=data-source`;\n\n return (\n <>\n {/* Categories */}\n {categories.map(({ id, title, plugins }) => (\n
    \n
    \n {title}\n
    \n \n
    \n ))}\n\n {/* Find more */}\n
    \n \n Find more data source plugins\n \n
    \n \n );\n}\n","import React from 'react';\nimport { AnyAction } from 'redux';\n\nimport { DataSourcePluginMeta, PluginType } from '@grafana/data';\nimport { LinkButton, FilterInput } from '@grafana/ui';\nimport PageLoader from 'app/core/components/PageLoader/PageLoader';\nimport { PluginsErrorsInfo } from 'app/features/plugins/components/PluginsErrorsInfo';\nimport { DataSourcePluginCategory, StoreState, useDispatch, useSelector } from 'app/types';\n\nimport { DataSourceCategories } from '../components/DataSourceCategories';\nimport { DataSourceTypeCardList } from '../components/DataSourceTypeCardList';\nimport {\n useAddDatasource,\n useLoadDataSourcePlugins,\n getFilteredDataSourcePlugins,\n setDataSourceTypeSearchQuery,\n useDataSourcesRoutes,\n} from '../state';\n\nexport function NewDataSource() {\n useLoadDataSourcePlugins();\n\n const dispatch = useDispatch();\n const filteredDataSources = useSelector((s: StoreState) => getFilteredDataSourcePlugins(s.dataSources));\n const searchQuery = useSelector((s: StoreState) => s.dataSources.dataSourceTypeSearchQuery);\n const isLoadingDatasourcePlugins = useSelector((s: StoreState) => s.dataSources.isLoadingDataSourcePlugins);\n const dataSourceCategories = useSelector((s: StoreState) => s.dataSources.categories);\n const onAddDataSource = useAddDatasource();\n const onSetSearchQuery = (q: string) => dispatch(setDataSourceTypeSearchQuery(q));\n\n return (\n \n );\n}\n\nexport type ViewProps = {\n dataSources: DataSourcePluginMeta[];\n dataSourceCategories: DataSourcePluginCategory[];\n searchQuery: string;\n isLoading: boolean;\n onAddDataSource: (dataSource: DataSourcePluginMeta) => void;\n onSetSearchQuery: (q: string) => AnyAction;\n};\n\nexport function NewDataSourceView({\n dataSources,\n dataSourceCategories,\n searchQuery,\n isLoading,\n onAddDataSource,\n onSetSearchQuery,\n}: ViewProps) {\n const dataSourcesRoutes = useDataSourcesRoutes();\n\n if (isLoading) {\n return ;\n }\n\n return (\n <>\n {/* Search */}\n
    \n \n
    \n \n Cancel\n \n
    \n\n {/* Show datasource plugin errors while not searching for anything specific */}\n {!searchQuery && }\n\n {/* Search results */}\n
    \n {searchQuery && (\n \n )}\n {!searchQuery && (\n \n )}\n
    \n \n );\n}\n","import * as React from 'react';\n\nimport { Page } from 'app/core/components/Page/Page';\nimport { NewDataSource } from 'app/features/datasources/components/NewDataSource';\n\nexport function NewDataSourcePage() {\n return (\n \n \n \n \n \n );\n}\n","import * as React from 'react';\nimport { Redirect, Route, Switch, useLocation } from 'react-router-dom';\n\nimport { DataSourcesRoutesContext } from 'app/features/datasources/state';\nimport { StoreState, useSelector } from 'app/types';\n\nimport { ROUTES } from './constants';\nimport {\n AddNewConnectionPage,\n DataSourceDashboardsPage,\n DataSourceDetailsPage,\n DataSourcesListPage,\n EditDataSourcePage,\n NewDataSourcePage,\n} from './pages';\n\nfunction RedirectToAddNewConnection() {\n const { search } = useLocation();\n return (\n \n );\n}\n\nexport default function Connections() {\n const navIndex = useSelector((state: StoreState) => state.navIndex);\n const isAddNewConnectionPageOverridden = Boolean(navIndex['standalone-plugin-page-/connections/add-new-connection']);\n\n return (\n \n \n {/* Redirect to \"Add new connection\" by default */}\n } />\n \n \n \n \n \n\n {/* \"Add new connection\" page - we don't register a route in case a plugin already registers a standalone page for it */}\n {!isAddNewConnectionPageOverridden && (\n \n )}\n\n {/* Redirect from earlier routes to updated routes */}\n \n \n \n\n {/* Not found */}\n } />\n \n \n );\n}\n"],"names":["PageActionBar","searchQuery","linkButton","setSearchQuery","target","placeholder","sortPicker","linkProps","defaultSortOptionsGetter","SortPicker","onChange","value","filter","getSortOptions","isClearable","options","vals","v","isDesc","opt","getStyles","theme","CardGrid","items","onClickItem","styles","Grid","item","Card","e","CategoryHeader","iconName","label","Icon","NoAccessModal","isOpen","onDismiss","Modal","NoAccessModalHeader","Button","NoResults","Search","Input","AddNewConnection","queryParams","setQueryParams","useQueryParams","searchTerm","isNoAccessModalOpen","setIsNoAccessModalOpen","focusedItem","setFocusedItem","canCreateDataSources","handleSearchChange","error","plugins","isLoading","cardGridItems","plugin","onClickCardGridItem","openModal","closeModal","showNoResults","categoryHeaderLabel","LoadingPlaceholder","AddNewConnectionPage","Page","DataSourceDetailsPage","overrideNavId","id","navId","state","PluginDetailsPage","NotFoundDatasource","Alert","DataSourceAddButton","canCreateDataSource","dataSourcesRoutes","config","DataSourcesListCard","dataSource","hasWriteRights","hasExploreRights","dsLink","Tag","DataSourcesListCardSkeleton","skeletonStyles","getSkeletonStyles","Stack","ascendingSortValue","descendingSortValue","sortOptions","DataSourcesListHeader","dispatch","q","dataSources","setSort","sort","isSortAscending","DataSourcesList","dataSourcesCount","hasCreateRights","DataSourcesListView","location","EmptyListCTA","getDataSourcesList","_","index","DataSourcesListPage","actions","DataSourceDashboards","uid","s","dashboards","onImportDashboard","dashboard","overwrite","onRemoveDashboard","DataSourceDashboardsView","PageLoader","useDataSourceSettingsNav","pageIdParam","datasource","dataSourceMeta","datasourcePlugin","params","pageId","loadError","loading","dsi","hasAlertingEnabled","isAlertManagerDatasource","alertingSupported","navIndex","navIndexId","pageNav","node","navModelItem","DataSourceDashboardsPage","BasicSettings","dataSourceName","isDefault","onDefaultChange","onNameChange","disabled","InlineField","event","selectors","AlertingEnabled","enabled","ButtonRow","canSave","canDelete","onDelete","onSubmit","onTest","LOCAL_STORAGE_KEY","CloudInfoBox","mainDS","extraDS","LocalStorageValueProvider","isDismissed","readOnlyMessage","DataSourceReadOnlyMessage","DataSourceLoadError","dataSourceRights","readOnly","hasDeleteRights","navigateBack","missingRightsMessage","DataSourceMissingRightsMessage","DataSourcePluginConfigPage","page","DataSourcePluginSettings","props","loader","template","prevProps","element","DataSourcePluginState","PluginStateInfo","hasTitle","AlertSuccessMessage","title","exploreUrl","dataSourceId","onDashboardLinkClicked","canExploreDataSources","Link","alertVariants","isAlertVariant","str","getAlertVariant","status","DataSourceTestingStatus","testingStatus","severity","message","detailsMessage","detailsVerboseMessage","EditDataSource","dataSourceSettings","onUpdate","name","onOptionsChange","ds","EditDataSourceView","hasDataSource","extensions","allowedPluginIds","extensionPointId","DataSourcePluginContextProvider","extension","Component","jsonData","EditDataSourceActions","useDataSourceInfo","dataSourceInfo","info","alertingEnabled","DataSourceTitle","DataSourceTabPage","dataSourceHeader","EditDataSourcePage","PluginsErrorsInfo","filterByPluginType","errors","List","PluginSignatureBadge","mapPluginErrorCodeToSignatureStatus","code","DataSourceTypeCard","onClick","dataSourcePlugin","isPhantom","isClickable","learnMoreLink","learnMoreLinkTarget","DataSourceTypeCardList","dataSourcePlugins","onClickDataSourceType","DataSourceCategories","categories","moreDataSourcesLink","NewDataSource","filteredDataSources","isLoadingDatasourcePlugins","dataSourceCategories","onAddDataSource","onSetSearchQuery","NewDataSourceView","FilterInput","NewDataSourcePage","RedirectToAddNewConnection","search","Connections","isAddNewConnectionPageOverridden"],"sourceRoot":""}