From 6f2114fb0c9fde65e5695cea9beea052eecd4c50 Mon Sep 17 00:00:00 2001 From: Nicolas Giard Date: Wed, 12 Oct 2022 16:46:28 -0400 Subject: [PATCH] feat: replace old agenda with agenda-neue (#4406) * feat: remove old agenda (django-side) * fix: bring in latest commits * test: remove -neue from playwright tests * test: remove agenda selenium js tests * test: remove agenda views tests * fix: remove deprecated agenda views (week-view, agenda-by, floor-plan) * test: fix failing python tests * test: remove more deprecated tests * chore: remove deprecated templates * test: remove unused import * feat: handle agenda personalize with filter + move agenda specific stuff out of root component * fix: redirect deprecated urls to agenda / floorplan * feat: agenda - open picker mode when from personalize path * fix: safari doesn't support device-pixel-content-box property on ResizeObserver * test: move floor plan test into main agenda test Co-authored-by: Robert Sparks --- client/App.vue | 78 +- client/agenda/Agenda.vue | 39 +- client/agenda/AgendaMobileBar.vue | 4 +- client/agenda/AgendaQuickAccess.vue | 13 +- client/agenda/AgendaScheduleCalendar.vue | 4 +- client/agenda/AgendaScheduleList.vue | 14 +- client/agenda/AgendaSettings.vue | 5 +- client/agenda/FloorPlan.vue | 7 +- client/agenda/MeetingNavigation.vue | 2 +- client/agenda/agenda.scss | 68 + client/agenda/store.js | 13 +- client/router.js | 14 +- client/shared/store.js | 9 + ietf/meeting/models.py | 2 +- ietf/meeting/tests_js.py | 1090 +---------------- ietf/meeting/tests_views.py | 336 +---- ietf/meeting/urls.py | 36 +- ietf/meeting/views.py | 166 +-- .../templates/includes/meetings_footer.html | 2 +- ietf/templates/base/menu.html | 10 +- ietf/templates/meeting/agenda-neue.html | 79 -- ietf/templates/meeting/agenda.html | 576 +-------- ietf/templates/meeting/agenda.ics | 2 +- ietf/templates/meeting/agenda_by_room.html | 27 - ietf/templates/meeting/agenda_by_type.html | 49 - .../agenda_personalize_buttonlist.html | 24 - ietf/templates/meeting/floor-plan.html | 107 -- ietf/templates/meeting/meeting_heading.html | 85 -- ietf/templates/meeting/no-agenda.html | 9 - ietf/templates/meeting/past.html | 2 +- .../meeting/proceedings/introduction.html | 2 +- .../meeting/session_buttons_include.html | 379 ------ .../meeting/session_details_panel.html | 4 - .../templates/meeting/timeslot_start_end.html | 11 - ietf/templates/meeting/upcoming.html | 4 +- ietf/templates/meeting/upcoming.ics | 2 +- ietf/templates/meeting/week-view.html | 40 - playwright/tests/meeting/agenda.spec.js | 10 +- playwright/tests/meeting/floor-plan.spec.js | 4 +- 39 files changed, 286 insertions(+), 3042 deletions(-) create mode 100644 client/agenda/agenda.scss create mode 100644 client/shared/store.js delete mode 100644 ietf/templates/meeting/agenda-neue.html delete mode 100644 ietf/templates/meeting/agenda_by_room.html delete mode 100644 ietf/templates/meeting/agenda_by_type.html delete mode 100644 ietf/templates/meeting/agenda_personalize_buttonlist.html delete mode 100644 ietf/templates/meeting/floor-plan.html delete mode 100644 ietf/templates/meeting/meeting_heading.html delete mode 100644 ietf/templates/meeting/no-agenda.html delete mode 100644 ietf/templates/meeting/session_buttons_include.html delete mode 100644 ietf/templates/meeting/timeslot_start_end.html delete mode 100644 ietf/templates/meeting/week-view.html diff --git a/client/App.vue b/client/App.vue index 79eae7404..7f2763a5d 100644 --- a/client/App.vue +++ b/client/App.vue @@ -1,9 +1,9 @@ @@ -12,13 +12,13 @@ n-theme import { onBeforeUnmount ,onMounted, ref } from 'vue' import { NMessageProvider } from 'naive-ui' -import { useAgendaStore } from './agenda/store' +import { useSiteStore } from './shared/store' import NTheme from './components/n-theme.vue' // STORES -const agendaStore = useAgendaStore() +const siteStore = useSiteStore() // STATE @@ -29,14 +29,14 @@ const appContainer = ref(null) // -------------------------------------------------------------------- const resizeObserver = new ResizeObserver(entries => { - agendaStore.$patch({ viewport: Math.round(window.innerWidth) }) + siteStore.$patch({ viewport: Math.round(window.innerWidth) }) // for (const entry of entries) { // const newWidth = entry.contentBoxSize ? entry.contentBoxSize[0].inlineSize : entry.contentRect.width // } }) onMounted(() => { - resizeObserver.observe(appContainer.value, { box: 'device-pixel-content-box' }) + resizeObserver.observe(appContainer.value) }) onBeforeUnmount(() => { @@ -47,7 +47,6 @@ onBeforeUnmount(() => { diff --git a/client/agenda/Agenda.vue b/client/agenda/Agenda.vue index 38566739a..bd9cddb05 100644 --- a/client/agenda/Agenda.vue +++ b/client/agenda/Agenda.vue @@ -7,7 +7,6 @@ span #[strong IETF {{agendaStore.meeting.number}}] Meeting Agenda {{titleExtra}} .meeting-h1-badges.d-none.d-sm-flex span.meeting-warning(v-if='agendaStore.meeting.warningNote') {{agendaStore.meeting.warningNote}} - span.meeting-beta BETA h4 span {{agendaStore.meeting.city}}, {{ meetingDate }} h6.float-end.d-none.d-lg-inline(v-if='meetingUpdated') #[span.text-muted Updated:] {{ meetingUpdated }} @@ -54,7 +53,7 @@ @click='setTimezone(`UTC`)' ) UTC n-select.agenda-timezone-ddn( - v-if='agendaStore.viewport > 1250' + v-if='siteStore.viewport > 1250' v-model:value='agendaStore.timezone' :options='timezones' placeholder='Select Time Zone' @@ -134,7 +133,7 @@ // ----------------------------------- // -> Anchored Day Quick Access Menu // ----------------------------------- - .col-auto.d-print-none(v-if='agendaStore.viewport >= 990') + .col-auto.d-print-none(v-if='siteStore.viewport >= 990') agenda-quick-access agenda-mobile-bar @@ -166,6 +165,9 @@ import MeetingNavigation from './MeetingNavigation.vue' import timezones from '../shared/timezones' import { useAgendaStore } from './store' +import { useSiteStore } from '../shared/store' + +import './agenda.scss' // MESSAGE PROVIDER @@ -174,6 +176,7 @@ const message = useMessage() // STORES const agendaStore = useAgendaStore() +const siteStore = useSiteStore() // ROUTER @@ -215,7 +218,35 @@ watch(() => agendaStore.meetingDays, () => { }) }) -watch(() => agendaStore.isLoaded, handleCurrentMeetingRedirect) +watch(() => agendaStore.isLoaded, () => { + if (route.query.show) { + // Handle legacy ?show= parameter + const keywords = route.query.show.split(',').map(k => k.trim()).filter(k => !!k) + if (keywords?.length > 0) { + const pickedIds = [] + for (const ev of agendaStore.scheduleAdjusted) { + if (keywords.includes(ev.sessionKeyword)) { + pickedIds.push(ev.id) + } + } + if (pickedIds.length > 0) { + agendaStore.$patch({ + pickerMode: true, + pickerModeView: true, + pickedEvents: pickedIds + }) + agendaStore.persistMeetingPreferences() + } + } + } + if (route.query.pick) { + // Handle legacy /personalize path (open picker mode) + agendaStore.$patch({ pickerMode: true }) + router.replace({ query: null }) + } + + handleCurrentMeetingRedirect() +}) // COMPUTED diff --git a/client/agenda/AgendaMobileBar.vue b/client/agenda/AgendaMobileBar.vue index 95a051678..08a28d451 100644 --- a/client/agenda/AgendaMobileBar.vue +++ b/client/agenda/AgendaMobileBar.vue @@ -1,5 +1,5 @@