diff --git a/src/constants/progress-bar-mapper.js b/src/constants/progress-bar-mapper.js
index b9f3af77..6d39bbaf 100644
--- a/src/constants/progress-bar-mapper.js
+++ b/src/constants/progress-bar-mapper.js
@@ -71,6 +71,9 @@ export const pageProgressMapper = {
'tpa-search': {
percent: 85
},
+ 'tpa-submit': {
+ percent: 95
+ },
'tpa-confirmation': {
percent: 100
},
diff --git a/src/helpers/text-helper.js b/src/helpers/text-helper.js
index 13e65e11..b35f4803 100644
--- a/src/helpers/text-helper.js
+++ b/src/helpers/text-helper.js
@@ -34,11 +34,8 @@ export function createOrderedListFromStringOfParagraphs(stringOfParagraphs) {
* @returns {string}
*/
export function toTitleCase(text) {
- const temp = text?.toLowerCase()?.split(' ') ?? [];
- for (let i = 0; i < temp.length; i++) {
- temp[i] = temp[i].charAt(0).toUpperCase() + temp[i].slice(1);
- }
- return temp.join(' ');
+ let temp = text.toLowerCase();
+ return temp.replace(/(^|\s|-)\S/g, (letter) => letter.toUpperCase());
}
/**
diff --git a/src/layouts/tpa-submit/contact-details-drawer/contact-details-drawer.vue b/src/layouts/tpa-submit/contact-details-drawer/contact-details-drawer.vue
index 334ba86a..931b950e 100644
--- a/src/layouts/tpa-submit/contact-details-drawer/contact-details-drawer.vue
+++ b/src/layouts/tpa-submit/contact-details-drawer/contact-details-drawer.vue
@@ -1,6 +1,7 @@
-
-
+
+
+
+
+
@@ -51,10 +60,11 @@ import modal from '@/digital-components/modal/modal.vue';
import textboxQuestion from '@/digital-components/textbox-question/textbox-question.vue';
// Supporting Files
-import { useMainStore } from '@/store/index.js';
+import { useMainStore } from '@/store';
import globalRules from '@/constants/global-rules.js';
import MaskaFormattedMasks from '@/constants/maska-masks';
import widgetFields from '@/constants/cms-widget-fields.js';
+import { modalPositions } from '@/constants/component-variants';
export default {
name: 'contact-details-drawer',
@@ -67,27 +77,39 @@ export default {
const { firstName,
lastName,
emailAddress,
- servicePhone } = useMainStore().contactInfo;
+ servicePhone,
+ extension } = useMainStore().contactInfo;
+ console.log('Initial contact info loaded:', {
+ firstName,
+ lastName,
+ emailAddress,
+ servicePhone,
+ extension
+ });
return {
isModalOpened: false,
firstName,
lastName,
emailAddress,
phoneNumber: servicePhone,
+ extension: extension,
widget: {
title: 'ContactDetailsDrawerHeaderWidget',
firstNameQuestion: 'FirstNameQuestionWidget',
lastNameQuestion: 'LastNameQuestionWidget',
emailQuestion: 'EmailQuestionWidget',
phoneNumberQuestion: 'PhoneNumberQuestionWidget',
+ extensionQuestion: 'ExtensionQuestionWidget',
drawerFooter: 'ContactDetailsDrawerFooterWidget'
},
rules: {
firstName: globalRules.FIRST_NAME_REQUIRED,
lastName: globalRules.LAST_NAME_REQUIRED,
emailAddress: `${globalRules.EMAIL_ADDRESS_REQUIRED}|${globalRules.EMAIL_ADDRESS_FORMAT}`,
- phoneNumber: `${globalRules.PHONE_NUMBER_REQUIRED}|${globalRules.PHONE_NUMBER_FORMAT}`
- }
+ phoneNumber: `${globalRules.PHONE_NUMBER_REQUIRED}|${globalRules.PHONE_NUMBER_FORMAT}`,
+ extension: `${globalRules.EXTENSION_FORMAT}`
+ },
+ modalPositions
};
},
computed: {
@@ -121,10 +143,11 @@ export default {
lastName: this.lastName,
emailAddress: this.emailAddress
};
- useMainStore().updateContactInfo(contactInfo);
- useMainStore().updatePhoneNumbers({
+ this.mainStore.updateContactInfo(contactInfo);
+ this.mainStore.updatePhoneNumbers({
home: this.phoneNumber,
- service: this.phoneNumber
+ service: this.phoneNumber,
+ extension: this.extension
});
this.$emit('update-contact-details');
},
@@ -132,11 +155,20 @@ export default {
const { firstName,
lastName,
emailAddress,
- servicePhone } = useMainStore().contactInfo;
+ servicePhone,
+ extension } = this.mainStore.contactInfo;
+ console.log('Resetting form values to:', {
+ firstName,
+ lastName,
+ emailAddress,
+ servicePhone,
+ extension
+ });
this.firstName = firstName;
this.lastName = lastName;
this.emailAddress = emailAddress;
this.phoneNumber = servicePhone;
+ this.extension = extension;
},
openModal() {
this.modal.openModal();
@@ -155,5 +187,14 @@ export default {
font-size: $h5-font-size;
font-weight: $font-weight-normal !important;
}
+ .textbox-question {
+ margin-bottom: 1.25rem;
+ :deep(label:has(b)) {
+ font-weight: $font-weight-normal;
+ b {
+ font-weight: 600;
+ }
+ }
+ }
}
diff --git a/src/layouts/tpa-submit/deductible-box/deductible-box.vue b/src/layouts/tpa-submit/deductible-box/deductible-box.vue
index 756f7da0..fd1ea4bd 100644
--- a/src/layouts/tpa-submit/deductible-box/deductible-box.vue
+++ b/src/layouts/tpa-submit/deductible-box/deductible-box.vue
@@ -1,17 +1,9 @@
-
- Deductible
-
-
- {{ value }}
-
+ class="deductible-box">
+
Deductible:
+
{{ value }}
@@ -28,12 +20,17 @@ export default {
diff --git a/src/layouts/tpa-submit/review-block/review-block.vue b/src/layouts/tpa-submit/review-block/review-block.vue
index 4f5af710..63e6efa4 100644
--- a/src/layouts/tpa-submit/review-block/review-block.vue
+++ b/src/layouts/tpa-submit/review-block/review-block.vue
@@ -1,29 +1,28 @@
-
-
-
-
- {{ screenReaderOnlyText }}
-
-
-
-
+
+
+
+
+ {{ screenReaderOnlyText }}
+
+
@@ -36,14 +35,13 @@ export default {
props: {
customHeaderText: String,
editScreenReaderTextCmsWidgetName: String,
- lines: Array
+ lines: Array,
+ editLinkText: {
+ type: String,
+ default: 'Edit'
+ },
},
emits: ['click-edit'],
- data() {
- return {
- editLinkText: 'Edit'
- };
- },
methods: {
editClicked() {
this.$emit('click-edit');
@@ -59,12 +57,16 @@ export default {
}
.review-block__header {
color: $black;
+ font-weight: $font-weight-bold;
+ margin-bottom: .625rem;
}
- .review-block__body--line {
- color: $gray-600;
+
+ .review-body {
+ margin-bottom: .625rem
}
+
.link {
- text-underline-offset: 1px;
+ font-weight: $font-weight-normal
}
}
diff --git a/src/layouts/tpa-submit/tpa-submit.vue b/src/layouts/tpa-submit/tpa-submit.vue
index 181fa0aa..aa334adf 100644
--- a/src/layouts/tpa-submit/tpa-submit.vue
+++ b/src/layouts/tpa-submit/tpa-submit.vue
@@ -13,53 +13,52 @@
-
+
+ class="tpa-submit-title"/>
-
-
-
+ :customText="subHeaderBodyOne" />
+
+
+
+
+
+
+
-
-
-
-
- section.onClickEdit()" />
-
+
+
+ section.onClickEdit()" />
-
+
@@ -67,17 +66,10 @@
id="tpaSubmitOrderDetailsTitle"
ref="tpaSubmitOrderDetailsTitle"
:customText="orderDetailsTitle"
- :marginTopSizeOverride="4"
- class="fw-bold text-color--black" />
-
+ :marginTopSizeOverride="0"
+ class="fw-bold order-details-title" />
v != null && v !== '')
- .join(' ');
- return [line];
- },
- locationAnswers() {
- return this.getInputQuestionWidgetAnswersNullSafe(this.widget.damageLocations);
- },
- driverSideDamageAnswers() {
- const answerContent = getLocationAnswer(
- damageLocationsSelected.DRIVER,
- this.locationAnswers
- );
- return this.getInputQuestionWidgetAnswersNullSafe(answerContent?.SubWidgetName);
- },
- passengerSideDamageAnswers() {
- const answerContent = getLocationAnswer(
- damageLocationsSelected.PASSENGER,
- this.locationAnswers
- );
- return this.getInputQuestionWidgetAnswersNullSafe(answerContent?.SubWidgetName);
- },
- getDamageLines() {
- const { glassToReplace, isRepair } = useMainStore().order.damage;
- return getDamageDisplayContent(
- this.locationAnswers,
- this.driverSideDamageAnswers,
- this.passengerSideDamageAnswers,
- glassToReplace,
- isRepair
- );
+ getPreferredShopTitle() {
+ return toTitleCase(this.mainStore.order.serviceLocation.provider.companyName ?? '');
},
getPreferredShopLines() {
- const { phoneNumber, address } =
- useMainStore().order.serviceLocation.provider;
+ const { phoneNumber, address } = this.mainStore.order.serviceLocation.provider;
const { streetAddress, city, state, zipCode } = address;
const displayAddress = formatAddress(
streetAddress,
@@ -284,58 +235,82 @@ export default {
);
const displayPhoneNumber = toDisplayPhoneNumber(phoneNumber);
return [
- toTitleCase(this.companyName ?? ''),
displayAddress,
displayPhoneNumber
];
},
+ getEditShopLinkText() {
+ return this.getCmsContent(
+ this.widget.editShopLinkText,
+ widgetFields.TEXT_BLOCK_WIDGET.TEXT
+ );
+ },
+ getContactInfoTitle() {
+ const cmsContent = this.getCmsContent(
+ this.widget.contactDetails,
+ widgetFields.CONTENT_GROUP_WIDGET.HEADER_TEXT
+ );
+ return getStringWithCustomValues(cmsContent, this.customValueMap);
+ },
getContactInfoLines() {
- const { firstName, lastName, emailAddress, servicePhone } =
- useMainStore().contactInfo;
+ const cmsContent = this.getCmsContent(
+ this.widget.contactDetails,
+ widgetFields.CONTENT_GROUP_WIDGET.BODY_TEXT
+ );
return [
- `${firstName} ${lastName}`,
- emailAddress ?? '',
- toDisplayPhoneNumber(servicePhone)
+ getStringWithCustomValues(cmsContent, this.customValueMap)
];
+ },
+ getEditContactInfoLinkText() {
+ return this.getCmsContent(
+ this.widget.contactDetails,
+ widgetFields.CONTENT_GROUP_WIDGET.FOOTER_TEXT
+ );
+ },
+ recalModalContent() {
+ const widgetName = 'RecalModal';
+ return {
+ headerText: this.getCmsContent(widgetName, widgetFields.CONTENT_GROUP_WIDGET.HEADER_TEXT),
+ subHeaderText: this.getCmsContent(widgetName, widgetFields.CONTENT_GROUP_WIDGET.SUBHEADER_TEXT),
+ bodyText: this.getCmsContent(widgetName, widgetFields.CONTENT_GROUP_WIDGET.BODY_TEXT),
+ footerButtonText: this.getCmsContent(widgetName, widgetFields.CONTENT_GROUP_WIDGET.FOOTER_TEXT),
+ image: this.getCmsContent(widgetName, widgetFields.CONTENT_GROUP_WIDGET.IMAGE)
+ }
+ },
+ recalibrationRequired() {
+ return this.mainStore.hasRecalibrationPart;
+ },
+ customValueMap() {
+ return {
+ glassShop: this.getPreferredShopTitle,
+ contactPhone: toDisplayPhoneNumber(this.mainStore.contactInfo.servicePhone),
+ contactEmail: this.mainStore.contactInfo.emailAddress
+ }
}
},
methods: {
setSections() {
- const vehicleScenario = useMainStore().isPolicyVehicle
- ? this.navigationScenarios.EDIT_POLICY_VEHICLE
- : this.navigationScenarios.EDIT_VEHICLE;
this.sections = [
this.getSection(
- this.widget.subheader.vehicle,
- this.getVehicleLines,
- () => this.navigate(vehicleScenario)
- ),
- // eslint-disable-next-line max-len
- this.getSection(
- this.widget.subheader.damage,
- this.getDamageLines,
- () => this.navigate(this.navigationScenarios.EDIT_DAMAGE)
- ),
- this.getSection(
- this.widget.subheader.shop,
+ this.getPreferredShopTitle,
this.getPreferredShopLines,
- () => this.navigate(this.navigationScenarios.EDIT_PREFERRED_SHOP)
+ this.getEditShopLinkText,
+ () => this.navigate(this.navigationScenarios.EDIT_PREFERRED_SHOP),
),
// eslint-disable-next-line max-len
this.getSection(
- this.widget.subheader.contactInfo,
+ this.getContactInfoTitle,
this.getContactInfoLines,
+ this.getEditContactInfoLinkText,
this.openContactDetailsModal
)
];
},
- getSection(widgetName, lines, onClick) {
+ getSection(title, lines, editLinkText, onClick) {
return {
- title: this.getCmsContent(
- widgetName,
- widgetFields.TEXT_BLOCK_WIDGET.TEXT
- ),
+ title: title,
lines,
+ editLinkText,
onClickEdit: onClick
};
},
@@ -344,7 +319,7 @@ export default {
await submitWorkOrder({ submitType: submitType.TPA }).then(() => {
this.navigate(this.navigationScenarios.CLICKED_FORWARD);
}).catch((submitError) => {
- useMainStore().setBailout(bailoutMessage.saveSessionError(submitError.data));
+ this.mainStore.setBailout(bailoutMessage.saveSessionError(submitError.data));
this.navigate(
this.navigationScenarios.SAVE_SESSION_FAILED,
this.$route,
@@ -372,6 +347,12 @@ export default {
},
openContactDetailsModal() {
this.$refs.contactDetailsDrawer.openModal();
+ },
+ openRecalModal() {
+ this.$refs.recalModal.openModal();
+ },
+ closeRecalModal() {
+ this.$refs.recalModal.closeModal();
}
}
};
@@ -387,26 +368,69 @@ export default {
}
.tpa-submit {
- #tpaSubmitOrderDetailsBody {
- p {
- font-size: .875rem;
- }
- }
- .tpa-submit__title--line-height {
- line-height: map-get($spacers, 6);
+ .alert-warning {
+ margin-top: 1.25rem;
+ margin-bottom: 0rem;
}
- .text-color--darker-gray {
- color: $darker-gray;
+ .tpa-submit-title {
+ font-size: 1.25rem;
+ color: $black;
+ font-weight: 400;
+ margin-top: 1.25rem;
+ margin-bottom: .625rem;
}
- .text-color--black {
+ .recal-alert {
+ margin-bottom: 4rem;
+ }
+
+ b {
+ font-weight: $font-weight-bold;
color: $black;
}
hr {
- opacity: 1;
- color: $gray-350;
+ margin: 1.875rem 0rem;
+ }
+
+ .fw-bold {
+ color: $black;
+ }
+
+ .order-details-title {
+ margin-bottom: .625rem;
+ }
+
+ .modal.recal-modal .modal-dialog {
+ .modal-header {
+ justify-content: start;
+ margin: 0rem;
+ padding: 1.25rem 1.25rem .625rem 1.25rem;
+ .modal-title {
+ font-weight: $font-weight-bolder;
+ font-size: .875rem;
+ line-height: 1.25rem;
+ text-align: start;
+ justify-content: start;
+ }
+ .btn-close {
+ display: none;
+ }
+ }
+ .modal-body {
+ padding: 0rem 1.25rem 1.25rem 1.25rem;
+ b {
+ font-weight: 600;
+ }
+ }
+ .recal-modal-subheader {
+ font-weight: $font-weight-bold;
+ color: $black;
+ }
+ .recal-modal-image {
+ margin: 1.25rem 0rem
+ }
}
}
diff --git a/src/store/index.js b/src/store/index.js
index 05927b17..3959bd62 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -197,6 +197,7 @@ export const getDefaultState = () => ({
homePhone: null,
alternativePhone: null,
servicePhone: null,
+ extension: null,
requestTextUpdates: false,
notesForTechnician: ''
},
@@ -354,6 +355,7 @@ export const useMainStore = defineStore({
homePhone: s.order.contactInfo.homePhone,
alternativePhone: s.order.contactInfo.alternativePhone,
servicePhone: s.order.contactInfo.servicePhone,
+ extension: s.order.contactInfo.extension,
requestTextUpdates: s.order.contactInfo.requestTextUpdates ?? false,
notesForTechnician: s.order.contactInfo.notesForTechnician
}),
@@ -2572,9 +2574,12 @@ export const useMainStore = defineStore({
updatePhoneNumbers(phoneNumbers) {
const contact = this.order.contactInfo;
+ console.log('Updating phone numbers with:', phoneNumbers);
+ console.log('Current contact info before update:', contact);
contact.homePhone = phoneNumbers.home !== undefined ? phoneNumbers.home : contact.homePhone;
contact.alternativePhone = phoneNumbers.alternative !== undefined ? phoneNumbers.alternative : contact.alternativePhone;
contact.servicePhone = phoneNumbers.service !== undefined ? phoneNumbers.service : contact.servicePhone;
+ contact.extension = phoneNumbers.extension !== undefined ? phoneNumbers.extension : contact.extension;
},
GetExperimentsByUser(userId) {
diff --git a/src/store/store.spec.js b/src/store/store.spec.js
index 154776b2..239589ee 100644
--- a/src/store/store.spec.js
+++ b/src/store/store.spec.js
@@ -494,18 +494,21 @@ describe('Store', () => {
const homePhone = getRandomInt(1000000000, 9999999999);
const servicePhone = getRandomInt(1000000000, 9999999999);
const altPhone = getRandomInt(1000000000, 9999999999);
+ const extension = getRandomInt(10000, 99999);
// Act
store.updatePhoneNumbers({
home: homePhone,
service: servicePhone,
- alternative: altPhone
+ alternative: altPhone,
+ extension: extension
});
// Assert
expect(store.contactInfo.homePhone).toEqual(homePhone);
expect(store.contactInfo.servicePhone).toEqual(servicePhone);
expect(store.contactInfo.alternativePhone).toEqual(altPhone);
+ expect(store.contactInfo.extension).toEqual(extension);
});
it('All null values => contact info set in store to all nulls', () => {
// Act
diff --git a/src/ux-components/alert/alert.vue b/src/ux-components/alert/alert.vue
index 00b3e91f..cda82a85 100644
--- a/src/ux-components/alert/alert.vue
+++ b/src/ux-components/alert/alert.vue
@@ -226,6 +226,7 @@ export default {
padding: 0rem .625rem;
}
.btn-collapse {
+ display: flex;
border: none;
background: none;
min-width: 1rem;
@@ -242,7 +243,7 @@ export default {
}
}
a {
- text-decoration: none;
+ font-weight: $font-weight-normal;
}
border-color: transparent;
.btn-close {