import { PlusOutlined } from '@ant-design/icons'; import { Button, Col, Row } from 'antd'; import { MAX_FORMULAS, MAX_QUERIES } from 'constants/queryBuilder'; // ** Hooks import { useQueryBuilder } from 'hooks/useQueryBuilder'; // ** Constants import React, { memo, useEffect, useMemo } from 'react'; // ** Components import { Formula, Query } from './components'; // ** Types import { QueryBuilderProps } from './QueryBuilder.interfaces'; // ** Styles export const QueryBuilder = memo(function QueryBuilder({ config, panelType, }: QueryBuilderProps): JSX.Element { const { queryBuilderData, setupInitialDataSource, addNewQuery, addNewFormula, } = useQueryBuilder(); useEffect(() => { if (config && config.queryVariant === 'static') { setupInitialDataSource(config.initialDataSource); } return (): void => { setupInitialDataSource(null); }; }, [config, setupInitialDataSource]); const isDisabledQueryButton = useMemo( () => queryBuilderData.queryData.length >= MAX_QUERIES, [queryBuilderData], ); const isDisabledFormulaButton = useMemo( () => queryBuilderData.queryFormulas.length >= MAX_FORMULAS, [queryBuilderData], ); return ( {queryBuilderData.queryData.map((query, index) => ( 1} queryVariant={config?.queryVariant || 'dropdown'} query={query} panelType={panelType} /> ))} {queryBuilderData.queryFormulas.map((formula, index) => ( ))} ); });