import React, { useCallback } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { useDispatch, useSelector } from 'react-redux'; import { NavItem } from '@openedx/paragon'; import { useIntl } from '@edx/frontend-platform/i18n'; import messages from './messages'; import { useIsOnMobile } from '../hooks'; import ToggleSwitch from './ToggleSwitch'; import EmailCadences from './EmailCadences'; import { LOADING_STATUS } from '../constants'; import { updatePreferenceToggle } from './data/thunks'; import { selectAppPreferences, selectSelectedCourseId, selectUpdatePreferencesStatus } from './data/selectors'; import { notificationChannels, shouldHideAppPreferences } from './data/utils'; const NotificationPreferenceColumn = ({ appId, channel, appPreference }) => { const dispatch = useDispatch(); const intl = useIntl(); const courseId = useSelector(selectSelectedCourseId()); const appPreferences = useSelector(selectAppPreferences(appId)); const updatePreferencesStatus = useSelector(selectUpdatePreferencesStatus()); const mobileView = useIsOnMobile(); const NOTIFICATION_CHANNELS = Object.values(notificationChannels()); const hideAppPreferences = shouldHideAppPreferences(appPreferences, appId) || false; const onToggle = useCallback((event, notificationType) => { const { name: notificationChannel } = event.target; const value = notificationChannel === 'email_cadence' ? event.target.innerText : event.target.checked; dispatch(updatePreferenceToggle( courseId, appId, notificationType, notificationChannel, value, )); // eslint-disable-next-line react-hooks/exhaustive-deps }, [appId]); const renderPreference = (preference) => ( (preference?.coreNotificationTypes?.length > 0 || preference.id !== 'core') && (