11let siteList ;
2+ let resultsElement = document . querySelector ( '.search-autocomplete-results' ) ;
3+ const searchInput = document . querySelector ( '#site-search' ) ;
4+ searchInput . addEventListener ( 'keyup' , searchSitesAutocomplete ) ;
5+
6+ window . addEventListener ( 'mouseup' , function ( event ) {
7+ var dropdown = document . querySelector ( '.dropdown-menu' ) ;
8+ if ( event . target != dropdown && event . target . parentNode != dropdown ) {
9+ $ ( dropdown ) . hide ( ) ;
10+ }
11+ } ) ;
212
313/* ***** multi-use error handler *** */
414function participantSummaryErrorHandler ( err , divContainer ) {
@@ -10,6 +20,37 @@ function loadAllSitesCallback(result) {
1020 siteList = JSON . parse ( result ) . map ( ( item ) => { return { name : item . name , id : item . id , clientTypes : item . clientTypes } } ) ;
1121} ;
1222
23+ function setSearchValue ( searchText ) {
24+ document . querySelector ( '#site-search' ) . value = searchText ;
25+ $ ( resultsElement ) . hide ( ) ;
26+ $ ( '#doSearch' ) . click ( ) ;
27+ }
28+
29+ function searchSitesAutocomplete ( e ) {
30+
31+ searchString = searchInput . value ;
32+ const options = {
33+ threshold : .2 ,
34+ minMatchCharLength : 2 ,
35+ keys : [ 'id' , 'name' ]
36+ } ;
37+ const fuse = new Fuse ( siteList , options ) ;
38+ const result = fuse . search ( searchString ) . map ( ( site ) => {
39+ return `<a class="dropdown-item" href="#" onclick="setSearchValue('${ site . item . name } ')">${ site . item . name } (${ site . item . id } )</a>` ;
40+ } ) ;
41+
42+ let resultHtml = '' ;
43+ for ( let i = 0 ; i < result . length ; i ++ ) {
44+ resultHtml += result [ i ] ;
45+ }
46+ resultsElement . innerHTML = resultHtml ;
47+ if ( result . length > 0 ) {
48+ $ ( resultsElement ) . show ( ) ;
49+ } else {
50+ $ ( resultsElement ) . hide ( ) ;
51+ }
52+ }
53+
1354function rotateKeysetsCallback ( result , keyset_id ) {
1455 const resultJson = JSON . parse ( result ) ;
1556 const formatted = prettifyJson ( JSON . stringify ( resultJson ) ) ;
@@ -142,7 +183,7 @@ $(document).ready(() => {
142183
143184 $ ( '#doSearch' ) . on ( 'click' , ( ) => {
144185 $ ( '#siteSearchErrorOutput' ) . hide ( ) ;
145- const siteSearch = $ ( '#key ' ) . val ( ) ;
186+ const siteSearch = $ ( '#site-search ' ) . val ( ) ;
146187 let site = null ;
147188 if ( Number . isInteger ( Number ( siteSearch ) ) ) {
148189 const foundSite = siteList . find ( ( item ) => { return item . id === Number ( siteSearch ) } ) ;
0 commit comments