Merge branch 'develop' into feature/INSR-7778
This commit is contained in:
commit
a1f1ac0c20
17 changed files with 269 additions and 69 deletions
|
|
@ -19,7 +19,7 @@
|
|||
"location/api/v1/location/providers/75023/Replace/100/550036/true/CR00056707/DW01571GTNNOEM": "0002a_Advanced_Replace_Deductible_Client/location/api/v1/location/providers/75023/Replace/100/550036/true/CR00056707/DW01571GTNNOEM.json",
|
||||
"schedule/api/v1/schedule/shop-time-slots": "0002a_Advanced_Replace_Deductible_Client/schedule/api/v1/schedule/shop-time-slots.json",
|
||||
"location/api/v1/location/alert-reasons/01813": "0002a_Advanced_Replace_Deductible_Client/location/api/v1/location/alert-reasons/01813.json",
|
||||
"parts/api/v1/parts/rain-defense": "0002a_Advanced_Replace_Deductible_Client/parts/api/v1/parts/rain-defense.json",
|
||||
"parts/api/v1/parts/rain-repel": "0002a_Advanced_Replace_Deductible_Client/parts/api/v1/parts/rain-repel.json",
|
||||
"price/api/v1/price/combined-quote": "0002a_Advanced_Replace_Deductible_Client/price/api/v1/price/combined-quote.json"
|
||||
}
|
||||
}
|
||||
BIN
src/assets/img/icons/select-error.png
Normal file
BIN
src/assets/img/icons/select-error.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
BIN
src/assets/img/icons/select.png
Normal file
BIN
src/assets/img/icons/select.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
|
|
@ -97,7 +97,7 @@ const endpoints = Object.freeze({
|
|||
method: 'GET'
|
||||
},
|
||||
GetRainDefense: {
|
||||
url: `${PARTS_BASE_URL}/rain-defense`,
|
||||
url: `${PARTS_BASE_URL}/rain-repel`,
|
||||
method: 'GET'
|
||||
},
|
||||
GetRecalParts: {
|
||||
|
|
|
|||
82
src/constants/progress-bar-mapper.js
Normal file
82
src/constants/progress-bar-mapper.js
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
export const pageProgressMapper = {
|
||||
'duplicate-check': {
|
||||
percent: 10
|
||||
},
|
||||
'policy-holder-details': {
|
||||
percent: 15
|
||||
},
|
||||
'policy-vehicles': {
|
||||
percent: 15
|
||||
},
|
||||
'policy-endorsements': {
|
||||
percent: 15
|
||||
},
|
||||
'vehicle-selection': {
|
||||
percent: 20
|
||||
},
|
||||
'vehicle-damage': {
|
||||
percent: 30
|
||||
},
|
||||
'part-questions': {
|
||||
percent: 35
|
||||
},
|
||||
'molding-questions': {
|
||||
percent: 40
|
||||
},
|
||||
'vehicle-parts': {
|
||||
percent: 40
|
||||
},
|
||||
'capability-questions': {
|
||||
percent: 40
|
||||
},
|
||||
'vehicle-lookup': {
|
||||
percent: 45
|
||||
},
|
||||
'vin-lookup': {
|
||||
percent: 50
|
||||
},
|
||||
'license-plate-lookup': {
|
||||
percent: 50
|
||||
},
|
||||
'address-lookup': {
|
||||
percent: 50
|
||||
},
|
||||
'address-vehicles': {
|
||||
percent: 50
|
||||
},
|
||||
'coverage-statement': {
|
||||
percent: 55
|
||||
},
|
||||
'provider-preference': {
|
||||
percent: 60
|
||||
},
|
||||
'service-location': {
|
||||
percent: 65
|
||||
},
|
||||
'schedule-page': {
|
||||
percent: 70
|
||||
},
|
||||
'contact-details': {
|
||||
percent: 80
|
||||
},
|
||||
'service-packages': {
|
||||
percent: 85
|
||||
},
|
||||
'payment-method': {
|
||||
percent: 90
|
||||
},
|
||||
'payment-page': {
|
||||
percent: 95
|
||||
},
|
||||
'tpa-search': {
|
||||
percent: 85
|
||||
},
|
||||
'tpa-confirmation': {
|
||||
percent: 100
|
||||
},
|
||||
'order-confirmation': {
|
||||
percent: 100
|
||||
}
|
||||
};
|
||||
|
||||
export const getProgressBarPercentage = (page) => pageProgressMapper[page]?.percent || 0;
|
||||
|
|
@ -132,29 +132,23 @@ export default {
|
|||
margin-bottom: 0.25rem;
|
||||
}
|
||||
.form-select {
|
||||
border: 1px solid $gray-500;
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 8.89' xml:space='preserve'%3e%3cpath d='M8 8.89c-.24 0-.46-.09-.63-.26L.26 1.53a.901.901 0 0 1 0-1.27C.43.1.66 0 .9 0s.47.1.64.26L8 6.74 14.47.27c.17-.17.4-.27.64-.27s.47.1.63.27c.17.17.26.4.26.64s-.1.47-.27.63l-7.1 7.09a.86.86 0 0 1-.63.26z' fill='%231474a2'/%3e%3c/svg%3e");
|
||||
border: $border-input;
|
||||
background-image: url(~@/assets/img/icons/select.png);
|
||||
background-size: 0.625rem 1rem;
|
||||
color: $gray-600;
|
||||
border-radius: 0.5rem;
|
||||
border-radius: $border-radius;
|
||||
min-height: 3rem;
|
||||
letter-spacing: inherit;
|
||||
box-shadow: $box-shadow-input;
|
||||
&:focus,
|
||||
&:focus-visible {
|
||||
box-shadow: 0 0 0 2.5px $blue;
|
||||
border: $border-input-focus;
|
||||
}
|
||||
&:disabled,
|
||||
&.disabled {
|
||||
background-color: $gray-100;
|
||||
color: $gray-500;
|
||||
filter: grayscale(100%);
|
||||
&:hover {
|
||||
box-shadow: 0 0 0 4px transparent;
|
||||
border: 1px solid $gray-500;
|
||||
}
|
||||
}
|
||||
&:hover {
|
||||
border: 1px solid $gray-500;
|
||||
box-shadow: 0 0 0 4px $blue-300;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -153,27 +153,20 @@ export default {
|
|||
|
||||
.form-control {
|
||||
max-height: 30rem;
|
||||
border: 1px solid $gray-500;
|
||||
border-radius: 0.5rem;
|
||||
border: $border-input;
|
||||
border-radius: $border-radius;
|
||||
padding: 12px 16px;
|
||||
letter-spacing: inherit;
|
||||
box-shadow: $box-shadow-input;
|
||||
&::placeholder {
|
||||
color: $gray-500;
|
||||
}
|
||||
&:focus {
|
||||
box-shadow: 0 0 0 2.5px $blue;
|
||||
border: $border-input-focus;
|
||||
}
|
||||
&:disabled,
|
||||
&.disabled {
|
||||
background-color: $gray-100;
|
||||
&:hover {
|
||||
box-shadow: 0 0 0 4px transparent;
|
||||
border: 1px solid $gray-500;
|
||||
}
|
||||
}
|
||||
&:hover {
|
||||
border: 1px solid $gray-500;
|
||||
box-shadow: 0 0 0 4px $blue-300;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -275,7 +275,7 @@ input::-webkit-date-and-time-value {
|
|||
position: relative;
|
||||
&.has-search-icon {
|
||||
input[type='text'] {
|
||||
border-radius: $border-radius-lg;
|
||||
border-radius: $border-radius;
|
||||
}
|
||||
button[type='submit'] {
|
||||
position: absolute;
|
||||
|
|
@ -329,29 +329,22 @@ input::-webkit-date-and-time-value {
|
|||
margin-bottom: 0.25rem;
|
||||
}
|
||||
.form-control {
|
||||
border: 1px solid $gray-500;
|
||||
border-radius: 0.5rem;
|
||||
border: $border-input;
|
||||
border-radius: $border-radius;
|
||||
min-height: 3rem;
|
||||
max-height: 3rem;
|
||||
padding: 0.75rem 1rem;
|
||||
letter-spacing: inherit;
|
||||
box-shadow: $box-shadow-input;
|
||||
&::placeholder {
|
||||
color: $gray-500;
|
||||
}
|
||||
&:focus {
|
||||
box-shadow: 0 0 0 2.5px $blue;
|
||||
&:focus, &:focus-within {
|
||||
border: $border-input-focus;
|
||||
}
|
||||
&:disabled,
|
||||
&.disabled {
|
||||
background-color: $gray-100;
|
||||
&:hover {
|
||||
box-shadow: 0 0 0 4px transparent;
|
||||
border: 1px solid $gray-500;
|
||||
}
|
||||
}
|
||||
&:hover {
|
||||
border: 1px solid $gray-500;
|
||||
box-shadow: 0 0 0 4px $blue-300;
|
||||
}
|
||||
}
|
||||
p {
|
||||
|
|
|
|||
87
src/iss-components/site-header/progress-bar/progress-bar.vue
Normal file
87
src/iss-components/site-header/progress-bar/progress-bar.vue
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
<template>
|
||||
<div
|
||||
v-if="progress > 0"
|
||||
class="progress-bar-container">
|
||||
<div class="progress-bar-header">
|
||||
<span aria-hidden="true">{{ progress }}%</span>
|
||||
</div>
|
||||
<div class="progress">
|
||||
<div
|
||||
class="progress-bar progress-bar-success"
|
||||
role="progressbar"
|
||||
:aria-valuetext="`Scheduling progress ${progress}%`"
|
||||
aria-valuemin="0"
|
||||
aria-valuemax="100"
|
||||
:style="{ width: progress + '%' }">
|
||||
<div class="progress-bar-middle"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getProgressBarPercentage } from '@/constants/progress-bar-mapper';
|
||||
import { useMainStore } from '@/store';
|
||||
|
||||
export default {
|
||||
name: 'progress-bar',
|
||||
data() {
|
||||
return {
|
||||
progress: this.getProgress()
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
getProgress() {
|
||||
const pageName = useMainStore().applicationUser.lastPageVisited;
|
||||
return getProgressBarPercentage(pageName);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.progress-bar-container {
|
||||
display: flex;
|
||||
|
||||
.progress-bar-header {
|
||||
padding-right: 0.3125rem;
|
||||
color: $progress-bar-color;
|
||||
font-weight: 600;
|
||||
font-size: 0.875rem;
|
||||
line-height: 0.9375rem;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.progress {
|
||||
@include media-breakpoint-up(xs) {
|
||||
min-width: 5.9375rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
min-width: 17.1875rem;
|
||||
}
|
||||
|
||||
margin-left: 0;
|
||||
border-radius: $border-radius-pill;
|
||||
overflow: visible;
|
||||
|
||||
.progress-bar {
|
||||
background-color: $progress-bar-color;
|
||||
border-radius: $border-radius-pill 0 0 $border-radius-pill;
|
||||
overflow: visible;
|
||||
|
||||
.progress-bar-middle {
|
||||
width: 1.0625rem;
|
||||
height: 1.0625rem;
|
||||
position: relative;
|
||||
margin-right: -8.5px;
|
||||
margin-left: auto;
|
||||
margin-top: -1px;
|
||||
border: 0.125rem solid #ffffff;
|
||||
border-radius: 50%;
|
||||
background-color: $progress-bar-color;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -3,11 +3,16 @@
|
|||
class="site-header-container"
|
||||
:style="logoBackgroundStyle">
|
||||
<div class="site-header iss-heritage-container-width">
|
||||
<img
|
||||
id="siteHeaderImage"
|
||||
class="img-fluid"
|
||||
:src="imageSrc"
|
||||
:alt="altText" />
|
||||
<div class="header-logo-container">
|
||||
<img
|
||||
id="siteHeaderImage"
|
||||
class="img-fluid"
|
||||
:src="imageSrc"
|
||||
:alt="altText" />
|
||||
</div>
|
||||
<div class="header-progress-bar-container">
|
||||
<progressBar />
|
||||
</div>
|
||||
</div>
|
||||
<alert
|
||||
v-if="displayGlobalAlert"
|
||||
|
|
@ -25,11 +30,12 @@ import alert from '@/ux-components/alert/alert.vue';
|
|||
import { useMainStore } from '@/store';
|
||||
import eventBus from '@/helpers/event-bus/event-bus';
|
||||
import { globalEvents } from '@/constants/events';
|
||||
import progressBar from '@/iss-components/site-header/progress-bar/progress-bar.vue';
|
||||
|
||||
export default {
|
||||
name: 'site-header',
|
||||
components: {
|
||||
alert
|
||||
alert, progressBar
|
||||
},
|
||||
props: {
|
||||
cmsWidgetName: String
|
||||
|
|
@ -139,9 +145,20 @@ export default {
|
|||
}
|
||||
|
||||
.site-header {
|
||||
display: flex;
|
||||
@include media-breakpoint-down(md) {
|
||||
margin: 0 -.75rem;
|
||||
}
|
||||
|
||||
.header-logo-container {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
.header-progress-bar-container {
|
||||
flex: 0 1 auto;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -112,11 +112,16 @@ export default {
|
|||
|
||||
const { feeItems } = store.order.lineItems;
|
||||
|
||||
const availableLineItems = [
|
||||
resultMap.rainDefense,
|
||||
...resultMap.wipers,
|
||||
...feeItems
|
||||
];
|
||||
let availableLineItems = [];
|
||||
|
||||
if ( resultMap?.rainDefense?.length > 0 )
|
||||
availableLineItems.push(resultMap.rainDefense);
|
||||
|
||||
if ( resultMap?.wipers?.length > 0 )
|
||||
availableLineItems.push(...resultMap.wipers);
|
||||
|
||||
if ( feeItems?.length > 0 )
|
||||
availableLineItems.push(...feeItems);
|
||||
|
||||
let hasBailedOut = false;
|
||||
await store.getCombinedQuote(availableLineItems)
|
||||
|
|
@ -195,7 +200,6 @@ export default {
|
|||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.iss-heritage-container-width {
|
||||
.service-packages-container {
|
||||
|
|
|
|||
|
|
@ -1242,6 +1242,17 @@ export const useMainStore = defineStore({
|
|||
if (availableLineItems && availableLineItems.length > 0) {
|
||||
const { vehicle, serviceLocation, policy, eon, referralNumber, referralDate, referralSequenceNumber, lineItems } = this.order;
|
||||
|
||||
const availableLineItemsFiltered = availableLineItems.filter((lineItem) => {
|
||||
if ( lineItem.partNumber )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
});
|
||||
|
||||
const lineItemsWithOnlyPartNumbers = availableLineItemsFiltered.map((lineItem) => {
|
||||
return {partNumber: lineItem.partNumber};
|
||||
});
|
||||
|
||||
const payload = {
|
||||
ParentAccountNumber: this.order.parentAccountNumber,
|
||||
BillToAccountNumber: this.billToAccountNumber,
|
||||
|
|
@ -1259,7 +1270,7 @@ export const useMainStore = defineStore({
|
|||
ServiceZipCode: serviceLocation.zipCode,
|
||||
IsReplacement: !this.isRepair,
|
||||
ServerData: lineItems.serverData,
|
||||
LineItems: getLineItemsFlattened(availableLineItems),
|
||||
LineItems: lineItemsWithOnlyPartNumbers,
|
||||
FeatureToggles: getFeatureTogglesPayloadObject(this.experimentSettings)
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
$button-color: #a9e3e9;
|
||||
$button-text-color: #181643;
|
||||
$svg-fill-color: '%2309748b'; // Color of calendar icon. Place HEX code *after* %23
|
||||
$progress-bar-color: #181643;
|
||||
|
||||
//Variables
|
||||
--iss-loader-color: #{$button-text-color};
|
||||
|
|
@ -76,6 +77,22 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.progress-bar-container {
|
||||
.progress-bar-header {
|
||||
color: $progress-bar-color;
|
||||
}
|
||||
|
||||
.progress {
|
||||
.progress-bar {
|
||||
background-color: $progress-bar-color;
|
||||
|
||||
.progress-bar-middle {
|
||||
background-color: $progress-bar-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// End Liberty Mutual, SafeCo
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
|
||||
@import "@/styles/ux-variables-svg-strings.scss";
|
||||
html {
|
||||
.has-error {
|
||||
|
||||
|
|
@ -111,27 +113,20 @@ html {
|
|||
input,
|
||||
input.form-control,
|
||||
select,
|
||||
select.form-select {
|
||||
border: 1px solid $red;
|
||||
|
||||
&:focus {
|
||||
border: 1px solid transparent;
|
||||
box-shadow: 0 0 0 2.5px $red;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
box-shadow: 0px 0px 0px 4px $red-200;
|
||||
border-radius: 0.5rem;
|
||||
border: 1px solid $red;
|
||||
}
|
||||
select.form-select,
|
||||
input:focus,
|
||||
input.form-control:focus,
|
||||
input.form-control:focus-within,
|
||||
select:focus,
|
||||
select.form-select:focus {
|
||||
border-color: $red;
|
||||
}
|
||||
|
||||
select,
|
||||
select.form-select {
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 8.89' xml:space='preserve'%3e%3cpath d='M8 8.89c-.24 0-.46-.09-.63-.26L.26 1.53a.901.901 0 0 1 0-1.27C.43.1.66 0 .9 0s.47.1.64.26L8 6.74 14.47.27c.17-.17.4-.27.64-.27s.47.1.63.27c.17.17.26.4.26.64s-.1.47-.27.63l-7.1 7.09a.86.86 0 0 1-.63.26z' fill='%23d4281c'/%3e%3c/svg%3e");
|
||||
background-repeat: no-repeat;
|
||||
background-position: right 0.75rem center;
|
||||
background-size: 16px 12px;
|
||||
select.form-select,
|
||||
select:focus,
|
||||
select.form-select:focus {
|
||||
background-image: url(~@/assets/img/icons/select-error.png);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -155,6 +155,9 @@ $border-radius-sm: 0.2rem;
|
|||
$border-radius-lg: 0.5rem; //Used for buttons. Can be used for other things, of course.
|
||||
$border-radius-pill: 50rem;
|
||||
|
||||
//Progress Bar Styling
|
||||
$progress-bar-color: $green;
|
||||
|
||||
//Spacing
|
||||
// 8 spacers available instead of the usual 5
|
||||
$spacer: 1rem;
|
||||
|
|
@ -193,6 +196,7 @@ $box-shadow: 0 0.5rem 1rem rgba($black, 0.15);
|
|||
$box-shadow-sm: 0 0.125rem 0.25rem rgba($black, 0.075);
|
||||
$box-shadow-lg: 0 1rem 3rem rgba($black, 0.25); //Safelite default
|
||||
$box-shadow-inset: inset 0 1px 2px rgba($black, 0.075);
|
||||
$box-shadow-input: rgba($black, 0.2) 0rem 0.0625rem 0.3125rem 0rem;
|
||||
|
||||
//Alerts
|
||||
$alert-bg-scale: -90%;
|
||||
|
|
@ -209,3 +213,6 @@ $enable-important-utilities: false;
|
|||
|
||||
// Letter Spacing
|
||||
$letter-spacing-primary: 0.03em;
|
||||
// Borders
|
||||
$border-input: 1px solid rgba(179, 180, 181);
|
||||
$border-input-focus: 2.5px solid $blue;
|
||||
Loading…
Reference in a new issue