import React, { useEffect, useState } from "react"; import { createRoot } from "react-dom/client"; import { readTweet, createTweet, destroyTweet, buildCSRFHeaders, } from "./ash_rpc"; type Tweet = { id: string; content: string; userId: string; state: "posted" | "drafted"; }; function TweetCompose({ onPosted }: { onPosted: (tweet: Tweet) => void }) { const [content, setContent] = useState(""); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(null); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!content.trim()) return; setSubmitting(true); setError(null); const result = await createTweet({ input: { content: content.trim() }, fields: ["id", "content", "userId", "state"], headers: buildCSRFHeaders(), }); setSubmitting(false); if (result.success) { onPosted(result.data as Tweet); setContent(""); } else { setError(result.errors.map((e) => e.message).join(", ")); } } return (