@@ -109,6 +109,24 @@ async function getData() {
109109 }
110110}
111111
112+ function getParams ( ) {
113+ // Get the params from the current URL
114+ const url = window . location . search ;
115+ const urlParams = new URLSearchParams ( url ) ;
116+ var enabledParams = { 'categories' : { } , 'filters' : { } } ;
117+ enabledParams . categories . tier = urlParams . getAll ( "tier" ) ;
118+ enabledParams . filters . tier = "and" ;
119+ enabledParams . categories . industries = urlParams . getAll ( "industries" ) ;
120+ enabledParams . filters . industries = urlParams . get ( "industries_filter" ) ;
121+ enabledParams . categories . rh_products = urlParams . getAll ( "rh_products" ) ;
122+ enabledParams . filters . rh_products = urlParams . get ( "rh_products_filter" ) ;
123+ enabledParams . categories . other_products = urlParams . getAll ( "other_products" ) ;
124+ enabledParams . filters . other_products = urlParams . get ( "other_products" ) ;
125+ // console.log(urlParams.get['tier']);
126+ // var tier = urlParams['tier'].split("|");
127+ return enabledParams ;
128+ }
129+
112130function cleanString ( string ) {
113131 // Provide a string that can be used as a HTML id i.e. no spaces.
114132 return string . replace ( / / g, "-" )
@@ -190,25 +208,32 @@ function renderSpinner() {
190208 '</div>' ;
191209}
192210
193- function renderFilterItem ( type , name , linkTitle ) {
211+ function renderFilterItem ( type , name , linkTitle , enabledItem ) {
194212 // HTML for each checkbox item in the filters
213+ if ( enabledItem ) {
214+ checkedProp = "checked" ;
215+ } else {
216+ checkedProp = ""
217+ }
195218 var filterItemHtml = '<label class="pf-c-check pf-c-select__menu-item" for="' + type + ':' + cleanString ( name ) + '">' +
196- '<input class="pf-c-check__input" type="checkbox" id="' + type + ':' + cleanString ( name ) + '"' + 'onclick="filterSelection()" name="' + linkTitle + '"/>' +
219+ '<input class="pf-c-check__input" type="checkbox" id="' + type + ':' + cleanString ( name ) + '"' + 'onclick="filterSelection()" name="' + linkTitle + '" ' + checkedProp + ' />' +
197220 '<span class="pf-c-check__label wrappable">' + linkTitle + '</span>' +
198221 '</label>' ;
199222 return filterItemHtml ;
200223}
201224
202- function renderFilterButtons ( filterButtonTypes , name ) {
225+ function renderFilterButtons ( filterButtonTypes , name , enabledFilters ) {
203226 // HTML for the AND / OR operator buttons
204227 if ( filterButtonTypes . length > 1 ) {
205228 var filterButtonsHtml = '<div class="pf-c-toggle-group pf-m-compact">' ;
206229 var firstSelected = "" ;
207230 for ( item = 0 ; item < filterButtonTypes . length ; item ++ ) {
208- firstSelected = "" ;
209- if ( item == 0 ) { firstSelected = " pf-m-selected" ; }
231+ selected = "" ;
232+ if ( enabledFilters == filterButtonTypes [ item ] . toLowerCase ( ) ) {
233+ selected = " pf-m-selected" ;
234+ } ;
210235 filterButtonsHtml += '<div class="pf-c-toggle-group__item">' +
211- '<button class="pf-c-toggle-group__button' + firstSelected + '" type="button" id="' + name + "_button:" + filterButtonTypes [ item ] . toLowerCase ( ) + '" onclick="changeFilterType(this.id)">' +
236+ '<button class="pf-c-toggle-group__button' + selected + '" type="button" id="' + name + "_button:" + filterButtonTypes [ item ] . toLowerCase ( ) + '" onclick="changeFilterType(this.id)">' +
212237 '<span class="pf-c-toggle-group__text">' + filterButtonTypes [ item ] + '</span>' +
213238 '</button>' +
214239 '</div>'
@@ -219,13 +244,21 @@ function renderFilterButtons(filterButtonTypes, name) {
219244 return "" ;
220245}
221246
222- function renderFilter ( elementId , filterType , filterData ) {
247+ function renderFilter ( elementId , filterType , filterData , enabledParams , enabledFilters ) {
223248 // HTML to render all filters
224249 const element = document . getElementById ( elementId ) ;
225250 for ( item = 0 ; item < filterData . filter_list . length ; item ++ ) {
226- element . innerHTML += renderFilterItem ( filterType , filterData . filter_list [ item ] . Name , filterData . filter_list [ item ] . LinkTitle ) ;
251+ if ( enabledParams . includes ( filterData . filter_list [ item ] . Name ) ) {
252+ enabledItem = true ;
253+ } else {
254+ enabledItem = false ;
255+ }
256+ element . innerHTML += renderFilterItem ( filterType , filterData . filter_list [ item ] . Name , filterData . filter_list [ item ] . LinkTitle , enabledItem ) ;
227257 } ;
228- element . innerHTML += renderFilterButtons ( filterData . filter_types , filterType ) ;
258+ if ( ! enabledFilters ) {
259+ enabledFilters = "and" ;
260+ }
261+ element . innerHTML += renderFilterButtons ( filterData . filter_types , filterType , enabledFilters ) ;
229262}
230263
231264function renderLabel ( tier , tier_categories ) {
@@ -303,6 +336,7 @@ function filterSelection(filter) {
303336 const patternsData = getData ( )
304337 patternsData . then ( output => {
305338 renderFilteredCards ( output . patterns , output . filter_categories )
339+ updateURL ( output . filter_categories )
306340 } ) ;
307341}
308342
@@ -322,16 +356,43 @@ function changeFilterType(id) {
322356 const selectButton = document . getElementById ( id ) ;
323357 selectButton . classList . add ( "pf-m-selected" ) ;
324358 renderFilteredCards ( output . patterns , output . filter_categories )
359+ updateURL ( output . filter_categories )
325360 } ) ;
326361}
327362
363+ function updateURL ( filter_categories ) {
364+ var updatedUrl = new URL ( window . location . pathname , window . location . origin ) ;
365+ const patternsFilter = new Filter ( filter_categories ) ;
366+ var enabledParams = { } ;
367+ console . log ( patternsFilter ) ;
368+ for ( var key in patternsFilter . filter_values ) {
369+ var values = patternsFilter . filter_values [ key ] ;
370+ for ( const value of values ) {
371+ var category = patternsFilter . filter_categories [ key ] ;
372+ var found = category . filter_list . find ( ( element ) => element . LinkTitle == value ) ;
373+ updatedUrl . searchParams . append ( key , found . Name ) ;
374+ }
375+ }
376+ console . log ( patternsFilter . filter_types ) ;
377+ for ( var type_key in patternsFilter . filter_types ) {
378+ var type_value = patternsFilter . filter_types [ type_key ] ;
379+ console . log ( type_key )
380+ console . log ( type_value )
381+ if ( type_value == "or" ) {
382+ updatedUrl . searchParams . append ( type_key + "_filter" , "or" ) ;
383+ }
384+ }
385+ history . pushState ( { } , null , updatedUrl . href ) ;
386+ }
387+
328388
329389// Initialize the filters and pattern cards when the page loads
330- const patternsData = getData ( )
390+ const patternsData = getData ( ) ;
391+ const enabledParams = getParams ( ) ;
331392patternsData . then ( output => {
332- renderFilter ( "TiersItems" , "tier" , output . filter_categories . tier ) ;
333- renderFilter ( "IndustriesItems" , "industries" , output . filter_categories . industries ) ;
334- renderFilter ( "RhProductsItems" , "rh_products" , output . filter_categories . rh_products ) ;
335- renderFilter ( "OtherProductsItems" , "other_products" , output . filter_categories . other_products ) ;
393+ renderFilter ( "TiersItems" , "tier" , output . filter_categories . tier , enabledParams . categories . tier , enabledParams . filters . tier ) ;
394+ renderFilter ( "IndustriesItems" , "industries" , output . filter_categories . industries , enabledParams . categories . industries , enabledParams . filters . industries ) ;
395+ renderFilter ( "RhProductsItems" , "rh_products" , output . filter_categories . rh_products , enabledParams . categories . rh_products , enabledParams . filters . rh_products ) ;
396+ renderFilter ( "OtherProductsItems" , "other_products" , output . filter_categories . other_products , enabledParams . categories . other_products , enabledParams . filters . other_products ) ;
336397 renderFilteredCards ( output . patterns , output . filter_categories )
337398} ) ;
0 commit comments