import './QueryBuilderV2.styles.scss'; import { OPERATORS, PANEL_TYPES } from 'constants/queryBuilder'; import { Formula } from 'container/QueryBuilder/components/Formula'; import { QueryBuilderProps } from 'container/QueryBuilder/QueryBuilder.interfaces'; import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder'; import { memo, useEffect, useMemo, useRef } from 'react'; import { DataSource } from 'types/common/queryBuilder'; import { QueryBuilderV2Provider } from './QueryBuilderV2Context'; import QueryFooter from './QueryV2/QueryFooter/QueryFooter'; import { QueryV2 } from './QueryV2/QueryV2'; export const QueryBuilderV2 = memo(function QueryBuilderV2({ config, panelType: newPanelType, filterConfigs = {}, queryComponents, isListViewPanel = false, showOnlyWhereClause = false, version, }: QueryBuilderProps): JSX.Element { const { currentQuery, addNewBuilderQuery, addNewFormula, handleSetConfig, panelType, initialDataSource, } = useQueryBuilder(); const containerRef = useRef(null); const currentDataSource = useMemo( () => (config && config.queryVariant === 'static' && config.initialDataSource) || null, [config], ); useEffect(() => { if (currentDataSource !== initialDataSource || newPanelType !== panelType) { if (newPanelType === PANEL_TYPES.BAR) { handleSetConfig(PANEL_TYPES.BAR, DataSource.METRICS); return; } handleSetConfig(newPanelType, currentDataSource); } }, [ handleSetConfig, panelType, initialDataSource, currentDataSource, newPanelType, ]); const listViewLogFilterConfigs: QueryBuilderProps['filterConfigs'] = useMemo(() => { const config: QueryBuilderProps['filterConfigs'] = { stepInterval: { isHidden: true, isDisabled: true }, having: { isHidden: true, isDisabled: true }, filters: { customKey: 'body', customOp: OPERATORS.CONTAINS, }, }; return config; }, []); const listViewTracesFilterConfigs: QueryBuilderProps['filterConfigs'] = useMemo(() => { const config: QueryBuilderProps['filterConfigs'] = { stepInterval: { isHidden: true, isDisabled: true }, having: { isHidden: true, isDisabled: true }, limit: { isHidden: true, isDisabled: true }, filters: { customKey: 'body', customOp: OPERATORS.CONTAINS, }, }; return config; }, []); const queryFilterConfigs = useMemo(() => { if (isListViewPanel) { return currentQuery.builder.queryData[0].dataSource === DataSource.TRACES ? listViewTracesFilterConfigs : listViewLogFilterConfigs; } return filterConfigs; }, [ isListViewPanel, filterConfigs, currentQuery.builder.queryData, listViewLogFilterConfigs, listViewTracesFilterConfigs, ]); return (
{isListViewPanel && ( )} {!isListViewPanel && currentQuery.builder.queryData.map((query, index) => ( ))} {!showOnlyWhereClause && currentQuery.builder.queryFormulas.length > 0 && (
{currentQuery.builder.queryFormulas.map((formula, index) => { const query = currentQuery.builder.queryData[index] || currentQuery.builder.queryData[0]; return (
); })}
)} {!showOnlyWhereClause && !isListViewPanel && ( )}
{!showOnlyWhereClause && !isListViewPanel && (
{currentQuery.builder.queryData.map((query) => (
{query.queryName}
))} {currentQuery.builder.queryFormulas.map((formula) => (
{formula.queryName}
))}
)}
); });