1+ /**
2+ * @typedef { import("./Filter").Filter } Filter
3+ */
4+
15class DocumentableList extends Component {
26 constructor ( props ) {
37 super ( props ) ;
@@ -14,47 +18,30 @@ class DocumentableList extends Component {
1418 this . render ( this . props ) ;
1519 }
1620
17- toggleElementDatasetVisibility ( condition , element ) {
18- if ( condition ) {
19- element . dataset . visibility = true ;
20- } else {
21- element . dataset . visibility = false ;
22- }
21+ toggleElementDatasetVisibility ( isVisible , ref ) {
22+ ref . dataset . visibility = isVisible
2323 }
2424
2525 toggleDisplayStyles ( condition , ref , onVisibleStyle ) {
26- if ( condition ) {
27- ref . style . display = onVisibleStyle ;
28- } else {
29- ref . style . display = "none" ;
30- }
26+ ref . style . display = condition ? onVisibleStyle : 'none'
3127 }
3228
3329 render ( { filter } ) {
34- this . state . list . sectionsRefs . map ( ( sectionRef ) => {
30+ this . state . list . sectionsRefs . map ( sectionRef => {
3531 const tabRef = this . state . list . getTabRefFromSectionRef ( sectionRef ) ;
3632
3733 const isTabVisible = this . state . list
3834 . getSectionListRefs ( sectionRef )
3935 . filter ( ( listRef ) => {
4036 const isListVisible = this . state . list
4137 . getSectionListElementsRefs ( listRef )
42- . map ( ( elementRef ) => this . state . list . mapListElementRef ( elementRef ) )
43- . filter ( ( elementData ) => {
44- const isElementVisible = this . state . list . isElementVisible (
45- elementData ,
46- filter
47- ) ;
48-
49- this . toggleDisplayStyles (
50- isElementVisible ,
51- elementData . ref ,
52- "table"
53- ) ;
54- this . toggleElementDatasetVisibility (
55- isElementVisible ,
56- elementData . ref
57- ) ;
38+ . map ( elementRef => this . state . list . toListElement ( elementRef ) )
39+ . filter ( elementData => {
40+ const isElementVisible = this . state . list . isElementVisible ( elementData , filter ) ;
41+
42+ this . toggleDisplayStyles ( isElementVisible , elementData . ref , "table" ) ;
43+ this . toggleElementDatasetVisibility ( isElementVisible , elementData . ref ) ;
44+
5845 return isElementVisible ;
5946 } ) . length ;
6047
@@ -68,83 +55,104 @@ class DocumentableList extends Component {
6855 }
6956}
7057
71- class List {
72- filterTab ( name ) {
73- return name !== "Linear supertypes" && name !== "Known subtypes" && name !== "Type hierarchy"
74- }
58+ /**
59+ * @typedef { { ref: Element; name: string; description: string } } ListElement
60+ */
7561
62+ class List {
63+ /**
64+ * @param tabsRef { Element[] }
65+ * @param sectionRefs { Element[] }
66+ */
7667 constructor ( tabsRef , sectionRefs ) {
7768 this . _tabsRef = tabsRef ;
7869 this . _sectionRefs = sectionRefs ;
7970 }
8071
8172 get tabsRefs ( ) {
82- return this . _tabsRef . filter ( ( tabRef ) => this . filterTab ( this . _getTogglable ( tabRef ) ) ) ;
73+ return this . _tabsRef . filter ( tabRef => this . filterTab ( this . _getTogglable ( tabRef ) ) ) ;
8374 }
8475
8576 get sectionsRefs ( ) {
86- return this . _sectionRefs . filter ( ( sectionRef ) => this . filterTab ( this . _getTogglable ( sectionRef ) ) ) ;
77+ return this . _sectionRefs . filter ( sectionRef => this . filterTab ( this . _getTogglable ( sectionRef ) ) ) ;
8778 }
8879
80+ /**
81+ * @param name { string }
82+ */
83+ filterTab ( name ) {
84+ return name !== "Linear supertypes" && name !== "Known subtypes" && name !== "Type hierarchy"
85+ }
86+
87+ /**
88+ * @param sectionRef { Element }
89+ */
8990 getTabRefFromSectionRef ( sectionRef ) {
9091 return this . tabsRefs . find (
9192 ( tabRef ) => this . _getTogglable ( tabRef ) === this . _getTogglable ( sectionRef )
9293 ) ;
9394 }
9495
96+ /**
97+ * @param sectionRef { Element }
98+ * @returns { Element[] }
99+ */
95100 getSectionListRefs ( sectionRef ) {
96101 return findRefs ( ".documentableList" , sectionRef ) ;
97102 }
98103
104+ /**
105+ * @param listRef { Element }
106+ * @returns { Element[] }
107+ */
99108 getSectionListElementsRefs ( listRef ) {
100109 return findRefs ( ".documentableElement" , listRef ) ;
101110 }
102111
103- mapListElementRef ( elementRef ) {
112+ /**
113+ * @param elementRef { Element }
114+ * @returns { ListElement }
115+ */
116+ toListElement ( elementRef ) {
104117 return {
105118 ref : elementRef ,
106119 name : getElementTextContent ( getElementNameRef ( elementRef ) ) ,
107120 description : getElementTextContent ( getElementDescription ( elementRef ) ) ,
108121 } ;
109122 }
110123
124+ /**
125+ * @param elementData { ListElement }
126+ * @param filter { Filter }
127+ */
111128 isElementVisible ( elementData , filter ) {
112- if ( ! this . _areFiltersFromElementSelected ( elementData , filter ) ) {
129+ if ( ! areFiltersFromElementSelected ( elementData , filter ) ) {
113130 return false ;
131+ } else {
132+ return includesInputValue ( elementData , filter ) ;
114133 }
115- return this . _includesInputValue ( elementData , filter ) ;
116- }
117134
118- _includesInputValue = ( elementData , filter ) => {
119- if ( elementData . name . includes ( filter . value ) ) {
120- return true ;
135+ function includesInputValue ( ) {
136+ return elementData . name . includes ( filter . value ) || elementData . description . includes ( filter . value ) ;
121137 }
122- return elementData . description . includes ( filter . value ) ;
123- } ;
124-
125- _areFiltersFromElementSelected ( elementRef , filter ) {
126- const dataset = this . _getCorrectDatasetFromElement ( elementRef ) ;
127- return dataset . length
128- ? this . _hasCorrespodingFilters ( dataset , filter . filters )
129- : true ;
130- }
131-
132- _hasCorrespodingFilters = ( dataset , filters ) =>
133- dataset . every ( ( [ key , value ] ) => {
134- const filterGroup = filters [ key ] ;
135- return this . _splitByComma ( value ) . every (
136- ( val ) => filterGroup && filterGroup [ val ] . selected
137- ) ;
138- } ) ;
139138
140- _getCorrectDatasetFromElement = ( elementRef ) =>
141- Object . entries ( elementRef . ref . dataset ) . filter ( ( [ key ] ) =>
142- this . _startsWithF ( key )
143- ) ;
139+ function areFiltersFromElementSelected ( ) {
140+ /** @type {[key: string, value: string][] } */
141+ const dataset = Object . entries ( elementData . ref . dataset ) . filter ( ( [ key ] ) => startsWith ( key , "f" ) ) ;
144142
145- _splitByComma = ( str ) => str . split ( "," ) ;
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+ } ) ;
146148
147- _startsWithF = ( str ) => startsWith ( str , "f" ) ;
149+ return dataset . length ? hasCorrespondingFilters ( ) : true ;
150+ }
151+ }
148152
149- _getTogglable = ( elementRef ) => elementRef . dataset . togglable ;
153+ /**
154+ * @param elementData { ListElement }
155+ */
156+ _getTogglable = elementData => elementData . dataset . togglable ;
150157}
158+
0 commit comments