Skip to content

Commit 5cb6394

Browse files
committed
fixed regressions on feedbacks page and rate talk page, where schedule-talk was no longer displayed because of a missing talkNotes (it would be nicer to consider this field as required at component level, but if I do so, I get errors telling me that Undefined is not matching declared type)
1 parent c566f39 commit 5cb6394

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

mobile/src/views/event/FeedbacksPage.vue

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@
4141
</div>
4242
</ion-item>
4343
<ion-item v-else-if="feedback.status === 'provided'" class="listTalks-item">
44-
<schedule-talk :talk="findTimeslotTalkMatchingFeedback(timeslot, feedback.userFeedback)!" @talkClicked="toBeImplemented('To be implemented: opening feedback page in EDIT mode')" :is-highlighted="(talk, talkNotes) => talkNotes.isFavorite" :conf-descriptor="confDescriptor">
44+
<schedule-talk :talk="findTimeslotTalkMatchingFeedback(timeslot, feedback.userFeedback)!"
45+
:talk-notes="userEventTalkNotesRef.get(findTimeslotTalkMatchingFeedback(timeslot, feedback.userFeedback)!.id.value)"
46+
:is-highlighted="(talk, talkNotes) => talkNotes.isFavorite"
47+
:conf-descriptor="confDescriptor"
48+
@talkClicked="toBeImplemented('To be implemented: opening feedback page in EDIT mode')">
4549
<template #upper-right="{ talk }">
4650
<talk-format :format="talk.format" class="talkFormatContainer" />
4751
</template>
@@ -78,7 +82,7 @@
7882
import DaySelector from "@/components/schedule/DaySelector.vue";
7983
import TimeSlotAccordion from "@/components/timeslots/TimeSlotAccordion.vue";
8084
import {IonAccordionGroup} from "@ionic/vue";
81-
import {VoxxrinScheduleTimeSlot} from "@/models/VoxxrinSchedule";
85+
import {extractTalksFromSchedule, VoxxrinScheduleTimeSlot} from "@/models/VoxxrinSchedule";
8286
import TimeslotsIterator from "@/components/timeslots/TimeslotsIterator.vue";
8387
import ScheduleTalk from "@/components/talk-card/ScheduleTalk.vue";
8488
import {useTabbedPageNav} from "@/state/useTabbedPageNav";
@@ -88,6 +92,8 @@
8892
import LinearRating from "@/components/ratings/LinearRating.vue";
8993
import {useSharedEventSelectedDay} from "@/state/useEventSelectedDay";
9094
import {areFeedbacksEnabled} from "@/models/VoxxrinConferenceDescriptor";
95+
import {useUserEventTalkNotes} from "@/state/useUserTalkNotes";
96+
import {computed, toValue} from "vue";
9197
9298
const { LL } = typesafeI18n()
9399
@@ -99,6 +105,13 @@
99105
100106
const { schedule: currentSchedule } = useSchedule(confDescriptor, selectedDayId)
101107
108+
const talkIdsRef = computed(() => {
109+
const schedule = toValue(currentSchedule);
110+
return schedule ? extractTalksFromSchedule(schedule).map(talk => talk.id) : [];
111+
})
112+
113+
const {userEventTalkNotesRef} = useUserEventTalkNotes(eventId, talkIdsRef)
114+
102115
const expandedTimeslotIds = ref<string[]>([])
103116
function toggleExpandedTimeslot(timeslot: VoxxrinScheduleTimeSlot) {
104117
const expandedTimeslotIdsIndex = expandedTimeslotIds.value.indexOf(timeslot.id.value)

mobile/src/views/feedbacks/RateTalkPage.vue

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
<slot>
77
<div class="rateTalkView">
88
<div class="rateTalkView-head">
9-
<schedule-talk :conf-descriptor="confDescriptorRef" :is-highlighted="() => false" :talk="labelledTimeslotWithTalkRef.talk">
9+
<schedule-talk :conf-descriptor="confDescriptorRef" :is-highlighted="() => false"
10+
:talk="labelledTimeslotWithTalkRef.talk"
11+
:talk-notes="userEventTalkNotesRef.get(labelledTimeslotWithTalkRef.talk.id.value)">
1012
</schedule-talk>
1113
</div>
1214

@@ -65,10 +67,10 @@
6567

6668
<script setup lang="ts">
6769
import {EventId} from "@/models/VoxxrinEvent";
68-
import {getRouteParamsValue} from "@/views/vue-utils";
70+
import {getRouteParamsValue, toManagedRef as toRef} from "@/views/vue-utils";
6971
import {useRoute} from "vue-router";
7072
import {useSharedConferenceDescriptor} from "@/state/useConferenceDescriptor";
71-
import {computed, reactive, unref, watch} from "vue";
73+
import {computed, reactive, toValue, unref, watch} from "vue";
7274
import {managedRef as ref} from "@/views/vue-utils";
7375
import {typesafeI18n} from "@/i18n/i18n-vue";
7476
import {TalkId} from "@/models/VoxxrinTalk";
@@ -88,12 +90,13 @@ import VoxDivider from "@/components/ui/VoxDivider.vue";
8890
import FeedbackFooter from "@/components/feedbacks/FeedbackFooter.vue";
8991
import {goBackOrNavigateTo} from "@/router";
9092
import LabelledLinearRating from "@/components/ratings/LabelledLinearRating.vue";
93+
import {useUserEventTalkNotes} from "@/state/useUserTalkNotes";
9194
9295
const { LL } = typesafeI18n()
9396
9497
const route = useRoute();
9598
const eventIdRef = computed(() => new EventId(getRouteParamsValue(route, 'eventId')));
96-
const talkId = new TalkId(getRouteParamsValue(route, 'talkId'));
99+
const talkIdRef = ref(new TalkId(getRouteParamsValue(route, 'talkId')));
97100
const {conferenceDescriptor: confDescriptorRef } = useSharedConferenceDescriptor(eventIdRef);
98101
99102
const labelledTimeslotWithTalkRef = ref<undefined | DailyLabelledTimeslotWithTalk>(undefined);
@@ -104,7 +107,7 @@ const dayIdRef = computed(() => {
104107
105108
const feedback: UnwrapNestedRefs<Omit<ProvidedUserFeedback, 'createdOn'|'lastUpdatedOn'>> = reactive({
106109
timeslotId: '',
107-
talkId: talkId.value,
110+
talkId: talkIdRef.value.value,
108111
alsoConcernsOverlappingTimeslotIds: [],
109112
status: 'provided',
110113
ratings: {
@@ -115,7 +118,7 @@ const feedback: UnwrapNestedRefs<Omit<ProvidedUserFeedback, 'createdOn'|'lastUpd
115118
comment: null
116119
})
117120
118-
watch([confDescriptorRef], async ([confDescriptor]) => {
121+
watch([confDescriptorRef, talkIdRef], async ([confDescriptor, talkId]) => {
119122
if(!confDescriptor) {
120123
labelledTimeslotWithTalkRef.value = undefined;
121124
return;
@@ -162,6 +165,12 @@ const feedbackCanBeSubmitted = computed(() => {
162165
163166
const {updateTimeslotFeedback} = useUserFeedbacks(eventIdRef, dayIdRef);
164167
168+
const { userEventTalkNotesRef } = useUserEventTalkNotes(eventIdRef, toRef(() => talkIdRef ? [talkIdRef.value] : undefined))
169+
const talkNotes = toRef(() => {
170+
const userEventTalkNotes = toValue(userEventTalkNotesRef)
171+
return Array.from(userEventTalkNotes.values())[0];
172+
})
173+
165174
async function submitFeedback() {
166175
const labelledTimeslotWithTalk = unref(labelledTimeslotWithTalkRef);
167176
if(!labelledTimeslotWithTalk) {

0 commit comments

Comments
 (0)