import axios from 'axios'; import { Field, Form, Formik } from 'formik'; import { useRouter } from 'next/router'; import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useToasts } from 'react-toast-notifications'; import useSWR from 'swr'; import * as Yup from 'yup'; import { UserSettingsNotificationsResponse } from '../../../../../server/interfaces/api/userSettingsInterfaces'; import { useUser } from '../../../../hooks/useUser'; import globalMessages from '../../../../i18n/globalMessages'; import Button from '../../../Common/Button'; import LoadingSpinner from '../../../Common/LoadingSpinner'; import { ALL_NOTIFICATIONS } from '../../../NotificationTypeSelector'; const messages = defineMessages({ telegramsettingssaved: 'Telegram notification settings saved successfully!', telegramsettingsfailed: 'Telegram notification settings failed to save.', enableTelegram: 'Enable Notifications', telegramChatId: 'Chat ID', telegramChatIdTipLong: 'Start a chat, add @get_id_bot, and issue the /my_id command', sendSilently: 'Send Silently', sendSilentlyDescription: 'Send notifications with no sound', validationTelegramChatId: 'You must provide a valid chat ID', }); const UserTelegramSettings: React.FC = () => { const intl = useIntl(); const { addToast } = useToasts(); const router = useRouter(); const { user } = useUser({ id: Number(router.query.userId) }); const { data, error, revalidate } = useSWR( user ? `/api/v1/user/${user?.id}/settings/notifications` : null ); const UserNotificationsTelegramSchema = Yup.object().shape({ telegramChatId: Yup.string() .when('enableTelegram', { is: true, then: Yup.string() .nullable() .required(intl.formatMessage(messages.validationTelegramChatId)), otherwise: Yup.string().nullable(), }) .matches( /^-?\d+$/, intl.formatMessage(messages.validationTelegramChatId) ), }); if (!data && !error) { return ; } return ( { try { await axios.post(`/api/v1/user/${user?.id}/settings/notifications`, { pgpKey: data?.pgpKey, discordId: data?.discordId, telegramChatId: values.telegramChatId, telegramSendSilently: values.telegramSendSilently, notificationTypes: { telegram: values.enableTelegram ? ALL_NOTIFICATIONS : 0, }, }); addToast(intl.formatMessage(messages.telegramsettingssaved), { appearance: 'success', autoDismiss: true, }); } catch (e) { addToast(intl.formatMessage(messages.telegramsettingsfailed), { appearance: 'error', autoDismiss: true, }); } finally { revalidate(); } }} > {({ errors, touched, isSubmitting, isValid }) => { return (
{errors.telegramChatId && touched.telegramChatId && (
{errors.telegramChatId}
)}
); }}
); }; export default UserTelegramSettings;