This commit is contained in:
Katie Kroell 2026-04-01 12:50:40 -04:00
parent 874250ac61
commit 4290f21175
4 changed files with 47 additions and 34 deletions

View file

@ -11,7 +11,7 @@ export function isRecalPartOrHasChildRecalPart(glassPart) {
const isGlassPartRecalPart = isRecalPart(glassPart); const isGlassPartRecalPart = isRecalPart(glassPart);
if (!isGlassPartRecalPart && glassPart.childParts && glassPart.childParts.length > 0) { if (!isGlassPartRecalPart && glassPart.childParts && glassPart.childParts.length > 0) {
return glassPart.childParts.filter((cp) => isRecalPartOrHasChildRecalPart(cp)); return glassPart.childParts.some((cp) => isRecalPartOrHasChildRecalPart(cp));
} }
return isGlassPartRecalPart; return isGlassPartRecalPart;
@ -64,8 +64,9 @@ export function containsRecalParts(lineItems) {
const flattened = [ const flattened = [
...(lineItems.glassParts ?? []), ...(lineItems.glassParts ?? []),
...(lineItems.supportingItems ?? []), ...(lineItems.supportingItems ?? []),
...(lineItems.otherParts ?? []),
...(lineItems.feeItems ?? []),
...(lineItems.vaps ?? []), ...(lineItems.vaps ?? []),
...(lineItems.promos ?? []),
]; ];
return flattened.some((li) => isRecalPartOrHasChildRecalPart(li)); return flattened.some((li) => isRecalPartOrHasChildRecalPart(li));
@ -77,6 +78,6 @@ export function anyPartWithRequiresRecalFlag(lineItems) {
return false; return false;
} }
return lineItems.glassParts?.some((li) => li.requiresRecalibration === true); return lineItems.some((li) => li.requiresRecalibration === true);
} }

View file

