diff --git a/src/constants/analytics.js b/src/constants/analytics.js
index c0171209..8cf147e8 100644
--- a/src/constants/analytics.js
+++ b/src/constants/analytics.js
@@ -11,22 +11,29 @@ const GaEvents = Object.freeze({
const GaCategories = Object.freeze({
API_RESPONSE: 'Api_Response',
+ CONFIRMATION_CLICKED: "confirmation clicked",
+ CONFIRMATION_CLICKED_INSHOP: "inshop confirmation clicked",
+ CONFIRMATION_CLICKED_MOBILE: "mobile confirmation clicked",
EVOX: 'Evox'
});
const GaActions = Object.freeze({
- RESULT: 'Result',
CLICKED: 'Clicked',
+ NO: "no",
+ RESULT: 'Result',
+ SUBMITTED: 'Submitted',
VIF: 'vif',
- SUBMITTED: 'Submitted'
+ YES: "yes",
});
const GaLabels = Object.freeze({
- SUCCESS: 'Success',
+ ADDRESS_LOOKUP: 'Address_Look_up',
ERROR: 'Error',
LICENSE_PLATE_LOOKUP: 'License_Plate_Look_Up',
+ NO: "no",
+ SUCCESS: 'Success',
VIN_LOOKUP: 'Vin_Look_Up',
- ADDRESS_LOOKUP: 'Address_Look_up'
+ YES: "yes",
});
const ValueToLogTypes = Object.freeze({
diff --git a/src/constants/experiments.js b/src/constants/experiments.js
index 9e959331..c336503b 100644
--- a/src/constants/experiments.js
+++ b/src/constants/experiments.js
@@ -2,6 +2,7 @@ const experimentUniverses = Object.freeze({
ISS_FUNNEL: 'ISSFunnel',
ISS_FEATURETOGGLE_AREFEES_HIDDEN: 'NextGenISS_FeatureToggle_AreFeesHidden',
ISS_FEATURETOGGLE_AREFEES_OVERRIDDEN: 'NextGenISS_FeatureToggle_AreFeesOverridden',
+ ISS_MOBILE_FIRST_APPOINTMENTS: 'ISS_Mobile_First_Appointments',
ADYEN_PAYMENT_TEST: 'NextGenAdyenPaymentTest'
});
@@ -12,6 +13,9 @@ const experimentSettings = Object.freeze({
ISS_FEATURE_TOGGLE_IS_MOBILE_FEE_OVERRIDDEN: 'OverrideMobileFee',
ISS_FEATURE_TOGGLE_IS_RECYCLE_FEE_HIDDEN: 'HideRecycleFee',
ISS_FEATURE_TOGGLE_IS_RECYCLE_FEE_OVERRIDDEN: 'OverrideRecycleFee',
+ ISS_MOBILE_FIRST_MAX_MOBILE_DAYS: 'MaxMobileDays',
+ ISS_MOBILE_FIRST_MAX_PM_MOBILE_DAYS: 'MaxPmMobileDays',
+ ISS_MOBILE_FIRST_SHOW_FIRST_MOBILE_APPOINTMENT: 'ShowMobileFirstAppointment',
ISS_ENABLE_ADYEN_V1: 'ISS_Enable_Adyen_V1'
});
diff --git a/src/helpers/service-location-helper.js b/src/helpers/service-location-helper.js
index 72572256..13aced81 100644
--- a/src/helpers/service-location-helper.js
+++ b/src/helpers/service-location-helper.js
@@ -15,8 +15,23 @@ function processZipCodeResults(request) {
}));
}
-export async function getZipCodeData(zipCode) {
- return await processZipCodeResults(useMainStore().validateZip({ zip: zipCode }));
+export async function getAvailabilityRating(
+ startDate,
+ endDate,
+ shopAppointmentType,
+ providerNumber
+) {
+ // For a given shop provider number and date range, get the appointment time slots available
+ const shopTimeSlots = await useMainStore().getShopTimeSlots(startDate, endDate, shopAppointmentType, providerNumber);
+
+ const numberOfDaysToEvaluate = 2;
+ const isGoodAvailability =
+ shopTimeSlots.data.days.filter((x) => x.timeSlots.length > 0).length
+ >= numberOfDaysToEvaluate;
+
+ const shopStatus = isGoodAvailability ? 'high' : 'low';
+
+ return Promise.resolve(shopStatus);
}
export async function getMobileZipCodeData(zipCode) {
@@ -42,25 +57,6 @@ export async function getPricedMobileFeePart(serviceZipCode) {
return Promise.resolve(pricingResults[0]);
}
-export async function getAvailabilityRating(
- startDate,
- endDate,
- shopAppointmentType,
- providerNumber
-) {
- // For a given shop provider number and date range, get the appointment time slots available
- const shopTimeSlots = await useMainStore().getShopTimeSlots(startDate, endDate, shopAppointmentType, providerNumber);
-
- const numberOfDaysToEvaluate = 2;
- const isGoodAvailability =
- shopTimeSlots.data.days.filter((x) => x.timeSlots.length > 0).length
- >= numberOfDaysToEvaluate;
-
- const shopStatus = isGoodAvailability ? 'high' : 'low';
-
- return Promise.resolve(shopStatus);
-}
-
export function getProviderData() {
const mainStore = useMainStore();
const storeServiceLocation = mainStore.order.serviceLocation;
@@ -73,6 +69,18 @@ export function getProviderData() {
return { storeServiceLocation, isMobileAppointment, storeSelectedProvider, serviceZipCode }
}
+export async function getZipCodeData(zipCode) {
+ return await processZipCodeResults(useMainStore().validateZip({ zip: zipCode }));
+}
+
+export function mapTimeSlot(timeSlot, timeOfDay) {
+ return {
+ ...timeSlot,
+ isDropoff: timeSlot.id.endsWith('DROP OFF'),
+ timeOfDay
+ };
+}
+
export async function onProviderChanged() {
const { isMobileAppointment, storeSelectedProvider, serviceZipCode } = getProviderData();
if (!storeSelectedProvider) {
@@ -101,4 +109,4 @@ export async function onProviderChanged() {
}
await settleAllPromises(promiseResultMap);
-}
\ No newline at end of file
+}
diff --git a/src/layouts/schedule-page/schedule-page.vue b/src/layouts/schedule-page/schedule-page.vue
index b4a68eb0..6dca265c 100644
--- a/src/layouts/schedule-page/schedule-page.vue
+++ b/src/layouts/schedule-page/schedule-page.vue
@@ -60,6 +60,10 @@
+
+
+
\ No newline at end of file
diff --git a/src/mixins/experiment-mixin.js b/src/mixins/experiment-mixin.js
index 5b1f7142..7f9a761e 100644
--- a/src/mixins/experiment-mixin.js
+++ b/src/mixins/experiment-mixin.js
@@ -8,6 +8,10 @@ export default {
hasSetting(settingName) {
return Object.hasOwn(useMainStore().experimentSettings, settingName);
},
+ getExperimentByName(experimentName) {
+ const experiment = useMainStore().applicationUser.experiments.find((e) => e.universeName === experimentName);
+ return experiment ? experiment : null;
+ },
getSettingValue(settingName) {
return this.hasSetting(settingName)
? useMainStore().experimentSettings[settingName]
diff --git a/src/store/index.js b/src/store/index.js
index 8a4f1b34..2d2b6040 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -2587,6 +2587,9 @@ export const useMainStore = defineStore({
}
);
},
+ logMobileFirstExperimentExposure() {
+ this.logExperimentIfExists(issPageValues.SCHEDULE_PAGE, experimentUniverses.ISS_MOBILE_FIRST_APPOINTMENTS);
+ },
logWelcomePageExperiments(issPage) {
this.logExperimentIfExists(issPage, experimentUniverses.ISS_FEATURETOGGLE_AREFEES_HIDDEN);
this.logExperimentIfExists(issPage, experimentUniverses.ISS_FEATURETOGGLE_AREFEES_OVERRIDDEN);