diff --git a/src/layouts/contact-details/contact-details.vue b/src/layouts/contact-details/contact-details.vue
index c2ff4ade..96fc0c4d 100644
--- a/src/layouts/contact-details/contact-details.vue
+++ b/src/layouts/contact-details/contact-details.vue
@@ -33,12 +33,12 @@
:validationRules="rules.lastName" />
+ :validationRules="rules.emailAddress" />
@@ -135,13 +136,15 @@ export default {
});
},
data() {
+ const { firstName, lastName, emailAddress, phoneNumber, textUpdates, notesForTechnician }
+ = useMainStore().contactInfo;
return {
- firstName: useMainStore().order.customer.firstName,
- lastName: useMainStore().order.customer.lastName,
- email: useMainStore().order.customer.emailAddress,
- phoneNumber: useMainStore().order.customer.phoneNumber,
- requestTextUpdates: false,
- notesForTechnician: '',
+ firstName,
+ lastName,
+ emailAddress,
+ phoneNumber,
+ requestTextUpdates: textUpdates,
+ notesForTechnician,
widget: {
siteHeader: 'SiteHeaderWidget',
siteSubHeader: 'SiteSubHeaderWidget',
@@ -157,7 +160,7 @@ export default {
rules: {
firstName: globalRules.FIRST_NAME_REQUIRED,
lastName: globalRules.LAST_NAME_REQUIRED,
- email: `${globalRules.EMAIL_ADDRESS_REQUIRED}|${globalRules.EMAIL_ADDRESS_FORMAT}`,
+ emailAddress: `${globalRules.EMAIL_ADDRESS_REQUIRED}|${globalRules.EMAIL_ADDRESS_FORMAT}`,
phoneNumber: `${globalRules.PHONE_NUMBER_REQUIRED}|${globalRules.PHONE_NUMBER_FORMAT}`
}
};
@@ -188,6 +191,15 @@ export default {
* @summary Steps to perform when forward button clicked.
*/
forwardButtonAction() {
+ const contactInfo = {
+ firstName: this.firstName,
+ lastName: this.lastName,
+ emailAddress: this.emailAddress,
+ phoneNumber: this.phoneNumber,
+ textUpdates: this.requestTextUpdates,
+ notesForTechnician: this.notesForTechnician
+ };
+ useMainStore().updateContactInfo(contactInfo);
this.$router.navigate(this.navigationScenarios.CLICKED_FORWARD,
this.$route);
}
diff --git a/src/store/index.js b/src/store/index.js
index 7a58d4f3..028d5a5f 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -1,6 +1,9 @@
+/* eslint-disable max-len */
import { defineStore } from 'pinia';
-import { endpoints } from '@/constants/endpoints.js';
+import { endpoints } from '@/constants/endpoints';
+// eslint-disable-next-line import/no-cycle
import { getDateForSavedSessionTimeout } from '@/helpers/session-helper';
+// eslint-disable-next-line import/no-cycle
import globalMethods from '@/global-methods';
import { experimentTriggers } from '@/constants/experiments';
import { applicationConfig } from '@/constants/application-config';
@@ -10,1458 +13,1406 @@ import { coverageStatuses } from '@/constants/coverage-statuses';
const storeId = 'main';
-const getDefaultState = () => {
- return {
- order: {
- vehicle: {
- year: null,
- make: null,
- model: null,
- style: null,
- carId: null,
- category: null,
- vin: null,
- imageUrl: null,
- imageVifNumber: null,
- imageColor: null,
- registration: {
- licensePlate: null,
- address: null,
- city: null,
- state: null,
- zipCode: null,
- firstName: null,
- lastName: null
- }
- },
- damage: {
- isRepair: null,
- numberOfChips: null,
- glassToReplace: null,
- partQuestionAnswers: null,
- moldingQuestionAnswers: null,
- capabilityQuestionAnswers: null
- },
- policy: {
- policyNumber: null,
- policyZipCode: null,
- dateOfLoss: null,
- damageCause: null,
- damageState: null,
- damageCity: null,
- isDamageGlassOnly: null,
- noCompensation: null,
- deductible: {
- repair: null, // numerical value; how much customer owes on deductible in repair case
- replace: null // numerical value; how much customer owes on deductible in replace case,
- }
- },
- customer: {
- address: {
- streetAddress: null,
- streetAddress2: null,
- city: null,
- state: null,
- zipCode: null
+const getDefaultState = () =>
+ ({
+ order: {
+ vehicle: {
+ year: null,
+ make: null,
+ model: null,
+ style: null,
+ carId: null,
+ category: null,
+ vin: null,
+ imageUrl: null,
+ imageVifNumber: null,
+ imageColor: null,
+ registration: {
+ licensePlate: null,
+ address: null,
+ city: null,
+ state: null,
+ zipCode: null,
+ firstName: null,
+ lastName: null
+ }
+ },
+ damage: {
+ isRepair: null,
+ numberOfChips: null,
+ glassToReplace: null,
+ partQuestionAnswers: null,
+ moldingQuestionAnswers: null,
+ capabilityQuestionAnswers: null
+ },
+ policy: {
+ policyNumber: null,
+ policyZipCode: null,
+ dateOfLoss: null,
+ damageCause: null,
+ damageState: null,
+ damageCity: null,
+ isDamageGlassOnly: null,
+ noCompensation: null,
+ deductible: {
+ repair: null, // numerical value; how much customer owes on deductible in repair case
+ replace: null // numerical value; how much customer owes on deductible in replace case,
+ }
+ },
+ customer: {
+ address: {
+ streetAddress: null,
+ streetAddress2: null,
+ city: null,
+ state: null,
+ zipCode: null
+ },
+ firstName: null,
+ lastName: null,
+ emailAddress: null,
+ phoneNumber: null
+ },
+ serviceLocation: {
+ address: null,
+ city: null,
+ state: null,
+ zipCode: null,
+ zipCodeCtu: null
+ },
+ lineItems: {
+ glassParts: null,
+ otherParts: null,
+ supportingItems: null,
+ vaps: null
+ },
+ payment: {
+ isInsurance: true,
+ insuranceCoverage: {
+ isVerified: false,
+ coverageStatus: coverageStatuses.PENDING
+ }
+ },
+ referralNumber: null,
+ referralDate: null,
+ contactInfo: {
+ firstName: null,
+ lastName: null,
+ emailAddress: null,
+ phoneNumber: null,
+ textUpdates: false,
+ notesForTechnician: ''
+ }
},
- firstName: null,
- lastName: null,
- emailAddress: null,
- phoneNumber: null
- },
- serviceLocation: {
- address: null,
- city: null,
- state: null,
- zipCode: null,
- zipCodeCtu: null
- },
- lineItems: {
- glassParts: null,
- otherParts: null,
- supportingItems: null,
- vaps: null
- },
- payment: {
- isInsurance: true,
- insuranceCoverage: {
- isVerified: false,
- coverageStatus: coverageStatuses.PENDING
+ applicationUser: {
+ experiments: [],
+ eventBus: [],
+ pageData: {},
+ savedSessionTimeout: getDateForSavedSessionTimeout(),
+ saveSessionPromise: null,
+ savedSessionId: null,
+ crmCustomerId: null,
+ lastPageVisited: null,
+ triggeredSiteEntry: false
+ },
+ issConfig: {
+ clientName: 'Generic Insurance', // this is the default and will be overriden by the client's name
+ clientDisplayName: 'Generic Insurance', // this is the default and will be overridden by the client's name or client display name.
+ styleSheet: '', // Stylesheet used by the client.
+ accountNumber: 0, // Account number used by the client.
+ isCoverageEnabled: false, // Indicates if we should be calling coverage on this flow.
+ isClaimRegistrationRequired: false, // Indicates if the claim registration call needs to be made for a client to complete coverage verification.
+ isAuthenticated: false, // Indicates if user is authenticated or not.
+ enableTPAFlow: false, // Indicates if the TPA flow is supported for this client.
+ successReturnURL: null, // Client URL to return the user to upon a successfull flow completetion (order submission).
+ failureReturnURL: null, // Client URL to return the user to when they encounter an error or bailout and are unable to complete the flow.
+ disabledFields: { // Fields that are disabled and read only if sent over from a client.
+ policyNumber: null,
+ policyZipCode: null
+ }
}
- },
- referralNumber: null,
- referralDate: null,
- },
- applicationUser: {
- experiments: [],
- eventBus: [],
- pageData: {},
- savedSessionTimeout: getDateForSavedSessionTimeout(),
- saveSessionPromise: null,
- savedSessionId: null,
- crmCustomerId: null,
- lastPageVisited: null,
- triggeredSiteEntry: false
- },
- issConfig: {
- clientName: 'Generic Insurance', // this is the default and will be overriden by the client's name
- clientDisplayName: 'Generic Insurance', // this is the default and will be overridden by the client's name or client display name.
- styleSheet: '', // Stylesheet used by the client.
- accountNumber: 0, // Account number used by the client.
- isCoverageEnabled: false, // Indicates if we should be calling coverage on this flow.
- isClaimRegistrationRequired: false, // Indicates if the claim registration call needs to be made for a client to complete coverage verification.
- isAuthenticated: false, // Indicates if user is authenticated or not.
- enableTPAFlow: false, // Indicates if the TPA flow is supported for this client.
- successReturnURL: null, // Client URL to retrurn the user to upon a successfull flow completetion (order submission).
- failureReturnURL: null, // Client URL to retrurn the user to when they encounter an error or bailout and are unable to complete the flow.
- disabledFields: { // Fields that are disabled and read only if sent over from a client.
- policyNumber: null,
- policyZipCode: null
- }
- }
- };
-};
+ });
export const state = getDefaultState();
export const useMainStore = defineStore({
id: storeId,
- state: () => state,
+ state: () =>
+ state,
getters: {
- hasRecalibrationPart: (state) => getHasRecalibrationPart(state),
- vehicle: (state) => state.order.vehicle,
- damage: (state) => state.order.damage,
- lineItems: (state) => state.order.lineItems,
- payment: (state) => state.order.payment,
- policy: (state) => state.order.policy,
- hasAnyNonWindshieldGlassParts: (state) => !state.order.policy.isDamageGlassOnly,
- isClaimRegistrationRequired: (state) => state.issConfig.isClaimRegistrationRequired,
- eventBusItem: (state) => ( eventCategory, eventSubCategory) => {
-
- const matchedEvent = state.applicationUser.eventBus.find(
- ( { category, subCategory } ) =>
- category === eventCategory && subCategory === eventSubCategory
- );
- return matchedEvent?.eventValue;
- },
- eventBus: (state) => state.applicationUser.eventBus,
- applicationUserObj: (state) => state.applicationUser,
- pageData: (state) => (page) => {
- return state.applicationUser.pageData[page];
- },
- customerData: (state) => {
- if (state.order.vehicle.registration.address)
- {
- const registration = state.order.vehicle.registration;
- return {
- addressQuestions: {
- streetAddress: registration.address,
- city: registration.city,
- state: registration.state,
- zipCode: registration.zipCode
+ hasRecalibrationPart: (state) =>
+ getHasRecalibrationPart(state),
+ vehicle: (state) =>
+ state.order.vehicle,
+ damage: (state) =>
+ state.order.damage,
+ lineItems: (state) =>
+ state.order.lineItems,
+ payment: (state) =>
+ state.order.payment,
+ policy: (state) =>
+ state.order.policy,
+ hasAnyNonWindshieldGlassParts: (state) =>
+ !state.order.policy.isDamageGlassOnly,
+ isClaimRegistrationRequired: (state) =>
+ state.issConfig.isClaimRegistrationRequired,
+ eventBusItem: (state) =>
+ (eventCategory, eventSubCategory) => {
+ const matchedEvent = state.applicationUser.eventBus.find(({ category, subCategory }) =>
+ category === eventCategory && subCategory === eventSubCategory);
+ return matchedEvent?.eventValue;
},
- firstName: registration.firstName,
- lastName: registration.lastName
- }
- }
- else {
- const address = state.order.customer.address;
- return {
- addressQuestions: {
- streetAddress: address.streetAddress,
- city: address.city,
- state: address.state,
- zipCode: address.zipCode
- },
- firstName: state.order.customer.firstName,
- lastName: state.order.customer.lastName
- }
- }
- },
- experimentOrder: (state) => {
- return {
- issVehicleYear: state.order.vehicle.year,
- issVehicleMake: state.order.vehicle.make,
- issVehicleModel: state.order.vehicle.model,
- issVehicleStyle: state.order.vehicle.style,
- issIsRepair: state.order.damage.isRepair,
- issNumberOfChips: state.order.damage.numberOfChips,
- issCarId: state.order.vehicle.carId,
- issServiceCity: state.order.serviceLocation.city,
- issServiceState: state.order.serviceLocation.state,
- issServiceZipCode: state.order.serviceLocation.zipCode,
- issParentAccountNumber: state.order.accountNumber,
- issIsCoverageVerified: state.order.payment.insuranceCoverage.isVerified,
- issHasRecalibrationPart: getHasRecalibrationPart(state),
- issSelectedMultiGlass: state.order.damage.glassToReplace?.length > 1,
- issSelectedWindshieldGlass: getNonFalseValuesOfPropertyInArrayOfObjects(
- state.order.damage.glassToReplace,
- 'glassLocation'
- ).includes(damageLocationsSelected.WINDSHIELD),
- issSelectedBackGlass: getNonFalseValuesOfPropertyInArrayOfObjects(
- state.order.damage.glassToReplace,
- 'glassLocation'
- ).includes(damageLocationsSelected.REAR),
- issSelectedDriverSideGlass: getNonFalseValuesOfPropertyInArrayOfObjects(
- state.order.damage.glassToReplace,
- 'glassLocation'
- ).includes(damageLocationsSelected.DRIVER),
- issSelectedPassengerSideGlass: getNonFalseValuesOfPropertyInArrayOfObjects(
- state.order.damage.glassToReplace,
- 'glassLocation'
- ).includes(damageLocationsSelected.PASSENGER),
- issOrderPartNumbers: [
- ...getNonFalseValuesOfPropertyInArrayOfObjects(
- state.order.lineItems.glassParts,
- 'partNumber'
- ),
- ...getNonFalseValuesOfPropertyInArrayOfObjects(
- state.order.lineItems.otherParts,
- 'partNumber'
- )
- ],
+ eventBus: (state) =>
+ state.applicationUser.eventBus,
+ applicationUserObj: (state) =>
+ state.applicationUser,
+ pageData: (state) =>
+ (page) =>
+ state.applicationUser.pageData[page],
+ customerData: (state) => {
+ if (state.order.vehicle.registration.address) {
+ const { registration } = state.order.vehicle;
+ return {
+ addressQuestions: {
+ streetAddress: registration.address,
+ city: registration.city,
+ state: registration.state,
+ zipCode: registration.zipCode
+ },
+ firstName: registration.firstName,
+ lastName: registration.lastName
+ };
+ }
- issOrderPartTypes: [
- ...getNonFalseValuesOfPropertyInArrayOfObjects(
- state.order.lineItems.glassParts,
- 'recalibrationType'
- ),
- ...getNonFalseValuesOfPropertyInArrayOfObjects(
- state.order.lineItems.otherParts,
- 'recalibrationType'
- )
- ]
- };
- },
- experimentSettings: (state) => {
- return state.applicationUser.experiments
- .map((x) => x.settings)
- .reduce((r, c) => Object.assign(r, c), {}) ?? {}
- }
+ const { address } = state.order.customer;
+ return {
+ addressQuestions: {
+ streetAddress: address.streetAddress,
+ city: address.city,
+ state: address.state,
+ zipCode: address.zipCode
+ },
+ firstName: state.order.customer.firstName,
+ lastName: state.order.customer.lastName
+ };
+ },
+ contactInfo: (s) =>
+ ({
+ firstName: s.order.contactInfo.firstName ?? s.order.customer.firstName,
+ lastName: s.order.contactInfo.lastName ?? s.order.customer.lastName,
+ emailAddress: s.order.contactInfo.emailAddress ?? s.order.customer.emailAddress,
+ phoneNumber: s.order.contactInfo.phoneNumber ?? s.order.customer.phoneNumber,
+ textUpdates: s.order.contactInfo.textUpdates ?? false,
+ notesForTechnician: s.order.contactInfo.notesForTechnician
+ }),
+ experimentOrder: (state) =>
+ ({
+ issVehicleYear: state.order.vehicle.year,
+ issVehicleMake: state.order.vehicle.make,
+ issVehicleModel: state.order.vehicle.model,
+ issVehicleStyle: state.order.vehicle.style,
+ issIsRepair: state.order.damage.isRepair,
+ issNumberOfChips: state.order.damage.numberOfChips,
+ issCarId: state.order.vehicle.carId,
+ issServiceCity: state.order.serviceLocation.city,
+ issServiceState: state.order.serviceLocation.state,
+ issServiceZipCode: state.order.serviceLocation.zipCode,
+ issParentAccountNumber: state.order.accountNumber,
+ issIsCoverageVerified: state.order.payment.insuranceCoverage.isVerified,
+ issHasRecalibrationPart: getHasRecalibrationPart(state),
+ issSelectedMultiGlass: state.order.damage.glassToReplace?.length > 1,
+ issSelectedWindshieldGlass: getNonFalseValuesOfPropertyInArrayOfObjects(state.order.damage.glassToReplace,
+ 'glassLocation').includes(damageLocationsSelected.WINDSHIELD),
+ issSelectedBackGlass: getNonFalseValuesOfPropertyInArrayOfObjects(state.order.damage.glassToReplace,
+ 'glassLocation').includes(damageLocationsSelected.REAR),
+ issSelectedDriverSideGlass: getNonFalseValuesOfPropertyInArrayOfObjects(state.order.damage.glassToReplace,
+ 'glassLocation').includes(damageLocationsSelected.DRIVER),
+ issSelectedPassengerSideGlass: getNonFalseValuesOfPropertyInArrayOfObjects(state.order.damage.glassToReplace,
+ 'glassLocation').includes(damageLocationsSelected.PASSENGER),
+ issOrderPartNumbers: [
+ ...getNonFalseValuesOfPropertyInArrayOfObjects(state.order.lineItems.glassParts,
+ 'partNumber'),
+ ...getNonFalseValuesOfPropertyInArrayOfObjects(state.order.lineItems.otherParts,
+ 'partNumber')
+ ],
+
+ issOrderPartTypes: [
+ ...getNonFalseValuesOfPropertyInArrayOfObjects(state.order.lineItems.glassParts,
+ 'recalibrationType'),
+ ...getNonFalseValuesOfPropertyInArrayOfObjects(state.order.lineItems.otherParts,
+ 'recalibrationType')
+ ]
+ }),
+ experimentSettings: (state) =>
+ state.applicationUser.experiments
+ .map((x) =>
+ x.settings)
+ .reduce((r, c) =>
+ Object.assign(r, c), {}) ?? {}
},
actions:
{
- // Content API Actions
-
- lookupVinByAddress({ licenseLastName, licenseStreetAddress, licenseZip, licenseState }) {
- return globalMethods.callHttpClient({
- method: endpoints.LookupVinByAddress.method,
- endpoint: endpoints.LookupVinByAddress.url,
- payload: {
- licenseLastName: licenseLastName,
- licenseStreetAddress: licenseStreetAddress,
- licenseZip: licenseZip,
- licenseState: licenseState
- }
- });
- },
+ // Content API Actions
- getRouteInfo(pageName) {
- return globalMethods.callHttpClient({
- method: endpoints.GetRouteInfo.method,
- endpoint: endpoints.GetRouteInfo.url(applicationConfig.APPLICATION_ABBREVIATION),
- payload: {
- pageName: pageName
- }
- });
- },
- getHomepageName() {
- return globalMethods.callHttpClient({
- method: endpoints.GetHomepageInfo.method,
- endpoint: endpoints.GetHomepageInfo.url(applicationConfig.APPLICATION_ABBREVIATION)
- });
- },
-
- getPageData(pageName) {
- return globalMethods.callHttpClient({
- method: endpoints.GetPageData.method,
- endpoint: endpoints.GetPageData.url(applicationConfig.APPLICATION_ABBREVIATION, pageName),
- payload: {}
- });
- },
-
- // Vehicle API Actions
- getVehicleYears() {
- return globalMethods.callHttpClient({
- method: endpoints.GetVehicleYears.method,
- endpoint: endpoints.GetVehicleYears.url,
- payload: {}
- });
- },
-
- getVehicleMakes() {
- return globalMethods.callHttpClient({
- method: endpoints.GetVehicleMakes.method,
- endpoint: endpoints.GetVehicleMakes.url + this.order.vehicle.year,
- payload: {}
- });
- },
-
- getVehicleModels() {
- return globalMethods.callHttpClient({
- method: endpoints.GetVehicleModels.method,
- endpoint: `${endpoints.GetVehicleModels.url}/${this.order.vehicle.year}/${this.order.vehicle.make}`,
- payload: {}
- });
- },
-
- getVehicleStyles() {
- return globalMethods.callHttpClient({
- method: endpoints.GetVehicleStyles.method,
- endpoint: `${endpoints.GetVehicleStyles.url}/${this.order.vehicle.year}/${this.order.vehicle.make}/${this.order.vehicle.model}`,
- payload: {}
- });
- },
-
- getDamageOptions(carId) {
- return globalMethods.callHttpClient({
- methods: endpoints.GetDamageOptions.method,
- endpoint: `${endpoints.GetDamageOptions.url}/${carId}`,
- payload: {}
- });
- },
- getIsVinbyAddressPermissible(){
- try{
- const response = globalMethods.callHttpClient({
- method:endpoints.IsVinbyAddressPermissible.method,
- endpoint:`${endpoints.IsVinbyAddressPermissible.url}?state=${this.order.customer.address.state}`,
- payload: {}
- });
- return response;
- } catch (responseError) {
- return {
- error: {
- status: responseError.status
- }
- };
- }
- },
- getCoveragePolicyInfo({accountNumber, policyNumber, dateOfLoss, zipCode}){
- //TODO: replace place holder correlationId with the real thing
- const placeHolderCorrelationId = "00000000-0000-0000-0000-000000000000";
- try{
- const response = globalMethods.callHttpClient({
- method:endpoints.CoveragePolicyInfo.method,
- endpoint:endpoints.CoveragePolicyInfo.url,
- payload: {
- accountNumber: accountNumber,
- policyNumber: policyNumber,
- dateOfLoss: dateOfLoss,
- zipCode: zipCode,
- correlationId: placeHolderCorrelationId
- }
- });
- return response;
- } catch (responseError) {
- return {
- error: {
- status: responseError.status
- }
- };
- }
- },
- registerClaim() {
- // TODO: replace place holder correlationId with the real thing
- const placeHolderCorrelationId = "00000000-0000-0000-0000-000000000000";
- globalMethods.callHttpClient({
- method: endpoints.RegisterClaim.method,
- endpoint: endpoints.RegisterClaim.url,
- payload:
- {
- correlationId: placeHolderCorrelationId,
- accountNumber: this.issConfig.accountNumber?.toString() ?? "",
- insured: {
- firstName: this.order.customer.firstName,
- lastName: this.order.customer.lastName,
- address: {
- addressLine1: this.order.customer.address.streetAddress,
- addressLine2: this.order.customer.address.streetAddress2,
- city: this.order.customer.address.city,
- state: this.order.customer.address.state,
- zipCode: this.order.customer.address.zipCode,
- country: "US" // TODO set from store
- },
- homePhone: {
- number: this.order.customer.phoneNumber
- }
- },
- caller: {
- homePhone: {}
- },
- policyInfo: {
- policyNumber: this.order.policy.policyNumber,
- safelitePolicy: {
- policies: []
- }
- },
- lossInfo: {
- dateOfLoss: this.order.policy.dateOfLoss,
- location: {
- city: this.order.policy.damageCity,
- state: this.order.policy.damageState,
- country: "US" // TODO set from store
- },
- vehicle: {
- year: this.order.vehicle.year?.toString() ?? "",
- make: this.order.vehicle.make,
- model: this.order.vehicle.model,
- vin: this.order.vehicle.vin
- },
- },
- damageDescription: this.order.policy.damageCause
- }
- }).then((response) => {
- const registerClaimFailed = response.data.isError;
- this.order.payment.insuranceCoverage.isVerified = !registerClaimFailed;
- this.order.payment.insuranceCoverage.coverageStatus = registerClaimFailed
- ? coverageStatuses.PENDING
- : this.policy.noCompensation
- ? coverageStatuses.NO_COMP
- : coverageStatuses.VERIFIED;
- },(error) => {
- this.order.payment.insuranceCoverage.isVerified = false;
- this.order.payment.insuranceCoverage.coverageStatus = coverageStatuses.PENDING;
- });
- },
- async lookupVinByPlate(licensePlate, licenseState) {
- try {
- const response = await globalMethods.callHttpClient({
- method: endpoints.LookupVinByPlate.method,
- endpoint: endpoints.LookupVinByPlate.url,
- payload: {
- licensePlate: licensePlate,
- licenseState: licenseState
- }
- });
-
- return response;
- } catch (responseError) {
- return {
- error: {
- status: responseError.status
- }
- };
- }
- },
-
- // PartsOrQuestions API Actions
- async getPartsOrQuestions() {
- this.resetPartsAndDependencies();
-
- const vehicle = this.vehicle;
- const damage = this.damage;
- const order = this.order;
-
- const carId = vehicle.carId;
- const glassArray = damage.glassToReplace;
- const zipCode = vehicle.registration.zipCode ? vehicle.registration.zipCode : order.customer.address.zipCode;
- const vin = vehicle.vin;
-
- // create a new array to avoid mutating state
- const glassArrayForPayload = convertGlassPieceNamingForApi(glassArray);
-
- const response = await globalMethods.callHttpClient({
- method: endpoints.GetPartsOrQuestions.method,
- endpoint: endpoints.GetPartsOrQuestions.url,
- payload: {
- carId: carId,
- glassPieces: glassArrayForPayload,
- zip: zipCode,
- vin: vin
- }
- });
-
- // Flatten location and name properties
- response.data.partsOrQuestions = convertGlassPieceNamingFromApi(
- response.data.partsOrQuestions
- );
-
- return response;
- },
-
- async getParts() {
- const vehicle = this.order.vehicle;
- const damage = this.order.damage;
- const order = this.order;
-
- const carId = vehicle.carId;
- const glassArray = damage.glassToReplace;
- const resultsArray = damage.partQuestionAnswers;
- const zipCode = vehicle.registration.zipCode ? vehicle.registration.zipCode : order.customer.address.zipCode;
- const vin = vehicle.vin;
-
- // create a new array to avoid mutating state
- const glassArrayForPayload = convertGlassPieceNamingForApi(glassArray);
- const resultsArrayForPayload = convertResultsForApi(resultsArray);
-
- const response = await globalMethods.callHttpClient({
- method: endpoints.GetParts.method,
- endpoint: endpoints.GetParts.url,
- payload: {
- carId: carId,
- glassPieces: glassArrayForPayload,
- answerResults: resultsArrayForPayload,
- zip: zipCode,
- vin: vin
- }
- });
-
- // Flatten location and name properties
- response.data.glassPieceParts = convertGlassPieceNamingFromApi(
- response.data.glassPieceParts
- );
-
- return response;
- },
-
- getCapabilityQuestions(carId, partNumber) {
- return globalMethods.callHttpClient({
- method: endpoints.GetCapabilityQuestions.method,
- endpoint: `${endpoints.GetCapabilityQuestions.url}/${carId}/${partNumber}`
- });
- },
-
- getPartFromCapabilityQuestionAnswer(glassLocation) {
- const pageData =this.pageData(issPageValues.CAPABILITY_QUESTIONS);
-
- const part = pageData.partsOrQuestions.find((x) => x.glassLocation === glassLocation)
- .parts[0];
- const capabilityQuestionAnswers = this.order.damage.capabilityQuestionAnswers;
- const capabilityQuestionAnswersForPart = capabilityQuestionAnswers.find(
- (x) => x.glassLocation === glassLocation
- );
-
- return globalMethods.callHttpClient({
- method: endpoints.GetPartFromCapabilityAnswer.method,
- endpoint: endpoints.GetPartFromCapabilityAnswer.url,
- payload: {
- part,
- capabilityAnswerResults: capabilityQuestionAnswersForPart
- }
- });
- },
- async getWipers() {
- const carId = this.order.vehicle.carId;
- //WARNING
- //TODO: this is temp test code until serviceLocation is complete.
- //const serviceZipCode = this.order.serviceLocation.zipCode;
- const serviceZipCode = '44902';
- return globalMethods
- .callHttpClient({
- method: endpoints.GetWipers.method,
- endpoint: `${endpoints.GetWipers.url}/${carId}/${serviceZipCode}`
- })
- .catch((error) => {
- // The wiper service sometimes returns 500s on legitimate carId/zipCode combination - return empty array instead of breaking flow
- console.error(error);
- return [];
- });
- },
-
- async getRainDefense() {
- return globalMethods
- .callHttpClient({
- method: endpoints.GetRainDefense.method,
- endpoint: `${endpoints.GetRainDefense.url}`
- })
- .catch((error) => {
- // The wiper service sometimes returns 500s on legitimate carId/zipCode combination - return empty array instead of breaking flow
- console.error(error);
- return [];
- });
-
- },
-
- async getSupportingItems() {
- const glassPartsArray = this.order.lineItems.glassParts ?? [];
- const carId = this.order.vehicle.carId;
- const isRepair = this.order.damage.isRepair;
- const numberOfChips = this.order.damage.numberOfChips;
-
- return globalMethods
- .callHttpClient({
- method: endpoints.GetSupportingItems.method,
- endpoint: endpoints.GetSupportingItems.url,
+ lookupVinByAddress({ licenseLastName, licenseStreetAddress, licenseZip, licenseState }) {
+ return globalMethods.callHttpClient({
+ method: endpoints.LookupVinByAddress.method,
+ endpoint: endpoints.LookupVinByAddress.url,
payload: {
- carId: carId,
- damageType: isRepair ? 'Repair' : 'Replace',
- parentAccountNumber: applicationConfig.CASH_PARENT_ACCOUNT_NUMBER,
- parts: glassPartsArray,
- numberOfRepairChips: isRepair ? numberOfChips : 0
+ licenseLastName,
+ licenseStreetAddress,
+ licenseZip,
+ licenseState
}
});
- },
+ },
- async getPriceOrderItems(availableLineItems) {
- let zipCodeToUse = this.order.serviceLocation.zipCode;
- let ctuToUse = this.order.serviceLocation.zipCodeCtu;
- const availableLineItemsFormattedForRequest =
- getLineItemQueryStringForPricing(availableLineItems);
- const vehicle = this.order.vehicle;
-
- //WARNING
- //TODO: this is temp test code until serviceLocation is complete.
- // and ctu is available. Also, EON may need to be implemented.
- zipCodeToUse = '44902';
- ctuToUse = '01820';
- const queryString =
- `ParentAccountNumber=${applicationConfig.CASH_PARENT_ACCOUNT_NUMBER}` +
- `&CTU=${ctuToUse}` +
- `&CarId=${vehicle.carId}` +
- `&Make=${vehicle.make}` +
- `&Model=${vehicle.model}` +
- `&Year=${vehicle.year}` +
- `&EON=0` +
- `&ZipCode=${zipCodeToUse}` +
- `${availableLineItemsFormattedForRequest}`;
-
-
- const response = await globalMethods
- .callHttpClient({
- method: endpoints.GetPriceOrderItems.method,
- endpoint: `${endpoints.GetPriceOrderItems.url}?${queryString}`
- }).catch((error) => {
- console.error(error);
- return [];
+ getRouteInfo(pageName) {
+ return globalMethods.callHttpClient({
+ method: endpoints.GetRouteInfo.method,
+ endpoint: endpoints.GetRouteInfo.url(applicationConfig.APPLICATION_ABBREVIATION),
+ payload: {
+ pageName
+ }
});
+ },
+ getHomepageName() {
+ return globalMethods.callHttpClient({
+ method: endpoints.GetHomepageInfo.method,
+ endpoint: endpoints.GetHomepageInfo.url(applicationConfig.APPLICATION_ABBREVIATION)
+ });
+ },
- availableLineItems = addPricesToLineItems(availableLineItems, response.data.lineItems);
+ getPageData(pageName) {
+ return globalMethods.callHttpClient({
+ method: endpoints.GetPageData.method,
+ endpoint: endpoints.GetPageData.url(applicationConfig.APPLICATION_ABBREVIATION, pageName),
+ payload: {}
+ });
+ },
- return availableLineItems;
- },
+ // Vehicle API Actions
+ getVehicleYears() {
+ return globalMethods.callHttpClient({
+ method: endpoints.GetVehicleYears.method,
+ endpoint: endpoints.GetVehicleYears.url,
+ payload: {}
+ });
+ },
- getServiceabilityDetails({ serviceZipCode }) {
- const lineItemsWithOnlyPartNumbers = this.order.lineItems.glassParts.map(
- (glassPart) => ({
- partNumber: glassPart.partNumber,
- })
- );
- const lineItems = buildQueryStringParameterFromArrayOfComplexObjects(
- lineItemsWithOnlyPartNumbers,
- "lineItems"
- );
+ getVehicleMakes() {
+ return globalMethods.callHttpClient({
+ method: endpoints.GetVehicleMakes.method,
+ endpoint: endpoints.GetVehicleMakes.url + this.order.vehicle.year,
+ payload: {}
+ });
+ },
- const vehicle = this.order.vehicle;
- const carId = vehicle.carId;
- const damage = this.order.damage;
- const glassArray = convertGlassPieceNamingForApi(damage.glassToReplace);
-
- const glassPieces = buildQueryStringParameterFromArrayOfComplexObjects(
- glassArray,
- "glassPieces"
- );
+ getVehicleModels() {
+ return globalMethods.callHttpClient({
+ method: endpoints.GetVehicleModels.method,
+ endpoint: `${endpoints.GetVehicleModels.url}/${this.order.vehicle.year}/${this.order.vehicle.make}`,
+ payload: {}
+ });
+ },
- return globalMethods.callHttpClient({
- method: endpoints.GetServiceabilityDetails.method,
- endpoint: `${endpoints.GetServiceabilityDetails.url}?zip=${serviceZipCode}&carId=${carId}&${lineItems}&${glassPieces}`,
- });
- },
+ getVehicleStyles() {
+ return globalMethods.callHttpClient({
+ method: endpoints.GetVehicleStyles.method,
+ endpoint: `${endpoints.GetVehicleStyles.url}/${this.order.vehicle.year}/${this.order.vehicle.make}/${this.order.vehicle.model}`,
+ payload: {}
+ });
+ },
- lookupVehicleByVin(vin) {
- return globalMethods.callHttpClient({
- method: endpoints.LookupVehicleByVin.method,
- endpoint: endpoints.LookupVehicleByVin.url,
- payload: {
- vin
+ getDamageOptions(carId) {
+ return globalMethods.callHttpClient({
+ methods: endpoints.GetDamageOptions.method,
+ endpoint: `${endpoints.GetDamageOptions.url}/${carId}`,
+ payload: {}
+ });
+ },
+ getIsVinbyAddressPermissible() {
+ try {
+ const response = globalMethods.callHttpClient({
+ method: endpoints.IsVinbyAddressPermissible.method,
+ endpoint: `${endpoints.IsVinbyAddressPermissible.url}?state=${this.order.customer.address.state}`,
+ payload: {}
+ });
+ return response;
+ } catch (responseError) {
+ return {
+ error: {
+ status: responseError.status
+ }
+ };
+ }
+ },
+ getCoveragePolicyInfo({ accountNumber, policyNumber, dateOfLoss, zipCode }) {
+ // TODO: replace place holder correlationId with the real thing
+ const placeHolderCorrelationId = '00000000-0000-0000-0000-000000000000';
+ try {
+ const response = globalMethods.callHttpClient({
+ method: endpoints.CoveragePolicyInfo.method,
+ endpoint: endpoints.CoveragePolicyInfo.url,
+ payload: {
+ accountNumber,
+ policyNumber,
+ dateOfLoss,
+ zipCode,
+ correlationId: placeHolderCorrelationId
+ }
+ });
+ return response;
+ } catch (responseError) {
+ return {
+ error: {
+ status: responseError.status
+ }
+ };
+ }
+ },
+ registerClaim() {
+ // TODO: replace place holder correlationId with the real thing
+ const placeHolderCorrelationId = '00000000-0000-0000-0000-000000000000';
+ globalMethods.callHttpClient({
+ method: endpoints.RegisterClaim.method,
+ endpoint: endpoints.RegisterClaim.url,
+ payload:
+ {
+ correlationId: placeHolderCorrelationId,
+ accountNumber: this.issConfig.accountNumber?.toString() ?? '',
+ insured: {
+ firstName: this.order.customer.firstName,
+ lastName: this.order.customer.lastName,
+ address: {
+ addressLine1: this.order.customer.address.streetAddress,
+ addressLine2: this.order.customer.address.streetAddress2,
+ city: this.order.customer.address.city,
+ state: this.order.customer.address.state,
+ zipCode: this.order.customer.address.zipCode,
+ country: 'US' // TODO set from store
+ },
+ homePhone: {
+ number: this.order.customer.phoneNumber
+ }
+ },
+ caller: {
+ homePhone: {}
+ },
+ policyInfo: {
+ policyNumber: this.order.policy.policyNumber,
+ safelitePolicy: {
+ policies: []
+ }
+ },
+ lossInfo: {
+ dateOfLoss: this.order.policy.dateOfLoss,
+ location: {
+ city: this.order.policy.damageCity,
+ state: this.order.policy.damageState,
+ country: 'US' // TODO set from store
+ },
+ vehicle: {
+ year: this.order.vehicle.year?.toString() ?? '',
+ make: this.order.vehicle.make,
+ model: this.order.vehicle.model,
+ vin: this.order.vehicle.vin
+ }
+ },
+ damageDescription: this.order.policy.damageCause
}
- });
- },
-
- setVehicle() {
- return globalMethods
- .callHttpClient({
- methods: endpoints.GetVehicle.method,
- endpoint: `${endpoints.GetVehicle.url}/${this.order.vehicle.year}/${this.order.vehicle.make}/${this.order.vehicle.model}/${this.order.vehicle.style}`,
- payload: {}
- })
- .then((response) => {
- this.updateVehicle(response.data);
- return response;
- });
- },
+ }).then((response) => {
+ const registerClaimFailed = response.data.isError;
+ this.order.payment.insuranceCoverage.isVerified = !registerClaimFailed;
+ this.order.payment.insuranceCoverage.coverageStatus = registerClaimFailed
+ ? coverageStatuses.PENDING
+ : this.policy.noCompensation
+ ? coverageStatuses.NO_COMP
+ : coverageStatuses.VERIFIED;
+ }, (error) => {
+ this.order.payment.insuranceCoverage.isVerified = false;
+ this.order.payment.insuranceCoverage.coverageStatus = coverageStatuses.PENDING;
+ });
+ },
+ async lookupVinByPlate(licensePlate, licenseState) {
+ try {
+ const response = await globalMethods.callHttpClient({
+ method: endpoints.LookupVinByPlate.method,
+ endpoint: endpoints.LookupVinByPlate.url,
+ payload: {
+ licensePlate,
+ licenseState
+ }
+ });
- saveVehicleDamage(isWindshieldRepair, selectedGlassToReplace, selectedWindshieldChipCount) {
- const selectedGlassPassedInSorted = selectedGlassToReplace.slice().sort();
- const isGlassToReplaceTheSame =
- this.order.damage.glassToReplace?.length === selectedGlassToReplace.length &&
- this.order.damage.glassToReplace
- .slice()
- .sort()
- .every(
- (obj, index) =>
- obj.glassLocation === selectedGlassPassedInSorted[index].glassLocation &&
- obj.glassName === selectedGlassPassedInSorted[index].glassName
- );
- const isWindshieldRepairTheSame =
- isWindshieldRepair === this.order.damage.isRepair;
+ return response;
+ } catch (responseError) {
+ return {
+ error: {
+ status: responseError.status
+ }
+ };
+ }
+ },
- const isChipCountTheSame =
- selectedWindshieldChipCount === this.order.damage.numberOfChips;
-
- const isDamageChanging =
- !isGlassToReplaceTheSame ||
- !isWindshieldRepairTheSame ||
- (isWindshieldRepair && !isChipCountTheSame);
-
- if (isDamageChanging) {
- //Reset dependent state when changing
- //Was resetGlassPartsState, added dependencies for SSR-290
+ // PartsOrQuestions API Actions
+ async getPartsOrQuestions() {
this.resetPartsAndDependencies();
- // Save new values
- this.updateIsRepair(isWindshieldRepair);
- this.updateNumberOfChips(isWindshieldRepair ? parseInt(selectedWindshieldChipCount) : null);
- this.updateGlassToReplace(selectedGlassToReplace);
- }
- },
+ const { vehicle } = this;
+ const { damage } = this;
+ const { order } = this;
- updateRegistration(registrationInfo) {
- this.order.vehicle.registration.licensePlate = registrationInfo?.licensePlate;
- this.order.vehicle.registration.address = registrationInfo?.address;
- this.order.vehicle.registration.city = registrationInfo?.city;
- this.order.vehicle.registration.state = registrationInfo?.state;
- this.order.vehicle.registration.zipCode = registrationInfo?.zipCode;
- this.order.vehicle.registration.firstName = registrationInfo?.firstName;
- this.order.vehicle.registration.lastName = registrationInfo?.lastName;
- },
+ const { carId } = vehicle;
+ const glassArray = damage.glassToReplace;
+ const zipCode = vehicle.registration.zipCode ? vehicle.registration.zipCode : order.customer.address.zipCode;
+ const { vin } = vehicle;
- updateServiceLocation(serviceLocationInfo) {
- this.order.serviceLocation.address = serviceLocationInfo.address;
- this.order.serviceLocation.city = serviceLocationInfo.city;
- this.order.serviceLocation.state = serviceLocationInfo.state;
- this.order.serviceLocation.zipCode = serviceLocationInfo.zipCode;
- this.order.serviceLocation.zipCodeCtu = serviceLocationInfo.zipCodeCtu;
- },
+ // create a new array to avoid mutating state
+ const glassArrayForPayload = convertGlassPieceNamingForApi(glassArray);
- resetRegistrationState() {
- this.order.vehicle.registration.licensePlate = null;
- this.order.vehicle.registration.address = null;
- this.order.vehicle.registration.city = null;
- this.order.vehicle.registration.state = null;
- this.order.vehicle.registration.zipCode = null;
- this.order.vehicle.registration.firstName = null;
- this.order.vehicle.registration.lastName = null;
- },
+ const response = await globalMethods.callHttpClient({
+ method: endpoints.GetPartsOrQuestions.method,
+ endpoint: endpoints.GetPartsOrQuestions.url,
+ payload: {
+ carId,
+ glassPieces: glassArrayForPayload,
+ zip: zipCode,
+ vin
+ }
+ });
- updateSupportingItems(partsData) {
- this.order.lineItems.supportingItems = partsData;
- },
+ // Flatten location and name properties
+ response.data.partsOrQuestions = convertGlassPieceNamingFromApi(response.data.partsOrQuestions);
- updateVaps(partsData) {
- this.order.lineItems.vaps = partsData;
- },
+ return response;
+ },
- updateVehicle(vehicle) {
+ async getParts() {
+ const { vehicle } = this.order;
+ const { damage } = this.order;
+ const { order } = this;
+
+ const { carId } = vehicle;
+ const glassArray = damage.glassToReplace;
+ const resultsArray = damage.partQuestionAnswers;
+ const zipCode = vehicle.registration.zipCode ? vehicle.registration.zipCode : order.customer.address.zipCode;
+ const { vin } = vehicle;
+
+ // create a new array to avoid mutating state
+ const glassArrayForPayload = convertGlassPieceNamingForApi(glassArray);
+ const resultsArrayForPayload = convertResultsForApi(resultsArray);
+
+ const response = await globalMethods.callHttpClient({
+ method: endpoints.GetParts.method,
+ endpoint: endpoints.GetParts.url,
+ payload: {
+ carId,
+ glassPieces: glassArrayForPayload,
+ answerResults: resultsArrayForPayload,
+ zip: zipCode,
+ vin
+ }
+ });
+
+ // Flatten location and name properties
+ response.data.glassPieceParts = convertGlassPieceNamingFromApi(response.data.glassPieceParts);
+
+ return response;
+ },
+
+ getCapabilityQuestions(carId, partNumber) {
+ return globalMethods.callHttpClient({
+ method: endpoints.GetCapabilityQuestions.method,
+ endpoint: `${endpoints.GetCapabilityQuestions.url}/${carId}/${partNumber}`
+ });
+ },
+
+ getPartFromCapabilityQuestionAnswer(glassLocation) {
+ const pageData = this.pageData(issPageValues.CAPABILITY_QUESTIONS);
+
+ const part = pageData.partsOrQuestions.find((x) =>
+ x.glassLocation === glassLocation)
+ .parts[0];
+ const { capabilityQuestionAnswers } = this.order.damage;
+ const capabilityQuestionAnswersForPart = capabilityQuestionAnswers.find((x) =>
+ x.glassLocation === glassLocation);
+
+ return globalMethods.callHttpClient({
+ method: endpoints.GetPartFromCapabilityAnswer.method,
+ endpoint: endpoints.GetPartFromCapabilityAnswer.url,
+ payload: {
+ part,
+ capabilityAnswerResults: capabilityQuestionAnswersForPart
+ }
+ });
+ },
+ async getWipers() {
+ const { carId } = this.order.vehicle;
+ // WARNING
+ // TODO: this is temp test code until serviceLocation is complete.
+ // const serviceZipCode = this.order.serviceLocation.zipCode;
+ const serviceZipCode = '44902';
+ return globalMethods
+ .callHttpClient({
+ method: endpoints.GetWipers.method,
+ endpoint: `${endpoints.GetWipers.url}/${carId}/${serviceZipCode}`
+ })
+ .catch((error) => {
+ // The wiper service sometimes returns 500s on legitimate carId/zipCode combination - return empty array instead of breaking flow
+ console.error(error);
+ return [];
+ });
+ },
+
+ async getRainDefense() {
+ return globalMethods
+ .callHttpClient({
+ method: endpoints.GetRainDefense.method,
+ endpoint: `${endpoints.GetRainDefense.url}`
+ })
+ .catch((error) => {
+ // The wiper service sometimes returns 500s on legitimate carId/zipCode combination - return empty array instead of breaking flow
+ console.error(error);
+ return [];
+ });
+ },
+
+ async getSupportingItems() {
+ const glassPartsArray = this.order.lineItems.glassParts ?? [];
+ const { carId } = this.order.vehicle;
+ const { isRepair } = this.order.damage;
+ const { numberOfChips } = this.order.damage;
+
+ return globalMethods
+ .callHttpClient({
+ method: endpoints.GetSupportingItems.method,
+ endpoint: endpoints.GetSupportingItems.url,
+ payload: {
+ carId,
+ damageType: isRepair ? 'Repair' : 'Replace',
+ parentAccountNumber: applicationConfig.CASH_PARENT_ACCOUNT_NUMBER,
+ parts: glassPartsArray,
+ numberOfRepairChips: isRepair ? numberOfChips : 0
+ }
+ });
+ },
+
+ async getPriceOrderItems(availableLineItems) {
+ let zipCodeToUse = this.order.serviceLocation.zipCode;
+ let ctuToUse = this.order.serviceLocation.zipCodeCtu;
+ const availableLineItemsFormattedForRequest
+ = getLineItemQueryStringForPricing(availableLineItems);
+ const { vehicle } = this.order;
+
+ // WARNING
+ // TODO: this is temp test code until serviceLocation is complete.
+ // and ctu is available. Also, EON may need to be implemented.
+ zipCodeToUse = '44902';
+ ctuToUse = '01820';
+ const queryString
+ = `ParentAccountNumber=${applicationConfig.CASH_PARENT_ACCOUNT_NUMBER}`
+ + `&CTU=${ctuToUse}`
+ + `&CarId=${vehicle.carId}`
+ + `&Make=${vehicle.make}`
+ + `&Model=${vehicle.model}`
+ + `&Year=${vehicle.year}`
+ + '&EON=0'
+ + `&ZipCode=${zipCodeToUse}`
+ + `${availableLineItemsFormattedForRequest}`;
+
+ const response = await globalMethods
+ .callHttpClient({
+ method: endpoints.GetPriceOrderItems.method,
+ endpoint: `${endpoints.GetPriceOrderItems.url}?${queryString}`
+ }).catch((error) => {
+ console.error(error);
+ return [];
+ });
+
+ availableLineItems = addPricesToLineItems(availableLineItems, response.data.lineItems);
+
+ return availableLineItems;
+ },
+
+ getServiceabilityDetails({ serviceZipCode }) {
+ const lineItemsWithOnlyPartNumbers = this.order.lineItems.glassParts.map((glassPart) =>
+ ({
+ partNumber: glassPart.partNumber
+ }));
+ const lineItems = buildQueryStringParameterFromArrayOfComplexObjects(lineItemsWithOnlyPartNumbers,
+ 'lineItems');
+
+ const { vehicle } = this.order;
+ const { carId } = vehicle;
+ const { damage } = this.order;
+ const glassArray = convertGlassPieceNamingForApi(damage.glassToReplace);
+
+ const glassPieces = buildQueryStringParameterFromArrayOfComplexObjects(glassArray,
+ 'glassPieces');
+
+ return globalMethods.callHttpClient({
+ method: endpoints.GetServiceabilityDetails.method,
+ endpoint: `${endpoints.GetServiceabilityDetails.url}?zip=${serviceZipCode}&carId=${carId}&${lineItems}&${glassPieces}`
+ });
+ },
+
+ lookupVehicleByVin(vin) {
+ return globalMethods.callHttpClient({
+ method: endpoints.LookupVehicleByVin.method,
+ endpoint: endpoints.LookupVehicleByVin.url,
+ payload: {
+ vin
+ }
+ });
+ },
+
+ setVehicle() {
+ return globalMethods
+ .callHttpClient({
+ methods: endpoints.GetVehicle.method,
+ endpoint: `${endpoints.GetVehicle.url}/${this.order.vehicle.year}/${this.order.vehicle.make}/${this.order.vehicle.model}/${this.order.vehicle.style}`,
+ payload: {}
+ })
+ .then((response) => {
+ this.updateVehicle(response.data);
+ return response;
+ });
+ },
+
+ saveVehicleDamage(isWindshieldRepair, selectedGlassToReplace, selectedWindshieldChipCount) {
+ const selectedGlassPassedInSorted = selectedGlassToReplace.slice().sort();
+ const isGlassToReplaceTheSame
+ = this.order.damage.glassToReplace?.length === selectedGlassToReplace.length
+ && this.order.damage.glassToReplace
+ .slice()
+ .sort()
+ .every((obj, index) =>
+ obj.glassLocation === selectedGlassPassedInSorted[index].glassLocation
+ && obj.glassName === selectedGlassPassedInSorted[index].glassName);
+ const isWindshieldRepairTheSame
+ = isWindshieldRepair === this.order.damage.isRepair;
+
+ const isChipCountTheSame
+ = selectedWindshieldChipCount === this.order.damage.numberOfChips;
+
+ const isDamageChanging
+ = !isGlassToReplaceTheSame
+ || !isWindshieldRepairTheSame
+ || (isWindshieldRepair && !isChipCountTheSame);
+
+ if (isDamageChanging) {
+ // Reset dependent state when changing
+ // Was resetGlassPartsState, added dependencies for SSR-290
+ this.resetPartsAndDependencies();
+
+ // Save new values
+ this.updateIsRepair(isWindshieldRepair);
+ this.updateNumberOfChips(isWindshieldRepair ? parseInt(selectedWindshieldChipCount) : null);
+ this.updateGlassToReplace(selectedGlassToReplace);
+ }
+ },
+
+ updateRegistration(registrationInfo) {
+ this.order.vehicle.registration.licensePlate = registrationInfo?.licensePlate;
+ this.order.vehicle.registration.address = registrationInfo?.address;
+ this.order.vehicle.registration.city = registrationInfo?.city;
+ this.order.vehicle.registration.state = registrationInfo?.state;
+ this.order.vehicle.registration.zipCode = registrationInfo?.zipCode;
+ this.order.vehicle.registration.firstName = registrationInfo?.firstName;
+ this.order.vehicle.registration.lastName = registrationInfo?.lastName;
+ },
+
+ updateServiceLocation(serviceLocationInfo) {
+ this.order.serviceLocation.address = serviceLocationInfo.address;
+ this.order.serviceLocation.city = serviceLocationInfo.city;
+ this.order.serviceLocation.state = serviceLocationInfo.state;
+ this.order.serviceLocation.zipCode = serviceLocationInfo.zipCode;
+ this.order.serviceLocation.zipCodeCtu = serviceLocationInfo.zipCodeCtu;
+ },
+
+ resetRegistrationState() {
+ this.order.vehicle.registration.licensePlate = null;
+ this.order.vehicle.registration.address = null;
+ this.order.vehicle.registration.city = null;
+ this.order.vehicle.registration.state = null;
+ this.order.vehicle.registration.zipCode = null;
+ this.order.vehicle.registration.firstName = null;
+ this.order.vehicle.registration.lastName = null;
+ },
+
+ updateSupportingItems(partsData) {
+ this.order.lineItems.supportingItems = partsData;
+ },
+
+ updateVaps(partsData) {
+ this.order.lineItems.vaps = partsData;
+ },
+
+ updateVehicle(vehicle) {
// Assuming that the method caller pass all the properties.
// otherwise need to check for undefined for every property.
- this.vehicle.carId = vehicle.carId;
- this.order.vehicle.category = vehicle.category;
- this.order.vehicle.year = vehicle.year;
- this.order.vehicle.make = vehicle.make;
- this.order.vehicle.model = vehicle.model;
- this.order.vehicle.style = vehicle.style;
- this.order.vehicle.vin = vehicle.vin;
- this.order.vehicle.imageUrl = vehicle.imageUrl;
- this.order.vehicle.imageVifNumber = vehicle.imageVifNumber;
- this.order.vehicle.imageColor = vehicle.imageVifColor;
+ this.vehicle.carId = vehicle.carId;
+ this.order.vehicle.category = vehicle.category;
+ this.order.vehicle.year = vehicle.year;
+ this.order.vehicle.make = vehicle.make;
+ this.order.vehicle.model = vehicle.model;
+ this.order.vehicle.style = vehicle.style;
+ this.order.vehicle.vin = vehicle.vin;
+ this.order.vehicle.imageUrl = vehicle.imageUrl;
+ this.order.vehicle.imageVifNumber = vehicle.imageVifNumber;
+ this.order.vehicle.imageColor = vehicle.imageVifColor;
- // These could be undefined
- this.order.policy.noCompensation = vehicle.noCoverage;
- this.order.policy.deductible.replace = vehicle.deductible;
- this.order.policy.deductible.repair = vehicle?.repairWaived ?? false ? 0 : vehicle.deductible;
+ // These could be undefined
+ this.order.policy.noCompensation = vehicle.noCoverage;
+ this.order.policy.deductible.replace = vehicle.deductible;
+ this.order.policy.deductible.repair = vehicle?.repairWaived ?? false ? 0 : vehicle.deductible;
- this.resetSupportingItemsState();
- this.resetVapsState();
- },
-
- updateVehicleVin(vin) {
- this.order.vehicle.vin = vin;
- },
-
- resetVehicleState()
- {
- this.order.vehicle.year = null;
- this.order.vehicle.make = null;
- this.order.vehicle.model = null;
- this.order.vehicle.style = null;
- this.order.vehicle.carId = null;
- this.order.vehicle.category = null;
- this.order.vehicle.vin = null;
- this.order.vehicle.imageUrl = null;
- this.order.vehicle.imageVifNumber = null;
- this.order.vehicle.imageColor = null;
- },
-
- resetGlassPartsState() {
- this.order.lineItems.glassParts = null;
- this.order.damage.partQuestionAnswers = null;
- this.order.damage.moldingQuestionAnswers = null;
- this.order.damage.capabilityQuestionAnswers = null;
- this.applicationUser.pageData[issPageValues.PART_QUESTIONS] = null;
- this.applicationUser.pageData[issPageValues.VEHICLE_PARTS] = null;
- this.applicationUser.pageData[issPageValues.MOLDING_QUESTIONS] = null;
- this.applicationUser.pageData[issPageValues.CAPABILITY_QUESTIONS] = null;
- },
-
- resetSupportingItemsState() {
- this.order.lineItems.supportingItems = null;
- },
- resetVapsState() {
- this.order.lineItems.vaps = null;
- },
- resetDamageState() {
- this.order.damage.isRepair = null;
- this.order.damage.numberOfChips = null;
- this.order.damage.glassToReplace = null;
- },
-
- resetISSConfigState() {
- this.issConfig.clientName = 'Generic Insurance';
- this.issConfig.clientDisplayName = 'Generic Insurance';
- this.issConfig.accountNumber = 0;
- this.issConfig.styleSheet = '';
- this.issConfig.isCoverageEnabled = false;
- this.issConfig.isAuthenticated = false;
- this.issConfig.enableTPAFlow = false;
- this.issConfig.isClaimRegistrationRequired = false;
- this.issConfig.successReturnURL = null;
- this.issConfig.failureReturnURL = null;
- this.issConfig.disabledFields.policyNumber = false;
- this.issConfig.disabledFields.policyZipCode = false;
- },
-
- updateVehicleYear(year) {
- if(this.order.vehicle.year !== year)
- {
- this.resetVehicleState();
- this.resetDamageAndDependencies();
-
- this.order.vehicle.year = year;
- }
- },
-
- updateVehicleMake(make) {
- if(this.order.vehicle.make !== make)
- {
- const year = this.order.vehicle.year;
-
- this.resetVehicleState();
- this.resetDamageAndDependencies();
-
- this.order.vehicle.year = year;
- this.order.vehicle.make = make;
- }
- },
-
- updateVehicleModel(model) {
- if(this.order.vehicle.model !== model)
- {
- const year = this.order.vehicle.year;
- const make = this.order.vehicle.make;
-
- this.resetVehicleState();
- this.resetDamageAndDependencies();
-
- this.order.vehicle.year = year;
- this.order.vehicle.make = make;
- this.order.vehicle.model = model;
- }
- },
-
-
- updateVehicleStyle(style) {
- if(this.order.vehicle.style !== style)
- {
- const year = this.order.vehicle.year;
- const make = this.order.vehicle.make;
- const model = this.order.vehicle.model;
-
- this.resetVehicleState();
- this.resetDamageAndDependencies();
-
- this.order.vehicle.year = year;
- this.order.vehicle.make = make;
- this.order.vehicle.model = model;
- this.order.vehicle.style = style;
- }
- },
-
- updateIsRepair(isRepair) {
- this.order.damage.isRepair = isRepair;
- },
-
- updateNumberOfChips(numberOfChips) {
- this.order.damage.numberOfChips = numberOfChips;
- },
-
- updateGlassToReplace(glassToReplace) {
- this.order.damage.glassToReplace = glassToReplace;
- },
-
- updateGlassParts(partsData) {
- this.order.lineItems.glassParts = partsData;
- },
-
- updateMoldingQuestionAnswers(answersArray) {
- this.order.damage.moldingQuestionAnswers = answersArray;
- },
-
- updateCapabilityQuestionAnswers(answersArray) {
- this.order.damage.capabilityQuestionAnswers = answersArray;
- },
-
- updatePartQuestionAnswers(answersArray) {
- this.order.damage.partQuestionAnswers = answersArray;
- },
-
- updatePageData(pageData) {
- this.applicationUser.pageData[pageData.page] = pageData.data;
- },
- updatePolicyData(welcomePageModel)
- {
- this.order.policy.policyNumber = welcomePageModel?.policyNumber;
- this.order.policy.policyZipCode = welcomePageModel?.policyZipCode;
- this.order.policy.dateOfLoss = welcomePageModel?.dateOfLoss;
- this.order.policy.damageCause = welcomePageModel?.damageCause;
- this.order.policy.damageState = welcomePageModel?.damageState;
- this.order.policy.damageCity = welcomePageModel?.damageCity;
- this.order.policy.isDamageGlassOnly = welcomePageModel?.isDamageGlassOnly;
- this.order.customer.phoneNumber = welcomePageModel?.phoneNumber;
- this.order.customer.emailAddress = welcomePageModel?.email;
- },
- updatePolicyHolderDetails(customerQuestions)
- {
- this.order.customer.address.streetAddress = customerQuestions.addressQuestions.streetAddress;
- this.order.customer.address.streetAddress2 = customerQuestions.addressQuestions.streetAddress2;
- this.order.customer.address.city = customerQuestions.addressQuestions.city;
- this.order.customer.address.state = customerQuestions.addressQuestions.state;
- this.order.customer.address.zipCode = customerQuestions.addressQuestions.zipCode;
- this.order.customer.firstName = customerQuestions.firstName;
- this.order.customer.lastName = customerQuestions.lastName;
- },
- savePartQuestionAnswers(partQuestionAnswersArray) {
- // if part question answers have changed, reset subsequent question answers
- const sortedPreviousResultsArray = sortArrayOfObjectsByPropertyValue(
- this.order.damage.partQuestionAnswers,
- 'result'
- );
- const sortedPartQuestionAnswersArray = sortArrayOfObjectsByPropertyValue(
- partQuestionAnswersArray,
- 'result'
- );
- const havePartQuestionAnswersChanged =
- sortedPreviousResultsArray?.length !== sortedPartQuestionAnswersArray.length ||
- !sortedPreviousResultsArray?.every(
- (x, i) => x.result === sortedPartQuestionAnswersArray[i].result
- );
-
- if (havePartQuestionAnswersChanged) {
- this.updateGlassParts(null);
- this.updateMoldingQuestionAnswers(null);
- this.updateCapabilityQuestionAnswers(null);
this.resetSupportingItemsState();
this.resetVapsState();
+ },
- this.updatePageData({ page: issPageValues.VEHICLE_PARTS, data: null });
- this.updatePageData({ page: issPageValues.MOLDING_QUESTIONS, data: null });
- this.updatePageData({ page: issPageValues.CAPABILITY_QUESTIONS, data: null });
- }
+ updateVehicleVin(vin) {
+ this.order.vehicle.vin = vin;
+ },
- //Save new values
- this.updatePartQuestionAnswers(partQuestionAnswersArray);
+ resetVehicleState() {
+ this.order.vehicle.year = null;
+ this.order.vehicle.make = null;
+ this.order.vehicle.model = null;
+ this.order.vehicle.style = null;
+ this.order.vehicle.carId = null;
+ this.order.vehicle.category = null;
+ this.order.vehicle.vin = null;
+ this.order.vehicle.imageUrl = null;
+ this.order.vehicle.imageVifNumber = null;
+ this.order.vehicle.imageColor = null;
+ },
- },
- saveMoldingQuestionAnswers(moldingQuestionAnswersArray) {
- const sortedPreviousResultsArray = sortArrayOfObjectsByPropertyValue(
- this.order.damage.moldingQuestionAnswers,
- 'result'
- );
- const sortedMoldingQuestionAnswersArray = sortArrayOfObjectsByPropertyValue(
- moldingQuestionAnswersArray,
- 'result'
- );
- const haveMoldingQuestionAnswersChanged =
- sortedPreviousResultsArray?.length !== sortedMoldingQuestionAnswersArray.length ||
- !sortedPreviousResultsArray?.every(
- (x, i) => x.result === sortedMoldingQuestionAnswersArray[i].result
- );
-
- if (haveMoldingQuestionAnswersChanged) {
- this.updateGlassParts(null);
- this.updateSupportingItems(null);
- this.updateCapabilityQuestionAnswers(null);
- this.updatePageData({ page: issPageValues.CAPABILITY_QUESTIONS, data: null });
- }
+ resetGlassPartsState() {
+ this.order.lineItems.glassParts = null;
+ this.order.damage.partQuestionAnswers = null;
+ this.order.damage.moldingQuestionAnswers = null;
+ this.order.damage.capabilityQuestionAnswers = null;
+ this.applicationUser.pageData[issPageValues.PART_QUESTIONS] = null;
+ this.applicationUser.pageData[issPageValues.VEHICLE_PARTS] = null;
+ this.applicationUser.pageData[issPageValues.MOLDING_QUESTIONS] = null;
+ this.applicationUser.pageData[issPageValues.CAPABILITY_QUESTIONS] = null;
+ },
- // Save new values
- this.updateMoldingQuestionAnswers(moldingQuestionAnswersArray);
- },
-
- saveCapabilityQuestionAnswers(capabilityQuestionAnswersArray) {
- const sortedPreviousResultsArray = sortArrayOfObjectsByPropertyValue(
- this.order.damage.capabilityQuestionAnswers,
- 'result'
- );
- const sortedCapabilityQuestionAnswersArray = sortArrayOfObjectsByPropertyValue(
- capabilityQuestionAnswersArray,
- 'result'
- );
- const haveCapabilityQuestionAnswersChanged =
- sortedPreviousResultsArray?.length !== sortedCapabilityQuestionAnswersArray.length ||
- !sortedPreviousResultsArray?.every(
- (x, i) => x.result === sortedCapabilityQuestionAnswersArray[i].result
- );
-
- if (haveCapabilityQuestionAnswersChanged) {
- this.updateGlassParts(null);
- this.updateSupportingItems(null);
- }
+ resetSupportingItemsState() {
+ this.order.lineItems.supportingItems = null;
+ },
+ resetVapsState() {
+ this.order.lineItems.vaps = null;
+ },
+ resetDamageState() {
+ this.order.damage.isRepair = null;
+ this.order.damage.numberOfChips = null;
+ this.order.damage.glassToReplace = null;
+ },
- // Save new values
- this.updateCapabilityQuestionAnswers(capabilityQuestionAnswersArray);
- },
- saveGlassParts(glassParts) {
- this.order.lineItems.glassParts = glassParts;
- },
- saveSupportingItems(supportingItems) {
- this.order.lineItems.supportingItems = supportingItems;
- },
- saveVaps(vaps) {
- this.order.lineItems.vaps = vaps;
- },
- saveProviderPreferenceData(data){
- this.updatePageData({ page: issPageValues.PROVIDER_PREFERENCE, data: data});
- },
- addEventToBus (event) {
- this.applicationUser.eventBus.push(event);
- },
- removeEventFromBus (eventData) {
- const matchedEvent = this.applicationUser.eventBus.find(
- ( {category, subCategory } ) =>
- category === eventData.category && subCategory === eventData.subCategory
- );
- const itemIndex = this.applicationUser.eventBus.indexOf(matchedEvent);
+ resetISSConfigState() {
+ this.issConfig.clientName = 'Generic Insurance';
+ this.issConfig.clientDisplayName = 'Generic Insurance';
+ this.issConfig.accountNumber = 0;
+ this.issConfig.styleSheet = '';
+ this.issConfig.isCoverageEnabled = false;
+ this.issConfig.isAuthenticated = false;
+ this.issConfig.enableTPAFlow = false;
+ this.issConfig.isClaimRegistrationRequired = false;
+ this.issConfig.successReturnURL = null;
+ this.issConfig.failureReturnURL = null;
+ this.issConfig.disabledFields.policyNumber = false;
+ this.issConfig.disabledFields.policyZipCode = false;
+ },
- // If the item exists, remove it.
- if (itemIndex > -1) {
- this.applicationUser.eventBus.splice(itemIndex, 1);
- }
- },
+ updateVehicleYear(year) {
+ if (this.order.vehicle.year !== year) {
+ this.resetVehicleState();
+ this.resetDamageAndDependencies();
- // populate initial state
- populateInitialState()
- {
- if(!localStorage.getItem(storeId)) {
- this.$state = state;
- }
- },
+ this.order.vehicle.year = year;
+ }
+ },
- // Analytics Actions
- logExperimentExposure({ userId, sessionKey, pageName, experiment }) {
- return globalMethods.callHttpClient({
- method: endpoints.LogExperimentExposureIfAssigned.method,
- endpoint: endpoints.LogExperimentExposureIfAssigned.url,
- payload: {
- experimentForLogging: {
- userId: userId,
- experimentUniverseId: experiment.universeId,
- experimentUniverseName: experiment.universeName,
- experimentTestId: experiment.testId,
- experimentTestName: experiment.testName,
- experimentVariationId: experiment.variationId,
- experimentVariationName: experiment.variationName,
- enabled: experiment.isActive,
- isExposed: experiment.isExposed,
- userPartitionNumber: experiment.userPartitionNumber,
- assignmentId: experiment.assignmentId,
- sessionKey: sessionKey,
- pageName: pageName
+ updateVehicleMake(make) {
+ if (this.order.vehicle.make !== make) {
+ const { year } = this.order.vehicle;
+
+ this.resetVehicleState();
+ this.resetDamageAndDependencies();
+
+ this.order.vehicle.year = year;
+ this.order.vehicle.make = make;
+ }
+ },
+
+ updateVehicleModel(model) {
+ if (this.order.vehicle.model !== model) {
+ const { year } = this.order.vehicle;
+ const { make } = this.order.vehicle;
+
+ this.resetVehicleState();
+ this.resetDamageAndDependencies();
+
+ this.order.vehicle.year = year;
+ this.order.vehicle.make = make;
+ this.order.vehicle.model = model;
+ }
+ },
+
+ updateVehicleStyle(style) {
+ if (this.order.vehicle.style !== style) {
+ const { year } = this.order.vehicle;
+ const { make } = this.order.vehicle;
+ const { model } = this.order.vehicle;
+
+ this.resetVehicleState();
+ this.resetDamageAndDependencies();
+
+ this.order.vehicle.year = year;
+ this.order.vehicle.make = make;
+ this.order.vehicle.model = model;
+ this.order.vehicle.style = style;
+ }
+ },
+
+ updateIsRepair(isRepair) {
+ this.order.damage.isRepair = isRepair;
+ },
+
+ updateNumberOfChips(numberOfChips) {
+ this.order.damage.numberOfChips = numberOfChips;
+ },
+
+ updateGlassToReplace(glassToReplace) {
+ this.order.damage.glassToReplace = glassToReplace;
+ },
+
+ updateGlassParts(partsData) {
+ this.order.lineItems.glassParts = partsData;
+ },
+
+ updateMoldingQuestionAnswers(answersArray) {
+ this.order.damage.moldingQuestionAnswers = answersArray;
+ },
+
+ updateCapabilityQuestionAnswers(answersArray) {
+ this.order.damage.capabilityQuestionAnswers = answersArray;
+ },
+
+ updatePartQuestionAnswers(answersArray) {
+ this.order.damage.partQuestionAnswers = answersArray;
+ },
+
+ updatePageData(pageData) {
+ this.applicationUser.pageData[pageData.page] = pageData.data;
+ },
+ updatePolicyData(welcomePageModel) {
+ this.order.policy.policyNumber = welcomePageModel?.policyNumber;
+ this.order.policy.policyZipCode = welcomePageModel?.policyZipCode;
+ this.order.policy.dateOfLoss = welcomePageModel?.dateOfLoss;
+ this.order.policy.damageCause = welcomePageModel?.damageCause;
+ this.order.policy.damageState = welcomePageModel?.damageState;
+ this.order.policy.damageCity = welcomePageModel?.damageCity;
+ this.order.policy.isDamageGlassOnly = welcomePageModel?.isDamageGlassOnly;
+ this.order.customer.phoneNumber = welcomePageModel?.phoneNumber;
+ this.order.customer.emailAddress = welcomePageModel?.email;
+ },
+ updatePolicyHolderDetails(customerQuestions) {
+ this.order.customer.address.streetAddress = customerQuestions.addressQuestions.streetAddress;
+ this.order.customer.address.streetAddress2 = customerQuestions.addressQuestions.streetAddress2;
+ this.order.customer.address.city = customerQuestions.addressQuestions.city;
+ this.order.customer.address.state = customerQuestions.addressQuestions.state;
+ this.order.customer.address.zipCode = customerQuestions.addressQuestions.zipCode;
+ this.order.customer.firstName = customerQuestions.firstName;
+ this.order.customer.lastName = customerQuestions.lastName;
+ },
+ savePartQuestionAnswers(partQuestionAnswersArray) {
+ // if part question answers have changed, reset subsequent question answers
+ const sortedPreviousResultsArray = sortArrayOfObjectsByPropertyValue(this.order.damage.partQuestionAnswers,
+ 'result');
+ const sortedPartQuestionAnswersArray = sortArrayOfObjectsByPropertyValue(partQuestionAnswersArray,
+ 'result');
+ const havePartQuestionAnswersChanged
+ = sortedPreviousResultsArray?.length !== sortedPartQuestionAnswersArray.length
+ || !sortedPreviousResultsArray?.every((x, i) =>
+ x.result === sortedPartQuestionAnswersArray[i].result);
+
+ if (havePartQuestionAnswersChanged) {
+ this.updateGlassParts(null);
+ this.updateMoldingQuestionAnswers(null);
+ this.updateCapabilityQuestionAnswers(null);
+ this.resetSupportingItemsState();
+ this.resetVapsState();
+
+ this.updatePageData({ page: issPageValues.VEHICLE_PARTS, data: null });
+ this.updatePageData({ page: issPageValues.MOLDING_QUESTIONS, data: null });
+ this.updatePageData({ page: issPageValues.CAPABILITY_QUESTIONS, data: null });
+ }
+
+ // Save new values
+ this.updatePartQuestionAnswers(partQuestionAnswersArray);
+ },
+ saveMoldingQuestionAnswers(moldingQuestionAnswersArray) {
+ const sortedPreviousResultsArray = sortArrayOfObjectsByPropertyValue(this.order.damage.moldingQuestionAnswers,
+ 'result');
+ const sortedMoldingQuestionAnswersArray = sortArrayOfObjectsByPropertyValue(moldingQuestionAnswersArray,
+ 'result');
+ const haveMoldingQuestionAnswersChanged
+ = sortedPreviousResultsArray?.length !== sortedMoldingQuestionAnswersArray.length
+ || !sortedPreviousResultsArray?.every((x, i) =>
+ x.result === sortedMoldingQuestionAnswersArray[i].result);
+
+ if (haveMoldingQuestionAnswersChanged) {
+ this.updateGlassParts(null);
+ this.updateSupportingItems(null);
+ this.updateCapabilityQuestionAnswers(null);
+ this.updatePageData({ page: issPageValues.CAPABILITY_QUESTIONS, data: null });
+ }
+
+ // Save new values
+ this.updateMoldingQuestionAnswers(moldingQuestionAnswersArray);
+ },
+
+ saveCapabilityQuestionAnswers(capabilityQuestionAnswersArray) {
+ const sortedPreviousResultsArray = sortArrayOfObjectsByPropertyValue(this.order.damage.capabilityQuestionAnswers,
+ 'result');
+ const sortedCapabilityQuestionAnswersArray = sortArrayOfObjectsByPropertyValue(capabilityQuestionAnswersArray,
+ 'result');
+ const haveCapabilityQuestionAnswersChanged
+ = sortedPreviousResultsArray?.length !== sortedCapabilityQuestionAnswersArray.length
+ || !sortedPreviousResultsArray?.every((x, i) =>
+ x.result === sortedCapabilityQuestionAnswersArray[i].result);
+
+ if (haveCapabilityQuestionAnswersChanged) {
+ this.updateGlassParts(null);
+ this.updateSupportingItems(null);
+ }
+
+ // Save new values
+ this.updateCapabilityQuestionAnswers(capabilityQuestionAnswersArray);
+ },
+ saveGlassParts(glassParts) {
+ this.order.lineItems.glassParts = glassParts;
+ },
+ saveSupportingItems(supportingItems) {
+ this.order.lineItems.supportingItems = supportingItems;
+ },
+ saveVaps(vaps) {
+ this.order.lineItems.vaps = vaps;
+ },
+ saveProviderPreferenceData(data) {
+ this.updatePageData({ page: issPageValues.PROVIDER_PREFERENCE, data });
+ },
+ addEventToBus(event) {
+ this.applicationUser.eventBus.push(event);
+ },
+ removeEventFromBus(eventData) {
+ const matchedEvent = this.applicationUser.eventBus.find(({ category, subCategory }) =>
+ category === eventData.category && subCategory === eventData.subCategory);
+ const itemIndex = this.applicationUser.eventBus.indexOf(matchedEvent);
+
+ // If the item exists, remove it.
+ if (itemIndex > -1) {
+ this.applicationUser.eventBus.splice(itemIndex, 1);
+ }
+ },
+
+ // populate initial state
+ populateInitialState() {
+ if (!localStorage.getItem(storeId)) {
+ this.$state = state;
+ }
+ },
+
+ // Analytics Actions
+ logExperimentExposure({ userId, sessionKey, pageName, experiment }) {
+ return globalMethods.callHttpClient({
+ method: endpoints.LogExperimentExposureIfAssigned.method,
+ endpoint: endpoints.LogExperimentExposureIfAssigned.url,
+ payload: {
+ experimentForLogging: {
+ userId,
+ experimentUniverseId: experiment.universeId,
+ experimentUniverseName: experiment.universeName,
+ experimentTestId: experiment.testId,
+ experimentTestName: experiment.testName,
+ experimentVariationId: experiment.variationId,
+ experimentVariationName: experiment.variationName,
+ enabled: experiment.isActive,
+ isExposed: experiment.isExposed,
+ userPartitionNumber: experiment.userPartitionNumber,
+ assignmentId: experiment.assignmentId,
+ sessionKey,
+ pageName
+ }
}
- }
- });
- },
- logPageView({ userId, sessionKey, pageName, sessionId, action, event, shouldUseSessionId, experimentsForUser }) {
- const payload = {
- userId: userId,
- sessionKey: sessionKey,
- sessionId: sessionId,
- pageName: pageName,
- applicationName: applicationConfig.APPLICATION_NAME,
- action: action,
- event: event,
- shouldUseSessionId: shouldUseSessionId,
- experimentsForUser: experimentsForUser
- };
+ });
+ },
+ logPageView({ userId, sessionKey, pageName, sessionId, action, event, shouldUseSessionId, experimentsForUser }) {
+ const payload = {
+ userId,
+ sessionKey,
+ sessionId,
+ pageName,
+ applicationName: applicationConfig.APPLICATION_NAME,
+ action,
+ event,
+ shouldUseSessionId,
+ experimentsForUser
+ };
- return globalMethods.callHttpClient({
- method: endpoints.LogPageView.method,
- endpoint: endpoints.LogPageView.url,
- payload: payload,
- logApiCall: false
- }).then(
- (response) => {
- return response;
- },
+ return globalMethods.callHttpClient({
+ method: endpoints.LogPageView.method,
+ endpoint: endpoints.LogPageView.url,
+ payload,
+ logApiCall: false
+ }).then((response) =>
+ response,
(error) => {
- console.log('Analytics Service Error: ' + error.data);
- }
- );
- },
- logCustomEvent({ userId, sessionKey, pageName, sessionId, category, action, label, value, shouldUseSessionId, experimentsForUser})
- {
- if ( pageName == null || pageName.length === 0 )
- pageName = 'none';
+ console.log(`Analytics Service Error: ${error.data}`);
+ });
+ },
+ logCustomEvent({ userId, sessionKey, pageName, sessionId, category, action, label, value, shouldUseSessionId, experimentsForUser }) {
+ if (pageName == null || pageName.length === 0) { pageName = 'none'; }
- const payload = {
- userId: userId,
- sessionKey: sessionKey,
- sessionId: sessionId,
- pageName: pageName,
- applicationName: applicationConfig.APPLICATION_NAME,
- category: category,
- action: action,
- label: label,
- value: value,
- shouldUseSessionId: shouldUseSessionId,
- experimentsForUser: experimentsForUser
- };
-
- return globalMethods.callHttpClient({
- method: endpoints.LogCustomEvent.method,
- endpoint: endpoints.LogCustomEvent.url,
- payload: payload,
- logApiCall: false
- }).then(
- (response) => {
- return response;
- },
+ const payload = {
+ userId,
+ sessionKey,
+ sessionId,
+ pageName,
+ applicationName: applicationConfig.APPLICATION_NAME,
+ category,
+ action,
+ label,
+ value,
+ shouldUseSessionId,
+ experimentsForUser
+ };
+
+ return globalMethods.callHttpClient({
+ method: endpoints.LogCustomEvent.method,
+ endpoint: endpoints.LogCustomEvent.url,
+ payload,
+ logApiCall: false
+ }).then((response) =>
+ response,
(error) => {
- console.log('Analytics Service Error: ' + error.data);
- }
- );
- },
- initializeSession({ userId, sessionId, userAgent, referrer }) {
- const payload = {
- applicationName: applicationConfig.APPLICATION_NAME,
- userId: userId,
- deviceId: userId,
- sessionId: sessionId,
- userAgent: userAgent,
- operatorId: 'WEB',
- userName: 'SafeliteISS',
- referrer: referrer
- };
+ console.log(`Analytics Service Error: ${error.data}`);
+ });
+ },
+ initializeSession({ userId, sessionId, userAgent, referrer }) {
+ const payload = {
+ applicationName: applicationConfig.APPLICATION_NAME,
+ userId,
+ deviceId: userId,
+ sessionId,
+ userAgent,
+ operatorId: 'WEB',
+ userName: 'SafeliteISS',
+ referrer
+ };
- return globalMethods.callHttpClient({
- method: endpoints.InitializeSession.method,
- endpoint: endpoints.InitializeSession.url,
- payload: payload,
- logApiCall: false
- }).then(
- (response) => {
- return response;
- },
+ return globalMethods.callHttpClient({
+ method: endpoints.InitializeSession.method,
+ endpoint: endpoints.InitializeSession.url,
+ payload,
+ logApiCall: false
+ }).then((response) =>
+ response,
(error) => {
- console.log('Analytics Service Error: ' + error.data);
- }
- );
- },
+ console.log(`Analytics Service Error: ${error.data}`);
+ });
+ },
- updateLastPageVisited(lastPageVisited) {
- this.applicationUser.lastPageVisited = lastPageVisited;
- },
+ updateLastPageVisited(lastPageVisited) {
+ this.applicationUser.lastPageVisited = lastPageVisited;
+ },
- updateExperiments(experiments) {
- this.applicationUser.experiments = experiments;
- },
- updateTriggeredSiteEntry(wasSiteEntryTriggered) {
- this.applicationUser.triggeredSiteEntry = wasSiteEntryTriggered;
- },
+ updateExperiments(experiments) {
+ this.applicationUser.experiments = experiments;
+ },
+ updateTriggeredSiteEntry(wasSiteEntryTriggered) {
+ this.applicationUser.triggeredSiteEntry = wasSiteEntryTriggered;
+ },
- GetExperimentsByUser(userId) {
- return globalMethods.callHttpClient({
- method: endpoints.GetExperimentsByUser.method,
- endpoint: `${endpoints.GetExperimentsByUser.url}/${userId}`,
- payload: {}
- });
- },
-
- async runExperimentsForTrigger({ userId, triggerEvent, triggerValue }) {
- if (triggerEvent === experimentTriggers.SITE_ENTRY) {
- this.updateTriggeredSiteEntry(true);
- }
+ updateContactInfo(contactInfo) {
+ this.order.contactInfo.firstName = contactInfo.firstName;
+ this.order.contactInfo.lastName = contactInfo.lastName;
+ this.order.contactInfo.emailAddress = contactInfo.emailAddress;
+ this.order.contactInfo.phoneNumber = contactInfo.phoneNumber;
+ this.order.contactInfo.textUpdates = contactInfo.textUpdates;
+ this.order.contactInfo.notesForTechnician = contactInfo.notesForTechnician;
+ },
- const payload = {
- applicationName: applicationConfig.APPLICATION_NAME,
- userId: userId,
- triggerEvent: triggerEvent,
- triggerValue: triggerValue,
- experimentOrder: this.experimentOrder
- };
+ GetExperimentsByUser(userId) {
+ return globalMethods.callHttpClient({
+ method: endpoints.GetExperimentsByUser.method,
+ endpoint: `${endpoints.GetExperimentsByUser.url}/${userId}`,
+ payload: {}
+ });
+ },
- const response = await globalMethods.callHttpClient({
- method: endpoints.RunExperimentsForTrigger.method,
- endpoint: endpoints.RunExperimentsForTrigger.url,
- payload: payload
- });
-
- this.updateExperiments(response.data.experiments);
- },
-
- async validateZip({ zip }) {
- return await globalMethods.callHttpClient({
- methods: endpoints.ValidateZip.method,
- endpoint: `${endpoints.ValidateZip.url}/${zip}`
- });
- },
-
- async validateClientTag(clientTag) {
- return await globalMethods.callHttpClient({
- methods: endpoints.ValidateClientTag.method,
- endpoint: `${endpoints.ValidateClientTag.url}/${clientTag}`
- });
- },
-
- saveServiceLocation(serviceLocationInfo) {
- this.updateServiceLocation(serviceLocationInfo);
- },
-
- saveRegistrationAddressLookup({ isSelectedGlassAvailableForVehicle, vehicleInfo, registrationInfo }) {
- //Reset dependent state when changing
- if
- (
- registrationInfo?.address !== this.order.vehicle.registration?.address ||
- registrationInfo?.city !== this.order.vehicle.registration?.city ||
- registrationInfo?.state !== this.order.vehicle.registration?.state ||
- registrationInfo?.zipCode !== this.order.vehicle.registration?.zipCode ||
- registrationInfo?.firstName !== this.order.vehicle.registration?.firstName ||
- registrationInfo?.lastName !== this.order.vehicle.registration?.lastName
- )
- {
- if (!isSelectedGlassAvailableForVehicle) {
- this.resetDamageState();
- this.resetGlassPartsState();
+ async runExperimentsForTrigger({ userId, triggerEvent, triggerValue }) {
+ if (triggerEvent === experimentTriggers.SITE_ENTRY) {
+ this.updateTriggeredSiteEntry(true);
+ }
+
+ const payload = {
+ applicationName: applicationConfig.APPLICATION_NAME,
+ userId,
+ triggerEvent,
+ triggerValue,
+ experimentOrder: this.experimentOrder
+ };
+
+ const response = await globalMethods.callHttpClient({
+ method: endpoints.RunExperimentsForTrigger.method,
+ endpoint: endpoints.RunExperimentsForTrigger.url,
+ payload
+ });
+
+ this.updateExperiments(response.data.experiments);
+ },
+
+ async validateZip({ zip }) {
+ return await globalMethods.callHttpClient({
+ methods: endpoints.ValidateZip.method,
+ endpoint: `${endpoints.ValidateZip.url}/${zip}`
+ });
+ },
+
+ async validateClientTag(clientTag) {
+ return await globalMethods.callHttpClient({
+ methods: endpoints.ValidateClientTag.method,
+ endpoint: `${endpoints.ValidateClientTag.url}/${clientTag}`
+ });
+ },
+
+ saveServiceLocation(serviceLocationInfo) {
+ this.updateServiceLocation(serviceLocationInfo);
+ },
+
+ saveRegistrationAddressLookup({ isSelectedGlassAvailableForVehicle, vehicleInfo, registrationInfo }) {
+ // Reset dependent state when changing
+ if
+ (
+ registrationInfo?.address !== this.order.vehicle.registration?.address
+ || registrationInfo?.city !== this.order.vehicle.registration?.city
+ || registrationInfo?.state !== this.order.vehicle.registration?.state
+ || registrationInfo?.zipCode !== this.order.vehicle.registration?.zipCode
+ || registrationInfo?.firstName !== this.order.vehicle.registration?.firstName
+ || registrationInfo?.lastName !== this.order.vehicle.registration?.lastName
+ ) {
+ if (!isSelectedGlassAvailableForVehicle) {
+ this.resetDamageState();
+ this.resetGlassPartsState();
+ }
+
+ // Save new values
+ this.updateRegistration(registrationInfo);
+ }
+
+ if (vehicleInfo) {
+ this.updateVehicle(vehicleInfo);
+ }
+ },
+ saveVin({ isSelectedGlassAvailableForVehicle, vehicleInfo }) {
+ // Reset dependent state when changing
+ if (vehicleInfo.vin !== this.order.vehicle.vin) {
+ this.resetRegistrationAndDependencies();
+
+ if (!isSelectedGlassAvailableForVehicle) {
+ this.resetDamageState();
+ this.resetGlassPartsState();
+ }
+
+ // Save new values
+ this.updateVehicle(vehicleInfo);
+ }
+ },
+ saveRegistrationLicensePlateLookup({ isSelectedGlassAvailableForVehicle, vehicleInfo, registrationInfo }) {
+ // Reset dependent state when changing
+ if (registrationInfo?.licensePlate !== this.order.vehicle.registration?.licensePlate
+ || registrationInfo?.state !== this.order.vehicle.registration?.state) {
+ this.resetRegistrationAndDependencies();
+
+ if (!isSelectedGlassAvailableForVehicle) {
+ // Dependencies already cleared in above statement
+ this.resetDamageState();
+ this.resetGlassPartsState();
+ }
+
+ // Save new values
+ this.updateVehicle(vehicleInfo);
}
- //Save new values
this.updateRegistration(registrationInfo);
- };
-
- if(vehicleInfo)
- {
- this.updateVehicle(vehicleInfo);
- }
-
- },
- saveVin({ isSelectedGlassAvailableForVehicle, vehicleInfo }) {
- //Reset dependent state when changing
- if (vehicleInfo.vin !== this.order.vehicle.vin) {
- this.resetRegistrationAndDependencies();
+ },
- if (!isSelectedGlassAvailableForVehicle) {
+ resetRegistrationAndDependencies() {
+ this.resetRegistrationState();
+ this.resetGlassPartsState();
+ this.resetSupportingItemsState();
+ this.resetVapsState();
+ },
+
+ resetDamageAndDependencies() {
this.resetDamageState();
this.resetGlassPartsState();
- }
-
- //Save new values
- this.updateVehicle(vehicleInfo);
+ this.resetSupportingItemsState();
+ this.resetVapsState();
+ },
+
+ resetPartsAndDependencies() {
+ this.resetGlassPartsState();
+ this.resetSupportingItemsState();
+ this.resetVapsState();
+ },
+
+ resetPageFields() {
+ this.order.policy.policyNumber = null;
+ this.order.policy.dateOfLoss = null;
+ this.order.policy.damageCause = null;
+ this.order.policy.damageCity = null;
+ this.order.policy.damageState = null;
+ this.order.customer.phoneNumber = null;
+ this.order.customer.emailAddress = null;
+ this.order.customer.firstName = null;
+ this.order.customer.lastName = null;
+ this.order.customer.address.city = null;
+ this.order.customer.address.state = null;
+ this.order.customer.address.zipCode = null;
+ this.order.customer.address.streetAddress = null;
+ this.order.customer.address.streetAddress2 = null;
+ this.resetVehicleState();
+ this.resetDamageState();
}
- },
- saveRegistrationLicensePlateLookup({ isSelectedGlassAvailableForVehicle, vehicleInfo, registrationInfo }) {
- //Reset dependent state when changing
- if (registrationInfo?.licensePlate !== this.order.vehicle.registration?.licensePlate ||
- registrationInfo?.state !== this.order.vehicle.registration?.state)
- {
- this.resetRegistrationAndDependencies();
-
- if (!isSelectedGlassAvailableForVehicle) {
- // Dependencies already cleared in above statement
- this.resetDamageState();
- this.resetGlassPartsState();
- }
-
- //Save new values
- this.updateVehicle(vehicleInfo);
- }
-
- this.updateRegistration(registrationInfo);
- },
-
- resetRegistrationAndDependencies() {
- this.resetRegistrationState();
- this.resetGlassPartsState();
- this.resetSupportingItemsState();
- this.resetVapsState();
- },
-
- resetDamageAndDependencies() {
- this.resetDamageState();
- this.resetGlassPartsState();
- this.resetSupportingItemsState();
- this.resetVapsState();
- },
-
- resetPartsAndDependencies() {
- this.resetGlassPartsState();
- this.resetSupportingItemsState();
- this.resetVapsState();
- },
-
- resetPageFields()
- {
-
- this.order.policy.policyNumber = null;
- this.order.policy.dateOfLoss = null;
- this.order.policy.damageCause = null;
- this.order.policy.damageCity = null;
- this.order.policy.damageState = null;
- this.order.customer.phoneNumber = null;
- this.order.customer.emailAddress = null;
- this.order.customer.firstName = null;
- this.order.customer.lastName = null;
- this.order.customer.address.city = null;
- this.order.customer.address.state = null;
- this.order.customer.address.zipCode = null;
- this.order.customer.address.streetAddress = null;
- this.order.customer.address.streetAddress2 = null;
- this.resetVehicleState();
- this.resetDamageState();
- }
},
persist: true
});
-
-// Private Functions
+// Private Functions
function getHasRecalibrationPart(state) {
- const hasRequiresRecalibration =
- getNonFalseValuesOfPropertyInArrayOfObjects(
- state.order.lineItems.glassParts,
- 'requiresRecalibration'
- )?.length > 0;
- const hasRecalibrationType =
- getNonFalseValuesOfPropertyInArrayOfObjects(
- state.order.lineItems.glassParts,
- 'recalibrationType'
- )?.length > 0;
+ const hasRequiresRecalibration
+ = getNonFalseValuesOfPropertyInArrayOfObjects(state.order.lineItems.glassParts,
+ 'requiresRecalibration')?.length > 0;
+ const hasRecalibrationType
+ = getNonFalseValuesOfPropertyInArrayOfObjects(state.order.lineItems.glassParts,
+ 'recalibrationType')?.length > 0;
- if (hasRequiresRecalibration) {
- if (hasRecalibrationType) {
- // Has both 'requiresRecalibration' and 'recalibrationType' and 'recalibrationType'
- return (
- getNonFalseValuesOfPropertyInArrayOfObjects(
- state.order.lineItems.glassParts,
- 'recalibrationType'
- )[0].toLowerCase() !== 'unknown'
- );
- } else {
- // Has 'requiresRecalibration' but no 'recalibrationType' at all
- return true;
- }
- } else {
- // Does not have 'requiresRecalibration'
- return false;
- }
+ if (hasRequiresRecalibration) {
+ if (hasRecalibrationType) {
+ // Has both 'requiresRecalibration' and 'recalibrationType' and 'recalibrationType'
+ return (
+ getNonFalseValuesOfPropertyInArrayOfObjects(state.order.lineItems.glassParts,
+ 'recalibrationType')[0].toLowerCase() !== 'unknown'
+ );
+ }
+ // Has 'requiresRecalibration' but no 'recalibrationType' at all
+ return true;
+ }
+ // Does not have 'requiresRecalibration'
+ return false;
}
function getNonFalseValuesOfPropertyInArrayOfObjects(array, propertyName) {
- return (array ?? []).map((x) => x[propertyName]).filter((x) => x);
+ return (array ?? []).map((x) =>
+ x[propertyName]).filter((x) =>
+ x);
}
-
function sortArrayOfObjectsByPropertyValue(arrayOfObjects, propertyName) {
- if (!arrayOfObjects) return null;
+ if (!arrayOfObjects) return null;
- return arrayOfObjects.sort((a, b) => {
- if (a[propertyName] < b[propertyName]) return -1;
- else if (a[propertyName] > b[propertyName]) return 1;
- else return 0;
- });
+ return arrayOfObjects.sort((a, b) => {
+ if (a[propertyName] < b[propertyName]) return -1;
+ if (a[propertyName] > b[propertyName]) return 1;
+ return 0;
+ });
}
function convertGlassPieceNamingForApi(glassArray) {
- if (!glassArray || glassArray.length === 0) return [];
+ if (!glassArray || glassArray.length === 0) return [];
- // check if array already converted. (likely when a session has been saved previously and then reloaded)
- if (glassArray[0].location !== undefined) {
- return glassArray;
- }
+ // check if array already converted. (likely when a session has been saved previously and then reloaded)
+ if (glassArray[0].location !== undefined) {
+ return glassArray;
+ }
- const converted = [];
- glassArray.forEach((glass) => {
- converted.push({
- location: glass.glassLocation,
- name: glass.glassName
- });
- });
- return converted;
+ const converted = [];
+ glassArray.forEach((glass) => {
+ converted.push({
+ location: glass.glassLocation,
+ name: glass.glassName
+ });
+ });
+ return converted;
}
function convertResultsForApi(resultsArray) {
- if (!resultsArray) return [];
- const converted = [];
- resultsArray.forEach((answer) => {
- converted.push({
- location: answer.glassLocation,
- name: answer.glassName,
- result: answer.result
- });
- });
- return converted;
+ if (!resultsArray) return [];
+ const converted = [];
+ resultsArray.forEach((answer) => {
+ converted.push({
+ location: answer.glassLocation,
+ name: answer.glassName,
+ result: answer.result
+ });
+ });
+ return converted;
}
function convertGlassPieceNamingFromApi(glassArray) {
- glassArray.forEach((glass) => {
- glass.glassLocation = glass.glassPiece.location;
- glass.glassName = glass.glassPiece.name;
- delete glass.glassPiece;
- return glass;
- });
- return glassArray;
+ glassArray.forEach((glass) => {
+ glass.glassLocation = glass.glassPiece.location;
+ glass.glassName = glass.glassPiece.name;
+ delete glass.glassPiece;
+ return glass;
+ });
+ return glassArray;
}
function addPricesToLineItems(lineItems, pricingLineItems) {
- lineItems.forEach((lineItem) => {
- if (lineItem.childParts) {
- addPricesToLineItems(lineItem.childParts, pricingLineItems);
- }
+ lineItems.forEach((lineItem) => {
+ if (lineItem.childParts) {
+ addPricesToLineItems(lineItem.childParts, pricingLineItems);
+ }
- const lineItemIndex = pricingLineItems.findIndex(
- (pricingLineItem) => pricingLineItem.partNumber === lineItem.partNumber
- );
+ const lineItemIndex = pricingLineItems.findIndex((pricingLineItem) =>
+ pricingLineItem.partNumber === lineItem.partNumber);
- if(lineItemIndex > -1)
- {
- const pricedLineItem = pricingLineItems[lineItemIndex];
- lineItem.laborAmount = pricedLineItem.laborAmount;
- lineItem.sellingPrice = pricedLineItem.sellingPrice;
- lineItem.kitPrice = pricedLineItem.kitPrice;
- }
- });
- return lineItems;
+ if (lineItemIndex > -1) {
+ const pricedLineItem = pricingLineItems[lineItemIndex];
+ lineItem.laborAmount = pricedLineItem.laborAmount;
+ lineItem.sellingPrice = pricedLineItem.sellingPrice;
+ lineItem.kitPrice = pricedLineItem.kitPrice;
+ }
+ });
+ return lineItems;
}
-function getLineItemQueryStringForPricing(lineItems){
- return lineItems.map((lineItem, index) => {
- let queryStringSnippet = `&LineItems[${index}].partNumber=${lineItem.partNumber}`;
- if (lineItem.childParts) {
- queryStringSnippet += getLineItemQueryStringForPricing(lineItem.childParts);
- }
-
- return queryStringSnippet;
- }).join('');
+function getLineItemQueryStringForPricing(lineItems) {
+ return lineItems.map((lineItem, index) => {
+ let queryStringSnippet = `&LineItems[${index}].partNumber=${lineItem.partNumber}`;
+ if (lineItem.childParts) {
+ queryStringSnippet += getLineItemQueryStringForPricing(lineItem.childParts);
+ }
+
+ return queryStringSnippet;
+ }).join('');
}
function buildQueryStringParameterFromArrayOfComplexObjects(arrayOfObjects, parameterName) {
- let queryStringParameter = "";
- for (let i = 0; i < arrayOfObjects.length; i++) {
- for (const [key, value] of Object.entries(arrayOfObjects[i])) {
- queryStringParameter += `${parameterName}[${i}].${key}=${value}&`;
- }
- }
- // Remove trailing &
- return queryStringParameter.slice(0, -1);
+ let queryStringParameter = '';
+ for (let i = 0; i < arrayOfObjects.length; i++) {
+ for (const [key, value] of Object.entries(arrayOfObjects[i])) {
+ queryStringParameter += `${parameterName}[${i}].${key}=${value}&`;
+ }
+ }
+ // Remove trailing &
+ return queryStringParameter.slice(0, -1);
}
-
diff --git a/src/ux-components/checkbox/checkbox.vue b/src/ux-components/checkbox/checkbox.vue
index 7427730f..cb49358a 100644
--- a/src/ux-components/checkbox/checkbox.vue
+++ b/src/ux-components/checkbox/checkbox.vue
@@ -9,9 +9,9 @@
:id="buttonID"
:tabindex="tabIndex"
:aria-required="isRequired"
+ :checked="isChecked"
@change="handleCheckChange"
- :ref="checkboxName"
- />
+ :ref="checkboxName" />