diff --git a/public/app/features/datasources/components/DataSourceDefaultSwitch.tsx b/public/app/features/datasources/components/DataSourceDefaultSwitch.tsx index cae4d8036d7..a3a67648954 100644 --- a/public/app/features/datasources/components/DataSourceDefaultSwitch.tsx +++ b/public/app/features/datasources/components/DataSourceDefaultSwitch.tsx @@ -1,16 +1,19 @@ +import { css } from '@emotion/css'; import React, { useEffect, useState } from 'react'; -import { DataSourceSettings } from '@grafana/data'; -import { InlineSwitch } from '@grafana/ui'; +import { DataSourceSettings, GrafanaTheme2 } from '@grafana/data'; +import { InlineSwitch, Tooltip, useStyles2 } from '@grafana/ui'; interface Props { dataSource: DataSourceSettings; isDefault: boolean; + readOnly: boolean; onUpdate: (dataSource: DataSourceSettings) => Promise; } -export function DataSourceDefaultSwitch({ dataSource, isDefault, onUpdate }: Props) { +export function DataSourceDefaultSwitch({ dataSource, isDefault, readOnly, onUpdate }: Props) { const [initialDataSource, setInitialDataSource] = useState(dataSource); + const styles = useStyles2(getStyles); const handleDefaultDataSourceChange = async (checked: boolean) => { try { @@ -26,12 +29,47 @@ export function DataSourceDefaultSwitch({ dataSource, isDefault, onUpdate }: Pro setInitialDataSource(dataSource); }, [dataSource]); + if (readOnly) { + return ( + +
+ +
+
+ ); + } + return ( ) => handleDefaultDataSourceChange(evt.currentTarget.checked)} + className={styles.switch} + disabled={readOnly} /> ); } + +const getStyles = (theme: GrafanaTheme2) => { + return { + div: css({ + div: { + backgroundColor: 'transparent', + }, + }), + switch: css({ + padding: '0', + }), + }; +}; diff --git a/public/app/features/datasources/components/DataSourceTabPage.tsx b/public/app/features/datasources/components/DataSourceTabPage.tsx index dedad18043f..5b7d27ee5f4 100644 --- a/public/app/features/datasources/components/DataSourceTabPage.tsx +++ b/public/app/features/datasources/components/DataSourceTabPage.tsx @@ -21,6 +21,7 @@ export function DataSourceTabPage({ uid, pageId, navId }: Props) { dataSource: nav.dataSource, dataSourcePluginName: nav.main.dataSourcePluginName, isDefault: nav.dataSource.isDefault, + isReadOnly: nav.dataSource.readOnly, alertingSupported: nav.dataSourceHeader.alertingSupported, onUpdate: nav.dataSourceHeader.onUpdate, }); diff --git a/public/app/features/datasources/components/EditDataSourceTitle.tsx b/public/app/features/datasources/components/EditDataSourceTitle.tsx index 8a834f7bec0..19572e213bf 100644 --- a/public/app/features/datasources/components/EditDataSourceTitle.tsx +++ b/public/app/features/datasources/components/EditDataSourceTitle.tsx @@ -3,7 +3,7 @@ import React, { useEffect, useState } from 'react'; import { DataSourceSettings, GrafanaTheme2 } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; -import { IconButton, useStyles2, Input } from '@grafana/ui'; +import { IconButton, useStyles2, Input, Tooltip } from '@grafana/ui'; interface Props { dataSource: DataSourceSettings; @@ -48,14 +48,16 @@ export function EditDataSourceTitle({ dataSource, title, readOnly, onUpdate }: P

{name}

{!readOnly && ( - + + + )}
) : ( @@ -92,7 +94,7 @@ const getStyles = (theme: GrafanaTheme2) => { }), title: css({ margin: '0 0 0 0', - maxWidth: '500px', + maxWidth: '40vw', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', @@ -100,12 +102,14 @@ const getStyles = (theme: GrafanaTheme2) => { datasourceNameInput: css({ input: { fontSize: theme.typography.h1.fontSize, + width: '40vw', padding: '6px 8px', height: '40px', }, }), editIcon: css({ marginLeft: theme.spacing(1), + color: theme.colors.text.secondary, }), }; }; diff --git a/public/app/features/datasources/components/useDataSourceInfo.tsx b/public/app/features/datasources/components/useDataSourceInfo.tsx index 5c3764ffc8f..c3c45a29964 100644 --- a/public/app/features/datasources/components/useDataSourceInfo.tsx +++ b/public/app/features/datasources/components/useDataSourceInfo.tsx @@ -21,9 +21,9 @@ export const useDataSourceInfo = (dataSourceInfo: DataSourceInfo): PageInfoItem[ info.push({ label: ( - +
- Deault + Default
@@ -33,6 +33,7 @@ export const useDataSourceInfo = (dataSourceInfo: DataSourceInfo): PageInfoItem[ dataSource={dataSourceInfo.dataSource} isDefault={dataSourceInfo.isDefault} onUpdate={dataSourceInfo.onUpdate} + readOnly={dataSourceInfo.isReadOnly} > ), }); diff --git a/public/app/features/datasources/types.ts b/public/app/features/datasources/types.ts index 3be082aae25..bab09f553cc 100644 --- a/public/app/features/datasources/types.ts +++ b/public/app/features/datasources/types.ts @@ -21,6 +21,7 @@ export type DataSourceInfo = { dataSource: DataSourceSettings; dataSourcePluginName: string; isDefault: boolean; + isReadOnly: boolean; alertingSupported: boolean; onUpdate: (dataSource: DataSourceSettings) => Promise; };