Skip to content

Commit 28d80a7

Browse files
feat: add first and last name to settings page
1 parent 3467534 commit 28d80a7

File tree

12 files changed

+633
-24
lines changed

12 files changed

+633
-24
lines changed

src/account-settings/AccountSettingsPage.jsx

Lines changed: 77 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import { fetchSiteLanguages } from './site-language';
5252
import DemographicsSection from './demographics/DemographicsSection';
5353
import { fetchCourseList } from '../notification-preferences/data/thunks';
5454
import { withLocation, withNavigate } from './hoc';
55+
import NameField from './NameField';
5556

5657
class 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?.first_name !== undefined && this.props.formValues?.last_name !== undefined) ? (
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,6 +935,8 @@ 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,

src/account-settings/AccountSettingsPage.messages.jsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,16 @@ const messages = defineMessages({
8181
defaultMessage: 'Full name',
8282
description: 'Label for account settings name field.',
8383
},
84+
'account.settings.field.first.name': {
85+
id: 'account.settings.field.first.name',
86+
defaultMessage: 'First name',
87+
description: 'Label for account settings first name field.',
88+
},
89+
'account.settings.field.last.name': {
90+
id: 'account.settings.field.last.name',
91+
defaultMessage: 'Last name',
92+
description: 'Label for account settings last name field.',
93+
},
8494
'account.settings.field.full.name.empty': {
8595
id: 'account.settings.field.full.name.empty',
8696
defaultMessage: 'Add name',

0 commit comments

Comments
 (0)