Merge pull request #1009 from Safelite/feature/richardson/welcome-page-updates

welcome page updates
This commit is contained in:
brich1212safe 2026-01-15 12:56:46 -05:00 committed by GitHub
commit 8fa15c5dc2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 34 additions and 54 deletions

View file

@ -38,7 +38,7 @@
<a <a
href="" href=""
target="_blank" target="_blank"
@click="openCookiePreferences">Cookie Preferences</a> @click="openCookiePreferences">Cookie preferences</a>
</div> </div>
<div class="footer-menu-item"> <div class="footer-menu-item">
<textLink <textLink

View file

@ -136,7 +136,6 @@ describe('welcome-page.vue', () => {
const state = wrapper.findComponent({ ref: 'state' }); const state = wrapper.findComponent({ ref: 'state' });
const glassOnlyDamage = wrapper.findComponent({ ref: 'glassOnlyDamage' }); const glassOnlyDamage = wrapper.findComponent({ ref: 'glassOnlyDamage' });
const phoneNumber = wrapper.findComponent({ ref: 'phoneNumber' }); const phoneNumber = wrapper.findComponent({ ref: 'phoneNumber' });
const email = wrapper.findComponent({ ref: 'email' });
// Assert // Assert
expect(policyNumber.exists()).toBe(true); expect(policyNumber.exists()).toBe(true);
@ -146,7 +145,6 @@ describe('welcome-page.vue', () => {
expect(state.exists()).toBe(false); expect(state.exists()).toBe(false);
expect(glassOnlyDamage.exists()).toBe(false); expect(glassOnlyDamage.exists()).toBe(false);
expect(phoneNumber.exists()).toBe(true); expect(phoneNumber.exists()).toBe(true);
expect(email.exists()).toBe(true);
}); });
test('Policy zip field should be visible at all times', async () => { test('Policy zip field should be visible at all times', async () => {
// Arrange // Arrange

View file

@ -12,7 +12,7 @@
<div class="welcome-page-container iss-heritage-content-container-width"> <div class="welcome-page-container iss-heritage-content-container-width">
<siteSubHeader <siteSubHeader
cmsWidgetName="SiteSubHeaderWidget" cmsWidgetName="SiteSubHeaderWidget"
class="mt-4" /> class="form-group" />
<textboxQuestion <textboxQuestion
ref="policyNumber" ref="policyNumber"
v-model="welcomePageModel.policyNumber" v-model="welcomePageModel.policyNumber"
@ -22,16 +22,6 @@
disableAutoFill disableAutoFill
:isDisabled="isPolicyHolderDisabled" :isDisabled="isPolicyHolderDisabled"
:validationRules="rules.policyNumber" /> :validationRules="rules.policyNumber" />
<textboxQuestion
ref="policyZip"
v-model="welcomePageModel.policyZipCode"
inputId="policyZipCode"
cmsWidgetName="PolicyZipQuestion"
isRequired
mask="#####"
:isDisabled="isPolicyZipDisabled"
:validationRules="rules.policyZip"
class="mt-3" />
<textboxQuestion <textboxQuestion
ref="phoneNumber" ref="phoneNumber"
v-model="welcomePageModel.phoneNumber" v-model="welcomePageModel.phoneNumber"
@ -41,7 +31,8 @@
isRequired isRequired
:mask="phoneMask" :mask="phoneMask"
disableAutoFill disableAutoFill
class="mt-3" /> placeholderText="###-###-####"
class="form-group" />
<textboxQuestion <textboxQuestion
ref="extension" ref="extension"
v-model="welcomePageModel.extension" v-model="welcomePageModel.extension"
@ -49,7 +40,7 @@
cmsWidgetName="ExtensionQuestion" cmsWidgetName="ExtensionQuestion"
:validationRules="rules.extension" :validationRules="rules.extension"
disableAutoFill disableAutoFill
class="mt-3" /> class="form-group" />
<textboxQuestion <textboxQuestion
ref="dateOfLoss" ref="dateOfLoss"
v-model="welcomePageModel.dateOfLoss" v-model="welcomePageModel.dateOfLoss"
@ -62,7 +53,7 @@
:max="new Date().toJSON().slice(0, 10)" :max="new Date().toJSON().slice(0, 10)"
:min="'1972-12-01'" :min="'1972-12-01'"
:validationRules="rules.lossDate" :validationRules="rules.lossDate"
class="mt-3" /> class="form-group" />
<textBlock <textBlock
cmsWidgetName="DamageDateEstimateWidget" cmsWidgetName="DamageDateEstimateWidget"
typeStyle="small" typeStyle="small"
@ -77,44 +68,45 @@
disableAutoFill disableAutoFill
:validationRules="rules.damageOption" :validationRules="rules.damageOption"
placeHolderText="Select an option" placeHolderText="Select an option"
class="mt-3" /> class="form-group" />
<textboxQuestion
ref="policyZip"
v-model="welcomePageModel.policyZipCode"
inputId="policyZipCode"
cmsWidgetName="PolicyZipQuestion"
isRequired
mask="#####"
:isDisabled="isPolicyZipDisabled"
:validationRules="rules.policyZip"
class="form-group" />
<dropdownQuestion <dropdownQuestion
v-if="displayDamageStateQuestion" v-if="displayDamageStateQuestion"
id="welcomeDropdown" id="welcomeDropdown"
ref="state" ref="state"
v-model="welcomePageModel.damageState" v-model="welcomePageModel.damageState"
class="mt-3" class="form-group"
cmsWidgetName="DamageStateQuestion" cmsWidgetName="DamageStateQuestion"
inputId="8fdf9dc2e13e430eb57529499dceb3eb" inputId="8fdf9dc2e13e430eb57529499dceb3eb"
:options="getStates" :options="getStates"
:validationRules="rules.lossState" :validationRules="rules.lossState"
isRequired isRequired
disableAutoFill disableAutoFill
placeHolderText="Select an option" /> placeHolderText="Select State" />
<textboxQuestion <textboxQuestion
v-if="displayDamageCityQuestion" v-if="displayDamageCityQuestion"
ref="damageCity" ref="damageCity"
v-model="welcomePageModel.damageCity" v-model="welcomePageModel.damageCity"
class="mt-3" class="form-group"
inputId="damageCityField" inputId="damageCityField"
cmsWidgetName="DamageCityQuestion" cmsWidgetName="DamageCityQuestion"
isRequired isRequired
disableAutoFill disableAutoFill
:validationRules="rules.lossCity" /> :validationRules="rules.lossCity" />
<textboxQuestion
ref="email"
v-model="welcomePageModel.email"
inputId="emailField"
cmsWidgetName="EmailAddressQuestion"
:validationRules="rules.email"
isRequired
disableAutoFill
class="mt-3" />
<buttonQuestion <buttonQuestion
v-if="displayGlassOnlyQuestion" v-if="displayGlassOnlyQuestion"
ref="glassOnlyDamage" ref="glassOnlyDamage"
v-model="welcomePageModel.isDamageGlassOnly" v-model="welcomePageModel.isDamageGlassOnly"
class="px-0 mt-3" class="px-0 form-group"
cmsWidgetName="GlassOnlyQuestion" cmsWidgetName="GlassOnlyQuestion"
inputId="isDamageGlassOnly" inputId="isDamageGlassOnly"
:answers="DamageGlassOnlyOptions" :answers="DamageGlassOnlyOptions"
@ -142,17 +134,9 @@
:isDismissible="false" /> :isDismissible="false" />
<siteFooter <siteFooter
ref="siteFooter" ref="siteFooter"
class="mt-3"
cmsWidgetName="SiteFooterWidget" cmsWidgetName="SiteFooterWidget"
:isForwardActionDisabled="!meta.valid" :isForwardActionDisabled="!meta.valid"
@ForwardClicked="forwardButtonAction" /> @ForwardClicked="forwardButtonAction" />
<textBlock
id="requestCallbackLink"
cmsWidgetName="HelpTextWidget"
linkType="navigation"
href="javascript:void(0)"
class="mb-5 text-left"
@clickEvent="handleHelpLinkClick" />
</div> </div>
</div> </div>
</div> </div>
@ -257,7 +241,6 @@ export default {
duplicates: [], duplicates: [],
rules: { rules: {
damageOption: 'damage-option-required', damageOption: 'damage-option-required',
email: `${globalRules.EMAIL_ADDRESS_REQUIRED}|${globalRules.EMAIL_ADDRESS_FORMAT}`,
extension: `${globalRules.EXTENSION_FORMAT}`, extension: `${globalRules.EXTENSION_FORMAT}`,
lossCity: `${globalRules.DATE_OF_LOSS_CITY_REQUIRED}|${globalRules.DATE_OF_LOSS_CITY_FORMAT}`, lossCity: `${globalRules.DATE_OF_LOSS_CITY_REQUIRED}|${globalRules.DATE_OF_LOSS_CITY_FORMAT}`,
// eslint-disable-next-line max-len // eslint-disable-next-line max-len
@ -302,7 +285,11 @@ export default {
return !!this.getCmsContent('GlassOnlyQuestion', 'QuestionText'); return !!this.getCmsContent('GlassOnlyQuestion', 'QuestionText');
}, },
getStates() { getStates() {
return states; return Object.keys(states).reduce((acc, key) => {
// eslint-disable-next-line no-param-reassign
acc[key] = states[key].toUpperCase();
return acc;
}, {});
}, },
isPolicyHolderDisabled() { isPolicyHolderDisabled() {
return !!this.mainStore.issConfig.disabledFields.policyNumber; return !!this.mainStore.issConfig.disabledFields.policyNumber;
@ -408,7 +395,6 @@ export default {
isDamageGlassOnly: this.mainStore.order.policy.isDamageGlassOnly, isDamageGlassOnly: this.mainStore.order.policy.isDamageGlassOnly,
phoneNumber: this.mainStore.order.contactInfo.homePhone, phoneNumber: this.mainStore.order.contactInfo.homePhone,
extension: this.mainStore.order.contactInfo.extension, extension: this.mainStore.order.contactInfo.extension,
email: this.mainStore.order.customer.emailAddress,
isPolicyNumberDisabled: this.mainStore.order.policy.isPolicyNumberDisabled isPolicyNumberDisabled: this.mainStore.order.policy.isPolicyNumberDisabled
}; };
}, },
@ -425,7 +411,6 @@ export default {
this.welcomePageModel.isDamageGlassOnly = response.policy.isDamageGlassOnly; this.welcomePageModel.isDamageGlassOnly = response.policy.isDamageGlassOnly;
this.welcomePageModel.phoneNumber = response.customer.homePhone; this.welcomePageModel.phoneNumber = response.customer.homePhone;
this.welcomePageModel.extension = response.customer.extension; this.welcomePageModel.extension = response.customer.extension;
this.welcomePageModel.email = response.customer.emailAddress;
}, },
findDamageCause(damageCause) { findDamageCause(damageCause) {
const damageCauseOptions = this.DamageCauseOptions; const damageCauseOptions = this.DamageCauseOptions;
@ -481,13 +466,6 @@ export default {
this.mainStore.order.loadedFromCookie = true; this.mainStore.order.loadedFromCookie = true;
this.answeredContinueModal = true; this.answeredContinueModal = true;
this.$refs.continueModal.closeModal(); this.$refs.continueModal.closeModal();
},
handleHelpLinkClick() {
useMainStore().setBailout(bailoutMessage.RequestCallback());
this.$router.navigate(
this.navigationScenarios.CLICKED_FORWARD_WITH_BAILOUT,
this.$route
);
} }
} }
}; };
@ -508,6 +486,10 @@ form {
min-height: 1px; min-height: 1px;
padding-left: .9375rem; padding-left: .9375rem;
padding-right: .9375rem; padding-right: .9375rem;
.form-group {
margin-top: 1.25rem;
}
} }
} }

