* feat: agenda page in vue (wip) * feat: scroll to agenda day * fix: vue 3 composition api + eslint settings * fix: agenda day scroll match indicator * fix: convert vite deps to yarn * fix: missing lodash + legacy build step * fix: agenda - move calendar into drawer * fix: improve agenda filter UI * fix: download ics + move agenda into own component * feat: use fullcalendar for agenda calendar view (wip) * feat: add events to agenda calendar * feat: agenda filter UI improvements * feat: agenda add to calendar dropdown * feat: agenda calendar filter + timezone + event coloring * feat: agenda calendar color improvements * chore: exclude dist-neue from git * feat: agenda calendar event modal * fix: rebuild yarn deps * chore: add run migration task to vscode * fix: agenda buttons display flag * feat: agenda event modal component * feat: show calendar event quick info on hover * fix: clear calendar quick info on timezone change * feat: agenda list view improvements * feat: agenda list row coloring * feat: agenda list note * feat: agenda list icons for office hours + hackathon * fix: agenda top links * refactor: use pinia as store for agenda components * feat: agenda jump to now * fix: agenda mobile improvements * feat: agenda search * feat: agenda search improvements * feat: agenda event recordings buttons for post-meeting * fix: agenda switch to meeting timezone on load * feat: agenda pre & live session buttons * fix: remove agenda utc + personalize links in top menu * feat: add pre-vue loading state on page load * feat: filter from agenda picker mode * fix: agenda UI improvements * fix: django-vite non-dev mode * chore: update yarn dependencies for vue + vite * feat: agenda settings panel + UI improvements * feat: agenda settings colors + import/export feature * feat: agenda color assignments + responsive UI improvements * feat: agenda realtime red line + debug datetime offset * feat: agenda add aria labels for settings * feat: add new agenda path + pages/menu * fix: bring base/menu.html up to main * fix: agenda various fixes * test: add new agenda item to meetings menu for item count * chore: restore devcontainer extensions list * fix: agenda UI improvements + montserrat default font * feat: agenda bolder text + hide event icons options * feat: agenda warning badge * fix: agenda various UI improvements + intersectionObserver fix * feat: agenda floorplan page + various UI improvements * feat: agenda floor plan pin * feat: view floor plan room from agenda * feat: agenda floor plan mobile optimization * feat: adjust calendar options + default calendar view in settings * feat: agenda persist picked events + change base font only on new agenda page * feat: agenda mobile view optimizations * fix: add .vite to cached volumes * fix: mobile view for filters, calendar, settings panels * test: upgrade cypress existing tests to work on bs5 + update dependencies * fix: use named url patterns to avoid hardcoded URLs. Add rudimentary test coverage for the neue views. Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
120 lines
2.6 KiB
Vue
120 lines
2.6 KiB
Vue
<template lang="pug">
|
|
.agenda-mobile-bar(v-if='agendaStore.viewport < 990')
|
|
button(@click='agendaStore.$patch({ filterShown: true })')
|
|
i.bi.bi-filter-square-fill.me-2
|
|
span Filters
|
|
n-badge.ms-2(:value='agendaStore.selectedCatSubs.length', processing)
|
|
button(@click='agendaStore.$patch({ calendarShown: true })')
|
|
i.bi.bi-calendar3.me-2
|
|
span Cal
|
|
n-dropdown(
|
|
:options='downloadIcsOptions'
|
|
size='huge'
|
|
:show-arrow='true'
|
|
trigger='click'
|
|
@select='downloadIcs'
|
|
)
|
|
button
|
|
i.bi.bi-calendar-check.me-2
|
|
span .ics
|
|
button(@click='agendaStore.$patch({ settingsShown: !agendaStore.settingsShown })')
|
|
i.bi.bi-gear
|
|
</template>
|
|
|
|
<script setup>
|
|
import { h } from 'vue'
|
|
|
|
import {
|
|
NBadge,
|
|
NDropdown,
|
|
useMessage
|
|
} from 'naive-ui'
|
|
|
|
import { useAgendaStore } from './store'
|
|
|
|
// MESSAGE PROVIDER
|
|
|
|
const message = useMessage()
|
|
|
|
// STORES
|
|
|
|
const agendaStore = useAgendaStore()
|
|
|
|
// Download Ics Options
|
|
|
|
const downloadIcsOptions = [
|
|
{
|
|
label: 'Subscribe... (webcal)',
|
|
key: 'subscribe',
|
|
icon: () => h('i', { class: 'bi bi-calendar-week text-blue' })
|
|
},
|
|
{
|
|
label: 'Download... (.ics)',
|
|
key: 'download',
|
|
icon: () => h('i', { class: 'bi bi-arrow-down-square' })
|
|
}
|
|
]
|
|
|
|
// METHODS
|
|
|
|
function downloadIcs (key) {
|
|
message.loading('Generating calendar file... Download will begin shortly.')
|
|
let icsUrl = ''
|
|
if (agendaStore.pickerMode) {
|
|
const sessionKeywords = agendaStore.scheduleAdjusted.map(s => s.sessionKeyword)
|
|
icsUrl = `/meeting/${agendaStore.meeting.number}/agenda.ics?show=${sessionKeywords.join(',')}`
|
|
} else if (agendaStore.selectedCatSubs.length > 0) {
|
|
icsUrl = `/meeting/${agendaStore.meeting.number}/agenda.ics?show=${agendaStore.selectedCatSubs.join(',')}`
|
|
} else {
|
|
icsUrl = `/meeting/${agendaStore.meeting.number}/agenda.ics`
|
|
}
|
|
if (key === 'subscribe') {
|
|
window.location.assign(`webcal://${window.location.host}${icsUrl}`)
|
|
} else {
|
|
window.location.assign(icsUrl)
|
|
}
|
|
}
|
|
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
@import "bootstrap/scss/functions";
|
|
@import "bootstrap/scss/variables";
|
|
|
|
.agenda-mobile-bar {
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
right: 0;
|
|
z-index: 99;
|
|
background-color: rgba(0,0,0,.75);
|
|
backdrop-filter: blur(10px);
|
|
display: flex;
|
|
justify-content: space-between;
|
|
|
|
button {
|
|
height: 50px;
|
|
border: none;
|
|
background-color: transparent;
|
|
color: #FFF;
|
|
padding: 0 15px;
|
|
transition: all .4s ease;
|
|
|
|
& + button {
|
|
margin-left: 1px;
|
|
}
|
|
|
|
i.bi {
|
|
font-size: 1.2em;
|
|
}
|
|
|
|
&:hover {
|
|
background-color: $blue-400;
|
|
}
|
|
&:active {
|
|
background-color: $blue-700;
|
|
}
|
|
}
|
|
}
|
|
</style>
|