import { Col, Input, Row } from 'antd'; // ** Constants import { PANEL_TYPES } from 'constants/queryBuilder'; // ** Components import { AdditionalFiltersToggler, DataSourceDropdown, FilterLabel, ListItemWrapper, ListMarker, } from 'container/QueryBuilder/components'; import { AggregatorFilter, GroupByFilter, HavingFilter, OperatorsSelect, ReduceToFilter, } from 'container/QueryBuilder/filters'; import AggregateEveryFilter from 'container/QueryBuilder/filters/AggregateEveryFilter'; import LimitFilter from 'container/QueryBuilder/filters/LimitFilter/LimitFilter'; import { OrderByFilter } from 'container/QueryBuilder/filters/OrderByFilter'; import QueryBuilderSearch from 'container/QueryBuilder/filters/QueryBuilderSearch'; import { useQueryOperations } from 'hooks/queryBuilder/useQueryOperations'; // ** Hooks import React, { ChangeEvent, memo, ReactNode, useCallback } from 'react'; import { IBuilderQuery } from 'types/api/queryBuilder/queryBuilderData'; import { transformToUpperCase } from 'utils/transformToUpperCase'; // ** Types import { QueryProps } from './Query.interfaces'; export const Query = memo(function Query({ index, isAvailableToDisable, queryVariant, query, panelType, }: QueryProps): JSX.Element { const { operators, isMetricsDataSource, listOfAdditionalFilters, handleChangeAggregatorAttribute, handleChangeDataSource, handleChangeQueryData, handleChangeOperator, handleDeleteQuery, } = useQueryOperations({ index, query, panelType }); const handleChangeAggregateEvery = useCallback( (value: IBuilderQuery['stepInterval']) => { handleChangeQueryData('stepInterval', value); }, [handleChangeQueryData], ); const handleChangeLimit = useCallback( (value: IBuilderQuery['limit']) => { handleChangeQueryData('limit', value); }, [handleChangeQueryData], ); const handleChangeHavingFilter = useCallback( (value: IBuilderQuery['having']) => { handleChangeQueryData('having', value); }, [handleChangeQueryData], ); const handleChangeOrderByKeys = useCallback( (value: IBuilderQuery['orderBy']) => { handleChangeQueryData('orderBy', value); }, [handleChangeQueryData], ); const handleToggleDisableQuery = useCallback(() => { handleChangeQueryData('disabled', !query.disabled); }, [handleChangeQueryData, query]); const handleChangeTagFilters = useCallback( (value: IBuilderQuery['tagFilters']) => { handleChangeQueryData('tagFilters', value); }, [handleChangeQueryData], ); const handleChangeReduceTo = useCallback( (value: IBuilderQuery['reduceTo']) => { handleChangeQueryData('reduceTo', value); }, [handleChangeQueryData], ); const handleChangeGroupByKeys = useCallback( (value: IBuilderQuery['groupBy']) => { handleChangeQueryData('groupBy', value); }, [handleChangeQueryData], ); const handleChangeQueryLegend = useCallback( (event: ChangeEvent) => { handleChangeQueryData('legend', event.target.value); }, [handleChangeQueryData], ); const renderAdditionalFilters = useCallback((): ReactNode => { switch (panelType) { case PANEL_TYPES.TIME_SERIES: { return ( <> {!isMetricsDataSource && ( )} {!isMetricsDataSource && ( )} ); } case PANEL_TYPES.VALUE: { return ( <> ); } default: { return null; } } }, [ panelType, query, isMetricsDataSource, handleChangeAggregateEvery, handleChangeHavingFilter, handleChangeLimit, handleChangeOrderByKeys, ]); return ( {queryVariant === 'dropdown' ? ( ) : ( )} {isMetricsDataSource && ( )} {panelType === PANEL_TYPES.VALUE ? ( ) : ( )} {renderAdditionalFilters()} ); });