import { useCallback, useEffect, useState } from "react"; import type { DeckAccount, DeckColumn, ChatState } from "../types/app"; import { twitterClient } from "../lib/client/twitterClient"; import { ChatCard } from "./ChatCard"; interface ChatColumnProps { column: DeckColumn & { kind: "chat" }; account: DeckAccount; onRemove: () => void; } export function ChatColumn({ column, account, onRemove }: ChatColumnProps) { const [state, setState] = useState({ entries: [], isLoading: false }); const [error, setError] = useState(); const refresh = useCallback(async () => { setState(prev => ({ ...prev, isLoading: true })); setError(undefined); try { const notifications = await twitterClient.notifications({ cookie: account.cookie }); setState({ entries: notifications, isLoading: false }); } catch (err) { setError(err instanceof Error ? err.message : "Failed to refresh chat"); setState(prev => ({ ...prev, isLoading: false })); } }, [account.cookie]); useEffect(() => { refresh(); }, [refresh, account.id]); return (

Signal

{column.title || "Chat"}

Mentions, follows and notifications for {account.label}

{error &&

{error}

} {state.isLoading && !state.entries.length ? (
Loading…
) : (
{state.entries.map(entry => ( ))} {!state.entries.length &&

No recent notifications.

}
)}
); }