Merge branch 'develop' into feature/kroell/service-packages-defects
This commit is contained in:
commit
e9f3db1352
20 changed files with 510 additions and 171 deletions
255
package-lock.json
generated
255
package-lock.json
generated
|
|
@ -3298,9 +3298,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz",
|
||||||
"integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==",
|
"integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
|
|
@ -3312,9 +3312,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-android-arm64": {
|
"node_modules/@rollup/rollup-android-arm64": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz",
|
||||||
"integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==",
|
"integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -3326,9 +3326,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz",
|
||||||
"integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==",
|
"integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -3340,9 +3340,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-darwin-x64": {
|
"node_modules/@rollup/rollup-darwin-x64": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz",
|
||||||
"integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==",
|
"integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -3354,9 +3354,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-freebsd-arm64": {
|
"node_modules/@rollup/rollup-freebsd-arm64": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz",
|
||||||
"integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==",
|
"integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -3368,9 +3368,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-freebsd-x64": {
|
"node_modules/@rollup/rollup-freebsd-x64": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz",
|
||||||
"integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==",
|
"integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -3382,9 +3382,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz",
|
||||||
"integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==",
|
"integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
|
|
@ -3396,9 +3396,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz",
|
||||||
"integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==",
|
"integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
|
|
@ -3410,9 +3410,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz",
|
||||||
"integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==",
|
"integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -3424,9 +3424,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz",
|
||||||
"integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==",
|
"integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -3438,9 +3438,23 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-loong64-gnu": {
|
"node_modules/@rollup/rollup-linux-loong64-gnu": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz",
|
||||||
"integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==",
|
"integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==",
|
||||||
|
"cpu": [
|
||||||
|
"loong64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-loong64-musl": {
|
||||||
|
"version": "4.59.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz",
|
||||||
|
"integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
|
|
@ -3452,9 +3466,23 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
|
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz",
|
||||||
"integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==",
|
"integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==",
|
||||||
|
"cpu": [
|
||||||
|
"ppc64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-ppc64-musl": {
|
||||||
|
"version": "4.59.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz",
|
||||||
|
"integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
|
|
@ -3466,9 +3494,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz",
|
||||||
"integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==",
|
"integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
|
|
@ -3480,9 +3508,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-riscv64-musl": {
|
"node_modules/@rollup/rollup-linux-riscv64-musl": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz",
|
||||||
"integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==",
|
"integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
|
|
@ -3494,9 +3522,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz",
|
||||||
"integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==",
|
"integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
|
|
@ -3508,9 +3536,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
|
||||||
"integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==",
|
"integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -3522,9 +3550,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz",
|
||||||
"integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==",
|
"integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -3535,10 +3563,24 @@
|
||||||
"linux"
|
"linux"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"node_modules/@rollup/rollup-openbsd-x64": {
|
||||||
|
"version": "4.59.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz",
|
||||||
|
"integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"openbsd"
|
||||||
|
]
|
||||||
|
},
|
||||||
"node_modules/@rollup/rollup-openharmony-arm64": {
|
"node_modules/@rollup/rollup-openharmony-arm64": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz",
|
||||||
"integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==",
|
"integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -3550,9 +3592,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz",
|
||||||
"integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==",
|
"integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -3564,9 +3606,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz",
|
||||||
"integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==",
|
"integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
|
|
@ -3578,7 +3620,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-x64-gnu": {
|
"node_modules/@rollup/rollup-win32-x64-gnu": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz",
|
||||||
|
"integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -3590,7 +3634,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz",
|
||||||
|
"integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -4643,13 +4689,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
|
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
|
||||||
"version": "9.0.5",
|
"version": "9.0.9",
|
||||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
|
||||||
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
|
"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"brace-expansion": "^2.0.1"
|
"brace-expansion": "^2.0.2"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16 || 14 >=14.17"
|
"node": ">=16 || 14 >=14.17"
|
||||||
|
|
@ -4819,11 +4865,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/coverage-v8/node_modules/minimatch": {
|
"node_modules/@vitest/coverage-v8/node_modules/minimatch": {
|
||||||
"version": "9.0.5",
|
"version": "9.0.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
|
||||||
|
"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"brace-expansion": "^2.0.1"
|
"brace-expansion": "^2.0.2"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16 || 14 >=14.17"
|
"node": ">=16 || 14 >=14.17"
|
||||||
|
|
@ -8872,13 +8920,15 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/editorconfig": {
|
"node_modules/editorconfig": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.7.tgz",
|
||||||
|
"integrity": "sha512-e0GOtq/aTQhVdNyDU9e02+wz9oDDM+SIOQxWME2QRjzRX5yyLAuHDE+0aE8vHb9XRC8XD37eO2u57+F09JqFhw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@one-ini/wasm": "0.1.1",
|
"@one-ini/wasm": "0.1.1",
|
||||||
"commander": "^10.0.0",
|
"commander": "^10.0.0",
|
||||||
"minimatch": "9.0.1",
|
"minimatch": "^9.0.1",
|
||||||
"semver": "^7.5.3"
|
"semver": "^7.5.3"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
|
|
@ -8905,11 +8955,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/editorconfig/node_modules/minimatch": {
|
"node_modules/editorconfig/node_modules/minimatch": {
|
||||||
"version": "9.0.1",
|
"version": "9.0.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
|
||||||
|
"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"brace-expansion": "^2.0.1"
|
"brace-expansion": "^2.0.2"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16 || 14 >=14.17"
|
"node": ">=16 || 14 >=14.17"
|
||||||
|
|
@ -14615,7 +14667,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/js-beautify/node_modules/minimatch": {
|
"node_modules/js-beautify/node_modules/minimatch": {
|
||||||
"version": "5.1.6",
|
"version": "5.1.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz",
|
||||||
|
"integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -15627,7 +15681,9 @@
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/minimatch": {
|
"node_modules/minimatch": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
|
||||||
|
"integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -18027,7 +18083,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rollup": {
|
"node_modules/rollup": {
|
||||||
"version": "4.52.3",
|
"version": "4.59.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz",
|
||||||
|
"integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -18041,28 +18099,31 @@
|
||||||
"npm": ">=8.0.0"
|
"npm": ">=8.0.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@rollup/rollup-android-arm-eabi": "4.52.3",
|
"@rollup/rollup-android-arm-eabi": "4.59.0",
|
||||||
"@rollup/rollup-android-arm64": "4.52.3",
|
"@rollup/rollup-android-arm64": "4.59.0",
|
||||||
"@rollup/rollup-darwin-arm64": "4.52.3",
|
"@rollup/rollup-darwin-arm64": "4.59.0",
|
||||||
"@rollup/rollup-darwin-x64": "4.52.3",
|
"@rollup/rollup-darwin-x64": "4.59.0",
|
||||||
"@rollup/rollup-freebsd-arm64": "4.52.3",
|
"@rollup/rollup-freebsd-arm64": "4.59.0",
|
||||||
"@rollup/rollup-freebsd-x64": "4.52.3",
|
"@rollup/rollup-freebsd-x64": "4.59.0",
|
||||||
"@rollup/rollup-linux-arm-gnueabihf": "4.52.3",
|
"@rollup/rollup-linux-arm-gnueabihf": "4.59.0",
|
||||||
"@rollup/rollup-linux-arm-musleabihf": "4.52.3",
|
"@rollup/rollup-linux-arm-musleabihf": "4.59.0",
|
||||||
"@rollup/rollup-linux-arm64-gnu": "4.52.3",
|
"@rollup/rollup-linux-arm64-gnu": "4.59.0",
|
||||||
"@rollup/rollup-linux-arm64-musl": "4.52.3",
|
"@rollup/rollup-linux-arm64-musl": "4.59.0",
|
||||||
"@rollup/rollup-linux-loong64-gnu": "4.52.3",
|
"@rollup/rollup-linux-loong64-gnu": "4.59.0",
|
||||||
"@rollup/rollup-linux-ppc64-gnu": "4.52.3",
|
"@rollup/rollup-linux-loong64-musl": "4.59.0",
|
||||||
"@rollup/rollup-linux-riscv64-gnu": "4.52.3",
|
"@rollup/rollup-linux-ppc64-gnu": "4.59.0",
|
||||||
"@rollup/rollup-linux-riscv64-musl": "4.52.3",
|
"@rollup/rollup-linux-ppc64-musl": "4.59.0",
|
||||||
"@rollup/rollup-linux-s390x-gnu": "4.52.3",
|
"@rollup/rollup-linux-riscv64-gnu": "4.59.0",
|
||||||
"@rollup/rollup-linux-x64-gnu": "4.52.3",
|
"@rollup/rollup-linux-riscv64-musl": "4.59.0",
|
||||||
"@rollup/rollup-linux-x64-musl": "4.52.3",
|
"@rollup/rollup-linux-s390x-gnu": "4.59.0",
|
||||||
"@rollup/rollup-openharmony-arm64": "4.52.3",
|
"@rollup/rollup-linux-x64-gnu": "4.59.0",
|
||||||
"@rollup/rollup-win32-arm64-msvc": "4.52.3",
|
"@rollup/rollup-linux-x64-musl": "4.59.0",
|
||||||
"@rollup/rollup-win32-ia32-msvc": "4.52.3",
|
"@rollup/rollup-openbsd-x64": "4.59.0",
|
||||||
"@rollup/rollup-win32-x64-gnu": "4.52.3",
|
"@rollup/rollup-openharmony-arm64": "4.59.0",
|
||||||
"@rollup/rollup-win32-x64-msvc": "4.52.3",
|
"@rollup/rollup-win32-arm64-msvc": "4.59.0",
|
||||||
|
"@rollup/rollup-win32-ia32-msvc": "4.59.0",
|
||||||
|
"@rollup/rollup-win32-x64-gnu": "4.59.0",
|
||||||
|
"@rollup/rollup-win32-x64-msvc": "4.59.0",
|
||||||
"fsevents": "~2.3.2"
|
"fsevents": "~2.3.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ body span {
|
||||||
body a {
|
body a {
|
||||||
color: #0070D1;
|
color: #0070D1;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
body a:hover {
|
body a:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
|
|
@ -175,13 +176,18 @@ body .has-error select {
|
||||||
border-color: #db0020;
|
border-color: #db0020;
|
||||||
}
|
}
|
||||||
body .has-error select {
|
body .has-error select {
|
||||||
background: url(/icons/select-error.png) no-repeat 98% #ffffff;
|
background-image: url(/icons/select-error.png);
|
||||||
background-size: 10px 17px;
|
|
||||||
appearance: none;
|
|
||||||
}
|
}
|
||||||
body .has-error small {
|
body .has-error small {
|
||||||
margin-top: 4px;
|
margin-bottom: 0.3125rem;
|
||||||
color: #d4281c;
|
color: #db0020;
|
||||||
|
}
|
||||||
|
body .has-success input,
|
||||||
|
body .has-success select {
|
||||||
|
border-color: #0c7e47;
|
||||||
|
}
|
||||||
|
body .has-success select {
|
||||||
|
background-image: url(/icons/select-error.png);
|
||||||
}
|
}
|
||||||
body .cc-error-container #alert-message {
|
body .cc-error-container #alert-message {
|
||||||
background-color: #fcbfbb;
|
background-color: #fcbfbb;
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.buy-backdrop {
|
.buy-backdrop {
|
||||||
background-color: rgba(0, 0, 0, 0.3) !important;
|
background-color: rgba(0, 0, 0, 0.8) !important;
|
||||||
}
|
}
|
||||||
.buy-backdrop #afterpay__iframe-checkout-container {
|
.buy-backdrop #afterpay__iframe-checkout-container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
@ -97,10 +97,6 @@
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.buy-container-closer {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes rotate {
|
@keyframes rotate {
|
||||||
0% {
|
0% {
|
||||||
transform: rotate(0);
|
transform: rotate(0);
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ body {
|
||||||
a {
|
a {
|
||||||
color: #0070D1;
|
color: #0070D1;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
color: #167cac;
|
color: #167cac;
|
||||||
|
|
@ -200,13 +201,22 @@ body {
|
||||||
border-color: #db0020;
|
border-color: #db0020;
|
||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
background: url(/icons/select-error.png) no-repeat 98% #ffffff;;
|
background-image: url(/icons/select-error.png);
|
||||||
background-size: 10px 17px;
|
|
||||||
appearance: none;
|
|
||||||
}
|
}
|
||||||
small {
|
small {
|
||||||
margin-top: 4px;
|
margin-bottom: .3125rem;
|
||||||
color: #d4281c;
|
color: #db0020;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.has-success {
|
||||||
|
input,
|
||||||
|
select {
|
||||||
|
border-color: #0c7e47;
|
||||||
|
}
|
||||||
|
select {
|
||||||
|
background-image: url(/icons/select-success.png);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@
|
||||||
// AfterPay Styles
|
// AfterPay Styles
|
||||||
|
|
||||||
.buy-backdrop {
|
.buy-backdrop {
|
||||||
background-color: rgba(0,0,0,.3)!important;
|
background-color: rgba(0,0,0,.8)!important;
|
||||||
#afterpay__iframe-checkout-container {
|
#afterpay__iframe-checkout-container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
.style_closeWrapper__lIHJe {
|
.style_closeWrapper__lIHJe {
|
||||||
|
|
@ -102,10 +102,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.buy-container-closer {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Modal Spinner
|
// Modal Spinner
|
||||||
|
|
||||||
@keyframes rotate {
|
@keyframes rotate {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ const errorMessages = Object.freeze({
|
||||||
PASSENGER_SIDE_OPTIONS_REQUIRED: 'Please select window',
|
PASSENGER_SIDE_OPTIONS_REQUIRED: 'Please select window',
|
||||||
WINDSHIELD_DAMAGE_TYPE_REQUIRED: 'Please select windshield damage',
|
WINDSHIELD_DAMAGE_TYPE_REQUIRED: 'Please select windshield damage',
|
||||||
WINDSHIELD_CHIP_COUNT_REQUIRED: 'Please select chip(s)',
|
WINDSHIELD_CHIP_COUNT_REQUIRED: 'Please select chip(s)',
|
||||||
WINDSHIELD_REPLACE_OPTIONS_REQUIRED: 'Please select windshield part',
|
WINDSHIELD_REPLACE_OPTIONS_REQUIRED: 'Select all windshield parts that need to be replaced',
|
||||||
REPLACE_OPTIONS_REQUIRED: 'Please select rear window type',
|
REPLACE_OPTIONS_REQUIRED: 'Please select rear window type',
|
||||||
STREET_ADDRESS_REQUIRED: 'Street Address is required.',
|
STREET_ADDRESS_REQUIRED: 'Street Address is required.',
|
||||||
CITY_REQUIRED: 'City is required.',
|
CITY_REQUIRED: 'City is required.',
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,21 @@
|
||||||
export function supportsApplePay() {
|
export function supportsApplePay() {
|
||||||
return !!(window.ApplePaySession && window.ApplePaySession.canMakePayments());
|
var iOSversion = getiOSversion();
|
||||||
|
var isMacOS = navigator.platform.indexOf("Mac") !== -1;
|
||||||
|
if (isMacOS || (iOSversion && iOSversion[0] >= 17)) {
|
||||||
|
if (window.ApplePaySession && window.ApplePaySession.canMakePayments()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function getiOSversion() {
|
||||||
|
if (/iP(hone|od|ad)/.test(navigator.platform)) {
|
||||||
|
// supports iOS 2.0 and later:
|
||||||
|
var v = navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
|
||||||
|
if (!v) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
@ -20,6 +20,7 @@ Object {
|
||||||
"salesTax": "SalesTaxWidget",
|
"salesTax": "SalesTaxWidget",
|
||||||
"servicePackage": "ServicePackageTitle",
|
"servicePackage": "ServicePackageTitle",
|
||||||
"subtotal": "SubtotalWidget",
|
"subtotal": "SubtotalWidget",
|
||||||
|
"total": "TotalWidget",
|
||||||
"vapsItemDescriptions": "VapsItemDescriptions",
|
"vapsItemDescriptions": "VapsItemDescriptions",
|
||||||
"warrantyText": "WarrantyCartItemTextWidget",
|
"warrantyText": "WarrantyCartItemTextWidget",
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import { getHighestFullySatisfiedTier, getPackageContents } from '@/helpers/serv
|
||||||
import { getPriceOfLineItems } from '@/helpers/price-calculator.js';
|
import { getPriceOfLineItems } from '@/helpers/price-calculator.js';
|
||||||
import coverageStatuses from '@/constants/coverage-statuses';
|
import coverageStatuses from '@/constants/coverage-statuses';
|
||||||
import coverageType from '@/constants/coverage-type';
|
import coverageType from '@/constants/coverage-type';
|
||||||
|
import * as cartHelper from '@/helpers/cart-helper';
|
||||||
|
|
||||||
const VERIFYING_COVERAGE = 'Verifying coverage';
|
const VERIFYING_COVERAGE = 'Verifying coverage';
|
||||||
|
|
||||||
|
|
@ -341,21 +342,76 @@ describe('cart-dropdown component', () => {
|
||||||
});
|
});
|
||||||
describe('computed', () => {
|
describe('computed', () => {
|
||||||
describe('amountDue', () => {
|
describe('amountDue', () => {
|
||||||
test('returns 0 when showAsPaid is true', () => {
|
test('returns total when showAsPaid is false', () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
|
const expectedAmount = 123.45;
|
||||||
const propsData = {
|
const propsData = {
|
||||||
showAsPaid: true
|
showAsPaid: false
|
||||||
};
|
};
|
||||||
const { wrapper } = getMountedComponent({}, {}, propsData);
|
const { wrapper } = getMountedComponent({}, {}, propsData);
|
||||||
|
const totalSpy = jest.spyOn(cartHelper, 'getCartTotal').mockReturnValue(expectedAmount);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
const result = wrapper.vm.amountDue;
|
const result = wrapper.vm.amountDue;
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(result).toBe(expectedAmount);
|
||||||
|
});
|
||||||
|
test('returns total minus amount paid when showAsPaid is true', () => {
|
||||||
|
// Arrange
|
||||||
|
const total = 123.45;
|
||||||
|
const amountPaid = 23.45;
|
||||||
|
const expectedAmount = total - amountPaid;
|
||||||
|
const propsData = {
|
||||||
|
showAsPaid: true
|
||||||
|
};
|
||||||
|
const storeData = {
|
||||||
|
order: {
|
||||||
|
settledTenderAmount: amountPaid
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const { wrapper } = getMountedComponent(storeData, {}, propsData);
|
||||||
|
const totalSpy = jest.spyOn(cartHelper, 'getCartTotal').mockReturnValue(total);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const result = wrapper.vm.amountDue;
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(result).toBe(expectedAmount);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('amountPaid', () => {
|
||||||
|
test('returns 0 when showAsPaid is false', () => {
|
||||||
|
// Arrange
|
||||||
|
const propsData = {
|
||||||
|
showAsPaid: false
|
||||||
|
};
|
||||||
|
const { wrapper } = getMountedComponent({}, {}, propsData);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const result = wrapper.vm.amountPaid;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(result).toBe(0);
|
expect(result).toBe(0);
|
||||||
});
|
});
|
||||||
test('returns sum of subTotal and salesTax when showAsPaid is false', () => {
|
test('returns settled tender amount when showAsPaid is true', () => {
|
||||||
// TODO when subTotal and salesTax are finished
|
// Arrange
|
||||||
|
const expectedAmount = 123.45;
|
||||||
|
const propsData = {
|
||||||
|
showAsPaid: true
|
||||||
|
};
|
||||||
|
const storeData = {
|
||||||
|
order: {
|
||||||
|
settledTenderAmount: expectedAmount
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const { wrapper } = getMountedComponent(storeData, {}, propsData);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const result = wrapper.vm.amountPaid;
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(result).toBe(expectedAmount);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('availableLineItems', () => {
|
describe('availableLineItems', () => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
v-if="!isDeductibleOnly"
|
v-if="!isDeductibleOnly || showAsPaid"
|
||||||
class="cart-table">
|
class="cart-table">
|
||||||
<div class="cart-item-list">
|
<div class="cart-item-list">
|
||||||
<div
|
<div
|
||||||
|
|
@ -53,7 +53,7 @@
|
||||||
id="cart-footer"
|
id="cart-footer"
|
||||||
class="cart-footer">
|
class="cart-footer">
|
||||||
<div
|
<div
|
||||||
v-if="!isUnverified"
|
v-if="!isUnverified && !isDeductibleOnly"
|
||||||
id="cart-subtotal-and-tax"
|
id="cart-subtotal-and-tax"
|
||||||
class="subtotal-and-tax">
|
class="subtotal-and-tax">
|
||||||
<div
|
<div
|
||||||
|
|
@ -68,12 +68,23 @@
|
||||||
<span id="sales-tax-label">{{ salesTaxLabel }}</span>
|
<span id="sales-tax-label">{{ salesTaxLabel }}</span>
|
||||||
<span id="sales-tax-value">{{ formatAmountInDollars(salesTax) }}</span>
|
<span id="sales-tax-value">{{ formatAmountInDollars(salesTax) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
</div>
|
||||||
v-if="showAsPaid"
|
<div
|
||||||
id="cart-amount-paid"
|
v-if="showAsPaid"
|
||||||
class="py-2 col d-flex justify-content-between">
|
id="cart-total"
|
||||||
|
class="cart-item">
|
||||||
|
<div class="price-row">
|
||||||
|
<span id="total-label">{{ totalLabel }}</span>
|
||||||
|
<span id="total-value">{{ getDisplayed(total) }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="showAsPaid"
|
||||||
|
id="cart-amount-paid"
|
||||||
|
class="cart-item">
|
||||||
|
<div class="price-row">
|
||||||
<span id="amount-paid-label">{{ amountPaidLabel }}</span>
|
<span id="amount-paid-label">{{ amountPaidLabel }}</span>
|
||||||
<span if="amount-paid-value">{{ getDisplayed(amountPaid) }}</span>
|
<span id="amount-paid-value">{{ getDisplayed(amountPaid) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
|
@ -111,7 +122,7 @@ import {
|
||||||
getServiceLineItems, getSubtotal, isOrderITAC, isOrderNoComp,
|
getServiceLineItems, getSubtotal, isOrderITAC, isOrderNoComp,
|
||||||
isOrderUnverified
|
isOrderUnverified
|
||||||
} from '@/helpers/cart-helper';
|
} from '@/helpers/cart-helper';
|
||||||
import { getPriceOfLineItems, getTaxOfLineItems } from '@/helpers/price-calculator';
|
import { getPriceOfLineItem, getPriceOfLineItems, getTaxOfLineItems } from '@/helpers/price-calculator';
|
||||||
import { processIfStatements } from '@/helpers/cms-content-helper';
|
import { processIfStatements } from '@/helpers/cms-content-helper';
|
||||||
|
|
||||||
const VERIFYING_COVERAGE = 'Verifying coverage';
|
const VERIFYING_COVERAGE = 'Verifying coverage';
|
||||||
|
|
@ -141,7 +152,8 @@ export default {
|
||||||
servicePackage: 'ServicePackageTitle',
|
servicePackage: 'ServicePackageTitle',
|
||||||
vapsItemDescriptions: 'VapsItemDescriptions',
|
vapsItemDescriptions: 'VapsItemDescriptions',
|
||||||
warrantyText: 'WarrantyCartItemTextWidget',
|
warrantyText: 'WarrantyCartItemTextWidget',
|
||||||
guaranteeText: 'GuaranteeCartItemTextWidget'
|
guaranteeText: 'GuaranteeCartItemTextWidget',
|
||||||
|
total: 'TotalWidget'
|
||||||
},
|
},
|
||||||
cartItemType
|
cartItemType
|
||||||
};
|
};
|
||||||
|
|
@ -176,7 +188,8 @@ export default {
|
||||||
},
|
},
|
||||||
servicePrice() {
|
servicePrice() {
|
||||||
const price = getPriceOfLineItems(getServiceLineItems(this.cartOrder)) ?? 0;
|
const price = getPriceOfLineItems(getServiceLineItems(this.cartOrder)) ?? 0;
|
||||||
return price - this.recalibrationPrice;
|
const recycleFee = this.recycleFeeLineItem ? getPriceOfLineItem(this.recycleFeeLineItem) : 0;
|
||||||
|
return price - this.recalibrationPrice - recycleFee;
|
||||||
},
|
},
|
||||||
isUnverified() {
|
isUnverified() {
|
||||||
return isOrderUnverified(this.cartOrder);
|
return isOrderUnverified(this.cartOrder);
|
||||||
|
|
@ -198,10 +211,10 @@ export default {
|
||||||
return getCartTotal(this.cartOrder);
|
return getCartTotal(this.cartOrder);
|
||||||
},
|
},
|
||||||
amountDue() {
|
amountDue() {
|
||||||
return this.showAsPaid ? 0 : this.total;
|
return this.total - this.amountPaid;
|
||||||
},
|
},
|
||||||
amountPaid() {
|
amountPaid() {
|
||||||
return !this.showAsPaid ? 0 : this.total;
|
return !this.showAsPaid ? 0 : this.cartOrder.settledTenderAmount;
|
||||||
},
|
},
|
||||||
availableLineItems() {
|
availableLineItems() {
|
||||||
const { supportingItems, glassParts, otherParts, feeItems } = this.lineItems;
|
const { supportingItems, glassParts, otherParts, feeItems } = this.lineItems;
|
||||||
|
|
@ -278,6 +291,9 @@ export default {
|
||||||
salesTaxLabel() {
|
salesTaxLabel() {
|
||||||
return this.getCmsContent(this.widget.salesTax, widgetFields.TEXT_BLOCK_WIDGET.TEXT);
|
return this.getCmsContent(this.widget.salesTax, widgetFields.TEXT_BLOCK_WIDGET.TEXT);
|
||||||
},
|
},
|
||||||
|
totalLabel() {
|
||||||
|
return this.getCmsContent(this.widget.total, widgetFields.TEXT_BLOCK_WIDGET.TEXT);
|
||||||
|
},
|
||||||
recycleFeeCartItem() {
|
recycleFeeCartItem() {
|
||||||
return this.recycleFeeLineItem
|
return this.recycleFeeLineItem
|
||||||
? this.getCartItem(
|
? this.getCartItem(
|
||||||
|
|
@ -414,6 +430,10 @@ export default {
|
||||||
a:hover {
|
a:hover {
|
||||||
color: $heritage-blue-secondary;
|
color: $heritage-blue-secondary;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#amount-paid-label {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.cart-footer {
|
.cart-footer {
|
||||||
|
|
|
||||||
|
|
@ -21,9 +21,9 @@
|
||||||
'form-test-invalid': (disableForwardAction || isForwardActionDisabled),
|
'form-test-invalid': (disableForwardAction || isForwardActionDisabled),
|
||||||
'hide-button': isForwardButtonHidden
|
'hide-button': isForwardButtonHidden
|
||||||
}"
|
}"
|
||||||
:aria-disabled="disableForwardAction || isForwardActionDisabled"
|
:isDisabled="disableForwardAction || isForwardActionDisabled || isForwardButtonHidden"
|
||||||
:isDisabled="disableForwardAction || isForwardActionDisabled"
|
|
||||||
data-test-id="site-footer-main-button"
|
data-test-id="site-footer-main-button"
|
||||||
|
buttonType="submit"
|
||||||
@clickEvent="buttonClick" />
|
@clickEvent="buttonClick" />
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
|
|
||||||
|
|
@ -281,11 +281,13 @@ export default {
|
||||||
},
|
},
|
||||||
serviceTypeText() {
|
serviceTypeText() {
|
||||||
const glassPieces = this.submittedOrder.lineItems.glassParts?.map((part) => part.partType.toLowerCase()) ?? [];
|
const glassPieces = this.submittedOrder.lineItems.glassParts?.map((part) => part.partType.toLowerCase()) ?? [];
|
||||||
let glassList = getGlassList(glassPieces);
|
let glassList = '';
|
||||||
let workType = '';
|
let workType = '';
|
||||||
if (this.isRepair) {
|
if (this.isRepair) {
|
||||||
|
glassList = 'windshield';
|
||||||
workType = 'repair';
|
workType = 'repair';
|
||||||
} else {
|
} else {
|
||||||
|
glassList = getGlassList(glassPieces);
|
||||||
workType = 'replacement';
|
workType = 'replacement';
|
||||||
if (this.hasRecalibrationPart) {
|
if (this.hasRecalibrationPart) {
|
||||||
if (glassList === 'windshield') {
|
if (glassList === 'windshield') {
|
||||||
|
|
@ -622,7 +624,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.cart-container {
|
.cart-container {
|
||||||
padding: 0 .9375rem;
|
padding: 0 .9375rem 2.1875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
|
|
|
||||||
|
|
@ -10,18 +10,22 @@
|
||||||
<alert
|
<alert
|
||||||
v-if="displayPayInAdvanceCreditCardAlert"
|
v-if="displayPayInAdvanceCreditCardAlert"
|
||||||
name="payInAdvanceCreditCardErrorAlert"
|
name="payInAdvanceCreditCardErrorAlert"
|
||||||
class="my-4"
|
class="pay-in-advance-alert"
|
||||||
cmsWidgetName="PayInAdvanceCreditCardErrorAlertWidget"
|
cmsWidgetName="PayInAdvanceCreditCardErrorAlertWidget"
|
||||||
alertClass="alert-danger"
|
alertClass="alert-danger"
|
||||||
:isDismissible="false"
|
:isDismissible="false"
|
||||||
|
:isCollapsible="true"
|
||||||
|
:preventDefaultOnClick="true"
|
||||||
@textLinkClicked="paymentFailedPayLater" />
|
@textLinkClicked="paymentFailedPayLater" />
|
||||||
<alert
|
<alert
|
||||||
v-if="displayPayInAdvanceAfterPayAlert"
|
v-if="displayPayInAdvanceAfterPayAlert"
|
||||||
name="payInAdvanceAfterPayErrorAlert"
|
name="payInAdvanceAfterPayErrorAlert"
|
||||||
class="my-4"
|
class="pay-in-advance-alert"
|
||||||
cmsWidgetName="PayInAdvanceAfterpayErrorAlertWidget"
|
cmsWidgetName="PayInAdvanceAfterpayErrorAlertWidget"
|
||||||
alertClass="alert-danger"
|
alertClass="alert-danger"
|
||||||
:isDismissible="false"
|
:isDismissible="false"
|
||||||
|
:isCollapsible="true"
|
||||||
|
:preventDefaultOnClick="true"
|
||||||
@textLinkClicked="paymentFailedPayLater" />
|
@textLinkClicked="paymentFailedPayLater" />
|
||||||
<iframe
|
<iframe
|
||||||
id="card-frame"
|
id="card-frame"
|
||||||
|
|
@ -35,14 +39,40 @@
|
||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4 col-md-10 col-xs-12">
|
<div class="col-lg-4 col-md-10 col-xs-12">
|
||||||
<div>
|
<div class="order-summary-panel">
|
||||||
|
<div class="cart-title">{{ cartTitle }}</div>
|
||||||
<cartDropdown
|
<cartDropdown
|
||||||
ref="cart"
|
ref="cart"
|
||||||
|
class="cart-dropdown-component"
|
||||||
:readOnly="true"
|
:readOnly="true"
|
||||||
:showAsPaid="false"
|
:showAsPaid="false"
|
||||||
recyclingModalCmsWidgetName="RecycleModal"
|
recyclingModalCmsWidgetName="RecycleModal"
|
||||||
servicePackageTitleWidgetName="ServicePackageTitle" />
|
servicePackageTitleWidgetName="ServicePackageTitle" />
|
||||||
</div>
|
</div>
|
||||||
|
<div class="d-none d-lg-block">
|
||||||
|
<buttonMain
|
||||||
|
v-if="!afterpayModalOpen"
|
||||||
|
class="submit-payment-button"
|
||||||
|
variant="success"
|
||||||
|
:preventDefaultOnClick="true"
|
||||||
|
:buttonText="submitPaymentText"
|
||||||
|
@clickEvent="submitPaymentAction"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="!afterpayModalOpen"
|
||||||
|
class="switch-payment-container">
|
||||||
|
<div class="switch-payment-text">{{ switchPaymentText }}</div>
|
||||||
|
<button
|
||||||
|
class="afterpay-button"
|
||||||
|
@click.prevent="switchToAfterPay">
|
||||||
|
{{ afterpayButtonText }}
|
||||||
|
<img
|
||||||
|
class="afterpay-logo"
|
||||||
|
:src="afterpayLogo"
|
||||||
|
alt="Afterpay Logo" />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12">
|
<div class="col-xs-12">
|
||||||
|
|
@ -409,6 +439,9 @@ import cartDropdown from '@/iss-components/cart-dropdown/cart-dropdown.vue';
|
||||||
import { formatAmountInDollars } from '@/helpers/text-helper';
|
import { formatAmountInDollars } from '@/helpers/text-helper';
|
||||||
import showIssLoadingModal from '@/helpers/loading-modal-helper';
|
import showIssLoadingModal from '@/helpers/loading-modal-helper';
|
||||||
import { supportsApplePay } from '@/helpers/browser-helper';
|
import { supportsApplePay } from '@/helpers/browser-helper';
|
||||||
|
import buttonMain from '@/ux-components/button-main/button-main.vue';
|
||||||
|
import { submitWorkOrder } from '@/helpers/order-helper';
|
||||||
|
import submitType from '@/constants/submit-type';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'payment-page',
|
name: 'payment-page',
|
||||||
|
|
@ -417,7 +450,8 @@ export default {
|
||||||
siteHeader,
|
siteHeader,
|
||||||
siteFooter,
|
siteFooter,
|
||||||
Form,
|
Form,
|
||||||
alert
|
alert,
|
||||||
|
buttonMain
|
||||||
},
|
},
|
||||||
directives: {
|
directives: {
|
||||||
resize: {
|
resize: {
|
||||||
|
|
@ -434,7 +468,8 @@ export default {
|
||||||
mixins: [BaseFormMixin],
|
mixins: [BaseFormMixin],
|
||||||
async beforeRouteEnter(to, from, next) {
|
async beforeRouteEnter(to, from, next) {
|
||||||
const paymentType = useMainStore().order.payment.paymentMethod;
|
const paymentType = useMainStore().order.payment.paymentMethod;
|
||||||
if (paymentType === paymentMethods.PAYPAL) {
|
const alertToDisplay = to.query[queryStrings.DISPLAY_PAY_IN_ADVANCE_ALERT];
|
||||||
|
if (paymentType === paymentMethods.PAYPAL || alertToDisplay) {
|
||||||
useMainStore().savePaymentMethodChoice(paymentMethods.CREDIT_CARD);
|
useMainStore().savePaymentMethodChoice(paymentMethods.CREDIT_CARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -499,7 +534,8 @@ export default {
|
||||||
totalAmount: this.getAmountDue(),
|
totalAmount: this.getAmountDue(),
|
||||||
displayAmount: this.getDisplayAmountDue(),
|
displayAmount: this.getDisplayAmountDue(),
|
||||||
payInAdvanceLineItems: '',
|
payInAdvanceLineItems: '',
|
||||||
shouldBlockInteraction: false
|
shouldBlockInteraction: false,
|
||||||
|
afterpayModalOpen: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -537,6 +573,21 @@ export default {
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
},
|
},
|
||||||
|
cartTitle() {
|
||||||
|
return this.getCmsContent('OrderSummaryTextWidget', widgetFields.TEXT_BLOCK_WIDGET.TEXT);
|
||||||
|
},
|
||||||
|
switchPaymentText() {
|
||||||
|
return this.getCmsContent('SwitchPaymentTextWidget', widgetFields.TEXT_BLOCK_WIDGET.TEXT);
|
||||||
|
},
|
||||||
|
submitPaymentText() {
|
||||||
|
return this.getCmsContent('SiteFooterWidget', widgetFields.FOOTER_WIDGET.FORWARD_BUTTON_TEXT);
|
||||||
|
},
|
||||||
|
afterpayButtonText() {
|
||||||
|
return this.getCmsContent('AfterpayButtonWidget', widgetFields.CONTENT_GROUP_WIDGET.HEADER_TEXT);
|
||||||
|
},
|
||||||
|
afterpayLogo() {
|
||||||
|
return this.getCmsContent('AfterpayButtonWidget', widgetFields.CONTENT_GROUP_WIDGET.IMAGE);
|
||||||
|
},
|
||||||
isPaypal() {
|
isPaypal() {
|
||||||
return this.paymentType === paymentMethods.PAYPAL;
|
return this.paymentType === paymentMethods.PAYPAL;
|
||||||
},
|
},
|
||||||
|
|
@ -720,6 +771,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.isAfterPay) {
|
if (this.isAfterPay) {
|
||||||
|
this.afterpayModalOpen = true;
|
||||||
iframe.contentWindow.postMessage('afterpay', '*');
|
iframe.contentWindow.postMessage('afterpay', '*');
|
||||||
} else {
|
} else {
|
||||||
iframe.contentWindow.postMessage('CreditCardChosen', '*');
|
iframe.contentWindow.postMessage('CreditCardChosen', '*');
|
||||||
|
|
@ -730,12 +782,18 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
handleIFrameContentWindowMessage(event) {
|
handleIFrameContentWindowMessage(event) {
|
||||||
|
const iframe = this.$refs.paymentFrame;
|
||||||
if (typeof event.data !== 'string') {
|
if (typeof event.data !== 'string') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.data.includes('afterpayClosed')) {
|
if (event.data.includes('afterpayClosed')) {
|
||||||
this.backButtonAction();
|
if (this.isAfterPay) {
|
||||||
|
this.backButtonAction();
|
||||||
|
} else {
|
||||||
|
iframe.contentWindow.postMessage('CreditCardChosen', '*');
|
||||||
|
this.afterpayModalOpen = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (useMainStore().order.payment.paymentMethod !== paymentMethods.PayNow) {
|
if (useMainStore().order.payment.paymentMethod !== paymentMethods.PayNow) {
|
||||||
|
|
@ -776,7 +834,10 @@ export default {
|
||||||
this.$route.query[queryStrings.DISPLAY_PAY_IN_ADVANCE_ALERT] === payMethod
|
this.$route.query[queryStrings.DISPLAY_PAY_IN_ADVANCE_ALERT] === payMethod
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
paymentFailedPayLater() {
|
async paymentFailedPayLater() {
|
||||||
|
this.showIssLoadingModal(true);
|
||||||
|
this.mainStore.savePaymentMethodChoice(paymentMethods.PAY_AT_TIME_OF_SERVICE);
|
||||||
|
await submitWorkOrder({ submitType: submitType.SAFELITE });
|
||||||
this.$router.navigate(
|
this.$router.navigate(
|
||||||
this.navigationScenarios.CLICKED_FORWARD,
|
this.navigationScenarios.CLICKED_FORWARD,
|
||||||
this.$route
|
this.$route
|
||||||
|
|
@ -792,6 +853,19 @@ export default {
|
||||||
this.$route
|
this.$route
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
submitPaymentAction() {
|
||||||
|
const iframe = this.$refs.paymentFrame;
|
||||||
|
if (iframe && iframe.contentWindow) {
|
||||||
|
iframe.contentWindow.postMessage('submitPayment', '*');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
switchToAfterPay() {
|
||||||
|
const iframe = this.$refs.paymentFrame;
|
||||||
|
if (iframe && iframe.contentWindow) {
|
||||||
|
this.afterpayModalOpen = true;
|
||||||
|
iframe.contentWindow.postMessage('afterpay-switch', '*');
|
||||||
|
}
|
||||||
|
},
|
||||||
showIssLoadingModal
|
showIssLoadingModal
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -808,8 +882,68 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.order-summary-panel {
|
||||||
|
margin-bottom: 1.375rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-title {
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-top: 1.25rem;
|
||||||
|
margin-bottom: .625rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-dropdown-component.cart-table {
|
||||||
|
font-size: .8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-payment-button {
|
||||||
|
width: 100%;
|
||||||
|
font-weight: $font-weight-normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.switch-payment-container {
|
||||||
|
@include media-breakpoint-up(lg) {
|
||||||
|
padding-top: 1.25rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.switch-payment-text {
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: .625rem;
|
||||||
|
border-top: 1px solid #f0f1f2;
|
||||||
|
}
|
||||||
|
|
||||||
.footer-component:deep(.footer) {
|
.footer-component:deep(.footer) {
|
||||||
margin: 0;
|
margin: 1.25rem 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.afterpay-button {
|
||||||
|
width: 100%;
|
||||||
|
height: 2.875rem;
|
||||||
|
border: solid 1px #cacbcc;
|
||||||
|
border-radius: 1.375rem;
|
||||||
|
background-color: white;
|
||||||
|
box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.2);
|
||||||
|
color: $darker-gray;
|
||||||
|
font-weight: 400;
|
||||||
|
margin-bottom: 1.25rem;
|
||||||
|
padding: .5rem 1rem;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
background: $background-color-selected;
|
||||||
|
}
|
||||||
|
&:active {
|
||||||
|
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pay-in-advance-alert {
|
||||||
|
width: 80%;
|
||||||
|
|
||||||
|
@media (max-width: 35rem) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,8 @@
|
||||||
class="my-5"
|
class="my-5"
|
||||||
cmsWidgetName="HasReplacementConflict"
|
cmsWidgetName="HasReplacementConflict"
|
||||||
alertClass="alert-danger"
|
alertClass="alert-danger"
|
||||||
:isDismissible="false" />
|
:isDismissible="false"
|
||||||
|
:isCollapsible="true" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="justify-content-center">
|
<div class="justify-content-center">
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,8 @@
|
||||||
class="mt-5"
|
class="mt-5"
|
||||||
cmsWidgetName="SplitSingleConflict"
|
cmsWidgetName="SplitSingleConflict"
|
||||||
alertClass="alert-danger"
|
alertClass="alert-danger"
|
||||||
:isDismissible="false" />
|
:isDismissible="false"
|
||||||
|
:isCollapsible="true" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1342,27 +1342,19 @@ export const useMainStore = defineStore({
|
||||||
},
|
},
|
||||||
|
|
||||||
getServiceabilityDetails(serviceZipCode) {
|
getServiceabilityDetails(serviceZipCode) {
|
||||||
const { vehicle, damage, parentAccountNumber, referralSequenceNumber, lineItems } = this.order;
|
const { damage, lineItems, parentAccountNumber, vehicle } = this.order;
|
||||||
const { carId } = vehicle;
|
const { carId } = vehicle;
|
||||||
const glassArray = convertGlassPieceNamingForApi(damage.glassToReplace);
|
const flattenedGlassParts = getLineItemsFlattened(lineItems.glassParts);
|
||||||
const lineItemParts = [...(lineItems.glassParts || []), ...(lineItems.supportingItems || [])].map((part) => ({
|
const lineItemsList = flattenedGlassParts.map((part) => part.partNumber).join(',');
|
||||||
partNumber: part.partNumber,
|
|
||||||
recalibrationType: part.recalibrationType
|
|
||||||
}));
|
|
||||||
|
|
||||||
const params = buildURLSearchParams({
|
let endPoint = `${endpoints.GetServiceabilityDetails.url}?zip=${serviceZipCode}&carId=${carId}&parentAccountNumber=${parentAccountNumber}&isRepair=${damage.isRepair}`;
|
||||||
applicationName: applicationConfig.APPLICATION_NAME,
|
if (lineItemsList) {
|
||||||
parentAccountNumber,
|
endPoint += `&lineItems=${lineItemsList}`;
|
||||||
referralSequenceNumber,
|
}
|
||||||
zip: serviceZipCode,
|
|
||||||
carId,
|
|
||||||
glassPieces: glassArray,
|
|
||||||
lineItems: lineItemParts
|
|
||||||
});
|
|
||||||
|
|
||||||
return globalMethods.callHttpClient({
|
return globalMethods.callHttpClient({
|
||||||
method: endpoints.GetServiceabilityDetails.method,
|
method: endpoints.GetServiceabilityDetails.method,
|
||||||
endpoint: `${endpoints.GetServiceabilityDetails.url}?${params.toString()}`
|
endpoint: endPoint
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
lookupVehicleByVin(vin) {
|
lookupVehicleByVin(vin) {
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,7 @@
|
||||||
:text="getRouterLinkDisplayTextFromCopy(copy)"
|
:text="getRouterLinkDisplayTextFromCopy(copy)"
|
||||||
href="#!"
|
href="#!"
|
||||||
:data-bs-target="'#' + getRouterLinkRouteFromCopy(copy)"
|
:data-bs-target="'#' + getRouterLinkRouteFromCopy(copy)"
|
||||||
|
:preventDefaultOnClick="preventDefaultOnClick"
|
||||||
@clickEvent="$emit('textLinkClicked', getRouterLinkRouteFromCopy(copy))" />
|
@clickEvent="$emit('textLinkClicked', getRouterLinkRouteFromCopy(copy))" />
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span
|
||||||
|
|
@ -172,7 +173,8 @@ export default {
|
||||||
startCollapsed: {
|
startCollapsed: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
}
|
},
|
||||||
|
preventDefaultOnClick: { type: Boolean, required: false, default: false }
|
||||||
},
|
},
|
||||||
emits: ['textLinkClicked'],
|
emits: ['textLinkClicked'],
|
||||||
data() {
|
data() {
|
||||||
|
|
|
||||||
|
|
@ -192,4 +192,37 @@ describe('buttonMain.vue', () => {
|
||||||
// Expect
|
// Expect
|
||||||
expect(spy).not.toHaveBeenCalled();
|
expect(spy).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Button Types', () => {
|
||||||
|
it('Should set button type to submit', async () => {
|
||||||
|
// Act
|
||||||
|
const wrapper = shallowMount(
|
||||||
|
buttonMain,
|
||||||
|
setupMocks({
|
||||||
|
propsData: {
|
||||||
|
buttonType: 'submit'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
const button = wrapper.find('button');
|
||||||
|
|
||||||
|
// Expect
|
||||||
|
expect(button.attributes('type')).toEqual('submit');
|
||||||
|
});
|
||||||
|
it('Should default button type to button', async () => {
|
||||||
|
// Act
|
||||||
|
const wrapper = shallowMount(
|
||||||
|
buttonMain,
|
||||||
|
setupMocks()
|
||||||
|
);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
const button = wrapper.find('button');
|
||||||
|
|
||||||
|
// Expect
|
||||||
|
expect(button.attributes('type')).toEqual('button');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
:aria-disabled="isDisabled"
|
:aria-disabled="isDisabled"
|
||||||
class="btn d-flex align-items-center justify-content-center delay"
|
class="btn d-flex align-items-center justify-content-center delay"
|
||||||
:class="[getVariant, `btn-${size}`, canOverride ? 'btn-override' : '']"
|
:class="[getVariant, `btn-${size}`, canOverride ? 'btn-override' : '']"
|
||||||
|
:type="buttonType"
|
||||||
@click="clicked">
|
@click="clicked">
|
||||||
<span class="m-0">{{ buttonText }}</span>
|
<span class="m-0">{{ buttonText }}</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
@ -21,7 +22,9 @@ export default {
|
||||||
isDisabled: Boolean,
|
isDisabled: Boolean,
|
||||||
isOutline: Boolean,
|
isOutline: Boolean,
|
||||||
pushToGA: Boolean,
|
pushToGA: Boolean,
|
||||||
canOverride: { type: Boolean, required: false, default: true }
|
canOverride: { type: Boolean, required: false, default: true },
|
||||||
|
preventDefaultOnClick: { type: Boolean, required: false, default: false },
|
||||||
|
buttonType: { type: String, required: false, default: 'button', validator: (val) => ['button', 'submit', 'reset'].includes(val) }
|
||||||
},
|
},
|
||||||
emits: ['click-event'],
|
emits: ['click-event'],
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -34,8 +37,11 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
clicked() {
|
clicked(e) {
|
||||||
if (!this.isDisabled) {
|
if (!this.isDisabled) {
|
||||||
|
if (this.preventDefaultOnClick) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
if (this.pushToGA) {
|
if (this.pushToGA) {
|
||||||
this.pushEventToGA(
|
this.pushEventToGA(
|
||||||
this.$route.query[this.queryStrings.ISS_PAGE],
|
this.$route.query[this.queryStrings.ISS_PAGE],
|
||||||
|
|
|
||||||
|
|
@ -43,11 +43,15 @@ export default {
|
||||||
text: String,
|
text: String,
|
||||||
href: {
|
href: {
|
||||||
type: String
|
type: String
|
||||||
}
|
},
|
||||||
|
preventDefaultOnClick: { type: Boolean, required: false, default: false }
|
||||||
},
|
},
|
||||||
emits: ['click-event'],
|
emits: ['click-event'],
|
||||||
methods: {
|
methods: {
|
||||||
handleClick() {
|
handleClick(e) {
|
||||||
|
if (this.preventDefaultOnClick) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
this.pushEventToGA(
|
this.pushEventToGA(
|
||||||
this.$route.query[this.queryStrings.ISS_PAGE],
|
this.$route.query[this.queryStrings.ISS_PAGE],
|
||||||
this.GaActions.CLICKED,
|
this.GaActions.CLICKED,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue