@@ -4,6 +4,7 @@ var hexSearch = {
4
4
state : {
5
5
availableLibrariesDom : document . querySelector ( ".js-hex-search-available-libraries" ) ,
6
6
aleLibrariesDom : document . querySelector ( ".js-elixir-ale-libraries" ) ,
7
+ searchedLibs : [ "circuits_uart" , "circuits_i2c" , "circuits_gpio" , "circuits_spi" , "nerves_uart" , "elixir_ale" ] ,
7
8
i2cLibraries : [ ] ,
8
9
spiLibraries : [ ] ,
9
10
gpioLibraries : [ ] ,
@@ -15,52 +16,24 @@ var hexSearch = {
15
16
} ,
16
17
17
18
init : function ( ) {
18
- var libraries = [ "circuits_uart" , "circuits_i2c" , "circuits_gpio" , "circuits_spi" , "nerves_uart" , "elixir_ale" ] ;
19
-
20
- for ( var i = 0 ; i < libraries . length ; i ++ ) {
21
- this . update ( "search" , libraries [ i ] , this . state ) ;
22
- }
19
+ this . update ( "search" , null , this . state ) ;
23
20
} ,
24
21
25
22
update : function ( update_command , updateData , state ) {
26
23
switch ( update_command ) {
27
24
case "search" :
28
- this . update ( "search_response" , [ this . search ( updateData ) , updateData ] , state ) ;
25
+ this . update ( "search_response" , this . search ( state ) , state ) ;
29
26
break ;
30
27
case "search_response" :
31
- var libSearched = updateData [ 1 ] ;
32
- updateData [ 0 ]
33
- . then ( function ( response ) {
34
- for ( var i = 0 ; i < response . data . length ; i ++ ) {
35
- var lib = {
36
- name : response . data [ i ] . name ,
37
- url : response . data [ i ] . html_url ,
38
- description : response . data [ i ] . meta . description ,
39
- } ;
40
-
41
- if ( libSearched === "circuits_i2c" ) {
42
- state . i2cLibraries . push ( lib ) ;
43
- }
44
-
45
- if ( libSearched === "circuits_gpio" ) {
46
- state . gpioLibraries . push ( lib ) ;
47
- }
48
-
49
- if ( libSearched === "circuits_spi" ) {
50
- state . gpioLibraries . push ( lib ) ;
51
- }
52
-
53
- if ( libSearched === "circuits_uart" ) {
54
- state . uartLibraries . push ( lib ) ;
55
- }
56
-
57
- if ( libSearched === "nerves_uart" ) {
58
- state . nervesUartLibraries . push ( lib ) ;
59
- }
60
-
61
- if ( libSearched === "elixir_ale" ) {
62
- state . aleLibraries . push ( lib ) ;
63
- }
28
+ updateData
29
+ . then ( function ( responses ) {
30
+ // assumes that the keys to the reponse
31
+ // object is the same as the keys in
32
+ // our state model for the libraries
33
+ var libs = Object . keys ( responses ) ;
34
+
35
+ for ( var i = 0 ; i < libs . length ; i ++ ) {
36
+ state [ libs [ i ] ] = responses [ libs [ i ] ] ;
64
37
}
65
38
66
39
this . update ( "updateDom" , null , state ) ;
@@ -79,11 +52,47 @@ var hexSearch = {
79
52
}
80
53
} ,
81
54
82
- search : function ( libraryName ) {
55
+ search : function ( state ) {
56
+ var libReqs = [ ] ;
57
+
58
+ for ( var i = 0 ; i < state . searchedLibs . length ; i ++ ) {
59
+ libReqs . push ( this . searchLib ( state . searchedLibs [ i ] ) ) ;
60
+ }
61
+
62
+ return axios . all ( libReqs )
63
+ . then ( axios . spread ( function ( cuart , i2c , gpio , spi , nuart , ale ) {
64
+ var responses = {
65
+ uartLibraries : this . libsFromResponse ( cuart . data ) ,
66
+ i2cLibraries : this . libsFromResponse ( i2c . data ) ,
67
+ gpioLibraries : this . libsFromResponse ( gpio . data ) ,
68
+ spiLibraries : this . libsFromResponse ( spi . data ) ,
69
+ nervesUartLibraries : this . libsFromResponse ( nuart . data ) ,
70
+ aleLibraries : this . libsFromResponse ( ale . data ) ,
71
+ } ;
72
+
73
+ return responses ;
74
+ } . bind ( this ) ) . bind ( this ) ) ;
75
+ } ,
76
+
77
+ searchLib : function ( libraryName ) {
83
78
return axios
84
79
. get ( "https://hex.pm/api/packages?search=depends%3A" + libraryName )
85
80
} ,
86
81
82
+ libsFromResponse : function ( responseData ) {
83
+ var libs = [ ] ;
84
+
85
+ for ( var i = 0 ; i < responseData . length ; i ++ ) {
86
+ libs . push ( {
87
+ name : responseData [ i ] . name ,
88
+ url : responseData [ i ] . html_url ,
89
+ description : responseData [ i ] . meta . description ,
90
+ } ) ;
91
+ }
92
+
93
+ return libs ;
94
+ } ,
95
+
87
96
updateDom : function ( state ) {
88
97
var ul = document . createElement ( "ul" ) ;
89
98
ul . classList . add ( "flex-container" ) ;
0 commit comments