{"version":3,"file":"app.f048c66ee5dc8c00162d.js","mappings":"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","sources":["webpack://@edx/frontend-app-account/./src/account-settings/AccountSettingsPage.messages.jsx","webpack://@edx/frontend-app-account/./src/account-settings/data/utils/reduxUtils.js","webpack://@edx/frontend-app-account/./src/account-settings/data/utils/sagaUtils.js","webpack://@edx/frontend-app-account/./src/account-settings/data/utils/serviceUtils.js","webpack://@edx/frontend-app-account/./src/account-settings/data/actions.js","webpack://@edx/frontend-app-account/./src/account-settings/site-language/actions.js","webpack://@edx/frontend-app-account/./src/account-settings/site-language/reducers.js","webpack://@edx/frontend-app-account/./src/account-settings/site-language/constants.js","webpack://@edx/frontend-app-account/./src/account-settings/site-language/service.js","webpack://@edx/frontend-app-account/./src/account-settings/site-language/sagas.js","webpack://@edx/frontend-app-account/./src/account-settings/site-language/selectors.js","webpack://@edx/frontend-app-account/./src/utils.js","webpack://@edx/frontend-app-account/./src/account-settings/data/selectors.js","webpack://@edx/frontend-app-account/./src/account-settings/PageLoading.jsx","webpack://@edx/frontend-app-account/./src/account-settings/JumpNav.jsx","webpack://@edx/frontend-app-account/./src/account-settings/SwitchContent.jsx","webpack://@edx/frontend-app-account/./src/account-settings/certificate-preference/messages.js","webpack://@edx/frontend-app-account/./src/account-settings/certificate-preference/CertificatePreference.jsx","webpack://@edx/frontend-app-account/./src/account-settings/EditableField.jsx","webpack://@edx/frontend-app-account/./src/account-settings/reset-password/data/actions.js","webpack://@edx/frontend-app-account/./src/account-settings/reset-password/messages.js","webpack://@edx/frontend-app-account/./src/account-settings/Alert.jsx","webpack://@edx/frontend-app-account/./src/account-settings/reset-password/ConfirmationAlert.jsx","webpack://@edx/frontend-app-account/./src/account-settings/reset-password/RequestInProgressAlert.jsx","webpack://@edx/frontend-app-account/./src/account-settings/reset-password/ResetPassword.jsx","webpack://@edx/frontend-app-account/./src/account-settings/reset-password/data/reducers.js","webpack://@edx/frontend-app-account/./src/account-settings/reset-password/data/service.js","webpack://@edx/frontend-app-account/./src/account-settings/reset-password/data/sagas.js","webpack://@edx/frontend-app-account/./src/account-settings/name-change/data/actions.js","webpack://@edx/frontend-app-account/./src/account-settings/name-change/messages.js","webpack://@edx/frontend-app-account/./src/account-settings/name-change/NameChange.jsx","webpack://@edx/frontend-app-account/./src/account-settings/name-change/data/reducers.js","webpack://@edx/frontend-app-account/./src/account-settings/third-party-auth/data/actions.js","webpack://@edx/frontend-app-account/./src/account-settings/third-party-auth/ThirdPartyAuth.jsx","webpack://@edx/frontend-app-account/./src/account-settings/third-party-auth/data/reducers.js","webpack://@edx/frontend-app-account/./src/account-settings/third-party-auth/data/service.js","webpack://@edx/frontend-app-account/./src/account-settings/third-party-auth/data/sagas.js","webpack://@edx/frontend-app-account/./src/account-settings/certificate-preference/data/service.js","webpack://@edx/frontend-app-account/./src/account-settings/coaching/data/service.js","webpack://@edx/frontend-app-account/./src/account-settings/demographics/data/utils.js","webpack://@edx/frontend-app-account/./src/account-settings/demographics/data/service.js","webpack://@edx/frontend-app-account/./src/account-settings/data/service.js","webpack://@edx/frontend-app-account/./src/account-settings/name-change/data/service.js","webpack://@edx/frontend-app-account/./src/account-settings/name-change/data/sagas.js","webpack://@edx/frontend-app-account/./src/account-settings/data/constants.js","webpack://@edx/frontend-app-account/./src/account-settings/BetaLanguageBanner.jsx","webpack://@edx/frontend-app-account/./src/account-settings/EmailField.jsx","webpack://@edx/frontend-app-account/./src/account-settings/OneTimeDismissibleAlert.jsx","webpack://@edx/frontend-app-account/./src/account-settings/coaching/CoachingToggle.messages.js","webpack://@edx/frontend-app-account/./src/account-settings/coaching/CoachingToggle.jsx","webpack://@edx/frontend-app-account/./src/account-settings/demographics/Checkboxes.jsx","webpack://@edx/frontend-app-account/./src/account-settings/demographics/DemographicsSection.messages.jsx","webpack://@edx/frontend-app-account/./src/account-settings/demographics/DemographicsSection.jsx","webpack://@edx/frontend-app-account/./src/account-settings/AccountSettingsPage.jsx","webpack://@edx/frontend-app-account/./src/account-settings/delete-account/data/actions.js","webpack://@edx/frontend-app-account/./src/account-settings/delete-account/messages.js","webpack://@edx/frontend-app-account/./src/account-settings/delete-account/PrintingInstructions.jsx","webpack://@edx/frontend-app-account/./src/account-settings/delete-account/ConfirmationModal.jsx","webpack://@edx/frontend-app-account/./src/account-settings/delete-account/SuccessModal.jsx","webpack://@edx/frontend-app-account/./src/account-settings/delete-account/BeforeProceedingBanner.jsx","webpack://@edx/frontend-app-account/./src/account-settings/delete-account/DeleteAccount.jsx","webpack://@edx/frontend-app-account/./src/account-settings/delete-account/data/reducers.js","webpack://@edx/frontend-app-account/./src/account-settings/delete-account/data/service.js","webpack://@edx/frontend-app-account/./src/account-settings/delete-account/data/sagas.js","webpack://@edx/frontend-app-account/./src/account-settings/data/reducers.js","webpack://@edx/frontend-app-account/./src/account-settings/data/sagas.js","webpack://@edx/frontend-app-account/./src/account-settings/NotFoundPage.jsx","webpack://@edx/frontend-app-account/./src/data/reducers.js","webpack://@edx/frontend-app-account/./src/data/sagas.js","webpack://@edx/frontend-app-account/./src/data/configureStore.js","webpack://@edx/frontend-app-account/./src/id-verification/data/selectors.js","webpack://@edx/frontend-app-account/./src/id-verification/getUserMediaShim.js","webpack://@edx/frontend-app-account/./src/constants.js","webpack://@edx/frontend-app-account/./src/hooks.js","webpack://@edx/frontend-app-account/./src/id-verification/data/service.js","webpack://@edx/frontend-app-account/./src/id-verification/IdVerification.messages.js","webpack://@edx/frontend-app-account/./src/id-verification/IdVerificationContext.jsx","webpack://@edx/frontend-app-account/./src/id-verification/AccessBlocked.jsx","webpack://@edx/frontend-app-account/./src/id-verification/VerifiedNameContext.jsx","webpack://@edx/frontend-app-account/./src/id-verification/IdVerificationContextProvider.jsx","webpack://@edx/frontend-app-account/./src/id-verification/routing-utilities.js","webpack://@edx/frontend-app-account/./src/id-verification/panels/BasePanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/assets/example-card.png","webpack://@edx/frontend-app-account/./src/id-verification/panels/ReviewRequirementsPanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/panels/EnableCameraDirectionsPanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/panels/UnsupportedCameraDirectionsPanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/panels/RequestCameraAccessPanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/CameraHelp.jsx","webpack://@edx/frontend-app-account/./src/id-verification/panels/PortraitPhotoContextPanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/Camera.jsx","webpack://@edx/frontend-app-account/./src/id-verification/panels/TakePortraitPhotoPanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/panels/IdContextPanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/panels/GetNameIdPanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/ImagePreview.jsx","webpack://@edx/frontend-app-account/./src/id-verification/SupportedMediaTypes.jsx","webpack://@edx/frontend-app-account/./src/id-verification/ImageFileUpload.jsx","webpack://@edx/frontend-app-account/./src/id-verification/CollapsibleImageHelp.jsx","webpack://@edx/frontend-app-account/./src/id-verification/panels/TakeIdPhotoPanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/CameraHelpWithUpload.jsx","webpack://@edx/frontend-app-account/./src/id-verification/panels/SummaryPanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/panels/SubmittedPanel.jsx","webpack://@edx/frontend-app-account/./src/id-verification/IdVerificationPage.jsx","webpack://@edx/frontend-app-account/./src/account-settings/coaching/CoachingConsent.messages.js","webpack://@edx/frontend-app-account/./src/account-settings/coaching/CoachingConsentForm.jsx","webpack://@edx/frontend-app-account/./src/logo.svg","webpack://@edx/frontend-app-account/./src/account-settings/coaching/CoachingConsent.jsx","webpack://@edx/frontend-app-account/./src/i18n/index.js","webpack://@edx/frontend-app-account/./src/index.jsx"],"sourcesContent":["import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'account.settings.page.heading': {\n id: 'account.settings.page.heading',\n defaultMessage: 'Account Settings',\n description: 'The page heading for the account settings page.',\n },\n 'account.settings.loading.message': {\n id: 'account.settings.loading.message',\n defaultMessage: 'Loading...',\n description: 'Message when data is being loaded',\n },\n 'account.settings.loading.error': {\n id: 'account.settings.loading.error',\n defaultMessage: 'Error: {error}',\n description: 'Message when data failed to load',\n },\n 'account.settings.banner.beta.language': {\n id: 'account.settings.banner.beta.language',\n defaultMessage: 'You have set your language to {beta_language}, which is currently not fully translated. You can help us translate this language fully by joining the Transifex community and adding translations from English for learners that speak {beta_language}.',\n description: 'Message when the user selects a beta language this is not yet fully translated.',\n },\n 'account.settings.banner.beta.language.action.switch.back': {\n id: 'account.settings.banner.beta.language.action.switch.back',\n defaultMessage: 'Switch Back to {previous_language}',\n description: 'Button on the beta language message to switch back to the previous language.',\n },\n 'account.settings.banner.beta.language.action.help.translate': {\n id: 'account.settings.banner.beta.language.action.help.translate',\n defaultMessage: 'Help Translate into {beta_language}',\n description: 'Button on the beta language message to help translate the beta language.',\n },\n 'account.settings.section.account.information': {\n id: 'account.settings.section.account.information',\n defaultMessage: 'Account Information',\n description: 'The basic account information section heading.',\n },\n 'account.settings.section.account.information.description': {\n id: 'account.settings.section.account.information.description',\n defaultMessage: 'These settings include basic information about your account.',\n description: 'The basic account information section heading description.',\n },\n 'account.settings.section.profile.information': {\n id: 'account.settings.section.profile.information',\n defaultMessage: 'Profile Information',\n description: 'The profile information section heading.',\n },\n 'account.settings.section.demographics.information': {\n id: 'account.settings.section.demographics.information',\n defaultMessage: 'Optional Information',\n description: 'The optional information section heading.',\n },\n 'account.settings.section.site.preferences': {\n id: 'account.settings.section.site.preferences',\n defaultMessage: 'Site Preferences',\n description: 'The site preferences section heading.',\n },\n 'account.settings.section.linked.accounts': {\n id: 'account.settings.section.linked.accounts',\n defaultMessage: 'Linked Accounts',\n description: 'The linked accounts section heading.',\n },\n 'account.settings.section.linked.accounts.description': {\n id: 'account.settings.section.linked.accounts.description',\n defaultMessage: 'You can link your identity accounts to simplify signing in to {siteName}.',\n description: 'The linked accounts section heading description.',\n },\n 'account.settings.field.username': {\n id: 'account.settings.field.username',\n defaultMessage: 'Username',\n description: 'Label for account settings username field.',\n },\n 'account.settings.field.username.help.text': {\n id: 'account.settings.field.username.help.text',\n defaultMessage: 'The name that identifies you on {siteName}. You cannot change your username.',\n description: 'Help text for the account settings username field.',\n },\n 'account.settings.field.full.name': {\n id: 'account.settings.field.full.name',\n defaultMessage: 'Full name',\n description: 'Label for account settings name field.',\n },\n 'account.settings.field.full.name.empty': {\n id: 'account.settings.field.full.name.empty',\n defaultMessage: 'Add name',\n description: 'Placeholder for empty account settings name field.',\n },\n 'account.settings.field.full.name.help.text': {\n id: 'account.settings.field.full.name.help.text',\n defaultMessage: 'The name that is used for ID verification and that appears on your certificates.',\n description: 'Help text for the account settings name field.',\n },\n 'account.settings.field.full.name.help.text.default': {\n id: 'account.settings.field.full.name.help.text.default',\n defaultMessage: 'The name that appears on your public profile.',\n description: 'Help text for the account settings name field.',\n },\n 'account.settings.field.full.name.help.text.default.certificate': {\n id: 'account.settings.field.full.name.help.text.default.certificate',\n defaultMessage: 'This name is selected to appear on your certificates and public-facing records.',\n description: 'Help text for the account settings name field.',\n },\n 'account.settings.field.name.verified': {\n id: 'account.settings.field.name.verified',\n defaultMessage: 'Verified name',\n description: 'Label for account settings verified name field.',\n },\n 'account.settings.field.name.verified.help.text.verified': {\n id: 'account.settings.field.name.verified.help.text.verified',\n defaultMessage: 'This name has been verified by photo ID.',\n description: 'Help text for the account settings verified name field when the name is verified.',\n },\n 'account.settings.field.name.verified.help.text.verified.proctored': {\n id: 'account.settings.field.name.verified.help.text.verified.proctored',\n defaultMessage: 'This name has been verified by proctoring.',\n description: 'Help text for the account settings verified name field when the name is verified through proctoring.',\n },\n 'account.settings.field.name.verified.help.text.verified.certificate': {\n id: 'account.settings.field.name.verified.help.text.verified.certificate',\n defaultMessage: 'This name has been verified by photo ID, and is selected to appear on your certificates and public-facing records.',\n description: 'Help text for the account settings verified name field when the name is selected for certificates.',\n },\n 'account.settings.field.name.verified.help.text.verified.proctored.certificate': {\n id: 'account.settings.field.name.verified.help.text.verified.proctored.certificate',\n defaultMessage: 'This name has been verified by proctoring, and is selected to appear on your certificates and public-facing records.',\n description: 'Help text for the account settings verified name field when the name is selected for certificates, and the name is verified through proctoring.',\n },\n 'account.settings.field.name.verified.help.text.submitted': {\n id: 'account.settings.field.name.verified.help.text.submitted',\n defaultMessage: 'Verification has been submitted. This usually takes 48 hours or less. Verified name cannot be changed at this time.',\n description: 'Help text for the account settings verified name field when a verified name has been submitted.',\n },\n 'account.settings.field.name.verified.help.text.submitted.proctored': {\n id: 'account.settings.field.name.verified.help.text.submitted.proctored',\n defaultMessage: 'Your proctored exam has been submitted. Verified name cannot be changed at this time. Please check back in 2-5 days.',\n description: 'Help text for the account settings verified name field when a verified name has been submitted through proctoring.',\n },\n 'account.settings.field.name.verified.help.text.submitted.certificate': {\n id: 'account.settings.field.name.verified.help.text.submitted.certificate',\n defaultMessage: 'When identity verification is successful, this name will appear on your certificates and public-facing records. Verified name cannot be changed at this time.',\n description: 'Help text for the account settings verified name field when a verified name has been submitted and will appear on certificates.',\n },\n 'account.settings.field.name.verified.help.text.submitted.proctored.certificate': {\n id: 'account.settings.field.name.verified.help.text.submitted.proctored.certificate',\n defaultMessage: 'Once your proctored exam passes review, this name will appear on your certificate and public-facing records. Verified Name cannot be changed at this time.',\n description: 'Help text for the account settings verified name field when a verified name has been submitted through proctoring and will appear on certificates.',\n },\n 'account.settings.field.name.verified.verification.alert': {\n id: 'account.settings.field.name.verified.verification.help',\n defaultMessage: 'Enter your name as it appears on your unexpired student, work, or government-issued identification card.',\n description: 'Form label instructing the user to enter the name on their ID.',\n },\n 'account.settings.field.full.name.help.text.submitted': {\n id: 'account.settings.field.full.name.help.text.submitted',\n defaultMessage: 'Verification has been submitted. This usually takes 48 hours or less. Full name cannot be changed at this time.',\n description: 'Help text for the account settings full name field when a verified name has been submitted.',\n },\n 'account.settings.field.full.name.help.text.submitted.proctored': {\n id: 'account.settings.field.full.name.help.text.submitted.proctored',\n defaultMessage: 'Your proctored exam has been submitted. Full name cannot be changed at this time. Please check back in 2-5 days.',\n description: 'Help text for the account settings full name field when a verified name has been submitted through proctoring.',\n },\n 'account.settings.field.full.name.help.text.submitted.certificate': {\n id: 'account.settings.field.full.name.help.text.submitted.certificate',\n defaultMessage: 'When identity verification is successful, this name will appear on your certificates and public-facing records. Full name cannot be changed at this time.',\n description: 'Help text for the account settings full name field when a full name has been submitted and will appear on certificates.',\n },\n 'account.settings.field.full.name.help.text.submitted.proctored.certificate': {\n id: 'account.settings.field.full.name.help.text.submitted.proctored.certificate',\n defaultMessage: 'Once your proctored exam passes review, this name will appear on your certificates and public-facing records. Full name cannot be changed at this time.',\n description: 'Help text for the account settings full name field when a full name has been submitted and will appear on certificates.',\n },\n 'account.settings.field.name.verified.success.message': {\n id: 'account.settings.field.name.verified.success.message',\n defaultMessage: 'Your identity verification request has successfully completed. You now have the option of selecting which name you prefer to appear on your certificates and public-records.',\n description: 'The body of the success alert indicating that a user\\'s name has been verified',\n },\n 'account.settings.field.name.verified.success.message.header': {\n id: 'account.settings.field.name.verified.success.message.header',\n defaultMessage: 'Your name change request is complete!',\n description: 'The header of the success alert indicating that a user\\'s name has been verified',\n },\n 'account.settings.field.name.verified.failure.message': {\n id: 'account.settings.field.name.verified.failure.message',\n defaultMessage: 'Your most recent identity verification attempt did not pass. Related account settings have been restored.',\n description: 'The body of the failure alert indicating that a user\\'s name was not able to be verified',\n },\n 'account.settings.field.name.verified.failure.message.header': {\n id: 'account.settings.field.name.verified.failure.message.header',\n defaultMessage: 'We were not able to verify your identity.',\n description: 'The header of the failure alert indicating that a user\\'s name was not able to be verified',\n },\n 'account.settings.field.name.verified.failure.message.help.link': {\n id: 'account.settings.field.name.verified.failure.message.help.link',\n defaultMessage: 'Learn more about ID verification',\n description: 'The text of the button displayed when a user\\'s name was not able to be verified, intended to direct the user to a help article about ID verification.',\n },\n 'account.settings.field.name.verified.submitted.message': {\n id: 'account.settings.field.name.verified.submitted.message',\n defaultMessage: 'Your identity verification request has been submitted and usually takes between 24 and 48 hours to complete.',\n description: 'The body of the submitted alert indicating that a user\\'s name has been submitted for verification',\n },\n 'account.settings.field.name.verified.submitted.message.certificate': {\n id: 'account.settings.field.name.verified.submitted.message.certificate',\n defaultMessage: 'When your request is approved, your updated name will appear on all associated certificates and public-facing records.',\n description: 'The body of the submitted alert indicating that a user\\'s name will be updated on certificates.',\n },\n 'account.settings.field.name.verified.submitted.message.header': {\n id: 'account.settings.field.name.verified.submitted.message.header',\n defaultMessage: 'Your name change request is almost complete!',\n description: 'The header of the submitted alert indicating that a user\\'s name has been submitted for verification',\n },\n 'account.settings.field.email': {\n id: 'account.settings.field.email',\n defaultMessage: 'Email address (Sign in)',\n description: 'Label for account settings email field.',\n },\n 'account.settings.field.email.empty': {\n id: 'account.settings.field.email.empty',\n defaultMessage: 'Add email address',\n description: 'Placeholder for empty account settings email field.',\n },\n 'account.settings.field.email.confirmation': {\n id: 'account.settings.field.email.confirmation',\n defaultMessage: 'We’ve sent a confirmation message to {value}. Click the link in the message to update your email address.',\n description: 'Confirmation message for saving the account settings email field.',\n },\n 'account.settings.field.email.help.text': {\n id: 'account.settings.field.email.help.text',\n defaultMessage: 'You receive messages from {siteName} and course teams at this address.',\n description: 'Help text for the account settings email field.',\n },\n 'account.settings.field.secondary.email': {\n id: 'account.settings.field.secondary.email',\n defaultMessage: 'Recovery email address',\n description: 'Label for account settings recovery email field.',\n },\n 'account.settings.field.secondary.email.empty': {\n id: 'account.settings.field.secondary.email.empty',\n defaultMessage: 'Add a recovery email address',\n description: 'Placeholder for empty account settings recovery email field.',\n },\n 'account.settings.field.secondary.email.confirmation': {\n id: 'account.settings.field.secondary.email.confirmation',\n defaultMessage: 'We’ve sent a confirmation message to {value}. Click the link in the message to update your recovery email address.',\n description: 'Confirmation message for saving the account settings recovery email field.',\n },\n 'account.settings.email.field.confirmation.header': {\n id: 'account.settings.email.field.confirmation.header',\n defaultMessage: 'One more step!',\n description: 'The header of the confirmation alert saying we\\'ve sent a confirmation email',\n },\n 'account.settings.field.dob': {\n id: 'account.settings.field.dob',\n defaultMessage: 'Year of birth',\n description: 'Label for account settings year of birth field.',\n },\n 'account.settings.field.dob.empty': {\n id: 'account.settings.field.dob.empty',\n defaultMessage: 'Add year of birth',\n description: 'Placeholder for empty account settings year of birth field.',\n },\n 'account.settings.field.year_of_birth.options.empty': {\n id: 'account.settings.field.year_of_birth.options.empty',\n defaultMessage: 'Select a year of birth',\n description: 'Option for empty value on account settings year of birth field.',\n },\n 'account.settings.field.country': {\n id: 'account.settings.field.country',\n defaultMessage: 'Country',\n description: 'Label for account settings country field.',\n },\n 'account.settings.field.country.empty': {\n id: 'account.settings.field.country.empty',\n defaultMessage: 'Add country',\n description: 'Placeholder for empty account settings country field.',\n },\n 'account.settings.field.country.options.empty': {\n id: 'account.settings.field.country.options.empty',\n defaultMessage: 'Select a Country',\n description: 'Option for empty value on account settings country field.',\n },\n 'account.settings.field.state': {\n id: 'account.settings.field.state',\n defaultMessage: 'State',\n description: 'Label for account settings state field.',\n },\n 'account.settings.field.state.empty': {\n id: 'account.settings.field.state.empty',\n defaultMessage: 'Add state',\n description: 'Placeholder for empty account settings state field.',\n },\n 'account.settings.field.state.options.empty': {\n id: 'account.settings.field.state.options.empty',\n defaultMessage: 'Select a State',\n description: 'Option for empty value on account settings state field.',\n },\n 'account.settings.field.site.language': {\n id: 'account.settings.field.site.language',\n defaultMessage: 'Site language',\n description: 'Label for account settings site language field.',\n },\n 'account.settings.field.site.language.help.text': {\n id: 'account.settings.field.site.language.help.text',\n defaultMessage: 'The language used throughout this site. This site is currently available in a limited number of languages.',\n description: 'Help text for the site language field.',\n },\n 'account.settings.field.education': {\n id: 'account.settings.field.education',\n defaultMessage: 'Education',\n description: 'Label for account settings education field.',\n },\n 'account.settings.field.education.empty': {\n id: 'account.settings.field.education.empty',\n defaultMessage: 'Add level of education',\n description: 'Placeholder for empty account settings education field.',\n },\n 'account.settings.field.education.levels.empty': {\n id: 'account.settings.field.education.levels.empty',\n defaultMessage: 'Select a level of education',\n description: 'Placeholder for the education levels dropdown.',\n },\n 'account.settings.field.education.levels.p': {\n id: 'account.settings.field.education.levels.p',\n defaultMessage: 'Doctorate',\n description: 'Selected by the user if their highest level of education is a doctorate degree.',\n },\n 'account.settings.field.education.levels.m': {\n id: 'account.settings.field.education.levels.m',\n defaultMessage: \"Master's or professional degree\",\n description: \"Selected by the user if their highest level of education is a master's or professional degree from a college or university.\",\n },\n 'account.settings.field.education.levels.b': {\n id: 'account.settings.field.education.levels.b',\n defaultMessage: \"Bachelor's Degree\",\n description: \"Selected by the user if their highest level of education is a four year college or university bachelor's degree.\",\n },\n 'account.settings.field.education.levels.a': {\n id: 'account.settings.field.education.levels.a',\n defaultMessage: \"Associate's degree\",\n description: \"Selected by the user if their highest level of education is an associate's degree. 1-2 years of college or university.\",\n },\n 'account.settings.field.education.levels.hs': {\n id: 'account.settings.field.education.levels.hs',\n defaultMessage: 'Secondary/high school',\n description: 'Selected by the user if their highest level of education is secondary or high school. 9-12 years of education.',\n },\n 'account.settings.field.education.levels.jhs': {\n id: 'account.settings.field.education.levels.jhs',\n defaultMessage: 'Junior secondary/junior high/middle school',\n description: 'Selected by the user if their highest level of education is junior or middle school. 6-8 years of education.',\n },\n 'account.settings.field.education.levels.el': {\n id: 'account.settings.field.education.levels.el',\n defaultMessage: 'Elementary/primary school',\n description: 'Selected by the user if their highest level of education is elementary or primary school. 1-5 years of education.',\n },\n 'account.settings.field.education.levels.none': {\n id: 'account.settings.field.education.levels.none',\n defaultMessage: 'No formal education',\n description: 'Selected by the user to describe their education.',\n },\n 'account.settings.field.education.levels.o': {\n id: 'account.settings.field.education.levels.o',\n defaultMessage: 'Other education',\n description: 'Selected by the user if they have a type of education not described by the other choices.',\n },\n\n 'account.settings.field.gender': {\n id: 'account.settings.field.gender',\n defaultMessage: 'Gender',\n description: 'Label for account settings gender field.',\n },\n 'account.settings.field.gender.empty': {\n id: 'account.settings.field.gender.empty',\n defaultMessage: 'Add gender',\n description: 'Placeholder for empty account settings gender field.',\n },\n 'account.settings.field.gender.options.empty': {\n id: 'account.settings.field.gender.options.empty',\n defaultMessage: 'Select a gender',\n description: 'Placeholder for the gender options dropdown.',\n },\n 'account.settings.field.gender.options.f': {\n id: 'account.settings.field.gender.options.f',\n defaultMessage: 'Female',\n description: 'The label for the female gender option.',\n },\n 'account.settings.field.gender.options.m': {\n id: 'account.settings.field.gender.options.m',\n defaultMessage: 'Male',\n description: 'The label for the male gender option.',\n },\n 'account.settings.field.gender.options.o': {\n id: 'account.settings.field.gender.options.o',\n defaultMessage: 'Other',\n description: 'The label for catch-all gender option.',\n },\n 'account.settings.field.language.proficiencies': {\n id: 'account.settings.field.language.proficiencies',\n defaultMessage: 'Spoken language',\n description: 'Label for account settings spoken language field.',\n },\n 'account.settings.field.language.proficiencies.empty': {\n id: 'account.settings.field.language.proficiencies.empty',\n defaultMessage: 'Add a spoken language',\n description: 'Placeholder for empty account settings spoken language field.',\n },\n 'account.settings.field.language_proficiencies.options.empty': {\n id: 'account.settings.field.language_proficiencies.options.empty',\n defaultMessage: 'Select a Language',\n description: 'Option for an empty value on account settings spoken language field.',\n },\n\n 'account.settings.field.time.zone': {\n id: 'account.settings.field.time.zone',\n defaultMessage: 'Time zone',\n description: 'Label for time zone settings field.',\n },\n 'account.settings.field.time.zone.empty': {\n id: 'account.settings.field.time.zone.empty',\n defaultMessage: 'Set time zone',\n description: 'Placeholder for empty for time zone settings field.',\n },\n 'account.settings.field.time.zone.description': {\n id: 'account.settings.field.time.zone.description',\n defaultMessage: 'Select the time zone for displaying course dates. If you do not specify a time zone, course dates, including assignment deadlines, will be displayed in your browser’s local time zone.',\n description: 'Description for time zone settings field.',\n },\n 'account.settings.field.time.zone.default': {\n id: 'account.settings.field.time.zone.default',\n defaultMessage: 'Default (Local Time Zone)',\n description: 'The default option for a time zone.',\n },\n 'account.settings.field.time.zone.all': {\n id: 'account.settings.field.time.zone.all',\n defaultMessage: 'All time zones',\n description: 'The label for the group of options for all time zones.',\n },\n 'account.settings.field.time.zone.country': {\n id: 'account.settings.field.time.zone.country',\n defaultMessage: 'Country time zones',\n description: 'The group of time zone options for a country.',\n },\n\n 'account.settings.section.social.media': {\n id: 'account.settings.section.social.media',\n defaultMessage: 'Social Media Links',\n description: 'Section header for social media links settings',\n },\n 'account.settings.section.social.media.description': {\n id: 'account.settings.section.social.media.description',\n defaultMessage: 'Optionally, link your personal accounts to the social media icons on your {siteName} profile.',\n description: 'Section subheader for social media links settings',\n },\n 'account.settings.field.social.platform.name.linkedin': {\n id: 'account.settings.field.social.platform.name.linkedin',\n defaultMessage: 'LinkedIn',\n description: 'Label for LinkedIn',\n },\n 'account.settings.field.social.platform.name.linkedin.empty': {\n id: 'account.settings.field.social.platform.name.linkedin.empty',\n defaultMessage: 'Add LinkedIn profile',\n description: 'Placeholder for an empty LinkedIn field',\n },\n 'account.settings.jump.nav.delete.account': {\n id: 'account.settings.jump.nav.delete.account',\n defaultMessage: 'Delete My Account',\n description: 'Header for the user account deletion area',\n },\n 'account.settings.field.social.platform.name.twitter': {\n id: 'account.settings.field.social.platform.name.twitter',\n defaultMessage: 'Twitter',\n description: 'Label for Twitter',\n },\n 'account.settings.field.social.platform.name.twitter.empty': {\n id: 'account.settings.field.social.platform.name.twitter.empty',\n defaultMessage: 'Add Twitter profile',\n description: 'Placeholder for an empty Twitter field',\n },\n\n 'account.settings.field.social.platform.name.facebook': {\n id: 'account.settings.field.social.platform.name.facebook',\n defaultMessage: 'Facebook',\n description: 'Label for Facebook',\n },\n 'account.settings.field.social.platform.name.facebook.empty': {\n id: 'account.settings.field.social.platform.name.facebook.empty',\n defaultMessage: 'Add Facebook profile',\n description: 'Placeholder for an empty Facebook field',\n },\n 'account.settings.editable.field.action.save': {\n id: 'account.settings.editable.field.action.save',\n defaultMessage: 'Save',\n description: 'The save button on an editable field',\n },\n 'account.settings.editable.field.action.cancel': {\n id: 'account.settings.editable.field.action.cancel',\n defaultMessage: 'Cancel',\n description: 'The cancel button on an editable field',\n },\n 'account.settings.editable.field.action.edit': {\n id: 'account.settings.editable.field.action.edit',\n defaultMessage: 'Edit',\n description: 'The edit button on an editable field',\n },\n 'account.settings.static.field.empty': {\n id: 'account.settings.static.field.empty',\n defaultMessage: 'No value set. Contact your {enterprise} administrator to make changes.',\n description: 'The placeholder for an empty but uneditable field',\n },\n 'account.settings.static.field.empty.no.admin': {\n id: 'account.settings.static.field.empty.no.admin',\n defaultMessage: 'No value set.',\n description: 'The placeholder for an empty but uneditable field when there is no administrator',\n },\n});\n\nexport default messages;\n","/**\n * Helper class to save time when writing out action types for asynchronous methods. Also helps\n * ensure that actions are namespaced.\n */\nexport class AsyncActionType {\n constructor(topic, name) {\n this.topic = topic;\n this.name = name;\n }\n\n get BASE() {\n return `${this.topic}__${this.name}`;\n }\n\n get BEGIN() {\n return `${this.topic}__${this.name}__BEGIN`;\n }\n\n get SUCCESS() {\n return `${this.topic}__${this.name}__SUCCESS`;\n }\n\n get FAILURE() {\n return `${this.topic}__${this.name}__FAILURE`;\n }\n\n get RESET() {\n return `${this.topic}__${this.name}__RESET`;\n }\n\n get FORBIDDEN() {\n return `${this.topic}__${this.name}__FORBIDDEN`;\n }\n}\n\n/**\n * Given a state tree and an array representing a set of keys to traverse in that tree, returns\n * the portion of the tree at that key path.\n *\n * Example:\n *\n * const result = getModuleState(\n * {\n * first: { red: { awesome: 'sauce' }, blue: { weak: 'sauce' } },\n * second: { other: 'data', }\n * },\n * ['first', 'red']\n * );\n *\n * result will be:\n *\n * {\n * awesome: 'sauce'\n * }\n */\nexport function getModuleState(state, originalPath) {\n const path = [...originalPath]; // don't modify your argument\n if (path.length < 1) {\n return state;\n }\n const key = path.shift();\n if (state[key] === undefined) {\n throw new Error(`Unexpected state key ${key} given to getModuleState. Is your state path set up correctly?`);\n }\n return getModuleState(state[key], path);\n}\n","import { put } from 'redux-saga/effects';\nimport { logError } from '@edx/frontend-platform/logging';\nimport { history } from '@edx/frontend-platform';\n\nexport default function* handleFailure(error, failureAction = null, failureRedirectPath = null) {\n if (error.fieldErrors && failureAction !== null) {\n yield put(failureAction({ fieldErrors: error.fieldErrors }));\n }\n logError(error);\n if (failureAction !== null) {\n yield put(failureAction(error.message));\n }\n if (failureRedirectPath !== null) {\n history.push(failureRedirectPath);\n }\n}\n","/**\n * Turns field errors of the form:\n *\n * {\n * \"name\":{\n * \"developer_message\": \"Nerdy message here\",\n * \"user_message\": \"This value is invalid.\"\n * },\n * \"other_field\": {\n * \"developer_message\": \"Other Nerdy message here\",\n * \"user_message\": \"This other value is invalid.\"\n * }\n * }\n *\n * Into:\n *\n * {\n * \"name\": \"This value is invalid.\",\n * \"other_field\": \"This other value is invalid\"\n * }\n */\nexport function unpackFieldErrors(fieldErrors) {\n return Object.entries(fieldErrors).reduce((acc, [k, v]) => {\n acc[k] = v.user_message;\n return acc;\n }, {});\n}\n\n/**\n * Processes and re-throws request errors. If the response contains a field_errors field, will\n * massage the data into a form expected by the client.\n *\n * Field errors will be packaged as an api error with a fieldErrors field usable by the client.\n * Takes an optional unpack function which is used to process the field errors,\n * otherwise uses the default unpackFieldErrors function.\n *\n * @param error The original error object.\n * @param unpackFunction (Optional) A function to use to unpack the field errors as a replacement\n * for the default.\n */\nexport function handleRequestError(error, unpackFunction = unpackFieldErrors) {\n if (error.response && error.response.data.field_errors) {\n const apiError = Object.create(error);\n apiError.fieldErrors = unpackFunction(error.response.data.field_errors);\n throw apiError;\n }\n throw error;\n}\n","import { AsyncActionType } from './utils';\n\nexport const FETCH_SETTINGS = new AsyncActionType('ACCOUNT_SETTINGS', 'FETCH_SETTINGS');\nexport const SAVE_SETTINGS = new AsyncActionType('ACCOUNT_SETTINGS', 'SAVE_SETTINGS');\nexport const SAVE_MULTIPLE_SETTINGS = new AsyncActionType('ACCOUNT_SETTINGS', 'SAVE_MULTIPLE_SETTINGS');\nexport const FETCH_TIME_ZONES = new AsyncActionType('ACCOUNT_SETTINGS', 'FETCH_TIME_ZONES');\nexport const SAVE_PREVIOUS_SITE_LANGUAGE = 'SAVE_PREVIOUS_SITE_LANGUAGE';\nexport const OPEN_FORM = 'OPEN_FORM';\nexport const CLOSE_FORM = 'CLOSE_FORM';\nexport const UPDATE_DRAFT = 'UPDATE_DRAFT';\nexport const RESET_DRAFTS = 'RESET_DRAFTS';\nexport const BEGIN_NAME_CHANGE = 'BEGIN_NAME_CHANGE';\n\n// FETCH SETTINGS ACTIONS\n\nexport const fetchSettings = () => ({\n type: FETCH_SETTINGS.BASE,\n});\n\nexport const fetchSettingsBegin = () => ({\n type: FETCH_SETTINGS.BEGIN,\n});\n\nexport const fetchSettingsSuccess = ({\n values,\n thirdPartyAuthProviders,\n profileDataManager,\n timeZones,\n verifiedNameHistory,\n}) => ({\n type: FETCH_SETTINGS.SUCCESS,\n payload: {\n values,\n thirdPartyAuthProviders,\n profileDataManager,\n timeZones,\n verifiedNameHistory,\n },\n});\n\nexport const fetchSettingsFailure = error => ({\n type: FETCH_SETTINGS.FAILURE,\n payload: { error },\n});\n\nexport const fetchSettingsReset = () => ({\n type: FETCH_SETTINGS.RESET,\n});\n\n// FORM STATE ACTIONS\n\nexport const openForm = formId => ({\n type: OPEN_FORM,\n payload: { formId },\n});\n\nexport const closeForm = formId => ({\n type: CLOSE_FORM,\n payload: { formId },\n});\n\nexport const updateDraft = (name, value) => ({\n type: UPDATE_DRAFT,\n payload: {\n name,\n value,\n },\n});\n\nexport const resetDrafts = () => ({\n type: RESET_DRAFTS,\n});\n\nexport const beginNameChange = (formId) => ({\n type: BEGIN_NAME_CHANGE,\n payload: { formId },\n});\n// SAVE SETTINGS ACTIONS\n\nexport const saveSettings = (formId, commitValues) => ({\n type: SAVE_SETTINGS.BASE,\n payload: { formId, commitValues },\n});\n\nexport const saveSettingsBegin = () => ({\n type: SAVE_SETTINGS.BEGIN,\n});\n\nexport const saveSettingsSuccess = (values, confirmationValues) => ({\n type: SAVE_SETTINGS.SUCCESS,\n payload: { values, confirmationValues },\n});\n\nexport const saveSettingsReset = () => ({\n type: SAVE_SETTINGS.RESET,\n});\n\nexport const saveSettingsFailure = ({ fieldErrors, message }) => ({\n type: SAVE_SETTINGS.FAILURE,\n payload: { errors: fieldErrors, message },\n});\n\nexport const savePreviousSiteLanguage = previousSiteLanguage => ({\n type: SAVE_PREVIOUS_SITE_LANGUAGE,\n payload: { previousSiteLanguage },\n});\n\nexport const saveMultipleSettings = (settingsArray, form = null) => ({\n type: SAVE_MULTIPLE_SETTINGS.BASE,\n payload: { settingsArray, form },\n});\n\nexport const saveMultipleSettingsBegin = () => ({\n type: SAVE_MULTIPLE_SETTINGS.BEGIN,\n});\n\nexport const saveMultipleSettingsSuccess = settingsArray => ({\n type: SAVE_MULTIPLE_SETTINGS.SUCCESS,\n payload: { settingsArray },\n});\n\nexport const saveMultipleSettingsFailure = ({ fieldErrors, message }) => ({\n type: SAVE_MULTIPLE_SETTINGS.FAILURE,\n payload: { errors: fieldErrors, message },\n});\n\n// FETCH TIME_ZONE ACTIONS\n\nexport const fetchTimeZones = country => ({\n type: FETCH_TIME_ZONES.BASE,\n payload: { country },\n});\n\nexport const fetchTimeZonesSuccess = timeZones => ({\n type: FETCH_TIME_ZONES.SUCCESS,\n payload: { timeZones },\n});\n","import { AsyncActionType } from '../data/utils';\n\nexport const FETCH_SITE_LANGUAGES = new AsyncActionType('SITE_LANGUAGE', 'FETCH_SITE_LANGUAGES');\n\nexport const fetchSiteLanguages = () => ({\n type: FETCH_SITE_LANGUAGES.BASE,\n});\n\nexport const fetchSiteLanguagesBegin = () => ({\n type: FETCH_SITE_LANGUAGES.BEGIN,\n});\n\nexport const fetchSiteLanguagesSuccess = siteLanguageList => ({\n type: FETCH_SITE_LANGUAGES.SUCCESS,\n payload: { siteLanguageList },\n});\n\nexport const fetchSiteLanguagesFailure = error => ({\n type: FETCH_SITE_LANGUAGES.FAILURE,\n payload: { error },\n});\n\nexport const fetchSiteLanguagesReset = () => ({\n type: FETCH_SITE_LANGUAGES.RESET,\n});\n","import { FETCH_SITE_LANGUAGES } from './actions';\n\nexport const defaultState = {\n loading: false,\n loaded: false,\n loadingError: null,\n siteLanguageList: [],\n};\n\nconst reducer = (state = defaultState, action = null) => {\n if (action !== null) {\n switch (action.type) {\n case FETCH_SITE_LANGUAGES.BEGIN:\n return {\n ...state,\n loading: true,\n loaded: false,\n loadingError: null,\n };\n case FETCH_SITE_LANGUAGES.SUCCESS:\n return {\n ...state,\n siteLanguageList: action.payload.siteLanguageList,\n loading: false,\n loaded: true,\n loadingError: null,\n };\n case FETCH_SITE_LANGUAGES.FAILURE:\n return {\n ...state,\n loading: false,\n loaded: false,\n loadingError: action.payload.error,\n };\n case FETCH_SITE_LANGUAGES.RESET:\n return {\n ...state,\n loading: false,\n loaded: false,\n loadingError: null,\n };\n default:\n }\n }\n return state;\n};\n\nexport default reducer;\n","const siteLanguageList = [\n {\n code: \"en\",\n name: \"English\",\n released: true,\n },\n // {\n // code: \"ar\",\n // name: \"العربية\",\n // released: true,\n // },\n // {\n // code: \"ca\",\n // name: \"Català\",\n // released: false,\n // },\n // {\n // code: \"es-419\",\n // name: \"Español (Latinoamérica)\",\n // released: true,\n // },\n {\n code: \"fr\",\n name: \"Français\",\n released: true,\n },\n // {\n // code: \"he\",\n // name: \"עברית\",\n // released: false,\n // },\n // {\n // code: \"id\",\n // name: \"Bahasa Indonesia\",\n // released: false,\n // },\n // {\n // code: \"ko-kr\",\n // name: \"한국어 (대한민국)\",\n // released: false,\n // },\n // {\n // code: \"pl\",\n // name: \"Polski\",\n // released: false,\n // },\n // {\n // code: \"pt-br\",\n // name: \"Português (Brasil)\",\n // released: false,\n // },\n // {\n // code: \"ru\",\n // name: \"Русский\",\n // released: false,\n // },\n // {\n // code: \"th\",\n // name: \"ไทย\",\n // released: false,\n // },\n // {\n // code: \"uk\",\n // name: \"Українська\",\n // released: false,\n // },\n {\n code: \"zh-cn\",\n name: \"中文 (简体)\",\n released: true,\n },\n {\n code: \"de-de\",\n name: \"Deutsch\",\n released: true,\n },\n];\n\nexport default siteLanguageList;\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport { convertKeyNames, snakeCaseObject } from '@edx/frontend-platform/utils';\nimport siteLanguageList from './constants';\n\nexport async function getSiteLanguageList() {\n return siteLanguageList;\n}\n\nexport async function patchPreferences(username, params) {\n let processedParams = snakeCaseObject(params);\n processedParams = convertKeyNames(processedParams, {\n pref_lang: 'pref-lang',\n });\n\n await getAuthenticatedHttpClient()\n .patch(`${getConfig().LMS_BASE_URL}/api/user/v1/preferences/${username}`, processedParams, {\n headers: { 'Content-Type': 'application/merge-patch+json' },\n });\n\n return params; // TODO: Once the server returns the updated preferences object, return that.\n}\n\nexport async function postSetLang(code) {\n const formData = new FormData();\n formData.append('language', code);\n\n await getAuthenticatedHttpClient()\n .post(`${getConfig().LMS_BASE_URL}/i18n/setlang/`, formData, {\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\n });\n}\n","import { call, put, takeEvery } from 'redux-saga/effects';\n\nimport {\n fetchSiteLanguagesBegin,\n fetchSiteLanguagesSuccess,\n fetchSiteLanguagesFailure,\n FETCH_SITE_LANGUAGES,\n} from './actions';\n\nimport { getSiteLanguageList } from './service';\nimport { handleFailure } from '../data/utils';\n\nfunction* handleFetchSiteLanguages() {\n try {\n yield put(fetchSiteLanguagesBegin());\n const siteLanguageList = yield call(getSiteLanguageList);\n yield put(fetchSiteLanguagesSuccess(siteLanguageList));\n } catch (e) {\n yield call(handleFailure, e, fetchSiteLanguagesFailure);\n }\n}\n\nexport default function* saga() {\n yield takeEvery(FETCH_SITE_LANGUAGES.BASE, handleFetchSiteLanguages);\n}\n","import { createSelector } from 'reselect';\nimport { getModuleState } from '../data/utils';\n\nexport const storePath = ['accountSettings', 'siteLanguage'];\n\nconst siteLanguageSelector = state => getModuleState(state, storePath);\n\nexport const siteLanguageListSelector = createSelector(\n siteLanguageSelector,\n siteLanguage => siteLanguage.siteLanguageList,\n);\n\nexport const siteLanguageOptionsSelector = createSelector(\n siteLanguageSelector,\n siteLanguage => siteLanguage.siteLanguageList.map(({ code, name }) => ({\n value: code,\n label: name,\n })),\n);\n","/**\n * Compare two dates.\n * @param {*} a the first date\n * @param {*} b the second date\n * @returns a negative integer if a > b, a positive integer if a < b, or 0 if a = b\n */\nexport function compareVerifiedNamesByCreatedDate(a, b) {\n const aTimeSinceEpoch = new Date(a.created).getTime();\n const bTimeSinceEpoch = new Date(b.created).getTime();\n return bTimeSinceEpoch - aTimeSinceEpoch;\n}\n\n/**\n *\n * @param {*} verifiedNames a list of verified name objects, where each object has at least the\n * following keys: created, status, and verified_name.\n * @returns the most recent verified name object from the list parameter with the 'pending' or\n * 'accepted' status, if one exists; otherwise, null\n */\nexport function getMostRecentApprovedOrPendingVerifiedName(verifiedNames) {\n // clone array so as not to modify original array\n const names = [...verifiedNames];\n\n if (Array.isArray(names)) {\n names.sort(compareVerifiedNamesByCreatedDate);\n }\n\n // We only want to consider a subset of verified names when determining the value of nameOnAccount.\n // approved: consider this status, as the name has been verified by IDV and should supersede the full name\n // (profile name).\n // pending: consider this status, as the learner has started the name change process through the\n // Account Settings page, and has been navigated to IDV to complete the name change process.\n // submitted: do not consider this status, as the name has already been submitted for verification through\n // IDV but has not yet been verified\n // denied: do not consider this status because the name was already denied via the IDV process\n const applicableNames = names.filter(name => ['approved', 'pending'].includes(name.status));\n const applicableName = applicableNames.length > 0 ? applicableNames[0].verified_name : null;\n\n return applicableName;\n}\n","import { createSelector, createStructuredSelector } from 'reselect';\nimport { siteLanguageListSelector, siteLanguageOptionsSelector } from '../site-language';\nimport { compareVerifiedNamesByCreatedDate } from '../../utils';\n\nexport const storeName = 'accountSettings';\n\nexport const accountSettingsSelector = state => ({ ...state[storeName] });\n\nconst editableFieldNameSelector = (state, props) => props.name;\n\nconst verifiedNameSettingsSelector = createSelector(\n accountSettingsSelector,\n accountSettings => ({\n history: accountSettings.verifiedNameHistory.results,\n useVerifiedNameForCerts: accountSettings?.verifiedNameHistory.use_verified_name_for_certs,\n }),\n);\n\nconst sortedVerifiedNameHistorySelector = createSelector(\n verifiedNameSettingsSelector,\n verifiedNameSettings => {\n const { history } = verifiedNameSettings;\n\n if (Array.isArray(history)) {\n return history.sort(compareVerifiedNamesByCreatedDate);\n }\n\n return [];\n },\n);\n\nconst mostRecentVerifiedNameSelector = createSelector(\n sortedVerifiedNameHistorySelector,\n sortedHistory => (sortedHistory.length > 0 ? sortedHistory[0] : null),\n);\n\nconst mostRecentApprovedVerifiedNameValueSelector = createSelector(\n sortedVerifiedNameHistorySelector,\n mostRecentVerifiedNameSelector,\n (sortedHistory, mostRecentVerifiedName) => {\n const approvedVerifiedNames = sortedHistory.filter(name => name.status === 'approved');\n const approvedVerifiedName = approvedVerifiedNames.length > 0 ? approvedVerifiedNames[0] : null;\n\n let verifiedName = null;\n switch (mostRecentVerifiedName && mostRecentVerifiedName.status) {\n case 'approved':\n case 'denied':\n case 'pending':\n verifiedName = approvedVerifiedName;\n break;\n case 'submitted':\n verifiedName = mostRecentVerifiedName;\n break;\n default:\n verifiedName = null;\n }\n return verifiedName;\n },\n);\n\nconst valuesSelector = createSelector(\n accountSettingsSelector,\n mostRecentApprovedVerifiedNameValueSelector,\n (accountSettings, mostRecentApprovedVerifiedNameValue) => {\n let useVerifiedNameForCerts = (\n accountSettings.verifiedNameHistory?.use_verified_name_for_certs || false\n );\n\n if (Object.keys(accountSettings.confirmationValues).includes('useVerifiedNameForCerts')) {\n useVerifiedNameForCerts = accountSettings.confirmationValues.useVerifiedNameForCerts;\n }\n\n return {\n ...accountSettings.values,\n verified_name: mostRecentApprovedVerifiedNameValue?.verified_name,\n useVerifiedNameForCerts,\n };\n },\n);\n\nconst draftsSelector = createSelector(\n accountSettingsSelector,\n accountSettings => accountSettings.drafts,\n);\n\nconst previousSiteLanguageSelector = createSelector(\n accountSettingsSelector,\n accountSettings => accountSettings.previousSiteLanguage,\n);\n\nconst editableFieldErrorSelector = createSelector(\n editableFieldNameSelector,\n accountSettingsSelector,\n (name, accountSettings) => accountSettings.errors[name],\n);\n\nconst editableFieldConfirmationValuesSelector = createSelector(\n editableFieldNameSelector,\n accountSettingsSelector,\n (name, accountSettings) => accountSettings.confirmationValues[name],\n);\n\nconst isEditingSelector = createSelector(\n editableFieldNameSelector,\n accountSettingsSelector,\n (name, accountSettings) => accountSettings.openFormId === name,\n);\n\nconst confirmationValuesSelector = createSelector(\n accountSettingsSelector,\n accountSettings => accountSettings.confirmationValues,\n);\n\nconst errorSelector = createSelector(\n accountSettingsSelector,\n accountSettings => accountSettings.errors,\n);\n\nconst nameChangeModalSelector = createSelector(\n accountSettingsSelector,\n accountSettings => accountSettings.nameChangeModal,\n);\n\nconst saveStateSelector = createSelector(\n accountSettingsSelector,\n accountSettings => accountSettings.saveState,\n);\n\nexport const editableFieldSelector = createStructuredSelector({\n error: editableFieldErrorSelector,\n confirmationValue: editableFieldConfirmationValuesSelector,\n saveState: saveStateSelector,\n isEditing: isEditingSelector,\n});\n\nexport const profileDataManagerSelector = createSelector(\n accountSettingsSelector,\n accountSettings => accountSettings.profileDataManager,\n);\n\nexport const staticFieldsSelector = createSelector(\n accountSettingsSelector,\n mostRecentVerifiedNameSelector,\n (accountSettings, verifiedName) => {\n const staticFields = [];\n if (accountSettings.profileDataManager) {\n staticFields.push('name', 'email', 'country');\n }\n if (verifiedName && ['submitted'].includes(verifiedName.status)) {\n staticFields.push('verifiedName');\n }\n\n return staticFields;\n },\n);\n\n/**\n * If there's no draft present at all (undefined), use the original committed value.\n */\nfunction chooseFormValue(draft, committed) {\n return draft !== undefined ? draft : committed;\n}\n\nconst formValuesSelector = createSelector(\n valuesSelector,\n draftsSelector,\n (values, drafts) => {\n const formValues = {};\n Object.entries(values).forEach(([name, value]) => {\n if (typeof value === 'boolean') {\n formValues[name] = chooseFormValue(drafts[name], value);\n } else {\n formValues[name] = chooseFormValue(drafts[name], value) || '';\n }\n });\n return formValues;\n },\n);\n\nconst transformTimeZonesToOptions = timeZoneArr => timeZoneArr\n .map(({ time_zone, description }) => ({ // eslint-disable-line camelcase\n value: time_zone, label: description,\n }));\n\nconst timeZonesSelector = createSelector(\n accountSettingsSelector,\n accountSettings => transformTimeZonesToOptions(accountSettings.timeZones),\n);\n\nconst countryTimeZonesSelector = createSelector(\n accountSettingsSelector,\n accountSettings => transformTimeZonesToOptions(accountSettings.countryTimeZones),\n);\n\nconst activeAccountSelector = createSelector(\n accountSettingsSelector,\n accountSettings => accountSettings.values.is_active,\n);\n\nexport const siteLanguageSelector = createSelector(\n previousSiteLanguageSelector,\n draftsSelector,\n (previousValue, drafts) => ({\n previousValue,\n draft: drafts.siteLanguage,\n }),\n);\n\nexport const betaLanguageBannerSelector = createStructuredSelector({\n siteLanguageList: siteLanguageListSelector,\n siteLanguage: siteLanguageSelector,\n});\n\nexport const accountSettingsPageSelector = createSelector(\n accountSettingsSelector,\n siteLanguageOptionsSelector,\n siteLanguageSelector,\n formValuesSelector,\n valuesSelector,\n draftsSelector,\n errorSelector,\n profileDataManagerSelector,\n staticFieldsSelector,\n timeZonesSelector,\n countryTimeZonesSelector,\n activeAccountSelector,\n nameChangeModalSelector,\n mostRecentApprovedVerifiedNameValueSelector,\n mostRecentVerifiedNameSelector,\n sortedVerifiedNameHistorySelector,\n (\n accountSettings,\n siteLanguageOptions,\n siteLanguage,\n formValues,\n committedValues,\n drafts,\n formErrors,\n profileDataManager,\n staticFields,\n timeZoneOptions,\n countryTimeZoneOptions,\n activeAccount,\n nameChangeModal,\n verifiedName,\n mostRecentVerifiedName,\n verifiedNameHistory,\n ) => ({\n siteLanguageOptions,\n siteLanguage,\n loading: accountSettings.loading,\n loaded: accountSettings.loaded,\n loadingError: accountSettings.loadingError,\n timeZoneOptions,\n countryTimeZoneOptions,\n isActive: activeAccount,\n formValues,\n committedValues,\n drafts,\n formErrors,\n profileDataManager,\n staticFields,\n tpaProviders: accountSettings.thirdPartyAuth.providers,\n nameChangeModal,\n verifiedName,\n mostRecentVerifiedName,\n verifiedNameHistory,\n }),\n);\n\nexport const certPreferenceSelector = createSelector(\n valuesSelector,\n formValuesSelector,\n mostRecentApprovedVerifiedNameValueSelector,\n saveStateSelector,\n errorSelector,\n (\n committedValues,\n formValues,\n mostRecentApprovedVerifiedNameValue,\n saveState,\n errors,\n ) => ({\n originalFullName: committedValues?.name || '',\n originalVerifiedName: mostRecentApprovedVerifiedNameValue?.verified_name || '',\n useVerifiedNameForCerts: formValues.useVerifiedNameForCerts || false,\n saveState,\n formErrors: errors,\n }),\n);\n\nexport const coachingConsentPageSelector = createSelector(\n accountSettingsSelector,\n formValuesSelector,\n activeAccountSelector,\n profileDataManagerSelector,\n saveStateSelector,\n confirmationValuesSelector,\n errorSelector,\n (\n accountSettings,\n formValues,\n activeAccount,\n profileDataManager,\n saveState,\n confirmationValues,\n errors,\n ) => ({\n loading: accountSettings.loading,\n loaded: accountSettings.loaded,\n loadingError: accountSettings.loadingError,\n isActive: activeAccount,\n profileDataManager,\n formValues,\n saveState,\n confirmationValues,\n formErrors: errors,\n }),\n);\n\nexport const demographicsSectionSelector = createSelector(\n formValuesSelector,\n draftsSelector,\n errorSelector,\n (\n formValues,\n drafts,\n errors,\n ) => ({\n formValues,\n drafts,\n formErrors: errors,\n }),\n);\n\nexport const nameChangeSelector = createSelector(\n accountSettingsSelector,\n formValuesSelector,\n (accountSettings, formValues) => ({\n ...accountSettings.nameChange,\n formValues,\n }),\n);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nexport default class PageLoading extends Component {\n renderSrMessage() {\n if (!this.props.srMessage) {\n return null;\n }\n\n return (\n \n {this.props.srMessage}\n \n );\n }\n\n render() {\n return (\n
\n \n
\n {this.renderSrMessage()}\n
\n
\n \n );\n }\n}\n\nPageLoading.propTypes = {\n srMessage: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { NavHashLink } from 'react-router-hash-link';\nimport Scrollspy from 'react-scrollspy';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport PropTypes from 'prop-types';\nimport messages from './AccountSettingsPage.messages';\n\nfunction JumpNav({ intl, displayDemographicsLink }) {\n return (\n
\n \n
  • \n \n {intl.formatMessage(messages['account.settings.section.account.information'])}\n \n
  • \n
  • \n \n {intl.formatMessage(messages['account.settings.section.profile.information'])}\n \n
  • \n {getConfig().ENABLE_DEMOGRAPHICS_COLLECTION && displayDemographicsLink\n && (\n
  • \n \n {intl.formatMessage(messages['account.settings.section.demographics.information'])}\n \n
  • \n )}\n
  • \n \n {intl.formatMessage(messages['account.settings.section.social.media'])}\n \n
  • \n
  • \n \n {intl.formatMessage(messages['account.settings.section.site.preferences'])}\n \n
  • \n
  • \n \n {intl.formatMessage(messages['account.settings.section.linked.accounts'])}\n \n
  • \n {/*
  • \n \n {intl.formatMessage(messages['account.settings.jump.nav.delete.account'])}\n \n
  • */}\n \n
    \n );\n}\n\nJumpNav.propTypes = {\n intl: intlShape.isRequired,\n displayDemographicsLink: PropTypes.bool.isRequired,\n};\n\nexport default injectIntl(JumpNav);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { TransitionReplace } from '@edx/paragon';\n\nconst onChildExit = (htmlNode) => {\n // If the leaving child has focus, take control and redirect it\n if (htmlNode.contains(document.activeElement)) {\n // Get the newly entering sibling.\n // It's the previousSibling, but not for any explicit reason. So checking for both.\n const enteringChild = htmlNode.previousSibling || htmlNode.nextSibling;\n\n // There's no replacement, do nothing.\n if (!enteringChild) {\n return;\n }\n\n // Get all the focusable elements in the entering child and focus the first one\n const focusableElements = enteringChild.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])');\n if (focusableElements.length) {\n focusableElements[0].focus();\n }\n }\n};\n\nfunction SwitchContent({ expression, cases, className }) {\n const getContent = (caseKey) => {\n if (cases[caseKey]) {\n if (typeof cases[caseKey] === 'string') {\n return getContent(cases[caseKey]);\n }\n return React.cloneElement(cases[caseKey], { key: caseKey });\n }\n if (cases.default) {\n if (typeof cases.default === 'string') {\n return getContent(cases.default);\n }\n React.cloneElement(cases.default, { key: 'default' });\n }\n\n return null;\n };\n\n return (\n \n {getContent(expression)}\n \n );\n}\n\nSwitchContent.propTypes = {\n expression: PropTypes.string,\n cases: PropTypes.objectOf(PropTypes.node).isRequired,\n className: PropTypes.string,\n};\n\nSwitchContent.defaultProps = {\n expression: null,\n className: null,\n};\n\nexport default SwitchContent;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'account.settings.field.name.checkbox.certificate.select': {\n id: 'account.settings.field.name.certificate.select',\n defaultMessage: 'If checked, this name will appear on your certificates and public-facing records.',\n description: 'Label for checkbox describing that the selected name will appear on the user‘s certificates.',\n },\n 'account.settings.field.name.modal.certificate.title': {\n id: 'account.settings.field.name.modal.certificate.title',\n defaultMessage: 'Choose a preferred name for certificates and public-facing records',\n description: 'Title instructing the user to choose a preferred name.',\n },\n 'account.settings.field.name.modal.certificate.select': {\n id: 'account.settings.field.name.modal.certificate.select',\n defaultMessage: 'Select a name',\n description: 'Label instructing the user to select a name.',\n },\n 'account.settings.field.name.modal.certificate.option.full': {\n id: 'account.settings.field.name.modal.certificate.option.full',\n defaultMessage: 'Full Name',\n description: 'Option representing the user’s full name.',\n },\n 'account.settings.field.name.modal.certificate.option.verified': {\n id: 'account.settings.field.name.modal.certificate.option.verified',\n defaultMessage: 'Verified Name',\n description: 'Option representing the user’s verified name.',\n },\n 'account.settings.field.name.modal.certificate.button.choose': {\n id: 'account.settings.field.name.modal.certificate.button.choose',\n defaultMessage: 'Choose name',\n description: 'Button to confirm the user’s name choice.',\n },\n});\n\nexport default messages;\n","import React, { useState, useEffect } from 'react';\nimport { connect, useDispatch } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport {\n ActionRow,\n Form,\n ModalDialog,\n StatefulButton,\n} from '@edx/paragon';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport {\n closeForm,\n resetDrafts,\n saveSettings,\n updateDraft,\n} from '../data/actions';\nimport { certPreferenceSelector } from '../data/selectors';\n\nimport commonMessages from '../AccountSettingsPage.messages';\nimport messages from './messages';\n\nfunction CertificatePreference({\n intl,\n fieldName,\n originalFullName,\n originalVerifiedName,\n saveState,\n useVerifiedNameForCerts,\n}) {\n if (!originalVerifiedName) {\n // If the user doesn't have an approved verified name, do not display this component\n return null;\n }\n\n const dispatch = useDispatch();\n const [checked, setChecked] = useState(false);\n const [modalIsOpen, setModalIsOpen] = useState(false);\n const formId = 'useVerifiedNameForCerts';\n\n function handleCheckboxChange() {\n if (!checked) {\n if (fieldName === 'verified_name') {\n dispatch(updateDraft(formId, true));\n } else {\n dispatch(updateDraft(formId, false));\n }\n } else {\n setModalIsOpen(true);\n }\n }\n\n function handleCancel() {\n setModalIsOpen(false);\n dispatch(resetDrafts());\n }\n\n function handleModalChange(e) {\n if (e.target.value === 'fullName') {\n dispatch(updateDraft(formId, false));\n } else {\n dispatch(updateDraft(formId, true));\n }\n }\n\n function handleSubmit(e) {\n e.preventDefault();\n\n if (saveState === 'pending') {\n return;\n }\n\n dispatch(saveSettings(formId, useVerifiedNameForCerts));\n }\n\n useEffect(() => {\n if (fieldName === 'verified_name') {\n setChecked(useVerifiedNameForCerts);\n } else {\n setChecked(!useVerifiedNameForCerts);\n }\n }, [useVerifiedNameForCerts]);\n\n useEffect(() => {\n if (modalIsOpen && saveState === 'complete') {\n setModalIsOpen(false);\n dispatch(closeForm(fieldName));\n }\n }, [modalIsOpen, saveState]);\n\n return (\n <>\n \n {intl.formatMessage(messages['account.settings.field.name.checkbox.certificate.select'])}\n \n\n \n
    \n \n \n {intl.formatMessage(messages['account.settings.field.name.modal.certificate.title'])}\n \n \n\n \n \n \n {intl.formatMessage(messages['account.settings.field.name.modal.certificate.select'])}\n \n \n \n {originalFullName}{' '}\n ({intl.formatMessage(messages['account.settings.field.name.modal.certificate.option.full'])})\n \n \n {originalVerifiedName}{' '}\n ({intl.formatMessage(messages['account.settings.field.name.modal.certificate.option.verified'])})\n \n \n \n \n\n \n \n \n {intl.formatMessage(commonMessages['account.settings.editable.field.action.cancel'])}\n \n \n \n \n
    \n \n \n );\n}\n\nCertificatePreference.propTypes = {\n intl: intlShape.isRequired,\n fieldName: PropTypes.string.isRequired,\n originalFullName: PropTypes.string,\n originalVerifiedName: PropTypes.string,\n saveState: PropTypes.string,\n useVerifiedNameForCerts: PropTypes.bool,\n};\n\nCertificatePreference.defaultProps = {\n originalFullName: '',\n originalVerifiedName: '',\n saveState: null,\n useVerifiedNameForCerts: false,\n};\n\nexport default connect(certPreferenceSelector)(injectIntl(CertificatePreference));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Button, Input, StatefulButton, ValidationFormGroup,\n} from '@edx/paragon';\nimport { faPencilAlt } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport SwitchContent from './SwitchContent';\nimport messages from './AccountSettingsPage.messages';\n\nimport {\n openForm,\n closeForm,\n} from './data/actions';\nimport { editableFieldSelector } from './data/selectors';\nimport CertificatePreference from './certificate-preference/CertificatePreference';\n\nfunction EditableField(props) {\n const {\n name,\n label,\n emptyLabel,\n type,\n value,\n userSuppliedValue,\n options,\n saveState,\n error,\n confirmationMessageDefinition,\n confirmationValue,\n helpText,\n onEdit,\n onCancel,\n onSubmit,\n onChange,\n isEditing,\n isEditable,\n isGrayedOut,\n intl,\n ...others\n } = props;\n const id = `field-${name}`;\n let inputOptions = options;\n if (getConfig().ENABLE_COPPA_COMPLIANCE && name === 'level_of_education' && options) {\n inputOptions = options.filter(option => option.value !== 'el');\n }\n\n const handleSubmit = (e) => {\n e.preventDefault();\n onSubmit(name, new FormData(e.target).get(name));\n };\n\n const handleChange = (e) => {\n onChange(name, e.target.value);\n };\n\n const handleEdit = () => {\n onEdit(name);\n };\n\n const handleCancel = () => {\n onCancel(name);\n };\n\n const renderEmptyLabel = () => {\n if (isEditable) {\n return ;\n }\n return {emptyLabel};\n };\n\n const renderValue = (rawValue) => {\n if (!rawValue) {\n return renderEmptyLabel();\n }\n let finalValue = rawValue;\n\n if (options) {\n // Use == instead of === to prevent issues when HTML casts numbers as strings\n // eslint-disable-next-line eqeqeq\n const selectedOption = options.find(option => option.value == rawValue);\n if (selectedOption) {\n finalValue = selectedOption.label;\n }\n }\n\n if (userSuppliedValue) {\n finalValue += `: ${userSuppliedValue}`;\n }\n\n return finalValue;\n };\n\n const renderConfirmationMessage = () => {\n if (!confirmationMessageDefinition || !confirmationValue) {\n return null;\n }\n return intl.formatMessage(confirmationMessageDefinition, {\n value: confirmationValue,\n });\n };\n\n return (\n \n
    \n \n \n \n <>{others.children}\n \n

    \n {\n // Swallow clicks if the state is pending.\n // We do this instead of disabling the button to prevent\n // it from losing focus (disabled elements cannot have focus).\n // Disabling it would causes upstream issues in focus management.\n // Swallowing the onSubmit event on the form would be better, but\n // we would have to add that logic for every field given our\n // current structure of the application.\n if (saveState === 'pending') { e.preventDefault(); }\n }}\n disabledStates={[]}\n />\n \n {intl.formatMessage(messages['account.settings.editable.field.action.cancel'])}\n \n

    \n \n {['name', 'verified_name'].includes(name) && }\n \n ),\n default: (\n
    \n
    \n
    {label}
    \n {isEditable ? (\n \n ) : null}\n
    \n

    {renderValue(value)}

    \n

    {renderConfirmationMessage() || helpText}

    \n
    \n ),\n }}\n />\n );\n}\n\nEditableField.propTypes = {\n name: PropTypes.string.isRequired,\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.node]),\n emptyLabel: PropTypes.node,\n type: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n userSuppliedValue: PropTypes.string,\n options: PropTypes.arrayOf(PropTypes.shape({\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n })),\n saveState: PropTypes.oneOf(['default', 'pending', 'complete', 'error']),\n error: PropTypes.string,\n confirmationMessageDefinition: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n description: PropTypes.string,\n }),\n confirmationValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n helpText: PropTypes.node,\n onEdit: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n isEditing: PropTypes.bool,\n isEditable: PropTypes.bool,\n isGrayedOut: PropTypes.bool,\n intl: intlShape.isRequired,\n};\n\nEditableField.defaultProps = {\n value: undefined,\n options: undefined,\n saveState: undefined,\n label: undefined,\n emptyLabel: undefined,\n error: undefined,\n confirmationMessageDefinition: undefined,\n confirmationValue: undefined,\n helpText: undefined,\n isEditing: false,\n isEditable: true,\n isGrayedOut: false,\n userSuppliedValue: undefined,\n};\n\nexport default connect(editableFieldSelector, {\n onEdit: openForm,\n onCancel: closeForm,\n})(injectIntl(EditableField));\n","import { AsyncActionType } from '../../data/utils';\n\nexport const RESET_PASSWORD = new AsyncActionType('ACCOUNT_SETTINGS', 'RESET_PASSWORD');\n\nexport const resetPassword = email => ({\n type: RESET_PASSWORD.BASE,\n payload: { email },\n});\n\nexport const resetPasswordBegin = () => ({\n type: RESET_PASSWORD.BEGIN,\n});\n\nexport const resetPasswordSuccess = () => ({\n type: RESET_PASSWORD.SUCCESS,\n});\n\nexport const resetPasswordReset = () => ({\n type: RESET_PASSWORD.RESET,\n});\n\nexport const resetPasswordForbidden = () => ({\n type: RESET_PASSWORD.FORBIDDEN,\n});\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'account.settings.editable.field.password.reset.button': {\n id: 'account.settings.editable.field.password.reset.button',\n defaultMessage: 'Reset Password',\n description: 'The password reset button in account settings',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nfunction Alert(props) {\n return (\n
    \n
    \n {props.icon}\n
    \n
    \n {props.children}\n
    \n
    \n );\n}\n\nAlert.propTypes = {\n className: PropTypes.string,\n icon: PropTypes.node,\n children: PropTypes.node,\n};\n\nAlert.defaultProps = {\n className: undefined,\n icon: undefined,\n children: undefined,\n};\n\nexport default Alert;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { FormattedMessage } from \"@edx/frontend-platform/i18n\";\nimport { Hyperlink } from \"@edx/paragon\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faExclamationTriangle } from \"@fortawesome/free-solid-svg-icons\";\n\nimport Alert from \"../Alert\";\n\nconst ConfirmationAlert = (props) => {\n const { email } = props;\n\n const technicalSupportLink = (\n \n \n \n );\n\n return (\n }\n >\n \n \n );\n};\n\nConfirmationAlert.propTypes = {\n email: PropTypes.string.isRequired,\n};\n\nexport default ConfirmationAlert;\n","import React from 'react';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\n\nimport Alert from '../Alert';\n\nconst RequestInProgressAlert = () => (\n }\n >\n \n \n);\n\nexport default RequestInProgressAlert;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { injectIntl, intlShape, FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { StatefulButton } from '@edx/paragon';\n\nimport { resetPassword } from './data/actions';\nimport messages from './messages';\nimport ConfirmationAlert from './ConfirmationAlert';\nimport RequestInProgressAlert from './RequestInProgressAlert';\n\nconst ResetPassword = (props) => {\n const { email, intl, status } = props;\n return (\n
    \n
    \n \n
    \n

    \n {\n // Swallow clicks if the state is pending.\n // We do this instead of disabling the button to prevent\n // it from losing focus (disabled elements cannot have focus).\n // Disabling it would causes upstream issues in focus management.\n // Swallowing the onSubmit event on the form would be better, but\n // we would have to add that logic for every field given our\n // current structure of the application.\n if (status === 'pending') {\n e.preventDefault();\n }\n props.resetPassword(email);\n }}\n disabledStates={[]}\n labels={{\n default: intl.formatMessage(messages['account.settings.editable.field.password.reset.button']),\n }}\n />\n

    \n {status === 'complete' ? : null}\n {status === 'forbidden' ? : null}\n
    \n );\n};\n\nResetPassword.propTypes = {\n email: PropTypes.string,\n intl: intlShape.isRequired,\n resetPassword: PropTypes.func.isRequired,\n status: PropTypes.string,\n};\n\nResetPassword.defaultProps = {\n email: '',\n status: null,\n};\n\nconst mapStateToProps = state => state.accountSettings.resetPassword;\n\nexport default connect(\n mapStateToProps,\n {\n resetPassword,\n },\n)(injectIntl(ResetPassword));\n","import { RESET_PASSWORD } from './actions';\n\nexport const defaultState = {\n status: null,\n};\n\nconst reducer = (state = defaultState, action = null) => {\n if (action !== null) {\n switch (action.type) {\n case RESET_PASSWORD.BEGIN:\n return {\n ...state,\n status: 'pending',\n };\n case RESET_PASSWORD.SUCCESS:\n return {\n ...state,\n status: 'complete',\n };\n case RESET_PASSWORD.FORBIDDEN:\n return {\n ...state,\n status: 'forbidden',\n };\n\n default:\n }\n }\n return state;\n};\n\nexport default reducer;\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport formurlencoded from 'form-urlencoded';\nimport { handleRequestError } from '../../data/utils';\n\n// eslint-disable-next-line import/prefer-default-export\nexport async function postResetPassword(email) {\n const { data } = await getAuthenticatedHttpClient()\n .post(\n `${getConfig().LMS_BASE_URL}/password_reset/`,\n formurlencoded({ email }),\n {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n },\n )\n .catch(handleRequestError);\n\n return data;\n}\n","import { put, call, takeEvery } from 'redux-saga/effects';\n\nimport {\n resetPasswordBegin, resetPasswordForbidden, resetPasswordSuccess, RESET_PASSWORD,\n} from './actions';\nimport { postResetPassword } from './service';\n\nfunction* handleResetPassword(action) {\n yield put(resetPasswordBegin());\n try {\n const response = yield call(postResetPassword, action.payload.email);\n yield put(resetPasswordSuccess(response));\n } catch (error) {\n if (error.response && error.response.status === 403) {\n yield put(resetPasswordForbidden(error));\n } else {\n throw error;\n }\n }\n}\n\nexport default function* saga() {\n yield takeEvery(RESET_PASSWORD.BASE, handleResetPassword);\n}\n","import { AsyncActionType } from '../../data/utils';\n\nexport const REQUEST_NAME_CHANGE = new AsyncActionType('ACCOUNT_SETTINGS', 'REQUEST_NAME_CHANGE');\n\nexport const requestNameChange = (username, profileName, verifiedName) => ({\n type: REQUEST_NAME_CHANGE.BASE,\n payload: { username, profileName, verifiedName },\n});\n\nexport const requestNameChangeBegin = () => ({\n type: REQUEST_NAME_CHANGE.BEGIN,\n});\n\nexport const requestNameChangeSuccess = () => ({\n type: REQUEST_NAME_CHANGE.SUCCESS,\n});\n\nexport const requestNameChangeFailure = errors => ({\n type: REQUEST_NAME_CHANGE.FAILURE,\n payload: { errors },\n});\n\nexport const requestNameChangeReset = () => ({\n type: REQUEST_NAME_CHANGE.RESET,\n});\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'account.settings.name.change.title.id': {\n id: 'account.settings.name.change.title.id',\n defaultMessage: 'This name change requires identity verification',\n description: 'Inform the user that changing their name requires identity verification',\n },\n 'account.settings.name.change.title.begin': {\n id: 'account.settings.name.change.title.begin',\n defaultMessage: 'Before we begin',\n description: 'Title before beginning the ID verification process',\n },\n 'account.settings.name.change.warning.one': {\n id: 'account.settings.name.change.warning.one',\n defaultMessage: 'Warning: This action updates the name that appears on all certificates that have been earned on this account in the past and any certificates you are currently earning or will earn in the future.',\n description: 'Warning informing the user that a name change will update the name on all of their certificates.',\n },\n 'account.settings.name.change.warning.two': {\n id: 'account.settings.name.change.warning.two',\n defaultMessage: 'This action cannot be undone without verifying your identity.',\n description: 'Warning informing the user that a name change cannot be undone without ID verification.',\n },\n 'account.settings.name.change.id.name.label': {\n id: 'account.settings.name.change.id.name.label',\n defaultMessage: 'Enter your name as it appears on your unexpired student, work, or government-issued identification card.',\n description: 'Form label instructing the user to enter the name on their ID.',\n },\n 'account.settings.name.change.id.name.placeholder': {\n id: 'account.settings.name.change.id.name.placeholder',\n defaultMessage: 'Enter the name on your photo ID',\n description: 'Form label instructing the user to enter the name on their ID.',\n },\n 'account.settings.name.change.error.valid.name': {\n id: 'account.settings.name.change.error.valid.name',\n defaultMessage: 'Please enter a valid name.',\n description: 'Error that appears when the user doesn’t enter a valid name.',\n },\n 'account.settings.name.change.error.general': {\n id: 'account.settings.name.change.error.general',\n defaultMessage: 'A technical error occurred. Please try again.',\n description: 'Generic error message.',\n },\n 'account.settings.name.change.continue': {\n id: 'account.settings.name.change.continue',\n defaultMessage: 'Continue',\n description: 'Continue button.',\n },\n 'account.settings.name.change.cancel': {\n id: 'account.settings.name.change.cancel',\n defaultMessage: 'Cancel',\n description: 'Cancel button.',\n },\n});\n\nexport default messages;\n","import React, { useEffect, useState } from 'react';\nimport { connect, useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n ActionRow,\n Alert,\n Button,\n Col,\n Form,\n ModalDialog,\n StatefulButton,\n} from '@edx/paragon';\n\nimport { closeForm, saveSettingsReset } from '../data/actions';\nimport { nameChangeSelector } from '../data/selectors';\n\nimport { requestNameChange, requestNameChangeFailure, requestNameChangeReset } from './data/actions';\nimport messages from './messages';\n\nfunction NameChangeModal({\n targetFormId,\n errors,\n formValues,\n intl,\n saveState,\n}) {\n const dispatch = useDispatch();\n const { push } = useHistory();\n const { username } = getAuthenticatedUser();\n const [verifiedNameInput, setVerifiedNameInput] = useState(formValues.verified_name || '');\n const [confirmedWarning, setConfirmedWarning] = useState(false);\n\n function resetLocalState() {\n setConfirmedWarning(false);\n dispatch(requestNameChangeReset());\n }\n\n function handleChange(e) {\n setVerifiedNameInput(e.target.value);\n }\n\n function handleClose() {\n resetLocalState();\n dispatch(closeForm(targetFormId));\n dispatch(saveSettingsReset());\n }\n\n function handleSubmit(e) {\n e.preventDefault();\n\n if (saveState === 'pending') {\n return;\n }\n\n if (!verifiedNameInput) {\n dispatch(requestNameChangeFailure({\n verified_name: intl.formatMessage(messages['account.settings.name.change.error.valid.name']),\n }));\n } else {\n const draftProfileName = targetFormId === 'name' ? formValues.name : null;\n dispatch(requestNameChange(username, draftProfileName, verifiedNameInput));\n }\n }\n\n useEffect(() => {\n if (saveState === 'complete') {\n handleClose();\n push(`/id-verification?next=${encodeURIComponent('account/settings')}`);\n }\n }, [saveState]);\n\n function renderErrors() {\n if (Object.keys(errors).length > 0) {\n return (\n <>\n {Object.entries(errors).map(([key, value]) => (\n \n {\n key === 'general_error'\n ? intl.formatMessage(messages['account.settings.name.change.error.general'])\n : value\n }\n \n ))}\n \n );\n }\n return null;\n }\n\n function renderTitle() {\n if (!confirmedWarning) {\n return intl.formatMessage(messages['account.settings.name.change.title.id']);\n }\n\n return intl.formatMessage(messages['account.settings.name.change.title.begin']);\n }\n\n function renderBody() {\n if (!confirmedWarning) {\n return (\n \n

    \n {intl.formatMessage(messages['account.settings.name.change.warning.one'])}\n

    \n

    \n {intl.formatMessage(messages['account.settings.name.change.warning.two'])}\n

    \n
    \n );\n }\n\n return (\n 0}>\n \n {intl.formatMessage(messages['account.settings.name.change.id.name.label'])}\n \n \n {renderErrors()}\n \n );\n }\n\n function renderContinueButton() {\n if (!confirmedWarning) {\n return (\n \n );\n }\n\n return (\n \n );\n }\n\n return (\n \n\n
    \n \n \n {renderTitle()}\n \n \n\n \n {renderBody()}\n \n\n \n \n \n {intl.formatMessage(messages['account.settings.name.change.cancel'])}\n \n {renderContinueButton()}\n \n \n
    \n\n \n );\n}\n\nNameChangeModal.propTypes = {\n targetFormId: PropTypes.string.isRequired,\n errors: PropTypes.shape({}).isRequired,\n formValues: PropTypes.shape({\n name: PropTypes.string,\n verified_name: PropTypes.string,\n }).isRequired,\n saveState: PropTypes.string,\n intl: intlShape.isRequired,\n};\n\nNameChangeModal.defaultProps = {\n saveState: null,\n};\n\nexport default connect(nameChangeSelector)(injectIntl(NameChangeModal));\n","import { REQUEST_NAME_CHANGE } from './actions';\n\nexport const defaultState = {\n saveState: null,\n errors: {},\n};\n\nconst reducer = (state = defaultState, action = null) => {\n if (action !== null) {\n switch (action.type) {\n case REQUEST_NAME_CHANGE.BEGIN:\n return {\n ...state,\n saveState: 'pending',\n errors: {},\n };\n\n case REQUEST_NAME_CHANGE.SUCCESS:\n return {\n ...state,\n saveState: 'complete',\n };\n\n case REQUEST_NAME_CHANGE.FAILURE:\n return {\n ...state,\n saveState: 'error',\n errors: action.payload.errors || { general_error: 'A technical error occurred. Please try again.' },\n };\n\n case REQUEST_NAME_CHANGE.RESET:\n return {\n ...state,\n saveState: null,\n errors: {},\n };\n\n default:\n }\n }\n return state;\n};\n\nexport default reducer;\n","import { AsyncActionType } from '../../data/utils';\n\nexport const DISCONNECT_AUTH = new AsyncActionType('ACCOUNT_SETTINGS', 'DISCONNECT_AUTH');\n\nexport const disconnectAuth = (url, providerId) => ({\n type: DISCONNECT_AUTH.BASE, payload: { url, providerId },\n});\nexport const disconnectAuthBegin = providerId => ({\n type: DISCONNECT_AUTH.BEGIN, payload: { providerId },\n});\nexport const disconnectAuthSuccess = (providerId, thirdPartyAuthProviders) => ({\n type: DISCONNECT_AUTH.SUCCESS,\n payload: { providerId, thirdPartyAuthProviders },\n});\nexport const disconnectAuthFailure = providerId => ({\n type: DISCONNECT_AUTH.FAILURE, payload: { providerId },\n});\nexport const disconnectAuthReset = providerId => ({\n type: DISCONNECT_AUTH.RESET, payload: { providerId },\n});\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, StatefulButton } from '@edx/paragon';\n\nimport Alert from '../Alert';\nimport { disconnectAuth } from './data/actions';\n\nclass ThirdPartyAuth extends Component {\n onClickDisconnect = (e) => {\n e.preventDefault();\n const providerId = e.currentTarget.getAttribute('data-provider-id');\n if (this.props.disconnectionStatuses[providerId] === 'pending') {\n return;\n }\n const disconnectUrl = e.currentTarget.getAttribute('data-disconnect-url');\n this.props.disconnectAuth(disconnectUrl, providerId);\n }\n\n renderUnconnectedProvider(url, name) {\n return (\n <>\n
    {name}
    \n \n \n \n \n );\n }\n\n renderConnectedProvider(url, name, id) {\n const hasError = this.props.errors[id];\n\n return (\n <>\n
    \n {name}\n \n \n \n
    \n {hasError ? (\n \n \n \n ) : null}\n\n \n ),\n }}\n onClick={this.onClickDisconnect}\n disabledStates={[]}\n data-disconnect-url={url}\n data-provider-id={id}\n />\n \n );\n }\n\n renderProvider({\n name, disconnectUrl, connectUrl, connected, id,\n }) {\n return (\n
    \n {\n connected\n ? this.renderConnectedProvider(disconnectUrl, name, id)\n : this.renderUnconnectedProvider(connectUrl, name)\n }\n
    \n );\n }\n\n renderNoProviders() {\n return (\n \n );\n }\n\n render() {\n if (this.props.providers === undefined) {\n return null;\n }\n\n if (this.props.providers.length === 0) {\n return this.renderNoProviders();\n }\n\n return this.props.providers.map(this.renderProvider, this);\n }\n}\n\nThirdPartyAuth.propTypes = {\n providers: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.string,\n disconnectUrl: PropTypes.string,\n connectUrl: PropTypes.string,\n connected: PropTypes.bool,\n id: PropTypes.string,\n })),\n disconnectionStatuses: PropTypes.objectOf(PropTypes.oneOf([null, 'pending', 'complete', 'error'])),\n errors: PropTypes.objectOf(PropTypes.bool),\n disconnectAuth: PropTypes.func.isRequired,\n};\n\nThirdPartyAuth.defaultProps = {\n providers: undefined,\n disconnectionStatuses: {},\n errors: {},\n};\n\nconst mapStateToProps = state => state.accountSettings.thirdPartyAuth;\n\nexport default connect(\n mapStateToProps,\n {\n disconnectAuth,\n },\n)(ThirdPartyAuth);\n","import { DISCONNECT_AUTH } from './actions';\n\nexport const defaultState = {\n providers: [],\n disconnectionStatuses: {},\n errors: {},\n};\n\nconst reducer = (state = defaultState, action = null) => {\n if (action !== null) {\n switch (action.type) {\n case DISCONNECT_AUTH.BEGIN:\n return {\n ...state,\n disconnectionStatuses: {\n ...state.disconnectionStatuses,\n [action.payload.providerId]: 'pending',\n },\n };\n case DISCONNECT_AUTH.SUCCESS:\n return {\n ...state,\n disconnectionStatuses: {\n ...state.disconnectionStatuses,\n [action.payload.providerId]: 'complete',\n },\n providers: action.payload.thirdPartyAuthProviders,\n };\n case DISCONNECT_AUTH.FAILURE:\n return {\n ...state,\n disconnectionStatuses: {\n ...state.disconnectionStatuses,\n [action.payload.providerId]: 'error',\n },\n errors: {\n ...state.errors,\n [action.payload.providerId]: true,\n },\n };\n case DISCONNECT_AUTH.RESET:\n return {\n ...state,\n disconnectionStatuses: {\n ...state.disconnectionStatuses,\n [action.payload.providerId]: null,\n },\n errors: {\n ...state.errors,\n [action.payload.providerId]: null,\n },\n };\n default:\n }\n }\n return state;\n};\n\nexport default reducer;\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nimport { handleRequestError } from '../../data/utils';\n\nexport async function getThirdPartyAuthProviders() {\n const { data } = await getAuthenticatedHttpClient()\n .get(`${getConfig().LMS_BASE_URL}/api/third_party_auth/v0/providers/user_status`)\n .catch(handleRequestError);\n\n return data.map(({ connect_url: connectUrl, disconnect_url: disconnectUrl, ...provider }) => ({\n ...provider,\n connectUrl: `${getConfig().LMS_BASE_URL}${connectUrl}`,\n disconnectUrl: `${getConfig().LMS_BASE_URL}${disconnectUrl}`,\n }));\n}\n\nexport async function postDisconnectAuth(url) {\n const { data } = await getAuthenticatedHttpClient()\n .post(url)\n .catch(handleRequestError);\n return data;\n}\n","import { call, put, takeEvery } from 'redux-saga/effects';\nimport { logError } from '@edx/frontend-platform/logging';\n\nimport {\n disconnectAuthReset,\n disconnectAuthBegin,\n disconnectAuthSuccess,\n disconnectAuthFailure,\n DISCONNECT_AUTH,\n} from './actions';\n\nimport {\n getThirdPartyAuthProviders,\n postDisconnectAuth,\n} from './service';\n\nfunction* handleDisconnectAuth(action) {\n const { providerId } = action.payload;\n try {\n yield put(disconnectAuthReset(providerId));\n yield put(disconnectAuthBegin(providerId));\n yield call(postDisconnectAuth, action.payload.url);\n const thirdPartyAuthProviders = yield call(getThirdPartyAuthProviders);\n yield put(disconnectAuthSuccess(providerId, thirdPartyAuthProviders));\n } catch (e) {\n logError(e);\n yield put(disconnectAuthFailure(providerId));\n }\n}\n\nexport default function* saga() {\n yield takeEvery(DISCONNECT_AUTH.BASE, handleDisconnectAuth);\n}\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nimport { handleRequestError } from '../../data/utils';\n\n// eslint-disable-next-line import/prefer-default-export\nexport async function postVerifiedNameConfig(username, commitValues) {\n const requestConfig = { headers: { Accept: 'application/json' } };\n const requestUrl = `${getConfig().LMS_BASE_URL}/api/edx_name_affirmation/v1/verified_name/config`;\n\n const { useVerifiedNameForCerts } = commitValues;\n const postValues = {\n username,\n use_verified_name_for_certs: useVerifiedNameForCerts,\n };\n\n const { data } = await getAuthenticatedHttpClient()\n .post(requestUrl, postValues, requestConfig)\n .catch(error => handleRequestError(error));\n\n return data;\n}\n","import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport { getConfig } from '@edx/frontend-platform';\nimport get from 'lodash.get';\n\n/**\n * get all settings related to the coaching plugin. Settings used\n * by Microbachelors students.\n * @param {Number} userId users are identified in the api by LMS id\n */\nexport async function getCoachingPreferences(userId) {\n let data = {};\n try {\n ({ data } = await getAuthenticatedHttpClient()\n .get(`${getConfig().LMS_BASE_URL}/api/coaching/v1/users/${userId}/`));\n } catch (error) {\n // If a user isn't active the API call will fail with a lack of credentials.\n data = {\n coaching_consent: false,\n user: userId,\n eligible_for_coaching: false,\n consent_form_seen: false,\n };\n }\n\n return data;\n}\n\n/**\n * patch all of the settings related to coaching.\n * @param {Number} userId users are identified in the api by LMS id\n * @param {Object} commitValues { coaching }\n */\nexport async function patchCoachingPreferences(userId, commitValues) {\n const requestUrl = `${getConfig().LMS_BASE_URL}/api/coaching/v1/users/${userId}/`;\n const { coaching } = commitValues;\n coaching.user = userId;\n\n await getAuthenticatedHttpClient()\n .patch(requestUrl, coaching)\n .catch((error) => {\n const apiError = Object.create(error);\n apiError.fieldErrors = JSON.parse(error.customAttributes.httpErrorResponseData);\n if (get(apiError, 'fieldErrors.phone_number')) {\n // eslint-disable-next-line prefer-destructuring\n apiError.fieldErrors.coaching = apiError.fieldErrors.phone_number[0];\n delete apiError.fieldErrors.phone_number;\n }\n throw apiError;\n });\n return commitValues;\n}\n","export const TO = 'to';\nexport const FROM = 'from';\nexport const DEMOGRAPHICS_FIELDS = [\n 'demographics_gender',\n 'demographics_gender_description',\n 'demographics_income',\n 'demographics_learner_education_level',\n 'demographics_parent_education_level',\n 'demographics_military_history',\n 'demographics_work_status',\n 'demographics_work_status_description',\n 'demographics_current_work_sector',\n 'demographics_future_work_sector',\n 'demographics_user_ethnicity',\n];\n\n// Frontend wants (example):\n// demographics_user_ethnicity: [\"asian\", \"white\", \"other\"]\n//\n// Demographics wants (example):\n// user_ethnicity: [\n// { ethnicity: \"asian\" },\n// { ethnicity: \"white\" },\n// { ethnicity: \"other\" }\n// ]\nfunction convertEthnicity(ethnicityData, direction) {\n if (direction === FROM) {\n return ethnicityData.map(e => e.ethnicity);\n }\n\n if (direction === TO) {\n return ethnicityData.map(e => ({ ethnicity: e }));\n }\n\n return ethnicityData;\n}\n\n// Handles conversion of data to/from Demographics IDA to/from format needed for\n// frontend\n// * handles ethnicity field\n// * adds/removes 'demographics' to/from key\n// * replace `null` with empty string or empty string with null\nexport function convertData(dataObject, direction) {\n const converted = {};\n\n Object.entries(dataObject).forEach(([key, value]) => {\n let newValue = value;\n\n if (key.includes('ethnicity')) {\n newValue = convertEthnicity(value, direction);\n }\n\n if (direction === TO) {\n converted[key.replace('demographics_', '')] = newValue || null;\n }\n\n if (direction === FROM) {\n converted[`demographics_${key}`] = newValue || '';\n }\n });\n\n return converted;\n}\n","import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport { getConfig } from '@edx/frontend-platform';\nimport get from 'lodash.get';\nimport { convertData, TO, FROM } from './utils';\n\n/**\n * Utility method that attempts to extract errors from the response of a PATCH request in order to\n * display a warning or otherwise meaningful message to the user.\n *\n * @param {Error} error\n */\nexport function createDemographicsError(error) {\n const apiError = Object.create(error);\n // If the error received has the `httpResponseData` field in it, then we should have reason to\n // believe the Demographics service is alive and responding. Extract errors from fields where\n // appropriate so we can display them to the user.\n if (get(error, 'customAttributes.httpErrorResponseData')) {\n apiError.fieldErrors = JSON.parse(error.customAttributes.httpErrorResponseData);\n if (get(apiError, 'fieldErrors.gender_description')) {\n // eslint-disable-next-line prefer-destructuring\n apiError.fieldErrors.demographics_gender = apiError.fieldErrors.gender_description[0];\n delete apiError.fieldErrors.gender_description;\n } else if (get(apiError, 'fieldErrors.work_status_description')) {\n // eslint-disable-next-line prefer-destructuring\n apiError.fieldErrors.demographics_work_status = apiError.fieldErrors.work_status_description[0];\n delete apiError.fieldErrors.work_status_description;\n }\n // Otherwise, when the service is down, the error response will not contain a\n // `httpErrorResponseData` field. Add a generic 'demographicsError' field to the fieldErrors that\n // will trigger showing an Alert to the user to them them know the update was unsuccessful.\n } else {\n apiError.fieldErrors = {\n demographicsError: error.customAttributes.httpErrorType,\n };\n }\n\n return apiError;\n}\n\n/**\n * post all of the data related to demographics.\n * @param {Number} userId users are identified in the api by LMS id\n * @param {Object} commitValues { demographics }\n */\nexport async function postDemographics(userId) {\n const requestConfig = { headers: { 'Content-Type': 'application/json' } };\n const requestUrl = `${getConfig().DEMOGRAPHICS_BASE_URL}/demographics/api/v1/demographics/`;\n const commitValues = { user: userId };\n let data = {};\n\n ({ data } = await getAuthenticatedHttpClient()\n .post(requestUrl, commitValues, requestConfig)\n .catch((error) => {\n const apiError = createDemographicsError(error);\n throw apiError;\n }));\n\n return convertData(data, FROM);\n}\n\n/**\n * get all data related to the demographics.\n * @param {Number} userId users are identified in the api by LMS id\n */\nexport async function getDemographics(userId) {\n const requestUrl = `${getConfig().DEMOGRAPHICS_BASE_URL}/demographics/api/v1/demographics/${userId}/`;\n let data = {};\n\n try {\n ({ data } = await getAuthenticatedHttpClient()\n .get(requestUrl));\n\n data = convertData(data, FROM);\n } catch (error) {\n const apiError = Object.create(error);\n // if the API called resulted in this user receiving a 404 then follow up with a POST call to\n // try and create the demographics entity on the backend\n if (apiError.customAttributes.httpErrorStatus) {\n if (apiError.customAttributes.httpErrorStatus === 404) {\n data = await postDemographics(userId);\n }\n } else {\n data = {\n user: userId,\n demographics_gender: '',\n demographics_gender_description: '',\n demographics_income: '',\n demographics_learner_education_level: '',\n demographics_parent_education_level: '',\n demographics_military_history: '',\n demographics_work_status: '',\n demographics_work_status_description: '',\n demographics_current_work_sector: '',\n demographics_future_work_sector: '',\n demographics_user_ethnicity: [],\n };\n }\n }\n\n return data;\n}\n\n/**\n * patch all of the data related to demographics.\n * @param {Number} userId users are identified in the api by LMS id\n * @param {Object} commitValues { demographics }\n */\nexport async function patchDemographics(userId, commitValues) {\n const requestUrl = `${getConfig().DEMOGRAPHICS_BASE_URL}/demographics/api/v1/demographics/${userId}/`;\n const convertedCommitValues = convertData(commitValues, TO);\n let data = {};\n\n ({ data } = await getAuthenticatedHttpClient()\n .patch(requestUrl, convertedCommitValues)\n .catch((error) => {\n const apiError = createDemographicsError(error);\n throw apiError;\n }));\n\n return convertData(data, FROM);\n}\n\n/**\n * retrieve the options for each field from the Demographics API\n */\nexport async function getDemographicsOptions() {\n const requestUrl = `${getConfig().DEMOGRAPHICS_BASE_URL}/demographics/api/v1/demographics/`;\n let data = {};\n\n try {\n ({ data } = await getAuthenticatedHttpClient().options(requestUrl));\n } catch (error) {\n // We are catching and suppressing errors here on purpose. If an error occurs during the\n // getDemographicsOptions call we will pass back an empty `data` object. Downstream we make\n // the assumption that if the demographicsOptions object is empty that there was an issue or\n // error communicating with the service/API.\n }\n\n return data;\n}\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport pick from 'lodash.pick';\nimport pickBy from 'lodash.pickby';\nimport omit from 'lodash.omit';\nimport isEmpty from 'lodash.isempty';\n\nimport { handleRequestError, unpackFieldErrors } from './utils';\nimport { getThirdPartyAuthProviders } from '../third-party-auth';\nimport { postVerifiedNameConfig } from '../certificate-preference/data/service';\nimport { getCoachingPreferences, patchCoachingPreferences } from '../coaching/data/service';\nimport { getDemographics, getDemographicsOptions, patchDemographics } from '../demographics/data/service';\nimport { DEMOGRAPHICS_FIELDS } from '../demographics/data/utils';\n\nconst SOCIAL_PLATFORMS = [\n { id: 'twitter', key: 'social_link_twitter' },\n { id: 'facebook', key: 'social_link_facebook' },\n { id: 'linkedin', key: 'social_link_linkedin' },\n];\n\nfunction unpackAccountResponseData(data) {\n const unpackedData = data;\n\n // This is handled by preferences\n delete unpackedData.time_zone;\n\n SOCIAL_PLATFORMS.forEach(({ id, key }) => {\n const platformData = data.social_links.find(({ platform }) => platform === id);\n unpackedData[key] = typeof platformData === 'object' ? platformData.social_link : '';\n });\n\n if (Array.isArray(data.language_proficiencies)) {\n if (data.language_proficiencies.length) {\n unpackedData.language_proficiencies = data.language_proficiencies[0].code;\n } else {\n unpackedData.language_proficiencies = '';\n }\n }\n\n return unpackedData;\n}\n\nfunction packAccountCommitData(commitData) {\n const packedData = commitData;\n\n SOCIAL_PLATFORMS.forEach(({ id, key }) => {\n // Skip missing values. Empty strings are valid values and should be preserved.\n if (commitData[key] === undefined) {\n return;\n }\n\n packedData.social_links = [{ platform: id, social_link: commitData[key] }];\n delete packedData[key];\n });\n\n if (commitData.language_proficiencies !== undefined) {\n if (commitData.language_proficiencies) {\n packedData.language_proficiencies = [{ code: commitData.language_proficiencies }];\n } else {\n // An empty string should be sent as an array.\n packedData.language_proficiencies = [];\n }\n }\n\n if (commitData.year_of_birth !== undefined) {\n if (commitData.year_of_birth) {\n packedData.year_of_birth = commitData.year_of_birth;\n } else {\n // An empty string should be sent as null.\n packedData.year_of_birth = null;\n }\n }\n return packedData;\n}\n\nexport async function getAccount(username) {\n const { data } = await getAuthenticatedHttpClient()\n .get(`${getConfig().LMS_BASE_URL}/api/user/v1/accounts/${username}`);\n return unpackAccountResponseData(data);\n}\n\nexport async function patchAccount(username, commitValues) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/merge-patch+json' },\n };\n\n const { data } = await getAuthenticatedHttpClient()\n .patch(\n `${getConfig().LMS_BASE_URL}/api/user/v1/accounts/${username}`,\n packAccountCommitData(commitValues),\n requestConfig,\n )\n .catch((error) => {\n const unpackFunction = (fieldErrors) => {\n const unpackedFieldErrors = fieldErrors;\n if (fieldErrors.social_links) {\n SOCIAL_PLATFORMS.forEach(({ key }) => {\n unpackedFieldErrors[key] = fieldErrors.social_links;\n });\n }\n return unpackFieldErrors(unpackedFieldErrors);\n };\n handleRequestError(error, unpackFunction);\n });\n\n return unpackAccountResponseData(data);\n}\n\nexport async function getPreferences(username) {\n const { data } = await getAuthenticatedHttpClient()\n .get(`${getConfig().LMS_BASE_URL}/api/user/v1/preferences/${username}`);\n return data;\n}\n\nexport async function patchPreferences(username, commitValues) {\n const requestConfig = { headers: { 'Content-Type': 'application/merge-patch+json' } };\n const requestUrl = `${getConfig().LMS_BASE_URL}/api/user/v1/preferences/${username}`;\n\n // Ignore the success response, the API does not currently return any data.\n await getAuthenticatedHttpClient()\n .patch(requestUrl, commitValues, requestConfig).catch(handleRequestError);\n\n return commitValues;\n}\n\nexport async function getTimeZones(forCountry) {\n const { data } = await getAuthenticatedHttpClient()\n .get(`${getConfig().LMS_BASE_URL}/user_api/v1/preferences/time_zones/`, {\n params: { country_code: forCountry },\n })\n .catch(handleRequestError);\n\n return data;\n}\n\n/**\n * Determine if the user's profile data is managed by a third-party identity provider.\n */\nexport async function getProfileDataManager(username, userRoles) {\n const userRoleNames = userRoles.map(role => role.split(':')[0]);\n\n if (userRoleNames.includes('enterprise_learner')) {\n const url = `${getConfig().LMS_BASE_URL}/enterprise/api/v1/enterprise-learner/?username=${username}`;\n const { data } = await getAuthenticatedHttpClient().get(url).catch(handleRequestError);\n\n if (data.results.length > 0) {\n const enterprise = data.results[0] && data.results[0].enterprise_customer;\n // To ensure that enterprise returned is current enterprise & it manages profile settings\n if (enterprise && enterprise.sync_learner_profile_data) {\n return enterprise.name;\n }\n }\n }\n\n return null;\n}\n\n/**\n * A function to determine if the Demographics questions should be displayed to the user. For the\n * MVP release of Demographics we are limiting the Demographics question visibility only to\n * MicroBachelors learners.\n */\nexport async function shouldDisplayDemographicsQuestions() {\n const requestUrl = `${getConfig().LMS_BASE_URL}/api/demographics/v1/demographics/status/`;\n let data = {};\n\n try {\n ({ data } = await getAuthenticatedHttpClient().get(requestUrl));\n if (data.display) {\n return data.display;\n }\n } catch (error) {\n // if there was an error then we just hide the section\n return false;\n }\n\n return false;\n}\n\nexport async function getVerifiedName() {\n let data;\n const client = getAuthenticatedHttpClient();\n try {\n const requestUrl = `${getConfig().LMS_BASE_URL}/api/edx_name_affirmation/v1/verified_name`;\n ({ data } = await client.get(requestUrl));\n } catch (error) {\n return {};\n }\n\n return data;\n}\n\nexport async function getVerifiedNameHistory() {\n let data;\n const client = getAuthenticatedHttpClient();\n try {\n const requestUrl = `${getConfig().LMS_BASE_URL}/api/edx_name_affirmation/v1/verified_name/history`;\n ({ data } = await client.get(requestUrl));\n } catch (error) {\n return {};\n }\n\n return data;\n}\n\nexport async function postVerifiedName(data) {\n const requestConfig = { headers: { Accept: 'application/json' } };\n const requestUrl = `${getConfig().LMS_BASE_URL}/api/edx_name_affirmation/v1/verified_name`;\n\n await getAuthenticatedHttpClient()\n .post(requestUrl, data, requestConfig)\n .catch(error => handleRequestError(error));\n}\n\n/**\n * A single function to GET everything considered a setting.\n * Currently encapsulates Account, Preferences, Coaching, ThirdPartyAuth, and Demographics\n */\nexport async function getSettings(username, userRoles, userId) {\n const [\n account,\n preferences,\n thirdPartyAuthProviders,\n profileDataManager,\n timeZones,\n coaching,\n shouldDisplayDemographicsQuestionsResponse,\n demographics,\n demographicsOptions,\n ] = await Promise.all([\n getAccount(username),\n getPreferences(username),\n getThirdPartyAuthProviders(),\n getProfileDataManager(username, userRoles),\n getTimeZones(),\n getConfig().COACHING_ENABLED && getCoachingPreferences(userId),\n getConfig().ENABLE_DEMOGRAPHICS_COLLECTION && shouldDisplayDemographicsQuestions(),\n getConfig().ENABLE_DEMOGRAPHICS_COLLECTION && getDemographics(userId),\n getConfig().ENABLE_DEMOGRAPHICS_COLLECTION && getDemographicsOptions(),\n ]);\n\n return {\n ...account,\n ...preferences,\n thirdPartyAuthProviders,\n profileDataManager,\n timeZones,\n coaching,\n shouldDisplayDemographicsSection: shouldDisplayDemographicsQuestionsResponse,\n ...demographics,\n demographicsOptions,\n };\n}\n\n/**\n * A single function to PATCH everything considered a setting.\n * Currently encapsulates Account, Preferences, coaching and ThirdPartyAuth\n */\nexport async function patchSettings(username, commitValues, userId) {\n // Note: time_zone exists in the return value from user/v1/accounts\n // but it is always null and won't update. It also exists in\n // user/v1/preferences where it does update. This is the one we use.\n const preferenceKeys = ['time_zone'];\n const coachingKeys = ['coaching'];\n const demographicsKeys = DEMOGRAPHICS_FIELDS;\n const certificateKeys = ['useVerifiedNameForCerts'];\n const isDemographicsKey = (value, key) => key.includes('demographics');\n const accountCommitValues = omit(\n commitValues,\n preferenceKeys,\n coachingKeys,\n demographicsKeys,\n certificateKeys,\n );\n const preferenceCommitValues = pick(commitValues, preferenceKeys);\n const coachingCommitValues = pick(commitValues, coachingKeys);\n const demographicsCommitValues = pickBy(commitValues, isDemographicsKey);\n const certCommitValues = pick(commitValues, certificateKeys);\n const patchRequests = [];\n\n if (!isEmpty(accountCommitValues)) {\n patchRequests.push(patchAccount(username, accountCommitValues));\n }\n if (!isEmpty(preferenceCommitValues)) {\n patchRequests.push(patchPreferences(username, preferenceCommitValues));\n }\n if (!isEmpty(coachingCommitValues)) {\n patchRequests.push(patchCoachingPreferences(userId, coachingCommitValues));\n }\n if (!isEmpty(demographicsCommitValues)) {\n patchRequests.push(patchDemographics(userId, demographicsCommitValues));\n }\n if (!isEmpty(certCommitValues)) {\n patchRequests.push(postVerifiedNameConfig(username, certCommitValues));\n }\n\n const results = await Promise.all(patchRequests);\n // Assigns in order of requests. Preference keys\n // will override account keys. Notably time_zone.\n const combinedResults = Object.assign({}, ...results);\n return combinedResults;\n}\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nimport { handleRequestError } from '../../data/utils';\n\n// eslint-disable-next-line import/prefer-default-export\nexport async function postNameChange(name) {\n // Requests a pending name change, rather than saving the account name immediately\n const requestConfig = { headers: { Accept: 'application/json' } };\n const requestUrl = `${getConfig().LMS_BASE_URL}/api/user/v1/accounts/name_change/`;\n\n const { data } = await getAuthenticatedHttpClient()\n .post(requestUrl, { name }, requestConfig)\n .catch(error => handleRequestError(error));\n\n return data;\n}\n","import { put, call, takeEvery } from 'redux-saga/effects';\n\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\n\nimport { postVerifiedName } from '../../data/service';\n\nimport {\n REQUEST_NAME_CHANGE,\n requestNameChangeBegin,\n requestNameChangeSuccess,\n requestNameChangeFailure,\n} from './actions';\nimport { postNameChange } from './service';\n\nexport function* handleRequestNameChange(action) {\n let { name: profileName } = getAuthenticatedUser();\n try {\n yield put(requestNameChangeBegin());\n if (action.payload.profileName) {\n yield call(postNameChange, action.payload.profileName);\n profileName = action.payload.profileName;\n }\n yield call(postVerifiedName, {\n username: action.payload.username,\n verified_name: action.payload.verifiedName,\n profile_name: profileName,\n });\n yield put(requestNameChangeSuccess());\n } catch (err) {\n if (err.customAttributes?.httpErrorResponseData) {\n yield put(requestNameChangeFailure(JSON.parse(err.customAttributes.httpErrorResponseData)));\n } else {\n yield put(requestNameChangeFailure());\n }\n }\n}\n\nexport default function* saga() {\n yield takeEvery(REQUEST_NAME_CHANGE.BASE, handleRequestNameChange);\n}\n","export const YEAR_OF_BIRTH_OPTIONS = (() => {\n const currentYear = new Date().getFullYear();\n const years = [];\n let startYear = currentYear - 120;\n while (startYear < currentYear) {\n startYear += 1;\n\n years.push({ value: startYear, label: startYear });\n }\n return years.reverse();\n})();\n\nexport const EDUCATION_LEVELS = [\n '',\n 'p',\n 'm',\n 'b',\n 'a',\n 'hs',\n 'jhs',\n 'el',\n 'none',\n 'o',\n];\n\nexport const GENDER_OPTIONS = [\n '',\n 'f',\n 'm',\n 'o',\n];\n\nexport const COUNTRY_WITH_STATES = 'US';\n\nexport const TRANSIFEX_LANGUAGE_BASE_URL = 'https://www.transifex.com/open-edx/edx-platform/language/';\n\nconst COUNTRY_STATES_MAP = {\n CA: [\n { value: 'AB', label: 'Alberta' },\n { value: 'BC', label: 'British Columbia' },\n { value: 'MB', label: 'Manitoba' },\n { value: 'NB', label: 'New Brunswick' },\n { value: 'NL', label: 'Newfoundland and Labrador' },\n { value: 'NS', label: 'Nova Scotia' },\n { value: 'NT', label: 'Northwest Territories' },\n { value: 'NU', label: 'Nunavut' },\n { value: 'ON', label: 'Ontario' },\n { value: 'PE', label: 'Prince Edward Island' },\n { value: 'QC', label: 'Québec' },\n { value: 'SK', label: 'Saskatchewan' },\n { value: 'YT', label: 'Yukon' },\n ],\n US: [\n { value: 'AL', label: 'Alabama' },\n { value: 'AK', label: 'Alaska' },\n { value: 'AZ', label: 'Arizona' },\n { value: 'AR', label: 'Arkansas' },\n { value: 'AA', label: 'Armed Forces Americas' },\n { value: 'AE', label: 'Armed Forces Europe' },\n { value: 'AP', label: 'Armed Forces Pacific' },\n { value: 'CA', label: 'California' },\n { value: 'CO', label: 'Colorado' },\n { value: 'CT', label: 'Connecticut' },\n { value: 'DE', label: 'Delaware' },\n { value: 'DC', label: 'District Of Columbia' },\n { value: 'FL', label: 'Florida' },\n { value: 'GA', label: 'Georgia' },\n { value: 'HI', label: 'Hawaii' },\n { value: 'ID', label: 'Idaho' },\n { value: 'IL', label: 'Illinois' },\n { value: 'IN', label: 'Indiana' },\n { value: 'IA', label: 'Iowa' },\n { value: 'KS', label: 'Kansas' },\n { value: 'KY', label: 'Kentucky' },\n { value: 'LA', label: 'Louisiana' },\n { value: 'ME', label: 'Maine' },\n { value: 'MD', label: 'Maryland' },\n { value: 'MA', label: 'Massachusetts' },\n { value: 'MI', label: 'Michigan' },\n { value: 'MN', label: 'Minnesota' },\n { value: 'MS', label: 'Mississippi' },\n { value: 'MO', label: 'Missouri' },\n { value: 'MT', label: 'Montana' },\n { value: 'NE', label: 'Nebraska' },\n { value: 'NV', label: 'Nevada' },\n { value: 'NH', label: 'New Hampshire' },\n { value: 'NJ', label: 'New Jersey' },\n { value: 'NM', label: 'New Mexico' },\n { value: 'NY', label: 'New York' },\n { value: 'NC', label: 'North Carolina' },\n { value: 'ND', label: 'North Dakota' },\n { value: 'OH', label: 'Ohio' },\n { value: 'OK', label: 'Oklahoma' },\n { value: 'OR', label: 'Oregon' },\n { value: 'PA', label: 'Pennsylvania' },\n { value: 'RI', label: 'Rhode Island' },\n { value: 'SC', label: 'South Carolina' },\n { value: 'SD', label: 'South Dakota' },\n { value: 'TN', label: 'Tennessee' },\n { value: 'TX', label: 'Texas' },\n { value: 'UT', label: 'Utah' },\n { value: 'VT', label: 'Vermont' },\n { value: 'VA', label: 'Virginia' },\n { value: 'WA', label: 'Washington' },\n { value: 'WV', label: 'West Virginia' },\n { value: 'WI', label: 'Wisconsin' },\n { value: 'WY', label: 'Wyoming' },\n ],\n};\n\nexport function getStatesList(country) {\n return country && COUNTRY_STATES_MAP[country.toUpperCase()];\n}\n\nexport const DECLINED = 'declined';\nexport const SELF_DESCRIBE = 'self-describe';\nexport const OTHER = 'other';\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { AppContext } from '@edx/frontend-platform/react';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { connect } from 'react-redux';\nimport { Button, Hyperlink } from '@edx/paragon';\n\nimport { betaLanguageBannerSelector } from './data/selectors';\nimport messages from './AccountSettingsPage.messages';\nimport { saveSettings } from './data/actions';\nimport { TRANSIFEX_LANGUAGE_BASE_URL } from './data/constants';\nimport Alert from './Alert';\n\nclass BetaLanguageBanner extends React.Component {\n getSiteLanguageEntry(languageCode) {\n return this.props.siteLanguageList.filter(l => l.code === languageCode)[0];\n }\n\n /**\n * Returns a link to the Transifex URL where contributors can provide translations.\n * This code is tightly coupled to how Transifex chooses to design its URLs.\n */\n getTransifexLink(languageCode) {\n return TRANSIFEX_LANGUAGE_BASE_URL + this.getTransifexURLPath(languageCode);\n }\n\n /**\n * Returns the URL path that Transifex chooses to use for its language sub-pages.\n *\n * For extended language codes, it returns the 2nd half capitalized, replacing\n * hyphen (-) with underscore (_).\n * example: pt-br -> pt_BR\n *\n * For short language codes, it returns the code as is.\n * example: fr -> fr\n */\n getTransifexURLPath(languageCode) {\n const tokenizedCode = languageCode.split('-');\n if (tokenizedCode.length > 1) {\n return `${tokenizedCode[0]}_${tokenizedCode[1].toUpperCase()}`;\n }\n return tokenizedCode[0];\n }\n\n handleRevertLanguage = () => {\n const previousSiteLanguage = this.props.siteLanguage.previousValue;\n this.props.saveSettings('siteLanguage', previousSiteLanguage);\n };\n\n render() {\n const savedLanguage = this.getSiteLanguageEntry(this.context.locale);\n const isSavedLanguageReleased = savedLanguage.released === true;\n const noPreviousLanguageSet = this.props.siteLanguage.previousValue === null;\n if (isSavedLanguageReleased || noPreviousLanguageSet) {\n return null;\n }\n\n const previousLanguage = this.getSiteLanguageEntry(this.props.siteLanguage.previousValue);\n return (\n
    \n \n

    \n {this.props.intl.formatMessage(messages['account.settings.banner.beta.language'], {\n beta_language: savedLanguage.name,\n })}\n

    \n
    \n \n \n {this.props.intl.formatMessage(\n messages['account.settings.banner.beta.language.action.help.translate'],\n { beta_language: savedLanguage.name },\n )}\n \n
    \n
    \n
    \n );\n }\n}\n\nBetaLanguageBanner.contextType = AppContext;\n\nBetaLanguageBanner.propTypes = {\n intl: intlShape.isRequired,\n siteLanguage: PropTypes.shape({\n previousValue: PropTypes.string,\n draft: PropTypes.string,\n }),\n siteLanguageList: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n code: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n released: PropTypes.bool,\n })).isRequired,\n saveSettings: PropTypes.func.isRequired,\n};\n\nBetaLanguageBanner.defaultProps = {\n siteLanguage: null,\n};\n\nexport default connect(\n betaLanguageBannerSelector,\n {\n saveSettings,\n },\n)(injectIntl(BetaLanguageBanner));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { injectIntl, intlShape, FormattedMessage } from '@edx/frontend-platform/i18n';\nimport {\n Button, StatefulButton, Input, ValidationFormGroup,\n} from '@edx/paragon';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faExclamationTriangle, faPencilAlt } from '@fortawesome/free-solid-svg-icons';\n\nimport Alert from './Alert';\nimport SwitchContent from './SwitchContent';\nimport messages from './AccountSettingsPage.messages';\n\nimport {\n openForm,\n closeForm,\n} from './data/actions';\nimport { editableFieldSelector } from './data/selectors';\n\nfunction EmailField(props) {\n const {\n name,\n label,\n emptyLabel,\n value,\n saveState,\n error,\n confirmationMessageDefinition,\n confirmationValue,\n helpText,\n onEdit,\n onCancel,\n onSubmit,\n onChange,\n isEditing,\n isEditable,\n intl,\n } = props;\n const id = `field-${name}`;\n\n const handleSubmit = (e) => {\n e.preventDefault();\n onSubmit(name, new FormData(e.target).get(name));\n };\n\n const handleChange = (e) => {\n onChange(name, e.target.value);\n };\n\n const handleEdit = () => {\n onEdit(name);\n };\n\n const handleCancel = () => {\n onCancel(name);\n };\n\n const renderConfirmationMessage = () => {\n if (!confirmationMessageDefinition || !confirmationValue) {\n return null;\n }\n return (\n }\n >\n
    \n {intl.formatMessage(messages['account.settings.email.field.confirmation.header'])}\n
    \n {intl.formatMessage(confirmationMessageDefinition, { value: confirmationValue })}\n \n );\n };\n\n const renderConfirmationValue = () => (\n \n {confirmationValue}\n \n \n \n \n );\n\n const renderEmptyLabel = () => {\n if (isEditable) {\n return ;\n }\n return {emptyLabel};\n };\n\n const renderValue = () => {\n if (confirmationValue) {\n return renderConfirmationValue();\n }\n return value || renderEmptyLabel();\n };\n\n return (\n \n \n \n \n \n

    \n {\n // Swallow clicks if the state is pending.\n // We do this instead of disabling the button to prevent\n // it from losing focus (disabled elements cannot have focus).\n // Disabling it would causes upstream issues in focus management.\n // Swallowing the onSubmit event on the form would be better, but\n // we would have to add that logic for every field given our\n // current structure of the application.\n if (saveState === 'pending') { e.preventDefault(); }\n }}\n disabledStates={[]}\n />\n \n {intl.formatMessage(messages['account.settings.editable.field.action.cancel'])}\n \n

    \n \n ),\n default: (\n
    \n
    \n
    {label}
    \n {isEditable ? (\n \n ) : null}\n
    \n

    {renderValue()}

    \n {renderConfirmationMessage() ||

    {helpText}

    }\n
    \n ),\n }}\n />\n );\n}\n\nEmailField.propTypes = {\n name: PropTypes.string.isRequired,\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n emptyLabel: PropTypes.node,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n saveState: PropTypes.oneOf(['default', 'pending', 'complete', 'error']),\n error: PropTypes.string,\n confirmationMessageDefinition: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n description: PropTypes.string,\n }),\n confirmationValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n helpText: PropTypes.node,\n onEdit: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n isEditing: PropTypes.bool,\n isEditable: PropTypes.bool,\n intl: intlShape.isRequired,\n};\n\nEmailField.defaultProps = {\n value: undefined,\n saveState: undefined,\n label: undefined,\n emptyLabel: undefined,\n error: undefined,\n confirmationMessageDefinition: undefined,\n confirmationValue: undefined,\n helpText: undefined,\n isEditing: false,\n isEditable: true,\n};\n\nexport default connect(editableFieldSelector, {\n onEdit: openForm,\n onCancel: closeForm,\n})(injectIntl(EmailField));\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Alert } from '@edx/paragon';\n\nexport default function OneTimeDismissibleAlert(props) {\n const [dismissed, setDismissed] = useState(localStorage.getItem(props.id) !== 'true');\n\n const onClose = () => {\n localStorage.setItem(props.id, 'true');\n setDismissed(false);\n };\n\n return (\n \n {props.header}\n

    \n {props.body}\n

    \n \n );\n}\n\nOneTimeDismissibleAlert.propTypes = {\n id: PropTypes.string.isRequired,\n variant: PropTypes.string,\n icon: PropTypes.func,\n header: PropTypes.string,\n body: PropTypes.string,\n};\n\nOneTimeDismissibleAlert.defaultProps = {\n variant: 'success',\n icon: undefined,\n header: undefined,\n body: undefined,\n};\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'account.settings.field.phone_number': {\n id: 'account.settings.field.phone_number',\n defaultMessage: 'Phone Number',\n description: 'The label for a phone numbers setting in the user profile',\n },\n 'account.settings.field.phone_number.empty': {\n id: 'account.settings.field.phone_number.empty',\n defaultMessage: 'Add a phone number',\n description: 'placeholder for a profiles empty phone number field',\n },\n 'account.settings.field.coaching_consent': {\n id: 'account.settings.field.coaching_consent',\n defaultMessage: 'Coaching consent',\n description: 'The label for the coaching consent setting in the user profile',\n },\n 'account.settings.field.coaching_consent.tooltip': {\n id: 'account.settings.field.coaching_consent.tooltip',\n defaultMessage: 'MicroBachelors programs include text message based coaching that helps you pair educational experiences with your career goals through one-on-one advice. Coaching services are included at no additional cost, and are available to learners with U.S. mobile phone numbers. Standard messaging rates apply. Text ‘STOP’ at anytime to opt-out of messages.',\n description: 'A tooltip explaining what coaching is and who it is for',\n },\n 'account.settings.field.coaching_consent.error': {\n id: 'account.settings.field.coaching_consent.error',\n defaultMessage: 'A valid US phone number is required to opt into coaching',\n description: 'An error message that displays when a user attempts to consent to coaching without first providing a phone number in their profile',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { ValidationFormGroup, Input } from '@edx/paragon';\nimport messages from './CoachingToggle.messages';\nimport { editableFieldSelector } from '../data/selectors';\nimport { saveSettings, updateDraft, saveMultipleSettings } from '../data/actions';\nimport EditableField from '../EditableField';\n\nconst CoachingToggle = props => (\n <>\n {\n const { coaching } = props;\n if (coaching.coaching_consent === true) {\n return props.saveMultipleSettings([\n {\n formId: 'coaching',\n commitValues: {\n ...coaching,\n phone_number: props.phone_number,\n },\n },\n {\n formId: 'phone_number',\n commitValues: props.phone_number,\n },\n ], 'phone_number');\n }\n return props.saveSettings('phone_number', props.phone_number);\n }}\n />\n \n {\n const { name } = e.target;\n // eslint-disable-next-line camelcase\n const { user, eligible_for_coaching } = props.coaching;\n const value = {\n user,\n eligible_for_coaching,\n coaching_consent: e.target.checked,\n };\n props.saveSettings(name, value);\n }}\n />\n \n \n \n);\n\nCoachingToggle.defaultProps = {\n phone_number: '',\n error: '',\n saveState: undefined,\n};\n\nCoachingToggle.propTypes = {\n name: PropTypes.string.isRequired,\n error: PropTypes.string,\n coaching: PropTypes.shape({\n coaching_consent: PropTypes.bool.isRequired,\n user: PropTypes.number.isRequired,\n eligible_for_coaching: PropTypes.bool.isRequired,\n }).isRequired,\n saveState: PropTypes.oneOf(['default', 'pending', 'complete', 'error']),\n saveSettings: PropTypes.func.isRequired,\n saveMultipleSettings: PropTypes.func.isRequired,\n updateDraft: PropTypes.func.isRequired,\n intl: intlShape.isRequired,\n phone_number: PropTypes.string,\n};\n\nexport default connect(editableFieldSelector, {\n saveSettings,\n updateDraft,\n saveMultipleSettings,\n})(injectIntl(CoachingToggle));\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { CheckBox } from '@edx/paragon';\nimport { DECLINED } from '../data/constants';\n\nconst Checkboxes = (props) => {\n const {\n id,\n options,\n values,\n onChange,\n } = props;\n\n const [selected, setSelected] = useState(values);\n useEffect(() => {\n onChange(id, selected);\n }, [selected]);\n\n const handleToggle = (value, option) => {\n // If the user checked 'declined', uncheck all other options\n if (value && option === DECLINED) {\n setSelected([DECLINED]);\n return;\n }\n\n // If option checked, make sure this option is in `selected` (and remove 'declined')\n if (value && !selected.includes(option)) {\n const newSelected = selected.filter(i => i !== DECLINED).concat(option);\n setSelected(newSelected);\n }\n\n // If unchecked, make sure this option is NOT in `selected`\n if (!value) {\n setSelected(selected.filter(i => i !== option));\n }\n };\n\n const renderCheckboxes = () => options.map((option, index) => {\n const isFirst = index === 0;\n const isChecked = selected.includes(option.value);\n return (\n
    \n handleToggle(value, option.value)}\n />\n
    \n );\n });\n\n return (\n
    \n {renderCheckboxes()}\n
    \n );\n};\n\nCheckboxes.propTypes = {\n id: PropTypes.string.isRequired,\n options: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.string,\n label: PropTypes.string,\n })),\n values: PropTypes.arrayOf(PropTypes.string),\n onChange: PropTypes.func.isRequired,\n};\n\nCheckboxes.defaultProps = {\n options: [],\n values: [],\n};\n\nexport default Checkboxes;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n /* Demographics section heading */\n 'account.settings.section.demographics.information': {\n id: 'account.settings.section.demographics.information',\n defaultMessage: 'Optional Information',\n description: 'The optional information section heading.',\n },\n /* Gender identity */\n 'account.settings.field.demographics.gender': {\n id: 'account.settings.field.demographics.gender',\n defaultMessage: 'Gender identity',\n description: 'Label for account settings gender identity field.',\n },\n 'account.settings.field.demographics.gender.empty': {\n id: 'account.settings.field.demographics.gender.empty',\n defaultMessage: 'Add gender identity',\n description: 'Placeholder for empty account settings gender identity field.',\n },\n 'account.settings.field.demographics.gender.options.empty': {\n id: 'account.settings.field.demographics.gender.options.empty',\n defaultMessage: 'Select a gender identity',\n description: 'Placeholder for the gender identity options dropdown.',\n },\n 'account.settings.field.demographics.gender_description': {\n id: 'account.settings.field.demographics.gender_description',\n defaultMessage: 'Gender identity description',\n description: 'Label for account settings gender identity description field.',\n },\n 'account.settings.field.demographics.gender_description.empty': {\n id: 'account.settings.field.demographics.gender_description.empty',\n defaultMessage: 'Enter description',\n description: 'Placeholder for empty account settings gender identity field.',\n },\n /* Ethnicity */\n 'account.settings.field.demographics.ethnicity': {\n id: 'account.settings.field.demographics.ethnicity',\n defaultMessage: 'Race/Ethnicity identity',\n description: 'Label for account settings ethnic background field.',\n },\n 'account.settings.field.demographics.ethnicity.empty': {\n id: 'account.settings.field.demographics.ethnicity.empty',\n defaultMessage: 'Add race/ethnicity identity',\n description: 'Placeholder for empty account settings ethnic background field.',\n },\n 'account.settings.field.demographics.ethnicity.options.empty': {\n id: 'account.settings.field.demographics.ethnicity.options.empty',\n defaultMessage: 'Select all that apply', // TODO: Is this the desired text?\n description: 'Placeholder for the ethnic background options field.',\n },\n /* Income */\n 'account.settings.field.demographics.income': {\n id: 'account.settings.field.demographics.income',\n defaultMessage: 'Family income',\n description: 'Label for account settings household income field.',\n },\n 'account.settings.field.demographics.income.empty': {\n id: 'account.settings.field.demographics.income.empty',\n defaultMessage: 'Add family income',\n description: 'Placeholder for empty account settings household income field.',\n },\n 'account.settings.field.demographics.income.options.empty': {\n id: 'account.settings.field.demographics.income.options.empty',\n defaultMessage: 'Select a family income range',\n description: 'Placeholder for the household income dropdown.',\n },\n /* Military history */\n 'account.settings.field.demographics.military_history': {\n id: 'account.settings.field.demographics.military_history',\n defaultMessage: 'U.S. Military status',\n description: 'Label for account settings military history field.',\n },\n 'account.settings.field.demographics.military_history.empty': {\n id: 'account.settings.field.demographics.military_history.empty',\n defaultMessage: 'Add military status',\n description: 'Placeholder for empty account settings military history field.',\n },\n 'account.settings.field.demographics.military_history.options.empty': {\n id: 'account.settings.field.demographics.military_history.options.empty',\n defaultMessage: 'Select military status',\n description: 'Placeholder for the military history dropdown.',\n },\n /* Learner and family education level */\n 'account.settings.field.demographics.learner_education_level': {\n id: 'account.settings.field.demographics.learner_education_level',\n defaultMessage: 'Your education level',\n description: 'Label for account settings learner education level field.',\n },\n 'account.settings.field.demographics.learner_education_level.empty': {\n id: 'account.settings.field.demographics.learner_education_level.empty',\n defaultMessage: 'Add education level',\n description: 'Placeholder for empty account settings learner education level field.',\n },\n 'account.settings.field.demographics.parent_education_level': {\n id: 'account.settings.field.demographics.parent_education_level',\n defaultMessage: 'Parents/Guardians education level',\n description: 'Label for account settings parent education level field.',\n },\n 'account.settings.field.demographics.parent_education_level.empty': {\n id: 'account.settings.field.demographics.parent_education_level.empty',\n defaultMessage: 'Add education level',\n description: 'Placeholder for empty account settings parent education level field.',\n },\n 'account.settings.field.demographics.education_level.options.empty': {\n id: 'account.settings.field.demographics.education_level.options.empty',\n defaultMessage: 'Select education level',\n description: 'Placeholder for the education level options dropdown.',\n },\n /* Work status */\n 'account.settings.field.demographics.work_status': {\n id: 'account.settings.field.demographics.work_status',\n defaultMessage: 'Employment status',\n description: 'Label for account settings work status field.',\n },\n 'account.settings.field.demographics.work_status.empty': {\n id: 'account.settings.field.demographics.work_status.empty',\n defaultMessage: 'Add employment status',\n description: 'Placeholder for empty account settings work status field.',\n },\n 'account.settings.field.demographics.work_status.options.empty': {\n id: 'account.settings.field.demographics.work_status.options.empty',\n defaultMessage: 'Select employment status',\n description: 'Placeholder for the work status options dropdown.',\n },\n 'account.settings.field.demographics.work_status_description': {\n id: 'account.settings.field.demographics.work_status_description',\n defaultMessage: 'Employment status description',\n description: 'Label for account settings work status description field.',\n },\n 'account.settings.field.demographics.work_status_description.empty': {\n id: 'account.settings.field.demographics.work_status_description.empty',\n defaultMessage: 'Enter description',\n description: 'Placeholder for empty account settings work status description field.',\n },\n /* Work sector */\n 'account.settings.field.demographics.current_work_sector': {\n id: 'account.settings.field.demographics.current_work_sector',\n defaultMessage: 'Current work industry',\n description: 'Label for account settings current work sector field.',\n },\n 'account.settings.field.demographics.current_work_sector.empty': {\n id: 'account.settings.field.demographics.current_work_sector.empty',\n defaultMessage: 'Add work industry',\n description: 'Placeholder for empty account settings current work sector field.',\n },\n 'account.settings.field.demographics.future_work_sector': {\n id: 'account.settings.field.demographics.future_work_sector',\n defaultMessage: 'Future work industry',\n description: 'Label for account settings future work sector field.',\n },\n 'account.settings.field.demographics.future_work_sector.empty': {\n id: 'account.settings.field.demographics.future_work_sector.empty',\n defaultMessage: 'Add work industry',\n description: 'Placeholder for empty account settings future work sector field.',\n },\n 'account.settings.field.demographics.work_sector.options.empty': {\n id: 'account.settings.field.demographics.work_sector.options.empty',\n defaultMessage: 'Select work industry',\n description: 'Placeholder for the work sector options dropdown.',\n },\n /* Legal copy link text */\n 'account.settings.section.demographics.why': {\n id: 'account.settings.section.demographics.why',\n defaultMessage: 'Why does {siteName} collect this information?',\n description: 'Link text for a link to external legal text',\n },\n});\n\nexport default messages;\n","import { getConfig } from '@edx/frontend-platform';\nimport {\n FormattedMessage,\n injectIntl,\n intlShape,\n} from '@edx/frontend-platform/i18n';\n\nimport { Hyperlink, Input } from '@edx/paragon';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport get from 'lodash.get';\nimport isEmpty from 'lodash.isempty';\nimport memoize from 'memoize-one';\nimport { demographicsSectionSelector } from '../data/selectors';\nimport EditableField from '../EditableField';\nimport Checkboxes from './Checkboxes';\nimport Alert from '../Alert';\nimport { saveMultipleSettings, updateDraft } from '../data/actions';\nimport {\n OTHER,\n SELF_DESCRIBE,\n} from '../data/constants';\nimport messages from './DemographicsSection.messages';\n\nclass DemographicsSection extends React.Component {\n // We check the `demographicsOptions` prop to see if it is empty before we attempt to extract and\n // format the available options for each question from the API response.\n getApiOptions = memoize((demographicsOptions) => (this.hasRetrievedDemographicsOptions() && {\n demographicsGenderOptions: this.addDefaultOption('account.settings.field.demographics.gender.options.empty')\n .concat(demographicsOptions.actions.POST.gender.choices.map(key => ({\n value: key.value,\n label: key.display_name,\n }))),\n /* Ethnicity options don't need the blank/default option */\n demographicsEthnicityOptions: demographicsOptions.actions.POST.user_ethnicity.child.children.ethnicity.choices.map(\n key => ({\n value: key.value,\n label: key.display_name,\n }),\n ),\n demographicsIncomeOptions: this.addDefaultOption('account.settings.field.demographics.income.options.empty')\n .concat(demographicsOptions.actions.POST.income.choices.map(key => ({\n value: key.value,\n label: key.display_name,\n }))),\n demographicsMilitaryHistoryOptions: this.addDefaultOption('account.settings.field.demographics.military_history.options.empty')\n .concat(demographicsOptions.actions.POST.military_history.choices.map(key => ({\n value: key.value,\n label: key.display_name,\n }))),\n demographicsEducationLevelOptions: this.addDefaultOption('account.settings.field.demographics.education_level.options.empty')\n .concat(demographicsOptions.actions.POST.learner_education_level.choices.map(key => ({\n value: key.value,\n label: key.display_name,\n }))),\n demographicsWorkStatusOptions: this.addDefaultOption('account.settings.field.demographics.work_status.options.empty')\n .concat(demographicsOptions.actions.POST.work_status.choices.map(key => ({\n value: key.value,\n label: key.display_name,\n }))),\n demographicsWorkSectorOptions: this.addDefaultOption('account.settings.field.demographics.work_sector.options.empty')\n .concat(demographicsOptions.actions.POST.current_work_sector.choices.map(key => ({\n value: key.value,\n label: key.display_name,\n }))),\n }));\n\n ethnicityFieldDisplay = (demographicsEthnicityOptions) => {\n let ethnicities = [];\n if (get(this, 'props.formValues.demographics_user_ethnicity')) {\n ethnicities = this.props.formValues.demographics_user_ethnicity;\n }\n return ethnicities.map((e) => {\n const matchingOption = demographicsEthnicityOptions.filter(option => option.value === e)[0];\n return matchingOption && matchingOption.label;\n }).join(', ');\n }\n\n handleEditableFieldChange = (name, value) => {\n this.props.updateDraft(name, value);\n };\n\n handleSubmit = (formId) => {\n // We have some custom fields in this section. Instead of relying on the\n // submitted values, submit the values stored in 'drafts'.\n const { drafts } = this.props;\n const settingsArray = Object.entries(drafts).map(([field, value]) => ({\n formId: field,\n commitValues: value,\n }));\n\n this.props.saveMultipleSettings(settingsArray, formId);\n };\n\n /**\n * Utility method that adds the specified message as a default option to the list of available\n * choices.\n *\n * @param {*} messageId id of message matching desired default label text\n */\n addDefaultOption(messageId) {\n return [{\n value: '',\n label: this.props.intl.formatMessage(messages[messageId]),\n }];\n }\n\n /**\n * Utility method that helps determine if we were able to retrieve the available options for\n * the Demographics questions. Returns true if the `demographicsOptions` prop is _not_ empty,\n * otherwise false. This prop being empty is indicative of a failure communicating with the\n * Demographics IDA's API.\n */\n hasRetrievedDemographicsOptions() {\n return !isEmpty(this.props.formValues.demographicsOptions);\n }\n\n /**\n * If an error is encountered when trying to communicate with the Demographics IDA then we will\n * display an Alert letting the user know that their info will not be displayed and temporarily\n * cannot be updated.\n */\n renderDemographicsServiceIssueWarning() {\n if (!isEmpty(this.props.formErrors.demographicsError)\n || !this.hasRetrievedDemographicsOptions()) {\n return (\n \n \n \n \n \n );\n }\n return null;\n }\n\n render() {\n const editableFieldProps = {\n onChange: this.handleEditableFieldChange,\n onSubmit: this.handleSubmit,\n };\n\n const {\n demographicsGenderOptions,\n demographicsEthnicityOptions,\n demographicsIncomeOptions,\n demographicsMilitaryHistoryOptions,\n demographicsEducationLevelOptions,\n demographicsWorkStatusOptions,\n demographicsWorkSectorOptions,\n } = this.getApiOptions(this.props.formValues.demographicsOptions);\n\n const showSelfDescribe = this.props.formValues.demographics_gender === SELF_DESCRIBE;\n const showWorkStatusDescribe = this.props.formValues.demographics_work_status === OTHER;\n\n return (\n
    \n

    \n {this.props.intl.formatMessage(messages['account.settings.section.demographics.information'])}\n

    \n

    \n \n {this.props.intl.formatMessage(\n messages['account.settings.section.demographics.why'],\n {\n siteName: getConfig().SITE_NAME,\n },\n )}\n \n

    \n {this.renderDemographicsServiceIssueWarning()}\n {/*\n If the demographicsOptions props are empty then there is no need to display the fields as\n the user will not have any choices available to select, nor will they be able to update\n their answers.\n */}\n {this.hasRetrievedDemographicsOptions() && (\n
    \n \n {showSelfDescribe && (\n this.handleEditableFieldChange('demographics_gender_description', e.target.value)}\n aria-label={this.props.intl.formatMessage(messages['account.settings.field.demographics.gender_description'])}\n className=\"mt-1\"\n />\n )}\n \n \n \n \n \n \n \n \n \n {showWorkStatusDescribe && (\n this.handleEditableFieldChange('demographics_work_status_description', e.target.value)}\n aria-label={this.props.intl.formatMessage(messages['account.settings.field.demographics.work_status_description'])}\n className=\"mt-1\"\n />\n )}\n \n \n \n
    \n )}\n
    \n );\n }\n}\n\nDemographicsSection.propTypes = {\n intl: intlShape.isRequired,\n formValues: PropTypes.shape({\n demographics_gender: PropTypes.string,\n demographics_user_ethnicity: PropTypes.array,\n demographics_income: PropTypes.string,\n demographics_military_history: PropTypes.string,\n demographics_learner_education_level: PropTypes.string,\n demographics_parent_education_level: PropTypes.string,\n demographics_work_status: PropTypes.string,\n demographics_current_work_sector: PropTypes.string,\n demographics_future_work_sector: PropTypes.string,\n demographics_work_status_description: PropTypes.string,\n demographics_gender_description: PropTypes.string,\n demographicsOptions: PropTypes.object,\n }).isRequired,\n drafts: PropTypes.shape({\n demographics_gender: PropTypes.string,\n demographics_user_ethnicity: PropTypes.array,\n demographics_income: PropTypes.string,\n demographics_military_history: PropTypes.string,\n demographics_learner_education_level: PropTypes.string,\n demographics_parent_education_level: PropTypes.string,\n demographics_work_status: PropTypes.string,\n demographics_current_work_sector: PropTypes.string,\n demographics_future_work_sector: PropTypes.string,\n demographics_work_status_description: PropTypes.string,\n demographics_gender_description: PropTypes.string,\n demographicsOptions: PropTypes.object,\n }).isRequired,\n formErrors: PropTypes.shape({\n demographicsError: PropTypes.string,\n }).isRequired,\n forwardRef: PropTypes.func.isRequired,\n updateDraft: PropTypes.func.isRequired,\n saveMultipleSettings: PropTypes.func.isRequired,\n};\n\nexport default connect(demographicsSectionSelector, {\n saveMultipleSettings,\n updateDraft,\n})(injectIntl(DemographicsSection));\n","import { AppContext } from '@edx/frontend-platform/react';\nimport { getConfig, history, getQueryParameters } from '@edx/frontend-platform';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport memoize from 'memoize-one';\nimport findIndex from 'lodash.findindex';\nimport { sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport {\n injectIntl,\n intlShape,\n FormattedMessage,\n getCountryList,\n getLanguageList,\n} from '@edx/frontend-platform/i18n';\nimport {\n Button, Hyperlink, Icon, Alert,\n} from '@edx/paragon';\nimport { CheckCircle, Error, WarningFilled } from '@edx/paragon/icons';\n\nimport messages from './AccountSettingsPage.messages';\nimport {\n fetchSettings,\n saveMultipleSettings,\n saveSettings,\n updateDraft,\n beginNameChange,\n} from './data/actions';\nimport { accountSettingsPageSelector } from './data/selectors';\nimport PageLoading from './PageLoading';\nimport JumpNav from './JumpNav';\n// import DeleteAccount from './delete-account';\nimport EditableField from './EditableField';\nimport ResetPassword from './reset-password';\nimport NameChange from './name-change';\nimport ThirdPartyAuth from './third-party-auth';\nimport BetaLanguageBanner from './BetaLanguageBanner';\nimport EmailField from './EmailField';\nimport OneTimeDismissibleAlert from './OneTimeDismissibleAlert';\nimport {\n YEAR_OF_BIRTH_OPTIONS,\n EDUCATION_LEVELS,\n GENDER_OPTIONS,\n COUNTRY_WITH_STATES,\n getStatesList,\n} from './data/constants';\nimport { fetchSiteLanguages } from './site-language';\nimport CoachingToggle from './coaching/CoachingToggle';\nimport DemographicsSection from './demographics/DemographicsSection';\n\nclass AccountSettingsPage extends React.Component {\n constructor(props, context) {\n super(props, context);\n\n // If there is a \"duplicate_provider\" query parameter, that's the backend's\n // way of telling us that the provider account the user tried to link is already linked\n // to another user account on the platform. We use this to display a message to that effect,\n // and remove the parameter from the URL.\n const duplicateTpaProvider = getQueryParameters().duplicate_provider;\n if (duplicateTpaProvider !== undefined) {\n history.replace(history.location.pathname);\n }\n this.state = {\n duplicateTpaProvider,\n };\n\n this.navLinkRefs = {\n '#basic-information': React.createRef(),\n '#profile-information': React.createRef(),\n '#demographics-information': React.createRef(),\n '#social-media': React.createRef(),\n '#site-preferences': React.createRef(),\n '#linked-accounts': React.createRef(),\n // '#delete-account': React.createRef(),\n };\n }\n\n componentDidMount() {\n this.props.fetchSettings();\n this.props.fetchSiteLanguages();\n sendTrackingLogEvent('edx.user.settings.viewed', {\n page: 'account',\n visibility: null,\n user_id: this.context.authenticatedUser.userId,\n });\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.loading && !prevProps.loaded && this.props.loaded) {\n const locationHash = global.location.hash;\n // Check for the locationHash in the URL and then scroll to it if it is in the\n // NavLinks list\n if (typeof locationHash !== 'string') {\n return;\n }\n if (Object.keys(this.navLinkRefs).includes(locationHash) && this.navLinkRefs[locationHash].current) {\n window.scrollTo(0, this.navLinkRefs[locationHash].current.offsetTop);\n }\n }\n }\n\n // NOTE: We need 'locale' for the memoization in getLocalizedTimeZoneOptions. Don't remove it!\n // eslint-disable-next-line no-unused-vars\n getLocalizedTimeZoneOptions = memoize((timeZoneOptions, countryTimeZoneOptions, locale) => {\n const concatTimeZoneOptions = [{\n label: this.props.intl.formatMessage(messages['account.settings.field.time.zone.default']),\n value: '',\n }];\n if (countryTimeZoneOptions.length) {\n concatTimeZoneOptions.push({\n label: this.props.intl.formatMessage(messages['account.settings.field.time.zone.country']),\n group: countryTimeZoneOptions,\n });\n }\n concatTimeZoneOptions.push({\n label: this.props.intl.formatMessage(messages['account.settings.field.time.zone.all']),\n group: timeZoneOptions,\n });\n return concatTimeZoneOptions;\n });\n\n getLocalizedOptions = memoize((locale, country) => ({\n countryOptions: [{\n value: '',\n label: this.props.intl.formatMessage(messages['account.settings.field.country.options.empty']),\n }].concat(getCountryList(locale).map(({ code, name }) => ({ value: code, label: name }))),\n stateOptions: [{\n value: '',\n label: this.props.intl.formatMessage(messages['account.settings.field.state.options.empty']),\n }].concat(getStatesList(country)),\n languageProficiencyOptions: [{\n value: '',\n label: this.props.intl.formatMessage(messages['account.settings.field.language_proficiencies.options.empty']),\n }].concat(getLanguageList(locale).map(({ code, name }) => ({ value: code, label: name }))),\n yearOfBirthOptions: [{\n value: '',\n label: this.props.intl.formatMessage(messages['account.settings.field.year_of_birth.options.empty']),\n }].concat(YEAR_OF_BIRTH_OPTIONS),\n educationLevelOptions: EDUCATION_LEVELS.map(key => ({\n value: key,\n label: this.props.intl.formatMessage(messages[`account.settings.field.education.levels.${key || 'empty'}`]),\n })),\n genderOptions: GENDER_OPTIONS.map(key => ({\n value: key,\n label: this.props.intl.formatMessage(messages[`account.settings.field.gender.options.${key || 'empty'}`]),\n })),\n }));\n\n sortDates = (a, b) => {\n const aTimeSinceEpoch = new Date(a).getTime();\n const bTimeSinceEpoch = new Date(b).getTime();\n\n return bTimeSinceEpoch - aTimeSinceEpoch;\n }\n\n sortVerifiedNameRecords = verifiedNameHistory => {\n if (Array.isArray(verifiedNameHistory)) {\n return [...verifiedNameHistory].sort(this.sortDates);\n }\n\n return [];\n }\n\n handleEditableFieldChange = (name, value) => {\n this.props.updateDraft(name, value);\n }\n\n handleSubmit = (formId, values) => {\n this.props.saveSettings(formId, values);\n }\n\n handleSubmitProfileName = (formId, values) => {\n if (Object.keys(this.props.drafts).includes('useVerifiedNameForCerts')) {\n this.props.saveMultipleSettings([\n {\n formId,\n commitValues: values,\n },\n {\n formId: 'useVerifiedNameForCerts',\n commitValues: this.props.formValues.useVerifiedNameForCerts,\n },\n ], formId);\n } else {\n this.props.saveSettings(formId, values);\n }\n };\n\n handleSubmitVerifiedName = (formId, values) => {\n if (Object.keys(this.props.drafts).includes('useVerifiedNameForCerts')) {\n this.props.saveSettings('useVerifiedNameForCerts', this.props.formValues.useVerifiedNameForCerts);\n }\n if (values !== this.props.committedValues?.verified_name) {\n this.props.beginNameChange(formId);\n } else {\n this.props.saveSettings(formId, values);\n }\n }\n\n isEditable(fieldName) {\n return !this.props.staticFields.includes(fieldName);\n }\n\n isManagedProfile() {\n // Enterprise customer profiles are managed by their organizations. We determine whether\n // a profile is managed or not by the presence of the profileDataManager prop.\n return Boolean(this.props.profileDataManager);\n }\n\n renderDuplicateTpaProviderMessage() {\n if (!this.state.duplicateTpaProvider) {\n return null;\n }\n\n return (\n
    \n \n {this.state.duplicateTpaProvider},\n siteName: getConfig().SITE_NAME,\n }}\n />\n \n
    \n );\n }\n\n renderManagedProfileMessage() {\n if (!this.isManagedProfile()) {\n return null;\n }\n\n return (\n
    \n \n {this.props.profileDataManager},\n support: (\n \n \n \n ),\n }}\n />\n \n
    \n );\n }\n\n renderFullNameHelpText = (status, proctoredExamId) => {\n if (!this.props.verifiedNameHistory) {\n return this.props.intl.formatMessage(messages['account.settings.field.full.name.help.text']);\n }\n\n let messageString = 'account.settings.field.full.name.help.text';\n\n if (status === 'submitted') {\n messageString += '.submitted';\n if (proctoredExamId) {\n messageString += '.proctored';\n }\n } else {\n messageString += '.default';\n }\n\n if (!this.props.committedValues.useVerifiedNameForCerts) {\n messageString += '.certificate';\n }\n\n return this.props.intl.formatMessage(messages[messageString]);\n }\n\n renderVerifiedNameSuccessMessage = (verifiedName, created) => {\n const dateValue = new Date(created).valueOf();\n const id = `dismissedVerifiedNameSuccessMessage-${verifiedName}-${dateValue}`;\n\n return (\n \n );\n }\n\n renderVerifiedNameFailureMessage = (verifiedName, created) => {\n const dateValue = new Date(created).valueOf();\n const id = `dismissedVerifiedNameFailureMessage-${verifiedName}-${dateValue}`;\n\n return (\n \n
    \n {this.props.intl.formatMessage(messages['account.settings.field.name.verified.failure.message'])}\n
    \n
    \n \n {this.props.intl.formatMessage(messages['account.settings.field.name.verified.failure.message.help.link'])}\n {' '}\n
    \n \n )\n }\n />\n );\n }\n\n renderVerifiedNameSubmittedMessage = (willCertNameChange) => (\n \n \n {this.props.intl.formatMessage(messages['account.settings.field.name.verified.submitted.message.header'])}\n \n

    \n {this.props.intl.formatMessage(messages['account.settings.field.name.verified.submitted.message'])}{' '}\n {\n willCertNameChange\n && this.props.intl.formatMessage(messages['account.settings.field.name.verified.submitted.message.certificate'])\n }\n

    \n \n )\n\n renderVerifiedNameMessage = verifiedNameRecord => {\n const {\n created,\n status,\n profile_name: profileName,\n verified_name: verifiedName,\n proctored_exam_attempt_id: proctoredExamId,\n } = verifiedNameRecord;\n let willCertNameChange = false;\n\n if (\n (\n // User submitted a profile name change, and uses their profile name on certificates\n this.props.committedValues.name !== profileName\n && !this.props.committedValues.useVerifiedNameForCerts\n )\n || (\n // User submitted a verified name change, and uses their verified name on certificates\n this.props.committedValues.name === profileName\n && this.props.committedValues.useVerifiedNameForCerts\n )\n ) {\n willCertNameChange = true;\n }\n\n if (proctoredExamId) {\n return null;\n }\n\n switch (status) {\n case 'approved':\n return this.renderVerifiedNameSuccessMessage(verifiedName, created);\n case 'denied':\n return this.renderVerifiedNameFailureMessage(verifiedName, created);\n case 'submitted':\n return this.renderVerifiedNameSubmittedMessage(willCertNameChange);\n default:\n return null;\n }\n }\n\n renderVerifiedNameIcon = (status) => {\n switch (status) {\n case 'approved':\n return ();\n case 'submitted':\n return ();\n default:\n return null;\n }\n }\n\n renderVerifiedNameHelpText = (status, proctoredExamId) => {\n let messageStr = 'account.settings.field.name.verified.help.text';\n\n // add additional string based on status\n if (status === 'approved') {\n messageStr += '.verified';\n } else if (status === 'submitted') {\n messageStr += '.submitted';\n } else {\n return null;\n }\n\n // add additional string if verified name came from a proctored exam attempt\n if (proctoredExamId) {\n messageStr += '.proctored';\n }\n\n // add additional string based on certificate name use\n if (this.props.committedValues.useVerifiedNameForCerts) {\n messageStr += '.certificate';\n }\n\n return this.props.intl.formatMessage(messages[messageStr]);\n }\n\n renderEmptyStaticFieldMessage() {\n if (this.isManagedProfile()) {\n return this.props.intl.formatMessage(messages['account.settings.static.field.empty'], {\n enterprise: this.props.profileDataManager,\n });\n }\n return this.props.intl.formatMessage(messages['account.settings.static.field.empty.no.admin']);\n }\n\n renderNameChangeModal() {\n if (this.props.nameChangeModal && this.props.nameChangeModal.formId) {\n return ;\n }\n return null;\n }\n\n renderSecondaryEmailField(editableFieldProps) {\n if (!this.props.formValues.secondary_email_enabled) {\n return null;\n }\n\n return (\n \n );\n }\n\n renderDemographicsSection() {\n // check the result of an LMS API call to determine if we should render the DemographicsSection component\n if (this.props.formValues.shouldDisplayDemographicsSection) {\n return (\n \n );\n }\n return null;\n }\n\n renderContent() {\n const editableFieldProps = {\n onChange: this.handleEditableFieldChange,\n onSubmit: this.handleSubmit,\n };\n\n // Memoized options lists\n const {\n countryOptions,\n stateOptions,\n languageProficiencyOptions,\n yearOfBirthOptions,\n educationLevelOptions,\n genderOptions,\n } = this.getLocalizedOptions(this.context.locale, this.props.formValues.country);\n\n // Show State field only if the country is US (could include Canada later)\n const showState = this.props.formValues.country === COUNTRY_WITH_STATES;\n\n const { verifiedName } = this.props;\n\n const timeZoneOptions = this.getLocalizedTimeZoneOptions(\n this.props.timeZoneOptions,\n this.props.countryTimeZoneOptions,\n this.context.locale,\n );\n\n const hasLinkedTPA = findIndex(this.props.tpaProviders, provider => provider.connected) >= 0;\n return (\n <>\n
    \n {\n this.props.mostRecentVerifiedName\n && this.renderVerifiedNameMessage(this.props.mostRecentVerifiedName)\n }\n\n

    \n {this.props.intl.formatMessage(messages['account.settings.section.account.information'])}\n

    \n

    {this.props.intl.formatMessage(messages['account.settings.section.account.information.description'])}

    \n {this.renderManagedProfileMessage()}\n\n {this.renderNameChangeModal()}\n\n \n \n {verifiedName\n && (\n \n {this.props.intl.formatMessage(messages['account.settings.field.name.verified'])}\n {\n this.renderVerifiedNameIcon(verifiedName.status)\n }\n
    \n )\n }\n helpText={this.renderVerifiedNameHelpText(verifiedName.status, verifiedName.proctored_exam_attempt_id)}\n isEditable={this.isEditable('verifiedName')}\n isGrayedOut={!this.isEditable('verifiedName')}\n onChange={this.handleEditableFieldChange}\n onSubmit={this.handleSubmitVerifiedName}\n />\n )}\n\n \n {this.renderSecondaryEmailField(editableFieldProps)}\n \n {(!getConfig().ENABLE_COPPA_COMPLIANCE)\n && (\n \n )}\n \n {showState\n && (\n \n )}\n \n\n
    \n

    \n {this.props.intl.formatMessage(messages['account.settings.section.profile.information'])}\n

    \n\n \n \n \n {getConfig().COACHING_ENABLED\n && this.props.formValues.coaching.eligible_for_coaching\n && (\n \n )}\n
    \n {getConfig().ENABLE_DEMOGRAPHICS_COLLECTION && this.renderDemographicsSection()}\n
    \n

    \n {this.props.intl.formatMessage(messages['account.settings.section.social.media'])}\n

    \n

    \n {this.props.intl.formatMessage(\n messages['account.settings.section.social.media.description'],\n { siteName: getConfig().SITE_NAME },\n )}\n

    \n\n \n \n \n
    \n\n
    \n

    \n {this.props.intl.formatMessage(messages['account.settings.section.site.preferences'])}\n

    \n\n \n \n {\n // the endpoint will not accept an empty string. it must be null\n this.handleSubmit(formId, value || null);\n }}\n />\n
    \n\n
    \n

    {this.props.intl.formatMessage(messages['account.settings.section.linked.accounts'])}

    \n

    \n {this.props.intl.formatMessage(\n messages['account.settings.section.linked.accounts.description'],\n { siteName: getConfig().SITE_NAME },\n )}\n

    \n \n
    \n\n {/*
    \n \n
    */}\n\n \n );\n }\n\n renderError() {\n return (\n
    \n {this.props.intl.formatMessage(messages['account.settings.loading.error'], {\n error: this.props.loadingError,\n })}\n
    \n );\n }\n\n renderLoading() {\n return (\n \n );\n }\n\n render() {\n const {\n loading,\n loaded,\n loadingError,\n } = this.props;\n\n return (\n
    \n {this.renderDuplicateTpaProviderMessage()}\n

    \n {this.props.intl.formatMessage(messages['account.settings.page.heading'])}\n

    \n
    \n
    \n
    \n \n
    \n
    \n {loading ? this.renderLoading() : null}\n {loaded ? this.renderContent() : null}\n {loadingError ? this.renderError() : null}\n
    \n
    \n
    \n
    \n );\n }\n}\n\nAccountSettingsPage.contextType = AppContext;\n\nAccountSettingsPage.propTypes = {\n intl: intlShape.isRequired,\n loading: PropTypes.bool,\n loaded: PropTypes.bool,\n loadingError: PropTypes.string,\n\n // Form data\n formValues: PropTypes.shape({\n username: PropTypes.string,\n name: PropTypes.string,\n email: PropTypes.string,\n secondary_email: PropTypes.string,\n secondary_email_enabled: PropTypes.bool,\n year_of_birth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n country: PropTypes.string,\n level_of_education: PropTypes.string,\n gender: PropTypes.string,\n language_proficiencies: PropTypes.string,\n pending_name_change: PropTypes.string,\n phone_number: PropTypes.string,\n social_link_linkedin: PropTypes.string,\n social_link_facebook: PropTypes.string,\n social_link_twitter: PropTypes.string,\n time_zone: PropTypes.string,\n coaching: PropTypes.shape({\n coaching_consent: PropTypes.bool.isRequired,\n user: PropTypes.number.isRequired,\n eligible_for_coaching: PropTypes.bool.isRequired,\n }),\n state: PropTypes.string,\n shouldDisplayDemographicsSection: PropTypes.bool,\n useVerifiedNameForCerts: PropTypes.bool.isRequired,\n verified_name: PropTypes.string,\n }).isRequired,\n committedValues: PropTypes.shape({\n name: PropTypes.string,\n useVerifiedNameForCerts: PropTypes.bool,\n verified_name: PropTypes.string,\n }),\n drafts: PropTypes.shape({}),\n formErrors: PropTypes.shape({\n name: PropTypes.string,\n }),\n siteLanguage: PropTypes.shape({\n previousValue: PropTypes.string,\n draft: PropTypes.string,\n }),\n siteLanguageOptions: PropTypes.arrayOf(PropTypes.shape({\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n })),\n profileDataManager: PropTypes.string,\n staticFields: PropTypes.arrayOf(PropTypes.string),\n isActive: PropTypes.bool,\n secondary_email_enabled: PropTypes.bool,\n\n timeZoneOptions: PropTypes.arrayOf(PropTypes.shape({\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n })),\n countryTimeZoneOptions: PropTypes.arrayOf(PropTypes.shape({\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n })),\n fetchSiteLanguages: PropTypes.func.isRequired,\n updateDraft: PropTypes.func.isRequired,\n saveMultipleSettings: PropTypes.func.isRequired,\n saveSettings: PropTypes.func.isRequired,\n fetchSettings: PropTypes.func.isRequired,\n beginNameChange: PropTypes.func.isRequired,\n tpaProviders: PropTypes.arrayOf(PropTypes.shape({\n connected: PropTypes.bool,\n })),\n nameChangeModal: PropTypes.shape({\n formId: PropTypes.string,\n }),\n verifiedName: PropTypes.shape({\n verified_name: PropTypes.string,\n status: PropTypes.string,\n proctored_exam_attempt_id: PropTypes.number,\n }),\n mostRecentVerifiedName: PropTypes.shape({\n verified_name: PropTypes.string,\n status: PropTypes.string,\n proctored_exam_attempt_id: PropTypes.number,\n }),\n verifiedNameHistory: PropTypes.arrayOf(\n PropTypes.shape({\n verified_name: PropTypes.string,\n status: PropTypes.string,\n proctored_exam_attempt_id: PropTypes.number,\n }),\n ),\n};\n\nAccountSettingsPage.defaultProps = {\n loading: false,\n loaded: false,\n loadingError: null,\n committedValues: {\n useVerifiedNameForCerts: false,\n verified_name: null,\n },\n drafts: {},\n formErrors: {},\n siteLanguage: null,\n siteLanguageOptions: [],\n timeZoneOptions: [],\n countryTimeZoneOptions: [],\n profileDataManager: null,\n staticFields: [],\n tpaProviders: [],\n isActive: true,\n secondary_email_enabled: false,\n nameChangeModal: {},\n verifiedName: null,\n mostRecentVerifiedName: {},\n verifiedNameHistory: [],\n};\n\nexport default connect(accountSettingsPageSelector, {\n fetchSettings,\n saveSettings,\n saveMultipleSettings,\n updateDraft,\n fetchSiteLanguages,\n beginNameChange,\n})(injectIntl(AccountSettingsPage));\n","import { AsyncActionType } from '../../data/utils';\n\nexport const DELETE_ACCOUNT = new AsyncActionType('ACCOUNT_SETTINGS', 'DELETE_ACCOUNT');\nDELETE_ACCOUNT.CONFIRMATION = 'ACCOUNT_SETTINGS__DELETE_ACCOUNT__CONFIRMATION';\nDELETE_ACCOUNT.CANCEL = 'ACCOUNT_SETTINGS__DELETE_ACCOUNT__CANCEL';\n\nexport const deleteAccount = password => ({\n type: DELETE_ACCOUNT.BASE,\n payload: { password },\n});\n\nexport const deleteAccountConfirmation = () => ({\n type: DELETE_ACCOUNT.CONFIRMATION,\n});\n\nexport const deleteAccountBegin = () => ({\n type: DELETE_ACCOUNT.BEGIN,\n});\n\nexport const deleteAccountSuccess = () => ({\n type: DELETE_ACCOUNT.SUCCESS,\n});\n\nexport const deleteAccountFailure = reason => ({\n type: DELETE_ACCOUNT.FAILURE,\n payload: { reason },\n});\n\n// to clear errors from the confirmation modal\nexport const deleteAccountReset = () => ({\n type: DELETE_ACCOUNT.RESET,\n});\n\n// to close the modal\nexport const deleteAccountCancel = () => ({\n type: DELETE_ACCOUNT.CANCEL,\n});\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'account.settings.delete.account.header': {\n id: 'account.settings.delete.account.header',\n defaultMessage: 'Delete My Account',\n description: 'Header for the user account deletion area',\n },\n 'account.settings.delete.account.subheader': {\n id: 'account.settings.delete.account.subheader',\n defaultMessage: 'We\\'re sorry to see you go!',\n description: 'A message in the user account deletion area',\n },\n 'account.settings.delete.account.text.1': {\n id: 'account.settings.delete.account.text.1',\n defaultMessage: 'Please note: Deletion of your account and personal data is permanent and cannot be undone. {siteName} will not be able to recover your account or the data that is deleted.',\n description: 'A message in the user account deletion area',\n },\n 'account.settings.delete.account.text.2': {\n id: 'account.settings.delete.account.text.2',\n defaultMessage: 'Once your account is deleted, you cannot use it to take courses on {siteName}.',\n description: 'A message in the user account deletion area',\n },\n 'account.settings.delete.account.text.2.edX': {\n id: 'account.settings.delete.account.text.2.edX',\n defaultMessage: 'Once your account is deleted, you cannot use it to take courses on the edX app, edx.org, or any other site hosted by edX. This includes access to edx.org from your employer’s or university’s system and access to private sites offered by MIT Open Learning, Wharton Executive Education, and Harvard Medical School.',\n description: 'A message in the user account deletion area',\n },\n 'account.settings.delete.account.text.3.link': {\n id: 'account.settings.delete.account.text.3.link',\n defaultMessage: 'Follow these instructions for printing or downloading a certificate',\n description: 'This text is a link to a technical support page where users can learn how to print or download their certificates.',\n },\n 'account.settings.delete.account.text.warning': {\n id: 'account.settings.delete.account.text.warning',\n defaultMessage: 'Warning: Account deletion is permanent. Please read the above carefully before proceeding. This is an irreversible action, and you will no longer be able to use the same email on {siteName}.',\n description: 'A message in the user account deletion area',\n },\n 'account.settings.delete.account.text.change.instead': {\n id: 'account.settings.delete.account.text.change.instead',\n defaultMessage: 'Want to change your email, name, or password instead?',\n description: 'A message in the user account deletion area',\n },\n 'account.settings.delete.account.button': {\n id: 'account.settings.delete.account.button',\n defaultMessage: 'Delete My Account',\n description: 'Button label to permanently delete your platform account',\n },\n 'account.settings.delete.account.please.activate': {\n id: 'account.settings.delete.account.please.activate',\n defaultMessage: 'activate your account',\n description: 'This is the text on a link that goes to the support page. It is part of this sentence: Before proceeding, please activate your account.',\n },\n 'account.settings.delete.account.please.confirm': {\n id: 'account.settings.delete.account.please.confirm',\n defaultMessage: 'confirm your account',\n description: 'This is the text on a link that goes to the support page. It is part of this sentence: Before proceeding, please confirm your account.',\n },\n 'account.settings.delete.account.please.unlink': {\n id: 'account.settings.delete.account.please.unlink',\n defaultMessage: 'unlink all social media accounts',\n description: 'This is the text on a link that goes to the support page. It is part of this sentence: Before proceeding, please unlink all social media accounts.',\n },\n 'account.settings.delete.account.modal.header': {\n id: 'account.settings.delete.account.modal.header',\n defaultMessage: 'Are you sure?',\n description: 'Title of the dialog asking user to confirm that they want to delete their entire account',\n },\n 'account.settings.delete.account.modal.text.1': {\n id: 'account.settings.delete.account.modal.text.1',\n defaultMessage: 'You have selected \"Delete My Account\". Deletion of your account and personal data is permanent and cannot be undone. {siteName} will not be able to recover your account or the data that is deleted.',\n description: 'Messaging in the dialog asking user to confirm that they want to delete their entire account',\n },\n 'account.settings.delete.account.modal.text.2': {\n id: 'account.settings.delete.account.modal.text.2',\n defaultMessage: 'If you proceed, you will be unable to use this account to take courses on {siteName}.',\n description: 'Messaging in the dialog asking user to confirm that they want to delete their entire account',\n },\n 'account.settings.delete.account.modal.text.2.edX': {\n id: 'account.settings.delete.account.modal.text.2.edX',\n defaultMessage: 'If you proceed, you will be unable to use this account to take courses on the edX app, edx.org, or any other site hosted by edX. This includes access to edx.org from your employer\\'s or university\\'s system and access to private sites offered by MIT Open Learning, Wharton Executive Education, and Harvard Medical School.',\n description: 'Messaging in the dialog asking user to confirm that they want to delete their entire account',\n },\n 'account.settings.delete.account.modal.enter.password': {\n id: 'account.settings.delete.account.modal.enter.password',\n defaultMessage: 'If you still wish to continue and delete your account, please enter your account password:',\n description: 'Asking for the user\\'s account password',\n },\n 'account.settings.delete.account.modal.confirm.delete': {\n id: 'account.settings.delete.account.modal.confirm.delete',\n defaultMessage: 'Yes, Delete',\n description: 'Button label for user to confirm it is okay to delete their account',\n },\n 'account.settings.delete.account.modal.confirm.cancel': {\n id: 'account.settings.delete.account.modal.confirm.cancel',\n defaultMessage: 'Cancel',\n description: 'The cancel button on the delete my account modal confirmation',\n },\n 'account.settings.delete.account.error.unable.to.delete': {\n id: 'account.settings.delete.account.error.unable.to.delete',\n defaultMessage: 'Unable to delete account',\n description: 'Error message when account deletion failed',\n },\n 'account.settings.delete.account.error.no.password': {\n id: 'account.settings.delete.account.error.no.password',\n defaultMessage: 'A password is required',\n description: 'Error message when user has not entered their password',\n },\n 'account.settings.delete.account.error.invalid.password': {\n id: 'account.settings.delete.account.error.invalid.password',\n defaultMessage: 'Password is incorrect',\n description: 'Error message when user has entered incorrect password',\n },\n 'account.settings.delete.account.error.unable.to.delete.details': {\n id: 'account.settings.delete.account.error.unable.to.delete.details',\n defaultMessage: 'Sorry, there was an error trying to process your request. Please try again later.',\n description: 'Error message when account deletion failed',\n },\n 'account.settings.delete.account.modal.after.header': {\n id: 'account.settings.delete.account.modal.after.header',\n defaultMessage: 'We\\'re sorry to see you go! Your account will be deleted shortly.',\n description: 'Title displayed after user account is deleted',\n },\n 'account.settings.delete.account.modal.after.text': {\n id: 'account.settings.delete.account.modal.after.text',\n defaultMessage: 'Account deletion, including removal from email lists, may take a few weeks to fully process through our system. If you want to opt-out of emails before then, please unsubscribe from the footer of any email.',\n description: 'Text displayed after user account is deleted',\n },\n 'account.settings.delete.account.modal.after.button': {\n id: 'account.settings.delete.account.modal.after.button',\n defaultMessage: 'Close',\n description: 'Label on button to close a dialog',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Hyperlink } from '@edx/paragon';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport messages from './messages';\n\nconst PrintingInstructions = (props) => {\n const actionLink = (\n \n {props.intl.formatMessage(messages['account.settings.delete.account.text.3.link'])}\n \n );\n\n // TODO: We lack a good way of providing custom language for a particular site. This is a hack\n // to allow edx.org to mention MicroMasters certificates to fulfill its business requirements.\n if (getConfig().SITE_NAME === 'edX') {\n return (\n \n );\n }\n\n return (\n \n );\n};\n\nPrintingInstructions.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(PrintingInstructions);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Button, Input, Modal, ValidationFormGroup,\n} from '@edx/paragon';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { faExclamationCircle, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport messages from './messages';\nimport Alert from '../Alert';\nimport PrintingInstructions from './PrintingInstructions';\n\nexport class ConfirmationModal extends Component {\n /**\n * @returns String The message id for a short description of the error, suitable for a header or\n * as the error message under an input field.\n */\n getShortErrorMessageId(reason) {\n switch (reason) {\n case 'empty-password':\n return 'account.settings.delete.account.error.no.password';\n case 'invalid-password':\n return 'account.settings.delete.account.error.invalid.password';\n default:\n return 'account.settings.delete.account.error.unable.to.delete';\n }\n }\n\n renderError(reason) {\n const { errorType, intl } = this.props;\n\n if (errorType === null) {\n return null;\n }\n const headerMessageId = this.getShortErrorMessageId(errorType);\n const detailsMessageId = reason === 'empty-password'\n ? null\n : 'account.settings.delete.account.error.unable.to.delete.details';\n\n return (\n }\n >\n
    {intl.formatMessage(messages[headerMessageId])}
    \n {detailsMessageId ? (\n

    {intl.formatMessage(messages[detailsMessageId])}

    \n ) : null}\n \n );\n }\n\n render() {\n const {\n status,\n errorType,\n intl,\n onCancel,\n onChange,\n onSubmit,\n password,\n } = this.props;\n const open = ['confirming', 'pending', 'failed'].includes(status);\n const passwordFieldId = 'passwordFieldId';\n const invalidMessage = messages[this.getShortErrorMessageId(errorType)];\n\n // TODO: We lack a good way of providing custom language for a particular site. This is a hack\n // to allow edx.org to fulfill its business requirements.\n const deleteAccountModalText2MessageKey = getConfig().SITE_NAME === 'edX'\n ? 'account.settings.delete.account.modal.text.2.edX'\n : 'account.settings.delete.account.modal.text.2';\n\n return (\n \n {this.renderError()}\n }\n >\n
    \n {intl.formatMessage(\n messages['account.settings.delete.account.modal.text.1'],\n { siteName: getConfig().SITE_NAME },\n )}\n
    \n

    \n {intl.formatMessage(\n messages[deleteAccountModalText2MessageKey],\n { siteName: getConfig().SITE_NAME },\n )}\n

    \n

    \n \n

    \n \n \n \n \n \n \n )}\n buttons={[\n ,\n ]}\n closeText={intl.formatMessage(messages['account.settings.delete.account.modal.confirm.cancel'])}\n renderHeaderCloseButton={false}\n onClose={onCancel}\n />\n );\n }\n}\n\nConfirmationModal.propTypes = {\n status: PropTypes.oneOf(['confirming', 'pending', 'deleted', 'failed']),\n errorType: PropTypes.oneOf(['empty-password', 'server']),\n intl: intlShape.isRequired,\n onCancel: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n password: PropTypes.string.isRequired,\n};\n\nConfirmationModal.defaultProps = {\n status: null,\n errorType: null,\n};\n\nexport default injectIntl(ConfirmationModal);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Modal } from '@edx/paragon';\n\nimport messages from './messages';\n\nexport const SuccessModal = (props) => {\n const { status, intl, onClose } = props;\n return (\n \n

    \n {intl.formatMessage(messages['account.settings.delete.account.modal.after.text'])}\n

    \n \n )}\n closeText={intl.formatMessage(messages['account.settings.delete.account.modal.after.button'])}\n renderHeaderCloseButton={false}\n onClose={onClose}\n />\n );\n};\n\nSuccessModal.propTypes = {\n status: PropTypes.oneOf(['confirming', 'pending', 'deleted', 'failed']),\n intl: intlShape.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nSuccessModal.defaultProps = {\n status: null,\n};\n\nexport default injectIntl(SuccessModal);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Hyperlink } from '@edx/paragon';\n\n// Messages\nimport { getConfig } from '@edx/frontend-platform';\nimport messages from './messages';\n\n// Components\nimport Alert from '../Alert';\n\nconst BeforeProceedingBanner = (props) => {\n const { instructionMessageId, intl, supportArticleUrl } = props;\n\n return (\n }\n >\n \n {intl.formatMessage(messages[instructionMessageId])}\n \n ),\n siteName: getConfig().SITE_NAME,\n }}\n />\n \n );\n};\n\nBeforeProceedingBanner.propTypes = {\n instructionMessageId: PropTypes.string.isRequired,\n intl: intlShape.isRequired,\n supportArticleUrl: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(BeforeProceedingBanner);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button, Hyperlink } from '@edx/paragon';\n\n// Actions\nimport {\n deleteAccount,\n deleteAccountConfirmation,\n deleteAccountFailure,\n deleteAccountReset,\n deleteAccountCancel,\n} from './data/actions';\n\n// Messages\nimport messages from './messages';\n\n// Components\nimport ConnectedConfirmationModal from './ConfirmationModal';\nimport PrintingInstructions from './PrintingInstructions';\nimport ConnectedSuccessModal from './SuccessModal';\nimport BeforeProceedingBanner from './BeforeProceedingBanner';\n\nexport class DeleteAccount extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n password: '',\n };\n }\n\n handleSubmit = () => {\n if (this.state.password === '') {\n this.props.deleteAccountFailure('empty-password');\n } else {\n this.props.deleteAccount(this.state.password);\n }\n };\n\n handleCancel = () => {\n this.setState({ password: '' });\n this.props.deleteAccountCancel();\n };\n\n handlePasswordChange = (e) => {\n this.setState({ password: e.target.value.trim() });\n this.props.deleteAccountReset();\n };\n\n handleFinalClose = () => {\n global.location = getConfig().LOGOUT_URL;\n };\n\n render() {\n const {\n hasLinkedTPA, isVerifiedAccount, status, errorType, intl,\n } = this.props;\n const canDelete = isVerifiedAccount && !hasLinkedTPA;\n\n // TODO: We lack a good way of providing custom language for a particular site. This is a hack\n // to allow edx.org to fulfill its business requirements.\n const deleteAccountText2MessageKey = getConfig().SITE_NAME === 'edX'\n ? 'account.settings.delete.account.text.2.edX'\n : 'account.settings.delete.account.text.2';\n\n const optInInstructionMessageId = getConfig().MARKETING_EMAILS_OPT_IN\n ? 'account.settings.delete.account.please.confirm'\n : 'account.settings.delete.account.please.activate';\n\n return (\n
    \n

    \n {intl.formatMessage(messages['account.settings.delete.account.header'])}\n

    \n

    {intl.formatMessage(messages['account.settings.delete.account.subheader'])}

    \n

    \n {intl.formatMessage(\n messages['account.settings.delete.account.text.1'],\n { siteName: getConfig().SITE_NAME },\n )}\n

    \n

    \n {intl.formatMessage(\n messages[deleteAccountText2MessageKey],\n { siteName: getConfig().SITE_NAME },\n )}\n

    \n

    \n \n

    \n

    \n {intl.formatMessage(messages['account.settings.delete.account.text.warning'],\n { siteName: getConfig().SITE_NAME })}\n

    \n

    \n \n {intl.formatMessage(messages['account.settings.delete.account.text.change.instead'])}\n \n

    \n

    \n \n {intl.formatMessage(messages['account.settings.delete.account.button'])}\n \n

    \n\n {isVerifiedAccount ? null : (\n \n )}\n\n {hasLinkedTPA ? (\n \n ) : null}\n\n \n\n \n
    \n );\n }\n}\n\nDeleteAccount.propTypes = {\n deleteAccount: PropTypes.func.isRequired,\n deleteAccountConfirmation: PropTypes.func.isRequired,\n deleteAccountFailure: PropTypes.func.isRequired,\n deleteAccountReset: PropTypes.func.isRequired,\n deleteAccountCancel: PropTypes.func.isRequired,\n status: PropTypes.oneOf(['confirming', 'pending', 'deleted', 'failed']),\n errorType: PropTypes.oneOf(['empty-password', 'server']),\n hasLinkedTPA: PropTypes.bool,\n isVerifiedAccount: PropTypes.bool,\n intl: intlShape.isRequired,\n};\n\nDeleteAccount.defaultProps = {\n hasLinkedTPA: false,\n isVerifiedAccount: true,\n status: null,\n errorType: null,\n};\n\n// Assume we're part of the accountSettings state.\nconst mapStateToProps = state => state.accountSettings.deleteAccount;\n\nexport default connect(\n mapStateToProps,\n {\n deleteAccount,\n deleteAccountConfirmation,\n deleteAccountFailure,\n deleteAccountReset,\n deleteAccountCancel,\n },\n)(injectIntl(DeleteAccount));\n","import { DELETE_ACCOUNT } from './actions';\n\nexport const defaultState = {\n status: null,\n errorType: null,\n};\n\nconst reducer = (state = defaultState, action = null) => {\n if (action !== null) {\n switch (action.type) {\n case DELETE_ACCOUNT.CONFIRMATION:\n return {\n ...state,\n status: 'confirming',\n };\n\n case DELETE_ACCOUNT.BEGIN:\n return {\n ...state,\n status: 'pending',\n };\n\n case DELETE_ACCOUNT.SUCCESS:\n return {\n ...state,\n status: 'deleted',\n };\n\n case DELETE_ACCOUNT.FAILURE:\n return {\n ...state,\n status: 'failed',\n errorType: action.payload.reason || 'server',\n };\n\n case DELETE_ACCOUNT.RESET: {\n const oldStatus = state.status;\n\n return {\n ...state,\n // clear the error state if applicable, otherwise don't change state\n status: oldStatus === 'failed' ? 'confirming' : oldStatus,\n errorType: null,\n };\n }\n\n case DELETE_ACCOUNT.CANCEL:\n return {\n ...state,\n status: null,\n errorType: null,\n };\n\n default:\n }\n }\n return state;\n};\n\nexport default reducer;\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport formurlencoded from 'form-urlencoded';\nimport { handleRequestError } from '../../data/utils';\n\n/**\n * Request deletion of the user's account.\n */\n// eslint-disable-next-line import/prefer-default-export\nexport async function postDeleteAccount(password) {\n const { data } = await getAuthenticatedHttpClient()\n .post(\n `${getConfig().LMS_BASE_URL}/api/user/v1/accounts/deactivate_logout/`,\n formurlencoded({ password }),\n {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n },\n )\n .catch(handleRequestError);\n return data;\n}\n","import { put, call, takeEvery } from 'redux-saga/effects';\n\nimport {\n DELETE_ACCOUNT,\n deleteAccountBegin,\n deleteAccountSuccess,\n deleteAccountFailure,\n} from './actions';\n\nimport { postDeleteAccount } from './service';\n\nexport function* handleDeleteAccount(action) {\n try {\n yield put(deleteAccountBegin());\n const response = yield call(postDeleteAccount, action.payload.password);\n yield put(deleteAccountSuccess(response));\n } catch (e) {\n if (e.response.status === 403) {\n yield put(deleteAccountFailure('invalid-password'));\n } else if (typeof e.response.data === 'string') {\n yield put(deleteAccountFailure());\n } else {\n throw e;\n }\n }\n}\n\nexport default function* saga() {\n yield takeEvery(DELETE_ACCOUNT.BASE, handleDeleteAccount);\n}\n","import {\n FETCH_SETTINGS,\n OPEN_FORM,\n CLOSE_FORM,\n SAVE_SETTINGS,\n FETCH_TIME_ZONES,\n SAVE_PREVIOUS_SITE_LANGUAGE,\n UPDATE_DRAFT,\n RESET_DRAFTS,\n SAVE_MULTIPLE_SETTINGS,\n BEGIN_NAME_CHANGE,\n} from './actions';\n\nimport { reducer as deleteAccountReducer, DELETE_ACCOUNT } from '../delete-account';\nimport { reducer as siteLanguageReducer, FETCH_SITE_LANGUAGES } from '../site-language';\nimport { reducer as resetPasswordReducer, RESET_PASSWORD } from '../reset-password';\nimport { reducer as nameChangeReducer, REQUEST_NAME_CHANGE } from '../name-change';\nimport { reducer as thirdPartyAuthReducer, DISCONNECT_AUTH } from '../third-party-auth';\n\nexport const defaultState = {\n loading: false,\n loaded: false,\n loadingError: null,\n data: null,\n values: {},\n errors: {},\n confirmationValues: {},\n drafts: {},\n saveState: null,\n timeZones: [],\n countryTimeZones: [],\n previousSiteLanguage: null,\n deleteAccount: deleteAccountReducer(),\n siteLanguage: siteLanguageReducer(),\n resetPassword: resetPasswordReducer(),\n nameChange: nameChangeReducer(),\n thirdPartyAuth: thirdPartyAuthReducer(),\n nameChangeModal: false,\n verifiedName: null,\n mostRecentVerifiedName: {},\n verifiedNameHistory: {},\n};\n\nconst reducer = (state = defaultState, action) => {\n let dispatcherIsOpenForm;\n\n switch (action.type) {\n case FETCH_SETTINGS.BEGIN:\n return {\n ...state,\n loading: true,\n loaded: false,\n loadingError: null,\n };\n case FETCH_SETTINGS.SUCCESS:\n return {\n ...state,\n values: { ...state.values, ...action.payload.values },\n // Dump the providers into thirdPartyAuth.\n thirdPartyAuth: { ...state.thirdPartyAuth, providers: action.payload.thirdPartyAuthProviders },\n profileDataManager: action.payload.profileDataManager,\n timeZones: action.payload.timeZones,\n loading: false,\n loaded: true,\n loadingError: null,\n verifiedNameHistory: action.payload.verifiedNameHistory,\n };\n case FETCH_SETTINGS.FAILURE:\n return {\n ...state,\n loading: false,\n loaded: false,\n loadingError: action.payload.error,\n };\n case FETCH_SETTINGS.RESET:\n return {\n ...state,\n loading: false,\n loaded: false,\n loadingError: null,\n };\n\n case OPEN_FORM:\n return {\n ...state,\n openFormId: action.payload.formId,\n saveState: null,\n errors: {},\n drafts: {},\n };\n case CLOSE_FORM:\n dispatcherIsOpenForm = action.payload.formId === state.openFormId;\n if (dispatcherIsOpenForm) {\n return {\n ...state,\n openFormId: null,\n saveState: null,\n errors: {},\n drafts: {},\n nameChangeModal: false,\n };\n }\n return state;\n case UPDATE_DRAFT:\n return {\n ...state,\n drafts: { ...state.drafts, [action.payload.name]: action.payload.value },\n saveState: null,\n errors: {},\n };\n\n case RESET_DRAFTS:\n return {\n ...state,\n drafts: {},\n };\n\n case BEGIN_NAME_CHANGE:\n return {\n ...state,\n saveState: 'error',\n nameChangeModal: {\n formId: action.payload.formId,\n },\n };\n\n case SAVE_SETTINGS.BEGIN:\n return {\n ...state,\n saveState: 'pending',\n errors: {},\n };\n case SAVE_SETTINGS.SUCCESS:\n return {\n ...state,\n saveState: 'complete',\n values: { ...state.values, ...action.payload.values },\n errors: {},\n confirmationValues: {\n ...state.confirmationValues,\n ...action.payload.confirmationValues,\n },\n };\n case SAVE_SETTINGS.FAILURE:\n return {\n ...state,\n saveState: 'error',\n errors: { ...state.errors, ...action.payload.errors },\n };\n case SAVE_SETTINGS.RESET:\n return {\n ...state,\n saveState: null,\n errors: {},\n };\n case SAVE_PREVIOUS_SITE_LANGUAGE:\n return {\n ...state,\n previousSiteLanguage: action.payload.previousSiteLanguage,\n };\n case SAVE_MULTIPLE_SETTINGS.BEGIN:\n return {\n ...state,\n saveState: 'pending',\n };\n\n case SAVE_MULTIPLE_SETTINGS.SUCCESS:\n return {\n ...state,\n saveState: 'complete',\n };\n\n case SAVE_MULTIPLE_SETTINGS.FAILURE:\n return {\n ...state,\n saveState: 'error',\n errors: { ...state.errors, ...action.payload.errors },\n };\n\n case FETCH_TIME_ZONES.SUCCESS:\n return {\n ...state,\n countryTimeZones: action.payload.timeZones,\n };\n\n // TODO: Once all the above cases have been converted into sub-reducers, we can use\n // combineReducers in this file to greatly simplify it.\n\n // Delete My Account\n case DELETE_ACCOUNT.CONFIRMATION:\n case DELETE_ACCOUNT.BEGIN:\n case DELETE_ACCOUNT.SUCCESS:\n case DELETE_ACCOUNT.FAILURE:\n case DELETE_ACCOUNT.RESET:\n case DELETE_ACCOUNT.CANCEL:\n return {\n ...state,\n deleteAccount: deleteAccountReducer(state.deleteAccount, action),\n };\n\n case FETCH_SITE_LANGUAGES.BEGIN:\n case FETCH_SITE_LANGUAGES.SUCCESS:\n case FETCH_SITE_LANGUAGES.FAILURE:\n case FETCH_SITE_LANGUAGES.RESET:\n return {\n ...state,\n siteLanguage: siteLanguageReducer(state.siteLanguage, action),\n };\n\n case RESET_PASSWORD.BEGIN:\n case RESET_PASSWORD.SUCCESS:\n case RESET_PASSWORD.FORBIDDEN:\n return {\n ...state,\n resetPassword: resetPasswordReducer(state.resetPassword, action),\n };\n\n case REQUEST_NAME_CHANGE.BEGIN:\n case REQUEST_NAME_CHANGE.SUCCESS:\n case REQUEST_NAME_CHANGE.FAILURE:\n case REQUEST_NAME_CHANGE.RESET:\n return {\n ...state,\n nameChange: nameChangeReducer(state.nameChange, action),\n };\n\n case DISCONNECT_AUTH.BEGIN:\n case DISCONNECT_AUTH.SUCCESS:\n case DISCONNECT_AUTH.FAILURE:\n case DISCONNECT_AUTH.RESET:\n return {\n ...state,\n thirdPartyAuth: thirdPartyAuthReducer(state.thirdPartyAuth, action),\n };\n\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import {\n call, put, delay, takeEvery, all,\n} from 'redux-saga/effects';\n\nimport { publish } from '@edx/frontend-platform';\nimport { getLocale, handleRtl, LOCALE_CHANGED } from '@edx/frontend-platform/i18n';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\n\n// Actions\nimport {\n FETCH_SETTINGS,\n fetchSettingsBegin,\n fetchSettingsSuccess,\n fetchSettingsFailure,\n closeForm,\n SAVE_SETTINGS,\n SAVE_MULTIPLE_SETTINGS,\n saveSettingsBegin,\n saveSettingsSuccess,\n saveSettingsFailure,\n savePreviousSiteLanguage,\n FETCH_TIME_ZONES,\n fetchTimeZones,\n fetchTimeZonesSuccess,\n saveMultipleSettingsBegin,\n saveMultipleSettingsSuccess,\n saveMultipleSettingsFailure,\n beginNameChange,\n} from './actions';\n\n// Sub-modules\nimport { saga as deleteAccountSaga } from '../delete-account';\nimport { saga as resetPasswordSaga } from '../reset-password';\nimport { saga as nameChangeSaga } from '../name-change';\nimport {\n saga as siteLanguageSaga,\n patchPreferences,\n postSetLang,\n} from '../site-language';\nimport { saga as thirdPartyAuthSaga } from '../third-party-auth';\n\n// Services\nimport {\n getSettings,\n patchSettings,\n getTimeZones,\n getVerifiedNameHistory,\n} from './service';\n\nexport function* handleFetchSettings() {\n try {\n yield put(fetchSettingsBegin());\n const { username, userId, roles: userRoles } = getAuthenticatedUser();\n\n const {\n thirdPartyAuthProviders, profileDataManager, timeZones, ...values\n } = yield call(\n getSettings,\n username,\n userRoles,\n userId,\n );\n\n const verifiedNameHistory = yield call(getVerifiedNameHistory);\n\n if (values.country) { yield put(fetchTimeZones(values.country)); }\n\n yield put(fetchSettingsSuccess({\n values,\n thirdPartyAuthProviders,\n profileDataManager,\n timeZones,\n verifiedNameHistory,\n }));\n } catch (e) {\n yield put(fetchSettingsFailure(e.message));\n throw e;\n }\n}\n\nexport function* handleSaveSettings(action) {\n try {\n yield put(saveSettingsBegin());\n\n const { username, userId } = getAuthenticatedUser();\n const { commitValues, formId } = action.payload;\n const commitData = { [formId]: commitValues };\n let savedValues = null;\n if (formId === 'siteLanguage') {\n const previousSiteLanguage = getLocale();\n // The following two requests need to be done sequentially, with patching preferences before\n // the post to setlang. They used to be done in parallel, but this might create ambiguous\n // behavior.\n yield call(patchPreferences, username, { prefLang: commitValues });\n yield call(postSetLang, commitValues);\n\n yield put(savePreviousSiteLanguage(previousSiteLanguage));\n\n publish(LOCALE_CHANGED, getLocale());\n handleRtl();\n savedValues = commitData;\n } else {\n savedValues = yield call(patchSettings, username, commitData, userId);\n }\n yield put(saveSettingsSuccess(savedValues, commitData));\n if (savedValues.country) { yield put(fetchTimeZones(savedValues.country)); }\n yield delay(1000);\n yield put(closeForm(action.payload.formId));\n } catch (e) {\n if (e.fieldErrors) {\n if (e.fieldErrors.name?.includes('verification')) {\n yield put(beginNameChange('name'));\n }\n yield put(saveSettingsFailure({ fieldErrors: e.fieldErrors }));\n } else {\n yield put(saveSettingsFailure(e.message));\n throw e;\n }\n }\n}\n\n// handles mutiple settings saved at once, in order, and stops executing on first failure.\nexport function* handleSaveMultipleSettings(action) {\n try {\n yield put(saveMultipleSettingsBegin());\n const { username, userId } = getAuthenticatedUser();\n const { settingsArray, form } = action.payload;\n for (let i = 0; i < settingsArray.length; i += 1) {\n const { formId, commitValues } = settingsArray[i];\n yield put(saveSettingsBegin());\n const commitData = { [formId]: commitValues };\n const savedSettings = yield call(patchSettings, username, commitData, userId);\n yield put(saveSettingsSuccess(savedSettings, commitData));\n }\n yield put(saveMultipleSettingsSuccess(action));\n if (form) {\n yield delay(1000);\n yield put(closeForm(form));\n }\n } catch (e) {\n if (e.fieldErrors) {\n if (e.fieldErrors.name?.includes('verification')) {\n yield put(beginNameChange('name'));\n }\n yield put(saveMultipleSettingsFailure({ fieldErrors: e.fieldErrors }));\n } else {\n yield put(saveMultipleSettingsFailure(e.message));\n throw e;\n }\n }\n}\n\nexport function* handleFetchTimeZones(action) {\n const response = yield call(getTimeZones, action.payload.country);\n yield put(fetchTimeZonesSuccess(response, action.payload.country));\n}\n\nexport default function* saga() {\n yield takeEvery(FETCH_SETTINGS.BASE, handleFetchSettings);\n yield takeEvery(SAVE_SETTINGS.BASE, handleSaveSettings);\n yield takeEvery(SAVE_MULTIPLE_SETTINGS.BASE, handleSaveMultipleSettings);\n yield takeEvery(FETCH_TIME_ZONES.BASE, handleFetchTimeZones);\n yield all([\n deleteAccountSaga(),\n siteLanguageSaga(),\n resetPasswordSaga(),\n nameChangeSaga(),\n thirdPartyAuthSaga(),\n ]);\n}\n","import React from 'react';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\n\nexport default function NotFoundPage() {\n return (\n
    \n

    \n \n

    \n
    \n );\n}\n","import { combineReducers } from 'redux';\n\nimport {\n reducer as accountSettingsReducer,\n storeName as accountSettingsStoreName,\n} from '../account-settings';\n\nconst createRootReducer = () => combineReducers({\n [accountSettingsStoreName]: accountSettingsReducer,\n});\nexport default createRootReducer;\n","import { all } from 'redux-saga/effects';\nimport { saga as accountSettingsSaga } from '../account-settings';\n\nexport default function* rootSaga() {\n yield all([accountSettingsSaga()]);\n}\n","import { getConfig } from '@edx/frontend-platform';\nimport { applyMiddleware, createStore, compose } from 'redux';\nimport thunkMiddleware from 'redux-thunk';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport { createLogger } from 'redux-logger';\nimport createSagaMiddleware from 'redux-saga';\n\nimport createRootReducer from './reducers';\nimport rootSaga from './sagas';\n\nconst sagaMiddleware = createSagaMiddleware();\n\nfunction composeMiddleware() {\n if (getConfig().ENVIRONMENT === 'development') {\n const loggerMiddleware = createLogger({\n collapsed: true,\n });\n return composeWithDevTools(applyMiddleware(thunkMiddleware, sagaMiddleware, loggerMiddleware));\n }\n\n return compose(applyMiddleware(thunkMiddleware, sagaMiddleware));\n}\n\nexport default function configureStore(initialState = {}) {\n const store = createStore(\n createRootReducer(),\n initialState,\n composeMiddleware(),\n );\n sagaMiddleware.run(rootSaga);\n\n return store;\n}\n","export const storeName = 'idVerifiction';\n\nexport const idVerificationSelector = state => ({ ...state[storeName] });\n","/**\n * This polyfill is from MDN:\n * https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n *\n * Their description:\n * \"Here's an example of using navigator.mediaDevices.getUserMedia(), with a\n * polyfill to cope with older browsers. Note that this polyfill does not\n * correct for legacy differences in constraints syntax, which means constraints\n * won't work well across browsers. It is recommended to use the adapter.js\n * polyfill instead, which does handle constraints.\"\n *\n * Despite the lack of support for differences in constraints we'll use this\n * since it's small and simple and we don't have a need for constraints at the\n * moment. I've added an export hasGetUserMediaSupport before the polyfill to\n * help us understand support before making calls to getUserMedia.\n */\n\n// IIFE to check getUserMedia support. Must be run before the polyfill.\nconst hasGetUserMediaSupport = (() => {\n // Modern API\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n return true;\n }\n // Deprecated APIs\n if (navigator.webkitGetUserMedia || navigator.mozGetUserMedia) {\n return true;\n }\n return false;\n})();\n\n// Older browsers might not implement mediaDevices at all, so we set an empty object first\nif (navigator.mediaDevices === undefined) {\n navigator.mediaDevices = {};\n}\n\n// Some browsers partially implement mediaDevices. We can't just assign an object\n// with getUserMedia as it would overwrite existing properties.\n// Here, we will just add the getUserMedia property if it's missing.\nif (navigator.mediaDevices.getUserMedia === undefined) {\n // eslint-disable-next-line func-names\n navigator.mediaDevices.getUserMedia = function (constraints) {\n // First get ahold of the legacy getUserMedia, if present\n const getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;\n\n // Some browsers just don't implement it - return a rejected promise with an error\n // to keep a consistent interface\n if (!getUserMedia) {\n return Promise.reject(new Error('getUserMedia is not implemented in this browser'));\n }\n\n // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise\n return new Promise(((resolve, reject) => {\n getUserMedia.call(navigator, constraints, resolve, reject);\n }));\n };\n}\n\n// eslint-disable-next-line import/prefer-default-export\nexport { hasGetUserMediaSupport };\n","export const IDLE_STATUS = 'idle';\nexport const LOADING_STATUS = 'loading';\nexport const SUCCESS_STATUS = 'success';\nexport const FAILURE_STATUS = 'failure';\n","import { useEffect, useState } from 'react';\n\nimport {\n IDLE_STATUS, LOADING_STATUS, SUCCESS_STATUS, FAILURE_STATUS,\n} from './constants';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function useAsyncCall(asyncFunc) {\n // React doesn't batch setStates call in async useEffect hooks,\n // so we use a combined object here to ensure that users\n // re-render once.\n const [data, setData] = useState({ status: IDLE_STATUS });\n\n useEffect(\n () => {\n (async () => {\n setData(currData => ({ ...currData, status: LOADING_STATUS }));\n const response = await asyncFunc();\n\n if (Object.keys(response).length === 0) {\n setData(currData => ({ ...currData, status: FAILURE_STATUS, data: response }));\n } else {\n setData(currData => ({ ...currData, status: SUCCESS_STATUS, data: response }));\n }\n })();\n },\n [asyncFunc],\n );\n\n return data;\n}\n\n// Redirect the user to their original location based on session storage\nexport function useRedirect() {\n const [redirect, setRedirect] = useState({\n location: 'dashboard',\n text: 'id.verification.return.dashboard',\n });\n\n useEffect(() => {\n if (sessionStorage.getItem('courseId')) {\n setRedirect({\n location: `courses/${sessionStorage.getItem('courseId')}`,\n text: 'id.verification.return.course',\n });\n } else if (sessionStorage.getItem('next')) {\n setRedirect({\n location: sessionStorage.getItem('next'),\n text: 'id.verification.return.generic',\n });\n }\n }, []);\n\n return redirect;\n}\n","import qs from 'qs';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\n/**\n * Get ID verification status from LMS.\n *\n * Returns {\n * status: String,\n * expires: String|null,\n * canVerify: Boolean,\n * }\n */\nexport async function getExistingIdVerification() {\n const url = `${getConfig().LMS_BASE_URL}/verify_student/status/`;\n const requestConfig = {\n headers: { Accept: 'application/json' },\n };\n try {\n const response = await getAuthenticatedHttpClient().get(url, requestConfig);\n return {\n status: response.data.status || null,\n expires: response.data.expires || null,\n canVerify: response.data.can_verify || false,\n };\n } catch (e) {\n return { status: null, expires: null, canVerify: false };\n }\n}\n\n/**\n * Get the learner's enrollments. Used to check whether the learner is enrolled\n * in a verified course mode.\n *\n * Returns an array: [{...data, mode: String}]\n */\nexport async function getEnrollments() {\n const url = `${getConfig().LMS_BASE_URL}/api/enrollment/v1/enrollment`;\n const requestConfig = {\n headers: { Accept: 'application/json' },\n };\n try {\n const { data } = await getAuthenticatedHttpClient().get(url, requestConfig);\n return data;\n } catch (e) {\n return {};\n }\n}\n\n/**\n * Submit ID verifiction to LMS.\n *\n * verificationData should take the shape of:\n * - facePhotoFile (String): Base64-encoded image.\n * - idPhotoFile (String|null): Optional Base64-encoded image\n * - idPhotoName (String|null): Optional string to change the user's name to.\n * - courseRunKey (String|null): Optional course run to redirect to.\n *\n * Returns { success: Boolean, message: String|null }\n */\nexport async function submitIdVerification(verificationData) {\n const keyMap = {\n facePhotoFile: 'face_image',\n idPhotoFile: 'photo_id_image',\n idPhotoName: 'full_name',\n };\n const postData = {};\n // Don't include blank/null/undefined values.\n // Note that this will also drop the value `false`.\n Object.keys(keyMap).forEach((jsKey) => {\n const apiKey = keyMap[jsKey];\n if (verificationData[jsKey]) {\n postData[apiKey] = verificationData[jsKey];\n }\n });\n\n const url = `${getConfig().LMS_BASE_URL}/verify_student/submit-photos/`;\n const urlEncodedPostData = qs.stringify(postData);\n const requestConfig = {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n };\n try {\n await getAuthenticatedHttpClient().post(url, urlEncodedPostData, requestConfig);\n return { success: true, message: null };\n } catch (e) {\n return {\n success: false,\n status: e.customAttributes.httpErrorStatus,\n message: String(e),\n };\n }\n}\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'id.verification.next': {\n id: 'id.verification.next',\n defaultMessage: 'Next',\n description: 'Next button.',\n },\n 'id.verification.support': {\n id: 'id.verification.support',\n defaultMessage: 'support',\n description: 'Website support.',\n },\n 'id.verification.example.card.alt': {\n id: 'id.verification.example.card.alt',\n defaultMessage: 'Example of a valid identification card with a full name and photo.',\n description: 'Alt text for an example identification card.',\n },\n 'id.verification.requirements.title': {\n id: 'id.verification.requirements.title',\n defaultMessage: 'Photo Verification Requirements',\n description: 'Title for the Photo Verification Requirements page.',\n },\n 'id.verification.requirements.description': {\n id: 'id.verification.requirements.description',\n defaultMessage: 'In order to complete Photo Verification, you will need the following:',\n description: 'Description for the Photo Verification Requirements page.',\n },\n 'id.verification.requirements.card.device.title': {\n id: 'id.verification.requirements.card.device.title',\n defaultMessage: 'Device with Camera',\n description: 'Title for the Device with Camera card.',\n },\n 'id.verification.requirements.card.device.allow': {\n id: 'id.verification.requirements.card.device.allow',\n defaultMessage: 'Allow',\n description: 'Bold text emphasizing that the user needs to click \"allow\" in order to enable the camera.',\n },\n 'id.verification.requirements.card.id.title': {\n id: 'id.verification.requirements.card.id.title',\n defaultMessage: 'Photo Identification Card',\n description: 'Title for the Photo Identification requirement card.',\n },\n 'id.verification.requirements.card.id.text': {\n id: 'id.verification.requirements.card.id.text',\n defaultMessage: 'You need a valid identification card that contains your full name and photo, such as a driver’s license or passport.',\n description: 'Text that explains that the user needs a photo ID.',\n },\n 'id.verification.privacy.title': {\n id: 'id.verification.privacy.title',\n defaultMessage: 'Privacy Information',\n description: 'Title for Privacy Information.',\n },\n 'id.verification.privacy.need.photo.question': {\n id: 'id.verification.privacy.need.photo.question',\n defaultMessage: 'Why does {siteName} need my photo?',\n description: 'Question about why the platform needs a verification photo.',\n },\n 'id.verification.privacy.need.photo.answer': {\n id: 'id.verification.privacy.need.photo.answer',\n defaultMessage: 'We use your verification photos to confirm your identity and ensure the validity of your certificate.',\n description: 'Answering why the platform needs a verification photo.',\n },\n 'id.verification.privacy.do.with.photo.question': {\n id: 'id.verification.privacy.do.with.photo.question',\n defaultMessage: 'What does {siteName} do with this photo?',\n description: 'Question about what the platform does with the verification photo.',\n },\n 'id.verification.privacy.do.with.photo.answer': {\n id: 'id.verification.privacy.do.with.photo.answer',\n defaultMessage: 'We securely encrypt your photo and send it our authorization service for review. Your photo and information are not saved or visible anywhere on {siteName} after the verification process is complete.',\n description: 'Answering what the platform does with the verification photo.',\n },\n 'id.verification.access.blocked.title': {\n id: 'id.verification.access.blocked.title',\n defaultMessage: 'Identity Verification',\n description: 'Title for text that displays when a user is blocked from ID verification.',\n },\n 'id.verification.access.blocked.enrollment': {\n id: 'id.verification.access.blocked.enrollment',\n defaultMessage: 'You are not currently enrolled in a course that requires identity verification.',\n description: 'Text that displays when user is trying to verify while not enrolled in a course that requires ID verification.',\n },\n 'id.verification.access.blocked.pending': {\n id: 'id.verification.access.blocked.pending',\n defaultMessage: 'You have already submitted your verification information. You will see a message on your dashboard when the verification process is complete (usually within 5 days).',\n description: 'Text that displays when user has a pending or approved request.',\n },\n 'id.verification.photo.take': {\n id: 'id.verification.photo.take',\n defaultMessage: 'Take Photo',\n description: 'Button to take photo.',\n },\n 'id.verification.photo.retake': {\n id: 'id.verification.photo.retake',\n defaultMessage: 'Retake Photo?',\n description: 'Button to retake photo.',\n },\n 'id.verification.photo.enable.detection': {\n id: 'id.verification.photo.enable.detection',\n defaultMessage: 'Enable Face Detection',\n description: 'Text label for the checkbox to enable face detection.',\n },\n 'id.verification.photo.enable.detection.portrait.help.text': {\n id: 'id.verification.photo.enable.detection.portrait.help.text',\n defaultMessage: 'If checked, a box will appear around your face. Your face can be seen clearly if the box around it is blue. If your face is not in a good position or undetectable, the box will be red.',\n description: 'Help text that appears for enabling face detection on the portrait photo panel.',\n },\n 'id.verification.photo.enable.detection.id.help.text': {\n id: 'id.verification.photo.enable.detection.id.help.text',\n defaultMessage: 'If checked, a box will appear around the face on your ID card. The face can be seen clearly if the box around it is blue. If the face is not in a good position or undetectable, the box will be red.',\n description: 'Help text that appears for enabling face detection on the portrait photo panel.',\n },\n 'id.verification.photo.feedback.correct': {\n id: 'id.verification.photo.feedback.correct',\n defaultMessage: 'Face is in a good position.',\n description: 'Text for screen reader when user\\'s face is in a good position.',\n },\n 'id.verification.photo.feedback.two.faces': {\n id: 'id.verification.photo.feedback.two.faces',\n defaultMessage: 'More than one face detected.',\n description: 'Text for screen reader when more than one face detected.',\n },\n 'id.verification.photo.feedback.no.faces': {\n id: 'id.verification.photo.feedback.no.faces',\n defaultMessage: 'No face detected.',\n description: 'Text for screen reader when no face detected.',\n },\n 'id.verification.photo.feedback.top.left': {\n id: 'id.verification.photo.feedback.top.left',\n defaultMessage: 'Incorrect position. Top left.',\n description: 'Text for screen reader when face is in a bad position.',\n },\n 'id.verification.photo.feedback.top.center': {\n id: 'id.verification.photo.feedback.top.center',\n defaultMessage: 'Incorrect position. Top center.',\n description: 'Text for screen reader when face is in a bad position.',\n },\n 'id.verification.photo.feedback.top.right': {\n id: 'id.verification.photo.feedback.top.right',\n defaultMessage: 'Incorrect position. Top right.',\n description: 'Text for screen reader when face is in a bad position.',\n },\n 'id.verification.photo.feedback.center.left': {\n id: 'id.verification.photo.feedback.center.left',\n defaultMessage: 'Incorrect position. Center left.',\n description: 'Text for screen reader when face is in a bad position.',\n },\n 'id.verification.photo.feedback.center.center': {\n id: 'id.verification.photo.feedback.center.center',\n defaultMessage: 'Incorrect position. Too close to camera.',\n description: 'Text for screen reader when face is in a bad position.',\n },\n 'id.verification.photo.feedback.center.right': {\n id: 'id.verification.photo.feedback.center.right',\n defaultMessage: 'Incorrect position. Center right.',\n description: 'Text for screen reader when face is in a bad position.',\n },\n 'id.verification.photo.feedback.bottom.left': {\n id: 'id.verification.photo.feedback.bottom.left',\n defaultMessage: 'Incorrect position. Bottom left.',\n description: 'Text for screen reader when face is in a bad position.',\n },\n 'id.verification.photo.feedback.bottom.center': {\n id: 'id.verification.photo.feedback.bottom.center',\n defaultMessage: 'Incorrect position. Bottom center.',\n description: 'Text for screen reader when face is in a bad position.',\n },\n 'id.verification.photo.feedback.bottom.right': {\n id: 'id.verification.photo.feedback.bottom.right',\n defaultMessage: 'Incorrect position. Bottom right.',\n description: 'Text for screen reader when face is in a bad position.',\n },\n 'id.verification.camera.access.title': {\n id: 'id.verification.camera.access.title',\n defaultMessage: 'Camera Permissions',\n description: 'Title for the Camera Access page.',\n },\n 'id.verification.camera.access.title.success': {\n id: 'id.verification.camera.access.title.success',\n defaultMessage: 'Camera Access Enabled',\n description: 'Title for the Camera Access page when camera is enabled.',\n },\n 'id.verification.camera.access.title.failed': {\n id: 'id.verification.camera.access.title.failed',\n defaultMessage: 'Camera Access Failed',\n description: 'Title for the Camera Access page when camera access is denied or unavailable.',\n },\n 'id.verification.camera.access.click.allow': {\n id: 'id.verification.camera.access.click.allow',\n defaultMessage: 'Please make sure to click \"Allow\"',\n description: 'Instruction to allow camera access.',\n },\n 'id.verification.camera.access.enable': {\n id: 'id.verification.camera.access.enable',\n defaultMessage: 'Enable Camera',\n description: 'Text to enable camera.',\n },\n 'id.verification.camera.access.problems': {\n id: 'id.verification.camera.access.problems',\n defaultMessage: 'Having problems?',\n description: 'Text for when the user is having problems enabling camera access.',\n },\n 'id.verification.camera.access.skip': {\n id: 'id.verification.camera.access.skip',\n defaultMessage: 'Skip and upload image files instead',\n description: 'Text to skip camera access and enable image uploading.',\n },\n 'id.verification.camera.access.success': {\n id: 'id.verification.camera.access.success',\n defaultMessage: 'Looks like your camera is working and ready.',\n description: 'Text to confirm that camera is working.',\n },\n 'id.verification.camera.access.failure': {\n id: 'id.verification.camera.access.failure',\n defaultMessage: 'It looks like we\\'re unable to access your camera. You will need to upload image files of you and your photo id.',\n description: 'Text indicating that the camera could not be accessed and image upload will be enabled.',\n },\n 'id.verification.camera.access.failure.temporary': {\n id: 'id.verification.camera.access.failure.temporary',\n defaultMessage: 'It looks like we\\'re unable to access your camera. Please verify that your webcam is connected and that you have allowed your browser to access it.',\n description: 'Text indicating that the camera could not be accessed.',\n },\n 'id.verification.camera.access.failure.temporary.chrome': {\n id: 'id.verification.camera.access.failure.temporary.chrome',\n defaultMessage: 'To enable camera access in Chrome:',\n description: 'Description for the directions on enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.chrome.step1': {\n id: 'id.verification.camera.access.failure.temporary.chrome.step1',\n defaultMessage: 'Open Chrome.',\n description: 'Text for step one of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.chrome.step2': {\n id: 'id.verification.camera.access.failure.temporary.chrome.step2',\n defaultMessage: 'Navigate to More > Settings.',\n description: 'Text for step two of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.chrome.step2.windows': {\n id: 'id.verification.camera.access.failure.temporary.chrome.step2.windows',\n defaultMessage: 'For Windows: Alt+F, Alt+E, or F10 followed by the spacebar',\n description: 'Text for Windows keyboard shortcut in chrome.',\n },\n 'id.verification.camera.access.failure.temporary.chrome.step2.mac': {\n id: 'id.verification.camera.access.failure.temporary.chrome.step2.mac',\n defaultMessage: 'For Mac: Command+,',\n description: 'Text for Mac keyboard shortcut in chrome.',\n },\n 'id.verification.camera.access.failure.temporary.chrome.step3': {\n id: 'id.verification.camera.access.failure.temporary.chrome.step3',\n defaultMessage: 'Under the \"Privacy and security\" tab, select \"Site Settings\" and then \"Camera.\"',\n description: 'Text for step three of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.chrome.step4': {\n id: 'id.verification.camera.access.failure.temporary.chrome.step4',\n defaultMessage: 'Under \"Blocked,\" find \"edx.org\" and select it.',\n description: 'Text for step four of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.chrome.step5': {\n id: 'id.verification.camera.access.failure.temporary.chrome.step5',\n defaultMessage: 'In the \"Permissions\" section, update the camera permissions to \"Allow.\"',\n description: 'Text for step five of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.ie11': {\n id: 'id.verification.camera.access.failure.temporary.ie11',\n defaultMessage: 'To enable camera access in Internet Explorer:',\n description: 'Description for the directions on enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.ie11.step1': {\n id: 'id.verification.camera.access.failure.temporary.ie11.step1',\n defaultMessage: 'Open the Flash Player Settings Manager by navigating to Windows Settings > Control Panel > Flash Player.',\n description: 'Text for step one of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.ie11.step2': {\n id: 'id.verification.camera.access.failure.temporary.ie11.step2',\n defaultMessage: 'Select the \"Camera and Mic\" tab, and then select the \"Camera and Microphone Settings by Site\" button.',\n description: 'Text for step two of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.ie11.step3': {\n id: 'id.verification.camera.access.failure.temporary.ie11.step3',\n defaultMessage: 'Choose \"edx.org\" from the list of websites and change the permissions by selecting \"Allow\" in the dropdown menu.',\n description: 'Text for step three of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.firefox': {\n id: 'id.verification.camera.access.failure.temporary.firefox',\n defaultMessage: 'To enable camera access in Firefox:',\n description: 'Description for the directions on enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.firefox.step1': {\n id: 'id.verification.camera.access.failure.temporary.firefox.step1',\n defaultMessage: 'Open Firefox.',\n description: 'Text for step one of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.firefox.step2': {\n id: 'id.verification.camera.access.failure.temporary.firefox.step2',\n defaultMessage: 'Enter \"about:preferences\" in the URL bar.',\n description: 'Text for step two of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.firefox.step3': {\n id: 'id.verification.camera.access.failure.temporary.firefox.step3',\n defaultMessage: 'Select the \"Privacy & Security\" tab, and navigate to the \"Permissions\" section.',\n description: 'Text for step three of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.firefox.step4': {\n id: 'id.verification.camera.access.failure.temporary.firefox.step4',\n defaultMessage: 'Next to \"Camera,\" select the \"Settings…\" button.',\n description: 'Text for step four of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.firefox.step5': {\n id: 'id.verification.camera.access.failure.temporary.firefox.step5',\n defaultMessage: 'In the search bar, enter \"edx.org.\"',\n description: 'Text for step five of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.firefox.step6': {\n id: 'id.verification.camera.access.failure.temporary.firefox.step6',\n defaultMessage: 'In the status column for \"edx.org,\" select \"Allow\" from the drop down.',\n description: 'Text for step six of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.firefox.step7': {\n id: 'id.verification.camera.access.failure.temporary.firefox.step7',\n defaultMessage: 'Select \"Save Changes.\"',\n description: 'Text for step seven of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.safari': {\n id: 'id.verification.camera.access.failure.temporary.safari',\n defaultMessage: 'To enable camera access in Safari:',\n description: 'Description for the directions on enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.safari.step1': {\n id: 'id.verification.camera.access.failure.temporary.safari.step1',\n defaultMessage: 'Open Safari.',\n description: 'Text for step one of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.safari.step2': {\n id: 'id.verification.camera.access.failure.temporary.safari.step2',\n defaultMessage: 'Click on the Safari app menu, then select \"Preferences.\" You can also use Command+, as a keyboard shortcut.',\n description: 'Text for step two of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.safari.step3': {\n id: 'id.verification.camera.access.failure.temporary.safari.step3',\n defaultMessage: 'Select the \"Websites\" tab and then select \"Camera.\"',\n description: 'Text for step three of enabling camera access.',\n },\n 'id.verification.camera.access.failure.temporary.safari.step4': {\n id: 'id.verification.camera.access.failure.temporary.safari.step4',\n defaultMessage: 'Select \"edx.org\" and change the camera permissions to \"Allow.\"',\n description: 'Text for step four of enabling camera access.',\n },\n 'id.verification.camera.access.failure.unsupported': {\n id: 'id.verification.camera.access.failure.unsupported',\n defaultMessage: 'It looks like your browser does not support camera access.',\n description: 'Text indicating that the user\\'s browser does not support camera access.',\n },\n 'id.verification.camera.access.failure.unsupported.chrome.explanation': {\n id: 'id.verification.camera.access.failure.unsupported.chrome.explanation',\n defaultMessage: 'The Chrome browser currently does not support camera access on iOS devices, such as iPhones and iPads.',\n description: 'Explanation for why certain web browsers, like Chrome, do not support accessing the user\\'s camera.',\n },\n 'id.verification.camera.access.failure.unsupported.instructions': {\n id: 'id.verification.camera.access.failure.unsupported.instructions',\n defaultMessage: 'Please use another browser to complete Identity Verification.',\n description: 'Instructions for the user to user another web browser to complete the process.',\n },\n 'id.verification.photo.tips.title': {\n id: 'id.verification.photo.tips.title',\n defaultMessage: 'Helpful Photo Tips',\n description: 'Title for the Photo Tips page.',\n },\n 'id.verification.photo.tips.description': {\n id: 'id.verification.photo.tips.description',\n defaultMessage: 'Next, we\\'ll need you to take a photo of your face. Please review the helpful tips below.',\n description: 'Description for the photo tips page.',\n },\n 'id.verification.photo.tips.list.title': {\n id: 'id.verification.photo.tips.list.title',\n defaultMessage: 'Photo Tips',\n description: 'Title for the list of photo tips.',\n },\n 'id.verification.photo.tips.list.description': {\n id: 'id.verification.photo.tips.list.description',\n defaultMessage: 'To take a successful photo, make sure that:',\n description: 'Description for the list of photo tips.',\n },\n 'id.verification.photo.tips.list.well.lit': {\n id: 'id.verification.photo.tips.list.well.lit',\n defaultMessage: 'Your face is well-lit.',\n description: 'Tip to make sure the user\\'s face is well lit.',\n },\n 'id.verification.photo.tips.list.inside.frame': {\n id: 'id.verification.photo.tips.list.inside.frame',\n defaultMessage: 'Your entire face fits inside the frame.',\n description: 'Tip to make sure the user\\'s face fits inside the frame.',\n },\n 'id.verification.portrait.photo.title.camera': {\n id: 'id.verification.portrait.photo.title.camera',\n defaultMessage: 'Take a Photo of Yourself',\n description: 'Title for the Portrait Photo page if camera access is enabled.',\n },\n 'id.verification.portrait.photo.instructions.camera': {\n id: 'id.verification.portrait.photo.instructions.camera',\n defaultMessage: 'When your face is in position, use the Take Photo button below to take your photo.',\n description: 'Instructions to use the camera to take a portrait photo..',\n },\n 'id.verification.camera.help.sight.question': {\n id: 'id.verification.camera.help.sight.question',\n defaultMessage: 'What if I can\\'t see the camera image or if I can\\'t see my photo to determine which side is visible?',\n description: 'Question on what to do if the user cannot see the camera image or photo during verification.',\n },\n 'id.verification.camera.help.sight.answer.portrait': {\n id: 'id.verification.camera.help.sight.answer.portrait',\n defaultMessage: 'You may be able to complete the image capture procedure without assistance, but it may take a couple of submission attempts to get the camera positioning right. Optimal camera positioning varies with each computer, but generally the best position for a headshot is approximately 12-18 inches (30-45 centimeters) from the camera, with your head centered relative to the computer screen. If the photos you submit are rejected, try moving the computer or camera orientation to change the lighting angle.',\n description: 'Confirming what to do if the camera image of the portrait cannot be seen during verification.',\n },\n 'id.verification.camera.help.sight.answer.id': {\n id: 'id.verification.camera.help.sight.answer.id',\n defaultMessage: 'You may be able to complete the image capture procedure without assistance, but it may take a couple of submission attempts to get the camera positioning right. Optimal camera positioning varies with each computer, but generally, the best position for a photo of an ID card is 8-12 inches (20-30 centimeters) from the camera, with the ID card centered relative to the camera. If the photos you submit are rejected, try moving the computer or camera orientation to change the lighting angle. The most common reason for rejection is inability to read the text on the ID card.',\n description: 'Confirming what to do if the camera image of the ID cannot be seen during verification.',\n },\n 'id.verification.camera.help.difficulty.question.portrait': {\n id: 'id.verification.camera.help.difficulty.question.portrait',\n defaultMessage: 'What if I have difficulty holding my head in position relative to the camera?',\n description: 'Question on what to do if the user has difficulty holding their head relative to the camera.',\n },\n 'id.verification.camera.help.difficulty.question.id': {\n id: 'id.verification.camera.help.difficulty.question.id',\n defaultMessage: 'What if I have difficulty holding my ID in position relative to the camera?',\n description: 'Question on what to do if the user has difficulty holding their ID relative to the camera.',\n },\n 'id.verification.camera.help.difficulty.answer': {\n id: 'id.verification.camera.help.difficulty.answer',\n defaultMessage: 'If you require assistance with taking a photo for submission, contact {siteName} support for additional suggestions.',\n description: 'Confirming what to do if the user has difficult holding their head relative to the camera.',\n },\n 'id.verification.id.photo.unclear.question': {\n id: 'id.verification.id.photo.unclear.question',\n defaultMessage: 'Is your ID card image not clear or too blurry?',\n description: 'Question on what to do if the user\\'s ID image is unclear',\n },\n 'id.verification.id.tips.title': {\n id: 'id.verification.id.tips.title',\n defaultMessage: 'Helpful Identification Card Tips',\n description: 'Title for the ID Tips page.',\n },\n 'id.verification.id.tips.description': {\n id: 'id.verification.id.tips.description',\n defaultMessage: 'Next, we\\'ll need you to take a photo of a valid identification card that includes your full name and photo, such as a driver’s license or passport. Please have your ID ready.',\n description: 'Description for the ID Tips page.',\n },\n 'id.verification.id.tips.list.well.lit': {\n id: 'id.verification.id.tips.list.well.lit',\n defaultMessage: 'Your identification card is well-lit.',\n description: 'Tip to ensure ID is well lit.',\n },\n 'id.verification.id.tips.list.clear': {\n id: 'id.verification.id.tips.list.clear',\n defaultMessage: 'Ensure that you can see your photo and clearly read your name.',\n description: 'Tip to ensure ID and name can be seen clearly.',\n },\n 'id.verification.id.photo.title.camera': {\n id: 'id.verification.id.photo.title.camera',\n defaultMessage: 'Take a Photo of Your Identification Card',\n description: 'Title for the ID Photo page if camera access is enabled.',\n },\n 'id.verification.id.photo.title.upload': {\n id: 'id.verification.id.photo.title.upload',\n defaultMessage: 'Upload a Photo of Your Identification Card',\n description: 'Title for the ID Photo page if camera access is disabled.',\n },\n 'id.verification.id.photo.preview.alt': {\n id: 'id.verification.id.photo.preview.alt',\n defaultMessage: 'Preview of photo ID.',\n description: 'Alt text for the ID photo preview.',\n },\n 'id.verification.id.photo.instructions.camera': {\n id: 'id.verification.id.photo.instructions.camera',\n defaultMessage: 'When your ID is in position, use the Take Photo button below to take your photo. Please use a passport, driver’s license, or another identification card that includes your full name and a picture of your face.',\n description: 'Instructions to use the camera to take an ID photo.',\n },\n 'id.verification.id.photo.instructions.upload': {\n id: 'id.verification.id.photo.instructions.upload',\n defaultMessage: 'Please upload a photo of your identification card. Ensure the entire ID fits inside the frame and is well-lit. The file size must be under 10 MB. Supported formats: ',\n description: 'Instructions for ID photo upload.',\n },\n 'id.verification.id.photo.instructions.upload.error.invalidFileType': {\n id: 'id.verification.id.photo.instructions.upload.error.invalidFileType',\n defaultMessage: 'The file you have selected is not a supported image type. Please choose from the following formats: ',\n description: 'Error message for file upload that is not a supported image type.',\n },\n 'id.verification.id.photo.instructions.upload.error.fileTooLarge': {\n id: 'id.verification.id.photo.instructions.upload.error.fileTooLarge',\n defaultMessage: 'The file you have selected is too large. Please try again with a file less than 10MB.',\n description: 'Error message for file upload that is larger than 10MB.',\n },\n 'id.verification.name.check.title': {\n id: 'id.verification.name.check.title',\n defaultMessage: 'Double-Check Your Name',\n description: 'Title for the page where a user double-checks that their name is correct.',\n },\n 'id.verification.name.check.instructions': {\n id: 'id.verification.name.check.instructions',\n defaultMessage: 'Does the name below match the name on your photo ID? If not, update the name below to match your photo ID.',\n description: 'Text to instruct the user to check that the name displayed on the page matches what is on their photo ID.',\n },\n 'id.verification.name.check.mismatch.information': {\n id: 'id.verification.name.check.mismatch.information',\n defaultMessage: 'If the name below does not match your photo ID, your identity verification will be denied.',\n description: 'Text to inform the user that if the name displayed on the page does not match what is on their photo ID, identity verification will be denied.',\n },\n 'id.verification.name.error': {\n id: 'id.verification.name.error',\n defaultMessage: 'Please enter your name as it appears on your photo ID.',\n description: 'Error that shows when the user needs to update their name to match the name on their ID.',\n },\n 'id.verification.account.name.warning.prefix': {\n id: 'id.verification.account.name.warning.prefix',\n defaultMessage: 'Please Note:',\n description: 'Prefix to the warning that any change to the account name will be saved to the account.',\n },\n 'id.verification.account.name.settings': {\n id: 'id.verification.account.name.settings',\n defaultMessage: 'Account Settings',\n description: 'Link to Account Settings.',\n },\n 'id.verification.name.label': {\n id: 'id.verification.name.label',\n defaultMessage: 'Name',\n description: 'Label for name input.',\n },\n 'id.verification.account.name.photo.alt': {\n id: 'id.verification.account.name.photo.alt',\n defaultMessage: 'Photo of your ID to be submitted.',\n description: 'Alt text for the photo of the user\\'s ID.',\n },\n 'id.verification.review.title': {\n id: 'id.verification.review.title',\n defaultMessage: 'Review Your Photos',\n description: 'Title for the review your photos page.',\n },\n 'id.verification.review.description': {\n id: 'id.verification.review.description',\n defaultMessage: 'Make sure we can verify your identity with the photos and information you have provided.',\n description: 'Description for the review your photos page.',\n },\n 'id.verification.review.portrait.label': {\n id: 'id.verification.review.portrait.label',\n defaultMessage: 'Your Portrait',\n description: 'Label for the portrait card.',\n },\n 'id.verification.review.portrait.alt': {\n id: 'id.verification.review.portrait.alt',\n defaultMessage: 'Photo of your face to be submitted.',\n description: 'Alt text for the portrait photo.',\n },\n 'id.verification.review.portrait.retake': {\n id: 'id.verification.review.portrait.retake',\n defaultMessage: 'Retake Portrait Photo',\n description: 'Button to retake the portrait photo.',\n },\n 'id.verification.review.id.label': {\n id: 'id.verification.review.id.label',\n defaultMessage: 'Your Identification Card',\n description: 'Label for the Photo ID card.',\n },\n 'id.verification.review.id.alt': {\n id: 'id.verification.review.id.alt',\n defaultMessage: 'Photo of your identification card to be submitted.',\n description: 'Alt text for the ID photo.',\n },\n 'id.verification.review.id.retake': {\n id: 'id.verification.review.id.retake',\n defaultMessage: 'Retake ID Photo',\n description: 'Button to retake the ID photo.',\n },\n 'id.verification.review.confirm': {\n id: 'id.verification.review.confirm',\n defaultMessage: 'Submit',\n description: 'Button to confirm all information is correct and submit.',\n },\n 'id.verification.submission.alert.error.face': {\n id: 'id.verification.submission.alert.error.face',\n defaultMessage: 'A photo of your face is required. Please retake your portrait photo.',\n description: 'Error message displayed when the user\\'s portrait photo is missing.',\n },\n 'id.verification.submission.alert.error.id': {\n id: 'id.verification.submission.alert.error.id',\n defaultMessage: 'A photo of your ID card is required. Please retake your ID photo.',\n description: 'Error message displayed when the user\\'s ID photo is missing.',\n },\n 'id.verification.submission.alert.error.name': {\n id: 'id.verification.submission.alert.error.name',\n defaultMessage: 'A valid account name is required. Please update your account name to match the name on your ID.',\n description: 'Error message displayed when the user\\'s account name is missing.',\n },\n 'id.verification.submission.alert.error.unsupported': {\n id: 'id.verification.submission.alert.error.unsupported',\n defaultMessage: 'One or more of the files you have uploaded is in an unsupported format. Please choose from the following: ',\n description: 'Error message displayed when the user uploads an unsupported file type.',\n },\n 'id.verification.review.error': {\n id: 'id.verification.review.error',\n defaultMessage: '{siteName} Support Page',\n description: 'Text linking to the platform support page.',\n },\n 'id.verification.submitted.title': {\n id: 'id.verification.submitted.title',\n defaultMessage: 'Identity Verification in Progress',\n description: 'Title for the submitted page.',\n },\n 'id.verification.submitted.text': {\n id: 'id.verification.submitted.text',\n defaultMessage: 'We have received your information and are verifying your identity. You will be notified when the verification process is complete (usually within 5 days). In the meantime, you can still access all available course content.',\n description: 'Text confirming that ID verification request has been received.',\n },\n 'id.verification.return.dashboard': {\n id: 'id.verification.return.dashboard',\n defaultMessage: 'Return to Your Dashboard',\n description: 'Button to return to the dashboard.',\n },\n 'id.verification.return.course': {\n id: 'id.verification.return.course',\n defaultMessage: 'Return to Course',\n description: 'Return to the course which ID verification was accessed from.',\n },\n 'id.verification.return.generic': {\n id: 'id.verification.return.generic',\n defaultMessage: 'Return',\n description: 'Button to return to the user\\'s original location.',\n },\n 'id.verification.photo.upload.help.title': {\n id: 'id.verification.photo.upload.help.title',\n defaultMessage: 'Upload a Photo Instead',\n description: 'Title for section that allows switching to photo upload mode.',\n },\n 'id.verification.photo.camera.help.title': {\n id: 'id.verification.photo.camera.help.title',\n defaultMessage: 'Use Your Camera Instead',\n description: 'Title for section that allows switching to camera mode.',\n },\n 'id.verification.photo.upload.help.text': {\n id: 'id.verification.photo.upload.help.text',\n defaultMessage: 'If you are having trouble using the photo capture above, you may want to upload a photo instead. To upload a photo, click the button below.',\n description: 'Help text for switching to upload mode.',\n },\n 'id.verification.photo.camera.help.text': {\n id: 'id.verification.photo.camera.help.text',\n defaultMessage: 'If you are having trouble uploading a photo above, you may want to use your camera instead. To use your camera, click the button below.',\n description: 'Help text for switching to camera mode.',\n },\n 'id.verification.photo.upload.help.button': {\n id: 'id.verification.upload.help.button',\n defaultMessage: 'Switch to Upload Mode',\n description: 'Button used to switch to upload mode.',\n },\n 'id.verification.photo.camera.help.button': {\n id: 'id.verification.camera.help.button',\n defaultMessage: 'Switch to Camera Mode',\n description: 'Button used to switch to camera mode.',\n },\n});\n\nexport default messages;\n","import React from 'react';\n\nconst IdVerificationContext = React.createContext({});\n\nconst MEDIA_ACCESS = {\n PENDING: 'pending',\n UNSUPPORTED: 'unsupported',\n DENIED: 'denied',\n GRANTED: 'granted',\n};\n\nconst ERROR_REASONS = {\n COURSE_ENROLLMENT: 'course_enrollment',\n EXISTING_REQUEST: 'existing_request',\n CANNOT_VERIFY: 'cannot_verify',\n};\n\nconst VERIFIED_MODES = ['verified', 'professional', 'masters', 'executive_education'];\n\nexport default IdVerificationContext;\nexport {\n MEDIA_ACCESS,\n ERROR_REASONS,\n VERIFIED_MODES,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape, FormattedMessage } from '@edx/frontend-platform/i18n';\n\nimport messages from './IdVerification.messages';\nimport { ERROR_REASONS } from './IdVerificationContext';\n\nfunction AccessBlocked({ error, intl }) {\n const handleMessage = () => {\n if (error === ERROR_REASONS.COURSE_ENROLLMENT) {\n return

    {intl.formatMessage(messages['id.verification.access.blocked.enrollment'])}

    ;\n }\n if (error === ERROR_REASONS.EXISTING_REQUEST) {\n return

    {intl.formatMessage(messages['id.verification.access.blocked.pending'])}

    ;\n }\n return (\n no-reply@registration.edx.org,\n }}\n />\n );\n };\n\n return (\n
    \n

    \n {intl.formatMessage(messages['id.verification.access.blocked.title'])}\n

    \n {handleMessage()}\n \n
    \n );\n}\n\nAccessBlocked.propTypes = {\n intl: intlShape.isRequired,\n error: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(AccessBlocked);\n","import React, { createContext } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { getVerifiedNameHistory } from '../account-settings/data/service';\nimport { getMostRecentApprovedOrPendingVerifiedName } from '../utils';\nimport { useAsyncCall } from '../hooks';\nimport { SUCCESS_STATUS } from '../constants';\n\nexport const VerifiedNameContext = createContext();\n\nexport function VerifiedNameContextProvider({ children }) {\n const verifiedNameHistoryData = useAsyncCall(getVerifiedNameHistory);\n\n let verifiedName = '';\n const { status, data } = verifiedNameHistoryData;\n if (status === SUCCESS_STATUS && data) {\n const { results } = data;\n verifiedName = getMostRecentApprovedOrPendingVerifiedName(results);\n }\n\n const value = {\n verifiedNameHistoryCallStatus: status,\n verifiedName,\n };\n\n return ({children});\n}\n\nVerifiedNameContextProvider.propTypes = {\n children: PropTypes.node.isRequired,\n};\n","import React, { useState, useContext, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { AppContext } from '@edx/frontend-platform/react';\n\nimport { getProfileDataManager } from '../account-settings/data/service';\nimport PageLoading from '../account-settings/PageLoading';\nimport { useAsyncCall } from '../hooks';\nimport { IDLE_STATUS, LOADING_STATUS, SUCCESS_STATUS } from '../constants';\n\nimport { getExistingIdVerification, getEnrollments } from './data/service';\nimport AccessBlocked from './AccessBlocked';\nimport { hasGetUserMediaSupport } from './getUserMediaShim';\nimport IdVerificationContext, { MEDIA_ACCESS, ERROR_REASONS, VERIFIED_MODES } from './IdVerificationContext';\nimport { VerifiedNameContext } from './VerifiedNameContext';\n\nexport default function IdVerificationContextProvider({ children }) {\n const { authenticatedUser } = useContext(AppContext);\n const { verifiedNameHistoryCallStatus, verifiedName } = useContext(VerifiedNameContext);\n\n const idVerificationData = useAsyncCall(getExistingIdVerification);\n const enrollmentsData = useAsyncCall(getEnrollments);\n\n const [facePhotoFile, setFacePhotoFile] = useState(null);\n const [idPhotoFile, setIdPhotoFile] = useState(null);\n const [idPhotoName, setIdPhotoName] = useState(null);\n const [mediaStream, setMediaStream] = useState(null);\n const [mediaAccess, setMediaAccess] = useState(\n hasGetUserMediaSupport ? MEDIA_ACCESS.PENDING : MEDIA_ACCESS.UNSUPPORTED,\n );\n\n const [profileDataManager, setProfileDataManager] = useState(null);\n useEffect(() => {\n // Determine if the user's profile data is managed by a third-party identity provider.\n // If so, they cannot update their account name manually.\n if (authenticatedUser.roles.length > 0) {\n (async () => {\n const thirdPartyManager = await getProfileDataManager(\n authenticatedUser.username,\n authenticatedUser.roles,\n );\n if (thirdPartyManager) {\n setProfileDataManager(thirdPartyManager);\n }\n })();\n }\n }, [authenticatedUser]);\n\n // Default to upload for the ID image\n const [useCameraForId, setUseCameraForId] = useState(false);\n\n // If the user reaches the end of the flow and goes back to retake their photos,\n // this flag ensures that they are directed straight back to the summary panel\n const [reachedSummary, setReachedSummary] = useState(false);\n\n let canVerify = true;\n let error = '';\n let existingIdVerification;\n\n if (idVerificationData?.data) {\n existingIdVerification = idVerificationData.data;\n }\n\n if (enrollmentsData.status === SUCCESS_STATUS && enrollmentsData?.data) {\n const verifiedEnrollments = enrollmentsData.data.filter((enrollment) => (\n VERIFIED_MODES.includes(enrollment.mode)\n ));\n if (verifiedEnrollments.length === 0) {\n canVerify = false;\n error = ERROR_REASONS.COURSE_ENROLLMENT;\n }\n }\n\n const contextValue = {\n existingIdVerification,\n facePhotoFile,\n idPhotoFile,\n idPhotoName,\n mediaStream,\n mediaAccess,\n userId: authenticatedUser.userId,\n // If the learner has an applicable verified name, then this should override authenticatedUser.name\n // when determining the context value nameOnAccount.\n nameOnAccount: verifiedName || authenticatedUser.name,\n profileDataManager,\n useCameraForId,\n reachedSummary,\n setFacePhotoFile,\n setIdPhotoFile,\n setIdPhotoName,\n setUseCameraForId,\n setReachedSummary,\n tryGetUserMedia: async () => {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\n setMediaAccess(MEDIA_ACCESS.GRANTED);\n setMediaStream(stream);\n // stop the stream, as we are not using it yet\n const tracks = stream.getTracks();\n tracks.forEach(track => track.stop());\n } catch (err) {\n setMediaAccess(MEDIA_ACCESS.DENIED);\n }\n },\n stopUserMedia: () => {\n if (mediaStream) {\n const tracks = mediaStream.getTracks();\n tracks.forEach(track => track.stop());\n setMediaStream(null);\n }\n },\n };\n\n const loadingStatuses = [IDLE_STATUS, LOADING_STATUS];\n // If we are waiting for verification status or verified name history endpoint, show spinner.\n if (loadingStatuses.includes(idVerificationData.status) || loadingStatuses.includes(verifiedNameHistoryCallStatus)) {\n return ;\n }\n\n if (!canVerify) {\n return ;\n }\n\n return (\n \n {children}\n \n );\n}\n\nIdVerificationContextProvider.propTypes = {\n children: PropTypes.node.isRequired,\n};\n","import { useContext } from 'react';\nimport IdVerificationContext from './IdVerificationContext';\n\nconst SLUGS = {\n REVIEW_REQUIREMENTS: 'review-requirements',\n CHOOSE_MODE: 'choose-mode',\n REQUEST_CAMERA_ACCESS: 'request-camera-access',\n PORTRAIT_PHOTO_CONTEXT: 'portrait-photo-context',\n TAKE_PORTRAIT_PHOTO: 'take-portrait-photo',\n ID_CONTEXT: 'id-context',\n TAKE_ID_PHOTO: 'take-id-photo',\n GET_NAME_ID: 'get-name-id',\n SUMMARY: 'summary',\n SUBMITTED: 'submitted',\n};\n\nconst panelSteps = [\n SLUGS.REVIEW_REQUIREMENTS,\n SLUGS.REQUEST_CAMERA_ACCESS,\n SLUGS.PORTRAIT_PHOTO_CONTEXT,\n SLUGS.TAKE_PORTRAIT_PHOTO,\n SLUGS.ID_CONTEXT,\n SLUGS.TAKE_ID_PHOTO,\n SLUGS.GET_NAME_ID,\n SLUGS.SUMMARY,\n SLUGS.SUBMITTED,\n];\n\n// eslint-disable-next-line import/prefer-default-export\nexport const useNextPanelSlug = (originSlug) => {\n // Go back to the summary view if that's where they came from\n const { reachedSummary } = useContext(IdVerificationContext);\n\n const canRerouteToSummary = [\n SLUGS.TAKE_PORTRAIT_PHOTO,\n SLUGS.TAKE_ID_PHOTO,\n SLUGS.GET_NAME_ID,\n ];\n\n if (reachedSummary && canRerouteToSummary.includes(originSlug)) {\n return SLUGS.SUMMARY;\n }\n\n const nextIndex = panelSteps.indexOf(originSlug) + 1;\n return nextIndex < panelSteps.length ? panelSteps[nextIndex] : null;\n};\n\n// check if the user is too far into the flow and if so, return the slug of the\n// furthest panel they are allow to be.\nexport const useVerificationRedirectSlug = (slug) => {\n const { facePhotoFile, idPhotoFile } = useContext(IdVerificationContext);\n const indexOfCurrentPanel = panelSteps.indexOf(slug);\n if (!facePhotoFile) {\n if (indexOfCurrentPanel > panelSteps.indexOf(SLUGS.TAKE_PORTRAIT_PHOTO)) {\n return SLUGS.PORTRAIT_PHOTO_CONTEXT;\n }\n } else if (!idPhotoFile) {\n if (indexOfCurrentPanel > panelSteps.indexOf(SLUGS.TAKE_ID_PHOTO)) {\n return SLUGS.ID_CONTEXT;\n }\n }\n\n // The user has satisfied requirements to view the panel they're on.\n return null;\n};\n","import React, { useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Redirect } from 'react-router';\nimport { useVerificationRedirectSlug } from '../routing-utilities';\n\nexport default function BasePanel({\n children,\n focusOnMount,\n name,\n title,\n}) {\n const headingRef = useRef();\n\n // focus heading element on mount\n useEffect(() => {\n if (focusOnMount && headingRef.current) {\n headingRef.current.focus();\n }\n }, [headingRef.current]);\n\n const redirectSlug = useVerificationRedirectSlug(name);\n if (redirectSlug) {\n return ;\n }\n\n return (\n
    \n

    {title}

    \n {children}\n
    \n );\n}\n\nBasePanel.propTypes = {\n children: PropTypes.node.isRequired,\n focusOnMount: PropTypes.bool,\n name: PropTypes.string.isRequired,\n title: PropTypes.node.isRequired,\n};\n\nBasePanel.defaultProps = {\n focusOnMount: true,\n};\n","export default __webpack_public_path__ + \"aa09931681f3615fc1365e7fb8df2624.png\";","import React, { useEffect, useContext } from 'react';\nimport { Link } from 'react-router-dom';\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { injectIntl, intlShape, FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { Alert, Hyperlink } from '@edx/paragon';\n\nimport { useNextPanelSlug } from '../routing-utilities';\nimport BasePanel from './BasePanel';\n\nimport IdVerificationContext from '../IdVerificationContext';\nimport messages from '../IdVerification.messages';\nimport exampleCard from '../assets/example-card.png';\n\nfunction ReviewRequirementsPanel(props) {\n const { userId, profileDataManager } = useContext(IdVerificationContext);\n const panelSlug = 'review-requirements';\n const nextPanelSlug = useNextPanelSlug(panelSlug);\n\n useEffect(() => {\n sendTrackEvent('edx.id_verification.started', {\n category: 'id_verification',\n user_id: userId,\n });\n }, [userId]);\n\n function renderManagedProfileMessage() {\n if (!profileDataManager) {\n return null;\n }\n\n return (\n
    \n \n {profileDataManager},\n profileDataManager,\n support: (\n \n {props.intl.formatMessage(messages['id.verification.support'])}\n \n ),\n }}\n />\n \n
    \n );\n }\n\n return (\n \n {renderManagedProfileMessage()}\n

    \n {props.intl.formatMessage(messages['id.verification.requirements.description'])}\n

    \n
    \n
    \n
    \n {props.intl.formatMessage(messages['id.verification.requirements.card.device.title'])}\n
    \n

    \n {props.intl.formatMessage(messages['id.verification.requirements.card.device.allow'])},\n }}\n />\n

    \n
    \n
    \n
    \n
    \n
    \n {props.intl.formatMessage(messages['id.verification.requirements.card.id.title'])}\n
    \n

    \n {props.intl.formatMessage(messages['id.verification.requirements.card.id.text'])}\n \n

    \n
    \n
    \n

    \n {props.intl.formatMessage(messages['id.verification.privacy.title'])}\n

    \n
    \n {props.intl.formatMessage(\n messages['id.verification.privacy.need.photo.question'],\n { siteName: getConfig().SITE_NAME },\n )}\n
    \n

    \n {props.intl.formatMessage(messages['id.verification.privacy.need.photo.answer'])}\n

    \n
    \n {props.intl.formatMessage(\n messages['id.verification.privacy.do.with.photo.question'],\n { siteName: getConfig().SITE_NAME },\n )}\n
    \n

    \n {props.intl.formatMessage(\n messages['id.verification.privacy.do.with.photo.answer'],\n { siteName: getConfig().SITE_NAME },\n )}\n

    \n\n
    \n \n {props.intl.formatMessage(messages['id.verification.next'])}\n \n
    \n \n );\n}\n\nReviewRequirementsPanel.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(ReviewRequirementsPanel);\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport messages from '../IdVerification.messages';\n\nexport function EnableCameraDirectionsPanel(props) {\n if (props.browserName === 'Internet Explorer') {\n return (\n <>\n
    {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.ie11'])}
    \n
      \n
    1. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.ie11.step1'])}
    2. \n
    3. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.ie11.step2'])}
    4. \n
    5. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.ie11.step3'])}
    6. \n
    \n \n );\n }\n if (props.browserName === 'Chrome') {\n return (\n <>\n
    {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.chrome'])}
    \n
      \n
    1. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.chrome.step1'])}
    2. \n
    3. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.chrome.step2'])}
    4. \n
        \n
      • {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.chrome.step2.windows'])}
      • \n
      • {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.chrome.step2.mac'])}
      • \n
      \n
    5. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.chrome.step3'])}
    6. \n
    7. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.chrome.step4'])}
    8. \n
    9. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.chrome.step5'])}
    10. \n
    \n \n );\n }\n if (props.browserName === 'Firefox') {\n return (\n <>\n
    {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.firefox'])}
    \n
      \n
    1. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.firefox.step1'])}
    2. \n
    3. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.firefox.step2'])}
    4. \n
    5. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.firefox.step3'])}
    6. \n
    7. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.firefox.step4'])}
    8. \n
    9. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.firefox.step5'])}
    10. \n
    11. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.firefox.step6'])}
    12. \n
    13. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.firefox.step7'])}
    14. \n
    \n \n );\n }\n if (props.browserName === 'Safari') {\n return (\n <>\n
    {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.safari'])}
    \n
      \n
    1. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.safari.step1'])}
    2. \n
    3. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.safari.step2'])}
    4. \n
    5. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.safari.step3'])}
    6. \n
    7. {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary.safari.step4'])}
    8. \n
    \n \n );\n }\n return <>;\n}\n\nEnableCameraDirectionsPanel.propTypes = {\n intl: intlShape.isRequired,\n browserName: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(EnableCameraDirectionsPanel);\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport messages from '../IdVerification.messages';\n\nexport function UnsupportedCameraDirectionsPanel(props) {\n return (\n <>\n {props.browserName === 'Chrome' && {props.intl.formatMessage(messages['id.verification.camera.access.failure.unsupported.chrome.explanation'])}}\n \n {props.intl.formatMessage(messages['id.verification.camera.access.failure.unsupported.instructions'])}\n \n );\n}\n\nUnsupportedCameraDirectionsPanel.propTypes = {\n intl: intlShape.isRequired,\n browserName: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(UnsupportedCameraDirectionsPanel);\n","import React, { useEffect, useContext } from 'react';\nimport { Link } from 'react-router-dom';\nimport Bowser from 'bowser';\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { injectIntl, intlShape, FormattedMessage } from '@edx/frontend-platform/i18n';\n\nimport { useRedirect } from '../../hooks';\nimport { useNextPanelSlug } from '../routing-utilities';\nimport BasePanel from './BasePanel';\nimport IdVerificationContext, { MEDIA_ACCESS } from '../IdVerificationContext';\nimport { EnableCameraDirectionsPanel } from './EnableCameraDirectionsPanel';\nimport { UnsupportedCameraDirectionsPanel } from './UnsupportedCameraDirectionsPanel';\n\nimport messages from '../IdVerification.messages';\n\nfunction RequestCameraAccessPanel(props) {\n const { location: returnUrl, text: returnText } = useRedirect();\n const panelSlug = 'request-camera-access';\n const nextPanelSlug = useNextPanelSlug(panelSlug);\n const {\n tryGetUserMedia, mediaAccess, userId,\n } = useContext(IdVerificationContext);\n const browserName = Bowser.parse(window.navigator.userAgent).browser.name;\n\n useEffect(() => {\n if (mediaAccess === MEDIA_ACCESS.UNSUPPORTED) {\n sendTrackEvent('edx.id_verification.camera.unsupported', {\n category: 'id_verification',\n user_id: userId,\n });\n }\n if (mediaAccess === MEDIA_ACCESS.DENIED) {\n sendTrackEvent('edx.id_verification.camera.denied', {\n category: 'id_verification',\n user_id: userId,\n });\n }\n }, [mediaAccess, userId]);\n\n const getTitle = () => {\n if (mediaAccess === MEDIA_ACCESS.GRANTED) {\n return props.intl.formatMessage(messages['id.verification.camera.access.title.success']);\n }\n if ([MEDIA_ACCESS.UNSUPPORTED, MEDIA_ACCESS.DENIED].includes(mediaAccess)) {\n return props.intl.formatMessage(messages['id.verification.camera.access.title.failed']);\n }\n return props.intl.formatMessage(messages['id.verification.camera.access.title']);\n };\n\n const returnLink = (\n \n {props.intl.formatMessage(messages[returnText])}\n \n );\n\n return (\n \n {mediaAccess === MEDIA_ACCESS.PENDING && (\n
    \n

    \n {props.intl.formatMessage(messages['id.verification.camera.access.click.allow'])},\n }}\n />\n

    \n
    \n \n
    \n
    \n )}\n\n {mediaAccess === MEDIA_ACCESS.GRANTED && (\n
    \n

    \n {props.intl.formatMessage(messages['id.verification.camera.access.success'])}\n

    \n
    \n \n {props.intl.formatMessage(messages['id.verification.next'])}\n \n
    \n
    \n )}\n\n {mediaAccess === MEDIA_ACCESS.DENIED && (\n
    \n

    \n {props.intl.formatMessage(messages['id.verification.camera.access.failure.temporary'])}\n

    \n \n
    \n {returnLink}\n
    \n
    \n )}\n\n {mediaAccess === MEDIA_ACCESS.UNSUPPORTED && (\n
    \n

    \n {props.intl.formatMessage(messages['id.verification.camera.access.failure.unsupported'])}\n

    \n \n
    \n {returnLink}\n
    \n
    \n )}\n\n \n );\n}\n\nRequestCameraAccessPanel.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(RequestCameraAccessPanel);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Collapsible } from '@edx/paragon';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport messages from './IdVerification.messages';\n\nfunction CameraHelp(props) {\n return (\n
    \n \n

    \n {props.intl.formatMessage(messages[`id.verification.camera.help.sight.answer.${props.isPortrait ? 'portrait' : 'id'}`])}\n

    \n \n \n

    \n {props.intl.formatMessage(\n messages['id.verification.camera.help.difficulty.answer'],\n { siteName: getConfig().SITE_NAME },\n )}\n

    \n \n
    \n );\n}\n\nCameraHelp.propTypes = {\n intl: intlShape.isRequired,\n isOpen: PropTypes.bool,\n isPortrait: PropTypes.bool,\n};\n\nCameraHelp.defaultProps = {\n isOpen: false,\n isPortrait: false,\n};\n\nexport default injectIntl(CameraHelp);\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport { useNextPanelSlug } from '../routing-utilities';\nimport BasePanel from './BasePanel';\nimport CameraHelp from '../CameraHelp';\nimport messages from '../IdVerification.messages';\n\nfunction PortraitPhotoContextPanel(props) {\n const panelSlug = 'portrait-photo-context';\n const nextPanelSlug = useNextPanelSlug(panelSlug);\n return (\n \n

    \n {props.intl.formatMessage(messages['id.verification.photo.tips.description'])}\n

    \n
    \n
    \n
    \n {props.intl.formatMessage(messages['id.verification.photo.tips.list.title'])}\n
    \n

    \n {props.intl.formatMessage(messages['id.verification.photo.tips.list.description'])}\n

    \n
      \n
    • \n {props.intl.formatMessage(messages['id.verification.photo.tips.list.well.lit'])}\n
    • \n
    • \n {props.intl.formatMessage(messages['id.verification.photo.tips.list.inside.frame'])}\n
    • \n
    \n
    \n
    \n \n
    \n \n {props.intl.formatMessage(messages['id.verification.next'])}\n \n
    \n \n );\n}\n\nPortraitPhotoContextPanel.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(PortraitPhotoContextPanel);\n","/* eslint-disable jsx-a11y/media-has-caption */\n/* eslint-disable jsx-a11y/no-access-key */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\n// eslint-disable-next-line import/no-unresolved\nimport * as blazeface from '@tensorflow-models/blazeface';\nimport CameraPhoto, { FACING_MODES } from 'jslib-html5-camera-photo';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Form, Spinner } from '@edx/paragon';\n\nimport shutter from './data/camera-shutter.base64.json';\nimport messages from './IdVerification.messages';\n\nclass Camera extends React.Component {\n constructor(props, context) {\n super(props, context);\n this.cameraPhoto = null;\n this.videoRef = React.createRef();\n this.canvasRef = React.createRef();\n this.setDetection = this.setDetection.bind(this);\n this.state = {\n dataUri: '',\n videoHasLoaded: false,\n shouldDetect: false,\n isFinishedLoadingDetection: true,\n shouldGiveFeedback: true,\n feedback: '',\n };\n }\n\n componentDidMount() {\n this.cameraPhoto = new CameraPhoto(this.videoRef.current);\n this.cameraPhoto.startCamera(\n this.props.isPortrait ? FACING_MODES.USER : FACING_MODES.ENVIRONMENT,\n { width: 640, height: 480 },\n );\n }\n\n async componentWillUnmount() {\n this.cameraPhoto.stopCamera();\n }\n\n setDetection() {\n this.setState(\n (state) => ({ shouldDetect: !state.shouldDetect }),\n () => {\n if (this.state.shouldDetect) {\n this.setState({ isFinishedLoadingDetection: false });\n this.startDetection();\n }\n this.sendEvent();\n },\n );\n }\n\n setVideoHasLoaded() {\n this.setState({ videoHasLoaded: 'true' });\n }\n\n getGridPosition(coordinates) {\n // Used to determine where a face is (i.e. top-left, center-right, bottom-center, etc.)\n\n const x = coordinates[0];\n const y = coordinates[1];\n\n let messageBase = 'id.verification.photo.feedback';\n\n const heightUpperLimit = 320;\n const heightMiddleLimit = 160;\n\n if (y < heightMiddleLimit) {\n messageBase += '.top';\n } else if (y < heightUpperLimit && y >= heightMiddleLimit) {\n messageBase += '.center';\n } else {\n messageBase += '.bottom';\n }\n\n const widthRightLimit = 213;\n const widthMiddleLimit = 427;\n\n if (x < widthRightLimit) {\n messageBase += '.right';\n } else if (x >= widthRightLimit && x < widthMiddleLimit) {\n messageBase += '.center';\n } else {\n messageBase += '.left';\n }\n\n return messageBase;\n }\n\n getSizeFactor() {\n let sizeFactor = 1;\n const settings = this.cameraPhoto.getCameraSettings();\n if (settings) {\n const videoWidth = settings.width;\n const videoHeight = settings.height;\n // need to multiply by 3 because each pixel contains 3 bytes\n const currentSize = videoWidth * videoHeight * 3;\n // chose a limit of 9,999,999 (bytes) so that result will\n // always be less than 10MB\n const ratio = 9999999 / currentSize;\n\n if (ratio < 1) {\n // if the current resolution creates an image larger than 10 MB, adjust sizeFactor (resolution)\n // to ensure that image will have a file size of less than 10 MB.\n sizeFactor = ratio;\n } else if (videoWidth === 640 && videoHeight === 480) {\n // otherwise increase the resolution to try and prevent blurry images.\n sizeFactor = 2;\n }\n }\n return sizeFactor;\n }\n\n detectFromVideoFrame = (model, video) => {\n model.estimateFaces(video).then((predictions) => {\n if (this.state.shouldDetect && !this.state.dataUri) {\n this.showDetections(predictions);\n\n requestAnimationFrame(() => {\n this.detectFromVideoFrame(model, video);\n });\n }\n });\n };\n\n showDetections = (predictions) => {\n let canvasContext;\n if (predictions.length > 0) {\n canvasContext = this.canvasRef.current.getContext('2d');\n canvasContext.clearRect(0, 0, canvasContext.canvas.width, canvasContext.canvas.height);\n }\n // predictions is an array of objects describing each detected face\n predictions.forEach((prediction) => {\n const start = [prediction.topLeft[0], prediction.topLeft[1]];\n const end = [prediction.bottomRight[0], prediction.bottomRight[1]];\n const size = [end[0] - start[0], end[1] - start[1]];\n\n // landmarks is an array of points representing each facial landmark (i.e. right eye, left eye, nose, etc.)\n const features = prediction.landmarks;\n let isInPosition = true;\n\n // for each of the landmarks, determine if it is in position\n for (let j = 0; j < features.length; j++) {\n const x = features[j][0];\n const y = features[j][1];\n\n let isInRange;\n if (this.props.isPortrait) {\n isInRange = this.isInRangeForPortrait(x, y);\n } else {\n isInRange = this.isInRangeForID(x, y);\n }\n // if it is not in range, give feedback depending on which feature is out of range\n isInPosition = isInPosition && isInRange;\n }\n\n // draw a box depending on if all landmarks are in position\n if (isInPosition) {\n canvasContext.strokeStyle = '#00ffff';\n canvasContext.lineWidth = 6;\n canvasContext.strokeRect(start[0], start[1], size[0], size[1]);\n // give positive feedback here if user is in correct position\n this.giveFeedback(predictions.length, [], true);\n } else {\n canvasContext.fillStyle = 'rgba(255, 51, 0, 0.75)';\n canvasContext.fillRect(start[0], start[1], size[0], size[1]);\n this.giveFeedback(predictions.length, features[0], false);\n }\n });\n\n if (predictions.length === 0) {\n this.giveFeedback(predictions.length, [], false);\n }\n }\n\n startDetection() {\n setTimeout(() => {\n if (this.state.videoHasLoaded) {\n const loadModelPromise = blazeface.load();\n Promise.all([loadModelPromise])\n .then((values) => {\n this.setState({ isFinishedLoadingDetection: true });\n this.detectFromVideoFrame(values[0], this.videoRef.current);\n });\n } else {\n this.setState({ isFinishedLoadingDetection: true });\n this.setState({ shouldDetect: false });\n // TODO: add error message\n }\n }, 1000);\n }\n\n sendEvent() {\n let eventName = 'edx.id_verification';\n if (this.props.isPortrait) {\n eventName += '.user_photo';\n } else {\n eventName += '.id_photo';\n }\n\n if (this.state.shouldDetect) {\n eventName += '.face_detection_enabled';\n } else {\n eventName += '.face_detection_disabled';\n }\n sendTrackEvent(eventName);\n }\n\n giveFeedback(numFaces, rightEye, isCorrect) {\n if (this.state.shouldGiveFeedback) {\n const currentFeedback = this.state.feedback;\n let newFeedback = '';\n if (numFaces === 1) {\n // only give feedback if one face is detected otherwise\n // it would be difficult to tell a user which face to move\n if (isCorrect) {\n newFeedback = this.props.intl.formatMessage(messages['id.verification.photo.feedback.correct']);\n } else {\n // give feedback based on where user is\n newFeedback = this.props.intl.formatMessage(messages[this.getGridPosition(rightEye)]);\n }\n } else if (numFaces > 1) {\n newFeedback = this.props.intl.formatMessage(messages['id.verification.photo.feedback.two.faces']);\n } else {\n newFeedback = this.props.intl.formatMessage(messages['id.verification.photo.feedback.no.faces']);\n }\n if (currentFeedback !== newFeedback) {\n // only update status if it is different, so we don't overload the user with status updates\n this.setState({ feedback: newFeedback });\n }\n // turn off feedback for one to ensure that instructions aren't disruptive/interrupting\n this.setState({ shouldGiveFeedback: false });\n setTimeout(() => {\n this.setState({ shouldGiveFeedback: true });\n }, 1000);\n }\n }\n\n isInRangeForPortrait(x, y) {\n return x > 47 && x < 570 && y > 100 && y < 410;\n }\n\n isInRangeForID(x, y) {\n return x > 120 && x < 470 && y > 120 && y < 350;\n }\n\n takePhoto() {\n if (this.state.dataUri) {\n this.reset();\n return;\n }\n\n const config = {\n sizeFactor: this.getSizeFactor(),\n };\n\n this.playShutterClick();\n const dataUri = this.cameraPhoto.getDataUri(config);\n this.setState({ dataUri });\n this.props.onImageCapture(dataUri);\n }\n\n playShutterClick() {\n const audio = new Audio(`data:audio/mp3;base64,${shutter.base64}`);\n audio.play();\n }\n\n reset() {\n this.setState({ dataUri: '' });\n if (this.state.shouldDetect) {\n this.startDetection();\n }\n }\n\n render() {\n const cameraFlashClass = this.state.dataUri\n ? 'do-transition camera-flash'\n : 'camera-flash';\n return (\n
    \n \n \n {!this.state.isFinishedLoadingDetection && }\n \n {this.props.isPortrait\n ? this.props.intl.formatMessage(messages['id.verification.photo.enable.detection.portrait.help.text'])\n : this.props.intl.formatMessage(messages['id.verification.photo.enable.detection.id.help.text'])}\n \n \n
    \n
    \n { this.setVideoHasLoaded(); }}\n style={{\n display: this.state.dataUri ? 'none' : 'block',\n WebkitTransform: 'scaleX(-1)',\n transform: 'scaleX(-1)',\n }}\n playsInline\n />\n \n \n
    {this.state.feedback}
    \n
    \n {\n this.takePhoto();\n }}\n >\n {this.state.dataUri\n ? this.props.intl.formatMessage(messages['id.verification.photo.retake'])\n : this.props.intl.formatMessage(messages['id.verification.photo.take'])}\n \n
    \n );\n }\n}\n\nCamera.propTypes = {\n intl: intlShape.isRequired,\n onImageCapture: PropTypes.func.isRequired,\n isPortrait: PropTypes.bool.isRequired,\n};\n\nexport default injectIntl(Camera);\n","import React, { useContext, useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport { useNextPanelSlug } from '../routing-utilities';\nimport BasePanel from './BasePanel';\nimport Camera from '../Camera';\nimport CameraHelp from '../CameraHelp';\nimport IdVerificationContext from '../IdVerificationContext';\n\nimport messages from '../IdVerification.messages';\n\nfunction TakePortraitPhotoPanel(props) {\n const panelSlug = 'take-portrait-photo';\n const nextPanelSlug = useNextPanelSlug(panelSlug);\n const { setFacePhotoFile, facePhotoFile } = useContext(IdVerificationContext);\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n // This prevents focus switching to the heading when taking a photo\n setMounted(true);\n }, []);\n\n return (\n \n
    \n

    \n {props.intl.formatMessage(messages['id.verification.portrait.photo.instructions.camera'])}\n

    \n \n
    \n \n
    \n \n {props.intl.formatMessage(messages['id.verification.next'])}\n \n
    \n \n );\n}\n\nTakePortraitPhotoPanel.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(TakePortraitPhotoPanel);\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport { useNextPanelSlug } from '../routing-utilities';\nimport BasePanel from './BasePanel';\nimport CameraHelp from '../CameraHelp';\nimport messages from '../IdVerification.messages';\nimport exampleCard from '../assets/example-card.png';\n\nfunction IdContextPanel(props) {\n const panelSlug = 'id-context';\n const nextPanelSlug = useNextPanelSlug(panelSlug);\n return (\n \n

    {props.intl.formatMessage(messages['id.verification.id.tips.description'])}

    \n
    \n
    \n
    \n {props.intl.formatMessage(messages['id.verification.photo.tips.list.title'])}\n
    \n

    \n {props.intl.formatMessage(messages['id.verification.photo.tips.list.description'])}\n

    \n
      \n
    • \n {props.intl.formatMessage(messages['id.verification.id.tips.list.well.lit'])}\n
    • \n
    • \n {props.intl.formatMessage(messages['id.verification.id.tips.list.clear'])}\n
    • \n
    \n \n
    \n
    \n \n
    \n \n {props.intl.formatMessage(messages['id.verification.next'])}\n \n
    \n \n );\n}\n\nIdContextPanel.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(IdContextPanel);\n","import React, {\n useContext, useEffect, useRef,\n} from 'react';\nimport { Form } from '@edx/paragon';\nimport { Link, useHistory } from 'react-router-dom';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport { useNextPanelSlug } from '../routing-utilities';\nimport BasePanel from './BasePanel';\nimport IdVerificationContext from '../IdVerificationContext';\n\nimport messages from '../IdVerification.messages';\n\nfunction GetNameIdPanel(props) {\n const { push, location } = useHistory();\n const nameInputRef = useRef();\n const panelSlug = 'get-name-id';\n const nextPanelSlug = useNextPanelSlug(panelSlug);\n\n const { nameOnAccount, idPhotoName, setIdPhotoName } = useContext(IdVerificationContext);\n const nameOnAccountValue = nameOnAccount || '';\n\n useEffect(() => {\n if (idPhotoName === null) {\n setIdPhotoName(nameOnAccountValue);\n }\n\n if (location.state?.fromSummary && nameInputRef.current) {\n nameInputRef.current.focus();\n }\n }, []);\n\n function handleSubmit(e) {\n e.preventDefault();\n if (idPhotoName) {\n push(nextPanelSlug);\n }\n }\n\n return (\n \n

    \n {props.intl.formatMessage(messages['id.verification.name.check.instructions'])}\n

    \n

    \n {props.intl.formatMessage(messages['id.verification.name.check.mismatch.information'])}\n

    \n\n
    \n \n \n {props.intl.formatMessage(messages['id.verification.name.label'])}\n \n setIdPhotoName(e.target.value)}\n data-testid=\"name-input\"\n />\n {!idPhotoName && (\n \n {props.intl.formatMessage(messages['id.verification.name.error'])}\n \n )}\n \n
    \n\n
    \n \n {props.intl.formatMessage(messages['id.verification.next'])}\n \n
    \n \n );\n}\n\nGetNameIdPanel.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(GetNameIdPanel);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nexport default function ImagePreview({ src, alt, id }) {\n return (\n
    \n\n {alt}\n\n
    \n );\n}\n\nImagePreview.propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string.isRequired,\n id: PropTypes.string,\n};\n\nImagePreview.defaultProps = {\n id: undefined,\n};\n","import React from 'react';\n\nexport default function SupportedMediaTypes() {\n const SUPPORTED_TYPES = ['.png', '.jpeg', '.jpg', '.bmp', '.webp', '.tiff'];\n\n const getSupportedTypes = () => SUPPORTED_TYPES.map((type, index) => {\n if (index === SUPPORTED_TYPES.length - 1) {\n return type;\n }\n return `${type}, `;\n });\n\n return {getSupportedTypes()};\n}\n","import React, { useCallback, useState } from 'react';\nimport { intlShape } from '@edx/frontend-platform/i18n';\nimport PropTypes from 'prop-types';\nimport { Alert } from '@edx/paragon';\nimport messages from './IdVerification.messages';\nimport SupportedMediaTypes from './SupportedMediaTypes';\n\nexport default function ImageFileUpload({ onFileChange, intl }) {\n const [error, setError] = useState(null);\n const errorTypes = {\n invalidFileType: 'invalidFileType',\n fileTooLarge: 'fileTooLarge',\n };\n const maxFileSize = 10000000;\n\n const handleChange = useCallback((e) => {\n if (e.target.files.length === 0) {\n return;\n }\n\n const fileObject = e.target.files[0];\n if (!fileObject.type.startsWith('image')) {\n setError(errorTypes.invalidFileType);\n } else if (fileObject.size >= maxFileSize) {\n setError(errorTypes.fileTooLarge);\n } else {\n setError(null);\n const fileReader = new FileReader();\n fileReader.addEventListener('load', () => {\n onFileChange(fileReader.result);\n });\n fileReader.readAsDataURL(fileObject);\n }\n }, []);\n\n return (\n <>\n \n {error && (\n \n {intl.formatMessage(messages[`id.verification.id.photo.instructions.upload.error.${error}`])}\n \n \n )}\n \n );\n}\n\nImageFileUpload.propTypes = {\n onFileChange: PropTypes.func.isRequired,\n intl: intlShape.isRequired,\n};\n","import React, { useContext } from 'react';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button, Collapsible } from '@edx/paragon';\n\nimport IdVerificationContext from './IdVerificationContext';\nimport messages from './IdVerification.messages';\n\nfunction CollapsibleImageHelp(props) {\n const {\n userId, useCameraForId, setUseCameraForId,\n } = useContext(IdVerificationContext);\n\n function handleClick() {\n const toggleTo = useCameraForId ? 'upload' : 'camera';\n const eventName = `edx.id_verification.toggle_to.${toggleTo}`;\n sendTrackEvent(eventName, {\n category: 'id_verification',\n user_id: userId,\n });\n setUseCameraForId(!useCameraForId);\n }\n\n return (\n \n

    \n {useCameraForId\n ? props.intl.formatMessage(messages['id.verification.photo.upload.help.text'])\n : props.intl.formatMessage(messages['id.verification.photo.camera.help.text'])}\n

    \n \n {useCameraForId\n ? props.intl.formatMessage(messages['id.verification.photo.upload.help.button'])\n : props.intl.formatMessage(messages['id.verification.photo.camera.help.button'])}\n \n \n );\n}\n\nCollapsibleImageHelp.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CollapsibleImageHelp);\n","import React, { useContext, useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport { useNextPanelSlug } from '../routing-utilities';\nimport BasePanel from './BasePanel';\nimport Camera from '../Camera';\nimport IdVerificationContext from '../IdVerificationContext';\n\nimport messages from '../IdVerification.messages';\nimport CameraHelp from '../CameraHelp';\nimport ImagePreview from '../ImagePreview';\nimport ImageFileUpload from '../ImageFileUpload';\nimport CollapsibleImageHelp from '../CollapsibleImageHelp';\nimport SupportedMediaTypes from '../SupportedMediaTypes';\n\nfunction TakeIdPhotoPanel(props) {\n const panelSlug = 'take-id-photo';\n const nextPanelSlug = useNextPanelSlug(panelSlug);\n const { setIdPhotoFile, idPhotoFile, useCameraForId } = useContext(IdVerificationContext);\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n // This prevents focus switching to the heading when taking a photo\n setMounted(true);\n }, []);\n\n return (\n \n
    \n {idPhotoFile && !useCameraForId && (\n \n )}\n\n {useCameraForId ? (\n
    \n

    \n {props.intl.formatMessage(messages['id.verification.id.photo.instructions.camera'])}\n

    \n \n
    \n ) : (\n
    \n

    \n {props.intl.formatMessage(messages['id.verification.id.photo.instructions.upload'])}\n \n

    \n \n
    \n )}\n
    \n {useCameraForId && }\n \n
    \n \n {props.intl.formatMessage(messages['id.verification.next'])}\n \n
    \n \n );\n}\n\nTakeIdPhotoPanel.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(TakeIdPhotoPanel);\n","import React, { useState, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { Collapsible } from '@edx/paragon';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\nimport messages from './IdVerification.messages';\nimport ImageFileUpload from './ImageFileUpload';\nimport IdVerificationContext from './IdVerificationContext';\nimport ImagePreview from './ImagePreview';\nimport SupportedMediaTypes from './SupportedMediaTypes';\n\nfunction CameraHelpWithUpload(props) {\n const { setIdPhotoFile, idPhotoFile, userId } = useContext(IdVerificationContext);\n const [hasUploadedImage, setHasUploadedImage] = useState(false);\n\n function setAndTrackIdPhotoFile(image) {\n sendTrackEvent('edx.id_verification.upload_id', {\n category: 'id_verification',\n user_id: userId,\n });\n setHasUploadedImage(true);\n setIdPhotoFile(image);\n }\n\n return (\n
    \n \n {idPhotoFile && hasUploadedImage && }\n

    \n {props.intl.formatMessage(messages['id.verification.id.photo.instructions.upload'])}\n \n

    \n \n \n
    \n );\n}\n\nCameraHelpWithUpload.propTypes = {\n intl: intlShape.isRequired,\n isOpen: PropTypes.bool,\n};\n\nCameraHelpWithUpload.defaultProps = {\n isOpen: false,\n};\n\nexport default injectIntl(CameraHelpWithUpload);\n","import React, { useState, useContext, useEffect } from 'react';\nimport { getConfig, history } from '@edx/frontend-platform';\nimport {\n Alert, Hyperlink, Input, Button, Spinner,\n} from '@edx/paragon';\nimport { Link } from 'react-router-dom';\nimport { injectIntl, intlShape, FormattedMessage } from '@edx/frontend-platform/i18n';\n\nimport { submitIdVerification } from '../data/service';\nimport { useNextPanelSlug } from '../routing-utilities';\nimport BasePanel from './BasePanel';\nimport IdVerificationContext from '../IdVerificationContext';\nimport ImagePreview from '../ImagePreview';\n\nimport messages from '../IdVerification.messages';\nimport CameraHelpWithUpload from '../CameraHelpWithUpload';\nimport SupportedMediaTypes from '../SupportedMediaTypes';\n\nfunction SummaryPanel(props) {\n const panelSlug = 'summary';\n const nextPanelSlug = useNextPanelSlug(panelSlug);\n const {\n facePhotoFile,\n idPhotoFile,\n profileDataManager,\n nameOnAccount,\n idPhotoName,\n stopUserMedia,\n setReachedSummary,\n } = useContext(IdVerificationContext);\n const nameToBeUsed = idPhotoName || nameOnAccount || '';\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [submissionError, setSubmissionError] = useState(null);\n\n useEffect(() => setReachedSummary(true), []);\n\n function renderManagedProfileMessage() {\n if (!profileDataManager) {\n return null;\n }\n\n return (\n

    \n {profileDataManager},\n profileDataManager,\n support: (\n \n {props.intl.formatMessage(messages['id.verification.support'])}\n \n ),\n }}\n />\n

    \n );\n }\n\n function SubmitButton() {\n async function handleClick() {\n setIsSubmitting(true);\n const verificationData = {\n facePhotoFile,\n idPhotoFile,\n courseRunKey: sessionStorage.getItem('courseRunKey'),\n };\n if (idPhotoName) {\n verificationData.idPhotoName = idPhotoName;\n } else {\n /**\n * If learner has not entered an idPhotoName on the GetNameIdPanel,\n * use the current nameOnAccount when submitting IDV.\n */\n verificationData.idPhotoName = nameOnAccount;\n }\n const result = await submitIdVerification(verificationData);\n if (result.success) {\n stopUserMedia();\n history.push(nextPanelSlug);\n } else {\n stopUserMedia();\n setIsSubmitting(false);\n setSubmissionError(result);\n }\n }\n return (\n \n {props.intl.formatMessage(messages['id.verification.review.confirm'])}\n \n );\n }\n\n function getError() {\n if (submissionError.status === 400) {\n if (submissionError.message.includes('face_image')) {\n return props.intl.formatMessage(messages['id.verification.submission.alert.error.face']);\n }\n if (submissionError.message.includes('Photo ID image')) {\n return props.intl.formatMessage(messages['id.verification.submission.alert.error.id']);\n }\n if (submissionError.message.includes('Name')) {\n return props.intl.formatMessage(messages['id.verification.submission.alert.error.name']);\n }\n if (submissionError.message.includes('unsupported format')) {\n return (\n <>\n {props.intl.formatMessage(messages['id.verification.submission.alert.error.unsupported'])}\n \n \n );\n }\n }\n return (\n \n {props.intl.formatMessage(\n messages['id.verification.review.error'],\n { siteName: getConfig().SITE_NAME },\n )}\n \n ),\n }}\n />\n );\n }\n\n return (\n \n {submissionError && (\n setSubmissionError(null)}\n >\n {getError()}\n \n )}\n

    \n {props.intl.formatMessage(messages['id.verification.review.description'])}\n

    \n
    \n
    \n \n \n \n {props.intl.formatMessage(messages['id.verification.review.portrait.retake'])}\n \n
    \n
    \n \n \n \n {props.intl.formatMessage(messages['id.verification.review.id.retake'])}\n \n
    \n
    \n \n
    \n \n {renderManagedProfileMessage()}\n
    \n {}}\n aria-describedby={profileDataManager ? 'profile-manager-warning' : null}\n />\n {!profileDataManager && (\n \n Name,\n }}\n />\n \n )}\n
    \n
    \n {' '}\n {isSubmitting && }\n \n );\n}\n\nSummaryPanel.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(SummaryPanel);\n","import React, { useContext, useEffect } from 'react';\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport { useRedirect } from '../../hooks';\n\nimport IdVerificationContext from '../IdVerificationContext';\nimport messages from '../IdVerification.messages';\n\nimport BasePanel from './BasePanel';\n\nfunction SubmittedPanel(props) {\n const { userId } = useContext(IdVerificationContext);\n const { location: returnUrl, text: returnText } = useRedirect();\n const panelSlug = 'submitted';\n\n useEffect(() => {\n sendTrackEvent('edx.id_verification.submitted', {\n category: 'id_verification',\n user_id: userId,\n });\n }, [userId]);\n\n return (\n \n

    \n {props.intl.formatMessage(messages['id.verification.submitted.text'])}\n

    \n \n {props.intl.formatMessage(messages[returnText])}\n \n \n );\n}\n\nSubmittedPanel.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(SubmittedPanel);\n","import React, { useState, useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport {\n Route, Switch, Redirect, useRouteMatch, useLocation,\n} from 'react-router-dom';\nimport camelCase from 'lodash.camelcase';\nimport qs from 'qs';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Modal, Button } from '@edx/paragon';\nimport { getConfig } from '@edx/frontend-platform';\nimport { idVerificationSelector } from './data/selectors';\nimport './getUserMediaShim';\n\nimport IdVerificationContextProvider from './IdVerificationContextProvider';\nimport { VerifiedNameContextProvider } from './VerifiedNameContext';\nimport ReviewRequirementsPanel from './panels/ReviewRequirementsPanel';\nimport RequestCameraAccessPanel from './panels/RequestCameraAccessPanel';\nimport PortraitPhotoContextPanel from './panels/PortraitPhotoContextPanel';\nimport TakePortraitPhotoPanel from './panels/TakePortraitPhotoPanel';\nimport IdContextPanel from './panels/IdContextPanel';\nimport GetNameIdPanel from './panels/GetNameIdPanel';\nimport TakeIdPhotoPanel from './panels/TakeIdPhotoPanel';\nimport SummaryPanel from './panels/SummaryPanel';\nimport SubmittedPanel from './panels/SubmittedPanel';\n\nimport messages from './IdVerification.messages';\n\n// eslint-disable-next-line react/prefer-stateless-function\nfunction IdVerificationPage(props) {\n const { path } = useRouteMatch();\n const { search } = useLocation();\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n // Save query params in order to route back to the correct location later\n useEffect(() => {\n if (search) {\n const parsedQueryParams = qs.parse(search, {\n ignoreQueryPrefix: true,\n interpretNumericEntities: true,\n });\n Object.entries(parsedQueryParams).forEach(([key, value]) => {\n sessionStorage.setItem(camelCase(key), value);\n });\n }\n }, [search]);\n\n return (\n <>\n {/* If user reloads, redirect to the beginning of the process */}\n \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n \n
    \n
    \n\n \n
    \n {props.intl.formatMessage(\n messages['id.verification.privacy.need.photo.question'],\n { siteName: getConfig().SITE_NAME },\n )}\n
    \n

    {props.intl.formatMessage(messages['id.verification.privacy.need.photo.answer'])}

    \n
    \n {props.intl.formatMessage(\n messages['id.verification.privacy.do.with.photo.question'],\n { siteName: getConfig().SITE_NAME },\n )}\n
    \n

    \n {props.intl.formatMessage(\n messages['id.verification.privacy.do.with.photo.answer'],\n { siteName: getConfig().SITE_NAME },\n )}\n

    \n
    \n )}\n onClose={() => setIsModalOpen(false)}\n />\n
    \n \n );\n}\n\nIdVerificationPage.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default connect(idVerificationSelector, {})(injectIntl(IdVerificationPage));\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'account.settings.coaching.consent.welcome.header': {\n id: 'account.settings.coaching.consent.welcome.header',\n defaultMessage: 'Let’s get started.',\n description: 'The welcome header for consent form.',\n },\n 'account.settings.coaching.consent.welcome.subheader': {\n id: 'account.settings.coaching.consent.welcome.subheader',\n defaultMessage: \"We're here for you from start to finish\",\n description: 'The welcome subheader for consent form.',\n },\n 'account.settings.coaching.consent.description': {\n id: 'account.settings.coaching.consent.description',\n defaultMessage: \"MicroBachelors programs include coaching that focuses on your career, education, and how you'll achieve results through one-on-one communication with an experienced professional. If you’re interested, provide the information below and click “Submit,” and our coaching partner will connect with you via email and/or text message to help you move forward. Terms and conditions apply.*\",\n description: 'Text describing what Coaching is.',\n },\n 'account.settings.coaching.consent.text-messaging.disclaimer': {\n id: 'account.settings.coaching.consent.text-messaging.disclaimer',\n defaultMessage: '* Coaching services are included at no additional cost to learners with US phone numbers. Coaching includes recurring text messages. Message and data rates may apply. Text STOP to opt-out.',\n description: 'Text describing what Coaching is.',\n },\n 'account.settings.coaching.consent.accept-coaching': {\n id: 'account.settings.coaching.consent.accept-coaching',\n defaultMessage: 'Sign up for coaching',\n description: 'Text to confirm coaching enablement',\n },\n 'account.settings.coaching.consent.decline-coaching': {\n id: 'account.settings.coaching.consent.decline-coaching',\n defaultMessage: 'I prefer not to be contacted with free coaching services',\n description: 'Text to decline coaching enablement',\n },\n 'account.settings.coaching.consent.label.name': {\n id: 'account.settings.coaching.consent.label.name',\n defaultMessage: 'Please confirm your name',\n description: 'Label for name input',\n },\n 'account.settings.coaching.consent.label.phone-number': {\n id: 'account.settings.coaching.consent.label.phone-number',\n defaultMessage: 'Enter your mobile number',\n description: 'Label for mobile phone number input',\n },\n 'account.settings.coaching.consent.success.header': {\n id: 'account.settings.coaching.consent.success.header',\n defaultMessage: 'Success!',\n description: 'Heading announcing that submission succeeded',\n },\n 'account.settings.coaching.consent.success.message': {\n id: 'account.settings.coaching.consent.success.message',\n defaultMessage: \"You're signed up for coaching. You can expect a message via email or SMS in the coming days.\",\n description: 'Text announcing that you have signed up and will receive texts',\n },\n 'account.settings.coaching.consent.success.continue': {\n id: 'account.settings.coaching.consent.success.continue',\n defaultMessage: 'Start my course',\n description: 'Text that the user will be sent back to the courseware',\n },\n 'account.settings.coaching.managed.support': {\n id: 'account.settings.coaching.managed.support',\n defaultMessage: 'support',\n description: 'website support',\n },\n});\n\nexport default messages;\n","import React from 'react';\n\nimport { injectIntl, intlShape, FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { Input, Button, Hyperlink } from '@edx/paragon';\n\nimport PropTypes from 'prop-types';\n\nimport Alert from '../Alert';\nimport messages from './CoachingConsent.messages';\n\nconst ErrorMessage = props => (\n
    {props.message}
    \n);\n\nconst ManagedProfileAlert = ({ profileDataManager }) => (\n \n {profileDataManager},\n }}\n />\n \n);\nconst CoachingForm = props => (\n
    \n

    \n {props.intl.formatMessage(messages['account.settings.coaching.consent.welcome.header'])}\n

    \n

    {props.intl.formatMessage(messages['account.settings.coaching.consent.description'])}

    \n
    \n
    \n
    \n {!!props.profileDataManager && (\n \n )}\n \n \n \n
    \n
    \n \n \n \n
    \n
    \n

    \n {props.intl.formatMessage(messages['account.settings.coaching.consent.text-messaging.disclaimer'])}\n

    \n
    \n \n
    \n \n
    \n
    \n \n {props.intl.formatMessage(messages['account.settings.coaching.consent.decline-coaching'])}\n \n
    \n \n
    \n
    \n);\n\nCoachingForm.defaultProps = {\n formErrors: {\n coaching: '',\n name: '',\n phone_number: '',\n },\n};\n\nCoachingForm.propTypes = {\n intl: intlShape.isRequired,\n onSubmit: PropTypes.func.isRequired,\n declineCoaching: PropTypes.func.isRequired,\n formValues: PropTypes.shape({\n name: PropTypes.string,\n phone_number: PropTypes.string,\n coaching: PropTypes.shape({\n coaching_consent: PropTypes.bool.isRequired,\n user: PropTypes.number.isRequired,\n eligible_for_coaching: PropTypes.bool.isRequired,\n consent_form_seen: PropTypes.bool.isRequired,\n }),\n }).isRequired,\n formErrors: PropTypes.shape({\n coaching: PropTypes.string,\n full_name: PropTypes.string,\n phone_number: PropTypes.string,\n }),\n redirectUrl: PropTypes.string.isRequired,\n profileDataManager: PropTypes.string.isRequired,\n};\n\nErrorMessage.defaultProps = {\n message: '',\n};\n\nErrorMessage.propTypes = {\n message: PropTypes.string,\n};\n\nManagedProfileAlert.propTypes = {\n profileDataManager: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(CoachingForm);\n","var _g;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nvar SvgLogo = function SvgLogo(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 1168,\n height: 540,\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"nonzero\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#209FDA\",\n d: \"M1166.82 85.5V0H953.76v85.5h48.42l-86.32 106.48-86.4-106.48h48.64V0H718.92v95.72l137.56 169.54-137.56 169.7v17.06h65.58v87.62h93.6v-87.62h-54.18l92-113.5h.02l92.1 113.5h-54.28v87.62h213.06v-87.62h-39.96L975.32 265.26l145.7-179.76z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#026BA4\",\n d: \"M664.02 0v85.5h46.6l8.3 10.22V0zM718.92 452.02v-17.06l-13.84 17.06h-41.06v87.62H784.5v-87.62z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M322 411.86h75.66a207.66 207.66 0 0 1-37.1 60 209.02 209.02 0 0 1-38.56-60M360.56 189.28a208.3 208.3 0 0 0-46.96 83.86 122.64 122.64 0 0 1 8.58 21.56h74.88a120 120 0 0 1 8.8-21.24 209.04 209.04 0 0 0-45.3-84.18ZM322.18 294.7a128.5 128.5 0 0 1 .56 69.7h73.66a122.66 122.66 0 0 1 .6-69.7h-74.82Zm0 0h-13.5a210.32 210.32 0 0 0-.34 69.7h14.4a128.5 128.5 0 0 0-.56-69.7Z\",\n fill: \"#78212E\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M710.62 85.5h-46.6V.02h-88V85.5h56.84v73.7a201.18 201.18 0 0 0-118.2-37.72 208.42 208.42 0 0 0-154.1 67.8 209.04 209.04 0 0 1 45.24 84.18c21.144-39.959 62.652-64.95 107.86-64.94 67.4 0 119.22 54.64 119.22 122v.68c-.34 67.08-52 121.36-119.22 121.36-45.183.033-86.684-24.907-107.86-64.82a120.82 120.82 0 0 1-9.4-23.24h-88a204.12 204.12 0 0 0 5.26 23.56 207.34 207.34 0 0 0 8.4 23.9h75.6a207.66 207.66 0 0 1-37.1 60 208.42 208.42 0 0 0 154.1 67.8 200.54 200.54 0 0 0 149.36-65.42v-22.3h41.04l13.84-17.08V95.74l-8.28-10.24Zm-77.74 416.4v37.84h31.14v-65.56a202 202 0 0 1-31.14 27.72ZM313.6 273.14a203.1 203.1 0 0 0-4.92 21.56h13.5a122.64 122.64 0 0 0-8.58-21.56Z\",\n fill: \"#8A8C8F\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M410.4 294.7c-1.2-7.2-2.74-14.3-4.6-21.24a120 120 0 0 0-8.8 21.24 122.66 122.66 0 0 0-.6 69.7h14.32a223.18 223.18 0 0 0-.32-69.7ZM209.06 121.48c-101.637.008-188.552 73.092-206 173.22H91.4c15.736-51.233 63.065-86.196 116.66-86.18 44.579-.185 85.436 24.831 105.54 64.62a208.3 208.3 0 0 1 46.96-83.86 200.72 200.72 0 0 0-151.5-67.8Zm88.42 290.38a117.18 117.18 0 0 1-89.42 40.72c-54.369.018-102.188-35.942-117.26-88.18h217.54a210.32 210.32 0 0 1 .34-69.7H3.06a211.76 211.76 0 0 0-.34 69.7c16.61 101.042 103.942 175.195 206.34 175.2a200.72 200.72 0 0 0 151.5-67.86 209.02 209.02 0 0 1-38.56-60l-24.52.12Z\",\n fill: \"#B72768\"\n }))));\n};\n\nexport { SvgLogo as ReactComponent };\nexport default __webpack_public_path__ + \"36e7c65a02369e28ecc7ad327c4bfceb.svg\";","import React from 'react';\n\nimport { getConfig, getQueryParameters } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Hyperlink } from '@edx/paragon';\nimport { faCheck } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport get from 'lodash.get';\nimport { getAuthenticatedHttpClient, getAuthenticatedUser } from '@edx/frontend-platform/auth';\n\nimport PageLoading from '../PageLoading';\nimport CoachingConsentForm from './CoachingConsentForm';\nimport messages from './CoachingConsent.messages';\nimport LogoSVG from '../../logo.svg';\nimport { fetchSettings } from '../data/actions';\nimport { coachingConsentPageSelector } from '../data/selectors';\n\nconst Logo = ({ src, alt, ...attributes }) => (\n <>\n {alt}\n \n);\n\nconst SuccessMessage = props => (\n
    \n \n
    {props.header}
    \n
    {props.message}
    \n \n {props.continue}\n \n
    \n);\n\nconst AutoRedirect = (props) => {\n window.location.href = props.redirectUrl;\n return <>;\n};\n\nconst VIEWS = {\n NOT_LOADED: 'NOT_LOADED',\n LOADED: 'LOADED',\n SUCCESS: 'SUCCESS',\n SUCCESS_PENDING: 'SUCCESS_PENDING',\n DECLINED: 'DECLINED',\n DECLINE_PENDING: 'DECLINE_PENDING',\n};\n\nclass CoachingConsent extends React.Component {\n constructor(props, context) {\n super(props, context);\n\n // Used to redirect back to the courseware.\n const nextUrl = this.sanitizeForwardingUrl(getQueryParameters().next);\n this.state = {\n redirectUrl: nextUrl || `${getConfig().LMS_BASE_URL}/dashboard/`,\n formErrors: {},\n formSubmitted: false,\n declineSubmitted: false,\n submissionSuccess: false,\n };\n\n this.handleSubmit = this.handleSubmit.bind(this);\n this.declineCoaching = this.declineCoaching.bind(this);\n this.patchUsingCoachingConsentForm = this.patchUsingCoachingConsentForm.bind(this);\n }\n\n componentDidMount() {\n this.props.fetchSettings();\n }\n\n sanitizeForwardingUrl(url) {\n // Redirect to root of MFE if invalid next param is sent\n return url && url.startsWith(getConfig().LMS_BASE_URL) ? url : `${getConfig().LMS_BASE_URL}/dashboard/`;\n }\n\n async patchUsingCoachingConsentForm(body) {\n const { userId } = getAuthenticatedUser();\n const requestUrl = `${getConfig().LMS_BASE_URL}/api/coaching/v1/coaching_consent/${userId}/`;\n let formErrors = {};\n const data = await getAuthenticatedHttpClient()\n .patch(requestUrl, body)\n .catch((error) => {\n if (get(error, 'customAttributes.httpErrorResponseData')) {\n formErrors = JSON.parse(error.customAttributes.httpErrorResponseData);\n } else {\n formErrors = { full_name: 'Something went wrong. Please try again.' };\n }\n this.setState({\n submissionSuccess: false,\n formErrors,\n formSubmitted: false,\n });\n });\n if (get(data, 'status') === 200) {\n this.setState({ submissionSuccess: true });\n }\n }\n\n handleSubmit(e) {\n e.preventDefault();\n const fullName = e.target.fullName.value;\n const phoneNumber = e.target.phoneNumber.value;\n const body = {\n coaching_consent: true,\n consent_form_seen: true,\n phone_number: phoneNumber,\n full_name: fullName,\n };\n this.setState({\n formErrors: {},\n formSubmitted: true,\n declineSubmitted: false,\n }, () => this.patchUsingCoachingConsentForm(body));\n }\n\n declineCoaching(e) {\n e.preventDefault();\n const body = {\n coaching_consent: false,\n consent_form_seen: true,\n };\n this.setState({\n formErrors: {},\n formSubmitted: false,\n declineSubmitted: true,\n }, () => this.patchUsingCoachingConsentForm(body));\n }\n\n renderView(currentView) {\n switch (currentView) {\n case VIEWS.NOT_LOADED:\n return ;\n case VIEWS.LOADED:\n return (\n \n );\n case VIEWS.SUCCESS_PENDING:\n return ;\n case VIEWS.SUCCESS:\n return (\n \n );\n case VIEWS.DECLINE_PENDING:\n return ;\n case VIEWS.DECLINED:\n return ;\n default:\n return <>;\n }\n }\n\n render() {\n const { loaded } = this.props;\n const formHasErrors = Object.keys(this.state.formErrors).length > 0;\n let currentView = null;\n // This amount of logic was making the template very hard to read, so I broke it out into views.\n if (!loaded) {\n currentView = VIEWS.NOT_LOADED;\n } else if (this.state.formSubmitted && !formHasErrors) {\n if (this.state.submissionSuccess) {\n currentView = VIEWS.SUCCESS;\n } else {\n currentView = VIEWS.SUCCESS_PENDING;\n }\n } else if (this.state.declineSubmitted && !formHasErrors) {\n if (this.state.submissionSuccess) {\n currentView = VIEWS.DECLINED;\n } else {\n currentView = VIEWS.DECLINE_PENDING;\n }\n } else {\n currentView = VIEWS.LOADED;\n }\n\n return (\n
    \n
    \n \n
    \n {this.renderView(currentView)}\n
    \n );\n }\n}\n\nLogo.defaultProps = {\n src: '',\n alt: '',\n};\n\nLogo.propTypes = {\n src: PropTypes.string,\n alt: PropTypes.string,\n};\n\nSuccessMessage.defaultProps = {\n header: '',\n message: '',\n continueUrl: '',\n continue: '',\n};\n\nSuccessMessage.propTypes = {\n header: PropTypes.string,\n message: PropTypes.string,\n continueUrl: PropTypes.string,\n continue: PropTypes.string,\n};\n\nAutoRedirect.defaultProps = {\n redirectUrl: '',\n};\n\nAutoRedirect.propTypes = {\n redirectUrl: PropTypes.string,\n};\n\nCoachingConsent.defaultProps = {\n loaded: false,\n profileDataManager: null,\n};\n\nCoachingConsent.propTypes = {\n intl: intlShape.isRequired,\n loaded: PropTypes.bool,\n formValues: PropTypes.shape({\n name: PropTypes.string,\n phone_number: PropTypes.string,\n coaching: PropTypes.shape({\n coaching_consent: PropTypes.bool.isRequired,\n user: PropTypes.number.isRequired,\n eligible_for_coaching: PropTypes.bool.isRequired,\n consent_form_seen: PropTypes.bool.isRequired,\n }),\n }).isRequired,\n formErrors: PropTypes.shape({\n coaching: PropTypes.object,\n }).isRequired,\n confirmationValues: PropTypes.shape({\n coaching: PropTypes.object,\n name: PropTypes.object,\n phone_number: PropTypes.object,\n }).isRequired,\n fetchSettings: PropTypes.func.isRequired,\n profileDataManager: PropTypes.string,\n};\n\nexport default connect(coachingConsentPageSelector, {\n fetchSettings,\n})(injectIntl(CoachingConsent));\n","import deMessages from \"./messages/de_DE.json\";\nimport frMessages from \"./messages/fr.json\";\nimport zhcnMessages from \"./messages/zh_CN.json\";\n\nconst messages = {\n fr: frMessages,\n \"zh-cn\": zhcnMessages,\n \"de-de\": deMessages,\n};\n\nexport default messages;\n","import 'core-js/stable';\nimport 'regenerator-runtime/runtime';\n\nimport 'formdata-polyfill';\nimport { AppProvider, ErrorPage } from '@edx/frontend-platform/react';\nimport {\n subscribe, initialize, APP_INIT_ERROR, APP_READY, mergeConfig,\n} from '@edx/frontend-platform';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Route, Switch } from 'react-router-dom';\n\nimport Header, { messages as headerMessages } from '@edx/frontend-component-header';\nimport Footer, { messages as footerMessages } from '@edx/frontend-component-footer';\n\nimport configureStore from './data/configureStore';\nimport AccountSettingsPage, { NotFoundPage } from './account-settings';\nimport IdVerificationPage from './id-verification';\nimport CoachingConsent from './account-settings/coaching/CoachingConsent';\nimport appMessages from './i18n';\n\nimport './index.scss';\n\nsubscribe(APP_READY, () => {\n ReactDOM.render(\n \n \n \n
    \n
    \n
    \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n
    ,\n document.getElementById('root'),\n );\n});\n\nsubscribe(APP_INIT_ERROR, (error) => {\n ReactDOM.render(, document.getElementById('root'));\n});\n\ninitialize({\n messages: [\n appMessages,\n headerMessages,\n footerMessages,\n ],\n requireAuthenticatedUser: true,\n hydrateAuthenticatedUser: true,\n handlers: {\n config: () => {\n mergeConfig({\n SUPPORT_URL: process.env.SUPPORT_URL,\n COACHING_ENABLED: (process.env.COACHING_ENABLED || false),\n ENABLE_DEMOGRAPHICS_COLLECTION: (process.env.ENABLE_DEMOGRAPHICS_COLLECTION || false),\n DEMOGRAPHICS_BASE_URL: process.env.DEMOGRAPHICS_BASE_URL,\n ENABLE_COPPA_COMPLIANCE: (process.env.ENABLE_COPPA_COMPLIANCE || false),\n MARKETING_EMAILS_OPT_IN: (process.env.MARKETING_EMAILS_OPT_IN || false),\n }, 'App loadConfig override handler');\n },\n },\n});\n"],"names":["defineMessages","id","defaultMessage","description","AsyncActionType","topic","name","this","getModuleState","state","originalPath","path","length","key","shift","undefined","Error","handleFailure","error","failureAction","failureRedirectPath","fieldErrors","put","logError","message","history","unpackFieldErrors","Object","entries","reduce","acc","k","v","user_message","handleRequestError","unpackFunction","response","data","field_errors","apiError","create","FETCH_SETTINGS","SAVE_SETTINGS","SAVE_MULTIPLE_SETTINGS","FETCH_TIME_ZONES","SAVE_PREVIOUS_SITE_LANGUAGE","OPEN_FORM","CLOSE_FORM","UPDATE_DRAFT","RESET_DRAFTS","BEGIN_NAME_CHANGE","fetchSettings","type","BASE","fetchSettingsSuccess","values","thirdPartyAuthProviders","profileDataManager","timeZones","verifiedNameHistory","SUCCESS","payload","openForm","formId","closeForm","updateDraft","value","beginNameChange","saveSettings","commitValues","saveSettingsBegin","BEGIN","saveSettingsSuccess","confirmationValues","saveSettingsFailure","FAILURE","errors","savePreviousSiteLanguage","previousSiteLanguage","saveMultipleSettings","settingsArray","form","saveMultipleSettingsSuccess","saveMultipleSettingsFailure","fetchTimeZones","country","FETCH_SITE_LANGUAGES","fetchSiteLanguagesSuccess","siteLanguageList","fetchSiteLanguagesFailure","defaultState","loading","loaded","loadingError","action","RESET","code","released","getSiteLanguageList","patchPreferences","username","params","processedParams","snakeCaseObject","convertKeyNames","pref_lang","getAuthenticatedHttpClient","patch","getConfig","LMS_BASE_URL","headers","postSetLang","formData","FormData","append","post","handleFetchSiteLanguages","saga","call","takeEvery","storePath","siteLanguageSelector","siteLanguageListSelector","createSelector","siteLanguage","siteLanguageOptionsSelector","map","label","compareVerifiedNamesByCreatedDate","a","b","aTimeSinceEpoch","Date","created","getTime","storeName","accountSettingsSelector","editableFieldNameSelector","props","verifiedNameSettingsSelector","accountSettings","results","useVerifiedNameForCerts","use_verified_name_for_certs","sortedVerifiedNameHistorySelector","verifiedNameSettings","Array","isArray","sort","mostRecentVerifiedNameSelector","sortedHistory","mostRecentApprovedVerifiedNameValueSelector","mostRecentVerifiedName","approvedVerifiedNames","filter","status","approvedVerifiedName","verifiedName","valuesSelector","mostRecentApprovedVerifiedNameValue","keys","includes","verified_name","draftsSelector","drafts","previousSiteLanguageSelector","editableFieldErrorSelector","editableFieldConfirmationValuesSelector","isEditingSelector","openFormId","confirmationValuesSelector","errorSelector","nameChangeModalSelector","nameChangeModal","saveStateSelector","saveState","editableFieldSelector","createStructuredSelector","confirmationValue","isEditing","profileDataManagerSelector","staticFieldsSelector","staticFields","push","chooseFormValue","draft","committed","formValuesSelector","formValues","forEach","transformTimeZonesToOptions","timeZoneArr","time_zone","timeZonesSelector","countryTimeZonesSelector","countryTimeZones","activeAccountSelector","is_active","previousValue","betaLanguageBannerSelector","accountSettingsPageSelector","siteLanguageOptions","committedValues","formErrors","timeZoneOptions","countryTimeZoneOptions","activeAccount","isActive","tpaProviders","thirdPartyAuth","providers","certPreferenceSelector","originalFullName","originalVerifiedName","coachingConsentPageSelector","demographicsSectionSelector","nameChangeSelector","nameChange","PageLoading","srMessage","className","style","height","role","renderSrMessage","Component","propTypes","PropTypes","JumpNav","intl","displayDemographicsLink","items","currentClassName","to","formatMessage","messages","ENABLE_DEMOGRAPHICS_COLLECTION","intlShape","injectIntl","onChildExit","htmlNode","contains","document","activeElement","enteringChild","previousSibling","nextSibling","focusableElements","querySelectorAll","focus","SwitchContent","expression","cases","TransitionReplace","getContent","caseKey","React","default","isRequired","defaultProps","CertificatePreference","fieldName","dispatch","useDispatch","useState","checked","setChecked","modalIsOpen","setModalIsOpen","useEffect","Form","onChange","ModalDialog","title","isOpen","onClose","size","hasCloseButton","isFullscreenOnMobile","onSubmit","e","preventDefault","target","ActionRow","variant","disabled","commonMessages","StatefulButton","labels","disabledStates","connect","EditableField","emptyLabel","userSuppliedValue","options","confirmationMessageDefinition","helpText","onEdit","onCancel","isEditable","isGrayedOut","others","inputOptions","ENABLE_COPPA_COMPLIANCE","option","handleEdit","editing","get","ValidationFormGroup","for","invalid","invalidMessage","htmlFor","Input","children","onClick","Button","icon","faPencilAlt","rawValue","finalValue","selectedOption","find","renderValue","RESET_PASSWORD","Alert","classNames","ConfirmationAlert","email","technicalSupportLink","Hyperlink","destination","faExclamationTriangle","ResetPassword","resetPassword","FORBIDDEN","postResetPassword","formurlencoded","catch","handleResetPassword","REQUEST_NAME_CHANGE","requestNameChangeFailure","NameChangeModal","targetFormId","useHistory","getAuthenticatedUser","verifiedNameInput","setVerifiedNameInput","confirmedWarning","setConfirmedWarning","handleClose","renderTitle","encodeURIComponent","draftProfileName","profileName","requestNameChange","as","Col","isInvalid","placeholder","general_error","DISCONNECT_AUTH","disconnectAuthBegin","providerId","disconnectAuthSuccess","disconnectAuthFailure","disconnectAuthReset","ThirdPartyAuth","currentTarget","getAttribute","disconnectionStatuses","disconnectUrl","disconnectAuth","url","hasError","onClickDisconnect","connectUrl","connected","renderConnectedProvider","renderUnconnectedProvider","renderNoProviders","renderProvider","getThirdPartyAuthProviders","connect_url","disconnect_url","postDisconnectAuth","handleDisconnectAuth","postVerifiedNameConfig","requestConfig","Accept","requestUrl","postValues","getCoachingPreferences","userId","coaching_consent","user","eligible_for_coaching","consent_form_seen","patchCoachingPreferences","coaching","JSON","parse","customAttributes","httpErrorResponseData","phone_number","TO","FROM","DEMOGRAPHICS_FIELDS","convertData","dataObject","direction","converted","newValue","ethnicityData","ethnicity","convertEthnicity","replace","createDemographicsError","demographics_gender","gender_description","demographics_work_status","work_status_description","demographicsError","httpErrorType","postDemographics","DEMOGRAPHICS_BASE_URL","getDemographics","httpErrorStatus","demographics_gender_description","demographics_income","demographics_learner_education_level","demographics_parent_education_level","demographics_military_history","demographics_work_status_description","demographics_current_work_sector","demographics_future_work_sector","demographics_user_ethnicity","patchDemographics","convertedCommitValues","getDemographicsOptions","SOCIAL_PLATFORMS","unpackAccountResponseData","unpackedData","platformData","social_links","platform","social_link","language_proficiencies","packAccountCommitData","commitData","packedData","year_of_birth","getAccount","patchAccount","unpackedFieldErrors","getPreferences","getTimeZones","forCountry","country_code","getProfileDataManager","userRoles","split","enterprise","enterprise_customer","sync_learner_profile_data","shouldDisplayDemographicsQuestions","display","getVerifiedNameHistory","client","postVerifiedName","getSettings","Promise","all","COACHING_ENABLED","account","preferences","shouldDisplayDemographicsQuestionsResponse","demographics","demographicsOptions","shouldDisplayDemographicsSection","patchSettings","preferenceKeys","coachingKeys","demographicsKeys","certificateKeys","isDemographicsKey","accountCommitValues","omit","preferenceCommitValues","pick","coachingCommitValues","demographicsCommitValues","pickBy","certCommitValues","patchRequests","isEmpty","combinedResults","assign","postNameChange","handleRequestNameChange","profile_name","YEAR_OF_BIRTH_OPTIONS","currentYear","getFullYear","years","startYear","reverse","EDUCATION_LEVELS","GENDER_OPTIONS","COUNTRY_STATES_MAP","CA","US","getStatesList","toUpperCase","DECLINED","BetaLanguageBanner","languageCode","l","getTransifexURLPath","tokenizedCode","savedLanguage","getSiteLanguageEntry","context","locale","isSavedLanguageReleased","noPreviousLanguageSet","previousLanguage","beta_language","handleRevertLanguage","previous_language","getTransifexLink","contextType","AppContext","EmailField","OneTimeDismissibleAlert","localStorage","getItem","dismissed","setDismissed","dismissible","setItem","show","header","body","CoachingToggle","Checkboxes","selected","setSelected","index","isFirst","isChecked","CheckBox","autoFocus","newSelected","i","concat","handleToggle","DemographicsSection","memoize","hasRetrievedDemographicsOptions","demographicsGenderOptions","addDefaultOption","actions","POST","gender","choices","display_name","demographicsEthnicityOptions","user_ethnicity","child","demographicsIncomeOptions","income","demographicsMilitaryHistoryOptions","military_history","demographicsEducationLevelOptions","learner_education_level","demographicsWorkStatusOptions","work_status","demographicsWorkSectorOptions","current_work_sector","ethnicities","matchingOption","join","messageId","tabIndex","ref","alertRef","editableFieldProps","handleEditableFieldChange","handleSubmit","getApiOptions","showSelfDescribe","showWorkStatusDescribe","forwardRef","MARKETING_SITE_BASE_URL","rel","siteName","SITE_NAME","renderDemographicsServiceIssueWarning","hidden","ethnicityFieldDisplay","AccountSettingsPage","concatTimeZoneOptions","group","countryOptions","getCountryList","stateOptions","languageProficiencyOptions","getLanguageList","yearOfBirthOptions","educationLevelOptions","genderOptions","sortDates","proctoredExamId","messageString","dateValue","valueOf","CheckCircle","href","willCertNameChange","WarningFilled","verifiedNameRecord","proctored_exam_attempt_id","renderVerifiedNameSuccessMessage","renderVerifiedNameFailureMessage","renderVerifiedNameSubmittedMessage","Icon","src","width","color","messageStr","duplicateTpaProvider","getQueryParameters","duplicate_provider","navLinkRefs","fetchSiteLanguages","sendTrackingLogEvent","page","visibility","user_id","authenticatedUser","prevProps","locationHash","global","location","hash","current","window","scrollTo","offsetTop","Boolean","provider","isManagedProfile","managerTitle","support","SUPPORT_URL","NameChange","secondary_email_enabled","secondary_email","getLocalizedOptions","showState","getLocalizedTimeZoneOptions","findIndex","renderVerifiedNameMessage","renderManagedProfileMessage","renderNameChangeModal","pending_name_change","renderEmptyStaticFieldMessage","renderFullNameHelpText","handleSubmitProfileName","renderVerifiedNameIcon","renderVerifiedNameHelpText","handleSubmitVerifiedName","renderSecondaryEmailField","level_of_education","renderDemographicsSection","social_link_linkedin","social_link_facebook","social_link_twitter","renderDuplicateTpaProviderMessage","renderLoading","renderContent","renderError","DELETE_ACCOUNT","CONFIRMATION","CANCEL","deleteAccountFailure","reason","PrintingInstructions","actionLink","ConfirmationModal","errorType","headerMessageId","getShortErrorMessageId","detailsMessageId","faExclamationCircle","password","open","passwordFieldId","deleteAccountModalText2MessageKey","Modal","buttons","closeText","renderHeaderCloseButton","SuccessModal","BeforeProceedingBanner","instructionMessageId","supportArticleUrl","DeleteAccount","deleteAccount","setState","deleteAccountCancel","trim","deleteAccountReset","LOGOUT_URL","hasLinkedTPA","isVerifiedAccount","canDelete","deleteAccountText2MessageKey","optInInstructionMessageId","MARKETING_EMAILS_OPT_IN","deleteAccountConfirmation","handleCancel","handlePasswordChange","handleFinalClose","oldStatus","postDeleteAccount","handleDeleteAccount","deleteAccountReducer","siteLanguageReducer","resetPasswordReducer","nameChangeReducer","thirdPartyAuthReducer","handleFetchSettings","handleSaveSettings","handleSaveMultipleSettings","handleFetchTimeZones","roles","savedValues","getLocale","prefLang","publish","LOCALE_CHANGED","handleRtl","delay","savedSettings","deleteAccountSaga","siteLanguageSaga","resetPasswordSaga","nameChangeSaga","thirdPartyAuthSaga","NotFoundPage","maxWidth","combineReducers","accountSettingsReducer","accountSettingsStoreName","rootSaga","accountSettingsSaga","sagaMiddleware","createSagaMiddleware","composeMiddleware","ENVIRONMENT","loggerMiddleware","createLogger","collapsed","composeWithDevTools","applyMiddleware","thunkMiddleware","compose","configureStore","initialState","store","createStore","createRootReducer","run","hasGetUserMediaSupport","navigator","mediaDevices","getUserMedia","webkitGetUserMedia","mozGetUserMedia","constraints","resolve","reject","IDLE_STATUS","LOADING_STATUS","SUCCESS_STATUS","useAsyncCall","asyncFunc","setData","currData","useRedirect","text","redirect","setRedirect","sessionStorage","getExistingIdVerification","expires","canVerify","can_verify","getEnrollments","submitIdVerification","verificationData","keyMap","facePhotoFile","idPhotoFile","idPhotoName","postData","jsKey","apiKey","urlEncodedPostData","qs","success","String","MEDIA_ACCESS","PENDING","UNSUPPORTED","DENIED","GRANTED","ERROR_REASONS","VERIFIED_MODES","AccessBlocked","VerifiedNameContext","createContext","VerifiedNameContextProvider","verifiedNameHistoryData","verifiedNames","names","applicableNames","getMostRecentApprovedOrPendingVerifiedName","verifiedNameHistoryCallStatus","Provider","IdVerificationContextProvider","useContext","idVerificationData","enrollmentsData","setFacePhotoFile","setIdPhotoFile","setIdPhotoName","mediaStream","setMediaStream","mediaAccess","setMediaAccess","setProfileDataManager","thirdPartyManager","existingIdVerification","useCameraForId","setUseCameraForId","reachedSummary","setReachedSummary","enrollment","mode","contextValue","nameOnAccount","tryGetUserMedia","video","stream","getTracks","track","stop","stopUserMedia","loadingStatuses","SLUGS","panelSteps","useNextPanelSlug","originSlug","IdVerificationContext","nextIndex","indexOf","BasePanel","focusOnMount","headingRef","useRef","redirectSlug","slug","indexOfCurrentPanel","useVerificationRedirectSlug","ReviewRequirementsPanel","panelSlug","nextPanelSlug","sendTrackEvent","category","allow","exampleCard","alt","Link","EnableCameraDirectionsPanel","browserName","UnsupportedCameraDirectionsPanel","RequestCameraAccessPanel","returnUrl","returnText","Bowser","userAgent","browser","returnLink","clickAllow","CameraHelp","Collapsible","styling","defaultOpen","isPortrait","PortraitPhotoContextPanel","Camera","model","estimateFaces","then","predictions","shouldDetect","dataUri","showDetections","requestAnimationFrame","detectFromVideoFrame","canvasContext","canvasRef","getContext","clearRect","canvas","prediction","start","topLeft","end","bottomRight","features","landmarks","isInPosition","j","isInRange","x","y","isInRangeForPortrait","isInRangeForID","strokeStyle","lineWidth","strokeRect","giveFeedback","fillStyle","fillRect","cameraPhoto","videoRef","setDetection","bind","videoHasLoaded","isFinishedLoadingDetection","shouldGiveFeedback","feedback","CameraPhoto","startCamera","FACING_MODES","stopCamera","startDetection","sendEvent","coordinates","messageBase","sizeFactor","settings","getCameraSettings","videoWidth","videoHeight","ratio","setTimeout","loadModelPromise","blazeface","eventName","numFaces","rightEye","isCorrect","newFeedback","getGridPosition","reset","config","getSizeFactor","playShutterClick","getDataUri","onImageCapture","Audio","shutter","play","cameraFlashClass","textAlign","padding","marginBottom","marginLeft","float","Spinner","animation","autoPlay","onLoadedData","setVideoHasLoaded","WebkitTransform","transform","playsInline","accessKey","takePhoto","TakePortraitPhotoPanel","mounted","setMounted","IdContextPanel","GetNameIdPanel","nameInputRef","nameOnAccountValue","fromSummary","controlId","ImagePreview","objectFit","SupportedMediaTypes","SUPPORTED_TYPES","ImageFileUpload","onFileChange","setError","handleChange","useCallback","files","fileObject","startsWith","fileReader","FileReader","addEventListener","result","readAsDataURL","accept","marginTop","CollapsibleImageHelp","TakeIdPhotoPanel","CameraHelpWithUpload","hasUploadedImage","setHasUploadedImage","image","SummaryPanel","nameToBeUsed","isSubmitting","setIsSubmitting","submissionError","setSubmissionError","SubmitButton","courseRunKey","support_link","getError","pathname","sr","SubmittedPanel","IdVerificationPage","useRouteMatch","search","useLocation","isModalOpen","setIsModalOpen","parsedQueryParams","ignoreQueryPrefix","interpretNumericEntities","camelCase","component","ErrorMessage","ManagedProfileAlert","CoachingForm","full_name","defaultValue","redirectUrl","declineCoaching","Logo","attributes","SuccessMessage","faCheck","continueUrl","continue","AutoRedirect","VIEWS","CoachingConsent","nextUrl","sanitizeForwardingUrl","next","formSubmitted","declineSubmitted","submissionSuccess","patchUsingCoachingConsentForm","fullName","phoneNumber","currentView","CoachingConsentForm","formHasErrors","LogoSVG","renderView","fr","deMessages","subscribe","APP_READY","ReactDOM","AppProvider","minHeight","exact","getElementById","APP_INIT_ERROR","ErrorPage","initialize","appMessages","headerMessages","footerMessages","requireAuthenticatedUser","hydrateAuthenticatedUser","handlers","mergeConfig","process"],"sourceRoot":""}