mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-10 11:49:02 +08:00
feat: Limt filter for QB (#2561)
This commit is contained in:
parent
23081996c4
commit
0bc44c6fd9
@ -9,7 +9,6 @@ import {
|
|||||||
StyledIconOpen,
|
StyledIconOpen,
|
||||||
StyledInner,
|
StyledInner,
|
||||||
StyledLink,
|
StyledLink,
|
||||||
StyledWrapper,
|
|
||||||
} from './AdditionalFiltersToggler.styled';
|
} from './AdditionalFiltersToggler.styled';
|
||||||
|
|
||||||
export const AdditionalFiltersToggler = memo(function AdditionalFiltersToggler({
|
export const AdditionalFiltersToggler = memo(function AdditionalFiltersToggler({
|
||||||
@ -41,12 +40,12 @@ export const AdditionalFiltersToggler = memo(function AdditionalFiltersToggler({
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<StyledWrapper>
|
<div>
|
||||||
<StyledInner onClick={handleToggleOpenFilters}>
|
<StyledInner onClick={handleToggleOpenFilters}>
|
||||||
{isOpenedFilters ? <StyledIconClose /> : <StyledIconOpen />}
|
{isOpenedFilters ? <StyledIconClose /> : <StyledIconOpen />}
|
||||||
{!isOpenedFilters && <span>Add conditions for {filtersTexts}</span>}
|
{!isOpenedFilters && <span>Add conditions for {filtersTexts}</span>}
|
||||||
</StyledInner>
|
</StyledInner>
|
||||||
{isOpenedFilters && <Row>{children}</Row>}
|
{isOpenedFilters && <Row>{children}</Row>}
|
||||||
</StyledWrapper>
|
</div>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -19,6 +19,7 @@ import {
|
|||||||
OperatorsSelect,
|
OperatorsSelect,
|
||||||
ReduceToFilter,
|
ReduceToFilter,
|
||||||
} from 'container/QueryBuilder/filters';
|
} from 'container/QueryBuilder/filters';
|
||||||
|
import LimitFilter from 'container/QueryBuilder/filters/LimitFilter/LimitFilter';
|
||||||
import QueryBuilderSearch from 'container/QueryBuilder/filters/QueryBuilderSearch';
|
import QueryBuilderSearch from 'container/QueryBuilder/filters/QueryBuilderSearch';
|
||||||
import { useQueryBuilder } from 'hooks/useQueryBuilder';
|
import { useQueryBuilder } from 'hooks/useQueryBuilder';
|
||||||
import { findDataTypeOfOperator } from 'lib/query/findDataTypeOfOperator';
|
import { findDataTypeOfOperator } from 'lib/query/findDataTypeOfOperator';
|
||||||
@ -64,6 +65,7 @@ export const Query = memo(function Query({
|
|||||||
...query,
|
...query,
|
||||||
aggregateOperator: value,
|
aggregateOperator: value,
|
||||||
having: [],
|
having: [],
|
||||||
|
limit: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!aggregateDataType || query.dataSource === DataSource.METRICS) {
|
if (!aggregateDataType || query.dataSource === DataSource.METRICS) {
|
||||||
@ -191,6 +193,17 @@ export const Query = memo(function Query({
|
|||||||
[query.dataSource],
|
[query.dataSource],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const handleChangeLimit = useCallback(
|
||||||
|
(value: number | null): void => {
|
||||||
|
const newQuery: IBuilderQueryForm = {
|
||||||
|
...query,
|
||||||
|
limit: value,
|
||||||
|
};
|
||||||
|
handleSetQueryData(index, newQuery);
|
||||||
|
},
|
||||||
|
[index, query, handleSetQueryData],
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<StyledRow gutter={[0, 15]}>
|
<StyledRow gutter={[0, 15]}>
|
||||||
<StyledDeleteEntity onClick={handleDeleteQuery} />
|
<StyledDeleteEntity onClick={handleDeleteQuery} />
|
||||||
@ -253,8 +266,16 @@ export const Query = memo(function Query({
|
|||||||
</Col>
|
</Col>
|
||||||
<Col span={24}>
|
<Col span={24}>
|
||||||
<AdditionalFiltersToggler listOfAdditionalFilter={listOfAdditionalFilters}>
|
<AdditionalFiltersToggler listOfAdditionalFilter={listOfAdditionalFilters}>
|
||||||
{/* TODO: Render filter by Col component */}
|
{!isMatricsDataSource && (
|
||||||
test additional filter
|
<Row gutter={[11, 5]}>
|
||||||
|
<Col span={6}>
|
||||||
|
<FilterLabel label="Limit" />
|
||||||
|
</Col>
|
||||||
|
<Col span={18}>
|
||||||
|
<LimitFilter query={query} onChange={handleChangeLimit} />
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
)}
|
||||||
</AdditionalFiltersToggler>
|
</AdditionalFiltersToggler>
|
||||||
</Col>
|
</Col>
|
||||||
<Row style={{ width: '100%' }}>
|
<Row style={{ width: '100%' }}>
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
import { InputNumber } from 'antd';
|
||||||
|
import React, { useState } from 'react';
|
||||||
|
import { IBuilderQueryForm } from 'types/api/queryBuilder/queryBuilderData';
|
||||||
|
|
||||||
|
import { selectStyle } from '../QueryBuilderSearch/config';
|
||||||
|
|
||||||
|
function LimitFilter({ onChange, query }: LimitFilterProps): JSX.Element {
|
||||||
|
const [isData, setIsData] = useState<number | null>(null);
|
||||||
|
const onChangeHandler = (value: number | null): void => {
|
||||||
|
setIsData(value);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleEnter = (e: { key: string }): void => {
|
||||||
|
if (e.key === 'Enter') {
|
||||||
|
onChange(isData);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<InputNumber
|
||||||
|
min={1}
|
||||||
|
type="number"
|
||||||
|
placeholder="e.g 10"
|
||||||
|
disabled={!query.aggregateAttribute.key}
|
||||||
|
style={selectStyle}
|
||||||
|
onChange={onChangeHandler}
|
||||||
|
onPressEnter={handleEnter}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LimitFilterProps {
|
||||||
|
onChange: (values: number | null) => void;
|
||||||
|
query: IBuilderQueryForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default LimitFilter;
|
@ -40,7 +40,7 @@ export type IBuilderQuery = {
|
|||||||
expression: string;
|
expression: string;
|
||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
having: Having[];
|
having: Having[];
|
||||||
limit: number;
|
limit: number | null;
|
||||||
stepInterval: number;
|
stepInterval: number;
|
||||||
orderBy: string[];
|
orderBy: string[];
|
||||||
reduceTo: string;
|
reduceTo: string;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user