Merge pull request #183 from Safelite/feature/digital/SSR-219

Feature/digital/ssr 219
This commit is contained in:
katiekroell 2023-03-03 10:45:09 -05:00 committed by GitHub
commit c3b2ca1cee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 88 deletions

View file

@ -2,7 +2,7 @@ const dynamicStrings = {
GLOBAL_STATE: "globalState",
CUSTOM: "custom",
ROUTER_LINK: "routerLink:",
TEXT_LINK: "textLink:"
MODAL_LINK: "modalLink"
};
export { dynamicStrings };

View file

@ -124,6 +124,9 @@ function processWidgetItemForReplacement(widgetModel, key) {
if (widgetModel[key].includes(dynamicStrings.GLOBAL_STATE)) {
widgetModel[key] = mapStringToState(widgetModel[key]);
}
if (widgetModel[key].includes(dynamicStrings.MODAL_LINK)) {
widgetModel[key] = mapStringToModal(widgetModel[key]);
}
return widgetModel[key];
}
@ -143,6 +146,18 @@ function processWidgetItemForReplacement(widgetModel, key) {
return widgetModel[key];
}
function mapStringToModal(str) {
let startIndex = str.indexOf("{" + dynamicStrings.MODAL_LINK);
let linkToReplace = str.substring(startIndex, str.length);
linkToReplace = linkToReplace.substring(0, linkToReplace.indexOf("}") + 1);
let params = linkToReplace.substring((dynamicStrings.MODAL_LINK).length + 2, linkToReplace.length -1)
let splitParams = params.split(",");
let bodyText = '<a href="#!" data-bs-toggle="modal" data-bs-target="#' + splitParams[0] + '" aria-label="Modal window">' + splitParams[1] +'</a>'
return str.replace(linkToReplace, bodyText);
}
// Function to convert a string, into a matching global state item.
function mapStringToState(str) {
// Pull all matches out of the string.
@ -185,10 +200,6 @@ export function doesCopyContainRouterLink(copy) {
return copy.includes(this.dynamicStrings.ROUTER_LINK);
}
export function doesCopyContainTextLink(copy) {
return copy.includes(this.dynamicStrings.TEXT_LINK);
}
export function splitCopyOnCMSPlaceHolder(copy) {
// splits copy on { ... } such as {routerlink: ...}
return copy.split(/{(.*?)}/g);

View file

@ -18,45 +18,12 @@
<div
v-html="continueWithSchedulingBodyText"
class="mt-0"
/>
></div>
<textBlock
cmsWidgetName="whatHappensNextCopy"
class="mt-4 mb-2 fw-bold"
/>
<div v-if="unverifiedADASNextSteps">
<ol>
<li v-for="listItem in this.arrayOfListItemsFromBodyText" :key="listItem">
<!-- no textLink -->
<span
v-if="!doesCopyContainTextLink(listItem)"
v-html="listItem"></span>
<!-- with textLink-->
<template
v-else
v-for="copy in splitCopyOnCMSPlaceHolder(listItem)"
:key="copy">
<span v-if="!doesCopyContainTextLink(copy)" v-html="copy"></span>
<span v-else>
<textLink
linkType="text"
:text="getRouterLinkDisplayTextFromCopy(copy)"
href="#!"
data-bs-toggle="modal"
data-bs-target="#RecalModal"
aria-label="Modal window" />
</span>
</template>
</li>
</ol>
</div>
<div
v-if="unverifiedNonADASNextSteps"
v-html="unverifiedNonADASNextStepsBodyText" >
</div>
<div
v-if="unverifiedNonADASRepair"
v-html="unverifiedNonADASRepairBodyText" >
</div>
<div v-html="bodyText"></div>
<recalModal cmsWidgetName="RecalModal" />
<siteFooter
cmsWidgetName="SiteFooterWidget"
@ -109,24 +76,24 @@ export default {
textLink,
recalModal
},
data() {
return {
isRepair: useMainStore().order.damage.isRepair,
unverifiedADASNextSteps: false,
unverifiedNonADASNextSteps: false,
unverifiedNonADASRepair: false,
};
},
created() {
// check if repair or replace, if repair, display NonADASRepair
if (this.isRepair) {
this.unverifiedNonADASRepair = true;
}
else {
this.displayReplaceCoverageStatement();
}
},
computed: {
bodyText() {
if (useMainStore().order.damage.isRepair) {
return this.unverifiedNonADASRepairBodyText;
}
else {
let parts = useMainStore().order.lineItems.glassParts;
// if ADAS, display ADASNextSteps
if (parts.filter(part => part.requiresRecalibration).length > 0) {
return this.unverifiedADASNextStepsBodyText;
}
// if non-ADAS, display NonADASNextSteps
else {
return this.unverifiedNonADASNextStepsBodyText;
}
}
},
continueWithSchedulingBodyText() {
return this.getCmsContent('continueWithSchedulingCopy', 'BodyText');
},
@ -139,13 +106,6 @@ export default {
unverifiedNonADASRepairBodyText() {
return this.getCmsContent('UnverifiedNonADASRepairWidget', 'BodyText');
},
splitADASCoverageStatementCopy() {
// Splits content when brackets are found in text so that text can be looped through and text-link can be injected when needed
return this.splitCopyOnCMSPlaceHolder(this.unverifiedADASNextStepsBodyText);
},
arrayOfListItemsFromBodyText() {
return this.getArrayOfListItemsFromRawCmsCopy(this.unverifiedADASNextStepsBodyText);
},
damageText() {
var damageString = getDamageString();
return damageString == "match" ? "" : damageString;
@ -183,29 +143,6 @@ export default {
*/
this.$router.navigate(this.navigationScenarios.CLICKED_BACK, this.$route);
},
displayReplaceCoverageStatement() {
// get array of parts for vehicle
let parts = useMainStore().order.lineItems.glassParts;
// if ADAS, display ADASNextSteps
if (parts.filter(part => part.requiresRecalibration).length > 0) {
this.unverifiedADASNextSteps = true;
}
// if non-ADAS, display NonADASNextSteps
else {
this.unverifiedNonADASNextSteps = true;
}
},
stripOlTagFromCopy(copy) {
const regex = /(?:<ol(?:.*?)>)|(?:<\/ol>)/g;
return copy.replace(regex, "");
},
getArrayOfListItemsFromRawCmsCopy(copy) {
const withoutOlTags = this.stripOlTagFromCopy(copy);
return withoutOlTags
.split(/(?:<li(?:.*?)>)|(?:<\/li>)/g)
.filter((lineItem) => lineItem);
},
},
async forwardButtonAction() {},
resetDependentState() {},

View file

@ -98,7 +98,7 @@ const getDefaultState = () => {
triggeredSiteEntry: false,
},
issConfig: {
clientName: "",
clientName: "Generic Insurance", // this is the default and will be overriden by the client's name
styleSheet: "",
accountNumber: 0,
}