fix: api calls (#2725)

* fix: aggregate filter and group by filter

* fix: operators labels and divider

* fix: api calls

* fix: remove ts ignore from file
This commit is contained in:
Yevhen Shevchenko 2023-05-18 14:31:50 +03:00 committed by GitHub
parent 18fc1a2761
commit 81291c996f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 35 deletions

View File

@ -1,31 +0,0 @@
/* eslint-disable */
// @ts-ignore
// @ts-nocheck
import { useEffect, useState } from 'react';
// see https://github.com/tannerlinsley/react-query/issues/293
// see https://usehooks.com/useDebounce/
export default function useDebounce(value, delay) {
// State and setters for debounced value
const [debouncedValue, setDebouncedValue] = useState(value);
useEffect(
() => {
// Update debounced value after delay
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
// Cancel the timeout if value changes (also on delay change or unmount)
// This is how we prevent debounced value from updating if value is changed ...
// .. within the delay period. Timeout gets cleared and restarted.
return () => {
clearTimeout(handler);
};
},
[value, delay] // Only re-call effect if value or delay changes
);
return debouncedValue;
}

View File

@ -7,6 +7,7 @@ import {
QueryBuilderKeys, QueryBuilderKeys,
selectValueDivider, selectValueDivider,
} from 'constants/queryBuilder'; } from 'constants/queryBuilder';
import useDebounce from 'hooks/useDebounce';
import { getFilterObjectValue } from 'lib/newQueryBuilder/getFilterObjectValue'; import { getFilterObjectValue } from 'lib/newQueryBuilder/getFilterObjectValue';
import { transformStringWithPrefix } from 'lib/query/transformStringWithPrefix'; import { transformStringWithPrefix } from 'lib/query/transformStringWithPrefix';
import React, { memo, useCallback, useMemo, useState } from 'react'; import React, { memo, useCallback, useMemo, useState } from 'react';
@ -25,16 +26,17 @@ export const AggregatorFilter = memo(function AggregatorFilter({
query, query,
}: AgregatorFilterProps): JSX.Element { }: AgregatorFilterProps): JSX.Element {
const [optionsData, setOptionsData] = useState<ExtendedSelectOption[]>([]); const [optionsData, setOptionsData] = useState<ExtendedSelectOption[]>([]);
const debouncedValue = useDebounce(query.aggregateAttribute.key, 300);
const { data, isFetching } = useQuery( const { data, isFetching } = useQuery(
[ [
QueryBuilderKeys.GET_AGGREGATE_ATTRIBUTE, QueryBuilderKeys.GET_AGGREGATE_ATTRIBUTE,
query.aggregateAttribute.key, debouncedValue,
query.aggregateOperator, query.aggregateOperator,
query.dataSource, query.dataSource,
], ],
async () => async () =>
getAggregateAttribute({ getAggregateAttribute({
searchText: query.aggregateAttribute.key, searchText: debouncedValue,
aggregateOperator: query.aggregateOperator, aggregateOperator: query.aggregateOperator,
dataSource: query.dataSource, dataSource: query.dataSource,
}), }),

View File

@ -2,6 +2,7 @@ import { Select, Spin } from 'antd';
import { getAggregateKeys } from 'api/queryBuilder/getAttributeKeys'; import { getAggregateKeys } from 'api/queryBuilder/getAttributeKeys';
// ** Constants // ** Constants
import { QueryBuilderKeys, selectValueDivider } from 'constants/queryBuilder'; import { QueryBuilderKeys, selectValueDivider } from 'constants/queryBuilder';
import useDebounce from 'hooks/useDebounce';
import { getFilterObjectValue } from 'lib/newQueryBuilder/getFilterObjectValue'; import { getFilterObjectValue } from 'lib/newQueryBuilder/getFilterObjectValue';
// ** Components // ** Components
// ** Helpers // ** Helpers
@ -24,14 +25,16 @@ export const GroupByFilter = memo(function GroupByFilter({
const [optionsData, setOptionsData] = useState<ExtendedSelectOption[]>([]); const [optionsData, setOptionsData] = useState<ExtendedSelectOption[]>([]);
const [isFocused, setIsFocused] = useState<boolean>(false); const [isFocused, setIsFocused] = useState<boolean>(false);
const debouncedValue = useDebounce(searchText, 300);
const { data, isFetching } = useQuery( const { data, isFetching } = useQuery(
[QueryBuilderKeys.GET_AGGREGATE_KEYS, searchText, isFocused], [QueryBuilderKeys.GET_AGGREGATE_KEYS, debouncedValue, isFocused],
async () => async () =>
getAggregateKeys({ getAggregateKeys({
aggregateAttribute: query.aggregateAttribute.key, aggregateAttribute: query.aggregateAttribute.key,
dataSource: query.dataSource, dataSource: query.dataSource,
aggregateOperator: query.aggregateOperator, aggregateOperator: query.aggregateOperator,
searchText, searchText: debouncedValue,
}), }),
{ {
enabled: !disabled && isFocused, enabled: !disabled && isFocused,
@ -73,6 +76,7 @@ export const GroupByFilter = memo(function GroupByFilter({
const onBlur = (): void => { const onBlur = (): void => {
setIsFocused(false); setIsFocused(false);
setSearchText('');
}; };
const onFocus = (): void => { const onFocus = (): void => {

View File

@ -0,0 +1,17 @@
import { useEffect, useState } from 'react';
export default function useDebounce<T>(value: T, delay: number): T {
const [debouncedValue, setDebouncedValue] = useState<T>(value);
useEffect(() => {
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
return (): void => {
clearTimeout(handler);
};
}, [value, delay]);
return debouncedValue;
}