From 98a2ef4080580ee9f31f782918d1bd22881d730a Mon Sep 17 00:00:00 2001 From: Yevhen Shevchenko <90138953+yeshev@users.noreply.github.com> Date: Wed, 19 Jul 2023 08:47:21 +0300 Subject: [PATCH] feat: add suggestion to order by filter (#3162) * feat: add suggestion to order by filter * fix: column name for order by * fix: mapper for order by * fix: render order by for different panels * fix: order by timestamp and aggrigate value --------- Co-authored-by: Palash Gupta Co-authored-by: Vishal Sharma --- .../src/container/ExplorerOrderBy/index.tsx | 72 ++++++ .../LogExplorerQuerySection/index.tsx | 20 +- .../src/container/LogsExplorerViews/index.tsx | 41 +++- .../container/OptionsMenu/useOptionsMenu.ts | 16 +- .../QueryBuilder/QueryBuilder.interfaces.ts | 3 + .../container/QueryBuilder/QueryBuilder.tsx | 2 + .../components/Query/Query.interfaces.ts | 2 +- .../QueryBuilder/components/Query/Query.tsx | 26 ++- .../filters/GroupByFilter/GroupByFilter.tsx | 20 +- .../filters/OrderByFilter/OrderByFilter.tsx | 217 +++--------------- .../filters/OrderByFilter/constants.ts | 1 + .../filters/OrderByFilter/useOrderByFilter.ts | 199 ++++++++++++++++ .../filters/OrderByFilter/utils.ts | 45 ++-- .../TracesExplorer/QuerySection/index.tsx | 21 +- .../queryBuilder/useFetchKeysAndValues.ts | 23 +- .../hooks/queryBuilder/useGetAggregateKeys.ts | 34 +++ frontend/src/pages/TracesExplorer/index.tsx | 49 ++-- frontend/src/providers/QueryBuilder.tsx | 19 ++ frontend/src/types/common/queryBuilder.ts | 8 + 19 files changed, 539 insertions(+), 279 deletions(-) create mode 100644 frontend/src/container/ExplorerOrderBy/index.tsx create mode 100644 frontend/src/container/QueryBuilder/filters/OrderByFilter/constants.ts create mode 100644 frontend/src/container/QueryBuilder/filters/OrderByFilter/useOrderByFilter.ts create mode 100644 frontend/src/hooks/queryBuilder/useGetAggregateKeys.ts diff --git a/frontend/src/container/ExplorerOrderBy/index.tsx b/frontend/src/container/ExplorerOrderBy/index.tsx new file mode 100644 index 0000000000..5374510084 --- /dev/null +++ b/frontend/src/container/ExplorerOrderBy/index.tsx @@ -0,0 +1,72 @@ +import { Select, Spin } from 'antd'; +import { OrderByFilterProps } from 'container/QueryBuilder/filters/OrderByFilter/OrderByFilter.interfaces'; +import { useOrderByFilter } from 'container/QueryBuilder/filters/OrderByFilter/useOrderByFilter'; +import { selectStyle } from 'container/QueryBuilder/filters/QueryBuilderSearch/config'; +import { useGetAggregateKeys } from 'hooks/queryBuilder/useGetAggregateKeys'; +import { memo, useMemo } from 'react'; +import { StringOperators } from 'types/common/queryBuilder'; + +function ExplorerOrderBy({ query, onChange }: OrderByFilterProps): JSX.Element { + const { + debouncedSearchText, + selectedValue, + aggregationOptions, + generateOptions, + createOptions, + handleChange, + handleSearchKeys, + } = useOrderByFilter({ query, onChange }); + + const { data, isFetching } = useGetAggregateKeys( + { + aggregateAttribute: query.aggregateAttribute.key, + dataSource: query.dataSource, + aggregateOperator: query.aggregateOperator, + searchText: debouncedSearchText, + }, + { + keepPreviousData: true, + }, + ); + + const options = useMemo(() => { + const keysOptions = createOptions(data?.payload?.attributeKeys || []); + + const customOptions = createOptions([ + { key: 'timestamp', isColumn: true, type: null, dataType: null }, + ]); + + const baseOptions = [ + ...customOptions, + ...(query.aggregateOperator === StringOperators.NOOP + ? [] + : aggregationOptions), + ...keysOptions, + ]; + + return generateOptions(baseOptions); + }, [ + aggregationOptions, + createOptions, + data?.payload?.attributeKeys, + generateOptions, + query.aggregateOperator, + ]); + + return ( +