View file

@ -2277,7 +2277,6 @@ export const useMainStore = defineStore({
this.order.policy.damageState = welcomePageModel?.damageState; this.order.policy.damageState = welcomePageModel?.damageState;
this.order.policy.damageCity = welcomePageModel?.damageCity; this.order.policy.damageCity = welcomePageModel?.damageCity;
this.order.policy.isDamageGlassOnly = welcomePageModel?.isDamageGlassOnly; this.order.policy.isDamageGlassOnly = welcomePageModel?.isDamageGlassOnly;
this.order.customer.emailAddress = welcomePageModel?.email;
this.order.serviceLocation.zipCode = welcomePageModel?.policyZipCode; this.order.serviceLocation.zipCode = welcomePageModel?.policyZipCode;
this.updatePhoneNumbers({ this.updatePhoneNumbers({
home: welcomePageModel?.phoneNumber, home: welcomePageModel?.phoneNumber,

View file

@ -174,6 +174,7 @@ body {
div.textbox-question { div.textbox-question {
label { label {
span.sub-caption { span.sub-caption {
color: #525656;
font-weight: 400; font-weight: 400;
} }
} }
@ -203,10 +204,10 @@ $heritage-btn-width: 9.0625rem; // 145px
@include heritage-btn-variant('secondary', $white, $heritage-blue-secondary, transparent, true); @include heritage-btn-variant('secondary', $white, $heritage-blue-secondary, transparent, true);
@include heritage-btn-link('link', $blue, transparent, $heritage-blue-secondary); @include heritage-btn-link('link', $blue, transparent, $heritage-blue-secondary);
@include heritage-btn-size('lg', 0.625rem, 1.25rem); @include heritage-btn-size('lg', 0.625rem, 1.25rem);
@include heritage-btn-size('md', 7px, 15px); @include heritage-btn-size('md', 7px, 15px);
@include heritage-btn-size('sm', 3px, 6px); @include heritage-btn-size('sm', 3px, 6px);
@include heritage-btn-size('xs', 1px, 5px); @include heritage-btn-size('xs', 1px, 5px);
&.btn-link { &.btn-link {
--bs-btn-padding-x: 0px; --bs-btn-padding-x: 0px;