Skip to content

Commit d3c9e8e

Browse files
Merge pull request #29 from szymon-rd/filters-rebuild
fix clearing filters and filter search optimalization
2 parents 0877df2 + 760285d commit d3c9e8e

File tree

3 files changed

+101
-92
lines changed

3 files changed

+101
-92
lines changed

scaladoc/resources/dotty_res/scripts/components/FilterBar.js

Lines changed: 98 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -3,92 +3,101 @@
33
*/
44

55
class FilterBar extends Component {
6-
constructor(props) {
7-
super(props);
8-
9-
this.refs = {
10-
elements: findRefs(".documentableElement"),
11-
filterBar: findRef(".documentableFilter"),
12-
};
13-
14-
this.state = {
15-
filter: new Filter("", {}, this.refs.elements, true),
16-
isVisible: false,
17-
selectedPill: '',
18-
};
19-
20-
this.inputComp = new Input({ onInputChange: this.onInputChange });
21-
this.listComp = new DocumentableList({
22-
filter: this.state.filter,
23-
});
24-
this.filterGroupComp = new FilterGroup({
25-
filter: this.state.filter,
26-
onFilterToggle: this.onFilterToggle,
27-
onGroupSelectChange: this.onGroupSelectChange,
28-
onFilterVisibilityChange: this.onFilterVisibilityChange,
29-
onPillClick: this.onPillClick,
30-
onPillCollapse: this.onPillCollapse,
31-
});
32-
33-
this.render();
34-
}
35-
36-
onInputChange = (value) => {
37-
this.setState((prevState) => ({
38-
filter: prevState.filter.onInputValueChange(value),
39-
}));
40-
};
41-
42-
onGroupSelectChange = (key, isActive) => {
43-
this.setState((prevState) => ({
44-
filter: prevState.filter.onGroupSelectionChange(key, isActive),
45-
}));
46-
};
47-
48-
onClearFilters = () => {
49-
this.setState(() => ({
50-
filter: ""
51-
}))
52-
}
53-
54-
onFilterVisibilityChange = () => {
55-
this.setState((prevState) => ({ isVisible: !prevState.isVisible }));
56-
};
57-
58-
onFilterToggle = (key, value) => {
59-
this.setState((prevState) => ({
60-
filter: prevState.filter.onFilterToggle(key, value),
61-
}));
62-
};
63-
64-
onPillClick = (key) => {
65-
this.setState((prevState) => ({
66-
filter: prevState.filter,
67-
selectedPill: key
68-
}))
69-
}
70-
71-
onPillCollapse = () => {
72-
this.setState((prevState) => ({
73-
filter: prevState.filter,
74-
selectedPill: ""
75-
}))
76-
}
77-
78-
render() {
79-
if (this.refs.filterBar) {
80-
if (this.state.isVisible) {
81-
this.refs.filterBar.classList.add("active");
82-
} else {
83-
this.refs.filterBar.classList.remove("active");
84-
}
85-
}
86-
87-
this.listComp.render({ filter: this.state.filter });
88-
this.filterGroupComp.render({ filter: this.state.filter, selectedPill: this.state.selectedPill });
89-
}
90-
}
91-
92-
window.addEventListener("dynamicPageLoad", () => {
93-
new FilterBar()
94-
})
6+
constructor(props) {
7+
super(props);
8+
9+
this.refs = {
10+
elements: findRefs(".documentableElement"),
11+
filterBar: findRef(".documentableFilter"),
12+
};
13+
14+
this.state = {
15+
filter: new Filter("", {}, this.refs.elements, true),
16+
isVisible: false,
17+
selectedPill: "",
18+
};
19+
20+
this.inputComp = new Input({ onInputChange: this.onInputChange });
21+
this.listComp = new DocumentableList({
22+
filter: this.state.filter,
23+
});
24+
this.filterGroupComp = new FilterGroup({
25+
filter: this.state.filter,
26+
onFilterToggle: this.onFilterToggle,
27+
onGroupSelectChange: this.onGroupSelectChange,
28+
onFilterVisibilityChange: this.onFilterVisibilityChange,
29+
onPillClick: this.onPillClick,
30+
onPillCollapse: this.onPillCollapse,
31+
});
32+
33+
this.render();
34+
}
35+
36+
onInputChange = (value) => {
37+
this.setState((prevState) => ({
38+
filter: prevState.filter.onInputValueChange(value),
39+
}));
40+
};
41+
42+
onGroupSelectChange = (key, isActive) => {
43+
this.setState((prevState) => ({
44+
filter: prevState.filter.onGroupSelectionChange(key, isActive),
45+
}));
46+
};
47+
48+
onClearFilters = () => {
49+
this.inputComp.inputRef.value = "";
50+
this.setState((prevState) => ({
51+
filter: prevState.filter.onInputValueChange(""),
52+
}));
53+
};
54+
55+
onFilterVisibilityChange = () => {
56+
this.setState((prevState) => ({ isVisible: !prevState.isVisible }));
57+
};
58+
59+
onFilterToggle = (key, value) => {
60+
this.setState((prevState) => ({
61+
filter: prevState.filter.onFilterToggle(key, value),
62+
}));
63+
};
64+
65+
onPillClick = (key) => {
66+
this.setState((prevState) => ({
67+
filter: prevState.filter,
68+
selectedPill: key,
69+
}));
70+
};
71+
72+
onPillCollapse = () => {
73+
this.setState((prevState) => ({
74+
filter: prevState.filter,
75+
selectedPill: "",
76+
}));
77+
};
78+
79+
render() {
80+
if (this.refs.filterBar) {
81+
if (this.state.isVisible) {
82+
this.refs.filterBar.classList.add("active");
83+
} else {
84+
this.refs.filterBar.classList.remove("active");
85+
}
86+
}
87+
88+
this.listComp.render({ filter: this.state.filter });
89+
this.filterGroupComp.render({
90+
filter: this.state.filter,
91+
selectedPill: this.state.selectedPill,
92+
});
93+
}
94+
}
95+
96+
window.addEventListener("dynamicPageLoad", () => {
97+
new FilterBar();
98+
});
99+
100+
const clearButton = document.querySelector(".clearButton");
101+
clearButton.addEventListener("click", () => {
102+
new FilterBar().onClearFilters();
103+
});

scaladoc/resources/dotty_res/scripts/components/Input.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class Input extends Component {
88
}
99

1010
onInputChange = ({ currentTarget: { value } }) => {
11-
this.props.onInputChange(value);
11+
setTimeout(this.props.onInputChange(value), 300);
1212
};
1313

1414
onKeydown = (e) => {

scaladoc/resources/dotty_res/styles/theme/components/api-filters.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
top: var(--header-height);
88
padding: calc(2 * var(--base-spacing)) 0;
99
margin-bottom: calc(3 * var(--base-spacing));
10-
background-color: var(--background-default);
10+
background-color: var(--background-subtle);
1111
}
1212

1313
.filtersContainer {
@@ -17,7 +17,7 @@
1717
}
1818

1919
.filterableInput {
20-
background-color: var(--background-default);
20+
background-color: var(--background-subtle);
2121
color: var(--action-primary-content-active);
2222
background-image: url("../../../images/icon-buttons/search/dark/default.svg");
2323
background-repeat: no-repeat;

0 commit comments

Comments
 (0)