|
1 | 1 | /** |
2 | 2 | * @typedef { import("./Filter").Filter } Filter |
3 | 3 | * @typedef { { ref: Element; name: string; description: string } } ListElement |
| 4 | + * @typedef { [key: string, value: string][] } Dataset |
4 | 5 | */ |
5 | 6 |
|
6 | 7 | class DocumentableList extends Component { |
@@ -132,37 +133,42 @@ class List { |
132 | 133 | } |
133 | 134 |
|
134 | 135 | function areFiltersFromElementSelected() { |
135 | | - /** @type { [key: string, value: string][] } */ |
136 | | - const dataset = Object.entries(elementData.ref.dataset) |
137 | | - |
138 | | - const datasetWithFilterData = dataset.filter(([key]) => isFilterData(key)); |
139 | | - |
140 | | - return hasCorrespondingFilters() || haveDefaultFilters() |
141 | | - |
142 | | - function haveDefaultFilters() { |
143 | | - return ( |
144 | | - Object.entries(Filter.defaultFilters).some(([key, value]) => { |
145 | | - const filterKey = getFilterKey(key) |
146 | | - |
147 | | - return ( |
148 | | - filter.filters[filterKey] && |
149 | | - filter.filters[filterKey][value].selected && |
150 | | - !dataset.some(([k]) => k === filterKey) |
151 | | - ) |
152 | | - } |
153 | | - ) |
154 | | - ) |
155 | | - } |
156 | | - |
157 | | - // check if any selected filter is on data attr |
158 | | - function hasCorrespondingFilters() { |
159 | | - return datasetWithFilterData |
160 | | - .some(([filterKey, value]) => |
161 | | - value.split(",").some(val => |
162 | | - filter.filters[filterKey] && filter.filters[filterKey][val].selected |
163 | | - ) |
164 | | - ) |
165 | | - } |
| 136 | + /** @type { Dataset } */ |
| 137 | + const dataset = Object.entries(elementData.ref.dataset) |
| 138 | + |
| 139 | + /** @type { Dataset } */ |
| 140 | + const defaultFilters = Object.entries(Filter.defaultFilters) |
| 141 | + .filter(([key]) => !!filter.filters[getFilterKey(key)]) |
| 142 | + |
| 143 | + /** @type { Dataset } */ |
| 144 | + const defaultFiltersForMembersWithoutDataAttribute = |
| 145 | + defaultFilters.reduce((acc, [key, value]) => { |
| 146 | + const filterKey = getFilterKey(key) |
| 147 | + const shouldAddDefaultFilter = !dataset.some(([k]) => k === filterKey) |
| 148 | + return shouldAddDefaultFilter ? [...acc, [filterKey, value]] : acc |
| 149 | + }, []) |
| 150 | + |
| 151 | + /** @type { Dataset } */ |
| 152 | + const datasetWithAppendedDefaultFilters = dataset |
| 153 | + .filter(([k]) => isFilterData(k)) |
| 154 | + .map(([k, v]) => { |
| 155 | + const defaultFilter = defaultFilters.find(([defaultKey]) => defaultKey === k) |
| 156 | + return defaultFilter ? [k, `${v},${defaultFilter[1]}`] : [k, v] |
| 157 | + }) |
| 158 | + |
| 159 | + const datasetWithDefaultFilters = [ |
| 160 | + ...defaultFiltersForMembersWithoutDataAttribute, |
| 161 | + ...datasetWithAppendedDefaultFilters |
| 162 | + ] |
| 163 | + |
| 164 | + const isVisible = datasetWithDefaultFilters |
| 165 | + .every(([filterKey, value]) => { |
| 166 | + const filterGroup = filter.filters[filterKey] |
| 167 | + |
| 168 | + return value.split(",").some(v => filterGroup && filterGroup[v].selected) |
| 169 | + }) |
| 170 | + |
| 171 | + return isVisible |
166 | 172 | } |
167 | 173 | } |
168 | 174 |
|
|
0 commit comments