mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-19 00:17:00 +00:00
chore: fixed minor styles + minor ux fix
This commit is contained in:
parent
9c489ebc84
commit
b574fee2d4
@ -183,7 +183,7 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
|
|
||||||
margin-left: 32px;
|
margin-left: 26px;
|
||||||
padding-bottom: 16px;
|
padding-bottom: 16px;
|
||||||
padding-left: 8px;
|
padding-left: 8px;
|
||||||
|
|
||||||
@ -199,8 +199,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.formula-container {
|
.formula-container {
|
||||||
margin-left: 82px;
|
padding: 8px;
|
||||||
padding: 4px 0px;
|
margin-left: 74px;
|
||||||
|
|
||||||
.ant-col {
|
.ant-col {
|
||||||
&::before {
|
&::before {
|
||||||
@ -335,6 +335,12 @@
|
|||||||
);
|
);
|
||||||
left: 15px;
|
left: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.has-trace-operator {
|
||||||
|
&::before {
|
||||||
|
height: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.formula-name {
|
.formula-name {
|
||||||
@ -351,7 +357,7 @@
|
|||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
content: '';
|
content: '';
|
||||||
height: 65px;
|
height: 128px;
|
||||||
content: '';
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
|||||||
@ -2,20 +2,15 @@ import './QueryBuilderV2.styles.scss';
|
|||||||
|
|
||||||
import { OPERATORS, PANEL_TYPES } from 'constants/queryBuilder';
|
import { OPERATORS, PANEL_TYPES } from 'constants/queryBuilder';
|
||||||
import { Formula } from 'container/QueryBuilder/components/Formula';
|
import { Formula } from 'container/QueryBuilder/components/Formula';
|
||||||
import {
|
import { QueryBuilderProps } from 'container/QueryBuilder/QueryBuilder.interfaces';
|
||||||
QueryBuilderProps,
|
|
||||||
TraceView,
|
|
||||||
} from 'container/QueryBuilder/QueryBuilder.interfaces';
|
|
||||||
import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder';
|
import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder';
|
||||||
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
import { memo, useEffect, useMemo, useRef } from 'react';
|
||||||
import { DataSource } from 'types/common/queryBuilder';
|
import { DataSource } from 'types/common/queryBuilder';
|
||||||
|
|
||||||
import { QueryBuilderV2Provider } from './QueryBuilderV2Context';
|
import { QueryBuilderV2Provider } from './QueryBuilderV2Context';
|
||||||
import QueryFooter from './QueryV2/QueryFooter/QueryFooter';
|
import QueryFooter from './QueryV2/QueryFooter/QueryFooter';
|
||||||
import { QueryV2 } from './QueryV2/QueryV2';
|
import { QueryV2 } from './QueryV2/QueryV2';
|
||||||
import TraceOperator from './QueryV2/TraceOperator/TraceOperator';
|
import TraceOperator from './QueryV2/TraceOperator/TraceOperator';
|
||||||
import SignozRadioGroup from 'components/SignozRadioGroup/SignozRadioGroup';
|
|
||||||
import { ChartNoAxesGantt, DraftingCompass } from 'lucide-react';
|
|
||||||
import { IBuilderTraceOperator } from 'types/api/queryBuilder/queryBuilderData';
|
import { IBuilderTraceOperator } from 'types/api/queryBuilder/queryBuilderData';
|
||||||
|
|
||||||
export const QueryBuilderV2 = memo(function QueryBuilderV2({
|
export const QueryBuilderV2 = memo(function QueryBuilderV2({
|
||||||
@ -25,38 +20,20 @@ export const QueryBuilderV2 = memo(function QueryBuilderV2({
|
|||||||
queryComponents,
|
queryComponents,
|
||||||
isListViewPanel = false,
|
isListViewPanel = false,
|
||||||
showOnlyWhereClause = false,
|
showOnlyWhereClause = false,
|
||||||
showTraceViewSelector = false,
|
showTraceOperator = false,
|
||||||
version,
|
version,
|
||||||
onChangeTraceView,
|
|
||||||
}: QueryBuilderProps): JSX.Element {
|
}: QueryBuilderProps): JSX.Element {
|
||||||
const {
|
const {
|
||||||
currentQuery,
|
currentQuery,
|
||||||
addNewBuilderQuery,
|
addNewBuilderQuery,
|
||||||
addNewFormula,
|
addNewFormula,
|
||||||
handleSetConfig,
|
handleSetConfig,
|
||||||
|
addTraceOperator,
|
||||||
panelType,
|
panelType,
|
||||||
initialDataSource,
|
initialDataSource,
|
||||||
} = useQueryBuilder();
|
} = useQueryBuilder();
|
||||||
|
|
||||||
const containerRef = useRef(null);
|
const containerRef = useRef(null);
|
||||||
const [selectedTraceView, setSelectedTraceView] = useState<TraceView>(
|
|
||||||
TraceView.SPANS,
|
|
||||||
);
|
|
||||||
|
|
||||||
const traceViewOptions: { label: string; value: TraceView }[] = useMemo(() => {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
label: 'Spans',
|
|
||||||
value: TraceView.SPANS,
|
|
||||||
icon: <ChartNoAxesGantt size={14} />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Traces',
|
|
||||||
value: TraceView.TRACES,
|
|
||||||
icon: <DraftingCompass size={14} />,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const currentDataSource = useMemo(
|
const currentDataSource = useMemo(
|
||||||
() =>
|
() =>
|
||||||
@ -124,62 +101,49 @@ export const QueryBuilderV2 = memo(function QueryBuilderV2({
|
|||||||
listViewTracesFilterConfigs,
|
listViewTracesFilterConfigs,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const handleChangeTraceView = useCallback(
|
|
||||||
(value: TraceView) => {
|
|
||||||
setSelectedTraceView(value);
|
|
||||||
if (
|
|
||||||
currentDataSource === DataSource.TRACES &&
|
|
||||||
typeof onChangeTraceView === 'function'
|
|
||||||
) {
|
|
||||||
onChangeTraceView(value);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
[onChangeTraceView, currentDataSource],
|
|
||||||
);
|
|
||||||
|
|
||||||
const shouldShowTraceOperator = useMemo(() => {
|
|
||||||
return (
|
|
||||||
currentDataSource === DataSource.TRACES &&
|
|
||||||
(!isListViewPanel ? selectedTraceView === TraceView.TRACES : true)
|
|
||||||
);
|
|
||||||
}, [currentDataSource, isListViewPanel, selectedTraceView]);
|
|
||||||
|
|
||||||
const shouldShowTraceViewSelector = useMemo(() => {
|
|
||||||
return currentDataSource === DataSource.TRACES && showTraceViewSelector;
|
|
||||||
}, [currentDataSource, showTraceViewSelector]);
|
|
||||||
|
|
||||||
const showFormula = useMemo(() => {
|
|
||||||
if (currentDataSource === DataSource.TRACES) {
|
|
||||||
return !isListViewPanel && selectedTraceView === TraceView.SPANS;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}, [isListViewPanel, selectedTraceView, currentDataSource]);
|
|
||||||
|
|
||||||
const traceOperator = useMemo((): IBuilderTraceOperator | undefined => {
|
const traceOperator = useMemo((): IBuilderTraceOperator | undefined => {
|
||||||
if (currentQuery.builder.queryTraceOperator.length > 0) {
|
if (
|
||||||
return currentQuery.builder.queryTraceOperator[0] || {};
|
currentQuery.builder.queryTraceOperator &&
|
||||||
|
currentQuery.builder.queryTraceOperator.length > 0
|
||||||
|
) {
|
||||||
|
return currentQuery.builder.queryTraceOperator[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return undefined;
|
return undefined;
|
||||||
}, [currentQuery.builder.queryTraceOperator]);
|
}, [currentQuery.builder.queryTraceOperator]);
|
||||||
|
|
||||||
|
const shouldShowTraceOperator = useMemo(() => {
|
||||||
|
return (
|
||||||
|
showTraceOperator &&
|
||||||
|
currentDataSource === DataSource.TRACES &&
|
||||||
|
Boolean(traceOperator)
|
||||||
|
);
|
||||||
|
}, [currentDataSource, isListViewPanel, showTraceOperator, traceOperator]);
|
||||||
|
|
||||||
|
const shouldShowFooter = useMemo(() => {
|
||||||
|
return (
|
||||||
|
(!showOnlyWhereClause && !isListViewPanel) ||
|
||||||
|
(currentDataSource === DataSource.TRACES && showTraceOperator)
|
||||||
|
);
|
||||||
|
}, [
|
||||||
|
isListViewPanel,
|
||||||
|
showTraceOperator,
|
||||||
|
showOnlyWhereClause,
|
||||||
|
currentDataSource,
|
||||||
|
]);
|
||||||
|
|
||||||
|
const showFormula = useMemo(() => {
|
||||||
|
if (currentDataSource === DataSource.TRACES) {
|
||||||
|
return !isListViewPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}, [isListViewPanel, currentDataSource]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<QueryBuilderV2Provider>
|
<QueryBuilderV2Provider>
|
||||||
<div className="query-builder-v2">
|
<div className="query-builder-v2">
|
||||||
<div className="qb-content-container">
|
<div className="qb-content-container">
|
||||||
{shouldShowTraceViewSelector && (
|
|
||||||
<div className="qb-trace-view-selector-container">
|
|
||||||
<SignozRadioGroup
|
|
||||||
value={selectedTraceView}
|
|
||||||
options={traceViewOptions}
|
|
||||||
onChange={(e): void => {
|
|
||||||
handleChangeTraceView(e.target.value);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{isListViewPanel && currentDataSource !== DataSource.TRACES && (
|
{isListViewPanel && currentDataSource !== DataSource.TRACES && (
|
||||||
<QueryV2
|
<QueryV2
|
||||||
ref={containerRef}
|
ref={containerRef}
|
||||||
@ -239,12 +203,13 @@ export const QueryBuilderV2 = memo(function QueryBuilderV2({
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{((!showOnlyWhereClause && !isListViewPanel) ||
|
{shouldShowFooter && (
|
||||||
shouldShowTraceOperator) && (
|
|
||||||
<QueryFooter
|
<QueryFooter
|
||||||
showFormula={showFormula}
|
showAddFormula={showFormula}
|
||||||
addNewBuilderQuery={addNewBuilderQuery}
|
addNewBuilderQuery={addNewBuilderQuery}
|
||||||
addNewFormula={addNewFormula}
|
addNewFormula={addNewFormula}
|
||||||
|
addTraceOperator={addTraceOperator}
|
||||||
|
showAddTraceOperator={!shouldShowTraceOperator}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
@ -4,11 +4,15 @@ import { Plus, Sigma } from 'lucide-react';
|
|||||||
export default function QueryFooter({
|
export default function QueryFooter({
|
||||||
addNewBuilderQuery,
|
addNewBuilderQuery,
|
||||||
addNewFormula,
|
addNewFormula,
|
||||||
showFormula = true,
|
addTraceOperator,
|
||||||
|
showAddFormula = true,
|
||||||
|
showAddTraceOperator = false,
|
||||||
}: {
|
}: {
|
||||||
addNewBuilderQuery: () => void;
|
addNewBuilderQuery: () => void;
|
||||||
addNewFormula: () => void;
|
addNewFormula: () => void;
|
||||||
showFormula?: boolean;
|
addTraceOperator?: () => void;
|
||||||
|
showAddTraceOperator: boolean;
|
||||||
|
showAddFormula?: boolean;
|
||||||
}): JSX.Element {
|
}): JSX.Element {
|
||||||
return (
|
return (
|
||||||
<div className="qb-footer">
|
<div className="qb-footer">
|
||||||
@ -24,7 +28,7 @@ export default function QueryFooter({
|
|||||||
</Tooltip>
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{showFormula && (
|
{showAddFormula && (
|
||||||
<div className="qb-add-formula">
|
<div className="qb-add-formula">
|
||||||
<Tooltip
|
<Tooltip
|
||||||
title={
|
title={
|
||||||
@ -52,6 +56,34 @@ export default function QueryFooter({
|
|||||||
</Tooltip>
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
{showAddTraceOperator && (
|
||||||
|
<div className="qb-add-formula">
|
||||||
|
<Tooltip
|
||||||
|
title={
|
||||||
|
<div style={{ textAlign: 'center' }}>
|
||||||
|
Add Trace Matching
|
||||||
|
<Typography.Link
|
||||||
|
href="https://signoz.io/docs/userguide/query-builder-v5/#multi-query-analysis-advanced-comparisons"
|
||||||
|
target="_blank"
|
||||||
|
style={{ textDecoration: 'underline' }}
|
||||||
|
>
|
||||||
|
{' '}
|
||||||
|
<br />
|
||||||
|
Learn more
|
||||||
|
</Typography.Link>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<Button
|
||||||
|
className="add-formula-button periscope-btn secondary"
|
||||||
|
icon={<Sigma size={16} />}
|
||||||
|
onClick={() => addTraceOperator?.()}
|
||||||
|
>
|
||||||
|
Add Trace Matching
|
||||||
|
</Button>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -114,6 +114,7 @@ export const QueryV2 = memo(function QueryV2({
|
|||||||
<div className="query-actions-container">
|
<div className="query-actions-container">
|
||||||
<div className="query-actions-left-container">
|
<div className="query-actions-left-container">
|
||||||
<QBEntityOptions
|
<QBEntityOptions
|
||||||
|
hasTraceOperator={showTraceOperator}
|
||||||
isMetricsDataSource={dataSource === DataSource.METRICS}
|
isMetricsDataSource={dataSource === DataSource.METRICS}
|
||||||
showFunctions={
|
showFunctions={
|
||||||
(version && version === ENTITY_VERSION_V4) ||
|
(version && version === ENTITY_VERSION_V4) ||
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
.qb-trace-operator {
|
.qb-trace-operator {
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
|
||||||
&.non-list-view {
|
&.non-list-view {
|
||||||
padding-left: 40px;
|
padding-left: 40px;
|
||||||
@ -60,6 +62,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&-container {
|
&-container {
|
||||||
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
|
|||||||
@ -13,6 +13,8 @@ import {
|
|||||||
import QueryAddOns from '../QueryAddOns/QueryAddOns';
|
import QueryAddOns from '../QueryAddOns/QueryAddOns';
|
||||||
import QueryAggregation from '../QueryAggregation/QueryAggregation';
|
import QueryAggregation from '../QueryAggregation/QueryAggregation';
|
||||||
import { useTraceOperatorOperations } from 'hooks/queryBuilder/userTraceOperatorOperations';
|
import { useTraceOperatorOperations } from 'hooks/queryBuilder/userTraceOperatorOperations';
|
||||||
|
import { Button, Tooltip } from 'antd';
|
||||||
|
import { Trash2 } from 'lucide-react';
|
||||||
|
|
||||||
export default function TraceOperator({
|
export default function TraceOperator({
|
||||||
traceOperator,
|
traceOperator,
|
||||||
@ -21,7 +23,7 @@ export default function TraceOperator({
|
|||||||
traceOperator: IBuilderTraceOperator | undefined;
|
traceOperator: IBuilderTraceOperator | undefined;
|
||||||
isListViewPanel?: boolean;
|
isListViewPanel?: boolean;
|
||||||
}): JSX.Element {
|
}): JSX.Element {
|
||||||
const { panelType, currentQuery } = useQueryBuilder();
|
const { panelType, currentQuery, removeTraceOperator } = useQueryBuilder();
|
||||||
const { handleChangeTraceOperatorData } = useTraceOperatorOperations({
|
const { handleChangeTraceOperatorData } = useTraceOperatorOperations({
|
||||||
index: 0,
|
index: 0,
|
||||||
query: traceOperator,
|
query: traceOperator,
|
||||||
@ -112,6 +114,13 @@ export default function TraceOperator({
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
{true && (
|
||||||
|
<Tooltip title="Remove Trace Operator" placement="topLeft">
|
||||||
|
<Button className="periscope-btn ghost" onClick={removeTraceOperator}>
|
||||||
|
<Trash2 size={14} />
|
||||||
|
</Button>
|
||||||
|
</Tooltip>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,6 +39,7 @@ interface QBEntityOptionsProps {
|
|||||||
showCloneOption?: boolean;
|
showCloneOption?: boolean;
|
||||||
isListViewPanel?: boolean;
|
isListViewPanel?: boolean;
|
||||||
index?: number;
|
index?: number;
|
||||||
|
hasTraceOperator?: boolean;
|
||||||
queryVariant?: 'dropdown' | 'static';
|
queryVariant?: 'dropdown' | 'static';
|
||||||
onChangeDataSource?: (value: DataSource) => void;
|
onChangeDataSource?: (value: DataSource) => void;
|
||||||
}
|
}
|
||||||
@ -61,6 +62,7 @@ export default function QBEntityOptions({
|
|||||||
onCloneQuery,
|
onCloneQuery,
|
||||||
index,
|
index,
|
||||||
queryVariant,
|
queryVariant,
|
||||||
|
hasTraceOperator = false,
|
||||||
onChangeDataSource,
|
onChangeDataSource,
|
||||||
}: QBEntityOptionsProps): JSX.Element {
|
}: QBEntityOptionsProps): JSX.Element {
|
||||||
const handleCloneEntity = (): void => {
|
const handleCloneEntity = (): void => {
|
||||||
@ -115,6 +117,7 @@ export default function QBEntityOptions({
|
|||||||
className={cx(
|
className={cx(
|
||||||
'periscope-btn',
|
'periscope-btn',
|
||||||
entityType === 'query' ? 'query-name' : 'formula-name',
|
entityType === 'query' ? 'query-name' : 'formula-name',
|
||||||
|
hasTraceOperator && 'has-trace-operator',
|
||||||
isLogsExplorerPage && lastUsedQuery === index ? 'sync-btn' : '',
|
isLogsExplorerPage && lastUsedQuery === index ? 'sync-btn' : '',
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
|||||||
@ -2,21 +2,12 @@ import { QueryBuilderV2 } from 'components/QueryBuilderV2/QueryBuilderV2';
|
|||||||
import { PANEL_TYPES } from 'constants/queryBuilder';
|
import { PANEL_TYPES } from 'constants/queryBuilder';
|
||||||
import ExplorerOrderBy from 'container/ExplorerOrderBy';
|
import ExplorerOrderBy from 'container/ExplorerOrderBy';
|
||||||
import { OrderByFilterProps } from 'container/QueryBuilder/filters/OrderByFilter/OrderByFilter.interfaces';
|
import { OrderByFilterProps } from 'container/QueryBuilder/filters/OrderByFilter/OrderByFilter.interfaces';
|
||||||
import {
|
import { QueryBuilderProps } from 'container/QueryBuilder/QueryBuilder.interfaces';
|
||||||
QueryBuilderProps,
|
|
||||||
TraceView,
|
|
||||||
} from 'container/QueryBuilder/QueryBuilder.interfaces';
|
|
||||||
import { useGetPanelTypesQueryParam } from 'hooks/queryBuilder/useGetPanelTypesQueryParam';
|
import { useGetPanelTypesQueryParam } from 'hooks/queryBuilder/useGetPanelTypesQueryParam';
|
||||||
import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder';
|
|
||||||
import { memo, useCallback, useMemo } from 'react';
|
import { memo, useCallback, useMemo } from 'react';
|
||||||
import { DataSource } from 'types/common/queryBuilder';
|
import { DataSource } from 'types/common/queryBuilder';
|
||||||
|
|
||||||
function QuerySection({
|
function QuerySection(): JSX.Element {
|
||||||
onChangeTraceView = (): void => {},
|
|
||||||
}: {
|
|
||||||
onChangeTraceView?: (view: TraceView) => void;
|
|
||||||
}): JSX.Element {
|
|
||||||
const { removeAllQueryBuilderEntities } = useQueryBuilder();
|
|
||||||
const panelTypes = useGetPanelTypesQueryParam(PANEL_TYPES.LIST);
|
const panelTypes = useGetPanelTypesQueryParam(PANEL_TYPES.LIST);
|
||||||
|
|
||||||
const filterConfigs: QueryBuilderProps['filterConfigs'] = useMemo(() => {
|
const filterConfigs: QueryBuilderProps['filterConfigs'] = useMemo(() => {
|
||||||
@ -51,29 +42,10 @@ function QuerySection({
|
|||||||
[panelTypes],
|
[panelTypes],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleChangeTraceView = useCallback(
|
|
||||||
(view: TraceView) => {
|
|
||||||
if (isListViewPanel) {
|
|
||||||
removeAllQueryBuilderEntities('queryFormulas');
|
|
||||||
} else {
|
|
||||||
if (view === TraceView.SPANS) {
|
|
||||||
removeAllQueryBuilderEntities('queryTraceOperator');
|
|
||||||
} else {
|
|
||||||
removeAllQueryBuilderEntities('queryFormulas');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onChangeTraceView(view);
|
|
||||||
},
|
|
||||||
[onChangeTraceView, isListViewPanel, removeAllQueryBuilderEntities],
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<QueryBuilderV2
|
<QueryBuilderV2
|
||||||
isListViewPanel={
|
isListViewPanel={isListViewPanel}
|
||||||
panelTypes === PANEL_TYPES.LIST || panelTypes === PANEL_TYPES.TRACE
|
showTraceOperator={true}
|
||||||
}
|
|
||||||
showTraceViewSelector
|
|
||||||
onChangeTraceView={handleChangeTraceView}
|
|
||||||
config={{ initialDataSource: DataSource.TRACES, queryVariant: 'static' }}
|
config={{ initialDataSource: DataSource.TRACES, queryVariant: 'static' }}
|
||||||
queryComponents={queryComponents}
|
queryComponents={queryComponents}
|
||||||
panelType={panelTypes}
|
panelType={panelTypes}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user