diff --git a/src/helpers/damage-review-content-generator.js b/src/helpers/damage-review-content-generator.js new file mode 100644 index 00000000..a6d8f7b5 --- /dev/null +++ b/src/helpers/damage-review-content-generator.js @@ -0,0 +1,71 @@ +import damageLocationsSelected from '@/constants/damage-locations-selected.js'; + +function getLocationAnswer(damageLocation, locationAnswers) { + return locationAnswers?.find((answer) => answer.Name === damageLocation); +} + +function getGlassPieces(damageLocation, glassToReplace) { + return glassToReplace?.filter((item) => item.glassLocation === damageLocation); +} + +function getWindshieldCopy(answerContent, glassToReplace, isRepair) { + const windshieldPieces = getGlassPieces(damageLocationsSelected.WINDSHIELD, glassToReplace); + return isRepair || !!windshieldPieces?.length ? [answerContent?.Text] : []; +} + +function getRearCopy(answerContent, glassToReplace) { + const rearPieces = getGlassPieces(damageLocationsSelected.REAR, glassToReplace); + return rearPieces?.length ? [answerContent?.Text] : []; +} + +function generateBulletedListFromAnswers(answers) { + const items = answers.map((answer) => `
  • ${answer.Text}
  • `); + return ``; +} + +function getSideCopy(location, locationAnswers, damageAnswers, glassToReplace) { + const sideItems = getGlassPieces(location, glassToReplace); + const damageAnswersOnOrder = damageAnswers?.filter((answer) => + sideItems?.some((glassPiece) => answer.Name === glassPiece.glassName)); + + return sideItems?.length + ? [ + locationAnswers?.Text, + generateBulletedListFromAnswers(damageAnswersOnOrder) + ] + : []; +} + +function getDamageDisplayContent( + locationAnswers, + driverSideDamageAnswers, + passengerSideDamageAnswers, + glassToReplace, + isRepair +) { + return [ + ...getWindshieldCopy( + getLocationAnswer(damageLocationsSelected.WINDSHIELD, locationAnswers), + glassToReplace, + isRepair + ), + ...getSideCopy( + damageLocationsSelected.DRIVER, + getLocationAnswer(damageLocationsSelected.DRIVER, locationAnswers), + driverSideDamageAnswers, + glassToReplace + ), + ...getSideCopy( + damageLocationsSelected.PASSENGER, + getLocationAnswer(damageLocationsSelected.PASSENGER, locationAnswers), + passengerSideDamageAnswers, + glassToReplace + ), + ...getRearCopy( + getLocationAnswer(damageLocationsSelected.REAR, locationAnswers), + glassToReplace + ) + ]; +} + +export { getDamageDisplayContent, getLocationAnswer }; diff --git a/src/layouts/review-page/review-sections/damage-review/damage-review.vue b/src/layouts/review-page/review-sections/damage-review/damage-review.vue index 4e0b0878..a2e4a2a3 100644 --- a/src/layouts/review-page/review-sections/damage-review/damage-review.vue +++ b/src/layouts/review-page/review-sections/damage-review/damage-review.vue @@ -9,6 +9,8 @@ diff --git a/src/layouts/tpa-submit/review-block/review-block.vue b/src/layouts/tpa-submit/review-block/review-block.vue index 5d13e48f..4f5af710 100644 --- a/src/layouts/tpa-submit/review-block/review-block.vue +++ b/src/layouts/tpa-submit/review-block/review-block.vue @@ -21,8 +21,8 @@

    - {{ line }} + class="small review-block__body--line" + v-html="line">

    diff --git a/src/layouts/tpa-submit/tpa-submit.vue b/src/layouts/tpa-submit/tpa-submit.vue index 1ba7f98a..6a0afbbf 100644 --- a/src/layouts/tpa-submit/tpa-submit.vue +++ b/src/layouts/tpa-submit/tpa-submit.vue @@ -78,7 +78,9 @@ :customText="orderDetailsBody" :marginTopSizeOverride="4" class="mb-4 px-4 small text-color--darker-gray" /> - + this.navigate(scenario) }; }, forwardButtonAction() { this.navigate(this.navigationScenarios.CLICKED_FORWARD); }, - getNavigateByScenarioMethod(scenario) { - return () => this.navigate(scenario); - }, navigate(scenario) { this.$router.navigate(scenario, this.$route); }, @@ -255,12 +276,18 @@ export default { return null; } }, + getAnswersNullSafe(widgetName) { + const rawAnswers = this.getCmsContent(widgetName, 'Answers'); + return rawAnswers || []; + }, processIfStatements, getStringWithCustomValues, toDisplayPhoneNumber, toTitleCase, formatAddress, - formatAmountInDollars + formatAmountInDollars, + getDamageDisplayContent, + getLocationAnswer } }; diff --git a/src/store/index.js b/src/store/index.js index 0249b80c..facfa026 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -13,7 +13,6 @@ import damageLocationsSelected from '@/constants/damage-locations-selected'; import coverageStatuses from '@/constants/coverage-statuses'; import { AppointmentTypeStrings, PREMIUM_FEE_PART_TYPE } from '@/constants/schedule-constants'; import { convertDateStringToDate, getDateDifferenceInDays, militaryToTwelveHourTime } from '@/helpers/date-helper'; -// import endorsementOptions from '@/constants/endorsement-options'; const storeId = 'main'; @@ -220,6 +219,7 @@ export const useMainStore = defineStore({ lineItems: (state) => state.order.lineItems, payment: (state) => state.order.payment, policy: (state) => state.order.policy, + hasExactlyOneChip: () => state.order.damage.numberOfChips === 1, hasAnyNonWindshieldGlassParts: (s) => !s.order.policy.isDamageGlassOnly, isMobileAppointment: (state) => state.order.serviceLocation.appointmentType === AppointmentTypeStrings.MOBILE || state.order.serviceLocation.appointmentType === AppointmentTypeStrings.MOBILE_NOT_ITAC_AND_NOT_NOCOMP,