From c617784d7cb94e2d1db60f11dc88c70d856b3142 Mon Sep 17 00:00:00 2001 From: Yevhen Shevchenko <90138953+yeshev@users.noreply.github.com> Date: Fri, 24 Mar 2023 13:39:31 +0200 Subject: [PATCH] feat(provider): add query builder provider (#2496) Co-authored-by: Yevhen Shevchenko Co-authored-by: Palash Gupta --- frontend/src/AppRoutes/index.tsx | 41 +++++----- .../QueryBuilder/queryBuilder/query.tsx | 2 + frontend/src/hooks/useQueryBuilder.ts | 9 +++ frontend/src/providers/QueryBuilder.tsx | 81 +++++++++++++++++++ 4 files changed, 114 insertions(+), 19 deletions(-) create mode 100644 frontend/src/hooks/useQueryBuilder.ts create mode 100644 frontend/src/providers/QueryBuilder.tsx diff --git a/frontend/src/AppRoutes/index.tsx b/frontend/src/AppRoutes/index.tsx index a5641c35da..ec7db3f0aa 100644 --- a/frontend/src/AppRoutes/index.tsx +++ b/frontend/src/AppRoutes/index.tsx @@ -5,6 +5,7 @@ import AppLayout from 'container/AppLayout'; import { useThemeConfig } from 'hooks/useDarkMode'; import { NotificationProvider } from 'hooks/useNotifications'; import history from 'lib/history'; +import { QueryBuilderProvider } from 'providers/QueryBuilder'; import React, { Suspense } from 'react'; import { Route, Router, Switch } from 'react-router-dom'; @@ -17,26 +18,28 @@ function App(): JSX.Element { return ( - - - - }> - - {routes.map(({ path, component, exact }) => ( - - ))} + + + + + }> + + {routes.map(({ path, component, exact }) => ( + + ))} - - - - - - + + + + + + + ); diff --git a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/queryBuilder/query.tsx b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/queryBuilder/query.tsx index 8f171baa3c..7b9681f89e 100644 --- a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/queryBuilder/query.tsx +++ b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/queryBuilder/query.tsx @@ -68,6 +68,8 @@ function MetricsBuilder({ }); }, [metricName]); + // TODO: rewrite to Form component from antd + return ( void; + handleSetQueryBuilderData: () => void; +}; + +export const QueryBuilderContext = createContext({ + queryBuilderData: [ + { + queryData: '', + queryFormulas: '', + }, + ], + resetQueryBuilderData: () => {}, + handleSetQueryBuilderData: () => {}, +}); + +const initialQueryBuilderData: unknown[] = [ + { + 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 + + // ** TODO: Find out the types of the queryBuilder state + // ** TODO: Check exist version of the functionality + const [queryBuilderData, setQueryBuilderData] = useState([ + { + queryData: '', + queryFormulas: '', + }, + ]); + + const resetQueryBuilderData = useCallback((): void => { + setQueryBuilderData(initialQueryBuilderData); + }, []); + + const handleSetQueryBuilderData = useCallback((): 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, + }), + [queryBuilderData, resetQueryBuilderData, handleSetQueryBuilderData], + ); + + return ( + + {children} + + ); +}