1
1
/**
2
2
* ------------------------------------------------------------
3
- * Les Petits Plats components/V2 .js
3
+ * Les Petits Plats components/MainSearchBarMatches .js
4
4
* ------------------------------------------------------------
5
5
*/
6
6
7
- class V2 extends MainSearchBar {
7
+ class MainSearchBarMatches extends MainSearchBar {
8
8
constructor ( ) {
9
9
super ( ) ;
10
10
}
11
11
12
12
/**
13
- * Slices main array into chunks
14
- * Returns matching data of all trunks
13
+ * Returns matching data in a specific order
14
+ * By slicing main array into chunks
15
15
* @param {Event & {eventTargetValue: HTMLInputElement} } eventTargetValue
16
16
* @param {Array } mainArray - Data array from API
17
- * @param {number } size - size of mainArray trunks
17
+ * @param {number } size - size of mainArray chunks
18
18
* @returns matchingDataArray
19
19
*/
20
- isUserValueMatchesByV2 ( eventTargetValue , mainArray , size ) {
20
+ isDataSearchMatches ( eventTargetValue , mainArray , size ) {
21
21
22
22
let chunks = [ ] ;
23
+ let isMatches = [ ] ;
23
24
25
+ // List of chunks
24
26
this . sliceMainArrayIntoChunks ( mainArray , size , chunks ) ;
25
27
28
+ // Array of specific order
26
29
const searchOrder = this . updateIndexesOrder ( chunks ) ;
27
30
28
- // console.log(chunks)
29
- // console.log(searchOrder)
30
-
31
- let isMatches = [ ] ;
32
-
33
- isMatches . push (
34
- this . searchMatchingData ( chunks , 0 , searchOrder , eventTargetValue ) ,
35
- this . searchMatchingData ( chunks , 1 , searchOrder , eventTargetValue ) ,
36
- this . searchMatchingData ( chunks , 2 , searchOrder , eventTargetValue ) ,
37
- this . searchMatchingData ( chunks , 3 , searchOrder , eventTargetValue ) ,
38
- this . searchMatchingData ( chunks , 4 , searchOrder , eventTargetValue ) ) ;
31
+ // Searchs matching data inside each current chunk in specific order
32
+ for ( let i = 0 ; i < chunks . length ; i ++ ) {
33
+ isMatches . push ( this . searchMatchingData ( chunks , i , searchOrder , eventTargetValue ) ) ;
34
+ }
39
35
40
36
return isMatches . flat ( ) ;
41
37
}
42
38
43
- searchMatchingData ( array , index , order , eventTargetValue ) {
44
- let isMatches ;
45
-
46
- const indexArray = order [ index ] ;
47
-
48
- const currentArray = array [ indexArray ] ;
49
-
50
- isMatches = this . isChunkMatches ( eventTargetValue , currentArray ) ;
51
-
52
- return isMatches ;
53
- }
54
-
55
- isChunkMatches ( expression , array ) {
56
-
57
- const result = array . filter ( el => {
58
-
59
- const regExp = new RegExp ( expression , 'gmi' ) ;
60
-
61
- return el . search . match ( regExp ) ;
62
- } ) ;
63
-
64
- return result ;
65
- }
66
-
39
+ /**
40
+ * Returns chunks of mainArray
41
+ * @param {Array } mainArray - Data array from API
42
+ * @param {number } size - size of mainArray chunks
43
+ * @param {Array } chunks Chunks of mainArray
44
+ * @returns chunks
45
+ */
67
46
sliceMainArrayIntoChunks ( mainArray , size , chunks ) {
68
47
69
48
for ( let i = 0 ; i < mainArray . length ; i += size ) {
@@ -74,6 +53,12 @@ class V2 extends MainSearchBar {
74
53
return chunks ;
75
54
}
76
55
56
+ /**
57
+ * Returns a specific search order
58
+ * Based on chunks length
59
+ * @param {Array } chunks Chunks of mainArray
60
+ * @returns {Array | number } searchOrder
61
+ */
77
62
updateIndexesOrder ( chunks ) {
78
63
79
64
let searchOrder = [ ] ;
@@ -90,6 +75,11 @@ class V2 extends MainSearchBar {
90
75
return searchOrder ;
91
76
}
92
77
78
+ /**
79
+ * Returns a specific search order
80
+ * @param {Array } array
81
+ * @returns {Array | number } result
82
+ */
93
83
moveSearchOrderIndex ( array ) {
94
84
let result = [ ] ;
95
85
const middle = Math . floor ( array . length / 2 ) ;
@@ -106,4 +96,43 @@ class V2 extends MainSearchBar {
106
96
107
97
return result ;
108
98
}
99
+
100
+ /**
101
+ * Returns matching data inside current chunk
102
+ * @param {Array } array Chunks of main array
103
+ * @param {number } index Index of order
104
+ * @returns {Array | number } order
105
+ * @param {Event & {eventTargetValue: HTMLInputElement} } eventTargetValue
106
+ * @returns isMatches
107
+ */
108
+ searchMatchingData ( array , index , order , eventTargetValue ) {
109
+
110
+ let isMatches ;
111
+
112
+ const indexArray = order [ index ] ;
113
+
114
+ const currentChunk = array [ indexArray ] ;
115
+
116
+ isMatches = this . isChunkMatches ( eventTargetValue , currentChunk ) ;
117
+
118
+ return isMatches ;
119
+ }
120
+
121
+ /**
122
+ * Returns matching data of a main array chunk
123
+ * @param {string } expression
124
+ * @param {Array } array Current chunk
125
+ * @returns result
126
+ */
127
+ isChunkMatches ( expression , array ) {
128
+
129
+ const result = array . filter ( el => {
130
+
131
+ const regExp = new RegExp ( expression , 'gmi' ) ;
132
+
133
+ return el . search . match ( regExp ) ;
134
+ } ) ;
135
+
136
+ return result ;
137
+ }
109
138
}
0 commit comments