import { convertStringifiedBooleanToBoolean, isDesktopApplication } from '@/Utils' import { STRING_FAILED_TO_UPDATE_USER_SETTING } from '@/Strings' import { useCallback, useEffect, useState } from 'preact/hooks' import { WebApplication } from '@/UIModels/Application' import { observer } from 'mobx-react-lite' import { PreferencesGroup, PreferencesSegment, Subtitle, Text, Title, } from '@/Components/Preferences/PreferencesComponents' import { Dropdown, DropdownItem } from '@/Components/Dropdown' import { Switch } from '@/Components/Switch' import { HorizontalSeparator } from '@/Components/Shared/HorizontalSeparator' import { FeatureStatus, FeatureIdentifier, EmailBackupFrequency, MuteFailedBackupsEmailsOption, SettingName, } from '@standardnotes/snjs' type Props = { application: WebApplication } export const EmailBackups = observer(({ application }: Props) => { const [isLoading, setIsLoading] = useState(false) const [emailFrequency, setEmailFrequency] = useState(EmailBackupFrequency.Disabled) const [emailFrequencyOptions, setEmailFrequencyOptions] = useState([]) const [isFailedBackupEmailMuted, setIsFailedBackupEmailMuted] = useState(true) const [isEntitledToEmailBackups, setIsEntitledToEmailBackups] = useState(false) const loadEmailFrequencySetting = useCallback(async () => { if (!application.getUser()) { return } setIsLoading(true) try { const userSettings = await application.settings.listSettings() setEmailFrequency( userSettings.getSettingValue( SettingName.EmailBackupFrequency, EmailBackupFrequency.Disabled, ), ) setIsFailedBackupEmailMuted( convertStringifiedBooleanToBoolean( userSettings.getSettingValue( SettingName.MuteFailedBackupsEmails, MuteFailedBackupsEmailsOption.NotMuted, ), ), ) } catch (error) { console.error(error) } finally { setIsLoading(false) } }, [application]) useEffect(() => { const emailBackupsFeatureStatus = application.features.getFeatureStatus(FeatureIdentifier.DailyEmailBackup) setIsEntitledToEmailBackups(emailBackupsFeatureStatus === FeatureStatus.Entitled) const frequencyOptions = [] for (const frequency in EmailBackupFrequency) { const frequencyValue = EmailBackupFrequency[frequency as keyof typeof EmailBackupFrequency] frequencyOptions.push({ value: frequencyValue, label: application.settings.getEmailBackupFrequencyOptionLabel(frequencyValue), }) } setEmailFrequencyOptions(frequencyOptions) loadEmailFrequencySetting().catch(console.error) }, [application, loadEmailFrequencySetting]) const updateSetting = async (settingName: SettingName, payload: string): Promise => { try { await application.settings.updateSetting(settingName, payload, false) return true } catch (e) { application.alertService.alert(STRING_FAILED_TO_UPDATE_USER_SETTING).catch(console.error) return false } } const updateEmailFrequency = async (frequency: EmailBackupFrequency) => { const previousFrequency = emailFrequency setEmailFrequency(frequency) const updateResult = await updateSetting(SettingName.EmailBackupFrequency, frequency) if (!updateResult) { setEmailFrequency(previousFrequency) } } const toggleMuteFailedBackupEmails = async () => { if (!isEntitledToEmailBackups) { return } const previousValue = isFailedBackupEmailMuted setIsFailedBackupEmailMuted(!isFailedBackupEmailMuted) const updateResult = await updateSetting(SettingName.MuteFailedBackupsEmails, `${!isFailedBackupEmailMuted}`) if (!updateResult) { setIsFailedBackupEmailMuted(previousValue) } } const handleEmailFrequencyChange = (item: string) => { if (!isEntitledToEmailBackups) { return } updateEmailFrequency(item as EmailBackupFrequency).catch(console.error) } return ( Email Backups {!isEntitledToEmailBackups && ( <> A Plus or Pro subscription plan is required to enable Email Backups.{' '} Learn more . )}
{!isDesktopApplication() && ( Daily encrypted email backups of your entire data set delivered directly to your inbox. )} Email frequency How often to receive backups.
{isLoading ? (
) : ( )}
Email preferences
Receive a notification email if an email backup fails.
{isLoading ? (
) : ( )}
) })