55 lines
1.9 KiB
Svelte
55 lines
1.9 KiB
Svelte
<script lang="ts">
|
|
import {onDestroy} from "svelte"
|
|
import {derived} from "svelte/store"
|
|
import {sleep} from "@welshman/lib"
|
|
import {Classified} from "@welshman/domain"
|
|
import PageContent from "@lib/components/PageContent.svelte"
|
|
import Spinner from "@lib/components/Spinner.svelte"
|
|
import SpaceBar from "@app/components/SpaceBar.svelte"
|
|
import NoteContent from "@app/components/NoteContent.svelte"
|
|
import NoteCard from "@app/components/NoteCard.svelte"
|
|
import ClassifiedActions from "@app/components/ClassifiedActions.svelte"
|
|
import EventComments from "@app/components/EventComments.svelte"
|
|
import {events, reader} from "@app/core"
|
|
import {makeFeedContext} from "@app/feeds"
|
|
import {decodeRelay} from "@app/relays"
|
|
import type {PageProps} from "./$types"
|
|
|
|
const {params}: PageProps = $props()
|
|
|
|
const {relay, address} = params
|
|
const url = decodeRelay(relay)
|
|
const context = makeFeedContext({relays: [url]})
|
|
const event = $events.one(address, [url]).$
|
|
const classified = derived(event, $event => ($event ? reader(Classified)($event) : undefined))
|
|
|
|
const back = () => history.back()
|
|
|
|
onDestroy(context.cleanup)
|
|
</script>
|
|
|
|
<SpaceBar {back}>
|
|
{#snippet title()}
|
|
<h1 class="text-xl">{$classified?.title() ?? ""}</h1>
|
|
{/snippet}
|
|
</SpaceBar>
|
|
|
|
<PageContent class="flex flex-col gap-2 p-2 sm:gap-4 sm:p-4">
|
|
{#if $event}
|
|
<NoteCard event={$event} {url} class="card z-feature w-full">
|
|
<div class="flex flex-col gap-3 ml-12">
|
|
<NoteContent showEntire event={$event} {url} />
|
|
<ClassifiedActions showRoom event={$event} {url} {context} />
|
|
</div>
|
|
</NoteCard>
|
|
<EventComments event={$event} {url} {context} />
|
|
{:else}
|
|
<div class="flex justify-center py-20">
|
|
{#await sleep(5000)}
|
|
<Spinner loading>Loading listing...</Spinner>
|
|
{:then}
|
|
<p>Failed to load classified listing.</p>
|
|
{/await}
|
|
</div>
|
|
{/if}
|
|
</PageContent>
|