@@ -2,7 +2,22 @@ const defaultFilterGroup = {
2
2
FOrdering : { Alphabetical : true } ,
3
3
} ;
4
4
5
+ /**
6
+ * @typedef { Object } FilterItem
7
+ * @prop { string } selected
8
+ * @prop { number } visible
9
+ */
10
+
11
+ /**
12
+ * @typedef { Record<string, FilterItem> } Filters
13
+ */
14
+
5
15
class Filter {
16
+ /**
17
+ * @param value { string }
18
+ * @param filters { Filters }
19
+ * @param elementsRefs { Element }
20
+ */
6
21
constructor ( value , filters , elementsRefs , init = false ) {
7
22
this . _init = init ;
8
23
this . _value = value ;
@@ -23,6 +38,10 @@ class Filter {
23
38
return this . _elementsRefs ;
24
39
}
25
40
41
+ /**
42
+ * @param key { string }
43
+ * @param value { string }
44
+ */
26
45
onFilterToggle ( key , value ) {
27
46
return new Filter (
28
47
this . value ,
@@ -31,6 +50,10 @@ class Filter {
31
50
) ;
32
51
}
33
52
53
+ /**
54
+ * @param key { string }
55
+ * @param isActive { boolean }
56
+ */
34
57
onGroupSelectionChange ( key , isActive ) {
35
58
return new Filter (
36
59
this . value ,
@@ -39,6 +62,10 @@ class Filter {
39
62
) ;
40
63
}
41
64
65
+ /**
66
+ * @param value { string }
67
+ * @returns { FilterItem }
68
+ */
42
69
onInputValueChange ( value ) {
43
70
return new Filter (
44
71
value ,
@@ -47,6 +74,11 @@ class Filter {
47
74
) ;
48
75
}
49
76
77
+ /**
78
+ * @private
79
+ * @param value { string }
80
+ * @returns { Filters }
81
+ */
50
82
_generateFiltersOnTyping ( value ) {
51
83
return this . elementsRefs
52
84
. filter ( ( elRef ) => {
@@ -72,6 +104,10 @@ class Filter {
72
104
} , this . _allFiltersAreHidden ( ) ) ;
73
105
}
74
106
107
+ /**
108
+ * @private
109
+ * @returns { Filters }
110
+ */
75
111
_allFiltersAreHidden ( ) {
76
112
return Object . entries ( this . filters ) . reduce (
77
113
( filters , [ key , filterGroup ] ) => {
@@ -87,6 +123,12 @@ class Filter {
87
123
) ;
88
124
}
89
125
126
+ /**
127
+ * @private
128
+ * @param key { string }
129
+ * @param isActive { boolean }
130
+ * @returns { Filters }
131
+ */
90
132
_withNewSelectionOfGroup ( key , isActive ) {
91
133
return {
92
134
...this . filters ,
@@ -103,27 +145,37 @@ class Filter {
103
145
} ;
104
146
}
105
147
148
+ /**
149
+ * @private
150
+ * @returns { Filters }
151
+ */
106
152
_withNewFilters ( ) {
107
- return this . _elementsRefs . reduce ( ( filtersObject , elementRef ) => {
153
+ console . log ( "this._elementsRefs" , this . _elementsRefs )
154
+ const newFilters = this . _elementsRefs . reduce ( ( filtersObject , elementRef ) => {
108
155
this . _getDatasetWithF ( elementRef . dataset ) . map ( ( [ key , value ] ) =>
109
156
this . _splitByComma ( value ) . map ( ( val ) => {
110
157
if ( ! filtersObject [ key ] ) {
111
158
filtersObject [ key ] = { [ val ] : { selected : true , visible : true } } ;
112
159
} else {
113
160
filtersObject [ key ] = {
114
161
...filtersObject [ key ] ,
115
- [ val ] : filtersObject [ key ] [ val ] ?? {
116
- selected : true ,
117
- visible : true ,
118
- } ,
162
+ [ val ] : filtersObject [ key ] [ val ] ?? { selected : true , visible : true } ,
119
163
} ;
120
164
}
121
165
} )
122
166
) ;
123
167
return filtersObject ;
124
168
} , { } ) ;
169
+ console . log ( "newFilters" , newFilters )
170
+ return newFilters
125
171
}
126
172
173
+ /**
174
+ * @private
175
+ * @param key { string }
176
+ * @param value { string }
177
+ * @returns { Filters }
178
+ */
127
179
_withToggledFilter ( key , value ) {
128
180
return {
129
181
...this . filters ,
@@ -137,10 +189,16 @@ class Filter {
137
189
} ;
138
190
}
139
191
192
+ /**
193
+ * @private
194
+ * @param str { string }
195
+ */
140
196
_splitByComma = ( str ) => str . split ( "," ) ;
141
197
198
+ /**
199
+ * @private
200
+ * @param dataset { DOMStringMap }
201
+ */
142
202
_getDatasetWithF = ( dataset ) =>
143
- Object . entries ( dataset ) . filter ( ( [ key ] ) => this . _startsWithF ( key ) ) ;
144
-
145
- _startsWithF = ( str ) => startsWith ( str , "f" ) ;
203
+ Object . entries ( dataset ) . filter ( ( [ key ] ) => startsWith ( key , "f" ) ) ;
146
204
}
0 commit comments