From cb293ecf1ce3aabea7994d736089904946015fe0 Mon Sep 17 00:00:00 2001 From: Ivan Ortega Alba Date: Wed, 10 May 2023 20:56:00 +0200 Subject: [PATCH] Improve DS Advance Picker to give user context about the built in DS and CTA (#68203) * Add description to DS built-in list of items * Open the new DS view in a new tab --- .../picker/AddNewDataSourceButton.tsx | 1 + .../picker/BuiltInDataSourceList.tsx | 40 +++++++++++++++++++ .../components/picker/DataSourceCard.tsx | 5 ++- .../components/picker/DataSourceModal.tsx | 21 ++++++---- 4 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 public/app/features/datasources/components/picker/BuiltInDataSourceList.tsx diff --git a/public/app/features/datasources/components/picker/AddNewDataSourceButton.tsx b/public/app/features/datasources/components/picker/AddNewDataSourceButton.tsx index 256ce1ef89e..002d2887514 100644 --- a/public/app/features/datasources/components/picker/AddNewDataSourceButton.tsx +++ b/public/app/features/datasources/components/picker/AddNewDataSourceButton.tsx @@ -25,6 +25,7 @@ export function AddNewDataSourceButton({ variant, onClick }: AddNewDataSourceBut disabled={!hasCreateRights} tooltip={!hasCreateRights ? 'You do not have permission to configure new data sources' : undefined} onClick={onClick} + target="_blank" > Configure a new data source diff --git a/public/app/features/datasources/components/picker/BuiltInDataSourceList.tsx b/public/app/features/datasources/components/picker/BuiltInDataSourceList.tsx new file mode 100644 index 00000000000..f6b61c65027 --- /dev/null +++ b/public/app/features/datasources/components/picker/BuiltInDataSourceList.tsx @@ -0,0 +1,40 @@ +import React from 'react'; + +import { DataSourceInstanceSettings } from '@grafana/data'; +import { DataSourceRef } from '@grafana/schema'; + +import { useDatasources } from '../../hooks'; + +import { DataSourceCard } from './DataSourceCard'; + +const CUSTOM_DESCRIPTIONS_BY_UID: Record = { + grafana: 'Discover visualizations using mock data', + '-- Mixed --': 'Use multiple data sources', + '-- Dashboard --': 'Reuse query results from other visualizations', +}; + +interface BuiltInDataSourceListProps { + className?: string; + current: DataSourceRef | string | null | undefined; + onChange: (ds: DataSourceInstanceSettings) => void; +} + +export function BuiltInDataSourceList({ className, current, onChange }: BuiltInDataSourceListProps) { + const grafanaDataSources = useDatasources({ mixed: true, dashboard: true, filter: (ds) => !!ds.meta.builtIn }); + + return ( +
+ {grafanaDataSources.map((ds) => { + return ( + onChange(ds)} + /> + ); + })} +
+ ); +} diff --git a/public/app/features/datasources/components/picker/DataSourceCard.tsx b/public/app/features/datasources/components/picker/DataSourceCard.tsx index ca21443c054..aecbba54eb5 100644 --- a/public/app/features/datasources/components/picker/DataSourceCard.tsx +++ b/public/app/features/datasources/components/picker/DataSourceCard.tsx @@ -8,9 +8,10 @@ interface DataSourceCardProps { ds: DataSourceInstanceSettings; onClick: () => void; selected: boolean; + description?: string; } -export function DataSourceCard({ ds, onClick, selected, ...htmlProps }: DataSourceCardProps) { +export function DataSourceCard({ ds, onClick, selected, description, ...htmlProps }: DataSourceCardProps) { const styles = useStyles2(getStyles); return ( @@ -24,7 +25,7 @@ export function DataSourceCard({ ds, onClick, selected, ...htmlProps }: DataSour
{ds.name} | - {ds.meta.name} + {description || ds.meta.name}
diff --git a/public/app/features/datasources/components/picker/DataSourceModal.tsx b/public/app/features/datasources/components/picker/DataSourceModal.tsx index fb41b1492f0..e11c81e7750 100644 --- a/public/app/features/datasources/components/picker/DataSourceModal.tsx +++ b/public/app/features/datasources/components/picker/DataSourceModal.tsx @@ -17,6 +17,7 @@ import { import * as DFImport from 'app/features/dataframe-import'; import { AddNewDataSourceButton } from './AddNewDataSourceButton'; +import { BuiltInDataSourceList } from './BuiltInDataSourceList'; import { DataSourceList } from './DataSourceList'; import { matchDataSourceWithSearch } from './utils'; @@ -116,11 +117,8 @@ export function DataSourceModal({
- !!ds.meta.builtIn} - dashboard - mixed onChange={onChangeDataSource} current={current} /> @@ -147,7 +145,8 @@ export function DataSourceModal({ )}
-
+
+ Open a new tab and configure a data source { @@ -228,11 +227,19 @@ function getDataSourceModalStyles(theme: GrafanaTheme2) { builtInDataSourceList: css` margin-bottom: ${theme.spacing(4)}; `, - dsCTAs: css` + newDSSection: css` display: flex; flex-direction: row; width: 100%; - justify-content: flex-end; + justify-content: space-between; + align-items: center; + `, + newDSDescription: css` + flex: 1 0; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + color: ${theme.colors.text.secondary}; ${theme.breakpoints.down('md')} { padding-bottom: ${theme.spacing(3)};