|
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