import DiscordLogo from '@app/assets/extlogos/discord.svg'; import PushbulletLogo from '@app/assets/extlogos/pushbullet.svg'; import PushoverLogo from '@app/assets/extlogos/pushover.svg'; import TelegramLogo from '@app/assets/extlogos/telegram.svg'; import LoadingSpinner from '@app/components/Common/LoadingSpinner'; import PageTitle from '@app/components/Common/PageTitle'; import type { SettingsRoute } from '@app/components/Common/SettingsTabs'; import SettingsTabs from '@app/components/Common/SettingsTabs'; import { useUser } from '@app/hooks/useUser'; import globalMessages from '@app/i18n/globalMessages'; import Error from '@app/pages/_error'; import { CloudIcon, EnvelopeIcon } from '@heroicons/react/24/solid'; import type { UserSettingsNotificationsResponse } from '@server/interfaces/api/userSettingsInterfaces'; import { useRouter } from 'next/router'; import { defineMessages, useIntl } from 'react-intl'; import useSWR from 'swr'; const messages = defineMessages({ notifications: 'Notifications', notificationsettings: 'Notification Settings', email: 'Email', webpush: 'Web Push', }); type UserNotificationSettingsProps = { children: React.ReactNode; }; const UserNotificationSettings = ({ children, }: UserNotificationSettingsProps) => { 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;