diff --git a/pages/my/index.vue b/pages/my/index.vue index e64e762..0ea9b66 100644 --- a/pages/my/index.vue +++ b/pages/my/index.vue @@ -75,7 +75,7 @@ onMounted(() => { case "UPDATE": if (!worlds.value?.data) return - worlds.value.data = (await $fetch("/api/worlds/query", { query: { gmId: user?.value!.id } })).data as World[] + worlds.value.data = (await $fetch("/api/worlds/query", { query: { gmId: user?.value!.id } })).data as World[] break default: diff --git a/pages/my/worlds/[id].vue b/pages/my/worlds/[id].vue index c7a2eca..a686e7b 100644 --- a/pages/my/worlds/[id].vue +++ b/pages/my/worlds/[id].vue @@ -47,6 +47,27 @@ function handleInsertedCalendar(newCalendar: CalendarChannelPayload) { } } +/** Handles calendar insertion realtime events */ +function handleUpdatedCalendar(newCalendar: CalendarChannelPayload) { + if (!world.value) return + + try { + world.value.data.calendars = world.value.data.calendars?.map(c => { + if (c.id === newCalendar.id) { + const eventNb = c.eventNb + c = newCalendar + c.createdAt = newCalendar.created_at + c.updatedAt = newCalendar.updated_at + c.eventNb = eventNb + } + + return c + }) + } catch (err) { + console.log(err) + } +} + /** Handles calendar deletion realtime events */ function handleDeletedCalendar(id: number) { if (!world.value) return @@ -73,6 +94,10 @@ onMounted(() => { handleDeletedCalendar(payload.old.id) break + case "UPDATE": + handleUpdatedCalendar(payload.new as Calendar) + break + default: console.log("Unknown event has been triggered. This should not happen unless Supabase added one somehow.") break