import { DialogButton, Focusable, PanelSection } from '@decky/ui'; import { useEffect, useMemo, useState } from 'react'; import { FaTimes } from 'react-icons/fa'; import { Announcement, getAnnouncements } from '../store'; import { useSetting } from '../utils/hooks/useSetting'; const SEVERITIES = { High: { color: '#bb1414', text: '#fff', }, Medium: { color: '#bbbb14', text: '#fff', }, Low: { color: '#1488bb', text: '#fff', }, }; const welcomeAnnouncement: Announcement = { id: 'welcomeAnnouncement', title: 'Welcome to Decky!', text: 'We hope you enjoy using Decky! If you have any questions or feedback, please let us know.', created: Date.now().toString(), updated: Date.now().toString(), }; export function AnnouncementsDisplay() { const [announcements, setAnnouncements] = useState([]); // showWelcome will display a welcome motd, the welcome motd has an id of "welcome" and once that is saved to hiddenMotdId, it will not show again const [hiddenAnnouncementIds, setHiddenAnnouncementIds] = useSetting('hiddenAnnouncementIds', []); async function fetchAnnouncement() { const announcements = await getAnnouncements(); announcements && setAnnouncements((oldAnnouncements) => [...announcements, ...oldAnnouncements]); } useEffect(() => { void fetchAnnouncement(); }, []); useEffect(() => { if (hiddenAnnouncementIds.length > 0) { setAnnouncements((oldAnnouncement) => [welcomeAnnouncement, ...oldAnnouncement]); } }, [hiddenAnnouncementIds]); const currentlyDisplayingAnnouncement: Announcement | null = useMemo(() => { return announcements.find((announcement) => !hiddenAnnouncementIds.includes(announcement.id)) || null; }, [announcements, hiddenAnnouncementIds]); function hideAnnouncement(id: string) { setHiddenAnnouncementIds([...hiddenAnnouncementIds, id]); void fetchAnnouncement(); } if (!currentlyDisplayingAnnouncement) { return null; } // Severity is not implemented in the API currently const severity = SEVERITIES['Low']; return (
{currentlyDisplayingAnnouncement.title} hideAnnouncement(currentlyDisplayingAnnouncement.id)} >
{currentlyDisplayingAnnouncement.text}
); }