"use client"; import Link from "next/link"; import { useEffect, useState } from "react"; import CatalogEmptyState from "@/components/catalog/CatalogEmptyState"; import { excerpt, formatDate } from "@/components/catalog/utils"; import ConfirmDialog from "@/components/ConfirmDialog"; import { deleteWebsiteBlogPost, listWebsiteBlogPosts, type WebsiteBlogPost, } from "@/services/website-blog"; import styles from "./WebsiteBlogListPage.module.css"; export default function WebsiteBlogListPage() { const [items, setItems] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const [removing, setRemoving] = useState(null); const [removeBusy, setRemoveBusy] = useState(false); useEffect(() => { let cancelled = false; void (async () => { setLoading(true); setError(""); try { const data = await listWebsiteBlogPosts(); if (!cancelled) setItems(data.items); } catch (err) { if (!cancelled) { setError( err instanceof Error ? err.message : "Could not load blog posts.", ); } } finally { if (!cancelled) setLoading(false); } })(); return () => { cancelled = true; }; }, []); async function confirmRemove() { if (!removing) return; setRemoveBusy(true); try { await deleteWebsiteBlogPost(removing.id); setItems((prev) => prev.filter((item) => item.id !== removing.id)); setRemoving(null); } catch (err) { setError( err instanceof Error ? err.message : "Could not remove blog post.", ); setRemoving(null); } finally { setRemoveBusy(false); } } return (

Blog

Stories published on the IranBay website.

{loading ? "Loading…" : `${items.length} posts`}

Add
{error ? (

{error}

) : null} {loading && items.length === 0 ? (

Loading blog…

) : null} {!loading && items.length === 0 ? ( ) : null} {items.length ? (
{items.map((post) => { const text = post.abstract ? excerpt(post.abstract, 160) : ""; return (
{post.imageUrl ? ( ) : (
)}

{post.categoryName}

{post.title}

{text ?

{text}

: null} {post.createdAt ? ( {formatDate(post.createdAt)} ) : null}
); })}
) : null} void confirmRemove()} onClose={() => { if (!removeBusy) setRemoving(null); }} />
); }