Skip to content

Commit 1a52187

Browse files
authored
refactor: APPS-3118 (#98)
* fix: refactor total pages * refactor: series index infinitescroll is now using only one scrollel and event listing refactor is still in porgress * feat: scroll and sticky code refactored * feat: updates to listing pages and package json component library version * fix: move section pagination only under list tab * feat: add gap/space between pills and scrolling content
1 parent 9a10327 commit 1a52187

File tree

5 files changed

+67
-194
lines changed

5 files changed

+67
-194
lines changed

nuxt.config.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,6 @@ export default defineNuxtConfig({
132132
},
133133
},
134134

135-
build: {
136-
transpile: ['vuetify'], // Transpile Vuetify for proper handling of CSS
137-
},
138-
139135
/*
140136
** Global CSS
141137
*/
@@ -158,8 +154,9 @@ export default defineNuxtConfig({
158154
},
159155
], 'nuxt-graphql-request', '@nuxtjs/sitemap', '@zadigetvoltaire/nuxt-gtm'],
160156

157+
// Transpile Vuetify for proper handling of CSS
161158
build: {
162-
transpile: ['nuxt-graphql-request', 'ucla-library-website-components'],
159+
transpile: ['nuxt-graphql-request', 'ucla-library-website-components', 'vuetify'],
163160
},
164161

165162
site: {

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@
4242
"nuxt-graphql-request": "^7.0.5",
4343
"sass": "^1.66.1",
4444
"ucla-library-design-tokens": "^5.28.0",
45-
"ucla-library-website-components": "3.43.6"
45+
"ucla-library-website-components": "3.43.7"
4646
},
4747
"engines": {
4848
"pnpm": "^9.12.1"
4949
}
50-
}
50+
}

pages/events/index.vue

Lines changed: 43 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ const isLoading = ref<boolean>(false)
8888
const isMobile = ref<boolean>(false)
8989
const hasMore = ref(true) // Flag to control infinite scroll
9090
const sectionTeaserListElem = ref(null) // Element intersection target to unstick filters
91-
const makeFiltersSticky = ref(true)
91+
const makeFiltersSticky = ref(false)
9292
9393
// Window Size Handling
9494
const { width } = useWindowSize()
@@ -108,11 +108,17 @@ watch([width, bottom], ([newWidth, newBottom]) => {
108108
from the top edge of the viewport, unstick the filters */
109109
if ((isMobile.value && bottom.value <= 250)) {
110110
makeFiltersSticky.value = false
111-
} else {
111+
} else if (isMobile.value) {
112112
makeFiltersSticky.value = true
113+
} else {
114+
makeFiltersSticky.value = false
113115
}
114116
}, { immediate: true })
115117
118+
const stickyClass = computed(() => {
119+
return makeFiltersSticky.value ? 'is-sticky' : ''
120+
})
121+
116122
// Handle screen transitions
117123
function handleScreenTransition() {
118124
if (isMobile.value) {
@@ -261,7 +267,7 @@ async function searchES() {
261267
const size = 10
262268
let results: any = {}
263269
264-
if (!isMobile.value || userViewSelection.value === 'list') {
270+
if (userViewSelection.value === 'list') {
265271
const { paginatedSearchFilters } = useListSearchFilter()
266272
results = await paginatedSearchFilters(page, size, 'ftvaEvent', userFilterSelection.value, userDateSelection.value, 'startDate', 'asc')
267273
} else {
@@ -487,10 +493,12 @@ const parseFirstEventMonth = computed(() => {
487493
theme="paleblue"
488494
:section-title="heading.titleGeneral"
489495
/>
490-
491-
<SectionWrapper theme="paleblue">
496+
<SectionWrapper
497+
ref="el"
498+
theme="paleblue"
499+
>
492500
<TabList
493-
v-if="!isMobile"
501+
:class="stickyClass"
494502
alignment="right"
495503
:initial-tab="parseViewSelection"
496504
>
@@ -526,15 +534,15 @@ const parseFirstEventMonth = computed(() => {
526534
>
527535
<template v-if="parsedEvents && parsedEvents.length > 0">
528536
<SectionTeaserList
537+
ref="sectionTeaserListElem"
529538
:items="parsedEvents"
530539
component-name="BlockCardThreeColumn"
531-
:n-shown="10"
540+
:n-shown="parsedEvents.length"
532541
class="tabbed-event-list"
533542
data-test="tabbed-content"
534543
/>
535-
536544
<section-pagination
537-
v-if="totalPages !== 1"
545+
v-if="totalPages !== 1 && !isMobile"
538546
:pages="totalPages"
539547
:initial-current-page="currentPage"
540548
/>
@@ -560,7 +568,7 @@ const parseFirstEventMonth = computed(() => {
560568
class="tab-content"
561569
data-test="calendar-view"
562570
>
563-
<template v-if="parsedEvents && parsedEvents.length > 0">
571+
<template v-if="!isMobile && parsedEvents && parsedEvents.length > 0">
564572
<div style="display: flex;justify-content: center;">
565573
<base-calendar
566574
:events="parsedEvents"
@@ -586,65 +594,6 @@ const parseFirstEventMonth = computed(() => {
586594
</template>
587595
</TabItem>
588596
</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>
648597
</SectionWrapper>
649598
</div>
650599
</main>
@@ -680,18 +629,26 @@ const parseFirstEventMonth = computed(() => {
680629
681630
:deep(.tab-list-body) {
682631
background: none;
632+
margin-top: 0;
683633
}
684634
685635
:deep(.tab-list.right) {
686636
justify-content: space-between;
687637
width: 100%;
688-
margin-bottom: 20px;
638+
padding-bottom: 20px;
689639
690640
.filters {
691641
flex-basis: 65%;
692642
}
693643
}
694644
645+
:deep(.tab-list) {
646+
&.is-sticky {
647+
position: static;
648+
/* Default position */
649+
}
650+
}
651+
695652
.filters-wrapper {
696653
display: flex;
697654
justify-content: flex-start;
@@ -795,17 +752,29 @@ const parseFirstEventMonth = computed(() => {
795752
}
796753
797754
@media #{$medium} {
798-
.mobile-filters-outer-wrapper {
799-
padding-bottom: 20px;
800-
755+
:deep(.tab-list) {
801756
&.is-sticky {
757+
position: -webkit-sticky;
758+
/* For Safari */
802759
position: sticky;
803760
top: 65px;
804-
z-index: 100;
761+
z-index: 1000;
805762
background-color: var(--pale-blue);
806763
}
807764
}
808765
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+
809778
.date-filter {
810779
:deep(.vue-date-picker) {
811780
.dp__outer_menu_wrap.dp--menu-wrapper {
@@ -816,7 +785,6 @@ const parseFirstEventMonth = computed(() => {
816785
}
817786
818787
@media #{$small} {
819-
820788
.date-filter {
821789
:deep(.vue-date-picker) {
822790
width: unset;

0 commit comments

Comments
 (0)