mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-14 17:15:55 +08:00
feat(provider): add base query types (#2501)
Co-authored-by: Palash Gupta <palashgdev@gmail.com>
This commit is contained in:
parent
fe640aae39
commit
167050b4b5
@ -0,0 +1,9 @@
|
|||||||
|
import {
|
||||||
|
IBuilderFormula,
|
||||||
|
IBuilderQuery,
|
||||||
|
} from 'types/api/queryBuilder/queryBuilderData';
|
||||||
|
|
||||||
|
export type QueryBuilderProps = {
|
||||||
|
queryData: IBuilderQuery[];
|
||||||
|
queryFormula: IBuilderFormula[];
|
||||||
|
};
|
23
frontend/src/container/QueryBuilder/QueryBuilder.tsx
Normal file
23
frontend/src/container/QueryBuilder/QueryBuilder.tsx
Normal 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>;
|
||||||
|
}
|
1
frontend/src/container/QueryBuilder/index.ts
Normal file
1
frontend/src/container/QueryBuilder/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export { QueryBuilder } from './QueryBuilder';
|
@ -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 (
|
||||||
|
22
frontend/src/types/api/queryBuilder/queryBuilderData.ts
Normal file
22
frontend/src/types/api/queryBuilder/queryBuilderData.ts
Normal 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;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user