import { component$, Slot } from '@builder.io/qwik' import { MastodonStatus, StatusContext } from '~/types' import Status from '~/components/Status' import { formatDateTime } from '~/utils/dateTime' import { formatRoundedNumber } from '~/utils/numbers' import * as statusAPI from 'wildebeest/functions/api/v1/statuses/[id]' import * as contextAPI from 'wildebeest/functions/api/v1/statuses/[id]/context' import { Link, loader$ } from '@builder.io/qwik-city' import StickyHeader from '~/components/StickyHeader/StickyHeader' import { Avatar } from '~/components/avatar' import { MediaGallery } from '~/components/MediaGallery.tsx' import { getNotFoundHtml } from '~/utils/getNotFoundHtml/getNotFoundHtml' export const statusLoader = loader$< { DATABASE: D1Database }, Promise<{ status: MastodonStatus; context: StatusContext }> >(async ({ request, html, platform, params }) => { const domain = new URL(request.url).hostname const statusResponse = await statusAPI.handleRequest(platform.DATABASE, params.statusId, domain) const statusText = await statusResponse.text() if (!statusText) { throw html(404, getNotFoundHtml()) } const contextResponse = await contextAPI.handleRequest(domain, platform.DATABASE, params.statusId) const contextText = await contextResponse.text() const context = JSON.parse(contextText ?? null) as StatusContext | null if (!context) { throw new Error(`No context present for status with ${params.statusId}`) } return { status: JSON.parse(statusText), context } }) export default component$(() => { const { status, context } = statusLoader.use().value return ( <>
Back
{context.descendants.map((status) => { return })}
) }) export const AccountCard = component$<{ status: MastodonStatus }>(({ status }) => { const accountUrl = `/@${status.account.username}` return (
{status.account.display_name}
@{status.account.acct}
) }) export const InfoTray = component$<{ status: MastodonStatus }>(({ status }) => { return (
{formatDateTime(status.created_at)} · Web · {formatRoundedNumber(status.reblogs_count)} · {formatRoundedNumber(status.favourites_count)}
) }) export const Info = component$<{ href: string | null }>(({ href }) => { return ( <> {!href ? ( ) : ( )} ) })