import { Dropdown } from 'antd'; import cx from 'classnames'; import { ENTITY_VERSION_V4, ENTITY_VERSION_V5 } from 'constants/app'; import { PANEL_TYPES } from 'constants/queryBuilder'; import QBEntityOptions from 'container/QueryBuilder/components/QBEntityOptions/QBEntityOptions'; import { QueryProps } from 'container/QueryBuilder/components/Query/Query.interfaces'; import SpanScopeSelector from 'container/QueryBuilder/filters/QueryBuilderSearchV2/SpanScopeSelector'; import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder'; import { useQueryOperations } from 'hooks/queryBuilder/useQueryBuilderOperations'; import { Copy, Ellipsis, Trash } from 'lucide-react'; import { memo, useCallback, useMemo, useState } from 'react'; import { IBuilderQuery } from 'types/api/queryBuilder/queryBuilderData'; import { HandleChangeQueryDataV5 } from 'types/common/operations.types'; import { DataSource } from 'types/common/queryBuilder'; import MetricsAggregateSection from './MerticsAggregateSection/MetricsAggregateSection'; import { MetricsSelect } from './MetricsSelect/MetricsSelect'; import QueryAddOns from './QueryAddOns/QueryAddOns'; import QueryAggregation from './QueryAggregation/QueryAggregation'; import QuerySearch from './QuerySearch/QuerySearch'; export const QueryV2 = memo(function QueryV2({ ref, index, queryVariant, query, filterConfigs, isListViewPanel = false, version, showOnlyWhereClause = false, signalSource = '', }: QueryProps & { ref: React.RefObject }): JSX.Element { const { cloneQuery, panelType } = useQueryBuilder(); const showFunctions = query?.functions?.length > 0; const { dataSource } = query; const [isCollapsed, setIsCollapsed] = useState(false); const { handleChangeQueryData, handleDeleteQuery, handleQueryFunctionsUpdates, handleChangeDataSource, } = useQueryOperations({ index, query, filterConfigs, isListViewPanel, entityVersion: version, }); const handleToggleDisableQuery = useCallback(() => { handleChangeQueryData('disabled', !query.disabled); }, [handleChangeQueryData, query]); const handleToggleCollapsQuery = (): void => { setIsCollapsed(!isCollapsed); }; const handleCloneEntity = (): void => { cloneQuery('query', query); }; const showReduceTo = useMemo( () => dataSource === DataSource.METRICS && (panelType === PANEL_TYPES.TABLE || panelType === PANEL_TYPES.PIE || panelType === PANEL_TYPES.VALUE), [dataSource, panelType], ); const showSpanScopeSelector = useMemo(() => dataSource === DataSource.TRACES, [ dataSource, ]); const handleChangeAggregateEvery = useCallback( (value: IBuilderQuery['stepInterval']) => { handleChangeQueryData('stepInterval', value); }, [handleChangeQueryData], ); const handleSearchChange = useCallback( (value: string) => { (handleChangeQueryData as HandleChangeQueryDataV5)('filter', { expression: value, }); }, [handleChangeQueryData], ); const handleChangeAggregation = useCallback( (value: string) => { (handleChangeQueryData as HandleChangeQueryDataV5)('aggregations', [ { expression: value, }, ]); }, [handleChangeQueryData], ); return (
{!showOnlyWhereClause && (
{!isListViewPanel && ( , onClick: handleCloneEntity, }, { label: 'Delete', key: 'delete-query', icon: , onClick: handleDeleteQuery, }, ], }} placement="bottomRight" > )}
)} {!isCollapsed && (
{dataSource === DataSource.METRICS && (
)}
{showSpanScopeSelector && (
in
)}
{!showOnlyWhereClause && !isListViewPanel && dataSource !== DataSource.METRICS && ( )} {!showOnlyWhereClause && dataSource === DataSource.METRICS && ( )} {!showOnlyWhereClause && ( )}
)}
); });