import * as React from "react"; import { useTranslation } from "react-i18next"; import { Divider } from "~/components/Divider"; import { SendouButton } from "~/components/elements/Button"; import { SendouPopover } from "~/components/elements/Popover"; import { FormMessage } from "~/components/FormMessage"; import { Label } from "~/components/Label"; import { Config } from "~/config"; import { useUser } from "~/features/auth/core/user"; import { SendouForm } from "~/form/SendouForm"; import { disableBuildAbilitySortingSchema, disallowScrimPickupsFromUntrustedSchema, spoilerFreeModeSchema, } from "../settings-schemas"; export function PreferencesTab() { const user = useUser(); if (!user) return null; return (
{({ FormField }) => } {({ FormField }) => } {({ FormField }) => }
); } function PushNotificationsEnabler() { const { t } = useTranslation(["common"]); const [notificationsPermsGranted, setNotificationsPermsGranted] = React.useState("default"); React.useEffect(() => { if (!("serviceWorker" in navigator)) { setNotificationsPermsGranted("not-supported"); return; } if (!("PushManager" in window)) { setNotificationsPermsGranted("not-supported"); return; } setNotificationsPermsGranted(Notification.permission); }, []); function askPermission() { Notification.requestPermission().then((permission) => { setNotificationsPermsGranted(permission); if (permission === "granted") { initServiceWorker(); } }); } async function initServiceWorker() { const swRegistration = await navigator.serviceWorker.register("sw-2.js"); const subscription = await swRegistration.pushManager.getSubscription(); if (subscription) { sendSubscriptionToServer(subscription); } else { const subscription = await swRegistration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: Config.vapid.publicKey, }); sendSubscriptionToServer(subscription); } } function sendSubscriptionToServer(subscription: PushSubscription) { fetch("/notifications/subscribe", { method: "post", body: JSON.stringify(subscription), headers: { "content-type": "application/json" }, }); } return (
{notificationsPermsGranted === "granted" ? ( {t("common:actions.disable")} } > {t("common:settings.notifications.disableInfo")} ) : notificationsPermsGranted === "not-supported" || notificationsPermsGranted === "denied" ? ( {t("common:actions.enable")} } > {notificationsPermsGranted === "not-supported" ? t("common:settings.notifications.browserNotSupported") : t("common:settings.notifications.permissionDenied")} ) : ( {t("common:actions.enable")} )} {t("common:settings.notifications.description")}
); }