import { useEffect, useRef, useState } from "react"; import { X } from "lucide-react"; import "./TopicSelector.css"; import { DEFAULT_NEWS_TIMEFRAME, NEWS_TIMEFRAMES } from "../constants/timeframes.js"; const SUGGESTIONS = [ "Russia–Ukraine war", "Israel–Gaza conflict", "Sahel coups", "South China Sea disputes", "Climate negotiations at COP", "Migration across the Mediterranean", ]; export default function TopicSelector({ initialQuery, onSubmit, onCancel }) { const [topic, setTopic] = useState(initialQuery?.topic ?? ""); const [newsTimeframe, setNewsTimeframe] = useState( initialQuery?.newsTimeframe ?? DEFAULT_NEWS_TIMEFRAME ); const inputRef = useRef(null); useEffect(() => { inputRef.current?.focus(); }, []); useEffect(() => { setTopic(initialQuery?.topic ?? ""); setNewsTimeframe(initialQuery?.newsTimeframe ?? DEFAULT_NEWS_TIMEFRAME); }, [initialQuery]); useEffect(() => { function onKey(e) { if (e.key === "Escape" && onCancel) onCancel(); } window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }, [onCancel]); const canSubmit = topic.trim().length > 0; function submit(e) { e?.preventDefault(); if (!canSubmit) return; onSubmit({ topic: topic.trim(), newsTimeframe, }); } return (
Define a topic

Open an investigation

{onCancel && ( )}
Suggested investigations
{SUGGESTIONS.map((s) => ( ))}
); }