Merge pull request #1322 from Safelite/feature/CSR-1414
Feature/csr 1414
This commit is contained in:
commit
4bb7f35003
7 changed files with 133 additions and 53 deletions
|
|
@ -2,13 +2,12 @@
|
||||||
<div class="text-block w-100" :class="[justifyText, typeStyle, fontWeight, marginTopClass]">
|
<div class="text-block w-100" :class="[justifyText, typeStyle, fontWeight, marginTopClass]">
|
||||||
<span v-for="copy in splitCopyOnCMSPlaceHolder(this.textBlockCopy)" :key="copy">
|
<span v-for="copy in splitCopyOnCMSPlaceHolder(this.textBlockCopy)" :key="copy">
|
||||||
<span v-if="doesCopyContainRouterLink(copy)">
|
<span v-if="doesCopyContainRouterLink(copy)">
|
||||||
<router-link
|
<textLink
|
||||||
:to="{
|
linkType="text"
|
||||||
query: { [pageQueryString]: `${getRouterLinkRouteFromCopy(copy)}` },
|
:text="getRouterLinkDisplayTextFromCopy(copy)"
|
||||||
name: 'root',
|
href="javascript:void(0)"
|
||||||
}"
|
useLoadingModal
|
||||||
>{{ getRouterLinkDisplayTextFromCopy(copy) }}</router-link
|
@click-event="navigateWithScenario(getRouterLinkRouteFromCopy(copy))" />
|
||||||
>
|
|
||||||
</span>
|
</span>
|
||||||
<span v-else-if="doesCopyContainTextLink(copy)">
|
<span v-else-if="doesCopyContainTextLink(copy)">
|
||||||
<textLink
|
<textLink
|
||||||
|
|
@ -55,6 +54,9 @@ export default {
|
||||||
getRouterLinkRouteFromCopy,
|
getRouterLinkRouteFromCopy,
|
||||||
getRouterLinkDisplayTextFromCopy,
|
getRouterLinkDisplayTextFromCopy,
|
||||||
getExternalLink,
|
getExternalLink,
|
||||||
|
navigateWithScenario(scenarioName) {
|
||||||
|
this.$router.navigateWithoutSaving(scenarioName, this.$route);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
pageQueryString() {
|
pageQueryString() {
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
<textLink
|
<textLink
|
||||||
linkType="navigation"
|
linkType="navigation"
|
||||||
:text="backLink"
|
:text="backLink"
|
||||||
|
useLoadingModal
|
||||||
@click-event="linkClick"
|
@click-event="linkClick"
|
||||||
href="javascript:void(0)"
|
href="javascript:void(0)"
|
||||||
data-bs-target="#footerModal"
|
data-bs-target="#footerModal"
|
||||||
|
|
|
||||||
|
|
@ -1,47 +1,50 @@
|
||||||
<template>
|
<template>
|
||||||
<div v-if="isModalVisible" class="container-fluid modal-loader">
|
<div v-if="isModalVisible">
|
||||||
<div class="row g-2 h-100 d-flex align-items-center">
|
<div class="dimmer-overlay"></div>
|
||||||
<div class="container-fluid overflow-hidden">
|
<div class="container-fluid modal-loader" :class="layoutClass">
|
||||||
<div class="row h-100">
|
<div class="row g-2 h-100 d-flex align-items-center">
|
||||||
<div class="col text-center tagbg mb-4">
|
<div class="container-fluid overflow-hidden">
|
||||||
<div class="spinner-border text-danger" role="status">
|
<div class="row h-100">
|
||||||
<span class="visually-hidden">Loading...</span>
|
<div class="col text-center tagbg mb-4">
|
||||||
|
<div class="spinner-border text-danger" role="status">
|
||||||
|
<span class="visually-hidden">Loading...</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="row">
|
||||||
<div class="row">
|
<div class="col">
|
||||||
<div class="col">
|
<div class="text-container slide">
|
||||||
<div class="text-container slide">
|
<p>
|
||||||
<p>
|
Tidying up the shop
|
||||||
Tidying up the shop
|
<span class="dot-1">.</span>
|
||||||
<span class="dot-1">.</span>
|
<span class="dot-2">.</span>
|
||||||
<span class="dot-2">.</span>
|
<span class="dot-3">.</span>
|
||||||
<span class="dot-3">.</span>
|
</p>
|
||||||
</p>
|
<p>
|
||||||
<p>
|
Getting all the glass shined up
|
||||||
Getting all the glass shined up
|
<span class="dot-1">.</span>
|
||||||
<span class="dot-1">.</span>
|
<span class="dot-2">.</span>
|
||||||
<span class="dot-2">.</span>
|
<span class="dot-3">.</span>
|
||||||
<span class="dot-3">.</span>
|
</p>
|
||||||
</p>
|
<p>
|
||||||
<p>
|
Planning your new view of the road
|
||||||
Planning your new view of the road
|
<span class="dot-1">.</span>
|
||||||
<span class="dot-1">.</span>
|
<span class="dot-2">.</span>
|
||||||
<span class="dot-2">.</span>
|
<span class="dot-3">.</span>
|
||||||
<span class="dot-3">.</span>
|
</p>
|
||||||
</p>
|
<p>
|
||||||
<p>
|
Nearly there
|
||||||
Nearly there
|
<span class="dot-1">.</span>
|
||||||
<span class="dot-1">.</span>
|
<span class="dot-2">.</span>
|
||||||
<span class="dot-2">.</span>
|
<span class="dot-3">.</span>
|
||||||
<span class="dot-3">.</span>
|
</p>
|
||||||
</p>
|
<p>
|
||||||
<p>
|
Finishing up
|
||||||
Finishing up
|
<span class="dot-1">.</span>
|
||||||
<span class="dot-1">.</span>
|
<span class="dot-2">.</span>
|
||||||
<span class="dot-2">.</span>
|
<span class="dot-3">.</span>
|
||||||
<span class="dot-3">.</span>
|
</p>
|
||||||
</p>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -58,6 +61,17 @@ export default {
|
||||||
isModalVisible: false,
|
isModalVisible: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
props: {
|
||||||
|
notFullScreen: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
layoutClass() {
|
||||||
|
return this.notFullScreen ? "card-layout" : "full-screen";
|
||||||
|
},
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
showModal() {
|
showModal() {
|
||||||
//Display modal
|
//Display modal
|
||||||
|
|
@ -80,20 +94,43 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.modal-loader {
|
.dimmer-overlay {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
z-index: 1057;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
background-color: $black;
|
||||||
|
opacity: 0.4;
|
||||||
|
z-index: 1056;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-loader {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 1057;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
outline: 0;
|
outline: 0;
|
||||||
background: $gray-100;
|
background: $gray-100;
|
||||||
|
|
||||||
|
&.full-screen {
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.card-layout {
|
||||||
|
height: 186px;
|
||||||
|
width: calc(100% - 3rem);
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
position: absolute;
|
||||||
|
top: calc(50% - 93px);
|
||||||
|
left: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.tagbg {
|
.tagbg {
|
||||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg fill='none' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 84 32'%3e%3cpath d='M22.39 27.313a3.53 3.53 0 0 0 7.058 0' fill='%23fff'/%3e%3cpath d='M22.39 27.313a3.53 3.53 0 0 0 7.058 0' stroke='%23000' stroke-width='.75' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M54.459 27.313a3.527 3.527 0 0 0 7.054 0' fill='%23fff'/%3e%3cpath d='M54.459 27.313a3.527 3.527 0 0 0 7.054 0' stroke='%23000' stroke-width='.75' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M42.06.8c8.08 0 11.89.935 11.89.935 3.58.576 5.696 7.207 5.696 7.207h.727c0-2.427 1.302-2.397 2.341-2 .723.292 1.363.76 1.86 1.361 1.319 1.547.465 1.674.465 1.674h-5.067l3.846 3.01v12.016c0 2.41-2.029 2.31-2.029 2.31H22.338s-2.029.1-2.029-2.31V12.996l3.84-3.009H19.07s-.853-.127.466-1.674a4.693 4.693 0 0 1 1.86-1.361c1.032-.397 2.341-.427 2.341 2h.736s2.117-6.64 5.696-7.21c0 0 3.81-.942 11.89-.942Z' fill='%23fff' stroke='%23000' stroke-width='.75' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M42.06 8.847c7.924 0 14.685.511 14.685.511 0-2.585-2.38-6.011-2.38-6.011S50.4 2.519 42.06 2.519s-12.303.828-12.303.828-2.38 3.426-2.38 6.011c0 0 6.76-.51 14.683-.51Z' fill='%23DA291C' stroke='%23000' stroke-width='.75' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M35.277 16.523a62.558 62.558 0 0 1 13.277 0m3.276-.439s2.384-2.257 8.608-2.257c0 0 1.179 2.657-2.54 3.37m-25.894-1.113s-2.387-2.257-8.611-2.257c0 0-1.16 2.579 2.543 3.37m-3.546 5.856s21.52 3.647 39.123 0' stroke='%23000' stroke-width='.75' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e");
|
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg fill='none' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 84 32'%3e%3cpath d='M22.39 27.313a3.53 3.53 0 0 0 7.058 0' fill='%23fff'/%3e%3cpath d='M22.39 27.313a3.53 3.53 0 0 0 7.058 0' stroke='%23000' stroke-width='.75' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M54.459 27.313a3.527 3.527 0 0 0 7.054 0' fill='%23fff'/%3e%3cpath d='M54.459 27.313a3.527 3.527 0 0 0 7.054 0' stroke='%23000' stroke-width='.75' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M42.06.8c8.08 0 11.89.935 11.89.935 3.58.576 5.696 7.207 5.696 7.207h.727c0-2.427 1.302-2.397 2.341-2 .723.292 1.363.76 1.86 1.361 1.319 1.547.465 1.674.465 1.674h-5.067l3.846 3.01v12.016c0 2.41-2.029 2.31-2.029 2.31H22.338s-2.029.1-2.029-2.31V12.996l3.84-3.009H19.07s-.853-.127.466-1.674a4.693 4.693 0 0 1 1.86-1.361c1.032-.397 2.341-.427 2.341 2h.736s2.117-6.64 5.696-7.21c0 0 3.81-.942 11.89-.942Z' fill='%23fff' stroke='%23000' stroke-width='.75' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M42.06 8.847c7.924 0 14.685.511 14.685.511 0-2.585-2.38-6.011-2.38-6.011S50.4 2.519 42.06 2.519s-12.303.828-12.303.828-2.38 3.426-2.38 6.011c0 0 6.76-.51 14.683-.51Z' fill='%23DA291C' stroke='%23000' stroke-width='.75' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M35.277 16.523a62.558 62.558 0 0 1 13.277 0m3.276-.439s2.384-2.257 8.608-2.257c0 0 1.179 2.657-2.54 3.37m-25.894-1.113s-2.387-2.257-8.611-2.257c0 0-1.16 2.579 2.543 3.37m-3.546 5.856s21.52 3.647 39.123 0' stroke='%23000' stroke-width='.75' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
linkType="textSmall"
|
linkType="textSmall"
|
||||||
text="Edit"
|
text="Edit"
|
||||||
class="ml-auto"
|
class="ml-auto"
|
||||||
|
useLoadingModal
|
||||||
@click-event="linkClicked"
|
@click-event="linkClicked"
|
||||||
href="javascript:void(0)" />
|
href="javascript:void(0)" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ const navigationScenarios = {
|
||||||
SELECTED_LICENSE_PLATE: "SELECTED_LICENSE_PLATE",
|
SELECTED_LICENSE_PLATE: "SELECTED_LICENSE_PLATE",
|
||||||
SELECTED_HOME_ADDRESS: "SELECTED_HOME_ADDRESS",
|
SELECTED_HOME_ADDRESS: "SELECTED_HOME_ADDRESS",
|
||||||
CLICKED_FORWARD_WITH_NO_QUESTIONS: "CLICKED_FORWARD_WITH_NO_QUESTIONS",
|
CLICKED_FORWARD_WITH_NO_QUESTIONS: "CLICKED_FORWARD_WITH_NO_QUESTIONS",
|
||||||
|
CLICKED_VIN_RETRY: "CLICKED_VIN_RETRY",
|
||||||
|
|
||||||
// Part selection
|
// Part selection
|
||||||
CLICKED_FORWARD_WITH_PART_QUESTIONS: "CLICKED_FORWARD_WITH_PART_QUESTIONS",
|
CLICKED_FORWARD_WITH_PART_QUESTIONS: "CLICKED_FORWARD_WITH_PART_QUESTIONS",
|
||||||
|
|
@ -40,6 +41,9 @@ const navigationScenarios = {
|
||||||
CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS: "CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS",
|
CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS: "CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS",
|
||||||
CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS: "CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS",
|
CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS: "CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS",
|
||||||
|
|
||||||
|
// Schedule
|
||||||
|
CLICKED_CHANGE_LOCATION: "CLICKED_CHANGE_LOCATION",
|
||||||
|
|
||||||
// Review
|
// Review
|
||||||
CLICKED_VEHICLE_EDIT: "CLICKED_VEHICLE_EDIT",
|
CLICKED_VEHICLE_EDIT: "CLICKED_VEHICLE_EDIT",
|
||||||
CLICKED_DAMAGE_EDIT: "CLICKED_DAMAGE_EDIT",
|
CLICKED_DAMAGE_EDIT: "CLICKED_DAMAGE_EDIT",
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,10 @@ const routingTable = function (store) {
|
||||||
scenario: navigationScenarios.CLICKED_FORWARD_WITH_NO_MORE_QUESTIONS,
|
scenario: navigationScenarios.CLICKED_FORWARD_WITH_NO_MORE_QUESTIONS,
|
||||||
destinationFmgPageValue: fmgPageValues.QUOTE,
|
destinationFmgPageValue: fmgPageValues.QUOTE,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
scenario: navigationScenarios.CLICKED_VIN_RETRY,
|
||||||
|
destinationFmgPageValue: fmgPageValues.ESTIMATE,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -109,6 +113,10 @@ const routingTable = function (store) {
|
||||||
scenario: navigationScenarios.CLICKED_FORWARD_WITH_NO_MORE_QUESTIONS,
|
scenario: navigationScenarios.CLICKED_FORWARD_WITH_NO_MORE_QUESTIONS,
|
||||||
destinationFmgPageValue: fmgPageValues.QUOTE,
|
destinationFmgPageValue: fmgPageValues.QUOTE,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
scenario: navigationScenarios.CLICKED_VIN_RETRY,
|
||||||
|
destinationFmgPageValue: fmgPageValues.ESTIMATE,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -146,6 +154,10 @@ const routingTable = function (store) {
|
||||||
scenario: navigationScenarios.CLICKED_FORWARD_WITH_NO_MORE_QUESTIONS,
|
scenario: navigationScenarios.CLICKED_FORWARD_WITH_NO_MORE_QUESTIONS,
|
||||||
destinationFmgPageValue: fmgPageValues.QUOTE,
|
destinationFmgPageValue: fmgPageValues.QUOTE,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
scenario: navigationScenarios.CLICKED_VIN_RETRY,
|
||||||
|
destinationFmgPageValue: fmgPageValues.ESTIMATE,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -179,6 +191,10 @@ const routingTable = function (store) {
|
||||||
scenario: navigationScenarios.CLICKED_FORWARD_WITH_NO_MORE_QUESTIONS,
|
scenario: navigationScenarios.CLICKED_FORWARD_WITH_NO_MORE_QUESTIONS,
|
||||||
destinationFmgPageValue: fmgPageValues.QUOTE,
|
destinationFmgPageValue: fmgPageValues.QUOTE,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
scenario: navigationScenarios.CLICKED_VIN_RETRY,
|
||||||
|
destinationFmgPageValue: fmgPageValues.ESTIMATE,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -399,6 +415,10 @@ const routingTable = function (store) {
|
||||||
scenario: navigationScenarios.CLICKED_FORWARD,
|
scenario: navigationScenarios.CLICKED_FORWARD,
|
||||||
destinationFmgPageValue: fmgPageValues.CUSTOMER_DETAILS,
|
destinationFmgPageValue: fmgPageValues.CUSTOMER_DETAILS,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
scenario: navigationScenarios.CLICKED_CHANGE_LOCATION,
|
||||||
|
destinationFmgPageValue: fmgPageValues.SERVICE_LOCATION,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
|
<loadingModal v-if="useLoadingModal" notFullScreen ref="loadingModal" />
|
||||||
<a v-if="linkType === 'navigation'" @click="handleClick" class="navigation-link" :href="href"
|
<a v-if="linkType === 'navigation'" @click="handleClick" class="navigation-link" :href="href"
|
||||||
>{{ text }}<slot name="after-text"></slot
|
>{{ text }}<slot name="after-text"></slot
|
||||||
></a>
|
></a>
|
||||||
|
|
@ -19,6 +20,8 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import loadingModal from "@/fmg-components/loading-modal/loading-modal";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "textLink",
|
name: "textLink",
|
||||||
props: {
|
props: {
|
||||||
|
|
@ -27,6 +30,10 @@ export default {
|
||||||
href: {
|
href: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
|
useLoadingModal: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
handleClick(event) {
|
handleClick(event) {
|
||||||
|
|
@ -36,9 +43,17 @@ export default {
|
||||||
this.text,
|
this.text,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (this.useLoadingModal) {
|
||||||
|
this.$refs.loadingModal.showModal();
|
||||||
|
}
|
||||||
|
|
||||||
this.$emit("click-event");
|
this.$emit("click-event");
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
components: {
|
||||||
|
loadingModal,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue