diff --git a/public/app/features/connections/hooks/useDataSourceSettingsNav.ts b/public/app/features/connections/hooks/useDataSourceSettingsNav.ts
index 72c4a09059a..707db68d9b7 100644
--- a/public/app/features/connections/hooks/useDataSourceSettingsNav.ts
+++ b/public/app/features/connections/hooks/useDataSourceSettingsNav.ts
@@ -52,6 +52,18 @@ export function useDataSourceSettingsNav(pageIdParam?: string) {
pageNav = getNavModel(navIndex, navIndexId, getDataSourceLoadingNav('settings'));
}
+ if (!datasource.uid) {
+ const node: NavModelItem = {
+ text: t('connections.use-data-source-settings-nav.node.subTitle.data-source-error', 'Data Source Error'),
+ icon: 'exclamation-triangle',
+ };
+
+ pageNav = {
+ node: node,
+ main: node,
+ };
+ }
+
if (plugin) {
pageNav = getNavModel(
navIndex,
@@ -64,8 +76,8 @@ export function useDataSourceSettingsNav(pageIdParam?: string) {
...pageNav.main,
dataSourcePluginName: datasourcePlugin?.name || plugin?.meta.name || '',
active: true,
- text: datasource.name,
- subTitle: `Type: ${dataSourceMeta.name}`,
+ text: datasource.name || '',
+ subTitle: dataSourceMeta.name ? `Type: ${dataSourceMeta.name}` : '',
children: (pageNav.main.children || []).map((navModelItem) => ({
...navModelItem,
url: navModelItem.url?.replace('datasources/edit/', '/connections/datasources/edit/'),
diff --git a/public/app/features/datasources/components/DataSourceLoadError.tsx b/public/app/features/datasources/components/DataSourceLoadError.tsx
index bbe41e93b69..10dee3f85b6 100644
--- a/public/app/features/datasources/components/DataSourceLoadError.tsx
+++ b/public/app/features/datasources/components/DataSourceLoadError.tsx
@@ -1,5 +1,5 @@
-import { Trans } from '@grafana/i18n';
-import { Button } from '@grafana/ui';
+import { t, Trans } from '@grafana/i18n';
+import { Button, EmptyState } from '@grafana/ui';
import { DataSourceRights } from '../types';
@@ -8,9 +8,10 @@ import { DataSourceReadOnlyMessage } from './DataSourceReadOnlyMessage';
export type Props = {
dataSourceRights: DataSourceRights;
onDelete: () => void;
+ notFound: boolean;
};
-export function DataSourceLoadError({ dataSourceRights, onDelete }: Props) {
+export function DataSourceLoadError({ dataSourceRights, onDelete, notFound }: Props) {
const { readOnly, hasDeleteRights } = dataSourceRights;
const canDelete = !readOnly && hasDeleteRights;
const navigateBack = () => window.history.back();
@@ -20,6 +21,12 @@ export function DataSourceLoadError({ dataSourceRights, onDelete }: Props) {
{readOnly && }
+ {notFound && (
+
+ )}
{canDelete && (