feat(provider): add query builder provider (#2496)

Co-authored-by: Yevhen Shevchenko <yevhen@signoz.io>
Co-authored-by: Palash Gupta <palashgdev@gmail.com>
This commit is contained in:
Yevhen Shevchenko 2023-03-24 13:39:31 +02:00 committed by GitHub
parent 1e7280136a
commit c617784d7c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 114 additions and 19 deletions

View File

@ -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 (
<ConfigProvider theme={themeConfig}>
<NotificationProvider>
<Router history={history}>
<PrivateRoute>
<AppLayout>
<Suspense fallback={<Spinner size="large" tip="Loading..." />}>
<Switch>
{routes.map(({ path, component, exact }) => (
<Route
key={`${path}`}
exact={exact}
path={path}
component={component}
/>
))}
<QueryBuilderProvider>
<Router history={history}>
<PrivateRoute>
<AppLayout>
<Suspense fallback={<Spinner size="large" tip="Loading..." />}>
<Switch>
{routes.map(({ path, component, exact }) => (
<Route
key={`${path}`}
exact={exact}
path={path}
component={component}
/>
))}
<Route path="*" component={NotFound} />
</Switch>
</Suspense>
</AppLayout>
</PrivateRoute>
</Router>
<Route path="*" component={NotFound} />
</Switch>
</Suspense>
</AppLayout>
</PrivateRoute>
</Router>
</QueryBuilderProvider>
</NotificationProvider>
</ConfigProvider>
);

View File

@ -68,6 +68,8 @@ function MetricsBuilder({
});
}, [metricName]);
// TODO: rewrite to Form component from antd
return (
<QueryHeader
name={queryData.name}

View File

@ -0,0 +1,9 @@
import {
QueryBuilderContext,
QueryBuilderContextType,
} from 'providers/QueryBuilder';
import { useContext } from 'react';
export function useQueryBuilder(): QueryBuilderContextType {
return useContext(QueryBuilderContext);
}

View File

@ -0,0 +1,81 @@
import React, {
createContext,
PropsWithChildren,
useCallback,
useMemo,
useState,
} from 'react';
import { useParams } from 'react-router-dom';
// ** TODO: temporary types for context, fix it during development
export type QueryBuilderContextType = {
queryBuilderData: unknown[];
resetQueryBuilderData: () => void;
handleSetQueryBuilderData: () => void;
};
export const QueryBuilderContext = createContext<QueryBuilderContextType>({
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<unknown[]>([
{
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 (
<QueryBuilderContext.Provider value={contextValues}>
{children}
</QueryBuilderContext.Provider>
);
}