import React, { useState, useEffect } from 'react'; import { Card, CardHeader, CardContent, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { getDirectusClient, readItems } from '@/lib/directus/client'; import { Badge } from '@/components/ui/badge'; export default function LiveAssembler() { const [loading, setLoading] = useState(false); const [data, setData] = useState({ sites: [], avatars: [], cities: [], templates: [] }); const [selections, setSelections] = useState({ siteId: '', avatarId: '', cityId: '', // Need to fetch cities intelligently (too many), for now fetch first 100 templateId: '', niche: '' }); const [preview, setPreview] = useState(null); useEffect(() => { async function init() { const client = getDirectusClient(); const [sites, avatars, cities, templates] = await Promise.all([ client.request(readItems('sites')), client.request(readItems('avatars')), client.request(readItems('geo_locations', { limit: 50 })), // Just sample client.request(readItems('article_templates')) ]); setData({ sites, avatars, cities, templates }); } init(); }, []); const handleGenerate = async () => { setLoading(true); try { const res = await fetch('/api/preview-article', { method: 'POST', body: JSON.stringify(selections) }); const json = await res.json(); if (json.error) throw new Error(json.error); setPreview(json); } catch (e) { console.error(e); } finally { setLoading(false); } }; return (
{/* Controls */} Assembler Settings
{/* Preview Window */}
{preview ? (

{preview.title}

Slug: {preview.slug} {preview.html_content.length} chars
) : (
Configure setttings and click Generate to preview article.
)}
); }