import React, { useCallback, useMemo } from 'react'; import PropTypes from 'prop-types'; import { useDispatch, useSelector } from 'react-redux'; import { useIntl } from '@edx/frontend-platform/i18n'; import { Collapsible } from '@openedx/paragon'; import messages from './messages'; import ToggleSwitch from './ToggleSwitch'; import { selectPreferenceAppToggleValue, selectPreferencesOfApp, selectSelectedCourseId, selectUpdatePreferencesStatus, } from './data/selectors'; import NotificationPreferenceRow from './NotificationPreferenceRow'; import { updateAppPreferenceToggle } from './data/thunks'; import { LOADING_STATUS } from '../constants'; const NotificationPreferenceApp = ({ appId }) => { const dispatch = useDispatch(); const intl = useIntl(); const courseId = useSelector(selectSelectedCourseId()); const appPreferences = useSelector(selectPreferencesOfApp(appId)); const appToggle = useSelector(selectPreferenceAppToggleValue(appId)); const updatePreferencesStatus = useSelector(selectUpdatePreferencesStatus()); const preferences = useMemo(() => ( appPreferences.map(preference => ( ))), [appId, appPreferences]); const onChangeAppSettings = useCallback((event) => { dispatch(updateAppPreferenceToggle(courseId, appId, event.target.checked)); // eslint-disable-next-line react-hooks/exhaustive-deps }, [appId]); if (!courseId) { return null; } return (
{intl.formatMessage(messages.notificationAppTitle, { key: appId })}

{intl.formatMessage(messages.typeLabel)} {intl.formatMessage(messages.webLabel)}
{ preferences }
); }; NotificationPreferenceApp.propTypes = { appId: PropTypes.string.isRequired, }; export default React.memo(NotificationPreferenceApp);