feat: Limt filter for QB (#2561)

This commit is contained in:
Chintan Sudani 2023-04-15 18:37:51 +05:30 committed by GitHub
parent 23081996c4
commit 0bc44c6fd9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 63 additions and 6 deletions

View File

@ -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>
); );
}); });

View File

@ -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%' }}>

View File

@ -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;

View File

@ -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;