import React, { useCallback } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { useDispatch, useSelector } from 'react-redux'; import { useIntl } from '@edx/frontend-platform/i18n'; import { Icon, OverlayTrigger, Tooltip } from '@edx/paragon'; import { InfoOutline } from '@edx/paragon/icons'; import messages from './messages'; import ToggleSwitch from './ToggleSwitch'; import { selectPreference, selectPreferenceNonEditableChannels, selectSelectedCourseId, selectUpdatePreferencesStatus, } from './data/selectors'; import NOTIFICATION_CHANNELS from './data/constants'; import { updatePreferenceToggle } from './data/thunks'; import { LOADING_STATUS } from '../constants'; const NotificationPreferenceRow = ({ appId, preferenceName }) => { const dispatch = useDispatch(); const intl = useIntl(); const courseId = useSelector(selectSelectedCourseId()); const preference = useSelector(selectPreference(appId, preferenceName)); const nonEditable = useSelector(selectPreferenceNonEditableChannels(appId, preferenceName)); const updatePreferencesStatus = useSelector(selectUpdatePreferencesStatus()); const onToggle = useCallback((event) => { const { checked, name: notificationChannel, } = event.target; dispatch(updatePreferenceToggle( courseId, appId, preferenceName, notificationChannel, checked, )); // eslint-disable-next-line react-hooks/exhaustive-deps }, [appId, preferenceName]); const tooltipId = `${preferenceName}-tooltip`; return (