diff --git a/package.json b/package.json index dde41b0fe6e..118d5477b93 100644 --- a/package.json +++ b/package.json @@ -254,7 +254,7 @@ "@grafana/aws-sdk": "0.0.44", "@grafana/data": "workspace:*", "@grafana/e2e-selectors": "workspace:*", - "@grafana/experimental": "1.1.0", + "@grafana/experimental": "1.4.2", "@grafana/faro-core": "1.0.2", "@grafana/faro-web-sdk": "1.0.2", "@grafana/google-sdk": "0.1.1", diff --git a/public/app/core/components/ConfigDescriptionLink.tsx b/public/app/core/components/ConfigDescriptionLink.tsx new file mode 100644 index 00000000000..c2cecc84cd9 --- /dev/null +++ b/public/app/core/components/ConfigDescriptionLink.tsx @@ -0,0 +1,47 @@ +import { css } from '@emotion/css'; +import React from 'react'; + +import { GrafanaTheme2 } from '@grafana/data'; +import { useStyles2 } from '@grafana/ui'; + +type Props = { + description: string; + suffix: string; + feature: string; +}; + +export function ConfigDescriptionLink(props: Props) { + const { description, suffix, feature } = props; + const text = `Learn more about ${feature}`; + const styles = useStyles2(getStyles); + + return ( + + {description} + + {text} + + + ); +} + +const getStyles = (theme: GrafanaTheme2) => { + return { + container: css({ + color: theme.colors.text.secondary, + a: css({ + color: theme.colors.text.link, + textDecoration: 'underline', + marginLeft: '5px', + '&:hover': { + textDecoration: 'none', + }, + }), + }), + }; +}; diff --git a/public/app/core/components/Divider.tsx b/public/app/core/components/Divider.tsx new file mode 100644 index 00000000000..7e062fd6165 --- /dev/null +++ b/public/app/core/components/Divider.tsx @@ -0,0 +1,25 @@ +import { css } from '@emotion/css'; +import React from 'react'; + +import { GrafanaTheme2 } from '@grafana/data'; +import { useStyles2 } from '@grafana/ui'; + +export const Divider = ({ hideLine = false }) => { + const styles = useStyles2(getStyles); + + if (hideLine) { + return
; + } + + return
; +}; + +const getStyles = (theme: GrafanaTheme2) => ({ + divider: css` + margin: ${theme.spacing(4, 0)}; + `, + dividerHideLine: css` + border: none; + margin: ${theme.spacing(3, 0)}; + `, +}); diff --git a/public/app/core/components/DocsLinkButton.tsx b/public/app/core/components/DocsLinkButton.tsx deleted file mode 100644 index fb476deea10..00000000000 --- a/public/app/core/components/DocsLinkButton.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; - -import { LinkButton } from '@grafana/ui'; - -type Props = { - hrefSuffix: string; -}; - -export function DocsLinkButton(props: Props) { - const { hrefSuffix } = props; - const tooltip = 'Learn more in the Grafana docs'; - - return ( - - ); -} diff --git a/public/app/core/components/NodeGraphSettings.tsx b/public/app/core/components/NodeGraphSettings.tsx index 459beda1aeb..deaf1e62467 100644 --- a/public/app/core/components/NodeGraphSettings.tsx +++ b/public/app/core/components/NodeGraphSettings.tsx @@ -7,9 +7,10 @@ import { GrafanaTheme2, updateDatasourcePluginJsonDataOption, } from '@grafana/data'; +import { ConfigSubSection } from '@grafana/experimental'; import { InlineField, InlineFieldRow, InlineSwitch, useStyles2 } from '@grafana/ui'; -import { DocsLinkButton } from './DocsLinkButton'; +import { ConfigDescriptionLink } from './ConfigDescriptionLink'; export interface NodeGraphOptions { enabled?: boolean; @@ -26,13 +27,6 @@ export function NodeGraphSettings({ options, onOptionsChange }: Props) { return (
-

Node graph

- -
- {`Show or hide the node graph visualization`} - -
- { + return ( + + } + > + + + ); +}; + const getStyles = (theme: GrafanaTheme2) => ({ infoText: css` label: infoText; diff --git a/public/app/core/components/TraceToLogs/TraceToLogsSettings.tsx b/public/app/core/components/TraceToLogs/TraceToLogsSettings.tsx index 68b9c9011c1..775bae9adc8 100644 --- a/public/app/core/components/TraceToLogs/TraceToLogsSettings.tsx +++ b/public/app/core/components/TraceToLogs/TraceToLogsSettings.tsx @@ -1,16 +1,11 @@ import { css } from '@emotion/css'; import React, { useCallback, useMemo } from 'react'; -import { - DataSourceJsonData, - DataSourceInstanceSettings, - DataSourcePluginOptionsEditorProps, - GrafanaTheme2, -} from '@grafana/data'; +import { DataSourceJsonData, DataSourceInstanceSettings, DataSourcePluginOptionsEditorProps } from '@grafana/data'; +import { ConfigSection } from '@grafana/experimental'; import { DataSourcePicker } from '@grafana/runtime'; -import { InlineField, InlineFieldRow, Input, useStyles2, InlineSwitch } from '@grafana/ui'; - -import { DocsLinkButton } from '../DocsLinkButton'; +import { InlineField, InlineFieldRow, Input, InlineSwitch } from '@grafana/ui'; +import { ConfigDescriptionLink } from 'app/core/components/ConfigDescriptionLink'; import { TagMappingInput } from './TagMappingInput'; @@ -71,7 +66,6 @@ export function getTraceToLogsOptions(data?: TraceToLogsData): TraceToLogsOption interface Props extends DataSourcePluginOptionsEditorProps {} export function TraceToLogsSettings({ options, onOptionsChange }: Props) { - const styles = useStyles2(getStyles); const supportedDataSourceTypes = [ 'loki', 'elasticsearch', @@ -108,13 +102,6 @@ export function TraceToLogsSettings({ options, onOptionsChange }: Props) { return (
-

Trace to logs

- -
- Navigate from a trace span to the selected data source's logs - -
- ({ - infoText: css` - padding-bottom: ${theme.spacing(2)}; - color: ${theme.colors.text.secondary}; - `, -}); +export const TraceToLogsSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => { + return ( + + } + isCollapsible={true} + isInitiallyOpen={true} + > + + + ); +}; diff --git a/public/app/core/components/TraceToMetrics/TraceToMetricsSettings.tsx b/public/app/core/components/TraceToMetrics/TraceToMetricsSettings.tsx index 2e6a12662e1..52bf8a8c6c0 100644 --- a/public/app/core/components/TraceToMetrics/TraceToMetricsSettings.tsx +++ b/public/app/core/components/TraceToMetrics/TraceToMetricsSettings.tsx @@ -7,10 +7,11 @@ import { GrafanaTheme2, updateDatasourcePluginJsonDataOption, } from '@grafana/data'; +import { ConfigSection } from '@grafana/experimental'; import { DataSourcePicker } from '@grafana/runtime'; import { Button, InlineField, InlineFieldRow, Input, useStyles2 } from '@grafana/ui'; -import { DocsLinkButton } from '../DocsLinkButton'; +import { ConfigDescriptionLink } from '../ConfigDescriptionLink'; import { TagMappingInput } from '../TraceToLogs/TagMappingInput'; export interface TraceToMetricsOptions { @@ -37,13 +38,6 @@ export function TraceToMetricsSettings({ options, onOptionsChange }: Props) { return (
-

Trace to metrics

- -
- Navigate from a trace span to the selected data source's metrics - -
- { + return ( + + } + isCollapsible={true} + isInitiallyOpen={true} + > + + + ); +}; + const getStyles = (theme: GrafanaTheme2) => ({ infoText: css` padding-bottom: ${theme.spacing(2)}; @@ -226,6 +239,8 @@ const getStyles = (theme: GrafanaTheme2) => ({ align-items: baseline; `, queryRow: css` + label: queryRow; display: flex; + flex-flow: wrap; `, }); diff --git a/public/app/features/explore/TraceView/components/settings/SpanBarSettings.tsx b/public/app/features/explore/TraceView/components/settings/SpanBarSettings.tsx index a59323f27ad..4ce04b8e60b 100644 --- a/public/app/features/explore/TraceView/components/settings/SpanBarSettings.tsx +++ b/public/app/features/explore/TraceView/components/settings/SpanBarSettings.tsx @@ -8,8 +8,9 @@ import { toOption, updateDatasourcePluginJsonDataOption, } from '@grafana/data'; +import { ConfigSubSection } from '@grafana/experimental'; import { InlineField, InlineFieldRow, Input, Select, useStyles2 } from '@grafana/ui'; -import { DocsLinkButton } from 'app/core/components/DocsLinkButton'; +import { ConfigDescriptionLink } from 'app/core/components/ConfigDescriptionLink'; export interface SpanBarOptions { type?: string; @@ -32,13 +33,6 @@ export default function SpanBarSettings({ options, onOptionsChange }: Props) { return (
-

Span bar

- -
- Add additional info next to the service and operation on a span bar row in the trace view - -
-