feat(provider): add base query types (#2501)

Co-authored-by: Palash Gupta <palashgdev@gmail.com>
This commit is contained in:
Yevhen Shevchenko 2023-03-27 11:34:06 +03:00 committed by GitHub
parent fe640aae39
commit 167050b4b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 100 additions and 33 deletions

View File

@ -0,0 +1,9 @@
import {
IBuilderFormula,
IBuilderQuery,
} from 'types/api/queryBuilder/queryBuilderData';
export type QueryBuilderProps = {
queryData: IBuilderQuery[];
queryFormula: IBuilderFormula[];
};

View File

@ -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 <div>null</div>;
}

View File

@ -0,0 +1 @@
export { QueryBuilder } from './QueryBuilder';

View File

@ -5,72 +5,84 @@ import React, {
useMemo, useMemo,
useState, useState,
} from 'react'; } 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 // ** TODO: temporary types for context, fix it during development
export type QueryBuilderContextType = { export type QueryBuilderContextType = {
queryBuilderData: unknown[]; queryBuilderData: QueryBuilderData;
resetQueryBuilderData: () => void; resetQueryBuilderData: () => void;
handleSetQueryBuilderData: () => void; handleSetQueryData: (index: number, queryData: IBuilderQuery) => void;
handleSetFormulaData: (index: number, formulaData: IBuilderFormula) => void;
}; };
export const QueryBuilderContext = createContext<QueryBuilderContextType>({ export const QueryBuilderContext = createContext<QueryBuilderContextType>({
queryBuilderData: [ queryBuilderData: { queryData: [], queryFormulas: [] },
{
queryData: '',
queryFormulas: '',
},
],
resetQueryBuilderData: () => {}, resetQueryBuilderData: () => {},
handleSetQueryBuilderData: () => {}, handleSetQueryData: () => {},
handleSetFormulaData: () => {},
}); });
const initialQueryBuilderData: unknown[] = [ const initialQueryBuilderData: QueryBuilderData = {
{ queryData: [],
queryData: '', queryFormulas: [],
queryFormulas: '', };
},
];
export function QueryBuilderProvider({ export function QueryBuilderProvider({
children, children,
}: PropsWithChildren): JSX.Element { }: PropsWithChildren): JSX.Element {
// ** TODO: get queryId from url for getting data for query builder // ** 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 // ** 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 const [queryBuilderData, setQueryBuilderData] = useState<QueryBuilderData>({
// ** TODO: create state for queryFormulas queryData: [],
queryFormulas: [],
});
// ** TODO: Find out the types of the queryBuilder state // ** TODO: Also in the future need to add AddFormula and AddQuery and remove them.
// ** TODO: Check exist version of the functionality
const [queryBuilderData, setQueryBuilderData] = useState<unknown[]>([
{
queryData: '',
queryFormulas: '',
},
]);
const resetQueryBuilderData = useCallback((): void => { const resetQueryBuilderData = useCallback((): void => {
setQueryBuilderData(initialQueryBuilderData); 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: Discuss with Palash how the state of the queryBuilder and queryFormulas
// ** TODO: should be filled from url // ** TODO: should be filled from url
// ** TODO: create set function for state
// ** TODO: put these values and setter to the context value // ** TODO: put these values and setter to the context value
const contextValues: QueryBuilderContextType = useMemo( const contextValues: QueryBuilderContextType = useMemo(
() => ({ () => ({
queryBuilderData, queryBuilderData,
resetQueryBuilderData, resetQueryBuilderData,
handleSetQueryBuilderData, handleSetQueryData,
handleSetFormulaData,
}), }),
[queryBuilderData, resetQueryBuilderData, handleSetQueryBuilderData], [
queryBuilderData,
resetQueryBuilderData,
handleSetQueryData,
handleSetFormulaData,
],
); );
return ( return (

View File

@ -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;
}