Skip to content

Commit b5c9b2f

Browse files
committed
fix(app): handle missing packet hash in UI
Signed-off-by: Eric Hegnes <eric@hegnes.com>
1 parent 6e0a0a1 commit b5c9b2f

2 files changed

Lines changed: 28 additions & 7 deletions

File tree

app2/src/lib/queries/transfer-by-hash.svelte.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { transferDetails } from "$lib/stores/transfer-details.svelte"
22
import { createQueryGraphql } from "$lib/utils/queries"
33
import { TransferDetails } from "@unionlabs/sdk/schema"
4-
import { Option, Schema } from "effect"
4+
import { Array as A, Option, pipe, Schema } from "effect"
55
import { NoSuchElementException } from "effect/Cause"
66
import { graphql } from "gql.tada"
77

@@ -50,12 +50,20 @@ export const transferByPacketHashQuery = (packetHash: string) =>
5050
`),
5151
variables: { packet_hash: packetHash },
5252
refetchInterval: "1 second",
53-
writeData: data => {
54-
if (data.pipe(Option.map(d => d.v2_transfers.length)).pipe(Option.getOrElse(() => 0)) === 0) {
55-
transferDetails.error = Option.some(new NoSuchElementException())
56-
}
57-
transferDetails.data = data.pipe(Option.map(d => d.v2_transfers[0]))
58-
},
53+
writeData: (data) =>
54+
pipe(
55+
data,
56+
Option.map(x => x.v2_transfers),
57+
Option.flatMap(A.head),
58+
Option.match({
59+
onNone: () => {
60+
transferDetails.error = Option.some(new NoSuchElementException())
61+
},
62+
onSome: (data) => {
63+
transferDetails.data = Option.some(data)
64+
},
65+
}),
66+
),
5967
writeError: error => {
6068
transferDetails.error = error
6169
},

app2/src/routes/explorer/transfers/[packet_hash]/+page.svelte

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import ChainComponent from "$lib/components/model/ChainComponent.svelte"
55
import ErrorComponent from "$lib/components/model/ErrorComponent.svelte"
66
import PacketComponent from "$lib/components/model/PacketComponent.svelte"
77
import TokenComponent from "$lib/components/model/TokenComponent.svelte"
8+
import Anchor from "$lib/components/ui/A.svelte"
89
import Card from "$lib/components/ui/Card.svelte"
910
import DateTimeComponent from "$lib/components/ui/DateTimeComponent.svelte"
1011
import Label from "$lib/components/ui/Label.svelte"
@@ -354,6 +355,18 @@ const suggestTokenToWallet = async (chain_id: string, denom: TokenRawDenom) => {
354355
mode="transfer"
355356
/>
356357
</div>
358+
{:else}
359+
<div class="flex flex-col gap-2 m-4">
360+
<div>
361+
Transfer not found for <code>{data.packetHash}</code>.
362+
</div>
363+
<div class="mt-2">
364+
<Anchor
365+
href={`/explorer/packets/${data.packetHash}`}
366+
external={false}
367+
>View packet details</Anchor>
368+
</div>
369+
</div>
357370
{/if}
358371
</div>
359372
</Card>

0 commit comments

Comments
 (0)