Skip to content

Commit 181acaf

Browse files
committed
keep filter disable state on values only
1 parent 15b0852 commit 181acaf

File tree

2 files changed

+33
-45
lines changed

2 files changed

+33
-45
lines changed

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

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import * as _ from 'lodash';
1919
import * as React from 'react';
2020
import { useTranslation } from 'react-i18next';
2121
import { useHistory } from 'react-router-dom';
22-
import { Filter, FilterComponent, FilterDefinition, FilterValue } from '../../model/filters';
22+
import { Filter, FilterComponent, FilterDefinition, FilterValue, hasEnabledFilterValues } from '../../model/filters';
2323
import { autoCompleteCache } from '../../utils/autocomplete-cache';
2424
import { findFilter } from '../../utils/filter-definitions';
2525
import { getPathWithParams, netflowTrafficPath } from '../../utils/url';
@@ -130,9 +130,12 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
130130
<ToolbarItem className="flex-start">
131131
{chipFilters &&
132132
chipFilters.map((chipFilter, cfIndex) => (
133-
<div key={cfIndex} className={`custom-chip-group ${chipFilter.disabled ? 'disabled-group' : ''}`}>
133+
<div
134+
key={cfIndex}
135+
className={`custom-chip-group ${!hasEnabledFilterValues(chipFilter) ? 'disabled-group' : ''}`}
136+
>
134137
<Tooltip
135-
content={`${chipFilter.disabled ? t('Enable') : t('Disable')} '${getFilterFullName(
138+
content={`${!hasEnabledFilterValues(chipFilter) ? t('Enable') : t('Disable')} '${getFilterFullName(
136139
chipFilter.def,
137140
t
138141
)}' ${t('group filter')}`}
@@ -141,46 +144,30 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
141144
className="pf-c-chip-group__label"
142145
component={TextVariants.p}
143146
onClick={() => {
144-
chipFilter.disabled = !chipFilter.disabled;
145-
//restore all valus if no remaining
146-
if (!chipFilter.values.find(fv => fv.disabled !== true)) {
147-
chipFilter.values.forEach(fv => {
148-
fv.disabled = false;
149-
});
150-
}
147+
//switch all values if no remaining
148+
const isEnabled = hasEnabledFilterValues(chipFilter);
149+
chipFilter.values.forEach(fv => {
150+
fv.disabled = isEnabled;
151+
});
151152
setFilters(_.cloneDeep(filters!));
152153
}}
153154
>
154155
{getFilterFullName(chipFilter.def, t)}
155156
</Text>
156157
</Tooltip>
157158
{chipFilter.values.map((chipFilterValue, fvIndex) => (
158-
<div
159-
key={fvIndex}
160-
className={`custom-chip ${chipFilter.disabled || chipFilterValue.disabled ? 'disabled-value' : ''}`}
161-
>
159+
<div key={fvIndex} className={`custom-chip ${chipFilterValue.disabled ? 'disabled-value' : ''}`}>
162160
<Tooltip
163-
content={`${
164-
chipFilter.disabled || chipFilterValue.disabled ? t('Enable') : t('Disable')
165-
} ${getFilterFullName(chipFilter.def, t)} '${chipFilterValue.display || chipFilterValue.v}' ${t(
166-
'filter'
167-
)}`}
161+
content={`${chipFilterValue.disabled ? t('Enable') : t('Disable')} ${getFilterFullName(
162+
chipFilter.def,
163+
t
164+
)} '${chipFilterValue.display || chipFilterValue.v}' ${t('filter')}`}
168165
>
169166
<Text
170167
component={TextVariants.p}
171168
onClick={() => {
172-
//restore group filter & value if disabled
173-
if (chipFilter.disabled) {
174-
chipFilter.disabled = false;
175-
chipFilterValue.disabled = false;
176-
} else {
177-
//else switch value
178-
chipFilterValue.disabled = !chipFilterValue.disabled;
179-
//disable parent if no value remaining
180-
if (!chipFilter.values.find(fv => fv.disabled !== true)) {
181-
chipFilter.disabled = true;
182-
}
183-
}
169+
//switch value
170+
chipFilterValue.disabled = !chipFilterValue.disabled;
184171
setFilters(_.cloneDeep(filters!));
185172
}}
186173
>

web/src/model/filters.ts

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ export interface FilterValue {
7474

7575
export interface Filter {
7676
def: FilterDefinition;
77-
disabled?: boolean;
7877
values: FilterValue[];
7978
}
8079

@@ -90,15 +89,22 @@ export const createFilterValue = (def: FilterDefinition, value: string): Promise
9089
});
9190
};
9291

92+
export const hasEnabledFilterValues = (filter: Filter) => {
93+
if (filter.values.find(fv => fv.disabled !== true)) {
94+
return true;
95+
}
96+
return false;
97+
};
98+
9399
export const getEnabledFilters = (filters: Filter[]) => {
94100
//clone to avoid values updated in filters
95101
const clonedFilters = _.cloneDeep(filters);
96102
return clonedFilters
97-
.filter(f => f.disabled !== true)
98103
.map(f => {
99104
f.values = f.values.filter(fv => fv.disabled !== true);
100105
return f;
101-
});
106+
})
107+
.filter(f => !_.isEmpty(f.values));
102108
};
103109

104110
export type DisabledFilters = Record<string, string>;
@@ -107,18 +113,13 @@ export const GroupDisabledKey = 'all';
107113
export const getDisabledFiltersRecord = (filters: Filter[]) => {
108114
const disabledFilters: DisabledFilters = {};
109115
filters.forEach(f => {
110-
if (f.disabled === true) {
111-
disabledFilters[f.def.id] = GroupDisabledKey;
112-
} else {
113-
const values = f.values
114-
.filter(fv => fv.disabled === true)
115-
.map(fv => fv.v)
116-
.join(',');
117-
if (!_.isEmpty(values)) {
118-
disabledFilters[f.def.id] = values;
119-
}
116+
const values = f.values
117+
.filter(fv => fv.disabled === true)
118+
.map(fv => fv.v)
119+
.join(',');
120+
if (!_.isEmpty(values)) {
121+
disabledFilters[f.def.id] = values;
120122
}
121123
});
122-
console.log('disabledFilters', disabledFilters);
123124
return disabledFilters;
124125
};

0 commit comments

Comments
 (0)