diff --git a/src/assets/img/icons/chevron-circle_review_dropdown.png b/src/assets/img/icons/chevron-circle_review_dropdown.png new file mode 100644 index 00000000..c2360997 Binary files /dev/null and b/src/assets/img/icons/chevron-circle_review_dropdown.png differ diff --git a/src/constants/progress-bar-mapper.js b/src/constants/progress-bar-mapper.js index efb6225d..c47c738a 100644 --- a/src/constants/progress-bar-mapper.js +++ b/src/constants/progress-bar-mapper.js @@ -60,10 +60,11 @@ export const pageProgressMapper = { percent: 85 }, 'payment-method': { - percent: 90 + percent: 95 }, 'payment-page': { - percent: 95 + // No progress bar on this page + percent: 0 }, 'tpa-search': { percent: 80 diff --git a/src/helpers/cart-helper.js b/src/helpers/cart-helper.js index af2cb1b9..c0864433 100644 --- a/src/helpers/cart-helper.js +++ b/src/helpers/cart-helper.js @@ -142,3 +142,18 @@ export function getSalesTax(order) { export function getCartTotal(order) { return Math.round((getSubtotal(order) + getSalesTax(order)) * 100) / 100; } + +/** + * Returns the total price of all recal child parts on the order + * @param {object} order order object + * @returns {number} total price of all recal child parts on the order + */ +export function getRecalibrationTotal(order) { + const itemsWithRecalibration = getServiceLineItems(order) + .filter((item) => item.requiresRecalibration); + const recalibrationLineItems = itemsWithRecalibration.map((item) => { + return item.childParts?.find((child) => child.partType === partTypeStrings.RECALIBRATION || child.partType === partTypeStrings.ADAS_RECALIBRATION) ?? {}; + }); + + return getPriceOfLineItems(recalibrationLineItems); +} diff --git a/src/iss-components/cart-dropdown/cart-dropdown.vue b/src/iss-components/cart-dropdown/cart-dropdown.vue index fa106ffe..fe3183b9 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.vue +++ b/src/iss-components/cart-dropdown/cart-dropdown.vue @@ -1,20 +1,30 @@ @@ -128,6 +128,7 @@ import { getCartTotal, getDeductible, getLineItems, getMobileFeeLineItem, + getRecalibrationTotal, getRecycleFeeLineItem, getSalesTax, getServiceLineItems, getSubtotal, isOrderITAC, isOrderNoComp, isOrderUnverified @@ -136,7 +137,6 @@ import { getPriceOfLineItems, getTaxOfLineItems } from '@/helpers/price-calculat import { processIfStatements } from '@/helpers/cms-content-helper'; const VERIFYING_COVERAGE = 'Verifying coverage'; -const RECYCLING_MODAL_REF_NAME = 'RecycleModal'; export default { name: 'confirmation-cart', @@ -148,7 +148,6 @@ export default { props: { readOnly: Boolean, showAsPaid: Boolean, - recyclingModalCmsWidgetName: String, submittedOrder: Object }, data() { @@ -158,6 +157,7 @@ export default { amountPaid: 'AmountPaidTextWidget', deductible: 'DeductibleWidget', basePrice: 'BasePriceWidget', + recalibration: 'RecalibrationWidget', subtotal: 'SubtotalWidget', salesTax: 'SalesTaxWidget', recycleFee: 'RecycleFeeWidget', @@ -167,8 +167,7 @@ export default { warrantyText: 'WarrantyCartItemTextWidget', guaranteeText: 'GuaranteeCartItemTextWidget' }, - cartItemType, - RECYCLING_MODAL_REF_NAME + cartItemType }; }, computed: { @@ -181,9 +180,18 @@ export default { deductible() { return getDeductible(this.cartOrder); }, + isDeductibleOnly() { + return this.deductible > 0 && this.subTotal === this.deductible; + }, showDeductibleCartItem() { return this.isUnverified || (!this.isNoComp && !this.isITAC); }, + showRecalibrationCartItem() { + return this.recalibrationPrice > 0; + }, + recalibrationPrice() { + return getRecalibrationTotal(this.cartOrder); + }, lineItems() { return getLineItems(this.cartOrder); }, @@ -191,7 +199,8 @@ export default { return getRecycleFeeLineItem(this.cartOrder); }, servicePrice() { - return getPriceOfLineItems(getServiceLineItems(this.cartOrder)) ?? 0; + const price = getPriceOfLineItems(getServiceLineItems(this.cartOrder)) ?? 0; + return price - this.recalibrationPrice; }, isUnverified() { return isOrderUnverified(this.cartOrder); @@ -327,6 +336,9 @@ export default { this.getCustomValueFromString ); }, + recalibrationLabel() { + return this.getCmsContent(this.widget.recalibration, widgetFields.TEXT_BLOCK_WIDGET.TEXT); + }, subtotalLabel() { return this.getCmsContent(this.widget.subtotal, widgetFields.TEXT_BLOCK_WIDGET.TEXT); }, @@ -452,8 +464,6 @@ export default { diff --git a/src/layouts/payment-method/payment-method-question/payment-method-list-button/payment-method-list-button.vue b/src/layouts/payment-method/payment-method-question/payment-method-list-button/payment-method-list-button.vue index 0f834cbc..c3601cbf 100644 --- a/src/layouts/payment-method/payment-method-question/payment-method-list-button/payment-method-list-button.vue +++ b/src/layouts/payment-method/payment-method-question/payment-method-list-button/payment-method-list-button.vue @@ -2,32 +2,30 @@ -
+ buttonWrapperClasses="list-group base-input-button list-button d-flex flex-column w-100 no-hover"> +
+
+ + + + {{ getInlineAltText(token) }} + + + {{ token }} + + +
-
-

- - - - {{ getInlineAltText(token) }} - - - {{ token }} - - -

-
@@ -78,48 +76,26 @@ export default { outline: none; input[type="radio"], input[type="checkbox"] { - position: static; //override bootstrap - - &:focus-visible + .list-button-content { - box-shadow: 0 0 0 2.5px $blue; - } - &:focus + .list-button-content { - box-shadow: 0 0 0 2.5px $blue; - } &:checked + .list-button-content { + background: $background-color-selected; + border-color: $heritage-blue-primary; + font-weight: 600; color: $black; - font-weight: 500; - background: $blue-100; - box-shadow: 0 0 0 1px $blue; - } - &:checked:focus + .list-button-content { - box-shadow: 0 0 0 2.5px $blue; - } - &:checked + .list-button-content p, - &:checked + .list-button-content span { - font-weight: 500; - } - &:checked + .list-button-content span:nth-child(2) { - font-weight: 400; - color: $gray-600; } } } .list-button-content { - color: $gray-600; + color: $darker-gray; + font-weight: 400; position: relative; background: $white; transition: all 150ms linear; - border-radius: $border-radius-lg; - border: 1px solid $gray-500; + border-radius: 3.75rem; + border: 1px solid #CACBCC; width: 100%; outline: none; - - span { - &.small { - font-size: $font-size-xsm; - color: $gray-550; - } - } + padding: .625rem 2rem; + height: 2.875rem; + margin-bottom: .75rem; } diff --git a/src/layouts/payment-method/payment-method-question/payment-method-question.vue b/src/layouts/payment-method/payment-method-question/payment-method-question.vue index d8376879..33d82adf 100644 --- a/src/layouts/payment-method/payment-method-question/payment-method-question.vue +++ b/src/layouts/payment-method/payment-method-question/payment-method-question.vue @@ -19,6 +19,7 @@ import buttonQuestion from '@/digital-components/button-question/button-question.vue'; import widgetFields from '@/constants/cms-widget-fields.js'; import paymentMethodListButton from './payment-method-list-button/payment-method-list-button.vue'; +import { markRaw } from 'vue'; export default { name: 'payment-method-question', @@ -33,7 +34,7 @@ export default { emits: ['update:modelValue'], data() { return { - paymentMethodListButton + paymentMethodListButton: markRaw(paymentMethodListButton) }; }, computed: { diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index ba1f761b..8b675e33 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -12,21 +12,24 @@
+ + class="subheader" + cmsWidgetName="SiteSubHeaderWidget" />
-
+
-
+
+ -
+
$page-side-padding: 1.5rem; -.iss-heritage-container-width { +#app .iss-heritage-container-width { + .iss-heritage-content-container-width { + @include media-breakpoint-up(md) { + width: 58.33333333%; + } + } .payment-method-container { position: relative; min-height: 1px; padding-left: .9375rem; padding-right: .9375rem; + + .alert-warning { + margin-top: 1.25rem; + margin-bottom: 0rem; + } + + .subheader { + margin-top: 1.25rem; + + :deep(strong) { + color: $black; + font-weight: 600; + } + + :deep(.subheader-secondary) { + margin-top: .625rem; + + p { + margin-bottom: 0; + } + } + } + + .section-divider { + margin-top: 1.5rem; + margin-bottom: 1.875rem; + } + + .pia-divider { + margin-top: .5rem; + margin-bottom: .75rem; + } } } - -.main-content-container { - padding: 0; -} - -.page-container-grouped-styles { - overflow: auto; -} diff --git a/src/layouts/payment-method/review-dropdown/review-dropdown.vue b/src/layouts/payment-method/review-dropdown/review-dropdown.vue index d1504da4..d48b55f3 100644 --- a/src/layouts/payment-method/review-dropdown/review-dropdown.vue +++ b/src/layouts/payment-method/review-dropdown/review-dropdown.vue @@ -1,7 +1,7 @@