fix: use search v2 component for traces data source & minor improvements to search v2 component (#7404)

This commit is contained in:
Shaheer Kochai 2025-03-26 22:30:54 +04:30 committed by GitHub
parent 7a58bc58c9
commit d7a6607a25
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 35 additions and 11 deletions

View File

@ -453,7 +453,7 @@ export const Query = memo(function Query({
</Col> </Col>
)} )}
<Col flex="1" className="qb-search-container"> <Col flex="1" className="qb-search-container">
{query.dataSource === DataSource.LOGS ? ( {[DataSource.LOGS, DataSource.TRACES].includes(query.dataSource) ? (
<QueryBuilderSearchV2 <QueryBuilderSearchV2
query={query} query={query}
onChange={handleChangeTagFilters} onChange={handleChangeTagFilters}

View File

@ -2,6 +2,7 @@
import './QueryBuilderSearchV2.styles.scss'; import './QueryBuilderSearchV2.styles.scss';
import { Typography } from 'antd'; import { Typography } from 'antd';
import cx from 'classnames';
import { import {
ArrowDown, ArrowDown,
ArrowUp, ArrowUp,
@ -25,6 +26,7 @@ interface ICustomDropdownProps {
exampleQueries: TagFilter[]; exampleQueries: TagFilter[];
onChange: (value: TagFilter) => void; onChange: (value: TagFilter) => void;
currentFilterItem?: ITag; currentFilterItem?: ITag;
isLogsDataSource: boolean;
} }
export default function QueryBuilderSearchDropdown( export default function QueryBuilderSearchDropdown(
@ -38,11 +40,14 @@ export default function QueryBuilderSearchDropdown(
exampleQueries, exampleQueries,
options, options,
onChange, onChange,
isLogsDataSource,
} = props; } = props;
const userOs = getUserOperatingSystem(); const userOs = getUserOperatingSystem();
return ( return (
<> <>
<div className="content"> <div
className={cx('content', { 'non-logs-data-source': !isLogsDataSource })}
>
{!currentFilterItem?.key ? ( {!currentFilterItem?.key ? (
<div className="suggested-filters">Suggested Filters</div> <div className="suggested-filters">Suggested Filters</div>
) : !currentFilterItem?.op ? ( ) : !currentFilterItem?.op ? (

View File

@ -11,6 +11,11 @@
.rc-virtual-list-holder { .rc-virtual-list-holder {
height: 115px; height: 115px;
} }
&.non-logs-data-source {
.rc-virtual-list-holder {
height: 256px;
}
}
} }
} }

View File

@ -689,12 +689,29 @@ function QueryBuilderSearchV2(
})), })),
); );
} else { } else {
setDropdownOptions( setDropdownOptions([
data?.payload?.attributeKeys?.map((key) => ({ // Add user typed option if it doesn't exist in the payload
...(!isEmpty(tagKey) &&
!data?.payload?.attributeKeys?.some((val) => isEqual(val.key, tagKey))
? [
{
label: tagKey,
value: {
key: tagKey,
dataType: DataTypes.EMPTY,
type: '',
isColumn: false,
isJSON: false,
},
},
]
: []),
// Map existing attribute keys from payload
...(data?.payload?.attributeKeys?.map((key) => ({
label: key.key, label: key.key,
value: key, value: key,
})) || [], })) || []),
); ]);
} }
} }
if (currentState === DropdownState.OPERATOR) { if (currentState === DropdownState.OPERATOR) {
@ -964,6 +981,7 @@ function QueryBuilderSearchV2(
exampleQueries={suggestionsData?.payload?.example_queries || []} exampleQueries={suggestionsData?.payload?.example_queries || []}
tags={tags} tags={tags}
currentFilterItem={currentFilterItem} currentFilterItem={currentFilterItem}
isLogsDataSource={isLogsDataSource}
/> />
)} )}
> >

View File

@ -170,11 +170,7 @@ export const useOptions = (
(option, index, self) => (option, index, self) =>
index === index ===
self.findIndex( self.findIndex(
(o) => (o) => o.label === option.label && o.value === option.value, // to remove duplicate & empty options from list
// to remove duplicate & empty options from list
o.label === option.label &&
o.value === option.value &&
o.dataType?.toLowerCase() === option.dataType?.toLowerCase(), // handle case sensitivity
) && option.value !== '', ) && option.value !== '',
) || [] ) || []
).map((option) => { ).map((option) => {