mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 23:47:12 +00:00
* feat: metrics builder metrics name suggestion UX changes * feat: metrics builder metric name and single value selection * feat: code cleanup * feat: improved ts typings Co-authored-by: Srikanth Chekuri <srikanth.chekuri92@gmail.com>
96 lines
2.6 KiB
TypeScript
96 lines
2.6 KiB
TypeScript
import {
|
|
DeleteOutlined,
|
|
DownOutlined,
|
|
EyeFilled,
|
|
RightOutlined,
|
|
} from '@ant-design/icons';
|
|
import { Button, Row } from 'antd';
|
|
import MonacoEditor from 'components/Editor';
|
|
import React, { useState } from 'react';
|
|
import { useSelector } from 'react-redux';
|
|
import { AppState } from 'store/reducers';
|
|
import AppReducer from 'types/reducer/app';
|
|
|
|
import { QueryBuilderWrapper, QueryWrapper } from '../styles';
|
|
import { TQueryCategories } from '../types';
|
|
import PromQLQueryBuilder from './promQL/promQL';
|
|
import MetricsBuilder from './queryBuilder/query';
|
|
|
|
function QueryBuilder({
|
|
name,
|
|
onDelete,
|
|
queryCategory,
|
|
queryData,
|
|
updateQueryData,
|
|
}: QueryBuilderProps): JSX.Element {
|
|
const { isDarkMode } = useSelector<AppState, AppReducer>((state) => state.app);
|
|
const [hideFromUI, setHideFromUI] = useState<boolean>(false);
|
|
const handleHideFromUI = (): void => {
|
|
setHideFromUI(!hideFromUI);
|
|
};
|
|
const handleClickhouseQueryChange = (clickHouseQuery): void => {
|
|
if (clickHouseQuery !== null) {
|
|
queryData.clickHouseQuery = clickHouseQuery;
|
|
}
|
|
updateQueryData(queryData);
|
|
};
|
|
const handlePromQLQueryChange = ({ query, legend }): void => {
|
|
if (query) queryData.promQL.query = query;
|
|
if (legend) queryData.promQL.legend = legend;
|
|
|
|
updateQueryData(queryData);
|
|
};
|
|
|
|
return (
|
|
<QueryWrapper>
|
|
<Row style={{ justifyContent: 'space-between' }}>
|
|
<Row>
|
|
<Button type="ghost" icon={<EyeFilled />}>
|
|
{name}
|
|
</Button>
|
|
<Button
|
|
type="ghost"
|
|
icon={hideFromUI ? <RightOutlined /> : <DownOutlined />}
|
|
onClick={handleHideFromUI}
|
|
/>
|
|
</Row>
|
|
|
|
<Button type="ghost" danger icon={<DeleteOutlined />} onClick={onDelete} />
|
|
</Row>
|
|
{!hideFromUI && (
|
|
<QueryBuilderWrapper isDarkMode={isDarkMode}>
|
|
{queryCategory === 0 ? (
|
|
<MetricsBuilder
|
|
queryData={queryData}
|
|
updateQueryData={updateQueryData}
|
|
metricName={queryData.queryBuilder.metricName}
|
|
/>
|
|
) : queryCategory === 1 ? (
|
|
<MonacoEditor
|
|
language="sql"
|
|
theme="vs-dark"
|
|
height="200px"
|
|
onChange={handleClickhouseQueryChange}
|
|
value={queryData.clickHouseQuery}
|
|
// options={options}
|
|
/>
|
|
) : queryCategory === 2 ? (
|
|
<PromQLQueryBuilder
|
|
query={queryData.promQL.query}
|
|
onQueryChange={(value) => handlePromQLQueryChange({ query: value })}
|
|
legend={queryData.promQL.legend}
|
|
onLegendChange={(value) => handlePromQLQueryChange({ legend: value })}
|
|
/>
|
|
) : null}
|
|
</QueryBuilderWrapper>
|
|
)}
|
|
</QueryWrapper>
|
|
);
|
|
}
|
|
|
|
interface QueryBuilderProps {
|
|
queryCategory: TQueryCategories;
|
|
name: string;
|
|
}
|
|
export default QueryBuilder;
|