import React from 'react'; // tslint:disable-next-line: no-submodule-imports import useUpdate from 'react-use/lib/useUpdate'; import styled from 'styled-components'; import { SettingsKey } from '../../data/settings-key'; import { isAudioNotificationSupported } from '../../types/Settings'; import { Notifications } from '../../util/notifications'; import { SessionButton } from '../basic/SessionButton'; import { SessionRadioGroup } from '../basic/SessionRadioGroup'; import { SpacerLG } from '../basic/Text'; import { SessionSettingsItemWrapper, SessionToggleWithDescription } from './SessionSettingListItem'; // tslint:disable: use-simple-attributes enum NOTIFICATION { MESSAGE = 'message', NAME = 'name', COUNT = 'count', OFF = 'off', } const StyledButtonContainer = styled.div` display: flex; width: min-content; flex-direction: column; padding-inline-start: var(--margins-lg); `; export const SessionNotificationGroupSettings = (props: { hasPassword: boolean | null }) => { const forceUpdate = useUpdate(); if (props.hasPassword === null) { return null; } const initialNotificationEnabled = window.getSettingValue(SettingsKey.settingsNotification) || NOTIFICATION.MESSAGE; const initialAudioNotificationEnabled = window.getSettingValue(SettingsKey.settingsAudioNotification) || false; const notificationsAreEnabled = initialNotificationEnabled && initialNotificationEnabled !== NOTIFICATION.OFF; const items = [ { label: window.i18n('nameAndMessage'), value: NOTIFICATION.MESSAGE, }, { label: window.i18n('nameOnly'), value: NOTIFICATION.NAME, }, { label: window.i18n('noNameOrMessage'), value: NOTIFICATION.COUNT, }, ]; const onClickPreview = () => { if (!notificationsAreEnabled) { return; } Notifications.addPreviewNotification({ conversationId: `preview-notification-${Date.now()}`, message: items.find(m => m.value === initialNotificationEnabled)?.label || window?.i18n?.('messageBody') || 'Message body', title: window.i18n('notificationPreview'), iconUrl: null, isExpiringMessage: false, messageSentAt: Date.now(), }); }; return ( <> { await window.setSettingValue( SettingsKey.settingsNotification, notificationsAreEnabled ? NOTIFICATION.OFF : NOTIFICATION.MESSAGE ); forceUpdate(); }} title={window.i18n('notificationsSettingsTitle')} active={notificationsAreEnabled} /> {notificationsAreEnabled && isAudioNotificationSupported() && ( { await window.setSettingValue( SettingsKey.settingsAudioNotification, !initialAudioNotificationEnabled ); forceUpdate(); }} title={window.i18n('audioNotificationsSettingsTitle')} active={initialAudioNotificationEnabled} /> )} {notificationsAreEnabled ? ( { await window.setSettingValue(SettingsKey.settingsNotification, selectedRadioValue); forceUpdate(); }} /> ) : null} ); };