Skip to content

Commit 0256276

Browse files
authored
NETOBSERV-698 add ability to show/hide filter chips (#243)
* NETOBSERV-698 add ability to hide filter chips * Fix, do not show show/hide link when no active filters and no default
1 parent e74b6e9 commit 0256276

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

web/locales/en/plugin__netobserv-plugin.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@
9494
"group filter": "group filter",
9595
"filter": "filter",
9696
"Edit filters": "Edit filters",
97+
"Hide filters": "Hide filters",
98+
"Show {{count}} filters": "Show {{count}} filters",
99+
"Show {{count}} filters_plural": "Show {{count}} filters",
100+
"Show filters": "Show filters",
97101
"Quick filters": "Quick filters",
98102
"Build info": "Build info",
99103
"Configuration limits": "Configuration limits",

web/src/components/filters/filters-toolbar.tsx

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { FilterHints } from './filter-hints';
4040
import FiltersDropdown from './filters-dropdown';
4141
import { getFilterFullName, Indicator } from './filters-helper';
4242
import TextFilter from './text-filter';
43+
import { LOCAL_STORAGE_SHOW_FILTERS_KEY, useLocalStorage } from '../../utils/local-storage-hook';
4344
import './filters-toolbar.css';
4445

4546
export interface FiltersToolbarProps {
@@ -72,6 +73,7 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
7273
const [indicator, setIndicator] = React.useState<Indicator>(ValidatedOptions.default);
7374
const [message, setMessage] = React.useState<string | undefined>();
7475
const [selectedFilter, setSelectedFilter] = React.useState<FilterDefinition>(findFilter(t, 'namespace')!);
76+
const [showFilters, setShowFilters] = useLocalStorage<boolean>(LOCAL_STORAGE_SHOW_FILTERS_KEY, true);
7577

7678
// reset and delay message state to trigger tooltip properly
7779
const setMessageWithDelay = React.useCallback(
@@ -125,10 +127,10 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
125127
}
126128
}, [selectedFilter, addFilter, indicator, setIndicator, setMessageWithDelay]);
127129

130+
const defaultFilters = quickFilters.filter(qf => qf.default).flatMap(qf => qf.filters);
128131
const getFiltersChips = React.useCallback(() => {
129132
const isForced = !_.isEmpty(forcedFilters);
130133
const chipFilters = isForced ? forcedFilters : filters;
131-
const defaultFilters = quickFilters.filter(qf => qf.default).flatMap(qf => qf.filters);
132134

133135
if (_.isEmpty(chipFilters) && _.isEmpty(defaultFilters)) {
134136
return null;
@@ -240,7 +242,15 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
240242
)}
241243
</ToolbarGroup>
242244
);
243-
}, [clearFilters, filters, forcedFilters, quickFilters, push, setFilters, resetFilters, t]);
245+
}, [clearFilters, filters, forcedFilters, defaultFilters, push, setFilters, resetFilters, t]);
246+
247+
const countActiveFilters = (forcedFilters || filters || []).reduce((prev, cur) => prev + cur.values.length, 0);
248+
let showHideText: string | undefined;
249+
if (countActiveFilters > 0) {
250+
showHideText = showFilters ? t('Hide filters') : t('Show {{count}} filters', { count: countActiveFilters });
251+
} else if (defaultFilters.length > 0) {
252+
showHideText = showFilters ? t('Hide filters') : t('Show filters');
253+
}
244254

245255
return (
246256
<Toolbar data-test={id} id={id}>
@@ -274,6 +284,19 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
274284
</Tooltip>
275285
</ToolbarItem>
276286
)}
287+
{showHideText && (
288+
<ToolbarItem className="flex-start">
289+
<Button
290+
data-test="show-filters-button"
291+
id="show-filters-button"
292+
variant="link"
293+
className="overflow-button"
294+
onClick={() => setShowFilters(!showFilters)}
295+
>
296+
{showHideText}
297+
</Button>
298+
</ToolbarItem>
299+
)}
277300
{!_.isEmpty(props.menuContent) && (
278301
<ToolbarItem className="flex-start">
279302
<OverflowMenu breakpoint="2xl">
@@ -288,7 +311,7 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
288311
</OverflowMenu>
289312
</ToolbarItem>
290313
)}
291-
{getFiltersChips()}
314+
{showFilters && getFiltersChips()}
292315
</ToolbarContent>
293316
</Toolbar>
294317
);

web/src/utils/local-storage-hook.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export const LOCAL_STORAGE_METRIC_SCOPE_KEY = 'netflow-traffic-metric-scope';
2020
export const LOCAL_STORAGE_METRIC_FUNCTION_KEY = 'netflow-traffic-metric-function';
2121
export const LOCAL_STORAGE_METRIC_TYPE_KEY = 'netflow-traffic-metric-type';
2222
export const LOCAL_STORAGE_SHOW_OPTIONS_KEY = 'netflow-traffic-show-options';
23+
export const LOCAL_STORAGE_SHOW_FILTERS_KEY = 'netflow-traffic-show-filters';
2324

2425
export interface ArraySelectionOptions {
2526
id: string;

0 commit comments

Comments
 (0)