import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { useIntl } from '@edx/frontend-platform/i18n'; import { Form } from '@openedx/paragon'; import messages from './PreferredLanguage.messages'; import FormControls from './elements/FormControls'; import EditableItemHeader from './elements/EditableItemHeader'; import EmptyContent from './elements/EmptyContent'; import SwitchContent from './elements/SwitchContent'; import { preferredLanguageSelector } from '../data/selectors'; import { useCloseOpenHandler, useHandleSubmit, useIsVisibilityEnabled, } from '../data/hooks'; const PreferredLanguage = ({ formId, languageProficiencies, visibilityLanguageProficiencies, editMode, saveState, error, sortedLanguages, languageMessages, changeHandler, submitHandler, closeHandler, openHandler, }) => { const isVisibilityEnabled = useIsVisibilityEnabled(); const intl = useIntl(); const handleChange = ({ target: { name, value } }) => { let newValue = value; if (name === formId) { newValue = value ? [{ code: value }] : []; } changeHandler(name, newValue); }; const handleSubmit = useHandleSubmit(submitHandler, formId); const handleOpen = useCloseOpenHandler(openHandler, formId); const handleClose = useCloseOpenHandler(closeHandler, formId); const value = languageProficiencies.length ? languageProficiencies[0].code : ''; return (

{intl.formatMessage(messages['profile.preferredlanguage.label'])}

{error !== null && ( {error} )}
), editable: ( <>

{intl.formatMessage(messages['profile.preferredlanguage.label'])}

), empty: ( <>

{intl.formatMessage(messages['profile.preferredlanguage.label'])}

{intl.formatMessage(messages['profile.preferredlanguage.empty'])} ), static: ( <>

{intl.formatMessage(messages['profile.preferredlanguage.label'])}

), }} /> ); }; PreferredLanguage.propTypes = { formId: PropTypes.string.isRequired, languageProficiencies: PropTypes.oneOfType([ PropTypes.arrayOf(PropTypes.shape({ code: PropTypes.string })), PropTypes.oneOf(['']), ]), visibilityLanguageProficiencies: PropTypes.oneOf(['private', 'all_users']), editMode: PropTypes.oneOf(['editing', 'editable', 'empty', 'static']), saveState: PropTypes.string, error: PropTypes.string, sortedLanguages: PropTypes.arrayOf(PropTypes.shape({ code: PropTypes.string.isRequired, name: PropTypes.string.isRequired, })).isRequired, languageMessages: PropTypes.objectOf(PropTypes.string).isRequired, changeHandler: PropTypes.func.isRequired, submitHandler: PropTypes.func.isRequired, closeHandler: PropTypes.func.isRequired, openHandler: PropTypes.func.isRequired, }; PreferredLanguage.defaultProps = { editMode: 'static', saveState: null, languageProficiencies: [], visibilityLanguageProficiencies: 'private', error: null, }; export default connect( preferredLanguageSelector, {}, )(PreferredLanguage);