import Button from '@app/components/Common/Button'; import LoadingSpinner from '@app/components/Common/LoadingSpinner'; import SensitiveInput from '@app/components/Common/SensitiveInput'; import NotificationTypeSelector from '@app/components/NotificationTypeSelector'; import { useUser } from '@app/hooks/useUser'; import globalMessages from '@app/i18n/globalMessages'; import defineMessages from '@app/utils/defineMessages'; import type { UserSettingsNotificationsResponse } from '@server/interfaces/api/userSettingsInterfaces'; import axios from 'axios'; import { Form, Formik } from 'formik'; import { useRouter } from 'next/router'; import { useIntl } from 'react-intl'; import { useToasts } from 'react-toast-notifications'; import useSWR from 'swr'; import * as Yup from 'yup'; const messages = defineMessages( 'components.UserProfile.UserSettings.UserNotificationSettings', { pushbulletsettingssaved: 'Pushbullet notification settings saved successfully!', pushbulletsettingsfailed: 'Pushbullet notification settings failed to save.', pushbulletAccessToken: 'Access Token', pushbulletAccessTokenTip: 'Create a token from your Account Settings', validationPushbulletAccessToken: 'You must provide an access token', } ); const UserPushbulletSettings = () => { const intl = useIntl(); const { addToast } = useToasts(); const router = useRouter(); const { user } = useUser({ id: Number(router.query.userId) }); const { data, error, mutate: revalidate, } = useSWR( user ? `/api/v1/user/${user?.id}/settings/notifications` : null ); const UserNotificationsPushbulletSchema = Yup.object().shape({ pushbulletAccessToken: Yup.string().when('types', { is: (types: number) => !!types, then: Yup.string() .nullable() .required(intl.formatMessage(messages.validationPushbulletAccessToken)), otherwise: Yup.string().nullable(), }), }); if (!data && !error) { return ; } return ( { try { await axios.post(`/api/v1/user/${user?.id}/settings/notifications`, { pgpKey: data?.pgpKey, discordId: data?.discordId, pushbulletAccessToken: values.pushbulletAccessToken, pushoverApplicationToken: data?.pushoverApplicationToken, pushoverUserKey: data?.pushoverUserKey, telegramChatId: data?.telegramChatId, telegramSendSilently: data?.telegramSendSilently, notificationTypes: { pushbullet: values.types, }, }); addToast(intl.formatMessage(messages.pushbulletsettingssaved), { appearance: 'success', autoDismiss: true, }); } catch (e) { addToast(intl.formatMessage(messages.pushbulletsettingsfailed), { appearance: 'error', autoDismiss: true, }); } finally { revalidate(); } }} > {({ errors, touched, isSubmitting, isValid, values, setFieldValue, setFieldTouched, }) => { return (
{errors.pushbulletAccessToken && touched.pushbulletAccessToken && (
{errors.pushbulletAccessToken}
)}
{ setFieldValue('types', newTypes); setFieldTouched('types'); }} error={ errors.types && touched.types ? (errors.types as string) : undefined } />
); }}
); }; export default UserPushbulletSettings;