@@ -88,7 +88,7 @@ const isLoading = ref<boolean>(false)
88
88
const isMobile = ref <boolean >(false )
89
89
const hasMore = ref (true ) // Flag to control infinite scroll
90
90
const sectionTeaserListElem = ref (null ) // Element intersection target to unstick filters
91
- const makeFiltersSticky = ref (true )
91
+ const makeFiltersSticky = ref (false )
92
92
93
93
// Window Size Handling
94
94
const { width } = useWindowSize ()
@@ -108,11 +108,17 @@ watch([width, bottom], ([newWidth, newBottom]) => {
108
108
from the top edge of the viewport, unstick the filters */
109
109
if ((isMobile .value && bottom .value <= 250 )) {
110
110
makeFiltersSticky .value = false
111
- } else {
111
+ } else if ( isMobile . value ) {
112
112
makeFiltersSticky .value = true
113
+ } else {
114
+ makeFiltersSticky .value = false
113
115
}
114
116
}, { immediate: true })
115
117
118
+ const stickyClass = computed (() => {
119
+ return makeFiltersSticky .value ? ' is-sticky' : ' '
120
+ })
121
+
116
122
// Handle screen transitions
117
123
function handleScreenTransition() {
118
124
if (isMobile .value ) {
@@ -261,7 +267,7 @@ async function searchES() {
261
267
const size = 10
262
268
let results: any = {}
263
269
264
- if (! isMobile . value || userViewSelection .value === ' list' ) {
270
+ if (userViewSelection .value === ' list' ) {
265
271
const { paginatedSearchFilters } = useListSearchFilter ()
266
272
results = await paginatedSearchFilters (page , size , ' ftvaEvent' , userFilterSelection .value , userDateSelection .value , ' startDate' , ' asc' )
267
273
} else {
@@ -487,10 +493,12 @@ const parseFirstEventMonth = computed(() => {
487
493
theme =" paleblue"
488
494
:section-title =" heading.titleGeneral"
489
495
/>
490
-
491
- <SectionWrapper theme =" paleblue" >
496
+ <SectionWrapper
497
+ ref =" el"
498
+ theme =" paleblue"
499
+ >
492
500
<TabList
493
- v-if = " !isMobile "
501
+ :class = " stickyClass "
494
502
alignment =" right"
495
503
:initial-tab =" parseViewSelection"
496
504
>
@@ -526,15 +534,15 @@ const parseFirstEventMonth = computed(() => {
526
534
>
527
535
<template v-if =" parsedEvents && parsedEvents .length > 0 " >
528
536
<SectionTeaserList
537
+ ref =" sectionTeaserListElem"
529
538
:items =" parsedEvents"
530
539
component-name =" BlockCardThreeColumn"
531
- :n-shown =" 10 "
540
+ :n-shown =" parsedEvents.length "
532
541
class =" tabbed-event-list"
533
542
data-test =" tabbed-content"
534
543
/>
535
-
536
544
<section-pagination
537
- v-if =" totalPages !== 1"
545
+ v-if =" totalPages !== 1 && !isMobile "
538
546
:pages =" totalPages"
539
547
:initial-current-page =" currentPage"
540
548
/>
@@ -560,7 +568,7 @@ const parseFirstEventMonth = computed(() => {
560
568
class =" tab-content"
561
569
data-test =" calendar-view"
562
570
>
563
- <template v-if =" parsedEvents && parsedEvents .length > 0 " >
571
+ <template v-if =" ! isMobile && parsedEvents && parsedEvents .length > 0 " >
564
572
<div style =" display : flex ;justify-content : center ;" >
565
573
<base-calendar
566
574
:events =" parsedEvents"
@@ -586,65 +594,6 @@ const parseFirstEventMonth = computed(() => {
586
594
</template >
587
595
</TabItem >
588
596
</TabList >
589
- <div
590
- v-else
591
- ref =" el"
592
- class =" mobile-container"
593
- >
594
- <div
595
- class =" mobile-filters-outer-wrapper"
596
- :class =" { 'is-sticky': makeFiltersSticky }"
597
- >
598
- <div class =" filters-wrapper" >
599
- <date-filter
600
- :key =" dateListDateFilter"
601
- :event-dates =" dateListDateFilter"
602
- :initial-dates =" parsedInitialDates"
603
- data-test =" date-filter"
604
- @input-selected =" applyDateFilterSelectionToRouteURL"
605
- />
606
- <filters-dropdown
607
- v-model:selected-filters =" userFilterSelection"
608
- :filter-groups =" searchFilters"
609
- data-test =" filters-dropdown"
610
- @update-display =" applyEventFilterSelectionToRouteURL"
611
- />
612
- </div >
613
- <section-remove-search-filter
614
- v-if =" Object.keys(allFilters).length > 0"
615
- :filters =" allFilters"
616
- class =" remove-filters"
617
- @update:filters =" handleFilterUpdate"
618
- @remove-selected =" applyChangesToSearch"
619
- />
620
- </div >
621
- <SectionTeaserList
622
- v-if =" parsedEvents && parsedEvents.length > 0"
623
- ref =" sectionTeaserListElem"
624
- :items =" parsedEvents"
625
- component-name =" BlockCardThreeColumn"
626
- :n-shown =" events.length"
627
- class =" tabbed-event-list"
628
- data-test =" tabbed-content"
629
- />
630
- <div
631
- v-else
632
- class =" tab-content"
633
- >
634
- <p
635
- v-if =" noResultsFound"
636
- class =" empty-tab"
637
- >
638
- There are no events found
639
- </p >
640
- <p
641
- v-else
642
- class =" empty-tab"
643
- >
644
- Data loading in progress ...
645
- </p >
646
- </div >
647
- </div >
648
597
</SectionWrapper >
649
598
</div >
650
599
</main >
@@ -680,18 +629,26 @@ const parseFirstEventMonth = computed(() => {
680
629
681
630
:deep(.tab-list-body ) {
682
631
background : none ;
632
+ margin-top : 0 ;
683
633
}
684
634
685
635
:deep(.tab-list.right ) {
686
636
justify-content : space-between ;
687
637
width : 100% ;
688
- margin -bottom : 20px ;
638
+ padding -bottom : 20px ;
689
639
690
640
.filters {
691
641
flex-basis : 65% ;
692
642
}
693
643
}
694
644
645
+ :deep(.tab-list ) {
646
+ & .is-sticky {
647
+ position : static ;
648
+ /* Default position */
649
+ }
650
+ }
651
+
695
652
.filters-wrapper {
696
653
display : flex ;
697
654
justify-content : flex-start ;
@@ -795,17 +752,29 @@ const parseFirstEventMonth = computed(() => {
795
752
}
796
753
797
754
@media #{$medium } {
798
- .mobile-filters-outer-wrapper {
799
- padding-bottom : 20px ;
800
-
755
+ :deep (.tab-list ) {
801
756
&.is- sticky {
757
+ position : -webkit-sticky ;
758
+ /* For Safari */
802
759
position : sticky ;
803
760
top : 65px ;
804
- z-index : 100 ;
761
+ z-index : 1000 ;
805
762
background-color : var (--pale-blue );
806
763
}
807
764
}
808
765
766
+ .tab-content {
767
+ overflow : unset ;
768
+ }
769
+
770
+ :deep(.tab-list-header ) {
771
+ display : none ;
772
+ }
773
+
774
+ :deep(.tab-list.right .filters ) {
775
+ flex-basis : 100% ;
776
+ }
777
+
809
778
.date-filter {
810
779
:deep (.vue-date-picker ) {
811
780
.dp__outer_menu_wrap.dp--menu-wrapper {
@@ -816,7 +785,6 @@ const parseFirstEventMonth = computed(() => {
816
785
}
817
786
818
787
@media #{$small } {
819
-
820
788
.date-filter {
821
789
:deep (.vue-date-picker ) {
822
790
width : unset ;
0 commit comments