@ -1,33 +1,33 @@
<template> <template>
<div id="recal-ack-modal-container"> <div id="recal-ack-modal-container">
<modal <modal
:ref="ModalName" :ref="modalName"
:modalId="ModalName" :modalId="modalName"
:footerButtonText="ModalCloseButtonText" :footerButtonText="modalCloseButtonText"
:isButtonDisabled="isButtonDisabled" :isButtonDisabled="isButtonDisabled"
@footerButtonEvent="footerButtonClick" @footerButtonEvent="footerButtonClick"
:displayCloseButton="false" :displayCloseButton="false"
:displayCloseLink="true"> :displayCloseLink="true">
<div class="form-test-invalid"> <div class="form-test-invalid">
<h5>{{ ModalHeadline }}</h5> <h5>{{ modalHeadline }}</h5>
<div> <div>
<div <div
class="mb-4" class="mb-4"
v-html="ModalBodyText"></div> v-html="modalBodyText"></div>
<recalAckToggle <recalAckToggle
class="mb-5" class="mb-5"
cmsWidgetName="RecalAckModalToggle" /> cmsWidgetName="RecalAckModalToggle" />
<checkBox <checkBox
ref="recalAcknowledgement" ref="recalAcknowledgement"
v-model="acknowledged" v-model="isAcknowledged"
class="mb-2 mt-4" class="mb-2 mt-4"
:class="showAcknowledgementError && ' has-error'" :class="showAcknowledgementError && ' has-error'"
:validationRules="rules.optionRequired" :validationRules="rules.optionRequired"
checkboxName="recalAcknowledgement" checkboxName="recalAcknowledgement"
buttonID="recalAcknowledgement" buttonID="recalAcknowledgement"
:tabIndex="0" :tabIndex="0"
:checkboxLabel="ModalSubBodyText" :checkboxLabel="modalSubBodyText"
:screenReaderOnlyText="ModalSubBodyText" :screenReaderOnlyText="modalSubBodyText"
isRequired /> isRequired />
<div <div
v-if="showAcknowledgementError" v-if="showAcknowledgementError"
@ -59,7 +59,7 @@ export default {
}, },
data() { data() {
return { return {
acknowledged: false, isAcknowledged: false,
showAcknowledgementError: false, showAcknowledgementError: false,
rules: { rules: {
optionRequired: globalRules.OPTION_REQUIRED optionRequired: globalRules.OPTION_REQUIRED
@ -67,23 +67,23 @@ export default {
}; };
}, },
computed: { computed: {
ModalName() { modalName() {
return this.cmsWidgetName; return this.cmsWidgetName;
}, },
ModalHeadline() { modalHeadline() {
return this.getCmsContent(this.cmsWidgetName, 'HeaderText'); return this.getCmsContent(this.cmsWidgetName, 'HeaderText');
}, },
ModalBodyText() { modalBodyText() {
return this.getCmsContent(this.cmsWidgetName, 'BodyText'); return this.getCmsContent(this.cmsWidgetName, 'BodyText');
}, },
ModalSubBodyText() { modalSubBodyText() {
return this.getCmsContent(this.cmsWidgetName, 'BodyText2'); return this.getCmsContent(this.cmsWidgetName, 'BodyText2');
}, },
ModalCloseButtonText() { modalCloseButtonText() {
return this.getCmsContent(this.cmsWidgetName, 'FooterText'); return this.getCmsContent(this.cmsWidgetName, 'FooterText');
}, },
isButtonDisabled() { isButtonDisabled() {
return !this.acknowledged; return !this.isAcknowledged;
}, },
errorMessage() { errorMessage() {
if (this.showAcknowledgementError) { if (this.showAcknowledgementError) {
@ -93,24 +93,23 @@ export default {
}, },
}, },
watch: { watch: {
acknowledged() { isAcknowledged() {
this.showAcknowledgementError = false; this.showAcknowledgementError = false;
this.$emit('recalAcknowledged', this.acknowledged);
} }
}, },
methods: { methods: {
openModal() { openModal() {
this.$refs[this.ModalName].openModal(); this.$refs[this.modalName].openModal();
}, },
footerButtonClick() { footerButtonClick() {
if (this.acknowledged) { if (this.isAcknowledged) {
this.$refs[this.ModalName]?.closeModal(); this.$emit('recalAcknowledged', this.isAcknowledged);
this.$refs[this.modalName]?.closeModal();
} else { } else {
this.showAcknowledgementError = true; this.showAcknowledgementError = true;
} }
} }
}, },
}; };
</script> </script>
<style lang="scss"> <style lang="scss">

View file

@ -81,7 +81,7 @@
ref="recalAckModal" ref="recalAckModal"
cmsWidgetName="RecalAckModalWidget" cmsWidgetName="RecalAckModalWidget"
:ackError="ackError" :ackError="ackError"
@recalAcknowledged="updateRecalAcknowledged()"/> @recalAcknowledged="updateIsRecalAcknowledged"/>
</Form> </Form>
</template> </template>
<script> <script>
@ -93,7 +93,6 @@ import datePicker from '@/digital-components/date-picker/date-picker.vue';
import serviceLocation from '@/layouts/schedule-page/service-location/service-location.vue'; import serviceLocation from '@/layouts/schedule-page/service-location/service-location.vue';
import siteFooter from '@/iss-components/site-footer/site-footer.vue'; import siteFooter from '@/iss-components/site-footer/site-footer.vue';
import suggestTimeslotModal from '@/layouts/schedule-page/suggest-timeslot-modal/suggest-timeslot-modal.vue'; import suggestTimeslotModal from '@/layouts/schedule-page/suggest-timeslot-modal/suggest-timeslot-modal.vue';
import modal from '@/digital-components/modal/modal.vue';
import recalAckModal from '@/layouts/schedule-page/recal-ack-modal/recal-ack-modal.vue'; import recalAckModal from '@/layouts/schedule-page/recal-ack-modal/recal-ack-modal.vue';
// Supporting files // Supporting files
@ -393,7 +392,7 @@ export default {
selectedTimeSlotInfo: this.getSelectedTimeSlotInfo(), selectedTimeSlotInfo: this.getSelectedTimeSlotInfo(),
showDatePickerError: false, showDatePickerError: false,
SUGGEST_TIMESLOT_MODAL_REF_NAME, SUGGEST_TIMESLOT_MODAL_REF_NAME,
isAcknowledged: false isRecalAcknowledged: this.getIsRecalAcknowledgedForScheduling()
}; };
}, },
computed: { computed: {
@ -443,7 +442,7 @@ export default {
const containsRecalPart = containsRecalParts(glassParts); const containsRecalPart = containsRecalParts(glassParts);
const hasPartWithRecalRequirement = anyPartWithRequiresRecalFlag(glassParts); const hasPartWithRecalRequirement = anyPartWithRequiresRecalFlag(glassParts);
if (!containsRecalPart && hasPartWithRecalRequirement && !this.isAcknowledged) { if (!containsRecalPart && hasPartWithRecalRequirement) {
return true; return true;
} }
return false; return false;
@ -478,6 +477,7 @@ export default {
this.mql = window.matchMedia('(min-width: 1200px)'); this.mql = window.matchMedia('(min-width: 1200px)');
this.isMobileView = !this.mql.matches; this.isMobileView = !this.mql.matches;
this.mql.addEventListener('change', this.handleMqlChange); this.mql.addEventListener('change', this.handleMqlChange);
this.mainStore.updateIsRecalAcknowledgedForScheduling(false);
}, },
unmounted() { unmounted() {
if (this.mql) { if (this.mql) {
@ -960,7 +960,7 @@ export default {
this.showDatePickerError = false; this.showDatePickerError = false;
}, },
async forwardButtonAction() { async forwardButtonAction() {
if (this.displayRecalAckModal) { if (this.displayRecalAckModal && this.isRecalAcknowledged === false) {
showIssLoadingModal(false); showIssLoadingModal(false);
this.$refs.recalAckModal.openModal(); this.$refs.recalAckModal.openModal();
return; return;
@ -983,9 +983,14 @@ export default {
this.$route this.$route
); );
}, },
updateRecalAcknowledged() { updateIsRecalAcknowledged(isAcknowledged) {
this.isAcknowledged = true; this.isRecalAcknowledged = isAcknowledged;
} this.mainStore.saveIsRecalAcknowledgedForScheduling(this.isRecalAcknowledged);
},
getIsRecalAcknowledgedForScheduling() {
console.log(this.mainStore.order.isRecalAcknowledgedForScheduling, 'isRecalAcknowledgedForScheduling from store');
return this.mainStore.order.isRecalAcknowledgedForScheduling;
},
} }
}; };
</script> </script>

View file

@ -225,7 +225,8 @@ export const getDefaultState = () => ({
loadedFromDupeCheck: null, loadedFromDupeCheck: null,
loadedSessionClearedPreviousData: null, loadedSessionClearedPreviousData: null,
availableVaps: null, availableVaps: null,
visitedDuplicateCheckPage: false visitedDuplicateCheckPage: false,
isRecalAcknowledgedForScheduling: false
}, },
applicationUser: { applicationUser: {
experiments: [], experiments: [],
@ -3125,6 +3126,13 @@ export const useMainStore = defineStore({
resetSubmittedOrder() { resetSubmittedOrder() {
// clear from sessionStorage // clear from sessionStorage
window.sessionStorage.removeItem(webStorageConstants.SUBMITTED_ORDER); window.sessionStorage.removeItem(webStorageConstants.SUBMITTED_ORDER);
},
saveIsRecalAcknowledgedForScheduling(isRecalAcknowledged) {
this.updateIsRecalAcknowledgedForScheduling(isRecalAcknowledged);
},
updateIsRecalAcknowledgedForScheduling(isRecalAcknowledged) {
this.order.isRecalAcknowledgedForScheduling = isRecalAcknowledged;
} }
}, },
persist: { persist: {