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/queryBuilder/useQueryBuilder'; // ** Constants import { memo, useEffect, useMemo } from 'react'; // ** Components import { Formula, Query } from './components'; // ** Types import { QueryBuilderProps } from './QueryBuilder.interfaces'; // ** Styles import { ActionsWrapperStyled } from './QueryBuilder.styled'; export const QueryBuilder = memo(function QueryBuilder({ config, panelType: newPanelType, actions, }: QueryBuilderProps): JSX.Element { const { currentQuery, addNewBuilderQuery, addNewFormula, handleSetConfig, panelType, initialDataSource, } = useQueryBuilder(); const currentDataSource = useMemo( () => (config && config.queryVariant === 'static' && config.initialDataSource) || null, [config], ); useEffect(() => { if (currentDataSource !== initialDataSource || newPanelType !== panelType) { handleSetConfig(newPanelType, currentDataSource); } }, [ handleSetConfig, panelType, initialDataSource, currentDataSource, newPanelType, ]); const isDisabledQueryButton = useMemo( () => currentQuery.builder.queryData.length >= MAX_QUERIES, [currentQuery], ); const isDisabledFormulaButton = useMemo( () => currentQuery.builder.queryFormulas.length >= MAX_FORMULAS, [currentQuery], ); const isAvailableToDisableQuery = useMemo( () => currentQuery.builder.queryData.length > 0 || currentQuery.builder.queryFormulas.length > 0, [currentQuery], ); return ( {currentQuery.builder.queryData.map((query, index) => ( ))} {currentQuery.builder.queryFormulas.map((formula, index) => ( ))} {actions} ); });