diff --git a/src/assets/img/icons/select-disabled.png b/src/assets/img/icons/select-disabled.png new file mode 100644 index 00000000..03ac8316 Binary files /dev/null and b/src/assets/img/icons/select-disabled.png differ diff --git a/src/constants/error-messages.js b/src/constants/error-messages.js index 3292660a..62e79340 100644 --- a/src/constants/error-messages.js +++ b/src/constants/error-messages.js @@ -68,7 +68,9 @@ const errorMessages = Object.freeze({ BAILOUT_EMAIL_ADDRESS_REQUIRED: 'Email address is required.', TPA_SEARCH_ZIP_FORMAT: 'Please enter a valid Zip code.', TPA_SEARCH_SHOP_FORMAT: 'Please enter a valid shop name.', - TPA_SEARCH_REQUIRED: 'Please enter a shop name or ZIP code.' + TPA_SEARCH_REQUIRED: 'Please enter a shop name or ZIP code.', + SERVICE_ADDRESS_REQUIRED: 'Service street address is required.', + SERVICE_CITY_REQUIRED: 'Service city is required.' }); export default errorMessages; diff --git a/src/digital-components/date-picker/date-picker.vue b/src/digital-components/date-picker/date-picker.vue index 09b6ab44..70519fe4 100644 --- a/src/digital-components/date-picker/date-picker.vue +++ b/src/digital-components/date-picker/date-picker.vue @@ -99,9 +99,9 @@
@@ -256,6 +261,10 @@ export default { appointmentEstimate() { return getDisplayTextForDurationLength(this.appointmentDurationMinutesMinimum, this.appointmentDurationMinutesMaximum); }, + calendarViewDirection() { + if (this.selectableDatesSetting === 'custom') return 'future'; + return 'past'; + }, daysToAdd() { return this.isMobileView ? this.daysInViewMobile : this.daysInViewStandard; }, @@ -284,10 +293,6 @@ export default { this.todayOverrideDateString || convertDateToDateString(new Date()) ); - }, - calendarViewDirection() { - if (this.selectableDatesSetting === 'custom') return 'future'; - return 'past'; } }, watch: { @@ -301,16 +306,16 @@ export default { this.findFirstAvailableDateInView(); } }, + selectedDate(newValue, oldValue) { + if (newValue !== oldValue) { + this.$emit('dateSelected', newValue); + } + }, selectedTimeSlot(newValue, oldValue) { if (newValue !== oldValue) { const testObj = this.getSelectedTimeSlotInfoObject(newValue); this.$emit('timeSlotSelected', testObj); } - }, - selectedDate(newValue, oldValue) { - if (newValue !== oldValue) { - this.$emit('dateSelected', newValue); - } } }, methods: { @@ -340,50 +345,44 @@ export default { addPremiumFlagToInput(routeCode) { return (`${routeCode}${PREMIUM_TIME_SLOT_ID_FLAG}`); }, - removePremiumFlagFromInput(routeCode) { - return routeCode.replace(PREMIUM_TIME_SLOT_ID_FLAG, ''); + checkIsSelectedDay(index, timeOfDayGrouping) { + const dateToShowString = this.getDateToShowString(index); + return this.selectedDate === dateToShowString && this.selectedTimeOfDayGrouping === timeOfDayGrouping; }, - getSelectedTimeSlotInfoObject(timeSlot) { - const routeCode = timeSlot?.id; - let routeCodeToUse = routeCode; - const routeCodeIncludesPremium = routeCode?.includes(PREMIUM_TIME_SLOT_ID_FLAG); - if (routeCodeIncludesPremium) { - routeCodeToUse = this.removePremiumFlagFromInput(routeCode); + checkIsSelectedTimeSlot(timeSlot) { + if (!this.selectedTimeSlot) { + return false; } - - const fullTimeSlot = this.selectableTimeSlotsData?.find((ts) => ts.id === routeCodeToUse); - - if (fullTimeSlot) { - return { - timeSlot: { - date: this.selectedDate, - routeCode: fullTimeSlot.id, - startTime: fullTimeSlot.startTime, - endTime: fullTimeSlot.endTime, - jobMaxMinutes: this.appointmentDurationMinutesMaximum.toString(), - jobMinMinutes: this.appointmentDurationMinutesMinimum.toString() - }, - isPremiumAppointment: !!routeCodeIncludesPremium - }; + return (this.selectedTimeSlot.isDropoff === timeSlot.isDropoff + && this.selectedTimeSlot.startTime === timeSlot.startTime + && this.selectedTimeSlot.timeOfDay === timeSlot.timeOfDay); + }, + displayDropOffInformation(timeSlot) { + if (timeSlot.isDropoff) { + if (timeSlot.timeOfDay === 'morning') { + return this.getCmsContent( + 'DropOffTimeSlotModal', + 'BodyText' + ); + } + return this.getCmsContent( + 'OvernightDropOffTimeSlotModal', + 'BodyText' + ); } - - return { - timeSlot: { - date: null, - startTime: null, - endTime: null, - routeCode: null, - jobMaxMinutes: null, - jobMinMinutes: null - }, - isPremiumAppointment: null - }; + return ''; }, displayTimeSlotTime(timeSlot) { const appointmentType = this.activeAppointmentType || AppointmentTypeStrings.IN_SHOP; if (appointmentType === AppointmentTypeStrings.MOBILE || appointmentType === AppointmentTypeStrings.MOBILE_NOT_ITAC_AND_NOT_NOCOMP) { return `${militaryToTwelveHourTime(timeSlot.startTime)} - ${militaryToTwelveHourTime(timeSlot.endTime)}`; } + if (timeSlot.isDropoff) { + if (timeSlot.timeOfDay === 'morning') { + return 'Drop & Go'; + } + return 'Overnight drop off'; + } return militaryToTwelveHourTime(timeSlot.startTime); }, findFirstAvailableDateInView() { @@ -436,8 +435,7 @@ export default { if (!initialTimeSlot || !initialTimeSlot.startTime) { return; } - const initialStartTime = initialTimeSlot.startTime; - const foundTimeSlot = timeSlots.find((ts) => ts.startTime === initialStartTime); + const foundTimeSlot = timeSlots.find((ts) => ts.startTime === initialTimeSlot.startTime && ts.endTime === initialTimeSlot.endTime); if (foundTimeSlot) { this.selectTimeSlotForDay(foundTimeSlot); } @@ -452,6 +450,44 @@ export default { const dateToShow = this.getDateToShow(index); return convertDateToDateString(dateToShow); }, + getSelectedTimeSlotInfoObject(timeSlot) { + const routeCode = timeSlot?.id; + let routeCodeToUse = routeCode; + const routeCodeIncludesPremium = routeCode?.includes(PREMIUM_TIME_SLOT_ID_FLAG); + if (routeCodeIncludesPremium) { + routeCodeToUse = this.removePremiumFlagFromInput(routeCode); + } + + const fullTimeSlot = this.selectableTimeSlotsData?.find((ts) => ts.id === routeCodeToUse); + + if (fullTimeSlot) { + return { + timeSlot: { + date: this.selectedDate, + routeCode: fullTimeSlot.id, + startTime: fullTimeSlot.startTime, + endTime: fullTimeSlot.endTime, + isDropoff: fullTimeSlot.isDropoff, + jobMaxMinutes: this.appointmentDurationMinutesMaximum.toString(), + jobMinMinutes: this.appointmentDurationMinutesMinimum.toString() + }, + isPremiumAppointment: !!routeCodeIncludesPremium + }; + } + + return { + timeSlot: { + date: null, + routeCode: null, + startTime: null, + endTime: null, + isDropoff: null, + jobMaxMinutes: null, + jobMinMinutes: null + }, + isPremiumAppointment: null + }; + }, async gotoNextPage() { const maxPageIndex = Math.floor((this.daysLoaded - 1) / this.daysToAdd); if (this.activePageIndex >= maxPageIndex) { @@ -479,15 +515,15 @@ export default { this.selectedTimeSlot = null; this.findFirstAvailableDateInView(); }, - checkIsSelectedDay(index, timeOfDayGrouping) { - const dateToShowString = this.getDateToShowString(index); - return this.selectedDate === dateToShowString && this.selectedTimeOfDayGrouping === timeOfDayGrouping; + mapTimeSlot(timeSlot, timeOfDay) { + return { + ...timeSlot, + isDropoff: timeSlot.id.endsWith('DROP OFF'), + timeOfDay + }; }, - checkIsSelectedTimeSlot(timeSlot) { - if (!this.selectedTimeSlot) { - return false; - } - return this.selectedTimeSlot.startTime === timeSlot.startTime; + removePremiumFlagFromInput(routeCode) { + return routeCode.replace(PREMIUM_TIME_SLOT_ID_FLAG, ''); }, selectTimeSlotForDay(timeSlot) { if (timeSlot) { @@ -567,13 +603,28 @@ export default { morningTimeSlots: selectableDate.timeSlots.filter((timeSlot) => { const timeHour = parseInt(timeSlot.startTime.split(':')[0], 10); return timeHour < 12; - }), + }).map((timeSlot) => this.mapTimeSlot(timeSlot, 'morning')), afternoonTimeSlots: selectableDate.timeSlots.filter((timeSlot) => { const timeHour = parseInt(timeSlot.startTime.split(':')[0], 10); return timeHour >= 12; - }), + }).map((timeSlot) => this.mapTimeSlot(timeSlot, 'afternoon')), isSelected: false }; + + if (dateObjectToPush.morningTimeSlots.length > 0) { + const findIndex = dateObjectToPush.morningTimeSlots.findIndex((timeSlot) => timeSlot.id.endsWith('DROP OFF')); + if (findIndex !== -1) { + const dropOffSlot = dateObjectToPush.morningTimeSlots.splice(findIndex, 1)[0]; + dateObjectToPush.morningTimeSlots.unshift(dropOffSlot); + } + } + if (dateObjectToPush.afternoonTimeSlots.length > 0) { + const findIndex = dateObjectToPush.afternoonTimeSlots.findIndex((timeSlot) => timeSlot.id.endsWith('DROP OFF')); + if (findIndex !== -1) { + const dropOffSlot = dateObjectToPush.afternoonTimeSlots.splice(findIndex, 1)[0]; + dateObjectToPush.afternoonTimeSlots.push(dropOffSlot); + } + } this.selectableDatesData.push(dateObjectToPush); }); @@ -635,14 +686,28 @@ export default { morningTimeSlots: selectableDate.timeSlots.filter((timeSlot) => { const timeHour = parseInt(timeSlot.startTime.split(':')[0], 10); return timeHour < 12; - }), + }).map((timeSlot) => this.mapTimeSlot(timeSlot, 'morning')), afternoonTimeSlots: selectableDate.timeSlots.filter((timeSlot) => { const timeHour = parseInt(timeSlot.startTime.split(':')[0], 10); return timeHour >= 12; - }), + }).map((timeSlot) => this.mapTimeSlot(timeSlot, 'afternoon')), isSelected: false }; + if (dateObjectToPush.morningTimeSlots.length > 0) { + const findIndex = dateObjectToPush.morningTimeSlots.findIndex((timeSlot) => timeSlot.id.endsWith('DROP OFF')); + if (findIndex !== -1) { + const dropOffSlot = dateObjectToPush.morningTimeSlots.splice(findIndex, 1)[0]; + dateObjectToPush.morningTimeSlots.unshift(dropOffSlot); + } + } + if (dateObjectToPush.afternoonTimeSlots.length > 0) { + const findIndex = dateObjectToPush.afternoonTimeSlots.findIndex((timeSlot) => timeSlot.id.endsWith('DROP OFF')); + if (findIndex !== -1) { + const dropOffSlot = dateObjectToPush.afternoonTimeSlots.splice(findIndex, 1)[0]; + dateObjectToPush.afternoonTimeSlots.push(dropOffSlot); + } + } this.selectableDatesData.push(dateObjectToPush); } }); @@ -832,16 +897,55 @@ export default { text-align: center; cursor: pointer; + :deep(.dropoff-label) { + sup { + top: -0.375rem; + font-size: 0.75rem; + } + } + + & + .time-slot-drop-off-information { + max-height: 0; + overflow: hidden; + transition: max-height 0.75s ease-in-out; + font-weight: 400; + text-align: left; + color: $darker-gray; + + :deep(ul) { + margin: 0; + margin-bottom: 0.375rem; + + > li { + padding-left: 0.625rem; + margin-top: 0.625rem; + } + } + } + &.selected-time-slot { background-color: $background-color-selected; border: solid 1px #0070d1; color:#000; font-weight: 500; + + :deep(.dropoff-label) { + sup { + top: .25rem; + font-size: 1.625rem; + } + } + + & + .time-slot-drop-off-information { + max-height: 12rem; + transition: max-height 0.75s ease-in-out; + } } &.has-date-error { border: 1px solid #d93025; } + } } diff --git a/src/digital-components/dropdown-question/dropdown-question.vue b/src/digital-components/dropdown-question/dropdown-question.vue index 0a25d34b..733f33d9 100644 --- a/src/digital-components/dropdown-question/dropdown-question.vue +++ b/src/digital-components/dropdown-question/dropdown-question.vue @@ -156,8 +156,8 @@ export default { &:disabled, &.disabled { background-color: $gray-100; - color: $gray-500; - filter: grayscale(100%); + background-image: url(~@/assets/img/icons/select-disabled.png); + cursor: not-allowed; } } &.dropdown-compact { diff --git a/src/digital-components/textbox-question/textbox-question.vue b/src/digital-components/textbox-question/textbox-question.vue index 7c09f33d..2443d67a 100644 --- a/src/digital-components/textbox-question/textbox-question.vue +++ b/src/digital-components/textbox-question/textbox-question.vue @@ -402,6 +402,7 @@ input::-webkit-date-and-time-value { &:disabled, &.disabled { background-color: $gray-100; + cursor: not-allowed; } } p { diff --git a/src/helpers/text-helper.js b/src/helpers/text-helper.js index 1b54084f..379fa56e 100644 --- a/src/helpers/text-helper.js +++ b/src/helpers/text-helper.js @@ -133,3 +133,20 @@ export function formatDate(date, formatter) { } return ''; } + +/** + * @function toPossessive + * @param {string | null} input + * @returns {string} + */ +export function toPossessive(input) { + if (input == null || input.trim().length === 0) { + return input; + } + + if (input.toLowerCase().endsWith("s")) { + return `${input}'` + } + + return `${input}'s` +} \ No newline at end of file diff --git a/src/layouts/address-vehicles/address-vehicles-question/address-vehicles-question.vue b/src/layouts/address-vehicles/address-vehicles-question/address-vehicles-question.vue index 9bdf1382..8bce10ae 100644 --- a/src/layouts/address-vehicles/address-vehicles-question/address-vehicles-question.vue +++ b/src/layouts/address-vehicles/address-vehicles-question/address-vehicles-question.vue @@ -49,7 +49,7 @@ export default { vehicles: Array, vehicleSelected: Object, modelValue: String, - cmsWidgetName: String, + questionText: String, validationRules: String, isCarIdDifferent: Boolean, displayMatchedDifferentVehicleAlert: Boolean, @@ -89,9 +89,6 @@ export default { .replaceAll('{custom:vinYmmsFound}', vinYmmsFound) .replaceAll('{custom:vinYmmsExpected}', vinYmmsExpected); }, - questionText() { - return this.getCmsContent('VehicleConfirmationQuestion', 'QuestionText'); - }, selectedVehicleVin: { get() { return this.modelValue; @@ -123,4 +120,8 @@ export default { #address-vehicles-question-alert p { margin-bottom: 0 !important; // Overrides extra margin-bottom on alert body text } + +:deep(div.list-button-content > span:first-child) { + text-transform: uppercase; +} diff --git a/src/layouts/address-vehicles/address-vehicles.spec.js b/src/layouts/address-vehicles/address-vehicles.spec.js index 01147679..a1016855 100644 --- a/src/layouts/address-vehicles/address-vehicles.spec.js +++ b/src/layouts/address-vehicles/address-vehicles.spec.js @@ -100,6 +100,9 @@ function setupMocks({ if (contentName === 'ProvideVinAlert') { return 'ProvideVinAlertTestReturn'; } + if (contentName === 'VehicleConfirmationQuestion') { + return 'VehicleConfirmationQuestionTestReturn'; + } return null; }) }, diff --git a/src/layouts/address-vehicles/address-vehicles.vue b/src/layouts/address-vehicles/address-vehicles.vue index ea05519b..412072cc 100644 --- a/src/layouts/address-vehicles/address-vehicles.vue +++ b/src/layouts/address-vehicles/address-vehicles.vue @@ -13,15 +13,6 @@ - { const maskSymbol = '*'; - const vinStart = maskSymbol.repeat(v.vin.length - 6); + const vinStart = maskSymbol.repeat(6); const vinEnd = v.vin.substring(v.vin.length - 6); return { vin: v.vin, @@ -234,13 +225,6 @@ export default { } else { this.displayMatchedDifferentVehicleAlert = true; } - this.$refs.siteFooter.updateButtonText(`Continue with ${this.selectedVehicle.vehicle.year} ` - + `${this.selectedVehicle.vehicle.make} ${this.selectedVehicle.vehicle.model} ${this.forwardButtonCarStyle}`); - } else { - this.$refs.siteFooter.updateButtonText(this.getCmsContent( - 'SiteFooterWidget', - 'ForwardButtonText' - )); } }, deep: true diff --git a/src/layouts/contact-details/contact-details.vue b/src/layouts/contact-details/contact-details.vue index ce4781ef..5a84b8f3 100644 --- a/src/layouts/contact-details/contact-details.vue +++ b/src/layouts/contact-details/contact-details.vue @@ -59,7 +59,7 @@ inputId="state" class="form-group" :cmsWidgetName="widget.stateQuestion" - :options="states" + :options="getStates" isDisabled /> { + acc[key] = states[key].toUpperCase(); + return acc; + }, {}); + }, }, watch: { isSameAsPolicyAddress(newValue) { diff --git a/src/layouts/entry-page/entry-page.spec.js b/src/layouts/entry-page/entry-page.spec.js index afa28c8d..ee238737 100644 --- a/src/layouts/entry-page/entry-page.spec.js +++ b/src/layouts/entry-page/entry-page.spec.js @@ -144,6 +144,7 @@ describe('entry-page.vue', () => { TPAEnabled: true, ClientFullName: 'Full Name', ClientDisplayName: 'Display Name', + ClientPossessiveName: 'Display Name\'s', ClaimRegistrationRequired: true, EnableNoCompQuote: true }) @@ -153,6 +154,7 @@ describe('entry-page.vue', () => { expect(issConfig.clientName).toBe('TestClient'); expect(issConfig.clientFullName).toBe('Full Name'); expect(issConfig.clientDisplayName).toBe('Display Name'); + expect(issConfig.clientPossessiveName).toBe('Display Name\'s'); expect(issConfig.parentAccountNumber).toBe('12345'); expect(issConfig.styleSheet).toBe('test-style'); expect(issConfig.isCoverageEnabled).toBe(true); diff --git a/src/layouts/entry-page/entry-page.vue b/src/layouts/entry-page/entry-page.vue index 3918dc33..e9880117 100644 --- a/src/layouts/entry-page/entry-page.vue +++ b/src/layouts/entry-page/entry-page.vue @@ -14,6 +14,7 @@ import { getISSCookie, updateOrCreateISSCookie } from '@/helpers/cookie-helper.j import { useMainStore } from '@/store'; import showIssLoadingModal from '@/helpers/loading-modal-helper'; import applicationConfig from '@/constants/application-config'; +import { toPossessive } from '@/helpers/text-helper'; export default { name: 'entry-page', @@ -144,6 +145,7 @@ export default { this.mainStore.issConfig.clientName = data.accountName; this.mainStore.issConfig.clientFullName = data.accountName; // Defaults to use the client name. this.mainStore.issConfig.clientDisplayName = data.accountName; // Defaults to use the client name. + this.mainStore.issConfig.clientPossessiveName = toPossessive(data.accountName); // Defaults to use the client name. this.mainStore.issConfig.parentAccountNumber = data.parentAccountNumber; this.mainStore.issConfig.styleSheet = data.styleSheet; this.mainStore.issConfig.isCoverageEnabled = data.coverageEnabled; @@ -163,6 +165,11 @@ export default { if (clientFlags.ClientDisplayName != null) { this.mainStore.issConfig.clientDisplayName = clientFlags.ClientDisplayName; + this.mainStore.issConfig.clientPossessiveName = toPossessive(clientFlags.ClientDisplayName); + } + + if (clientFlags.ClientPossessiveName != null) { + this.mainStore.issConfig.clientPossessiveName = clientFlags.ClientPossessiveName; } if (clientFlags.ClaimRegistrationRequired) { diff --git a/src/layouts/schedule-page/schedule-page.vue b/src/layouts/schedule-page/schedule-page.vue index 8ee70191..da3ef43a 100644 --- a/src/layouts/schedule-page/schedule-page.vue +++ b/src/layouts/schedule-page/schedule-page.vue @@ -6,7 +6,6 @@
@@ -176,9 +175,7 @@ const getAvailableDates = async ( storeAction.payload.endDate, storeAction.payload.shopAppointmentType, storeAction.payload.providerNumber - ).catch(() => { - console.warn('Error fetching shop time slots...'); - }); + ); } else if (storeAction.payload?.zipCodeOverride) { timeSlotsResponse = await useMainStore().getMobileTimeSlots( storeAction.payload.startDate, @@ -343,7 +340,7 @@ export default { && (((this.selectedAppointmentType === AppointmentTypeStrings.MOBILE || this.selectedAppointmentType === AppointmentTypeStrings.MOBILE_NOT_ITAC_AND_NOT_NOCOMP) && serviceLocationToUse.mobileProviderNumber) - || (this.selectedAppointmentType === AppointmentTypeStrings.IN_SHOP + || ((this.selectedAppointmentType === AppointmentTypeStrings.IN_SHOP || this.selectedAppointmentType === AppointmentTypeStrings.DROP_OFF) && (this.selectedProvider?.providerNumber || serviceLocationToUse.provider?.providerNumber))); const damageInfo = useMainStore().order.damage.isRepair @@ -652,8 +649,13 @@ export default { return; } - // Save service location then schedule and navigate forward - await this.$refs.serviceLocation.forwardButtonAction(); + let appointmentTypeToUse = this.selectedAppointmentType; + if (appointmentTypeToUse === AppointmentTypeStrings.IN_SHOP && this.selectedTimeSlotInfo.timeSlot?.isDropoff === true) { + appointmentTypeToUse = AppointmentTypeStrings.DROP_OFF; + } + + // Save service location then save schedule then navigate forward + await this.$refs.serviceLocation.forwardButtonAction(appointmentTypeToUse); this.mainStore.saveSchedule(this.selectedTimeSlotInfo.timeSlot); this.$router.navigate( this.navigationScenarios.CLICKED_FORWARD, diff --git a/src/layouts/schedule-page/service-location/service-location.vue b/src/layouts/schedule-page/service-location/service-location.vue index d664a8ba..cc96f7c2 100644 --- a/src/layouts/schedule-page/service-location/service-location.vue +++ b/src/layouts/schedule-page/service-location/service-location.vue @@ -308,7 +308,7 @@ export default { } }, selectedAppointmentType(newValue, oldValue) { - if (this.selectedAppointmentType === AppointmentTypeStrings.IN_SHOP && this.selectedProvider && this.availabilityRating === null) { + if (this.isInshop && this.selectedProvider && this.availabilityRating === null) { this.refreshAvailabilityRating(); const appointmenTypeServiceLocationObj = { @@ -336,7 +336,7 @@ export default { }, selectedProvider(newProvider, oldProvider) { if (newProvider?.providerNumber !== oldProvider?.providerNumber || this.availabilityRating === null) { - const appointmentIsInshop = this.selectedAppointmentType === AppointmentTypeStrings.IN_SHOP; + const appointmentIsInshop = this.isInshop; const returnedProvider = { provider: newProvider, refreshDatePicker: appointmentIsInshop && oldProvider?.providerNumber !== null @@ -358,7 +358,7 @@ export default { await this.setData(initialData); this.initializingData = false; }, - async forwardButtonAction() { + async forwardButtonAction(appointmentType) { let provider = this.selectedProvider; this.mainStore.updateMobileFee(null); if (this.isMobile) { @@ -382,7 +382,7 @@ export default { state: this.state, zipCode: this.zipCode, zipCodeCtu: this.zipCodeCtu, - appointmentType: this.selectedAppointmentType, + appointmentType: appointmentType || this.selectedAppointmentType, provider }); }, diff --git a/src/layouts/vin-lookup/vin-location-information/vin-location-information.vue b/src/layouts/vin-lookup/vin-location-information/vin-location-information.vue index 72e970ad..7bc12729 100644 --- a/src/layouts/vin-lookup/vin-location-information/vin-location-information.vue +++ b/src/layouts/vin-lookup/vin-location-information/vin-location-information.vue @@ -61,7 +61,6 @@ export default { .vin-toggle { &::after { content: ""; - transition: all 0.5s ease; background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 8.9' xml:space='preserve'%3e%3cpath d='M8 8.9c-.2 0-.5-.1-.6-.3L.3 1.5C.1 1.4 0 1.1 0 .9 0 .7.1.4.3.3.4.1.7 0 .9 0c.2 0 .5.1.6.3L8 6.7 14.5.2c.1-.1.4-.2.6-.2.2 0 .5.1.6.3s.3.4.3.6c0 .2-.1.5-.3.6L8.6 8.6c-.1.2-.4.3-.6.3z' fill='%231474a2'/%3e%3c/svg%3e"); background-repeat: no-repeat; margin-left: 0.5rem; @@ -72,9 +71,6 @@ export default { &.active::after { transform: rotate(180deg); } - a { - font-size: 0.875rem; - } } } #vin-location-detail-wrapper { diff --git a/src/store/index.js b/src/store/index.js index e9b39fd0..676fadb7 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -247,6 +247,7 @@ export const getDefaultState = () => ({ clientName: 'Generic Insurance', // this is the default and will be overriden by the client's name clientFullName: 'Generic Insurance', // this is the default and will be overriden by the client's name or client's full name. clientDisplayName: 'Generic Insurance', // this is the default and will be overridden by the client's name or client display name. + clientPossessiveName: 'Generic Insurance\'s', // this is the default and will be overridden by the client's name or client display name converted to possessive or the clients possessive name. clientHeader: {}, styleSheet: '', // Stylesheet used by the client. parentAccountNumber: 0, // Parent account number used by the client. @@ -965,7 +966,8 @@ export const useMainStore = defineStore({ providerNumber, startDate, endDate, - shopAppointmentType, + shopAppointmentType: (shopAppointmentType === AppointmentTypeStrings.IN_SHOP + || shopAppointmentType === AppointmentTypeStrings.DROP_OFF) ? 'InShopOrDropoff' : shopAppointmentType, applicationName: applicationConfig.APPLICATION_NAME, billToAccountNumber: this.billToAccountNumber, parentAccountNumber: this.order.parentAccountNumber, // this.payment.parentAccountNumber, @@ -1605,7 +1607,7 @@ export const useMainStore = defineStore({ order.customer.firstName = data?.customer?.firstName; order.customer.lastName = data?.customer?.lastName; order.customer.emailAddress = data?.customer?.emailAddress; - + order.contactInfo.extension = data?.customer?.homePhone?.slice(10); order.contactInfo.homePhone = data?.customer?.homePhone?.slice(0, 10); order.contactInfo.servicePhone = data?.customer?.servicePhone; diff --git a/src/ux-components/alert/alert.vue b/src/ux-components/alert/alert.vue index 71be3bf5..a6323194 100644 --- a/src/ux-components/alert/alert.vue +++ b/src/ux-components/alert/alert.vue @@ -7,7 +7,12 @@ alertClass, cssClassNameForCmsWidget, ]"> -
+
+ type="button"> -

-

- - +

+ +
@@ -208,7 +215,7 @@ export default { mounted() { this.ensureAlertIsInViewPort(); if (this.isCollapsible) { - this.collapseElement = Collapse.getOrCreateInstance(document.getElementById(this.collapseId), { toggle: this.startCollapsed }); + this.collapseElement = Collapse.getOrCreateInstance(document.getElementById(this.collapseId), { toggle: false }); } }, methods: { @@ -236,6 +243,9 @@ export default { ); }, toggleCollapse() { + if (!this.isCollapsible) { + return; + } this.collapsed = !this.collapsed; if (this.collapsed) { this.collapseElement.hide(); @@ -268,6 +278,9 @@ export default { padding: .75rem 1rem .75rem 1rem; font-weight: 600; color: $black; + &.collapsible-header { + cursor: pointer; + } } .alert-icon-container { display: flex;