mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-13 21:06:00 +08:00
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:
parent
1e7280136a
commit
c617784d7c
@ -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>
|
||||
);
|
||||
|
@ -68,6 +68,8 @@ function MetricsBuilder({
|
||||
});
|
||||
}, [metricName]);
|
||||
|
||||
// TODO: rewrite to Form component from antd
|
||||
|
||||
return (
|
||||
<QueryHeader
|
||||
name={queryData.name}
|
||||
|
9
frontend/src/hooks/useQueryBuilder.ts
Normal file
9
frontend/src/hooks/useQueryBuilder.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import {
|
||||
QueryBuilderContext,
|
||||
QueryBuilderContextType,
|
||||
} from 'providers/QueryBuilder';
|
||||
import { useContext } from 'react';
|
||||
|
||||
export function useQueryBuilder(): QueryBuilderContextType {
|
||||
return useContext(QueryBuilderContext);
|
||||
}
|
81
frontend/src/providers/QueryBuilder.tsx
Normal file
81
frontend/src/providers/QueryBuilder.tsx
Normal 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>
|
||||
);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user