import { useEffect, useRef, useState } from "react"; import { Modal, Button, Form } from "react-bootstrap" import { useSettings, ThemePreference } from "../../context/settings"; import { NotificationSettings, UdalostEnum, getNotificationSettings, updateNotificationSettings } from "../../../../types"; import { useAuth } from "../../context/auth"; type Props = { isOpen: boolean, onClose: () => void, onSave: (bankAccountNumber?: string, bankAccountHolderName?: string, hideSoupsOption?: boolean, themePreference?: ThemePreference) => void, } /** Modální dialog pro uživatelská nastavení. */ export default function SettingsModal({ isOpen, onClose, onSave }: Readonly) { const auth = useAuth(); const settings = useSettings(); const bankAccountRef = useRef(null); const nameRef = useRef(null); const hideSoupsRef = useRef(null); const themeRef = useRef(null); const ntfyTopicRef = useRef(null); const discordWebhookRef = useRef(null); const teamsWebhookRef = useRef(null); const [notifSettings, setNotifSettings] = useState({}); const [enabledEvents, setEnabledEvents] = useState([]); useEffect(() => { if (isOpen && auth?.login) { getNotificationSettings().then(response => { if (response.data) { setNotifSettings(response.data); setEnabledEvents(response.data.enabledEvents ?? []); } }).catch(() => {}); } }, [isOpen, auth?.login]); const toggleEvent = (event: UdalostEnum) => { setEnabledEvents(prev => prev.includes(event) ? prev.filter(e => e !== event) : [...prev, event] ); }; const handleSave = async () => { // Uložení notifikačních nastavení na server await updateNotificationSettings({ body: { ntfyTopic: ntfyTopicRef.current?.value || undefined, discordWebhookUrl: discordWebhookRef.current?.value || undefined, teamsWebhookUrl: teamsWebhookRef.current?.value || undefined, enabledEvents, } }).catch(() => {}); // Uložení ostatních nastavení (localStorage) onSave( bankAccountRef.current?.value, nameRef.current?.value, hideSoupsRef.current?.checked, themeRef.current?.value as ThemePreference, ); }; return (

Nastavení

Vzhled

Barevný motiv

Obecné

Experimentální funkce - zejména u TechTower bývá problém polévky spolehlivě rozeznat.

Notifikace

Nastavením notifikací budete dostávat upozornění o událostech (např. "Jdeme na oběd") přímo do vámi zvoleného komunikačního kanálu.

ntfy téma (topic) e.stopPropagation()} /> Téma pro ntfy push notifikace. Nechte prázdné pro vypnutí. Discord webhook URL e.stopPropagation()} /> URL webhooku Discord kanálu. Nechte prázdné pro vypnutí. MS Teams webhook URL e.stopPropagation()} /> URL webhooku MS Teams kanálu. Nechte prázdné pro vypnutí. Události k odběru {Object.values(UdalostEnum).map(event => ( toggleEvent(event)} /> ))} Zvolte události, o kterých chcete být notifikováni. Notifikace jsou odesílány pouze uživatelům se stejnou zvolenou lokalitou.

Bankovní účet

Nastavením čísla účtu umožníte automatické generování QR kódů pro úhradu za vámi provedené objednávky v rámci Pizza day.

Číslo účtu e.stopPropagation()} /> Pokud vaše číslo účtu neobsahuje předčíslí, je možné ho zcela vynechat. Název příjemce e.stopPropagation()} /> Jméno majitele účtu pro QR platbu.
); }