From fb3d9f392394ea468d1557a0e8461f5109de7005 Mon Sep 17 00:00:00 2001 From: userAdityaa Date: Mon, 1 Jun 2026 15:36:38 +0530 Subject: [PATCH] feat: show per-relay failure, pending breakdown on outgoing messages --- src/app/components/ChatMessage.svelte | 6 +- src/app/components/RoomItem.svelte | 2 +- src/app/components/ThunkFailure.svelte | 47 +++++++------- src/app/components/ThunkStatus.svelte | 5 +- src/app/components/ThunkStatusDetail.svelte | 69 ++++++++++++++++----- src/routes/spaces/[relay]/[h]/+page.svelte | 2 +- src/routes/spaces/[relay]/chat/+page.svelte | 2 +- 7 files changed, 88 insertions(+), 45 deletions(-) diff --git a/src/app/components/ChatMessage.svelte b/src/app/components/ChatMessage.svelte index c54249b1..72bb55d7 100644 --- a/src/app/components/ChatMessage.svelte +++ b/src/app/components/ChatMessage.svelte @@ -65,9 +65,6 @@ let popoverIsVisible = $state(false) -{#if thunk} - -{/if}
+ {#if thunk} + + {/if}
diff --git a/src/app/components/RoomItem.svelte b/src/app/components/RoomItem.svelte index 1cf4623c..87c49c10 100644 --- a/src/app/components/RoomItem.svelte +++ b/src/app/components/RoomItem.svelte @@ -127,7 +127,7 @@
{#if thunk} - + {/if}
diff --git a/src/app/components/ThunkFailure.svelte b/src/app/components/ThunkFailure.svelte index c09186e3..cc367242 100644 --- a/src/app/components/ThunkFailure.svelte +++ b/src/app/components/ThunkFailure.svelte @@ -2,7 +2,7 @@ import {stopPropagation} from "svelte/legacy" import {noop} from "@welshman/lib" import type {AbstractThunk} from "@welshman/app" - import {retryThunk, thunkIsComplete, getFailedThunkUrls} from "@welshman/app" + import {flattenThunks, getFailedThunkUrls, publishThunk, thunkIsComplete} from "@welshman/app" import Danger from "@assets/icons/danger-triangle.svg?dataurl" import Icon from "@lib/components/Icon.svelte" import Tippy from "@lib/components/Tippy.svelte" @@ -16,40 +16,45 @@ class?: string } - let {thunk, showToastOnRetry, ...restProps}: Props = $props() + const {thunk, showToastOnRetry, ...restProps}: Props = $props() - const retry = () => { - thunk = retryThunk(thunk) + const showFailure = $derived(thunkIsComplete($thunk) && getFailedThunkUrls($thunk).length > 0) - if (showToastOnRetry) { - pushToast({ - timeout: 30_000, - children: { - component: ThunkToast, - props: {thunk}, - }, - }) + const retry = (url: string) => { + for (const child of flattenThunks([thunk])) { + if (!child.options.relays.includes(url)) { + continue + } + + const retried = publishThunk({...child.options, relays: [url]}) + + if (showToastOnRetry) { + pushToast({ + timeout: 30_000, + children: { + component: ThunkToast, + props: {thunk: retried}, + }, + }) + } + + return } } - - const failedUrls = $derived(getFailedThunkUrls($thunk)) - const showFailure = $derived(thunkIsComplete($thunk) && failedUrls.length > 0) {#if showFailure} - {@const url = failedUrls[0]} - {@const {status, detail: message} = $thunk.results[url]} +
+ + + {title} + +
+
+ {#each successUrls as url (url)} +
+ + {displayRelayUrl(url)} +
+ {/each} + {#each failedUrls as url (url)} + {@const {detail, status} = $thunk.results[url] || {}} +
+ +
+

{displayRelayUrl(url)}

+

{addPeriod(relayMessage(status, detail))}

+
+ +
+ {/each} +
diff --git a/src/routes/spaces/[relay]/[h]/+page.svelte b/src/routes/spaces/[relay]/[h]/+page.svelte index 55ea26d8..a238253c 100644 --- a/src/routes/spaces/[relay]/[h]/+page.svelte +++ b/src/routes/spaces/[relay]/[h]/+page.svelte @@ -470,7 +470,7 @@ bind:element onscroll={onScroll} class={cx( - "flex-col-reverse pb-0! pt-4", + "flex-col-reverse pb-0! pt-4 md:pb-8!", showMobileVideoPanel ? "hidden md:flex md:flex-col-reverse" : "flex", pageContentHiddenDesktopVideoOnly && "md:hidden", )}> diff --git a/src/routes/spaces/[relay]/chat/+page.svelte b/src/routes/spaces/[relay]/chat/+page.svelte index 9fdd55d3..07795e51 100644 --- a/src/routes/spaces/[relay]/chat/+page.svelte +++ b/src/routes/spaces/[relay]/chat/+page.svelte @@ -318,7 +318,7 @@ {/snippet} - + {#if loadingForward}

Looking for messages...