1
- import React , { useEffect } from 'react' ;
1
+ import React , { useEffect , useState } from 'react' ;
2
2
import Divider from '@material-ui/core/Divider' ;
3
3
import Drawer from '@material-ui/core/Drawer' ;
4
4
import Hidden from '@material-ui/core/Hidden' ;
@@ -33,6 +33,7 @@ function FilterNavBar(props) {
33
33
const selectedSort = useSelector ( state => state . selectSortReducer )
34
34
const selectedPage = useSelector ( state => state . selectPageReducer )
35
35
const dispatch = useDispatch ( )
36
+ const [ loadOnlyProducts , setLoadOnlyProducts ] = useState ( false )
36
37
37
38
/**
38
39
* multiple selected options IDs are appended
@@ -301,49 +302,52 @@ function FilterNavBar(props) {
301
302
302
303
const { oldQuery, newQuery} = selectedFilterAttributes ;
303
304
304
- let dispatchQueryForProducts = null
305
+ // this means we are seeing new URL
306
+ if ( ! oldQuery || ( oldQuery && oldQuery . localeCompare ( newQuery ) === 0 ) ) {
307
+ return
308
+ }
309
+
305
310
let queryFromURL = history . location . search
306
311
307
312
log . info ( `[FilterNavBar] filter selection hook oldQuery = ${ oldQuery } , newQuery = ${ newQuery } , queryFromURL = ${ queryFromURL } ` )
308
313
if ( ! newQuery ) {
309
- log . info ( `[FilterNavBar] filter selection hook oldQuery = ${ oldQuery } , newQuery = ${ newQuery } ` )
314
+ log . info ( `[FilterNavBar] updating states for filter selection hook ` )
310
315
311
316
// on filter selection scenario
312
317
let queryPreparedFromFilters = prepareQuery ( )
313
318
314
319
props . loadFilterAttributes ( queryPreparedFromFilters ) . then ( data => {
315
- dispatchSortList ( data )
316
- } )
317
-
318
- // set new query
319
- dispatch ( {
320
- type : ADD_SELECTED_CATEGORY ,
321
- payload : { newQuery : queryPreparedFromFilters }
322
- } )
323
-
324
- // by default first page should be selected.
325
- if ( selectedPage . pageNumber > 1 ) {
326
- log . info ( `[FilterNavBar] filter selection hook dispatching selectedPage = ${ JSON . stringify ( selectedPage ) } ` )
320
+ if ( ! data ) {
321
+ log . error ( `[FilterNavBar] loadFilterAttributes failed. No data found.` )
322
+ return
323
+ }
327
324
325
+ dispatchSortList ( data )
326
+ // set new query
328
327
dispatch ( {
329
- type : SELECT_PRODUCT_PAGE ,
330
- payload : {
331
- pageNumber : 1 ,
332
- maxProducts : MAX_PRODUCTS_PER_PAGE ,
333
- isLoadedFromURL : false
334
- }
328
+ type : ADD_SELECTED_CATEGORY ,
329
+ payload : { newQuery : queryPreparedFromFilters }
335
330
} )
336
- } else {
337
- dispatchQueryForProducts = queryPreparedFromFilters
338
- }
339
- }
340
331
341
- if ( dispatchQueryForProducts ) {
342
- log . info ( `[FilterNavBar] filter selection hook dispatchQueryForProducts = ${ dispatchQueryForProducts } ` )
332
+ // by default first page should be selected.
333
+ if ( selectedPage . pageNumber > 1 ) {
334
+ log . info ( `[FilterNavBar] filter selection hook dispatching selectedPage = ${ JSON . stringify ( selectedPage ) } ` )
343
335
344
- dispatch ( {
345
- type : SAVE_QUERY_STATUS ,
346
- payload : dispatchQueryForProducts
336
+ dispatch ( {
337
+ type : SELECT_PRODUCT_PAGE ,
338
+ payload : {
339
+ pageNumber : 1 ,
340
+ maxProducts : MAX_PRODUCTS_PER_PAGE ,
341
+ isLoadedFromURL : false
342
+ }
343
+ } )
344
+ } else {
345
+ log . info ( `[FilterNavBar] filter selection hook dispatching SAVE_QUERY_STATUS = ${ queryPreparedFromFilters } ` )
346
+ dispatch ( {
347
+ type : SAVE_QUERY_STATUS ,
348
+ payload : queryPreparedFromFilters
349
+ } )
350
+ }
347
351
} )
348
352
}
349
353
@@ -355,29 +359,33 @@ function FilterNavBar(props) {
355
359
356
360
const { oldQuery, newQuery} = selectedFilterAttributes ;
357
361
358
- let dispatchQueryForProducts = null
359
362
let queryFromURL = history . location . search
360
363
361
364
log . info ( `[FilterNavBar] new URL hook oldQuery = ${ oldQuery } , newQuery = ${ newQuery } , queryFromURL = ${ queryFromURL } ` )
365
+
366
+ if ( loadOnlyProducts ) {
367
+ setLoadOnlyProducts ( false )
368
+ return
369
+ }
370
+
362
371
if ( ! oldQuery || newQuery . localeCompare ( queryFromURL ) !== 0 ) {
363
- log . info ( `[FilterNavBar] new URL hook oldQuery = ${ oldQuery } , newQuery = ${ newQuery } ` )
372
+ log . info ( `[FilterNavBar] updating states for new URL hook` )
364
373
365
374
// on links click from tabs
366
375
props . loadFilterAttributes ( queryFromURL ) . then ( data => {
376
+ if ( ! data ) {
377
+ log . error ( `[FilterNavBar] loadFilterAttributes failed. No data found.` )
378
+ return
379
+ }
380
+
367
381
dispatchFilterAttributesFromURL ( data , queryFromURL )
368
382
dispatchSortAttributeFromURL ( data , queryFromURL )
369
383
dispatchPageAttributeFromURL ( data , queryFromURL )
370
384
dispatchSortList ( data )
371
- } )
372
- dispatchQueryForProducts = queryFromURL
373
- }
374
-
375
- if ( dispatchQueryForProducts ) {
376
- log . info ( `[FilterNavBar] new URL hook dispatchQueryForProducts = ${ dispatchQueryForProducts } ` )
377
-
378
- dispatch ( {
379
- type : SAVE_QUERY_STATUS ,
380
- payload : dispatchQueryForProducts
385
+ dispatch ( {
386
+ type : SAVE_QUERY_STATUS ,
387
+ payload : queryFromURL
388
+ } )
381
389
} )
382
390
}
383
391
@@ -391,12 +399,14 @@ function FilterNavBar(props) {
391
399
log . info ( "[FilterNavBar] Component did mount selectedPage, selectedSort hook." )
392
400
393
401
if ( ! selectedPage . isLoadedFromURL || ! selectedSort . isLoadedFromURL ) {
394
- log . info ( " [FilterNavBar] selectedPage, selectedSort hook Preparing query for selectedPage and selectedSort." )
402
+ log . info ( ` [FilterNavBar] updating states for selectedPage, selectedSort hook` )
395
403
396
404
let query = prepareQuery ( )
397
405
log . info ( `[FilterNavBar] selectedPage, selectedSort hook dispatchQueryForProducts = ${ query } ` )
398
406
399
407
if ( query ) {
408
+ setLoadOnlyProducts ( true )
409
+
400
410
dispatch ( {
401
411
type : SAVE_QUERY_STATUS ,
402
412
payload : query
0 commit comments