import React from 'react'; import { Field, Form, Formik } from 'formik'; import useSWR from 'swr'; import LoadingSpinner from '../../../Common/LoadingSpinner'; import Button from '../../../Common/Button'; import { defineMessages, useIntl } from 'react-intl'; import axios from 'axios'; import * as Yup from 'yup'; import { useToasts } from 'react-toast-notifications'; import Alert from '../../../Common/Alert'; import NotificationTypeSelector from '../../../NotificationTypeSelector'; const messages = defineMessages({ save: 'Save Changes', saving: 'Saving…', agentEnabled: 'Enable Agent', accessToken: 'Access Token', validationAccessTokenRequired: 'You must provide an access token', pushbulletSettingsSaved: 'Pushbullet notification settings saved successfully!', pushbulletSettingsFailed: 'Pushbullet notification settings failed to save.', testSent: 'Test notification sent!', test: 'Test', settingUpPushbullet: 'Setting Up Pushbullet Notifications', settingUpPushbulletDescription: 'To configure Pushbullet notifications, you will need to create an access token and enter it below.', notificationTypes: 'Notification Types', }); const NotificationsPushbullet: React.FC = () => { const intl = useIntl(); const { addToast } = useToasts(); const { data, error, revalidate } = useSWR( '/api/v1/settings/notifications/pushbullet' ); const NotificationsPushbulletSchema = Yup.object().shape({ accessToken: Yup.string().required( intl.formatMessage(messages.validationAccessTokenRequired) ), }); if (!data && !error) { return ; } return ( { try { await axios.post('/api/v1/settings/notifications/pushbullet', { enabled: values.enabled, types: values.types, options: { accessToken: values.accessToken, }, }); 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, values, isValid, setFieldValue }) => { const testSettings = async () => { await axios.post('/api/v1/settings/notifications/pushbullet/test', { enabled: true, types: values.types, options: { accessToken: values.accessToken, }, }); addToast(intl.formatMessage(messages.testSent), { appearance: 'info', autoDismiss: true, }); }; return ( <> {intl.formatMessage(messages.settingUpPushbulletDescription, { CreateAccessTokenLink: function CreateAccessTokenLink(msg) { return ( {msg} ); }, })}
{errors.accessToken && touched.accessToken && (
{errors.accessToken}
)}
{intl.formatMessage(messages.notificationTypes)} *
setFieldValue('types', newTypes) } />
); }}
); }; export default NotificationsPushbullet;