import { useState } from "react"; import { useNavigate } from "react-router"; import type { AttentionItem, AttentionView } from "../attention"; import { Button } from "./components/button"; import { Popover, PopoverContent, PopoverTrigger } from "./components/popover"; import { Empty } from "./frame"; import { useLoaded } from "./lib/api"; import { cn } from "./lib/cn"; import { post } from "./lib/write"; const DOT: Record = { alarm: "bg-alarm", waiting: "bg-accent", note: "bg-neutral-400", }; function BellIcon() { return ( ); } function Item({ item, onOpen }: { item: AttentionItem; onOpen: () => void }) { return ( ); } export function AttentionBell() { const [nonce, setNonce] = useState(0); const [open, setOpen] = useState(false); const view = useLoaded(`/api/attention?v=${nonce}`); const navigate = useNavigate(); const reload = () => setNonce((n) => n + 1); const unread = view.state === "ready" ? view.data.unread : 0; const openItem = (item: AttentionItem) => { void post("/api/attention/read", { ids: [item.id] }).then(() => { setOpen(false); reload(); void navigate(item.href); }); }; return (

Needs your attention

{view.state === "ready" && view.data.items.length === 0 ? (
Nothing is waiting on you.
) : ( view.state === "ready" && view.data.items.map((item) => ( openItem(item)} /> )) )}
); }