36 lines
860 B
TypeScript
36 lines
860 B
TypeScript
import type { Route } from './+types'
|
|
|
|
import { Suspense } from 'react'
|
|
import { Await } from 'react-router'
|
|
|
|
import { Skeleton } from '@/components/skeleton'
|
|
import { request as req } from '@/lib/request'
|
|
|
|
export async function loader({ params, request, context }: Route.LoaderArgs) {
|
|
const { id } = params
|
|
const data = req({
|
|
url: `/users/${id}/emails`,
|
|
request,
|
|
context
|
|
}).then((r) => r.json())
|
|
|
|
return { data }
|
|
}
|
|
|
|
export default function Route({ loaderData: { data } }) {
|
|
return (
|
|
<Suspense fallback={<Skeleton />}>
|
|
<Await resolve={data}>
|
|
{({ items = [] }) => (
|
|
<ul>
|
|
{items.map(({ sk }: { sk: string }, idx: number) => {
|
|
const [, email] = sk.split('#')
|
|
return <li key={idx}>{email}</li>
|
|
})}
|
|
</ul>
|
|
)}
|
|
</Await>
|
|
</Suspense>
|
|
)
|
|
}
|