diff --git a/frontend/src/container/QueryBuilder/QueryBuilder.interfaces.ts b/frontend/src/container/QueryBuilder/QueryBuilder.interfaces.ts new file mode 100644 index 0000000000..eb945aa6fb --- /dev/null +++ b/frontend/src/container/QueryBuilder/QueryBuilder.interfaces.ts @@ -0,0 +1,9 @@ +import { + IBuilderFormula, + IBuilderQuery, +} from 'types/api/queryBuilder/queryBuilderData'; + +export type QueryBuilderProps = { + queryData: IBuilderQuery[]; + queryFormula: IBuilderFormula[]; +}; diff --git a/frontend/src/container/QueryBuilder/QueryBuilder.tsx b/frontend/src/container/QueryBuilder/QueryBuilder.tsx new file mode 100644 index 0000000000..c732a27d76 --- /dev/null +++ b/frontend/src/container/QueryBuilder/QueryBuilder.tsx @@ -0,0 +1,23 @@ +// ** Hooks +import { useQueryBuilder } from 'hooks/useQueryBuilder'; +import React from 'react'; + +// ** Types +import { QueryBuilderProps } from './QueryBuilder.interfaces'; + +// TODO: temporary eslint disable while variable isn't used +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export function QueryBuilder(props: QueryBuilderProps): JSX.Element { + // TODO: temporary doesn't use + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { queryBuilderData } = useQueryBuilder(); + + // Here we can use Form from antd library and fill context data or edit + // Connect form with adding or removing items from the list + + // Here will be map of query queryBuilderData.queryData and queryBuilderData.queryFormulas components + // Each component can be part of antd Form list where we can add or remove items + // Also need decide to make a copy of queryData for working with form or not and after it set the full new list with formulas or queries to the context + // With button to add him + return
null
; +} diff --git a/frontend/src/container/QueryBuilder/index.ts b/frontend/src/container/QueryBuilder/index.ts new file mode 100644 index 0000000000..77060426f7 --- /dev/null +++ b/frontend/src/container/QueryBuilder/index.ts @@ -0,0 +1 @@ +export { QueryBuilder } from './QueryBuilder'; diff --git a/frontend/src/providers/QueryBuilder.tsx b/frontend/src/providers/QueryBuilder.tsx index e63b31108e..d50b5d7eba 100644 --- a/frontend/src/providers/QueryBuilder.tsx +++ b/frontend/src/providers/QueryBuilder.tsx @@ -5,72 +5,84 @@ import React, { useMemo, useState, } from 'react'; -import { useParams } from 'react-router-dom'; +// ** Types +// TODO: Rename Types on the Reusable type for any source +import { + IBuilderFormula, + IBuilderQuery, +} from 'types/api/queryBuilder/queryBuilderData'; + +export type QueryBuilderData = { + queryData: IBuilderQuery[]; + queryFormulas: IBuilderFormula[]; +}; // ** TODO: temporary types for context, fix it during development export type QueryBuilderContextType = { - queryBuilderData: unknown[]; + queryBuilderData: QueryBuilderData; resetQueryBuilderData: () => void; - handleSetQueryBuilderData: () => void; + handleSetQueryData: (index: number, queryData: IBuilderQuery) => void; + handleSetFormulaData: (index: number, formulaData: IBuilderFormula) => void; }; export const QueryBuilderContext = createContext({ - queryBuilderData: [ - { - queryData: '', - queryFormulas: '', - }, - ], + queryBuilderData: { queryData: [], queryFormulas: [] }, resetQueryBuilderData: () => {}, - handleSetQueryBuilderData: () => {}, + handleSetQueryData: () => {}, + handleSetFormulaData: () => {}, }); -const initialQueryBuilderData: unknown[] = [ - { - queryData: '', - queryFormulas: '', - }, -]; +const initialQueryBuilderData: QueryBuilderData = { + queryData: [], + queryFormulas: [], +}; export function QueryBuilderProvider({ children, }: PropsWithChildren): JSX.Element { // ** TODO: get queryId from url for getting data for query builder // ** TODO: type the params which will be used for request of the data for query builder - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const params = useParams(); - // ** TODO: create state for queryBuilder - // ** TODO: create state for queryFormulas + const [queryBuilderData, setQueryBuilderData] = useState({ + queryData: [], + queryFormulas: [], + }); - // ** TODO: Find out the types of the queryBuilder state - // ** TODO: Check exist version of the functionality - const [queryBuilderData, setQueryBuilderData] = useState([ - { - queryData: '', - queryFormulas: '', - }, - ]); + // ** TODO: Also in the future need to add AddFormula and AddQuery and remove them. const resetQueryBuilderData = useCallback((): void => { setQueryBuilderData(initialQueryBuilderData); }, []); - const handleSetQueryBuilderData = useCallback((): void => {}, []); + const handleSetQueryData = useCallback( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (index: number, queryData: IBuilderQuery): void => {}, + [], + ); + const handleSetFormulaData = useCallback( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (index: number, formulaData: IBuilderFormula): void => {}, + [], + ); + // ** TODO: Discuss with Palash how the state of the queryBuilder and queryFormulas // ** TODO: should be filled from url - // ** TODO: create set function for state - // ** TODO: put these values and setter to the context value const contextValues: QueryBuilderContextType = useMemo( () => ({ queryBuilderData, resetQueryBuilderData, - handleSetQueryBuilderData, + handleSetQueryData, + handleSetFormulaData, }), - [queryBuilderData, resetQueryBuilderData, handleSetQueryBuilderData], + [ + queryBuilderData, + resetQueryBuilderData, + handleSetQueryData, + handleSetFormulaData, + ], ); return ( diff --git a/frontend/src/types/api/queryBuilder/queryBuilderData.ts b/frontend/src/types/api/queryBuilder/queryBuilderData.ts new file mode 100644 index 0000000000..dbfa82ce53 --- /dev/null +++ b/frontend/src/types/api/queryBuilder/queryBuilderData.ts @@ -0,0 +1,22 @@ +import { EAggregateOperator, EReduceOperator } from 'types/common/dashboard'; + +import { IQueryBuilderTagFilters } from '../dashboard/getAll'; + +export interface IBuilderQuery { + // TODO: add another list of operator depended from data source + aggregateOperator: EAggregateOperator; + disabled: boolean; + label: string; + legend: string; + attribute: string; + groupBy: string[]; + tagFilters: IQueryBuilderTagFilters; + reduceTo?: EReduceOperator; +} + +export interface IBuilderFormula { + expression: string; + disabled: boolean; + label: string; + legend: string; +}