diff --git a/src/flows/pipes/QueryBuilder/CardList.tsx b/src/flows/pipes/QueryBuilder/CardList.tsx index 6d9d3a6381..f1cce549f1 100644 --- a/src/flows/pipes/QueryBuilder/CardList.tsx +++ b/src/flows/pipes/QueryBuilder/CardList.tsx @@ -1,4 +1,12 @@ -import React, {FC, useCallback, useContext, useEffect, useState} from 'react' +// Libraries +import React, { + FC, + useCallback, + useContext, + useEffect, + useMemo, + useState, +} from 'react' import { Input, AlignItems, @@ -7,15 +15,22 @@ import { FlexBox, } from '@influxdata/clockface' +// Contexts import {QueryBuilderContext} from 'src/flows/pipes/QueryBuilder/context' import {PipeContext} from 'src/flows/context/pipe' +// Utils import {toComponentStatus} from 'src/shared/utils/toComponentStatus' + +// Types import {RemoteDataState, BuilderAggregateFunctionType} from 'src/types' + +// Components import SearchableDropdown from 'src/shared/components/SearchableDropdown' +import TagSelectorCount from 'src/shared/components/TagSelectorCount' +import WaitingText from 'src/shared/components/WaitingText' import BuilderCard from 'src/timeMachine/components/builderCard/BuilderCard' import SelectorList from 'src/timeMachine/components/SelectorList' -import WaitingText from 'src/shared/components/WaitingText' const DEBOUNCE_TIMEOUT = 500 const debounce_array = [] @@ -44,6 +59,13 @@ const Card: FC = ({idx}) => { const [keySearches, setKeySearches] = useState([]) const [valueSearches, setValueSearches] = useState([]) + const allItems = useMemo(() => { + const results = new Set(card?.values?.results) + const selected = card?.values?.selected?.filter(s => !results.has(s)) + + return [...selected, ...Array.from(results)] + }, [card?.values?.selected, card?.values?.results]) + const _remove = idx !== 0 && (() => { @@ -87,7 +109,6 @@ const Card: FC = ({idx}) => { const valueSelect = val => { const _vals = [...card.values.selected] const index = _vals.indexOf(val) - if (index === -1) { _vals.push(val) } else { @@ -173,10 +194,7 @@ const Card: FC = ({idx}) => { ) - } else if ( - card.values.loading === RemoteDataState.Done && - !card.values.results.length - ) { + } else if (card.values.loading === RemoteDataState.Done && !allItems.length) { _values = ( No values found in the current time range @@ -185,7 +203,7 @@ const Card: FC = ({idx}) => { } else { _values = ( = ({idx}) => { menuTestID="tag-selector--dropdown-menu" options={card.keys.results} /> + {!!card?.values?.selected?.length && ( + + )} = ({count}) => { + const pluralizer = count <= 1 ? '' : 's' + + return ( +
+ {count} +
+ ) +} + +export default TagSelectorCount diff --git a/src/style/chronograf.scss b/src/style/chronograf.scss index 17efe8f589..abc3483192 100644 --- a/src/style/chronograf.scss +++ b/src/style/chronograf.scss @@ -45,6 +45,7 @@ @import 'src/shared/components/dropdown_auto_refresh/AutoRefreshDropdown.scss'; @import 'src/shared/components/selectorList/SelectorList.scss'; @import 'src/shared/components/CodeSnippet.scss'; +@import 'src/shared/components/TagSelectorCount.scss'; @import 'src/buckets/components/Retention.scss'; @import 'src/buckets/components/BucketAddDataButton.scss'; @import 'src/buckets/components/NoBucketsWarning.scss'; diff --git a/src/timeMachine/components/TagSelector.tsx b/src/timeMachine/components/TagSelector.tsx index 631653d1ac..bb9c42cc3c 100644 --- a/src/timeMachine/components/TagSelector.tsx +++ b/src/timeMachine/components/TagSelector.tsx @@ -48,6 +48,7 @@ import { BuilderAggregateFunctionType, RemoteDataState, } from 'src/types' +import TagSelectorCount from 'src/shared/components/TagSelectorCount' const SEARCH_DEBOUNCE_MS = 500 @@ -210,17 +211,8 @@ class TagSelector extends PureComponent { private get selectedCounter(): JSX.Element { const {selectedValues} = this.props - const pluralizer = selectedValues.length === 1 ? '' : 's' - if (selectedValues.length > 0) { - return ( -
- {selectedValues.length} -
- ) + return } }