import { CloudIcon, MailIcon } from '@heroicons/react/solid'; import { useRouter } from 'next/router'; import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import useSWR from 'swr'; import { UserSettingsNotificationsResponse } from '../../../../../server/interfaces/api/userSettingsInterfaces'; import DiscordLogo from '../../../../assets/extlogos/discord.svg'; import PushbulletLogo from '../../../../assets/extlogos/pushbullet.svg'; import PushoverLogo from '../../../../assets/extlogos/pushover.svg'; import TelegramLogo from '../../../../assets/extlogos/telegram.svg'; import { useUser } from '../../../../hooks/useUser'; import globalMessages from '../../../../i18n/globalMessages'; import Error from '../../../../pages/_error'; import LoadingSpinner from '../../../Common/LoadingSpinner'; import PageTitle from '../../../Common/PageTitle'; import SettingsTabs, { SettingsRoute } from '../../../Common/SettingsTabs'; const messages = defineMessages({ notifications: 'Notifications', notificationsettings: 'Notification Settings', email: 'Email', webpush: 'Web Push', }); const UserNotificationSettings: React.FC = ({ children }) => { const intl = useIntl(); const router = useRouter(); const { user } = useUser({ id: Number(router.query.userId) }); const { data, error } = useSWR( user ? `/api/v1/user/${user?.id}/settings/notifications` : null ); const settingsRoutes: SettingsRoute[] = [ { text: intl.formatMessage(messages.email), content: ( {intl.formatMessage(messages.email)} ), route: '/settings/notifications/email', regex: /\/settings\/notifications\/email/, hidden: !data?.emailEnabled, }, { text: intl.formatMessage(messages.webpush), content: ( {intl.formatMessage(messages.webpush)} ), route: '/settings/notifications/webpush', regex: /\/settings\/notifications\/webpush/, hidden: !data?.webPushEnabled, }, { text: 'Discord', content: ( Discord ), route: '/settings/notifications/discord', regex: /\/settings\/notifications\/discord/, hidden: !data?.discordEnabled, }, { text: 'Pushbullet', content: ( Pushbullet ), route: '/settings/notifications/pushbullet', regex: /\/settings\/notifications\/pushbullet/, }, { text: 'Pushover', content: ( Pushover ), route: '/settings/notifications/pushover', regex: /\/settings\/notifications\/pushover/, }, { text: 'Telegram', content: ( Telegram ), route: '/settings/notifications/telegram', regex: /\/settings\/notifications\/telegram/, hidden: !data?.telegramEnabled || !data?.telegramBotUsername, }, ]; settingsRoutes.forEach((settingsRoute) => { settingsRoute.route = router.asPath.includes('/profile') ? `/profile${settingsRoute.route}` : `/users/${user?.id}${settingsRoute.route}`; }); if (!data && !error) { return ; } if (!data) { return ; } return ( <>

{intl.formatMessage(messages.notificationsettings)}

{children}
); }; export default UserNotificationSettings;