Skip to content

Commit 6495aea

Browse files
grzegorz-bielskiromanowski
authored andcommitted
Filter by default values in the FilterBar
1 parent e8f1ea5 commit 6495aea

File tree

2 files changed

+45
-29
lines changed

2 files changed

+45
-29
lines changed

scala3doc/resources/dotty_res/scripts/components/DocumentableList.js

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/**
22
* @typedef { import("./Filter").Filter } Filter
3+
* @typedef { { ref: Element; name: string; description: string } } ListElement
34
*/
45

56
class DocumentableList extends Component {
@@ -55,10 +56,6 @@ class DocumentableList extends Component {
5556
}
5657
}
5758

58-
/**
59-
* @typedef { { ref: Element; name: string; description: string } } ListElement
60-
*/
61-
6259
class List {
6360
/**
6461
* @param tabsRef { Element[] }
@@ -126,31 +123,49 @@ class List {
126123
* @param filter { Filter }
127124
*/
128125
isElementVisible(elementData, filter) {
129-
if (!areFiltersFromElementSelected(elementData, filter)) {
130-
return false;
131-
} else {
132-
return includesInputValue(elementData, filter);
133-
}
126+
return !areFiltersFromElementSelected()
127+
? false
128+
: includesInputValue()
134129

135130
function includesInputValue() {
136131
return elementData.name.includes(filter.value) || elementData.description.includes(filter.value);
137132
}
138133

139134
function areFiltersFromElementSelected() {
140-
/** @type {[key: string, value: string][]} */
141-
const dataset = Object.entries(elementData.ref.dataset).filter(([key]) => startsWith(key, "f"));
142-
143-
const hasCorrespondingFilters = () =>
144-
dataset.every(([key, value]) => {
145-
const filterGroup = filter.filters[key];
146-
return value.split(",").every(val => filterGroup && filterGroup[val].selected);
147-
});
148-
149-
return dataset.length ? hasCorrespondingFilters() : true;
135+
/** @param str { string } */
136+
const haveKeywordData = str => str.startsWith("f")
137+
/** @type { [key: string, value: string][] } */
138+
const dataset = Object.entries(elementData.ref.dataset)
139+
140+
const datasetWithDefaultData = dataset.filter(([key]) => !haveKeywordData(key));
141+
const datasetWithKeywordData = dataset.filter(([key]) => haveKeywordData(key));
142+
143+
return datasetWithKeywordData.length > 0
144+
? hasCorrespondingFilters()
145+
: haveDefaultFilters()
146+
147+
function haveDefaultFilters() {
148+
return (
149+
filter.filters.fKeywords[Filter.defaultFilterKey] &&
150+
filter.filters.fKeywords[Filter.defaultFilterKey].selected &&
151+
datasetWithDefaultData.length >= 1
152+
)
153+
}
154+
155+
function hasCorrespondingFilters() {
156+
return (
157+
datasetWithKeywordData
158+
.every(([key, value]) => {
159+
const filterGroup = filter.filters[key];
160+
return value.split(",").every(val => filterGroup && filterGroup[val].selected);
161+
})
162+
)
163+
}
150164
}
151165
}
152166

153167
/**
168+
* @private
154169
* @param elementData { ListElement }
155170
*/
156171
_getTogglable = elementData => elementData.dataset.togglable;

scala3doc/resources/dotty_res/scripts/components/Filter.js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ class Filter {
1717
this._filters = this._init ? this._withNewFilters() : filters;
1818
}
1919

20+
/**
21+
* Key for filters without the `fKeywords`
22+
*/
23+
static defaultFilterKey = 'default'
24+
2025
get value() {
2126
return this._value;
2227
}
@@ -71,24 +76,20 @@ class Filter {
7176
* @returns { Filters }
7277
*/
7378
_generateFiltersOnTyping(value) {
74-
return this.elementsRefs
79+
const datasets = this.elementsRefs
7580
.filter((elRef) => {
7681
const name = getElementTextContent(getElementNameRef(elRef));
7782
const description = getElementTextContent(getElementDescription(elRef));
7883

7984
return name.includes(value) || description.includes(value);
8085
})
8186
.map((elRef) => this._getDatasetWithKeywordData(elRef.dataset))
82-
.reduce((filtersObject, datasets) => {
87+
88+
89+
return dataset.reduce((filtersObject, datasets) => {
8390
datasets.forEach(([key, value]) => {
8491
this._splitByComma(value).forEach((val) => {
85-
filtersObject[key] = {
86-
...filtersObject[key],
87-
[val]: {
88-
...filtersObject[key][val],
89-
visible: true,
90-
},
91-
};
92+
filtersObject[key] = { ...filtersObject[key], [val]: { ...filtersObject[key][val], visible: true} };
9293
});
9394
});
9495
return filtersObject;
@@ -157,7 +158,7 @@ class Filter {
157158
const shouldAddDefaultFilter = this._elementsRefs.some(ref => !!ref.dataset['fKeywords'])
158159

159160
return shouldAddDefaultFilter
160-
? { ...newFilters, fKeywords: { ...newFilters.fKeywords, default: newFilter } }
161+
? { ...newFilters, fKeywords: { ...newFilters.fKeywords, [Filter.defaultFilterKey]: newFilter } }
161162
: newFilters
162163
}
163164

0 commit comments

Comments
 (0)