import React, { useCallback } from 'react'; import { Box, Text, Switch, Button, color, Spinner } from 'folds'; import { IPusherRequest } from 'matrix-js-sdk'; import { SequenceCard } from '../../../components/sequence-card'; import { SequenceCardStyle } from '../styles.css'; import { SettingTile } from '../../../components/setting-tile'; import { useSetting } from '../../../state/hooks/settings'; import { settingsAtom } from '../../../state/settings'; import { getNotificationState, usePermissionState } from '../../../hooks/usePermission'; import { useEmailNotifications } from '../../../hooks/useEmailNotifications'; import { AsyncStatus, useAsyncCallback } from '../../../hooks/useAsyncCallback'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; function EmailNotification() { const mx = useMatrixClient(); const [result, refreshResult] = useEmailNotifications(); const [setState, setEnable] = useAsyncCallback( useCallback( async (email: string, enable: boolean) => { if (enable) { await mx.setPusher({ kind: 'email', app_id: 'm.email', pushkey: email, app_display_name: 'Email Notifications', device_display_name: email, lang: 'en', data: { brand: 'Cinny', }, append: true, }); return; } await mx.setPusher({ pushkey: email, app_id: 'm.email', kind: null, } as unknown as IPusherRequest); }, [mx] ) ); const handleChange = (value: boolean) => { if (result && result.email) { setEnable(result.email, value).then(() => { refreshResult(); }); } }; return ( {result && !result.email && ( Your account does not have any email attached. )} {result && result.email && <>Send notification to your email. {`("${result.email}")`}} {result === null && ( Unexpected Error! )} {result === undefined && 'Send notification to your email.'} } after={ <> {setState.status !== AsyncStatus.Loading && typeof result === 'object' && result?.email && } {(setState.status === AsyncStatus.Loading || result === undefined) && ( )} } /> ); } export function SystemNotification() { const notifPermission = usePermissionState('notifications', getNotificationState()); const [showNotifications, setShowNotifications] = useSetting(settingsAtom, 'showNotifications'); const [isNotificationSounds, setIsNotificationSounds] = useSetting( settingsAtom, 'isNotificationSounds' ); const requestNotificationPermission = () => { window.Notification.requestPermission(); }; return ( System {'Notification' in window ? 'Notification permission is blocked. Please allow notification permission from browser address bar.' : 'Notifications are not supported by the system.'} ) : ( Show desktop notifications when message arrive. ) } after={ notifPermission === 'prompt' ? ( ) : ( ) } /> } /> ); }