From edf44e8ac2aa779e38cd3e80808b1165eef56a30 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 22 Feb 2025 12:25:03 +0530 Subject: [PATCH] fix: poll message status when sent or already processing. --- .../message-[message]/overview.svelte | 34 ++++++++++++++++++- .../message-[message]/sendModal.svelte | 4 +++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[project]/messaging/message-[message]/overview.svelte b/src/routes/(console)/project-[project]/messaging/message-[message]/overview.svelte index c9bbe244f..37b351187 100644 --- a/src/routes/(console)/project-[project]/messaging/message-[message]/overview.svelte +++ b/src/routes/(console)/project-[project]/messaging/message-[message]/overview.svelte @@ -9,6 +9,8 @@ import SendModal from './sendModal.svelte'; import ScheduleModal from './scheduleModal.svelte'; import CancelModal from './cancelModal.svelte'; + import { sdk } from '$lib/stores/sdk'; + import { onDestroy, onMount } from 'svelte'; export let message: Models.Message & { data: Record }; export let topics: Models.Topic[]; @@ -18,6 +20,36 @@ let showCancel = false; let showFailed = false; let errors: string[] = []; + + let intervalID: ReturnType; + + function checkMessageStatus() { + sdk.forProject.messaging + .getMessage(message.$id) + .then((msg) => { + if (msg.status !== 'processing') { + clearInterval(intervalID); + message.status = msg.status; + } + }) + .catch(() => clearInterval(intervalID)); + } + + async function pollMessageStatus(update: boolean = true) { + if (update) message.status = 'processing'; + + checkMessageStatus(); + clearInterval(intervalID); + intervalID = setInterval(checkMessageStatus, 2000); + } + + onDestroy(() => clearInterval(intervalID)); + + onMount(() => { + if (message.status === 'processing') { + pollMessageStatus(false); + } + }); @@ -70,7 +102,7 @@ - + pollMessageStatus()} /> diff --git a/src/routes/(console)/project-[project]/messaging/message-[message]/sendModal.svelte b/src/routes/(console)/project-[project]/messaging/message-[message]/sendModal.svelte index fdfaa1d5c..9899b4ecf 100644 --- a/src/routes/(console)/project-[project]/messaging/message-[message]/sendModal.svelte +++ b/src/routes/(console)/project-[project]/messaging/message-[message]/sendModal.svelte @@ -7,11 +7,13 @@ import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; import { MessagingProviderType, type Models } from '@appwrite.io/console'; import { Dependencies } from '$lib/constants'; + import { createEventDispatcher } from 'svelte'; export let show = false; export let message: Models.Message & { data: Record }; export let topics: Models.Topic[]; + const dispatch = createEventDispatcher(); let totalTargets = message.targets?.length ?? 0; for (const topic of topics) { @@ -80,6 +82,8 @@ type: 'error' }); trackError(error, Submit.MessagingMessageUpdate); + } finally { + dispatch('update'); } };