Amol Umbark a8c7237bbb
Alert UI with metrics builder (#1359)
* added more changes to query builder

* added types for composite queries

* (feat): added edit rules and create rules forms

* (feat): added chart preview for alert metric ui

* (feat): added threshold in chart, translations in alert form and a few fixes

* feat: added a link for alert name in list alerts page and source for each rule update

Co-authored-by: Pranshu Chittora <pranshu@signoz.io>
2022-07-14 13:23:15 +05:30

75 lines
2.0 KiB
TypeScript

import { PlusOutlined } from '@ant-design/icons';
import { PromQLQueryTemplate } from 'constants/dashboard';
import GetQueryName from 'lib/query/GetQueryName';
import React from 'react';
import { IPromQLQuery, Query } from 'types/api/dashboard/getAll';
import { WIDGET_PROMQL_QUERY_KEY_NAME } from '../../constants';
import { QueryButton } from '../../styles';
import { IHandleUpdatedQuery } from '../../types';
import PromQLQueryBuilder from './query';
import { IPromQLQueryHandleChange } from './types';
interface IPromQLQueryContainerProps {
queryData: Query;
updateQueryData: (args: IHandleUpdatedQuery) => void;
promQLQueries: IPromQLQuery[];
}
function PromQLQueryContainer({
queryData,
updateQueryData,
promQLQueries,
}: IPromQLQueryContainerProps): JSX.Element | null {
const handlePromQLQueryChange = ({
queryIndex,
query,
legend,
toggleDisable,
toggleDelete,
}: IPromQLQueryHandleChange): void => {
const allQueries = queryData[WIDGET_PROMQL_QUERY_KEY_NAME];
const currentIndexQuery = allQueries[queryIndex as number];
if (query !== undefined) currentIndexQuery.query = query;
if (legend !== undefined) currentIndexQuery.legend = legend;
if (toggleDisable) {
currentIndexQuery.disabled = !currentIndexQuery.disabled;
}
if (toggleDelete) {
allQueries.splice(queryIndex as number, 1);
}
updateQueryData({ updatedQuery: { ...queryData } });
};
const addQueryHandler = (): void => {
queryData[WIDGET_PROMQL_QUERY_KEY_NAME].push({
name: GetQueryName(queryData[WIDGET_PROMQL_QUERY_KEY_NAME]) || '',
...PromQLQueryTemplate,
});
updateQueryData({ updatedQuery: { ...queryData } });
};
if (!promQLQueries) {
return null;
}
return (
<>
{promQLQueries.map(
(q: IPromQLQuery, idx: number): JSX.Element => (
<PromQLQueryBuilder
key={q.name}
queryIndex={idx}
queryData={q}
handleQueryChange={handlePromQLQueryChange}
/>
),
)}
<QueryButton onClick={addQueryHandler} icon={<PlusOutlined />}>
Query
</QueryButton>
</>
);
}
export default PromQLQueryContainer;