import { Link, useParams } from 'react-router-dom' import DOMPurify from 'dompurify' import PublicLayout from '../../components/PublicLayout.jsx' import { Loading, ErrorState } from '../../components/PageState.jsx' import { useAsync } from '../../lib/useAsync.js' import { longDate, monthTile } from '../../lib/format.js' import { api } from '../../api/client.js' export default function NewsletterIssue() { const { id } = useParams() const { loading, error, data: issue } = useAsync(() => api.post('newsletter', id), [id]) return (
{loading && } {error && ( )} {issue && } {(error || issue) && (

← All issues

)}
) } function Issue({ issue }) { const tile = monthTile(issue.published_at || issue.created_at) const label = `${tile.mon} ${tile.num}`.trim() return (

Newsletter / {longDate(issue.published_at || issue.created_at)}

Issue — {label}

{issue.title}

{issue.excerpt &&

{issue.excerpt}

}
{issue.body ? (
) : (

This issue has no content yet.

)}
) }