import { createSignal, createEffect, For, Show, on } from "solid-js"; import { useParams } from "@solidjs/router"; import { api, type ReportPayload } from "../lib/api"; import { Citations } from "../components/Citations"; import { Term } from "../components/Awam"; import { PageHead, RecBadge } from "../components/ui"; import { Badge } from "../components/ui/badge"; import { Button } from "../components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "../components/ui/card"; import { Skeleton } from "../components/ui/skeleton"; import { TextField, TextFieldInput } from "../components/ui/text-field"; function ReportInner() { const params = useParams(); const [rep, setRep] = createSignal(null); const [md, setMd] = createSignal(""); const [question, setQuestion] = createSignal(""); const [answer, setAnswer] = createSignal(""); const [busy, setBusy] = createSignal(true); const [asking, setAsking] = createSignal(false); const [err, setErr] = createSignal(""); async function load() { setErr(""); setBusy(true); try { setRep(await api.report(params.ticker)); } catch (e) { setErr(String(e)); } finally { setBusy(false); } } // Refetch when the ticker param changes (ReportInner stays mounted // because Gate wraps it, but params.ticker is reactive). createEffect(on(() => params.ticker, () => load())); async function exportMd() { setMd(await api.reportMd(params.ticker)); } async function ask() { if (!question().trim()) return; setAsking(true); try { const r = await api.interrogate(params.ticker, question()); setAnswer(r.answer); } finally { setAsking(false); } } function dl(url: string, name: string) { const a = document.createElement("a"); a.href = url; a.download = name; a.click(); // Revoke after a short delay to avoid blob URL leak. setTimeout(() => URL.revokeObjectURL(url), 60_000); } return (

{err()}

Kesimpulan buat kamu 🤝

{rep()!.narasi_awam}

conviction {rep()!.synthesis.conviction}/5 conflict flagged position {rep()!.synthesis.position_pct}%

{rep()!.synthesis.thesis}

Export {(s) => {s.name}

{s.body}

}
Tanya soal report ini 💬
setQuestion(e.currentTarget.value)} />

{answer()}

Jawaban diambil dari data report ini + — bukan karangan.

{md().slice(0, 2000)}
); } import { Gate } from "../index"; export default function Report() { return ; }