@@ -52,6 +52,7 @@ import { fetchSiteLanguages } from './site-language';
5252import DemographicsSection from './demographics/DemographicsSection' ;
5353import { fetchCourseList } from '../notification-preferences/data/thunks' ;
5454import { withLocation , withNavigate } from './hoc' ;
55+ import NameField from './NameField' ;
5556
5657class AccountSettingsPage extends React . Component {
5758 constructor ( props , context ) {
@@ -167,6 +168,34 @@ class AccountSettingsPage extends React.Component {
167168 this . props . saveSettings ( formId , values , extendedProfileObject ) ;
168169 } ;
169170
171+ handleSubmitFirstAndLastName = ( formId , fullName , firstName , lastName ) => {
172+ const settingsToBeSaved = [ ] ;
173+
174+ if ( Object . keys ( this . props . drafts ) . includes ( 'useVerifiedNameForCerts' ) ) {
175+ settingsToBeSaved . push ( {
176+ formId : 'useVerifiedNameForCerts' ,
177+ commitValues : this . props . formValues . useVerifiedNameForCerts ,
178+ } ) ;
179+ }
180+
181+ settingsToBeSaved . push ( {
182+ formId : 'first_name' ,
183+ commitValues : firstName ,
184+ } ) ;
185+
186+ settingsToBeSaved . push ( {
187+ formId : 'last_name' ,
188+ commitValues : lastName ,
189+ } ) ;
190+
191+ settingsToBeSaved . push ( {
192+ formId : 'name' ,
193+ commitValues : fullName ,
194+ } ) ;
195+
196+ this . props . saveMultipleSettings ( settingsToBeSaved , formId , false ) ;
197+ } ;
198+
170199 handleSubmitProfileName = ( formId , values ) => {
171200 if ( Object . keys ( this . props . drafts ) . includes ( 'useVerifiedNameForCerts' ) ) {
172201 this . props . saveMultipleSettings ( [
@@ -552,37 +581,71 @@ class AccountSettingsPage extends React.Component {
552581 isEditable = { false }
553582 { ...editableFieldProps }
554583 />
555- < EditableField
556- name = "name"
557- type = "text"
558- value = {
584+ { ( this . props . formValues ?. are_first_and_last_name_required_in_registration === true ) ? (
585+ < NameField
586+ name = "name"
587+ type = "text"
588+ verifiedName = { verifiedName }
589+ pendingNameChange = { this . props . formValues . pending_name_change }
590+ fullNameValue = { this . props . formValues . name }
591+ firstNameValue = { this . props . formValues . first_name }
592+ lastNameValue = { this . props . formValues . last_name }
593+ label = { this . props . intl . formatMessage ( messages [ 'account.settings.field.full.name' ] ) }
594+ emptyLabel = {
595+ this . isEditable ( 'name' )
596+ ? this . props . intl . formatMessage ( messages [ 'account.settings.field.full.name.empty' ] )
597+ : this . renderEmptyStaticFieldMessage ( )
598+ }
599+ helpText = {
600+ verifiedName
601+ ? this . renderFullNameHelpText ( verifiedName . status , verifiedName . proctored_exam_attempt_id )
602+ : this . props . intl . formatMessage ( messages [ 'account.settings.field.full.name.help.text' ] )
603+ }
604+ isEditable = {
605+ verifiedName
606+ ? this . isEditable ( 'verifiedName' ) && this . isEditable ( 'name' )
607+ : this . isEditable ( 'name' )
608+ }
609+ isGrayedOut = {
610+ verifiedName && ! this . isEditable ( 'verifiedName' )
611+ }
612+ onChange = { this . handleEditableFieldChange }
613+ onSubmit = { this . handleSubmitFirstAndLastName }
614+ />
615+ ) : (
616+ < EditableField
617+ name = "name"
618+ type = "text"
619+ value = {
559620 verifiedName ?. status === 'submitted'
560621 && this . props . formValues . pending_name_change
561622 ? this . props . formValues . pending_name_change
562623 : this . props . formValues . name
563624 }
564- label = { this . props . intl . formatMessage ( messages [ 'account.settings.field.full.name' ] ) }
565- emptyLabel = {
625+ label = { this . props . intl . formatMessage ( messages [ 'account.settings.field.full.name' ] ) }
626+ emptyLabel = {
566627 this . isEditable ( 'name' )
567628 ? this . props . intl . formatMessage ( messages [ 'account.settings.field.full.name.empty' ] )
568629 : this . renderEmptyStaticFieldMessage ( )
569630 }
570- helpText = {
631+ helpText = {
571632 verifiedName
572633 ? this . renderFullNameHelpText ( verifiedName . status , verifiedName . proctored_exam_attempt_id )
573634 : this . props . intl . formatMessage ( messages [ 'account.settings.field.full.name.help.text' ] )
574635 }
575- isEditable = {
636+ isEditable = {
576637 verifiedName
577638 ? this . isEditable ( 'verifiedName' ) && this . isEditable ( 'name' )
578639 : this . isEditable ( 'name' )
579640 }
580- isGrayedOut = {
641+ isGrayedOut = {
581642 verifiedName && ! this . isEditable ( 'verifiedName' )
582643 }
583- onChange = { this . handleEditableFieldChange }
584- onSubmit = { this . handleSubmitProfileName }
585- />
644+ onChange = { this . handleEditableFieldChange }
645+ onSubmit = { this . handleSubmitProfileName }
646+ />
647+ ) }
648+
586649 { verifiedName
587650 && (
588651 < EditableField
@@ -872,10 +935,13 @@ AccountSettingsPage.propTypes = {
872935 formValues : PropTypes . shape ( {
873936 username : PropTypes . string ,
874937 name : PropTypes . string ,
938+ first_name : PropTypes . string ,
939+ last_name : PropTypes . string ,
875940 email : PropTypes . string ,
876941 secondary_email : PropTypes . string ,
877942 secondary_email_enabled : PropTypes . bool ,
878943 year_of_birth : PropTypes . oneOfType ( [ PropTypes . string , PropTypes . number ] ) ,
944+ are_first_and_last_name_required_in_registration : PropTypes . bool ,
879945 country : PropTypes . string ,
880946 level_of_education : PropTypes . string ,
881947 gender : PropTypes . string ,
0 commit comments