diff --git a/web/assets.js b/web/assets.js index 976edd48e..bacee5f5f 100644 --- a/web/assets.js +++ b/web/assets.js @@ -1,8 +1,23 @@ // @flow export const assetCacheURLPrefix = 'https://dh9fld3hutpxf.cloudfront.net'; // Background Illustration export const backgroundIllustrationFileName = 'background-illustration.svg'; export const backgroundIllustrationHeight = '100px'; export const backgroundIllustrationWidth = '133px'; + +// Notifications Modal Illustration: "Focused" +export const focusedNotificationsIllustrationFileName = 'all-notifs.svg'; +export const focusedNotificationsIllustrationHeight = '86px'; +export const focusedNotificationsIllustrationWidth = '46px'; + +// Notifications Modal Illustration: "Focused (badge only)" +export const badgeOnlyNotificationsIllustrationFileName = 'badge-notifs.svg'; +export const badgeOnlyNotificationsIllustrationHeight = '86px'; +export const badgeOnlyNotificationsIllustrationWidth = '46px'; + +// Notifications Modal Illustration: "Background" +export const backgroundNotificationsIllustrationFileName = 'muted-notifs.svg'; +export const backgroundNotificationsIllustrationHeight = '86px'; +export const backgroundNotificationsIllustrationWidth = '46px'; diff --git a/web/modals/threads/notifications/notifications-modal.react.js b/web/modals/threads/notifications/notifications-modal.react.js index 444a5f271..a3bb8d9ac 100644 --- a/web/modals/threads/notifications/notifications-modal.react.js +++ b/web/modals/threads/notifications/notifications-modal.react.js @@ -1,183 +1,192 @@ // @flow import * as React from 'react'; import { updateSubscription, updateSubscriptionActionTypes, } from 'lib/actions/user-actions'; import { threadInfoSelector } from 'lib/selectors/thread-selectors'; import { useServerCall, useDispatchActionPromise, } from 'lib/utils/action-utils'; +import { + assetCacheURLPrefix, + backgroundNotificationsIllustrationFileName, + backgroundNotificationsIllustrationHeight, + backgroundNotificationsIllustrationWidth, + badgeOnlyNotificationsIllustrationFileName, + badgeOnlyNotificationsIllustrationHeight, + badgeOnlyNotificationsIllustrationWidth, + focusedNotificationsIllustrationFileName, + focusedNotificationsIllustrationHeight, + focusedNotificationsIllustrationWidth, +} from '../../../assets.js'; import Button from '../../../components/button.react'; import { useSelector } from '../../../redux/redux-utils'; -import SWMansionIcon from '../../../SWMansionIcon.react'; import Modal from '../../modal.react'; import EnumSettingsOption from './enum-settings-option.react'; import css from './notifications-modal.css'; type NotificationSettings = 'focused' | 'badge-only' | 'background'; type Props = { +threadID: string, +onClose: () => void, }; function NotificationsModal(props: Props): React.Node { const { onClose, threadID } = props; const threadInfo = useSelector(state => threadInfoSelector(state)[threadID]); const { subscription } = threadInfo.currentUser; const initialThreadSetting = React.useMemo(() => { if (!subscription.home) { return 'background'; } if (!subscription.pushNotifs) { return 'badge-only'; } return 'focused'; }, [subscription.home, subscription.pushNotifs]); const [ notificationSettings, setNotificationSettings, ] = React.useState(initialThreadSetting); const onFocusedSelected = React.useCallback( () => setNotificationSettings('focused'), [], ); const onBadgeOnlySelected = React.useCallback( () => setNotificationSettings('badge-only'), [], ); const onBackgroundSelected = React.useCallback( () => setNotificationSettings('background'), [], ); - const notificationIconStyle = React.useMemo(() => ({ width: 'auto' }), []); - const isFocusedSelected = notificationSettings === 'focused'; const focusedItem = React.useMemo(() => { const description = [ ['Banner notifs', true], ['Badge count', true], ['Lives in Focused tab', true], ]; const icon = ( - ); return ( ); - }, [isFocusedSelected, notificationIconStyle, onFocusedSelected]); + }, [isFocusedSelected, onFocusedSelected]); const isFocusedBadgeOnlySelected = notificationSettings === 'badge-only'; const focusedBadgeOnlyItem = React.useMemo(() => { const description = [ ['Banner notifs', false], ['Badge count', true], ['Lives in Focused tab', true], ]; const icon = ( - ); return ( ); - }, [isFocusedBadgeOnlySelected, notificationIconStyle, onBadgeOnlySelected]); + }, [isFocusedBadgeOnlySelected, onBadgeOnlySelected]); const isBackgroundSelected = notificationSettings === 'background'; const backgroundItem = React.useMemo(() => { const description = [ ['Banner notifs', false], ['Badge count', false], ['Lives in Backgound tab', true], ]; const icon = ( - ); return ( ); - }, [isBackgroundSelected, notificationIconStyle, onBackgroundSelected]); + }, [isBackgroundSelected, onBackgroundSelected]); const dispatchActionPromise = useDispatchActionPromise(); const callUpdateSubscription = useServerCall(updateSubscription); const onClickSave = React.useCallback(() => { dispatchActionPromise( updateSubscriptionActionTypes, callUpdateSubscription({ threadID: threadID, updatedFields: { home: notificationSettings !== 'background', pushNotifs: notificationSettings === 'focused', }, }), ); onClose(); }, [ callUpdateSubscription, dispatchActionPromise, notificationSettings, onClose, threadID, ]); return (
{focusedItem} {focusedBadgeOnlyItem} {backgroundItem}
); } export default NotificationsModal;