Merge branch 'develop' into rlsmerge/2025.02.27-to-develop
This commit is contained in:
commit
9ebfcd4fb3
8 changed files with 107 additions and 23 deletions
|
|
@ -19,6 +19,7 @@ const experimentSettings = {
|
||||||
INSURANCE_TAB_TO_DISPLAY_THRESHOLD_EXTERNAL: "NextGen_ExternalInsuranceTabDisplayThreshold",
|
INSURANCE_TAB_TO_DISPLAY_THRESHOLD_EXTERNAL: "NextGen_ExternalInsuranceTabDisplayThreshold",
|
||||||
DISPLAY_MSR: "DisplayMSR",
|
DISPLAY_MSR: "DisplayMSR",
|
||||||
PRICING_BY_DAY: "DisplayPricingByDay",
|
PRICING_BY_DAY: "DisplayPricingByDay",
|
||||||
|
FOSTER_LOVE: "DisplayFosterLove",
|
||||||
};
|
};
|
||||||
|
|
||||||
const experimentTriggers = {
|
const experimentTriggers = {
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,9 @@
|
||||||
target="_blank" />
|
target="_blank" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="px-4" :class="[showDonationSuccess ? 'hide-donation-block' : 'show-donation-block']">
|
<div
|
||||||
|
class="px-4"
|
||||||
|
:class="[showDonationSuccess ? 'hide-donation-block' : 'show-donation-block']">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<div class="donation-slider my-4">
|
<div class="donation-slider my-4">
|
||||||
|
|
@ -31,9 +33,17 @@
|
||||||
:value="donationValues[0]"
|
:value="donationValues[0]"
|
||||||
checked />
|
checked />
|
||||||
<label for="one" class="label">$1</label>
|
<label for="one" class="label">$1</label>
|
||||||
<input name="amount" id="three" type="radio" :value="donationValues[1]" />
|
<input
|
||||||
|
name="amount"
|
||||||
|
id="three"
|
||||||
|
type="radio"
|
||||||
|
:value="donationValues[1]" />
|
||||||
<label for="three" class="label">$3</label>
|
<label for="three" class="label">$3</label>
|
||||||
<input name="amount" id="five" type="radio" :value="donationValues[2]" />
|
<input
|
||||||
|
name="amount"
|
||||||
|
id="five"
|
||||||
|
type="radio"
|
||||||
|
:value="donationValues[2]" />
|
||||||
<label for="five" class="label">$5</label>
|
<label for="five" class="label">$5</label>
|
||||||
<div class="indicator-bar"></div>
|
<div class="indicator-bar"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -201,19 +201,44 @@ export default {
|
||||||
If this experiment wins, move this to package-label ::before/::after below
|
If this experiment wins, move this to package-label ::before/::after below
|
||||||
*/
|
*/
|
||||||
&:before {
|
&:before {
|
||||||
top: 15px;
|
top: 0.9375rem;
|
||||||
}
|
}
|
||||||
&:after {
|
&:after {
|
||||||
top: 30px;
|
top: 1.875rem;
|
||||||
|
}
|
||||||
|
@include media-breakpoint-up(lg) {
|
||||||
|
&:before {
|
||||||
|
top: .5rem;
|
||||||
|
}
|
||||||
|
&:after {
|
||||||
|
top: 1.4375rem;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
span {
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+ .package-label.pricing-by-day-pkg-lbl-ins {
|
+ .package-label.pricing-by-day-pkg-lbl-ins {
|
||||||
&:before {
|
&:before {
|
||||||
top: 5px;
|
top: .3125rem;
|
||||||
}
|
}
|
||||||
&:after {
|
&:after {
|
||||||
top: 20px;
|
top: 1.25rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ .package-label.pricing-by-day-pkg-lbl {
|
||||||
|
&:before {
|
||||||
|
top: 0.9375rem;
|
||||||
|
@include media-breakpoint-up(lg) {
|
||||||
|
top: .3125rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:after {
|
||||||
|
top: 1.25rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -350,7 +375,8 @@ export default {
|
||||||
&.pricing-info-pricing-by-day {
|
&.pricing-info-pricing-by-day {
|
||||||
text-align: end;
|
text-align: end;
|
||||||
color: $green;
|
color: $green;
|
||||||
font-size: 0.875rem;
|
font-size: 1rem;
|
||||||
|
line-height: 1;
|
||||||
span.strikethrough-price {
|
span.strikethrough-price {
|
||||||
text-decoration: line-through;
|
text-decoration: line-through;
|
||||||
font-size: 0.75rem;
|
font-size: 0.75rem;
|
||||||
|
|
@ -376,6 +402,7 @@ export default {
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
align-self: flex-start;
|
align-self: flex-start;
|
||||||
|
line-height: 1;
|
||||||
div.strikethrough-discount-price {
|
div.strikethrough-discount-price {
|
||||||
display: inline;
|
display: inline;
|
||||||
text-decoration: line-through;
|
text-decoration: line-through;
|
||||||
|
|
@ -392,8 +419,12 @@ export default {
|
||||||
div.discount-price {
|
div.discount-price {
|
||||||
color: $green;
|
color: $green;
|
||||||
display: inline;
|
display: inline;
|
||||||
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.caption {
|
||||||
|
font-size: 0.625rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ul {
|
ul {
|
||||||
margin: 1rem 0 0 -5px;
|
margin: 1rem 0 0 -5px;
|
||||||
|
|
|
||||||
|
|
@ -151,6 +151,7 @@ export default {
|
||||||
|
|
||||||
&.btn {
|
&.btn {
|
||||||
&.btn-secondary {
|
&.btn-secondary {
|
||||||
|
font-weight: 900;
|
||||||
border: none;
|
border: none;
|
||||||
&:hover,
|
&:hover,
|
||||||
&:active,
|
&:active,
|
||||||
|
|
@ -180,6 +181,7 @@ export default {
|
||||||
transition: background 0s 0s ease-in-out;
|
transition: background 0s 0s ease-in-out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal.modal-component .modal-dialog .modal-content {
|
.modal.modal-component .modal-dialog .modal-content {
|
||||||
.modal-header {
|
.modal-header {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@
|
||||||
:isItac="isItac"
|
:isItac="isItac"
|
||||||
:isNoComp="isNoComp" />
|
:isNoComp="isNoComp" />
|
||||||
|
|
||||||
<div class="mt-3">
|
<div class="mt-3" v-if="displayFosterLove">
|
||||||
<donationBlock
|
<donationBlock
|
||||||
cmsWidgetName="DonationWidget"
|
cmsWidgetName="DonationWidget"
|
||||||
v-model="donationAmount"
|
v-model="donationAmount"
|
||||||
|
|
@ -245,6 +245,12 @@ export default {
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
DisplayFosterLove() {
|
||||||
|
return experimentMixin.methods.hasSettingEqualTo(
|
||||||
|
experimentSettings.FOSTER_LOVE,
|
||||||
|
"true"
|
||||||
|
);
|
||||||
|
},
|
||||||
isRecalibrationOnOrder() {
|
isRecalibrationOnOrder() {
|
||||||
return containsRecalParts(this?.lineItems);
|
return containsRecalParts(this?.lineItems);
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ export async function getPricedMobileFeePart(serviceZipCode, pageNameToLog) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const zipCodeData = await baseMixin.methods.getZipCodeData(serviceZipCode, pageNameToLog);
|
const zipCodeData = await getZipCodeData(serviceZipCode);
|
||||||
|
|
||||||
// Get the Mobile Fee Part
|
// Get the Mobile Fee Part
|
||||||
const mobileFeePart = await baseMixin.methods.dispatchStoreActionWithLogging(
|
const mobileFeePart = await baseMixin.methods.dispatchStoreActionWithLogging(
|
||||||
|
|
@ -103,3 +103,7 @@ export async function getAvailabilityRating(
|
||||||
|
|
||||||
return shopStatus;
|
return shopStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getZipCodeData(serviceZipCode) {
|
||||||
|
return await baseMixin.methods.getZipCodeData(serviceZipCode, "service-location");
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,15 @@ jest.mock(
|
||||||
getShopProviderData: jest.fn((mockServiceZipCode) => {
|
getShopProviderData: jest.fn((mockServiceZipCode) => {
|
||||||
return mockGetShopProviderData(mockServiceZipCode);
|
return mockGetShopProviderData(mockServiceZipCode);
|
||||||
}),
|
}),
|
||||||
|
getZipCodeData: jest.fn().mockImplementation(() => {
|
||||||
|
return Promise.resolve({
|
||||||
|
containsMilitaryBase: false,
|
||||||
|
isServiceable: true,
|
||||||
|
isValid: true,
|
||||||
|
state: "testState",
|
||||||
|
zipCodeCtu: "testCTU",
|
||||||
|
});
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -424,6 +433,7 @@ describe("service-location.vue", () => {
|
||||||
},
|
},
|
||||||
selectedAppointmentType: "Mobile",
|
selectedAppointmentType: "Mobile",
|
||||||
providerData: { mobileProviderNumber: "01820" },
|
providerData: { mobileProviderNumber: "01820" },
|
||||||
|
isGlassServiceableMobile: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
const mobileLocationQuestionsComponent = wrapper.findComponent({
|
const mobileLocationQuestionsComponent = wrapper.findComponent({
|
||||||
|
|
@ -459,6 +469,7 @@ describe("service-location.vue", () => {
|
||||||
isVehicleProtected: true,
|
isVehicleProtected: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
wrapper.vm.closeModalAction = jest.fn();
|
||||||
// Act
|
// Act
|
||||||
|
|
||||||
// Trigger the event
|
// Trigger the event
|
||||||
|
|
@ -483,6 +494,7 @@ describe("service-location.vue", () => {
|
||||||
},
|
},
|
||||||
selectedAppointmentType: "Mobile",
|
selectedAppointmentType: "Mobile",
|
||||||
providerData: { mobileProviderNumber: "01820" },
|
providerData: { mobileProviderNumber: "01820" },
|
||||||
|
isGlassServiceableMobile: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
const mobileLocationQuestionsComponent = wrapper.findComponent({
|
const mobileLocationQuestionsComponent = wrapper.findComponent({
|
||||||
|
|
@ -532,6 +544,7 @@ describe("service-location.vue", () => {
|
||||||
zipCodeCtu: "01526",
|
zipCodeCtu: "01526",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
wrapper.vm.closeModalAction = jest.fn();
|
||||||
// Act
|
// Act
|
||||||
|
|
||||||
// Trigger the event
|
// Trigger the event
|
||||||
|
|
@ -563,6 +576,7 @@ describe("service-location.vue", () => {
|
||||||
});
|
});
|
||||||
mobileLocationQuestionsComponent.resetComponent = jest.fn();
|
mobileLocationQuestionsComponent.resetComponent = jest.fn();
|
||||||
wrapper.vm.forwardButtonAction = jest.fn();
|
wrapper.vm.forwardButtonAction = jest.fn();
|
||||||
|
wrapper.vm.isServiceableMobile = true;
|
||||||
|
|
||||||
const serviceZipCodeComponent = wrapper.findComponent({
|
const serviceZipCodeComponent = wrapper.findComponent({
|
||||||
ref: "serviceZipCodeQuestion",
|
ref: "serviceZipCodeQuestion",
|
||||||
|
|
@ -580,6 +594,7 @@ describe("service-location.vue", () => {
|
||||||
isVehicleProtected: "YesAnswer",
|
isVehicleProtected: "YesAnswer",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
wrapper.vm.closeModalAction = jest.fn();
|
||||||
// Act
|
// Act
|
||||||
mobileLocationQuestionsComponent.vm.$emit(
|
mobileLocationQuestionsComponent.vm.$emit(
|
||||||
"setMobileLocationAndProceed",
|
"setMobileLocationAndProceed",
|
||||||
|
|
|
||||||
|
|
@ -149,6 +149,7 @@ import {
|
||||||
getPricedMobileFeePart,
|
getPricedMobileFeePart,
|
||||||
getServiceabilityDetails,
|
getServiceabilityDetails,
|
||||||
getShopProviderData,
|
getShopProviderData,
|
||||||
|
getZipCodeData,
|
||||||
} from "@/layouts/service-location/helpers/service-location-helper/service-location-helper";
|
} from "@/layouts/service-location/helpers/service-location-helper/service-location-helper";
|
||||||
import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper";
|
import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper";
|
||||||
import { applicationConfig } from "@/constants/application-config";
|
import { applicationConfig } from "@/constants/application-config";
|
||||||
|
|
@ -206,10 +207,7 @@ export default {
|
||||||
const cmsContentPromise = fetchCmsContentForPage(to.query.fmgPage);
|
const cmsContentPromise = fetchCmsContentForPage(to.query.fmgPage);
|
||||||
|
|
||||||
const serviceZipCode = store.getters.order.serviceLocation.zipCode;
|
const serviceZipCode = store.getters.order.serviceLocation.zipCode;
|
||||||
const zipCodeDataPromise = baseMixin.methods.getZipCodeData(
|
const zipCodeDataPromise = getZipCodeData(serviceZipCode);
|
||||||
serviceZipCode,
|
|
||||||
"service-location"
|
|
||||||
);
|
|
||||||
|
|
||||||
const serviceabilityDetailsPromise = getServiceabilityDetails(
|
const serviceabilityDetailsPromise = getServiceabilityDetails(
|
||||||
serviceZipCode,
|
serviceZipCode,
|
||||||
|
|
@ -475,17 +473,31 @@ export default {
|
||||||
},
|
},
|
||||||
//creating async function as the computed property can not directly handle asynchronous operations or promises.
|
//creating async function as the computed property can not directly handle asynchronous operations or promises.
|
||||||
async setMobileLocationQuestions(newValue) {
|
async setMobileLocationQuestions(newValue) {
|
||||||
if (newValue.addressQuestions.zipCode !== this.zipCode) {
|
var newZipCode = newValue.addressQuestions.zipCode;
|
||||||
await getShopProviderData(newValue.addressQuestions.zipCode).then((result) => {
|
if (newZipCode !== this.zipCode) {
|
||||||
this.shopProviderData = result.data;
|
await getShopProviderData(newZipCode).then((result) => {
|
||||||
this.selectedProvider = new Provider(
|
if (this.isServiceableMobile) {
|
||||||
this.shopProviderData.mobileProviderNumber
|
this.shopProviderData = result.data;
|
||||||
);
|
this.selectedProvider = new Provider(
|
||||||
|
this.shopProviderData.mobileProviderNumber
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (this.isServiceableMobile) {
|
||||||
|
this.setMobileLocation(newValue);
|
||||||
|
//proceed to next page
|
||||||
|
this.forwardButtonAction();
|
||||||
|
} else {
|
||||||
|
this.closeModalAction("mobileLocationQuestions");
|
||||||
|
await getZipCodeData(newZipCode).then((zipCodeData) => {
|
||||||
|
this.serviceZipCodeQuestion = {
|
||||||
|
state: zipCodeData.state,
|
||||||
|
zipCode: newZipCode,
|
||||||
|
zipCodeCtu: zipCodeData.zipCodeCtu,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
this.setMobileLocation(newValue);
|
|
||||||
//proceed to next page
|
|
||||||
this.forwardButtonAction();
|
|
||||||
},
|
},
|
||||||
getServiceAddressFromStore() {
|
getServiceAddressFromStore() {
|
||||||
return store.getters.order.serviceLocation.address;
|
return store.getters.order.serviceLocation.address;
|
||||||
|
|
@ -669,6 +681,9 @@ export default {
|
||||||
openModalAction(modalName) {
|
openModalAction(modalName) {
|
||||||
this.$refs[modalName].openModal();
|
this.$refs[modalName].openModal();
|
||||||
},
|
},
|
||||||
|
closeModalAction(modalName) {
|
||||||
|
this.$refs[modalName].closeModal();
|
||||||
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
zipCode: {
|
zipCode: {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue