diff --git a/web/src/pages/Screener.tsx b/web/src/pages/Screener.tsx index 2d841c6..75ba9bd 100644 --- a/web/src/pages/Screener.tsx +++ b/web/src/pages/Screener.tsx @@ -6,6 +6,7 @@ import { Badge } from "../components/ui/badge"; import { Button } from "../components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../components/ui/card"; import { Skeleton } from "../components/ui/skeleton"; +import { TextField, TextFieldInput } from "../components/ui/text-field"; import { useNavigate } from "@solidjs/router"; // Preset awam -> body /api/screen. PRESET_SEMUA = default auto-jalan. @@ -24,14 +25,26 @@ function ScreenerInner() { const [busy, setBusy] = createSignal(false); const [err, setErr] = createSignal(""); const [aktif, setAktif] = createSignal(""); + const [q, setQ] = createSignal(""); + const [showCustom, setShowCustom] = createSignal(false); async function runPreset(p: (typeof PRESETS)[number]) { - setErr(""); setBusy(true); setAktif(p.label); + setErr(""); setBusy(true); setAktif(p.label); setShowCustom(false); try { const r = await api.screen(p.body); setRows(r.rows); setRan(true); } catch (e) { setErr(String(e)); } finally { setBusy(false); } } + async function runCustom() { + const query = q().trim(); + if (!query) return; + setErr(""); setBusy(true); setAktif("custom"); + try { + const r = await api.screen({ q: query, limit: 20 }); + setRows(r.rows); setRan(true); + } catch (e) { setErr(String(e)); } + finally { setBusy(false); } + } // Default = semua: auto-jalan preset "Semua" sekali saat halaman dibuka. onMount(() => { if (!ran()) void runPreset(PRESET_SEMUA); }); const hasil = () => rows().map((r) => ({ row: r, ...verdictFor(r) })); @@ -48,6 +61,13 @@ function ScreenerInner() { )} + + 🔎 Cari nama / sektor sendiriKetik nama perusahaan atau sektor (mis. "bank", "energi"). + + { setQ(e.currentTarget.value); setShowCustom(true); }} onKeyDown={(e: KeyboardEvent) => { if (e.key === "Enter") runCustom(); }} /> + + +

{err()}