Merge branch 'develop' into feature/CSR-1903
This commit is contained in:
commit
547824db08
35 changed files with 719 additions and 292 deletions
|
|
@ -75,6 +75,7 @@ stages:
|
|||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
- bash: cp public/applepay/apple-developer-merchantid-domain-association-nonprod.txt public/.well-known/apple-developer-merchantid-domain-association.txt
|
||||
- template: templates/digital/step-build-vue.yml@AzureDevOps
|
||||
parameters:
|
||||
buildOutputDir: dist
|
||||
|
|
@ -134,6 +135,7 @@ stages:
|
|||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
- bash: cp public/applepay/apple-developer-merchantid-domain-association-nonprod.txt public/.well-known/apple-developer-merchantid-domain-association.txt
|
||||
- template: templates/digital/step-build-vue.yml@AzureDevOps
|
||||
parameters:
|
||||
buildOutputDir: dist
|
||||
|
|
@ -193,6 +195,7 @@ stages:
|
|||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
- bash: cp public/applepay/apple-developer-merchantid-domain-association-nonprod.txt public/.well-known/apple-developer-merchantid-domain-association.txt
|
||||
- template: templates/digital/step-build-vue.yml@AzureDevOps
|
||||
parameters:
|
||||
buildOutputDir: dist
|
||||
|
|
@ -252,6 +255,7 @@ stages:
|
|||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
- bash: cp public/applepay/apple-developer-merchantid-domain-association-prod.txt public/.well-known/apple-developer-merchantid-domain-association.txt
|
||||
- template: templates/digital/step-build-vue.yml@AzureDevOps
|
||||
parameters:
|
||||
buildOutputDir: dist
|
||||
|
|
@ -296,4 +300,4 @@ stages:
|
|||
parameters:
|
||||
dependsOn: prodBuildDeployment
|
||||
userName: SafeliteAzureDevops
|
||||
userEmail: githubazuredevops@safelite.com
|
||||
userEmail: githubazuredevops@safelite.com
|
||||
0
public/.well-known/placeholder.txt
Normal file
0
public/.well-known/placeholder.txt
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
MIIQaQYJKoZIhvcNAQcCoIIQWjCCEFYCAQExCzAJBgUrDgMCGgUAMHgGCSqGSIb3DQEHAaBrBGl7
|
||||
InRlYW1JZCI6IlY4SFNZMzlOWjUiLCJkb21haW4iOiJ3d3ctdGVzdDIuc2FmZWxpdGUuY29tIiwi
|
||||
ZGF0ZUNyZWF0ZWQiOiIyMDI0LTA3LTE4LDE0OjU1OjA1IiwidmVyc2lvbiI6MX2ggg0_MIIENDCC
|
||||
AxygAwIBAgIIY_BW8s8iV_MwDQYJKoZIhvcNAQELBQAwczEtMCsGA1UEAwwkQXBwbGUgaVBob25l
|
||||
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
||||
eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwHhcNMjQwMTMwMTgzMjA1WhcNMjkw
|
||||
MTI4MTgzMjA0WjBZMTUwMwYDVQQDDCxBcHBsZSBpUGhvbmUgT1MgUHJvdmlzaW9uaW5nIFByb2Zp
|
||||
bGUgU2lnbmluZzETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3
|
||||
DQEBAQUAA4IBDwAwggEKAoIBAQC1FX_kJQ1chXPiyq7cbeqNGGn-pv_c_cwpLk2qcBWJD79H31jO
|
||||
WFlKCB2xoQ229iBxUncHfWR_QmmLKHvyw0A9s3CBF8nkhi2ZVzd1wNTjtjcc2Dcm7kAsi3Hw7xRj
|
||||
TOS_0S-HUEUdpxJxkbQX9sNJQHBt64923LXzwWH5JKwxWb5X_kqWxYoAlse5CjmYUeqATgKGEejt
|
||||
eO1HxmV6-LAL1Ycpfmab7T296Dm6fUhkO-eIB1-efCGWkBQAV0BlJq7bo4O8jRv3o4VjOjf0rtDO
|
||||
FG8RVCdSsGjLtGs-0gDEORTorEdwUlY2X54rPlOZpuOA0lN4N7tz35kMtxySmq9lAgMBAAGjgeUw
|
||||
geIwDAYDVR0TAQH_BAIwADAfBgNVHSMEGDAWgBRv8ZUYYlzgyPHF7WwYyeDTZFKYIDBABggrBgEF
|
||||
BQcBAQQ0MDIwMAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLmFwcGxlLmNvbS9vY3NwMDMtYWlwY2Ew
|
||||
NzAvBgNVHR8EKDAmMCSgIqAghh5odHRwOi8vY3JsLmFwcGxlLmNvbS9haXBjYS5jcmwwHQYDVR0O
|
||||
BBYEFCkAQ-DGkwX04nv_NdJ5BvpUl3YjMA4GA1UdDwEB_wQEAwIHgDAPBgkqhkiG92NkBjoEAgUA
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQBA51NbANKWAu-nYD7W27ilNY9YRzstmIC5_nOz1o_RTQR_Zbps
|
||||
s1G8bzM-53F6OgL8MFI2ummWpXfSL2k_bX6Y_FtCYkoyWdF-rVexy0WeCkjeRgc1G14DGy5ontva
|
||||
qGzENwiFoECYoxI4cBANSDVkhZNWBzfZ2lY4cCWo4U9oVyxYDBoWSd4_JTZzWNzlX3koj7kLA7vh
|
||||
nPUW53hsEk_BsH5x10qy_tEBNOKPbh4vC3q0wbEyhk6_W5iEaE9nh0_Anrq0MfQJtIo91t4QKkvE
|
||||
jcNN1OrFYpmYGevd0X3H99npvad4XiYUX2Pmf0Ro8ChhvcDhFeBAq_9h6HvAOUoMMIIERDCCAyyg
|
||||
AwIBAgIIXGPK5Eo3U8kwDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkFw
|
||||
cGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQD
|
||||
Ew1BcHBsZSBSb290IENBMB4XDTE3MDUxMDIxMjczMFoXDTMwMTIzMTAwMDAwMFowczEtMCsGA1UE
|
||||
AwwkQXBwbGUgaVBob25lIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZp
|
||||
Y2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0G
|
||||
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJRWoBDz6DBIbH_L_cXvAege4XMHNjJi7ePXokzZM-
|
||||
TzlHunW-88DS8Vmiqx_-CoY82S2aB_IOa7kpkRpfIgqL8XJYBa5MS0TFeaeAPLCI4IwMJ4RdGeWH
|
||||
GTbL48V2t7D0QXJR9AVcg0uibaZRuPEm33terWUMxrKYUYy7fRtMwU7ICMfS7WQLtN0bjU9AfRuP
|
||||
SJaSW_PQmH7ZvKQZDplhu0FdAcxbd3p9JNDc01P_w9zFlCy2Wk2OGCM5vdnGUj7R8vQliqEqh_3Y
|
||||
DEYpUf_tF2yJJWuHv4ppFJ93n8MVt2iziEW9hOYGAkFkD60qKLgVyeCsp4q6cgQ0sniM-LKFAgMB
|
||||
AAGjgewwgekwDwYDVR0TAQH_BAUwAwEB_zAfBgNVHSMEGDAWgBQr0GlHlHYJ_vRrjS5ApvdHTX8I
|
||||
XjBEBggrBgEFBQcBAQQ4MDYwNAYIKwYBBQUHMAGGKGh0dHA6Ly9vY3NwLmFwcGxlLmNvbS9vY3Nw
|
||||
MDMtYXBwbGVyb290Y2EwLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2NybC5hcHBsZS5jb20vcm9v
|
||||
dC5jcmwwHQYDVR0OBBYEFG_xlRhiXODI8cXtbBjJ4NNkUpggMA4GA1UdDwEB_wQEAwIBBjAQBgoq
|
||||
hkiG92NkBgISBAIFADANBgkqhkiG9w0BAQsFAAOCAQEAOs-smI2-kiAhCa2V87FcIfo2LVcgRHRz
|
||||
ZJIIs5as922X-ls0OCfPEkbTPBHwB8mZkLHR6BEJpeOla2xjCD-eJfrVmZxM5uXOjrJNaOyLq6Oi
|
||||
T4oRFT7cFCscxkS2b2fFW0-VKS2HXD_cgx53T-3aVKct5xOBwWPEVAsbSwpqKCII1DeSfH9nKF-v
|
||||
PT-3rFkdODRkWu4zShlCRCnEyhhr4cFTLS30TcIV9jMyGHjxJm-KTeuUTKPo_w-zA4tl2usu2GVQ
|
||||
n9yfit8xqIRU3FJSQdKyEx0xRkeIXz7uw_KMIwSV66yKPoJsBp8u44tDmmJbNA30mc8s7rpyhhkj
|
||||
pfyOtTCCBLswggOjoAMCAQICAQIwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCVVMxEzARBgNV
|
||||
BAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYw
|
||||
FAYDVQQDEw1BcHBsZSBSb290IENBMB4XDTA2MDQyNTIxNDAzNloXDTM1MDIwOTIxNDAzNlowYjEL
|
||||
MAkGA1UEBhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmlj
|
||||
YXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1BcHBsZSBSb290IENBMIIBIjANBgkqhkiG9w0BAQEF
|
||||
AAOCAQ8AMIIBCgKCAQEA5JGpCR-R2x5HUOsF7V55hC3rNqJXTFXsixmJ3vlLbPUHqyIwAugYPvhQ
|
||||
CdN_QaiY-dHKZpwkaxHQo7vkGyrDH5WeegykR4tb1BY3M8vED03OFGnRyRly9V0O1X9fm_IlA7pV
|
||||
j01dDfFkNSMVSxVZHbOU9_acns9QusFYUGePCLQg98usLCBvcLY_ATCMt0PPD5098ytJKBrI_s61
|
||||
uQ7ZXhzWyz21Oq30Dw4AkguxIRYudNU8DdtiFqujcZJHU1XBry9Bs_j743DN5qNMRX4fTGtQlkGJ
|
||||
xHRiCxCDQYczioGxMFjsWgQyjGizjx3eZXP_Z15lvEnYdp8zFGWhd5TJLQIDAQABo4IBejCCAXYw
|
||||
DgYDVR0PAQH_BAQDAgEGMA8GA1UdEwEB_wQFMAMBAf8wHQYDVR0OBBYEFCvQaUeUdgn-9GuNLkCm
|
||||
90dNfwheMB8GA1UdIwQYMBaAFCvQaUeUdgn-9GuNLkCm90dNfwheMIIBEQYDVR0gBIIBCDCCAQQw
|
||||
ggEABgkqhkiG92NkBQEwgfIwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LmFwcGxlLmNvbS9hcHBs
|
||||
ZWNhLzCBwwYIKwYBBQUHAgIwgbYagbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFu
|
||||
eSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
|
||||
ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2Vy
|
||||
dGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjANBgkqhkiG9w0BAQUFAAOCAQEAXDaZTC14
|
||||
t-2Mm9zzd5vydtJ3ME_BH4WDhRuZPUc38qmbQI4s1LGQEti-9HOb7tJkD8t5TzTYoj75eP9ryAfs
|
||||
fTmDi1Mg0zjEsb-aTwpr_yv8WacFCXwXQFYRHnTTt4sjO0ej1W8k4uvRt3DfD0XhJ8rxbXjt57UX
|
||||
F6jcfiI1yiXV2Q_Wa9SiJCMR96Gsj3OBYMYbWwkvkrL4REjwYDieFfU9JmcgijNq9w2Cz97roy_5
|
||||
U2pbZMBjM3f3OgcsVuvaDyEO2rpzGU-12TZ_wYdV2aeZuTJC-9jVcZ5-oVK3G72TQiQSKscPHbZN
|
||||
nF5jyEuAF1CqitXa5PzQCQc3sHV1ITGCAoUwggKBAgEBMH8wczEtMCsGA1UEAwwkQXBwbGUgaVBo
|
||||
b25lIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhv
|
||||
cml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMCCGPwVvLPIlfzMAkGBSsOAwIa
|
||||
BQCggdwwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwNzE4MTQ1
|
||||
NTA1WjAjBgkqhkiG9w0BCQQxFgQUYwvDx1yr56NtJEdxh--NMv9wqDEwKQYJKoZIhvcNAQk0MRww
|
||||
GjAJBgUrDgMCGgUAoQ0GCSqGSIb3DQEBAQUAMFIGCSqGSIb3DQEJDzFFMEMwCgYIKoZIhvcNAwcw
|
||||
DgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMA0G
|
||||
CSqGSIb3DQEBAQUABIIBAJ6WUgCnMMT4q4LQjeOOpLWsXJRdns3b5aBEKoK3NIetn3I_bWo0wmX3
|
||||
Rxuy29Ljv_0bGC0PfcXyBXWtg1LQ4EzUpgpVK_IeZrlX6HcKwxgZwkejwVg009kTYNir-otXP1AM
|
||||
YNfXsPA-woLAbo_Hx0MrN1EHgejqO8x5c9s7LpQQGJpVsD9Rq6sZ4VJftMtuTz4XwvU3Qypj7_RF
|
||||
Drhh-MekYg6qG7aJMzOuftkDx2BWL7Sld77ViX1Qt8zZpyoI4RW4MIxH50ERwVYlpaoHYdnit3Ct
|
||||
RZki8aS0kxFdxVY0pePF0k6h-5GbwceXATkXM4UY0-fAXqk11QevHKT8was
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
MIIQaQYJKoZIhvcNAQcCoIIQWjCCEFYCAQExCzAJBgUrDgMCGgUAMHgGCSqGSIb3DQEHAaBrBGl7
|
||||
InRlYW1JZCI6IlY4SFNZMzlOWjUiLCJkb21haW4iOiJ3d3ctdGVzdDIuc2FmZWxpdGUuY29tIiwi
|
||||
ZGF0ZUNyZWF0ZWQiOiIyMDI0LTA3LTE4LDE0OjU1OjA1IiwidmVyc2lvbiI6MX2ggg0_MIIENDCC
|
||||
AxygAwIBAgIIY_BW8s8iV_MwDQYJKoZIhvcNAQELBQAwczEtMCsGA1UEAwwkQXBwbGUgaVBob25l
|
||||
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
||||
eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwHhcNMjQwMTMwMTgzMjA1WhcNMjkw
|
||||
MTI4MTgzMjA0WjBZMTUwMwYDVQQDDCxBcHBsZSBpUGhvbmUgT1MgUHJvdmlzaW9uaW5nIFByb2Zp
|
||||
bGUgU2lnbmluZzETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3
|
||||
DQEBAQUAA4IBDwAwggEKAoIBAQC1FX_kJQ1chXPiyq7cbeqNGGn-pv_c_cwpLk2qcBWJD79H31jO
|
||||
WFlKCB2xoQ229iBxUncHfWR_QmmLKHvyw0A9s3CBF8nkhi2ZVzd1wNTjtjcc2Dcm7kAsi3Hw7xRj
|
||||
TOS_0S-HUEUdpxJxkbQX9sNJQHBt64923LXzwWH5JKwxWb5X_kqWxYoAlse5CjmYUeqATgKGEejt
|
||||
eO1HxmV6-LAL1Ycpfmab7T296Dm6fUhkO-eIB1-efCGWkBQAV0BlJq7bo4O8jRv3o4VjOjf0rtDO
|
||||
FG8RVCdSsGjLtGs-0gDEORTorEdwUlY2X54rPlOZpuOA0lN4N7tz35kMtxySmq9lAgMBAAGjgeUw
|
||||
geIwDAYDVR0TAQH_BAIwADAfBgNVHSMEGDAWgBRv8ZUYYlzgyPHF7WwYyeDTZFKYIDBABggrBgEF
|
||||
BQcBAQQ0MDIwMAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLmFwcGxlLmNvbS9vY3NwMDMtYWlwY2Ew
|
||||
NzAvBgNVHR8EKDAmMCSgIqAghh5odHRwOi8vY3JsLmFwcGxlLmNvbS9haXBjYS5jcmwwHQYDVR0O
|
||||
BBYEFCkAQ-DGkwX04nv_NdJ5BvpUl3YjMA4GA1UdDwEB_wQEAwIHgDAPBgkqhkiG92NkBjoEAgUA
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQBA51NbANKWAu-nYD7W27ilNY9YRzstmIC5_nOz1o_RTQR_Zbps
|
||||
s1G8bzM-53F6OgL8MFI2ummWpXfSL2k_bX6Y_FtCYkoyWdF-rVexy0WeCkjeRgc1G14DGy5ontva
|
||||
qGzENwiFoECYoxI4cBANSDVkhZNWBzfZ2lY4cCWo4U9oVyxYDBoWSd4_JTZzWNzlX3koj7kLA7vh
|
||||
nPUW53hsEk_BsH5x10qy_tEBNOKPbh4vC3q0wbEyhk6_W5iEaE9nh0_Anrq0MfQJtIo91t4QKkvE
|
||||
jcNN1OrFYpmYGevd0X3H99npvad4XiYUX2Pmf0Ro8ChhvcDhFeBAq_9h6HvAOUoMMIIERDCCAyyg
|
||||
AwIBAgIIXGPK5Eo3U8kwDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkFw
|
||||
cGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQD
|
||||
Ew1BcHBsZSBSb290IENBMB4XDTE3MDUxMDIxMjczMFoXDTMwMTIzMTAwMDAwMFowczEtMCsGA1UE
|
||||
AwwkQXBwbGUgaVBob25lIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZp
|
||||
Y2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0G
|
||||
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJRWoBDz6DBIbH_L_cXvAege4XMHNjJi7ePXokzZM-
|
||||
TzlHunW-88DS8Vmiqx_-CoY82S2aB_IOa7kpkRpfIgqL8XJYBa5MS0TFeaeAPLCI4IwMJ4RdGeWH
|
||||
GTbL48V2t7D0QXJR9AVcg0uibaZRuPEm33terWUMxrKYUYy7fRtMwU7ICMfS7WQLtN0bjU9AfRuP
|
||||
SJaSW_PQmH7ZvKQZDplhu0FdAcxbd3p9JNDc01P_w9zFlCy2Wk2OGCM5vdnGUj7R8vQliqEqh_3Y
|
||||
DEYpUf_tF2yJJWuHv4ppFJ93n8MVt2iziEW9hOYGAkFkD60qKLgVyeCsp4q6cgQ0sniM-LKFAgMB
|
||||
AAGjgewwgekwDwYDVR0TAQH_BAUwAwEB_zAfBgNVHSMEGDAWgBQr0GlHlHYJ_vRrjS5ApvdHTX8I
|
||||
XjBEBggrBgEFBQcBAQQ4MDYwNAYIKwYBBQUHMAGGKGh0dHA6Ly9vY3NwLmFwcGxlLmNvbS9vY3Nw
|
||||
MDMtYXBwbGVyb290Y2EwLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2NybC5hcHBsZS5jb20vcm9v
|
||||
dC5jcmwwHQYDVR0OBBYEFG_xlRhiXODI8cXtbBjJ4NNkUpggMA4GA1UdDwEB_wQEAwIBBjAQBgoq
|
||||
hkiG92NkBgISBAIFADANBgkqhkiG9w0BAQsFAAOCAQEAOs-smI2-kiAhCa2V87FcIfo2LVcgRHRz
|
||||
ZJIIs5as922X-ls0OCfPEkbTPBHwB8mZkLHR6BEJpeOla2xjCD-eJfrVmZxM5uXOjrJNaOyLq6Oi
|
||||
T4oRFT7cFCscxkS2b2fFW0-VKS2HXD_cgx53T-3aVKct5xOBwWPEVAsbSwpqKCII1DeSfH9nKF-v
|
||||
PT-3rFkdODRkWu4zShlCRCnEyhhr4cFTLS30TcIV9jMyGHjxJm-KTeuUTKPo_w-zA4tl2usu2GVQ
|
||||
n9yfit8xqIRU3FJSQdKyEx0xRkeIXz7uw_KMIwSV66yKPoJsBp8u44tDmmJbNA30mc8s7rpyhhkj
|
||||
pfyOtTCCBLswggOjoAMCAQICAQIwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCVVMxEzARBgNV
|
||||
BAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYw
|
||||
FAYDVQQDEw1BcHBsZSBSb290IENBMB4XDTA2MDQyNTIxNDAzNloXDTM1MDIwOTIxNDAzNlowYjEL
|
||||
MAkGA1UEBhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmlj
|
||||
YXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1BcHBsZSBSb290IENBMIIBIjANBgkqhkiG9w0BAQEF
|
||||
AAOCAQ8AMIIBCgKCAQEA5JGpCR-R2x5HUOsF7V55hC3rNqJXTFXsixmJ3vlLbPUHqyIwAugYPvhQ
|
||||
CdN_QaiY-dHKZpwkaxHQo7vkGyrDH5WeegykR4tb1BY3M8vED03OFGnRyRly9V0O1X9fm_IlA7pV
|
||||
j01dDfFkNSMVSxVZHbOU9_acns9QusFYUGePCLQg98usLCBvcLY_ATCMt0PPD5098ytJKBrI_s61
|
||||
uQ7ZXhzWyz21Oq30Dw4AkguxIRYudNU8DdtiFqujcZJHU1XBry9Bs_j743DN5qNMRX4fTGtQlkGJ
|
||||
xHRiCxCDQYczioGxMFjsWgQyjGizjx3eZXP_Z15lvEnYdp8zFGWhd5TJLQIDAQABo4IBejCCAXYw
|
||||
DgYDVR0PAQH_BAQDAgEGMA8GA1UdEwEB_wQFMAMBAf8wHQYDVR0OBBYEFCvQaUeUdgn-9GuNLkCm
|
||||
90dNfwheMB8GA1UdIwQYMBaAFCvQaUeUdgn-9GuNLkCm90dNfwheMIIBEQYDVR0gBIIBCDCCAQQw
|
||||
ggEABgkqhkiG92NkBQEwgfIwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LmFwcGxlLmNvbS9hcHBs
|
||||
ZWNhLzCBwwYIKwYBBQUHAgIwgbYagbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFu
|
||||
eSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
|
||||
ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2Vy
|
||||
dGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjANBgkqhkiG9w0BAQUFAAOCAQEAXDaZTC14
|
||||
t-2Mm9zzd5vydtJ3ME_BH4WDhRuZPUc38qmbQI4s1LGQEti-9HOb7tJkD8t5TzTYoj75eP9ryAfs
|
||||
fTmDi1Mg0zjEsb-aTwpr_yv8WacFCXwXQFYRHnTTt4sjO0ej1W8k4uvRt3DfD0XhJ8rxbXjt57UX
|
||||
F6jcfiI1yiXV2Q_Wa9SiJCMR96Gsj3OBYMYbWwkvkrL4REjwYDieFfU9JmcgijNq9w2Cz97roy_5
|
||||
U2pbZMBjM3f3OgcsVuvaDyEO2rpzGU-12TZ_wYdV2aeZuTJC-9jVcZ5-oVK3G72TQiQSKscPHbZN
|
||||
nF5jyEuAF1CqitXa5PzQCQc3sHV1ITGCAoUwggKBAgEBMH8wczEtMCsGA1UEAwwkQXBwbGUgaVBo
|
||||
b25lIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhv
|
||||
cml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMCCGPwVvLPIlfzMAkGBSsOAwIa
|
||||
BQCggdwwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwNzE4MTQ1
|
||||
NTA1WjAjBgkqhkiG9w0BCQQxFgQUYwvDx1yr56NtJEdxh--NMv9wqDEwKQYJKoZIhvcNAQk0MRww
|
||||
GjAJBgUrDgMCGgUAoQ0GCSqGSIb3DQEBAQUAMFIGCSqGSIb3DQEJDzFFMEMwCgYIKoZIhvcNAwcw
|
||||
DgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMA0G
|
||||
CSqGSIb3DQEBAQUABIIBAJ6WUgCnMMT4q4LQjeOOpLWsXJRdns3b5aBEKoK3NIetn3I_bWo0wmX3
|
||||
Rxuy29Ljv_0bGC0PfcXyBXWtg1LQ4EzUpgpVK_IeZrlX6HcKwxgZwkejwVg009kTYNir-otXP1AM
|
||||
YNfXsPA-woLAbo_Hx0MrN1EHgejqO8x5c9s7LpQQGJpVsD9Rq6sZ4VJftMtuTz4XwvU3Qypj7_RF
|
||||
Drhh-MekYg6qG7aJMzOuftkDx2BWL7Sld77ViX1Qt8zZpyoI4RW4MIxH50ERwVYlpaoHYdnit3Ct
|
||||
RZki8aS0kxFdxVY0pePF0k6h-5GbwceXATkXM4UY0-fAXqk11QevHKT8was
|
||||
|
|
@ -210,9 +210,6 @@ body .cc-error-container #alert-message {
|
|||
#fmg-checkout-shared .form-group .list-group.radio .list-group-item label {
|
||||
padding: 12px 20px;
|
||||
}
|
||||
#fmg-checkout-shared #afterpayParentDiv {
|
||||
display: none;
|
||||
}
|
||||
#fmg-checkout-shared #applepay-and-paypal-container {
|
||||
display: inline-flex;
|
||||
width: 100%;
|
||||
|
|
|
|||
|
|
@ -237,10 +237,6 @@ body {
|
|||
}
|
||||
}
|
||||
|
||||
#afterpayParentDiv {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#applepay-and-paypal-container {
|
||||
display: inline-flex;
|
||||
width: 100%;
|
||||
|
|
|
|||
|
|
@ -33,6 +33,9 @@ const queryStrings = {
|
|||
SERVICE_ZIP: "servicezip",
|
||||
EMAIL: "email",
|
||||
IS_INSURANCE: "isinsurance",
|
||||
VIN_SELECTION: "vinselection",
|
||||
PACKAGE_SELECTION: "packageselection",
|
||||
NUMBER_OF_CHIPS: "numberofchips",
|
||||
};
|
||||
|
||||
export { queryStrings };
|
||||
|
|
|
|||
|
|
@ -96,7 +96,8 @@ const storeActions = {
|
|||
|
||||
CREATE_SUBMITTED_ORDER: "createSubmittedOrder",
|
||||
RESET_SUBMITTED_ORDER: "resetSubmittedOrder",
|
||||
RESET_IS_LEAD_GEN: "resetIsLeadGen",
|
||||
RESET_LEADGEN_STATE: "resetLeadGenState",
|
||||
CREATE_LEADGEN_STATE: "createLeadGenState",
|
||||
};
|
||||
|
||||
export { storeActions };
|
||||
|
|
|
|||
|
|
@ -88,6 +88,28 @@ const storeMutations = {
|
|||
// EXPERIMENT MUTATIONS
|
||||
UPDATE_EXPERIMENTS: "updateExperiments",
|
||||
UPDATE_TRIGGERED_SITE_ENTRY: "updateTriggeredSiteEntry",
|
||||
|
||||
// LEADGEN MUTATIONS
|
||||
UPDATE_LEAD_GEN_YEAR: "updateLeadGenYear",
|
||||
UPDATE_LEAD_GEN_MAKE: "updateLeadGenMake",
|
||||
UPDATE_LEAD_GEN_MODEL: "updateLeadGenModel",
|
||||
UPDATE_LEAD_GEN_STYLE: "updateLeadGenStyle",
|
||||
UPDATE_LEAD_GEN_IS_REPAIR: "updateLeadGenIsRepair",
|
||||
UPDATE_LEAD_GEN_NUMBER_OF_CHIPS: "updateLeadGenNumberOfChips",
|
||||
UPDATE_LEAD_GEN_DAMAGE_TYPE: "updateLeadGenDamageType",
|
||||
UPDATE_LEAD_GEN_ZIP_CODE: "updateLeadGenZipCode",
|
||||
UPDATE_LEAD_GEN_EMAIL_ADDRESS: "updateLeadGenEmailAddress",
|
||||
UPDATE_LEAD_GEN_IS_INSURANCE: "updateLeadGenIsInsurance",
|
||||
UPDATE_LEAD_GEN_VIN_SELECTION: "updateLeadGenVinSelection",
|
||||
UPDATE_LEAD_GEN_PACKAGE_SELECTION: "updateLeadGenPackageSelection",
|
||||
|
||||
//RESET LEADGEN MUTATIONS
|
||||
RESET_LEADGEN_VEHICLE_STATE: "resetLeadGenVehicleState",
|
||||
RESETL_EADGEN_DAMAGE_STATE: "resetLeadGenDamageState",
|
||||
RESET_LEADGEN_ESTIMATE_STATE: "resetLeadGenEstimateState",
|
||||
RESET_LEADGEN_SERVICEZIP_STATE: "resetLeadGenServiceZipState",
|
||||
RESET_LEADGEN_QUOTE_STATE: "resetLeadGenQuoteState",
|
||||
RESET_IS_LEADGEN: "resetIsLeadGen",
|
||||
};
|
||||
|
||||
export { storeMutations };
|
||||
|
|
|
|||
|
|
@ -230,6 +230,15 @@ export function getHighestFullySatisfiedTier(glassToReplace, availableLineItems,
|
|||
return highestSatisfiedPackage;
|
||||
}
|
||||
|
||||
export function getPackageNameByType(packageType) {
|
||||
const package_names = {
|
||||
glassonly: packageNames.TIER_ONE,
|
||||
standard: packageNames.TIER_TWO,
|
||||
premium: packageNames.TIER_THREE,
|
||||
};
|
||||
return package_names[packageType] || null;
|
||||
}
|
||||
|
||||
function maxTier(tierA, tierB) {
|
||||
if (tierA === packageNames.TIER_THREE || tierB === packageNames.TIER_THREE) {
|
||||
return packageNames.TIER_THREE;
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ import { settleAllPromises } from "@/helpers/layout-helper";
|
|||
import { storeActions } from "@/constants/store-actions";
|
||||
import { routerParams } from "@/router/router-constants/router-params";
|
||||
import { getDamageString, isGlassAvailableForCarId } from "@/helpers/damage-helper";
|
||||
|
||||
import baseMixin from "@/mixins/base-mixin.js";
|
||||
import store from "@/store";
|
||||
import vinPagesMixin from "@/mixins/vin-pages-mixin";
|
||||
|
||||
|
|
@ -150,6 +150,10 @@ export default {
|
|||
// Call the "next" function to complete the transition to this page.
|
||||
next((vm) => {
|
||||
vm.setCmsContent(resultMap.cmsContent);
|
||||
if (store.getters.isLeadGen) {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
});
|
||||
},
|
||||
data() {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
|
|||
import baseMixin from "../../mixins/base-mixin";
|
||||
import { vinLookupMethodSelections } from "@/constants/vin-lookup-method-selections.js";
|
||||
import { experimentSettings } from "@/constants/experiments";
|
||||
import { nextTick } from "vue";
|
||||
|
||||
// Mock our module for promises.
|
||||
jest.mock("@/helpers/layout-helper.js", () => ({
|
||||
|
|
@ -213,20 +214,18 @@ describe("estimate.vue", () => {
|
|||
});
|
||||
|
||||
describe("estimate.vue", () => {
|
||||
test("should call forwardButtonAction if isLeadGen is true", async () => {
|
||||
// update store with isLeadGen as true
|
||||
test("should call forwardButtonAction if isLeadGen is true and form is valid", async () => {
|
||||
store.commit(storeMutations.UPDATE_IS_LEAD_GEN, true);
|
||||
store.commit(storeMutations.UPDATE_LEAD_GEN_VIN_SELECTION, "decline");
|
||||
|
||||
// Set up the component
|
||||
const { wrapper } = setupMocks({});
|
||||
|
||||
wrapper.vm.forwardButtonAction = jest.fn();
|
||||
|
||||
const nextFunction = jest.fn((c) => {
|
||||
c(wrapper.vm);
|
||||
});
|
||||
|
||||
// Set selectedVinLookupMethod to decline
|
||||
wrapper.setData({ selectedVinLookupMethod: vinLookupMethodSelections.DECLINE });
|
||||
|
||||
// Call the method that contains the if-else logic
|
||||
await estimate.beforeRouteEnter.call(
|
||||
wrapper.vm,
|
||||
|
|
@ -234,7 +233,12 @@ describe("estimate.vue", () => {
|
|||
undefined,
|
||||
nextFunction
|
||||
);
|
||||
await wrapper.vm.$nextTick();
|
||||
|
||||
expect(nextFunction).toHaveBeenCalled();
|
||||
expect(baseMixin.methods.isFormValid).toHaveBeenCalled();
|
||||
expect(baseMixin.methods.isFormValid()).toBe(true);
|
||||
await wrapper.vm.$nextTick();
|
||||
expect(wrapper.vm.forwardButtonAction).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
|
@ -247,6 +251,7 @@ function setupMocks({
|
|||
{ Name: "Provide my VIN manually Most specific to your vehicle" },
|
||||
{ Name: "Provide my license plate # Most accurate VIN match" },
|
||||
{ Name: "Provide my home address Most convenient VIN match" },
|
||||
{ Name: "I'd rather not share my VIN" },
|
||||
],
|
||||
FunnelFooterWidget = { ForwardButtonText: "test txt" },
|
||||
mountOptionsMockData = {
|
||||
|
|
@ -280,7 +285,7 @@ function setupMocks({
|
|||
const apiPromise = Promise.resolve({ cmsContent });
|
||||
settleAllPromises.mockImplementation(() => apiPromise);
|
||||
fetchCmsContentForPage.mockImplementation(() => Promise.resolve());
|
||||
|
||||
baseMixin.methods.isFormValid = jest.fn().mockReturnValue(true);
|
||||
const mountOptions = getMountOptions({
|
||||
...mountOptionsMockData,
|
||||
mixins: [baseMixin, mockMixin],
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigat
|
|||
import { saveSession } from "@/helpers/heritage-integration/order-helper.js";
|
||||
import baseMixin from "@/mixins/base-mixin.js";
|
||||
import { queryStrings } from "@/constants/query-strings";
|
||||
import { nextTick } from "vue";
|
||||
|
||||
// Define Validation Rules
|
||||
defineRule("zip-required", required(errorMessages.SERVICE_ZIP_REQUIRED));
|
||||
|
|
@ -128,7 +129,7 @@ export default {
|
|||
|
||||
const resultMap = await settleAllPromises(promiseResultMap);
|
||||
|
||||
next((vm) => {
|
||||
next(async (vm) => {
|
||||
if (resultMap.cmsContent.FunnelFooterWidget.ForwardButtonText.includes("|")) {
|
||||
const forwardTextOption =
|
||||
resultMap.cmsContent.FunnelFooterWidget.ForwardButtonText.split("|");
|
||||
|
|
@ -146,10 +147,24 @@ export default {
|
|||
|
||||
vm.setCmsContent(resultMap.cmsContent);
|
||||
if (store.getters.isLeadGen) {
|
||||
vm.selectedVinLookupMethod = vinLookupMethodSelections.DECLINE;
|
||||
vm.forwardButtonAction();
|
||||
if (store.getters.leadGenEstimate.vinSelection) {
|
||||
vm.selectedVinLookupMethod = vinPagesMixin.methods.getVinlookupMethod(
|
||||
store.getters.leadGenEstimate.vinSelection
|
||||
);
|
||||
await nextTick();
|
||||
const isValid = await baseMixin.methods.isFormValid(vm.$refs.theForm);
|
||||
if (isValid) {
|
||||
vm.forwardButtonAction();
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ export default {
|
|||
vm.setCmsContent(resultMap.cmsContent);
|
||||
vm.originalList = resultMap.insuranceCompanyList;
|
||||
if (store.getters.isLeadGen) {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ import { getDamageString, isGlassAvailableForCarId } from "@/helpers/damage-help
|
|||
import { routerParams } from "@/router/router-constants/router-params";
|
||||
import { required, regex } from "@/helpers/validation-rules";
|
||||
import { Form, defineRule } from "vee-validate";
|
||||
|
||||
import baseMixin from "@/mixins/base-mixin.js";
|
||||
import store from "@/store";
|
||||
import vinPagesMixin from "@/mixins/vin-pages-mixin";
|
||||
|
||||
|
|
@ -148,6 +148,10 @@ export default {
|
|||
// Call the "next" function to complete the transition to this page.
|
||||
next((vm) => {
|
||||
vm.setCmsContent(resultMap.cmsContent);
|
||||
if (store.getters.isLeadGen) {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
});
|
||||
},
|
||||
props: {
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ export default {
|
|||
next((vm) => {
|
||||
vm.setCmsContent(resultMap.cmsContent);
|
||||
if (store.getters.isLeadGen) {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -109,8 +109,9 @@ function generateDefaultProps() {
|
|||
return {
|
||||
modelValue: "modelValue",
|
||||
hasRecal: false,
|
||||
isApplePay: true,
|
||||
showApplePay: true,
|
||||
isInsurance: false,
|
||||
isPiaEnabled: true,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,8 +10,9 @@
|
|||
isRequired
|
||||
:validationRules="validationRules"
|
||||
:hasRecal="hasRecal"
|
||||
:isApplePay="isApplePay"
|
||||
:showApplePay="showApplePay"
|
||||
:isInsurance="isInsurance"
|
||||
:isPiaEnabled="isPiaEnabled"
|
||||
v-model="selectedMethod"
|
||||
textPosition="text-start" />
|
||||
</div>
|
||||
|
|
@ -20,6 +21,7 @@
|
|||
<script>
|
||||
import buttonQuestion from "@/digital-components/button-question/button-question";
|
||||
import paymentMethodListButton from "./payment-method-list-button/payment-method-list-button";
|
||||
import store from "@/store";
|
||||
import { paymentMethods, paymentTimes } from "@/constants/payment-method-constants";
|
||||
|
||||
export default {
|
||||
|
|
@ -33,8 +35,9 @@ export default {
|
|||
modelValue: String,
|
||||
validationRules: String,
|
||||
hasRecal: Boolean,
|
||||
isApplePay: Boolean,
|
||||
showApplePay: Boolean,
|
||||
isInsurance: Boolean,
|
||||
isPiaEnabled: Boolean,
|
||||
},
|
||||
methods: {
|
||||
getAnswersNullSafe(widgetName) {
|
||||
|
|
@ -64,28 +67,14 @@ export default {
|
|||
if (this.hasRecal) {
|
||||
cmsData = this.getAnswersNullSafe("PaymentMethodHasRecalWidget");
|
||||
} else {
|
||||
if (this.isApplePay) {
|
||||
if (this.showApplePay) {
|
||||
cmsData = this.getAnswersNullSafe("PaymentMethodWidget");
|
||||
} else {
|
||||
cmsData = this.getAnswersNullSafe("PaymentMethodHasRecalWidget");
|
||||
}
|
||||
}
|
||||
|
||||
if (this.hasRecal || this.isInsurance) {
|
||||
var tempItems = cmsData.map((answer) => {
|
||||
return {
|
||||
buttonLabel: answer.Text,
|
||||
altText: answer.Text,
|
||||
groupName: "payment-method",
|
||||
value: answer.Name,
|
||||
buttonImage: answer.AnswerImageUrl,
|
||||
};
|
||||
});
|
||||
|
||||
return tempItems.filter((a) => a.value != "Insurance");
|
||||
}
|
||||
|
||||
return cmsData.map((answer) => {
|
||||
var tempItems = cmsData.map((answer) => {
|
||||
return {
|
||||
buttonLabel: answer.Text,
|
||||
altText: answer.Text,
|
||||
|
|
@ -94,6 +83,22 @@ export default {
|
|||
buttonImage: answer.AnswerImageUrl,
|
||||
};
|
||||
});
|
||||
|
||||
if (this.hasRecal || this.isInsurance) {
|
||||
tempItems.splice(
|
||||
tempItems.findIndex((a) => a.value === "Insurance"),
|
||||
1
|
||||
);
|
||||
}
|
||||
|
||||
if (this.hasRecal || !this.isPiaEnabled) {
|
||||
tempItems.splice(
|
||||
tempItems.findIndex((a) => a.value === "PayNow"),
|
||||
1
|
||||
);
|
||||
}
|
||||
|
||||
return tempItems;
|
||||
},
|
||||
},
|
||||
components: {
|
||||
|
|
|
|||
|
|
@ -68,8 +68,9 @@
|
|||
v-if="isPiaEnabled && totalAmountDue > 0"
|
||||
v-model="paymentMethodInternalModel"
|
||||
:hasRecal="hasRecal"
|
||||
:isApplePay="isApplePay"
|
||||
:showApplePay="showApplePay"
|
||||
:isInsurance="isInsurance"
|
||||
:isPiaEnabled="isPiaEnabled"
|
||||
validationRules="payment-method-required" />
|
||||
|
||||
<alert
|
||||
|
|
@ -567,19 +568,17 @@ export default {
|
|||
},
|
||||
computed: {
|
||||
hasRecal() {
|
||||
const recalLineItem = this.$store.getters.order.lineItems.supportingItems.find(
|
||||
(lineItem) => lineItem.partType == partTypeStrings.RECALIBRATION
|
||||
const recalLineItem = this.$store.getters.order.lineItems?.supportingItems?.find(
|
||||
(lineItem) => lineItem.partType.indexOf(partTypeStrings.RECALIBRATION) !== -1
|
||||
);
|
||||
|
||||
if (recalLineItem) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
isApplePay() {
|
||||
if (window.ApplePaySession && window.ApplePaySession.canMakePayments()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
showApplePay() {
|
||||
return baseMixin.methods.showApplePay();
|
||||
},
|
||||
damageInfo() {
|
||||
return this.$store.getters.damage;
|
||||
|
|
|
|||
|
|
@ -407,11 +407,7 @@ export default {
|
|||
},
|
||||
computed: {
|
||||
parentNomainName() {
|
||||
var a = document.createElement("a");
|
||||
a.href = applicationConfig.HERITAGE_FUNNEL;
|
||||
|
||||
const protocol = window.location.protocol;
|
||||
return `${protocol}//${a.hostname}`;
|
||||
return window.location.hostname;
|
||||
},
|
||||
dynamicCSSUrl() {
|
||||
const { protocol, hostname, port } = window.location;
|
||||
|
|
@ -658,18 +654,16 @@ export default {
|
|||
this.$nextTick(() => {
|
||||
this.$refs.hopForm.submit();
|
||||
|
||||
var isApplePayAvailable = false;
|
||||
if (window.ApplePaySession && window.ApplePaySession.canMakePayments()) {
|
||||
isApplePayAvailable = true;
|
||||
}
|
||||
|
||||
const iframe = this.$refs.paymentFrame;
|
||||
if (iframe) {
|
||||
iframe.onload = () => {
|
||||
if (iframe.contentWindow) {
|
||||
if (isApplePayAvailable) {
|
||||
if (baseMixin.methods.showApplePay()) {
|
||||
iframe.contentWindow.postMessage("hybrid-with-applepay", "*");
|
||||
console.log(new Date() + ": Sent applepay");
|
||||
console.log(new Date() + ": Sent applepay: new hop with applepay");
|
||||
} else {
|
||||
iframe.contentWindow.postMessage("hybrid", "*");
|
||||
console.log(new Date() + ": Sent hybrid: new hop no applepay");
|
||||
}
|
||||
|
||||
if (this.paymentType == "cc") {
|
||||
|
|
|
|||
|
|
@ -58,6 +58,9 @@ jest.mock("@/mixins/base-mixin", () => ({
|
|||
filterOutFees(items) {
|
||||
return null;
|
||||
},
|
||||
isFormValid(form) {
|
||||
return true;
|
||||
},
|
||||
},
|
||||
}));
|
||||
|
||||
|
|
@ -66,6 +69,9 @@ const mockMixin = {
|
|||
filterOutFees: jest.fn().mockImplementation(() => {
|
||||
return null;
|
||||
}),
|
||||
isFormValid: jest.fn().mockImplementation(() => {
|
||||
return true;
|
||||
}),
|
||||
getSettingValue: jest.fn((settingName) => {
|
||||
if (settingName === experimentSettings.SERVICE_PACKAGE_DISCOUNT) {
|
||||
return true;
|
||||
|
|
@ -641,7 +647,7 @@ describe("quote.vue", () => {
|
|||
});
|
||||
});
|
||||
describe("quote.vue", () => {
|
||||
test("should call forwardButtonAction if isLeadGen is true and Insurance is true", async () => {
|
||||
test("should call forwardButtonAction if isLeadGen and Insurance is true and form is valid", async () => {
|
||||
// Set up the store with isLeadGen as true
|
||||
|
||||
store.getters = {
|
||||
|
|
@ -666,6 +672,10 @@ describe("quote.vue", () => {
|
|||
},
|
||||
},
|
||||
isLeadGen: true,
|
||||
leadGenQuote: {
|
||||
isInsurance: true,
|
||||
packageSelection: "glassonly",
|
||||
},
|
||||
payment: {
|
||||
isInsurance: true,
|
||||
inactivePromos: [],
|
||||
|
|
@ -693,72 +703,24 @@ describe("quote.vue", () => {
|
|||
undefined,
|
||||
nextFunction
|
||||
);
|
||||
await nextTick();
|
||||
expect(nextFunction).toHaveBeenCalled();
|
||||
expect(baseMixin.methods.isFormValid).toHaveBeenCalled();
|
||||
expect(baseMixin.methods.isFormValid()).toBe(true);
|
||||
await wrapper.vm.$nextTick();
|
||||
expect(wrapper.vm.forwardButtonAction).toHaveBeenCalled();
|
||||
});
|
||||
test("should not call forwardButtonAction if isLeadGen is true and Insurance is false", async () => {
|
||||
// Set up the store with isLeadGen as true
|
||||
store.getters = {
|
||||
lineItems: {
|
||||
glassParts: ["item", "item2"],
|
||||
},
|
||||
order: {
|
||||
lineItems: {
|
||||
glassParts: ["item", "item2"],
|
||||
},
|
||||
serviceLocation: {
|
||||
zipCode: "12345",
|
||||
zipCodeCtu: "value",
|
||||
},
|
||||
damage: {
|
||||
isRepair: false,
|
||||
},
|
||||
referralNumber: "1234567",
|
||||
payment: {
|
||||
isInsurance: null,
|
||||
inactivePromos: [],
|
||||
},
|
||||
},
|
||||
isLeadGen: true,
|
||||
payment: {
|
||||
isInsurance: null,
|
||||
inactivePromos: [],
|
||||
},
|
||||
vehicle: {
|
||||
cardId: "123",
|
||||
},
|
||||
experimentSettings: {
|
||||
settingName: "SERVICE_PACKAGE_DISCOUNT",
|
||||
},
|
||||
};
|
||||
|
||||
// Set up the component
|
||||
const { wrapper } = setupMocks({});
|
||||
wrapper.vm.$route = { query: null };
|
||||
wrapper.vm.forwardButtonAction = jest.fn();
|
||||
const nextFunction = jest.fn((c) => {
|
||||
c(wrapper.vm);
|
||||
});
|
||||
|
||||
// Call the method that contains the if-else logic
|
||||
await quote.beforeRouteEnter.call(
|
||||
wrapper.vm,
|
||||
{ query: { fmgPage: "quote" } },
|
||||
undefined,
|
||||
nextFunction
|
||||
);
|
||||
expect(wrapper.vm.forwardButtonAction).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
function setupMocks({ customMountOptions }) {
|
||||
const mountOptions = getMountOptions({
|
||||
...customMountOptions,
|
||||
});
|
||||
|
||||
baseMixin.methods.hideFmgLoadingModal = jest.fn();
|
||||
baseMixin.methods.isFormValid = jest.fn().mockReturnValue(true);
|
||||
mountOptions.global.mocks["$store"] = store;
|
||||
mountOptions["attachTo"] = document.body;
|
||||
|
||||
const wrapper = shallowMount(quote, mountOptions);
|
||||
wrapper.vm.setCmsContent = jest.fn();
|
||||
return { wrapper };
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
:isInsuranceSelected="isInsuranceSelected"
|
||||
@vapsItemsSelected="vapsItemsSelectedAction"
|
||||
@servicePackageDiscountSelected="servicePackageDiscountSelectedAction"
|
||||
:packageSelection="packageSelection"
|
||||
:activePromos="lineItems.promos"
|
||||
v-on="{ 'buttonEvent.openModal': openModalAction }"
|
||||
validationRules="option-required"
|
||||
|
|
@ -124,6 +125,7 @@ import promoModalQuestion from "@/fmg-components/promo-modal-question/promo-moda
|
|||
import { experimentSettings } from "@/constants/experiments";
|
||||
import { partTypeStrings } from "@/constants/part-type-strings";
|
||||
import { containsLineItemWithPartType } from "@/helpers/service-package-helper";
|
||||
import { nextTick } from "vue";
|
||||
defineRule("option-required", required(errorMessages.OPTION_REQUIRED));
|
||||
|
||||
export default {
|
||||
|
|
@ -245,7 +247,7 @@ export default {
|
|||
// End of promo logic
|
||||
|
||||
// Call the "next" function to complete the transition to this page.
|
||||
next((vm) => {
|
||||
next(async (vm) => {
|
||||
vm.setCmsContent(resultMap.cmsContent);
|
||||
vm.addableVaps = addableVaps;
|
||||
vm.lineItems = lineItems;
|
||||
|
|
@ -271,14 +273,23 @@ export default {
|
|||
);
|
||||
}
|
||||
if (store.getters.isLeadGen) {
|
||||
if (store.getters.order.payment.isInsurance == true) {
|
||||
vm.forwardButtonAction();
|
||||
if (store.getters.leadGenQuote.isInsurance == true) {
|
||||
vm.isInsuranceSelected = true;
|
||||
vm.packageSelection = store.getters.leadGenQuote.packageSelection;
|
||||
await nextTick();
|
||||
const isValid = await baseMixin.methods.isFormValid(vm.$refs.theForm);
|
||||
if (isValid) {
|
||||
vm.forwardButtonAction();
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
});
|
||||
|
|
@ -289,6 +300,7 @@ export default {
|
|||
availableLineItems: null,
|
||||
lineItems: [],
|
||||
addableVaps: [],
|
||||
packageSelection: null,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
|
|
@ -454,7 +466,12 @@ export default {
|
|||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
<style>
|
||||
.funnel-sub-header {
|
||||
p {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
.text-block {
|
||||
display: block;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import {
|
|||
getPackageContents,
|
||||
containsLineItemWithPartType,
|
||||
findLineItemsWithPartType,
|
||||
getPackageNameByType,
|
||||
} from "@/helpers/service-package-helper";
|
||||
import {
|
||||
getPromosThatMatchLineItemsOnOrder,
|
||||
|
|
@ -47,6 +48,7 @@ export default {
|
|||
isInsuranceSelected: Boolean,
|
||||
availableLineItems: null,
|
||||
activePromos: null,
|
||||
packageSelection: null,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -58,7 +60,8 @@ export default {
|
|||
availableLineItems() {
|
||||
if (
|
||||
this.$store.getters.payment.isInsurance != null ||
|
||||
getPromosWithAddableVaps(this.activePromos).length
|
||||
getPromosWithAddableVaps(this.activePromos).length ||
|
||||
this.packageSelection != null
|
||||
) {
|
||||
this.selectDefaultPackage();
|
||||
}
|
||||
|
|
@ -293,6 +296,9 @@ export default {
|
|||
return price;
|
||||
},
|
||||
selectDefaultPackage() {
|
||||
if (this.packageSelection != null) {
|
||||
return (this.selectedPackageName = getPackageNameByType(this.packageSelection));
|
||||
}
|
||||
const promosWithAddableVaps = getPromosWithAddableVaps(this.activePromos);
|
||||
const vapsThatMatchPromos = getLineItemsThatMatchPromos(
|
||||
promosWithAddableVaps,
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
class="strikethrough-price"
|
||||
v-if="shouldDisplayStrikeThroughPrice"
|
||||
v-html="this.additionalButtonData.strikeThroughPrice"></span>
|
||||
<span v-html="this.buttonAuxillaryCopy"></span>*
|
||||
<span v-html="this.buttonAuxillaryCopy"></span>
|
||||
</span>
|
||||
</p>
|
||||
<p
|
||||
|
|
@ -150,9 +150,11 @@ export default {
|
|||
display: block;
|
||||
@include media-breakpoint-up(md) {
|
||||
display: flex;
|
||||
min-height: 320px;
|
||||
min-height: 336px;
|
||||
}
|
||||
@include media-breakpoint-up(xl) {
|
||||
//Unique breakpoint for this page only to accommodate price spacing issues
|
||||
//from use of position: absolute on .service-package-discount (per Design Team request)
|
||||
@media only screen and (min-width: 860px) {
|
||||
display: flex;
|
||||
min-height: 276px;
|
||||
}
|
||||
|
|
@ -259,20 +261,20 @@ export default {
|
|||
|
||||
.package-footer {
|
||||
color: $red;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.package-specs {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
max-height: 0;
|
||||
transition: all 0.5s ease;
|
||||
@include media-breakpoint-up(md) {
|
||||
max-height: 500px;
|
||||
}
|
||||
|
||||
p {
|
||||
font-weight: 500;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
span {
|
||||
|
|
@ -336,9 +338,9 @@ export default {
|
|||
margin: 1rem 0 0 -15px;
|
||||
padding: 0;
|
||||
li {
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.714;
|
||||
color: $gray-550;
|
||||
a {
|
||||
line-height: 1.714;
|
||||
padding: 0;
|
||||
|
|
@ -374,6 +376,10 @@ export default {
|
|||
justify-content: center;
|
||||
width: 100%;
|
||||
color: white;
|
||||
text-transform: uppercase;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.75px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -165,6 +165,10 @@ function resetMockStoreData() {
|
|||
jobMaxMinutes: null,
|
||||
jobMinMinutes: null,
|
||||
},
|
||||
leadGenServiceZip: {
|
||||
zipCode: null,
|
||||
emailAddress: null,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -175,6 +179,7 @@ function applyMockStoreDataToGetters() {
|
|||
damage: mockStoreData.damage,
|
||||
payment: mockStoreData.payment,
|
||||
policy: mockStoreData.policy,
|
||||
leadGenServiceZip: mockStoreData.leadGenServiceZip,
|
||||
};
|
||||
store.state.order = mockStoreData;
|
||||
store.state.applicationUser.experiments = mockExperimentSettings;
|
||||
|
|
@ -416,9 +421,7 @@ describe("service-zip.vue", () => {
|
|||
});
|
||||
|
||||
// Mock the isFormValid method
|
||||
wrapper.vm.isFormValid = jest.fn().mockImplementation(() => {
|
||||
return true;
|
||||
});
|
||||
baseMixin.methods.isFormValid = jest.fn().mockReturnValue(true);
|
||||
|
||||
// Call the method that contains the if-else logic
|
||||
await serviceZip.beforeRouteEnter.call(
|
||||
|
|
@ -442,7 +445,7 @@ describe("service-zip.vue", () => {
|
|||
});
|
||||
|
||||
// Mock the isFormValid method
|
||||
wrapper.vm.isFormValid = jest.fn().mockImplementation(() => {
|
||||
baseMixin.methods.isFormValid = jest.fn().mockImplementation(() => {
|
||||
return false;
|
||||
});
|
||||
|
||||
|
|
@ -463,6 +466,7 @@ function setupMocks({ customMountOptions, customZipQuery, customZipDataResponse
|
|||
route.query.zipcode = customZipQuery;
|
||||
}
|
||||
baseMixin.methods.hideFmgLoadingModal = jest.fn();
|
||||
|
||||
const mountOptions = getMountOptions({
|
||||
...customMountOptions,
|
||||
route: route,
|
||||
|
|
|
|||
|
|
@ -134,11 +134,11 @@ export default {
|
|||
next(async (vm) => {
|
||||
vm.setCmsContent(resultMap.cmsContent);
|
||||
if (store.getters.isLeadGen) {
|
||||
const isValid = await vm.isFormValid();
|
||||
const isValid = await baseMixin.methods.isFormValid(vm.$refs.theForm);
|
||||
if (isValid) {
|
||||
vm.forwardButtonAction();
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
}
|
||||
|
|
@ -146,10 +146,16 @@ export default {
|
|||
},
|
||||
methods: {
|
||||
getZipFromStore() {
|
||||
return store.getters.order.serviceLocation.zipCode;
|
||||
return (
|
||||
store.getters.leadGenServiceZip.zipCode ??
|
||||
store.getters.order.serviceLocation.zipCode
|
||||
);
|
||||
},
|
||||
getEmailFromStore() {
|
||||
return store.getters.order.customer.emailAddress;
|
||||
return (
|
||||
store.getters.leadGenServiceZip.emailAddress ??
|
||||
store.getters.order.customer.emailAddress
|
||||
);
|
||||
},
|
||||
arePagePrerequisitesValid() {
|
||||
return store.getters.damage.isRepair || store.getters.damage.glassToReplace?.length > 0;
|
||||
|
|
@ -185,7 +191,7 @@ export default {
|
|||
if (!zipCodeData.isValid) {
|
||||
this.displayInvalidZipAlert = true;
|
||||
if (store.getters.isLeadGen) {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
return this.$refs.navbar.removeLoader();
|
||||
|
|
@ -195,7 +201,7 @@ export default {
|
|||
if (!zipCodeData.isServiceable) {
|
||||
this.displayNonServiceableZipAlert = true;
|
||||
if (store.getters.isLeadGen) {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
return this.$refs.navbar.removeLoader();
|
||||
|
|
@ -250,11 +256,6 @@ export default {
|
|||
await this.navigateForwardWithSingleCarMatch();
|
||||
}
|
||||
},
|
||||
async isFormValid() {
|
||||
const form = this.$refs.theForm;
|
||||
const formValidateResponse = await form.validate();
|
||||
return formValidateResponse?.valid;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
AlertNonServiceableZipHeader() {
|
||||
|
|
|
|||
|
|
@ -67,6 +67,11 @@ jest.mock("@/store", () => ({
|
|||
},
|
||||
},
|
||||
isLeadGen: false,
|
||||
leadGenDamage: {
|
||||
damageType: null,
|
||||
isRepair: null,
|
||||
numberOfChips: null,
|
||||
},
|
||||
},
|
||||
}));
|
||||
|
||||
|
|
@ -148,6 +153,11 @@ describe("vehicle-damage.vue", () => {
|
|||
getters: {
|
||||
vehicle: {},
|
||||
payment: { insuranceCoverage: { isVerified: false } },
|
||||
leadGenDamage: {
|
||||
damageType: null,
|
||||
isRepair: null,
|
||||
numberOfChips: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -183,6 +193,7 @@ describe("vehicle-damage.vue", () => {
|
|||
(c) => c(wrapper.vm)
|
||||
);
|
||||
|
||||
wrapper.vm.isFormValid = jest.fn();
|
||||
await wrapper.vm.forwardButtonAction();
|
||||
|
||||
//Assert
|
||||
|
|
@ -257,6 +268,11 @@ describe("vehicle-damage.vue", () => {
|
|||
getters: {
|
||||
vehicle: {},
|
||||
payment: { insuranceCoverage: { isVerified: false } },
|
||||
leadGenDamage: {
|
||||
damageType: null,
|
||||
isRepair: null,
|
||||
numberOfChips: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -278,7 +294,7 @@ describe("vehicle-damage.vue", () => {
|
|||
undefined,
|
||||
(c) => c(wrapper.vm)
|
||||
);
|
||||
|
||||
wrapper.vm.isFormValid = jest.fn();
|
||||
await wrapper.vm.forwardButtonAction();
|
||||
|
||||
//Assert
|
||||
|
|
@ -540,6 +556,11 @@ describe("vehicle-damage.vue", () => {
|
|||
eventBusItem: jest.fn(),
|
||||
damage: { glassToReplace: [{ glassLocation: damageLocation }] },
|
||||
isRepair: true,
|
||||
leadGenDamage: {
|
||||
damageType: null,
|
||||
isRepair: null,
|
||||
numberOfChips: null,
|
||||
},
|
||||
};
|
||||
|
||||
var glassSelections = wrapper.vm.getDamageLocationsFromStore();
|
||||
|
|
@ -617,6 +638,11 @@ describe("vehicle-damage.vue", () => {
|
|||
isRepair: isRepair,
|
||||
numberOfChips: 2,
|
||||
},
|
||||
leadGenDamage: {
|
||||
damageType: null,
|
||||
isRepair: null,
|
||||
numberOfChips: null,
|
||||
},
|
||||
};
|
||||
|
||||
var windshieldSelections = wrapper.vm.getWindshieldOptionsFromStore();
|
||||
|
|
@ -653,6 +679,11 @@ describe("vehicle-damage.vue", () => {
|
|||
glassToReplace: [{ glassLocation: damageLocation, glassName: damageName }],
|
||||
},
|
||||
isRepair: true,
|
||||
leadGenDamage: {
|
||||
damageType: null,
|
||||
isRepair: null,
|
||||
numberOfChips: null,
|
||||
},
|
||||
};
|
||||
|
||||
var glassSelections = wrapper.vm.getDriverSideReplaceOptionsFromStore();
|
||||
|
|
@ -689,6 +720,11 @@ describe("vehicle-damage.vue", () => {
|
|||
glassToReplace: [{ glassLocation: damageLocation, glassName: damageName }],
|
||||
},
|
||||
isRepair: true,
|
||||
leadGenDamage: {
|
||||
damageType: null,
|
||||
isRepair: null,
|
||||
numberOfChips: null,
|
||||
},
|
||||
};
|
||||
|
||||
var glassSelections = wrapper.vm.getPassengerSideReplaceOptionsFromStore();
|
||||
|
|
@ -723,6 +759,11 @@ describe("vehicle-damage.vue", () => {
|
|||
glassToReplace: [{ glassLocation: damageLocation, glassName: damageName }],
|
||||
},
|
||||
isRepair: true,
|
||||
leadGenDamage: {
|
||||
damageType: null,
|
||||
isRepair: null,
|
||||
numberOfChips: null,
|
||||
},
|
||||
};
|
||||
|
||||
var glassSelections = wrapper.vm.getRearReplaceOptionsFromStore();
|
||||
|
|
@ -744,6 +785,11 @@ describe("vehicle-damage.vue", () => {
|
|||
vehicle: {},
|
||||
payment: { insuranceCoverage: { isVerified: true } },
|
||||
requiresVerifiedRedirecting: true,
|
||||
leadGenDamage: {
|
||||
damageType: null,
|
||||
isRepair: null,
|
||||
numberOfChips: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -763,20 +809,24 @@ describe("vehicle-damage.vue", () => {
|
|||
});
|
||||
|
||||
describe("vehicle-damage.vue", () => {
|
||||
test("should call forwardButtonAction if isLeadGen is true and selectedDamageLocations is not empty", async () => {
|
||||
test("should call forwardButtonAction if isLeadGen is true and form is valid", async () => {
|
||||
// Set up the store with isLeadGen as true
|
||||
store.getters.isLeadGen = true;
|
||||
store.getters.leadGenDamage = {
|
||||
damageType: "windshieldReplace",
|
||||
isRepair: false,
|
||||
numberOfChips: null,
|
||||
};
|
||||
|
||||
// Set up the component
|
||||
const { wrapper } = setupMocks({});
|
||||
wrapper.vm.forwardButtonAction = jest.fn();
|
||||
|
||||
baseMixin.methods.isFormValid = jest.fn().mockReturnValue(true);
|
||||
const nextFunction = jest.fn((c) => {
|
||||
c(wrapper.vm);
|
||||
});
|
||||
|
||||
// Set selectedDamageLocations
|
||||
wrapper.setData({ selectedDamageLocations: ["windshield"] });
|
||||
|
||||
// Call the method that contains the if-else logic
|
||||
await vehicleDamage.beforeRouteEnter.call(
|
||||
wrapper.vm,
|
||||
|
|
@ -784,32 +834,10 @@ describe("vehicle-damage.vue", () => {
|
|||
undefined,
|
||||
nextFunction
|
||||
);
|
||||
await nextTick();
|
||||
expect(nextFunction).toHaveBeenCalled();
|
||||
expect(wrapper.vm.forwardButtonAction).toHaveBeenCalled();
|
||||
});
|
||||
test("should not call forwardButtonAction if isLeadGen is true and selectedDamageLocations is empty", async () => {
|
||||
// Set up the store with isLeadGen as true
|
||||
store.getters.isLeadGen = true;
|
||||
|
||||
// Set up the component
|
||||
const { wrapper } = setupMocks({});
|
||||
wrapper.vm.forwardButtonAction = jest.fn();
|
||||
const nextFunction = jest.fn((c) => {
|
||||
c(wrapper.vm);
|
||||
});
|
||||
|
||||
// Set selectedDamageLocations to empty
|
||||
wrapper.setData({ selectedDamageLocations: [] });
|
||||
|
||||
// Call the method that contains the if-else logic
|
||||
await vehicleDamage.beforeRouteEnter.call(
|
||||
wrapper.vm,
|
||||
{ query: { fmgPage: "vehicle-damage" } },
|
||||
undefined,
|
||||
nextFunction
|
||||
);
|
||||
expect(wrapper.vm.forwardButtonAction).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -834,7 +862,12 @@ function setupMocks({ pageHeaderWidgetHeaderText, mountOptionsMockData, funnelCo
|
|||
isVerified: false,
|
||||
},
|
||||
},
|
||||
isLeadGen: false,
|
||||
// isLeadGen: false,
|
||||
// leadGenDamage: {
|
||||
// damageType: null,
|
||||
// isRepair: null,
|
||||
// numberOfChips: null,
|
||||
// },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@ import { getFunnelCookie } from "@/helpers/heritage-integration/cookie-helper";
|
|||
|
||||
import store from "@/store";
|
||||
import baseMixin from "@/mixins/base-mixin";
|
||||
import { nextTick } from "vue";
|
||||
// DEFINE VALIDATION RULES
|
||||
defineRule("replace-options-required", required(errorMessages.REPLACE_OPTIONS_REQUIRED));
|
||||
|
||||
|
|
@ -136,7 +137,7 @@ export default {
|
|||
const resultMap = await settleAllPromises(promiseResultMap);
|
||||
|
||||
// Call the "next" function to complete the transition to this page.
|
||||
next((vm) => {
|
||||
next(async (vm) => {
|
||||
vm.setCmsContent(resultMap.cmsContent);
|
||||
vm.$refs.damageLocation.initializeComponent(resultMap.damageOptions);
|
||||
vm.$refs.sideDoorOptions.initializeComponent(
|
||||
|
|
@ -150,14 +151,16 @@ export default {
|
|||
resultMap.damageOptions.backGlassOptions.availableReplacementOptions
|
||||
);
|
||||
if (store.getters.isLeadGen) {
|
||||
if (vm.selectedDamageLocations?.length > 0) {
|
||||
await nextTick();
|
||||
const isValid = await baseMixin.methods.isFormValid(vm.$refs.theForm);
|
||||
if (isValid) {
|
||||
vm.forwardButtonAction();
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
});
|
||||
|
|
@ -184,7 +187,6 @@ export default {
|
|||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
attachCustomEvents() {
|
||||
if (this.$store.getters.vehicle.imageVifNumber) {
|
||||
this.pushEventToGA(
|
||||
|
|
@ -208,7 +210,9 @@ export default {
|
|||
store.getters.damage.glassToReplace?.some((glass) => {
|
||||
return glass.glassLocation === damageLocationsSelected.WINDSHIELD;
|
||||
}) ||
|
||||
store.getters.damage.isRepair
|
||||
store.getters.damage.isRepair ||
|
||||
store.getters.leadGenDamage.isRepair ||
|
||||
store.getters.leadGenDamage.damageType?.toUpperCase().includes("WINDSHIELD")
|
||||
) {
|
||||
glassSelections.push(damageLocationsSelected.WINDSHIELD);
|
||||
}
|
||||
|
|
@ -241,11 +245,13 @@ export default {
|
|||
selectedWindshieldReplaceOptions: [],
|
||||
};
|
||||
|
||||
if (store.getters.damage.isRepair === undefined) return windshieldOptions;
|
||||
if (store.getters.leadGenDamage.isRepair || store.getters.damage.isRepair === undefined)
|
||||
return windshieldOptions;
|
||||
|
||||
if (store.getters.damage.isRepair) {
|
||||
if (store.getters.leadGenDamage.isRepair || store.getters.damage.isRepair) {
|
||||
windShieldOptions.selectedWindshieldDamageType = damageLocationsSelected.REPAIR;
|
||||
windShieldOptions.selectedWindshieldChipCount = store.getters.damage.numberOfChips;
|
||||
windShieldOptions.selectedWindshieldChipCount =
|
||||
store.getters.leadGenDamage.numberOfChips || store.getters.damage.numberOfChips;
|
||||
} else {
|
||||
if (
|
||||
store.getters.damage.glassToReplace?.some((glass) => {
|
||||
|
|
@ -253,7 +259,8 @@ export default {
|
|||
glass.glassLocation === damageLocationsSelected.WINDSHIELD &&
|
||||
glass.glassName === damageLocationsSelected.SINGLE
|
||||
);
|
||||
})
|
||||
}) ||
|
||||
store.getters.leadGenDamage.damageType?.toUpperCase() === "WINDSHIELDREPLACE"
|
||||
) {
|
||||
windShieldOptions.selectedWindshieldDamageType =
|
||||
damageLocationsSelected.REPLACE;
|
||||
|
|
@ -350,6 +357,8 @@ export default {
|
|||
},
|
||||
|
||||
async forwardButtonAction() {
|
||||
const isValid = await this.isFormValid();
|
||||
console.log(isValid);
|
||||
await this.dispatchStoreAction(
|
||||
this.storeActions.SAVE_VEHICLE_DAMAGE,
|
||||
{
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@ jest.mock("@/store", () => ({
|
|||
experiments: [{ universeName: "ConceptFunnel" }],
|
||||
},
|
||||
isLeadGen: false,
|
||||
leadGenVehicle: {
|
||||
year: null,
|
||||
make: null,
|
||||
model: null,
|
||||
style: null,
|
||||
},
|
||||
vehicle: {
|
||||
carId: "C00000000",
|
||||
image: "test.jpg",
|
||||
|
|
@ -87,50 +93,21 @@ describe("vehicle.vue", () => {
|
|||
});
|
||||
|
||||
describe("vehicle.vue", () => {
|
||||
test("should call forwardButtonAction if isLeadGen is true and displayNoServiceAlert is false", async () => {
|
||||
// Set up the store with isLeadGen as true
|
||||
test("should call forwardButtonAction if isLeadGen is true and form is valid", async () => {
|
||||
store.getters.isLeadGen = true;
|
||||
|
||||
// Set up the component
|
||||
// Create a shallow mount of MyComponent
|
||||
const { wrapper } = setupMocks();
|
||||
wrapper.vm.forwardButtonAction = jest.fn();
|
||||
const nextFunction = jest.fn((c) => {
|
||||
c(wrapper.vm);
|
||||
});
|
||||
|
||||
// Set displayNoServiceAlert to false
|
||||
wrapper.setData({ displayNoServiceAlert: false });
|
||||
|
||||
// Mock the getVehicleDetails method
|
||||
wrapper.vm.getVehicleDetails = jest.fn();
|
||||
|
||||
// Call the method that contains the if-else logic
|
||||
await vehicle.beforeRouteEnter.call(
|
||||
wrapper.vm,
|
||||
{ query: { fmgPage: "vehicle" } },
|
||||
undefined,
|
||||
nextFunction
|
||||
);
|
||||
expect(nextFunction).toHaveBeenCalled();
|
||||
expect(wrapper.vm.forwardButtonAction).toHaveBeenCalled();
|
||||
});
|
||||
test("should not call forwardButtonAction if isLeadGen is true and displayNoServiceAlert is true", async () => {
|
||||
// Set up the store with isLeadGen as true
|
||||
store.getters.isLeadGen = true;
|
||||
|
||||
// Set up the component
|
||||
const { wrapper } = setupMocks();
|
||||
wrapper.vm.forwardButtonAction = jest.fn();
|
||||
|
||||
baseMixin.methods.isFormValid = jest.fn().mockReturnValue(true);
|
||||
const nextFunction = jest.fn((c) => {
|
||||
c(wrapper.vm);
|
||||
});
|
||||
|
||||
// Set displayNoServiceAlert to false
|
||||
wrapper.setData({ displayNoServiceAlert: true });
|
||||
|
||||
// Mock the getVehicleDetails method
|
||||
wrapper.vm.getVehicleDetails = jest.fn();
|
||||
|
||||
// Call the method that contains the if-else logic
|
||||
await vehicle.beforeRouteEnter.call(
|
||||
wrapper.vm,
|
||||
|
|
@ -138,7 +115,10 @@ describe("vehicle.vue", () => {
|
|||
undefined,
|
||||
nextFunction
|
||||
);
|
||||
expect(wrapper.vm.forwardButtonAction).not.toHaveBeenCalled();
|
||||
await nextTick();
|
||||
|
||||
expect(nextFunction).toHaveBeenCalled();
|
||||
expect(wrapper.vm.forwardButtonAction).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -143,14 +143,14 @@ export default {
|
|||
var styleQuestionInitialDataPromise = null;
|
||||
|
||||
if (
|
||||
store.getters.order.vehicle.make &&
|
||||
store.getters.order.vehicle.model &&
|
||||
store.getters.order.vehicle.style
|
||||
(store.getters.leadGenVehicle.make || store.getters.order.vehicle.make) &&
|
||||
(store.getters.leadGenVehicle.model || store.getters.order.vehicle.model) &&
|
||||
(store.getters.leadGenVehicle.style || store.getters.order.vehicle.style)
|
||||
) {
|
||||
makeQuestionInitialDataPromise = baseMixin.methods.dispatchStoreActionWithLogging(
|
||||
storeActions.GET_VEHICLE_MAKES,
|
||||
{
|
||||
year: store.getters.order.vehicle.year,
|
||||
year: store.getters.leadGenVehicle.year || store.getters.order.vehicle.year,
|
||||
},
|
||||
"vehicle"
|
||||
);
|
||||
|
|
@ -158,8 +158,8 @@ export default {
|
|||
modelQuestionInitialDataPromise = baseMixin.methods.dispatchStoreActionWithLogging(
|
||||
storeActions.GET_VEHICLE_MODELS,
|
||||
{
|
||||
year: store.getters.order.vehicle.year,
|
||||
make: store.getters.order.vehicle.make,
|
||||
year: store.getters.leadGenVehicle.year || store.getters.order.vehicle.year,
|
||||
make: store.getters.leadGenVehicle.make || store.getters.order.vehicle.make,
|
||||
},
|
||||
"vehicle"
|
||||
);
|
||||
|
|
@ -167,9 +167,9 @@ export default {
|
|||
styleQuestionInitialDataPromise = baseMixin.methods.dispatchStoreActionWithLogging(
|
||||
storeActions.GET_VEHICLE_STYLES,
|
||||
{
|
||||
year: store.getters.order.vehicle.year,
|
||||
make: store.getters.order.vehicle.make,
|
||||
model: store.getters.order.vehicle.model,
|
||||
year: store.getters.leadGenVehicle.year || store.getters.order.vehicle.year,
|
||||
make: store.getters.leadGenVehicle.make || store.getters.order.vehicle.make,
|
||||
model: store.getters.leadGenVehicle.model || store.getters.order.vehicle.model,
|
||||
},
|
||||
"vehicle"
|
||||
);
|
||||
|
|
@ -235,13 +235,19 @@ export default {
|
|||
if (store.getters.isLeadGen) {
|
||||
await vm.getVehicleDetails();
|
||||
if (!vm.displayNoServiceAlert) {
|
||||
vm.forwardButtonAction();
|
||||
const isValid = await baseMixin.methods.isFormValid(vm.$refs.theForm);
|
||||
if (isValid) {
|
||||
vm.forwardButtonAction();
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
} else {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_IS_LEAD_GEN);
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
});
|
||||
|
|
@ -429,16 +435,16 @@ export default {
|
|||
this.styleOptions = styleOptions;
|
||||
},
|
||||
selectedYearfromStore() {
|
||||
return store.getters.vehicle.year?.toString();
|
||||
return store.getters.leadGenVehicle.year ?? store.getters.vehicle.year?.toString();
|
||||
},
|
||||
selectedMakefromStore() {
|
||||
return store.getters.vehicle.make;
|
||||
return store.getters.leadGenVehicle.make ?? store.getters.vehicle.make;
|
||||
},
|
||||
selectedModelfromStore() {
|
||||
return store.getters.vehicle.model;
|
||||
return store.getters.leadGenVehicle.model ?? store.getters.vehicle.model;
|
||||
},
|
||||
selectedStylefromStore() {
|
||||
return store.getters.vehicle.style;
|
||||
return store.getters.leadGenVehicle.style ?? store.getters.vehicle.style;
|
||||
},
|
||||
async getMakeOptions(year) {
|
||||
return await baseMixin.methods.dispatchStoreActionWithLogging(
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ import { required, regex } from "@/helpers/validation-rules";
|
|||
import { Form, defineRule } from "vee-validate";
|
||||
import { getFunnelCookie } from "@/helpers/heritage-integration/cookie-helper";
|
||||
import { routerParams } from "@/router/router-constants/router-params";
|
||||
|
||||
import baseMixin from "@/mixins/base-mixin.js";
|
||||
import store from "@/store";
|
||||
import vinPagesMixin from "@/mixins/vin-pages-mixin";
|
||||
|
||||
|
|
@ -192,6 +192,10 @@ export default {
|
|||
// Call the "next" function to complete the transition to this page.
|
||||
next((vm) => {
|
||||
vm.setCmsContent(resultMap.cmsContent);
|
||||
if (store.getters.isLeadGen) {
|
||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_LEADGEN_STATE);
|
||||
baseMixin.methods.hideFmgLoadingModal();
|
||||
}
|
||||
});
|
||||
},
|
||||
data() {
|
||||
|
|
|
|||
|
|
@ -196,6 +196,26 @@ export default {
|
|||
hideFmgLoadingModal() {
|
||||
showFmgLoadingModal(false);
|
||||
},
|
||||
async isFormValid(form) {
|
||||
const formValidateResponse = await form?.validate();
|
||||
return formValidateResponse?.valid;
|
||||
},
|
||||
showApplePay() {
|
||||
if (window.ApplePaySession && window.ApplePaySession.canMakePayments()) {
|
||||
var iOSversion = this.getiOSversion();
|
||||
if (iOSversion && iOSversion[0] >= 17) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
getiOSversion() {
|
||||
if (/iP(hone|od|ad)/.test(navigator.platform)) {
|
||||
// supports iOS 2.0 and later:
|
||||
var v = navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
|
||||
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
|
||||
}
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
storeActions() {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import store from "@/store";
|
|||
import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin";
|
||||
import { saveSession } from "@/helpers/heritage-integration/order-helper.js";
|
||||
import { experimentSettings } from "@/constants/experiments";
|
||||
import { vinLookupMethodSelections } from "@/constants/vin-lookup-method-selections.js";
|
||||
|
||||
export default {
|
||||
computed: {
|
||||
|
|
@ -32,5 +33,14 @@ export default {
|
|||
|
||||
vehicleQuestionsMixin.methods.navigateForward(partsOrQuestions, this);
|
||||
},
|
||||
getVinlookupMethod(vinSelection) {
|
||||
const vinLookupMethods = {
|
||||
vin: vinLookupMethodSelections.MANUALVIN,
|
||||
licensePlate: vinLookupMethodSelections.LICENSEPLATE,
|
||||
address: vinLookupMethodSelections.HOMEADDRESS,
|
||||
decline: vinLookupMethodSelections.DECLINE,
|
||||
};
|
||||
return vinLookupMethods[vinSelection] || null;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import { experimentTriggers } from "../constants/experiments";
|
|||
import { applicationConfig } from "../constants/application-config";
|
||||
import { shouldStripPromoQueryString } from "@/helpers/promotions-helper";
|
||||
import bailout from "@/layouts/bailout/bailout";
|
||||
import { nextTick } from "vue";
|
||||
|
||||
const routes = [
|
||||
{
|
||||
|
|
@ -84,14 +85,25 @@ const routes = [
|
|||
);
|
||||
const parentAccount = getQuerystringParameter(queryStrings.PARENT_ACCOUNT);
|
||||
const correlationId = getQuerystringParameter(queryStrings.CORRELATION_ID);
|
||||
const vehicleYear = getQuerystringParameter(queryStrings.VEHICLE_YEAR);
|
||||
const vehicleMake = getQuerystringParameter(queryStrings.VEHICLE_MAKE);
|
||||
const vehicleModel = getQuerystringParameter(queryStrings.VEHICLE_MODEL);
|
||||
const vehicleStyle = getQuerystringParameter(queryStrings.VEHICLE_STYLE);
|
||||
const vehicleDamage = getQuerystringParameter(queryStrings.VEHICLE_DAMAGE);
|
||||
const serviceZip = getQuerystringParameter(queryStrings.SERVICE_ZIP);
|
||||
const email = getQuerystringParameter(queryStrings.EMAIL);
|
||||
const isInsurance = getQuerystringParameter(queryStrings.IS_INSURANCE);
|
||||
const leadGenYear = getQuerystringParameter(queryStrings.VEHICLE_YEAR);
|
||||
const leadGenMake = getQuerystringParameter(queryStrings.VEHICLE_MAKE);
|
||||
const leadGenModel = getQuerystringParameter(queryStrings.VEHICLE_MODEL);
|
||||
const leadGenStyle = getQuerystringParameter(queryStrings.VEHICLE_STYLE);
|
||||
const leadGenDamage = getQuerystringParameter(queryStrings.VEHICLE_DAMAGE);
|
||||
const leadGenZipCode = getQuerystringParameter(queryStrings.SERVICE_ZIP);
|
||||
const leadGenEmail = getQuerystringParameter(queryStrings.EMAIL);
|
||||
const leadGenIsInsurance = getQuerystringParameter(
|
||||
queryStrings.IS_INSURANCE
|
||||
);
|
||||
const leadGenVinSelection = getQuerystringParameter(
|
||||
queryStrings.VIN_SELECTION
|
||||
);
|
||||
const leadGenPackageSelection = getQuerystringParameter(
|
||||
queryStrings.PACKAGE_SELECTION
|
||||
);
|
||||
const leadGenNumberOfChips = getQuerystringParameter(
|
||||
queryStrings.NUMBER_OF_CHIPS
|
||||
);
|
||||
if (referralNumber) {
|
||||
store.commit(storeMutations.UPDATE_REFERRAL_NUMBER, referralNumber);
|
||||
store.commit(storeMutations.UPDATE_PARENT_ACCT_NUMBER, parentAccount);
|
||||
|
|
@ -102,47 +114,60 @@ const routes = [
|
|||
updateOrCreateFunnelCookie();
|
||||
}
|
||||
if (
|
||||
vehicleYear &&
|
||||
vehicleMake &&
|
||||
vehicleModel &&
|
||||
vehicleStyle &&
|
||||
vehicleDamage &&
|
||||
serviceZip &&
|
||||
email &&
|
||||
isInsurance
|
||||
leadGenYear &&
|
||||
leadGenMake &&
|
||||
leadGenModel &&
|
||||
leadGenStyle &&
|
||||
leadGenDamage &&
|
||||
leadGenZipCode &&
|
||||
leadGenEmail &&
|
||||
leadGenIsInsurance &&
|
||||
leadGenVinSelection &&
|
||||
leadGenPackageSelection &&
|
||||
leadGenNumberOfChips
|
||||
) {
|
||||
if (!store.getters.applicationUser.triggeredSiteEntry) {
|
||||
store.commit(storeMutations.UPDATE_YEAR, vehicleYear);
|
||||
store.commit(storeMutations.UPDATE_MAKE, vehicleMake);
|
||||
store.commit(storeMutations.UPDATE_MODEL, vehicleModel);
|
||||
store.commit(storeMutations.UPDATE_STYLE, vehicleStyle);
|
||||
store.commit(storeMutations.UPDATE_IS_LEAD_GEN, true);
|
||||
if (vehicleDamage == "windshieldReplace") {
|
||||
store.commit(storeMutations.UPDATE_IS_REPAIR, false);
|
||||
store.commit(storeMutations.UPDATE_NUMBER_OF_CHIPS, null);
|
||||
const glassToReplace = [
|
||||
{ glassLocation: "Windshield", glassName: "Single" },
|
||||
];
|
||||
store.commit(storeMutations.UPDATE_LEAD_GEN_YEAR, leadGenYear);
|
||||
store.commit(storeMutations.UPDATE_LEAD_GEN_MAKE, leadGenMake);
|
||||
store.commit(storeMutations.UPDATE_LEAD_GEN_MODEL, leadGenModel);
|
||||
store.commit(storeMutations.UPDATE_LEAD_GEN_STYLE, leadGenStyle);
|
||||
store.commit(
|
||||
storeMutations.UPDATE_LEAD_GEN_DAMAGE_TYPE,
|
||||
leadGenDamage
|
||||
);
|
||||
if (leadGenDamage?.toUpperCase() == "WINDSHIELDREPLACE") {
|
||||
store.commit(storeMutations.UPDATE_LEAD_GEN_IS_REPAIR, false);
|
||||
store.commit(
|
||||
storeMutations.UPDATE_GLASS_TO_REPLACE,
|
||||
glassToReplace
|
||||
storeMutations.UPDATE_LEAD_GEN_NUMBER_OF_CHIPS,
|
||||
null
|
||||
);
|
||||
} else if (leadGenDamage?.toUpperCase() == "WINDSHIELDREPAIR") {
|
||||
store.commit(storeMutations.UPDATE_LEAD_GEN_IS_REPAIR, true);
|
||||
store.commit(
|
||||
storeMutations.UPDATE_LEAD_GEN_NUMBER_OF_CHIPS,
|
||||
leadGenNumberOfChips
|
||||
);
|
||||
} else if (vehicleDamage == "windshieldRepair") {
|
||||
store.commit(storeMutations.UPDATE_IS_REPAIR, true);
|
||||
store.commit(storeMutations.UPDATE_NUMBER_OF_CHIPS, 1);
|
||||
}
|
||||
const serviceZipInfo = {
|
||||
state: null,
|
||||
zipCode: serviceZip,
|
||||
zipCodeCtu: null,
|
||||
};
|
||||
store.commit(storeMutations.UPDATE_SERVICE_ZIP, serviceZipInfo);
|
||||
store.commit(storeMutations.UPDATE_CUSTOMER_EMAIL_ADDRESS, email);
|
||||
if (isInsurance == "true") {
|
||||
store.commit(storeMutations.UPDATE_IS_INSURANCE, true);
|
||||
} else {
|
||||
store.commit(storeMutations.UPDATE_IS_INSURANCE, null);
|
||||
store.commit(
|
||||
storeMutations.UPDATE_LEAD_GEN_ZIP_CODE,
|
||||
leadGenZipCode
|
||||
);
|
||||
store.commit(
|
||||
storeMutations.UPDATE_LEAD_GEN_EMAIL_ADDRESS,
|
||||
leadGenEmail
|
||||
);
|
||||
if (leadGenIsInsurance == "true") {
|
||||
store.commit(storeMutations.UPDATE_LEAD_GEN_IS_INSURANCE, true);
|
||||
store.commit(
|
||||
storeMutations.UPDATE_LEAD_GEN_PACKAGE_SELECTION,
|
||||
leadGenPackageSelection
|
||||
);
|
||||
}
|
||||
store.commit(
|
||||
storeMutations.UPDATE_LEAD_GEN_VIN_SELECTION,
|
||||
leadGenVinSelection
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -160,7 +160,6 @@ const getDefaultState = () => {
|
|||
customerPortalLoginToken: null,
|
||||
lockToken: null,
|
||||
settledTenderAmount: 0,
|
||||
isLeadGen: false,
|
||||
},
|
||||
applicationUser: {
|
||||
eventBus: [],
|
||||
|
|
@ -177,7 +176,7 @@ const getDefaultState = () => {
|
|||
};
|
||||
|
||||
export const state = getDefaultState();
|
||||
|
||||
export const leadGenState = getLeadGenDefaultState();
|
||||
// Export Mutations
|
||||
export const mutations = {
|
||||
// VEHICLE MUTATIONS
|
||||
|
|
@ -295,9 +294,6 @@ export const mutations = {
|
|||
updateSettledTenderAmount(state, settledTenderAmount) {
|
||||
state.order.settledTenderAmount = settledTenderAmount;
|
||||
},
|
||||
updateIsLeadGen(state, isLeadGen) {
|
||||
state.order.isLeadGen = isLeadGen;
|
||||
},
|
||||
updateCCToken(state, ccToken) {
|
||||
state.order.payment.ccToken.subscriptionId = ccToken.subscriptionId;
|
||||
state.order.payment.ccToken.expMonth = ccToken.expMonth;
|
||||
|
|
@ -418,6 +414,91 @@ export const mutations = {
|
|||
state.applicationUser.eventBus.splice(itemIndex, 1);
|
||||
}
|
||||
},
|
||||
//LEADGEN MUTATIONS
|
||||
updateIsLeadGen(state, isLeadGen) {
|
||||
leadGenState.isLeadGen = isLeadGen;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenYear(state, year) {
|
||||
leadGenState.vehicle.year = year;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenMake(state, make) {
|
||||
leadGenState.vehicle.make = make;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenModel(state, model) {
|
||||
leadGenState.vehicle.model = model;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenStyle(state, style) {
|
||||
leadGenState.vehicle.style = style;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenIsRepair(state, isRepair) {
|
||||
leadGenState.vehicleDamage.isRepair = isRepair;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenNumberOfChips(state, numberOfChips) {
|
||||
leadGenState.vehicleDamage.numberOfChips = numberOfChips;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenDamageType(state, damageType) {
|
||||
leadGenState.vehicleDamage.damageType = damageType;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenZipCode(state, zipCode) {
|
||||
leadGenState.serviceZip.zipCode = zipCode;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenEmailAddress(state, emailAddress) {
|
||||
leadGenState.serviceZip.emailAddress = emailAddress;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenIsInsurance(state, isInsurance) {
|
||||
leadGenState.quote.isInsurance = isInsurance;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenVinSelection(state, vinSelection) {
|
||||
leadGenState.estimate.vinSelection = vinSelection;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
updateLeadGenPackageSelection(state, packageSelection) {
|
||||
leadGenState.quote.packageSelection = packageSelection;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
//RESET LEADGEN MUTATIONS
|
||||
resetLeadGenVehicleState(state) {
|
||||
leadGenState.vehicle.year =
|
||||
leadGenState.vehicle.make =
|
||||
leadGenState.vehicle.model =
|
||||
leadGenState.vehicle.style =
|
||||
null;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
resetLeadGenDamageState(state) {
|
||||
leadGenState.vehicleDamage.isRepair =
|
||||
leadGenState.vehicleDamage.numberOfChips =
|
||||
leadGenState.vehicleDamage.damageType =
|
||||
null;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
resetLeadGenEstimateState(state) {
|
||||
leadGenState.estimate.vinSelection = null;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
resetLeadGenServiceZipState(state) {
|
||||
leadGenState.serviceZip.zipCode = leadGenState.serviceZip.emailAddress = null;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
resetLeadGenQuoteState(state) {
|
||||
leadGenState.quote.isInsurance = null;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
resetIsLeadGen(state) {
|
||||
leadGenState.isLeadGen = null;
|
||||
setLeadGenState(leadGenState);
|
||||
},
|
||||
|
||||
// RESET DEPENDENCY MUTATIONS
|
||||
resetVehicleState(state) {
|
||||
|
|
@ -678,7 +759,6 @@ export const getters = {
|
|||
isOvernightDropOffAppointment: (state) => {
|
||||
return state.order.schedule.routeCode?.includes(RouteCodeFlags.OVERNIGHT_DROP_OFF);
|
||||
},
|
||||
isLeadGen: (state) => state.order.isLeadGen,
|
||||
isRecalibrationOnOrder: (state) => {
|
||||
return getHasRecalibrationPart(state);
|
||||
},
|
||||
|
|
@ -809,6 +889,12 @@ export const getters = {
|
|||
requiresVerifiedRedirecting: (state) => {
|
||||
return state.order?.referralNumber?.length === 6;
|
||||
},
|
||||
isLeadGen: (state) => leadGenState?.isLeadGen,
|
||||
leadGenVehicle: (state) => leadGenState?.vehicle,
|
||||
leadGenDamage: (state) => leadGenState?.vehicleDamage,
|
||||
leadGenQuote: (state) => leadGenState?.quote,
|
||||
leadGenServiceZip: (state) => leadGenState?.serviceZip,
|
||||
leadGenEstimate: (state) => leadGenState?.estimate,
|
||||
};
|
||||
|
||||
function getNonFalseValuesOfPropertyInArrayOfObjects(array, propertyName) {
|
||||
|
|
@ -1934,13 +2020,11 @@ export const actions = {
|
|||
context.state.order.vehicle.year != year ||
|
||||
context.state.order.vehicle.make != make ||
|
||||
context.state.order.vehicle.model != model ||
|
||||
context.state.order.vehicle.style != style ||
|
||||
context.state.order.isLeadGen
|
||||
context.state.order.vehicle.style != style
|
||||
) {
|
||||
if (!context.state.order.isLeadGen) {
|
||||
context.dispatch(storeActions.RESET_DAMAGE_STATE_AND_DEPENDENCIES);
|
||||
context.dispatch(storeActions.RESET_REGISTRATION_STATE_AND_DEPENDENCIES);
|
||||
}
|
||||
context.dispatch(storeActions.RESET_DAMAGE_STATE_AND_DEPENDENCIES);
|
||||
context.dispatch(storeActions.RESET_REGISTRATION_STATE_AND_DEPENDENCIES);
|
||||
|
||||
context.commit(storeMutations.UPDATE_VEHICLE_VIN, null);
|
||||
context.commit(storeMutations.UPDATE_YEAR, year);
|
||||
context.commit(storeMutations.UPDATE_MAKE, make);
|
||||
|
|
@ -2705,14 +2789,27 @@ export const actions = {
|
|||
|
||||
//restore user's experiments
|
||||
context.commit(storeMutations.UPDATE_EXPERIMENTS, experiments);
|
||||
|
||||
//clear leadGen session storage
|
||||
window.sessionStorage.removeItem("leadGenState");
|
||||
},
|
||||
|
||||
resetSubmittedOrder(context) {
|
||||
// clear from local storage
|
||||
window.sessionStorage.removeItem("submittedOrder");
|
||||
},
|
||||
resetIsLeadGen(context) {
|
||||
context.commit(storeMutations.UPDATE_IS_LEAD_GEN, false);
|
||||
resetLeadGenState(context) {
|
||||
if (context.getters.isLeadGen) {
|
||||
context.commit(storeMutations.RESET_LEADGEN_VEHICLE_STATE);
|
||||
context.commit(storeMutations.RESETL_EADGEN_DAMAGE_STATE);
|
||||
context.commit(storeMutations.RESET_LEADGEN_ESTIMATE_STATE);
|
||||
context.commit(storeMutations.RESET_LEADGEN_SERVICEZIP_STATE);
|
||||
context.commit(storeMutations.RESET_LEADGEN_QUOTE_STATE);
|
||||
context.commit(storeMutations.RESET_IS_LEADGEN);
|
||||
}
|
||||
},
|
||||
createLeadGenState(context) {
|
||||
createLeadGenDefaultState();
|
||||
},
|
||||
};
|
||||
|
||||
|
|
@ -3201,3 +3298,43 @@ async function resetScheduleIfUnavailable(context, order, pageNameToLog) {
|
|||
}
|
||||
}
|
||||
}
|
||||
function createLeadGenDefaultState() {
|
||||
// create default leadGen state
|
||||
const leadGenDefaultState = {
|
||||
isLeadGen: null,
|
||||
vehicle: {
|
||||
year: null,
|
||||
make: null,
|
||||
model: null,
|
||||
style: null,
|
||||
},
|
||||
vehicleDamage: {
|
||||
damageType: null,
|
||||
isRepair: null,
|
||||
numberOfChips: null,
|
||||
},
|
||||
estimate: {
|
||||
vinSelection: null,
|
||||
},
|
||||
serviceZip: {
|
||||
emailAddress: null,
|
||||
zipCode: null,
|
||||
},
|
||||
quote: {
|
||||
isInsurance: null,
|
||||
packageSelection: null,
|
||||
},
|
||||
};
|
||||
// set to session storage
|
||||
setLeadGenState(leadGenDefaultState);
|
||||
}
|
||||
function getLeadGenDefaultState() {
|
||||
const leadGenState = window.sessionStorage.getItem("leadGenState");
|
||||
if (leadGenState === null) {
|
||||
createLeadGenDefaultState();
|
||||
}
|
||||
return JSON.parse(window.sessionStorage.getItem("leadGenState"));
|
||||
}
|
||||
async function setLeadGenState(leadGenState) {
|
||||
window.sessionStorage.setItem("leadGenState", JSON.stringify(leadGenState));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue