import React from 'react' import { Head, router } from '@inertiajs/react' import AdminLayout from '../../Layouts/AdminLayout' function badgeTone(status) { if (status === 'published') return 'border-emerald-300/20 bg-emerald-400/12 text-emerald-100' if (status === 'scheduled') return 'border-sky-300/20 bg-sky-400/12 text-sky-100' if (status === 'pending_review') return 'border-amber-300/20 bg-amber-400/12 text-amber-100' if (status === 'archived' || status === 'rejected') return 'border-rose-300/20 bg-rose-400/12 text-rose-100' return 'border-white/10 bg-white/[0.06] text-slate-200' } function StatCard({ label, value }) { return (
{label}
{Number(value || 0).toLocaleString()}
) } export default function Stories({ title, stories, filters, stats, endpoints }) { const [state, setState] = React.useState(filters || { q: '', status: 'all' }) React.useEffect(() => { setState(filters || { q: '', status: 'all' }) }, [filters]) function update(key, value) { setState((current) => ({ ...current, [key]: value })) } function applyFilters(event) { event.preventDefault() router.get(endpoints.index, state, { preserveState: true, replace: true, preserveScroll: true }) } const items = stories?.data || [] return (

Moderation surface

Stories

Browse creator stories, filter by status, and jump straight to the public view when it exists.

Page {stories?.current_page || 1} / {stories?.last_page || 1} {Number(stories?.total || 0).toLocaleString()} stories
update('q', event.target.value)} placeholder="Search title, slug, or creator" className="rounded-2xl border border-white/10 bg-slate-950/70 px-4 py-3 text-sm text-white outline-none" />
{items.length === 0 ? (
No stories matched the current filters.
) : items.map((story) => (
{story.cover_url ? ( {story.title} ) : (
)}
{String(story.status || 'draft').replaceAll('_', ' ')} {story.creator ? ( @{story.creator.username} ) : null}

{story.title}

/{story.slug}{story.creator ? ` • ${story.creator.name}` : ''}

{story.excerpt ?

{story.excerpt}

: null}
{story.published_at ? new Date(story.published_at).toLocaleDateString() : 'Unpublished'} {story.created_at ? new Date(story.created_at).toLocaleDateString() : '—'}
{story.open_url ? ( Open ) : ( No public view )}
))}
{stories?.prev_page_url || stories?.next_page_url ? (
Showing page {stories?.current_page || 1} of {stories?.last_page || 1}
{stories?.prev_page_url ? ( ) : null} {stories?.next_page_url ? ( ) : null}
) : null}
) }