You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			118 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
| /* eslint-disable @typescript-eslint/no-misused-promises */
 | |
| 
 | |
| 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';
 | |
| 
 | |
| 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 = () => {
 | |
|   const forceUpdate = useUpdate();
 | |
| 
 | |
|   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('notificationsContentShowNameAndContent'),
 | |
|       value: NOTIFICATION.MESSAGE,
 | |
|     },
 | |
|     {
 | |
|       label: window.i18n('notificationsContentShowNameOnly'),
 | |
|       value: NOTIFICATION.NAME,
 | |
|     },
 | |
|     {
 | |
|       label: window.i18n('notificationsContentShowNoNameOrContent'),
 | |
|       value: NOTIFICATION.COUNT,
 | |
|     },
 | |
|   ];
 | |
| 
 | |
|   const onClickPreview = () => {
 | |
|     if (!notificationsAreEnabled) {
 | |
|       return;
 | |
|     }
 | |
|     Notifications.addPreviewNotification({
 | |
|       conversationId: `preview-notification-${Date.now()}`,
 | |
|       message: items.find(m => m.value === initialNotificationEnabled)?.label || 'Message body',
 | |
|       title: window.i18n('preview'),
 | |
|       iconUrl: null,
 | |
|       isExpiringMessage: false,
 | |
|       messageSentAt: Date.now(),
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   return (
 | |
|     <>
 | |
|       <SessionToggleWithDescription
 | |
|         onClickToggle={async () => {
 | |
|           await window.setSettingValue(
 | |
|             SettingsKey.settingsNotification,
 | |
|             notificationsAreEnabled ? NOTIFICATION.OFF : NOTIFICATION.MESSAGE
 | |
|           );
 | |
|           forceUpdate();
 | |
|         }}
 | |
|         title={window.i18n('sessionNotifications')}
 | |
|         active={notificationsAreEnabled}
 | |
|       />
 | |
|       {notificationsAreEnabled && isAudioNotificationSupported() && (
 | |
|         <SessionToggleWithDescription
 | |
|           onClickToggle={async () => {
 | |
|             await window.setSettingValue(
 | |
|               SettingsKey.settingsAudioNotification,
 | |
|               !initialAudioNotificationEnabled
 | |
|             );
 | |
|             forceUpdate();
 | |
|           }}
 | |
|           title={window.i18n('notificationsSoundDesktop')}
 | |
|           active={initialAudioNotificationEnabled}
 | |
|         />
 | |
|       )}
 | |
|       {notificationsAreEnabled ? (
 | |
|         <SessionSettingsItemWrapper
 | |
|           title={window.i18n('notificationsContent')}
 | |
|           description={window.i18n('notificationsContentDescription')}
 | |
|           inline={false}
 | |
|         >
 | |
|           <SessionRadioGroup
 | |
|             initialItem={initialNotificationEnabled}
 | |
|             group={SettingsKey.settingsNotification}
 | |
|             items={items}
 | |
|             onClick={async (selectedRadioValue: string) => {
 | |
|               await window.setSettingValue(SettingsKey.settingsNotification, selectedRadioValue);
 | |
|               forceUpdate();
 | |
|             }}
 | |
|           />
 | |
|           <StyledButtonContainer>
 | |
|             <SpacerLG />
 | |
|             <SessionButton text={window.i18n('preview')} onClick={onClickPreview} />
 | |
|           </StyledButtonContainer>
 | |
|         </SessionSettingsItemWrapper>
 | |
|       ) : null}
 | |
|     </>
 | |
|   );
 | |
| };
 |