+
{{ month.monthLabel }} {{ month.yearNum?.toString() }}
= Available
-
Sunday
- S
+ SUN
Monday
- M
+ MON
Tuesday
- T
+ TUE
Wednesday
- W
+ WED
Thursday
- T
+ THU
Friday
- F
+ FRI
Saturday
- S
+ SAT
View more dates
+
@@ -779,6 +838,10 @@ export default {
fieldset {
flex-grow: 1;
position: relative;
+
+ .view-more-dates {
+ color: $blue;
+ }
}
.loader {
height: 2rem;
@@ -791,7 +854,7 @@ export default {
}
.calendar-grid-container {
margin: 0 auto 2rem auto;
- max-width: 414px;
+ max-width: 400px;
position: relative;
transition:
height ease 2s,
@@ -800,15 +863,22 @@ export default {
grid-template-columns: repeat(7, 1fr);
justify-content: center;
align-items: center;
- padding: 0 0.75rem;
+ padding: 0;
+ @include media-breakpoint-up(md) {
+ padding: 0 0.75rem;
+ }
opacity: 1;
.grid-item {
text-align: center;
margin: 10px 3px;
- font-size: 0.875rem;
+ font-size: 0.75rem;
line-height: 1.5;
+ &.caption {
+ color: $gray-550;
+ }
+
&.first-day-,
&.first-day-0 {
grid-column-start: 1;
@@ -841,9 +911,11 @@ export default {
.month-year {
grid-area: 1 / 1 / 2 / 5;
- text-transform: uppercase;
- font-weight: 300;
+ font-family: AvertaBold;
letter-spacing: 0.75px;
+ color: $black;
+ justify-content: center;
+ margin-bottom: 0.5rem;
}
.legend {
grid-area: 1 / 5 / 2 / 8;
@@ -921,7 +993,6 @@ export default {
label {
position: relative;
- cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
@@ -963,9 +1034,14 @@ export default {
&.selectable-day {
label {
background-color: $blue-100;
- min-width: 2.5rem;
- width: 2.5rem;
+ min-width: 2.75rem;
+ width: 2.75rem;
border-radius: 50%;
+ cursor: pointer;
+ @include media-breakpoint-up(md) {
+ min-width: 3rem;
+ width: 3rem;
+ }
}
}
&.unavailable-day {
@@ -1090,8 +1166,8 @@ export default {
}
}
}
- // pricing by day override styles
- &.pricing-by-day {
+ // new calendar styling overrides
+ &.calendar-2025 {
.calendar-grid-container .grid-item {
margin: 0 0 0.15rem 0;
}
@@ -1115,7 +1191,7 @@ export default {
&:focus + label,
&:checked:focus + label {
box-shadow: none;
- background-color: $white;
+ background-color: $blue-100;
color: $black;
}
&:checked + label {
@@ -1142,16 +1218,20 @@ export default {
label {
color: $black;
background-color: $blue-100;
- min-width: 2.5rem;
- width: 2.5rem;
+ min-width: 2.75rem;
+ width: 2.75rem;
border-radius: 0.25rem;
+ @include media-breakpoint-up(md) {
+ min-width: 3rem;
+ width: 3rem;
+ }
}
}
&.current-day {
label:after {
- margin-top: 0.2rem;
+ margin-top: -0.25rem;
position: relative;
- top: 0;
+ top: 0.5rem;
}
}
}
@@ -1189,6 +1269,27 @@ export default {
}
}
}
+ :deep(.button-inner-wrapper) {
+ display: flex;
+ max-width: 100%;
+ flex-wrap: wrap;
+ gap: 0 0.5rem;
+ justify-content: center;
+
+ & > div {
+ flex: 0 0 calc(50% - 0.25rem);
+ }
+ }
+ :deep(.button-question.is-mobile-appointment) {
+ .button-inner-wrapper > div {
+ flex: 0 0 100%;
+ }
+ }
+ :deep(.button-question.is-drop-off-appointment) {
+ .button-inner-wrapper > div {
+ flex: 0 0 100%;
+ }
+ }
}
.btn-link {
diff --git a/src/digital-components/salesforce-webchat/salesforce-helper-qa.js b/src/digital-components/salesforce-webchat/salesforce-helper-qa.js
index 46ae49359..ef08d42de 100644
--- a/src/digital-components/salesforce-webchat/salesforce-helper-qa.js
+++ b/src/digital-components/salesforce-webchat/salesforce-helper-qa.js
@@ -52,7 +52,6 @@ export function initializeSalesforceWebchatForQa() {
};
if (!window.embedded_svc) {
- console.log("no embedded svc found");
var s = document.createElement("script");
s.setAttribute(
"src",
@@ -63,7 +62,6 @@ export function initializeSalesforceWebchatForQa() {
};
document.body.appendChild(s);
} else {
- console.log("embedded svc found");
initESW("https://service.force.com");
}
}
diff --git a/src/digital-components/salesforce-webchat/salesforce-webchat.spec.js b/src/digital-components/salesforce-webchat/salesforce-webchat.spec.js
index 178e431cc..40fc752fd 100644
--- a/src/digital-components/salesforce-webchat/salesforce-webchat.spec.js
+++ b/src/digital-components/salesforce-webchat/salesforce-webchat.spec.js
@@ -3,6 +3,7 @@ import salesforceWebchat from "./salesforce-webchat.vue";
import * as devHelper from "./salesforce-helper-dev";
import * as qaHelper from "./salesforce-helper-qa";
import * as prodHelper from "./salesforce-helper-prod";
+import { applicationConfig } from "../../constants/application-config";
describe("salesforceWebchat.vue", () => {
it("renders correctly", () => {
@@ -21,19 +22,19 @@ describe("salesforceWebchat.vue", () => {
});
it("calls the correct initialization function based on environment", () => {
- process.env.VUE_APP_CURRENT_ENVIRONMENT = "Prod";
+ applicationConfig.CURRENT_ENVIRONMENT = "Prod";
let wrapper = shallowMount(salesforceWebchat);
mockProd = jest.spyOn(prodHelper, "initializeSalesforceWebchatForProd");
wrapper.vm.initializeSalesforceWebchat();
expect(mockProd).toHaveBeenCalled();
- process.env.VUE_APP_CURRENT_ENVIRONMENT = "QA";
+ applicationConfig.CURRENT_ENVIRONMENT = "QA";
wrapper = shallowMount(salesforceWebchat);
mockQa = jest.spyOn(qaHelper, "initializeSalesforceWebchatForQa");
wrapper.vm.initializeSalesforceWebchat();
expect(mockQa).toHaveBeenCalled();
- process.env.VUE_APP_CURRENT_ENVIRONMENT = "Dev";
+ applicationConfig.CURRENT_ENVIRONMENT = "Dev";
wrapper = shallowMount(salesforceWebchat);
mockDev = jest.spyOn(devHelper, "initializeSalesforceWebchatForDev");
wrapper.vm.initializeSalesforceWebchat();
diff --git a/src/digital-components/salesforce-webchat/salesforce-webchat.vue b/src/digital-components/salesforce-webchat/salesforce-webchat.vue
index 95c1348eb..9283bda62 100644
--- a/src/digital-components/salesforce-webchat/salesforce-webchat.vue
+++ b/src/digital-components/salesforce-webchat/salesforce-webchat.vue
@@ -7,6 +7,7 @@
import { initializeSalesforceWebchatForDev } from "./salesforce-helper-dev";
import { initializeSalesforceWebchatForQa } from "./salesforce-helper-qa";
import { initializeSalesforceWebchatForProd } from "./salesforce-helper-prod";
+import { applicationConfig } from "@/constants/application-config";
export default {
name: "salesforceWebchat",
@@ -28,23 +29,16 @@ export default {
},
methods: {
initializeSalesforceWebchat() {
- console.log(
- "process.env.VUE_APP_CURRENT_ENVIRONMENT",
- process.env.VUE_APP_CURRENT_ENVIRONMENT
- );
- switch (process.env.VUE_APP_CURRENT_ENVIRONMENT) {
+ switch (applicationConfig.CURRENT_ENVIRONMENT) {
case "Prod":
- console.log("Prod");
initializeSalesforceWebchatForProd();
break;
case "QA":
case "SysTest":
- console.log("QA");
initializeSalesforceWebchatForQa();
break;
case "Dev":
case "Localhost":
- console.log("Dev");
initializeSalesforceWebchatForDev();
break;
}
diff --git a/src/layouts/address-lookup/address-lookup.spec.js b/src/layouts/address-lookup/address-lookup.spec.js
index 677c14069..87486280f 100644
--- a/src/layouts/address-lookup/address-lookup.spec.js
+++ b/src/layouts/address-lookup/address-lookup.spec.js
@@ -182,6 +182,23 @@ describe("address-lookup.vue", () => {
// Assert
expect(wrapper.findComponent({ ref: "alertVinNotFound" }).isVisible()).toBe(true);
});
+
+ test("should hide the AlertNoService when displayNoServiceAlert is false", async () => {
+ const { wrapper } = setupMocks({
+ isZipServiceable: true,
+ displayNoServiceAlert: false,
+ lookupVinbyAddressResponse: {
+ isStatePermissible: true,
+ vinVehicles: [], // Return no vehicles
+ },
+ });
+ // Ensure displayNoServiceAlert is false
+ await wrapper.setData({ displayNoServiceAlert: false });
+ await wrapper.vm.forwardButtonAction();
+ // Check if the AlertNoService component is not rendered
+ const alertNoService = wrapper.findComponent({ ref: "AlertNoService" });
+ expect(alertNoService.exists()).toBe(false);
+ });
});
describe("navigation", () => {
@@ -741,6 +758,17 @@ function setupMocks({
wrapper.vm.setCmsContent = jest.fn();
wrapper.vm.$refs.navbar.updateButtonText = jest.fn();
wrapper.vm.$refs.navbar.removeLoader = jest.fn();
+ const closestShops = {
+ data: {
+ providers: [
+ { id: 1, name: "Shop 1" },
+ { id: 2, name: "Shop 2" },
+ ],
+ },
+ };
+ wrapper.vm.findClosestApplicableShops = jest.fn().mockImplementation(() => {
+ return new Promise((resolve) => resolve(closestShops));
+ });
return { wrapper };
}
diff --git a/src/layouts/address-lookup/address-lookup.vue b/src/layouts/address-lookup/address-lookup.vue
index ba2f8f6dd..d0cca48d9 100644
--- a/src/layouts/address-lookup/address-lookup.vue
+++ b/src/layouts/address-lookup/address-lookup.vue
@@ -81,13 +81,20 @@