@mychoice/mychoice-sdk-modules 2.1.67 → 2.1.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +243 -124
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/insurances/car/pages/quote/sections/VehicleOfferCoverage.d.ts +3 -0
- package/dist/cjs/insurances/car/pages/quote/sections/blocks/VehicleOfferCoverage.d.ts +9 -0
- package/dist/cjs/insurances/car/pages/quote/sections/blocks/VehicleOfferCoverages.d.ts +7 -0
- package/dist/cjs/shared/boxes/SelectFormBox/interface.d.ts +2 -1
- package/dist/cjs/shared/sections/quotes/interfaces.d.ts +3 -0
- package/dist/esm/index.js +245 -126
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/insurances/car/pages/quote/sections/VehicleOfferCoverage.d.ts +3 -0
- package/dist/esm/insurances/car/pages/quote/sections/blocks/VehicleOfferCoverage.d.ts +9 -0
- package/dist/esm/insurances/car/pages/quote/sections/blocks/VehicleOfferCoverages.d.ts +7 -0
- package/dist/esm/shared/boxes/SelectFormBox/interface.d.ts +2 -1
- package/dist/esm/shared/sections/quotes/interfaces.d.ts +3 -0
- package/dist/index.d.ts +5 -1
- package/package.json +4 -4
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { ErrorBoundary } from 'react-error-boundary';
|
|
3
|
-
import { AppTypes, TitleForm, TooltipForm, IconDelete, ColorVariablesTypes, InputTypes, InputForm, InputFormPhone, InputFormEmail, InputFormLicence, SelectForm, getFormattedDate, DateTypes, getDateOptions, ButtonForm,
|
|
4
|
-
import { useStoreAppConfig, CarQuoteDataHandler, useStorePartner, useStoreDeviceType, useStoreAppLoader, useStoreAppModal, StoreConfigAppModalActionTypes, useHandlerPostal, useHandlerCarMake, useHandlerCarModel,
|
|
3
|
+
import { AppTypes, TitleForm, TooltipForm, IconDelete, ColorVariablesTypes, InputTypes, InputForm, InputFormPhone, InputFormEmail, InputFormLicence, SelectForm, getFormattedDate, DateTypes, getDateOptions, ButtonForm, defaultBrokerPhone, DriverPriorityTypes, SizeTypes, ButtonBase, CategoryTypes, ColorTypes, defaultLocalIndex, liabilityOptions, coverageOptions, lossOfUseOptions, liabilityForDamageOptions, limitedWaiverOfDepreciationOptions, OfferHeader, OfferPrice, ButtonTypes, ButtonVariantTypes, IconDropdownArrow, OfferDetail, CompanyRoleTypes, OperationHoursInfo, InsuranceTypes, HeaderNavGroup, ButtonMenu, DeviceTypes, IconLoaderPrimary, getInsuranceType, RequestStatusTypes, formatPostalCode, IconLoaderSecondary, postalCodeFormat, useEffectOnce, carCondition, carStatus, carWinterTiresCheck, carKeepPlace, carUsagePurpose, firstDriveDistanceList, dailyDriveBusinessDistanceList, yearlyDriveDistanceList, numberWithCommas, VehiclePrimaryUseTypes, comprehensiveCoverage, collisionCoverage, maritalStatusOptions, subYearsFromDate, occupationOptions, genderOptions, applicantRelationshipOptions, addYearsToDate, checkDateIsSpecial, DriverLicenceTypes, getDifferenceInYears, getLicenceTypeOptions, getDisabledLicenceTypes, yesNoOptions, addDaysToDate, getMinDate, CheckboxForm, getMinDateByYears, compareDates, insuranceCancellationReasonOptions, DriverListTypes, licenceSuspensionsReasonOptions, trafficTicketsGroupOptions, ValidationStatusTypes, QuoteEdit, homeOwnerTypeOptions, tenantBuildingStructureOptions, condoBuildingStructureOptions, homeBuildingStructureOptions, residentsOptions, insuredYearsOptions, getInsuranceYearsOptions, ApplicantListTypes, claimTypeOptions, exteriorFinishOptions, constructionTypeOptions, garageTypeOptions, getNumericOptions, fireHallDistanceOptions, fireHydrantDistanceOptions, primaryHeatingTypeOptions, auxHeatingTypeOptions, InfoMessage, ppOptions, homeCoverageOptions, homeLiabilityOptions, lifeInsuranceTypeOptions, lifeInsuranceOntarioTypeOptions, lifeCoverageOptions, smokerOptions, MychoiceStep, Step, IconClock, ButtonArrow, DirectionTypes, ButtonTabArrow, ButtonTab, ButtonTabMobile, NavigationCar, NavigationPerson, NavigationDiscount, NavigationQuotes, NavigationAddress, NavigationProperty, ModalTypes } from '@mychoice/mychoice-sdk-components';
|
|
4
|
+
import { useStoreAppConfig, useStoreFormCarVehicle, useStoreFormCarDriverBase, useStoreFormCarDiscount, StoreFormCarDiscountActionTypes, useStoreFormCarQuote, CarQuoteDataHandler, useValidationCarDiscount, StoreFormCarVehicleActionTypes, useStorePartner, useStoreDeviceType, useStoreAppLoader, useStoreAppModal, StoreConfigAppModalActionTypes, useHandlerPostal, useHandlerCarMake, useHandlerCarModel, useProvince, useValidationVehicle, StoreFormCarDriverBaseActionTypes, useStoreFormCarConfig, useStoreFormCarDriverInfo, StoreFormCarDriverInfoActionTypes, useStoreFormCarDriverLicence, addDayToDate, StoreFormCarDriverLicenceActionTypes, useStoreFormCarDriverInsurance, StoreFormCarDriverInsuranceActionTypes, useStoreFormCarDriverCancellation, StoreFormCarDriverCancellationActionTypes, useStoreFormCarDriverSuspension, StoreFormCarDriverSuspensionActionTypes, useStoreFormCarDriverAccident, StoreFormCarDriverAccidentActionTypes, useStoreFormCarDriverTicket, StoreFormCarDriverTicketActionTypes, useValidationDriver, useHandlerCarQuoterEmail, useStoreFormHomeDwelling, useStoreFormHomePostal, useStoreFormHomeApplicantBase, StoreFormHomePostalActionTypes, StoreFormHomeDwellingActionTypes, StoreConfigAppConfigActionTypes, StoreFormHomeApplicantBaseActionTypes, useValidationAddress, useStoreFormHomeApplicantInfo, useStoreFormHomeDiscount, StoreFormHomeDiscountActionTypes, StoreFormHomeApplicantInfoActionTypes, useStoreFormHomeApplicantInsurance, StoreFormHomeApplicantInsuranceActionTypes, useStoreFormHomeApplicantCancellation, StoreFormHomeApplicantCancellationActionTypes, useStoreFormHomeApplicantClaim, StoreFormHomeApplicantClaimActionTypes, useValidationApplicant, useValidationDwelling, useStoreFormHomeQuote, HomeQuoteDataHandler, useValidationHomeDiscount, useHandlerHomeQuoterEmail, useStoreFormLifeCoverage, StoreFormLifeCoverageActionTypes, useValidationCoverage, useStoreFormLifeQuote, useStoreFormLifeApplicant, LifeQuoteDataHandler, useValidationLifeApplicant, useHandlerLifeQuoterEmail, StoreFormLifeApplicantActionTypes, useStoreFormCarPostal, useStoreFormLifePostal, ClearFormDataHandler, useStoreAppDevice, useStoreClient, useHandlerAuth, useHandlerPartner, StoreConfigAppLoaderActionTypes, StoreFormCarConfigActionTypes, StoreFormCarPostalActionTypes, StoreFormCarQuoteActionTypes, StoreFormHomeQuoteActionTypes, StoreFormLifePostalActionTypes, StoreFormLifeQuoteActionTypes, StoreClientActionTypes, StoreConfigAppDeviceActionTypes, StoreProvider, initHttpResponse } from '@mychoice/mychoice-sdk-store';
|
|
5
5
|
import { useNavigate, useLocation, BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
|
6
6
|
import React, { useState, useCallback, useEffect, useRef, useMemo } from 'react';
|
|
7
7
|
import { random } from 'lodash';
|
|
@@ -77,8 +77,8 @@ InputFormLicenceBox.defaultProps = {
|
|
|
77
77
|
};
|
|
78
78
|
|
|
79
79
|
const SelectFormBox = (props) => {
|
|
80
|
-
const { className, defaultValue, disabled, error, name, title, description, onChange, errorMessage, hintMessage, isRemovable, onIconClick, options, groupOptions, placeholder, autoSelectIfValueIsOutOfOptions, } = props;
|
|
81
|
-
return (jsx(Container, { name: name, className: ` ${className} ${error ? 'error' : ''}`, title: title, description: description, errorMessage: errorMessage, hintMessage: hintMessage, isRemovable: isRemovable, onIconClick: onIconClick, children: jsx(SelectForm, { className: "input-form", name: name, defaultValue: defaultValue, onChange: onChange, options: options || [], groupOptions: groupOptions || [], placeholder: placeholder, disabled: disabled, autoSelectIfValueIsOutOfOptions: autoSelectIfValueIsOutOfOptions, error: error }) }));
|
|
80
|
+
const { className, defaultValue, disabled, error, name, title, description, onChange, errorMessage, hintMessage, isRemovable, onIconClick, options, groupOptions, placeholder, autoSelectIfValueIsOutOfOptions, size, } = props;
|
|
81
|
+
return (jsx(Container, { name: name, className: ` ${className} ${error ? 'error' : ''}`, title: title, description: description, errorMessage: errorMessage, hintMessage: hintMessage, isRemovable: isRemovable, onIconClick: onIconClick, children: jsx(SelectForm, { className: "input-form", name: name, defaultValue: defaultValue, onChange: onChange, options: options || [], groupOptions: groupOptions || [], placeholder: placeholder, disabled: disabled, autoSelectIfValueIsOutOfOptions: autoSelectIfValueIsOutOfOptions, error: error, size: size }) }));
|
|
82
82
|
};
|
|
83
83
|
SelectFormBox.defaultProps = {
|
|
84
84
|
className: '',
|
|
@@ -139,10 +139,246 @@ SwitchButtonBox.defaultProps = {
|
|
|
139
139
|
items: [],
|
|
140
140
|
};
|
|
141
141
|
|
|
142
|
-
const
|
|
142
|
+
const getSelectedOption = (options, val) => {
|
|
143
|
+
if (typeof val === 'boolean') {
|
|
144
|
+
return options.find(({ value }) => val === value)?.value || false;
|
|
145
|
+
}
|
|
146
|
+
if (typeof val === 'number') {
|
|
147
|
+
return options.find((option) => option.value?.toString() === val.toString())?.value;
|
|
148
|
+
}
|
|
149
|
+
return options.find((option) => option.value === val)?.value;
|
|
150
|
+
};
|
|
151
|
+
const getErrorMessage = (value, inValidation = false, message = '') => {
|
|
152
|
+
if (inValidation) {
|
|
153
|
+
if (value === null) {
|
|
154
|
+
return 'This field is required.';
|
|
155
|
+
}
|
|
156
|
+
if (typeof value === 'boolean') {
|
|
157
|
+
return '';
|
|
158
|
+
}
|
|
159
|
+
return !value ? 'This field is required.' : message;
|
|
160
|
+
}
|
|
161
|
+
return '';
|
|
162
|
+
};
|
|
163
|
+
const getDateErrorMessage = (values, inValidation = false) => {
|
|
164
|
+
const emptyValues = values.filter((value) => !value);
|
|
165
|
+
if (inValidation) {
|
|
166
|
+
if (emptyValues.length > 1) {
|
|
167
|
+
return 'These fields are required.';
|
|
168
|
+
}
|
|
169
|
+
if (emptyValues.length === 1) {
|
|
170
|
+
return 'This field is required.';
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return '';
|
|
174
|
+
};
|
|
175
|
+
const formatPhoneObject = (phone) => {
|
|
176
|
+
const phoneToArray = (phone || defaultBrokerPhone).split(',');
|
|
177
|
+
const onlyNumbers = phoneToArray[0].replace(/\D/g, '');
|
|
178
|
+
let phoneNumber;
|
|
179
|
+
if (onlyNumbers.length < 11) {
|
|
180
|
+
phoneNumber = `1${onlyNumbers}`;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
phoneNumber = onlyNumbers;
|
|
184
|
+
}
|
|
185
|
+
const phoneToNumbers = Number(phoneNumber).toString();
|
|
186
|
+
const phoneWithoutSpecialKey = phoneToNumbers.length > 10
|
|
187
|
+
? phoneToNumbers.replace(/(\d{1})(\d{3})(\d{3})(\d{4})/, '$1-$2-$3-$4')
|
|
188
|
+
: phoneToNumbers.replace(/(\d{1})(\d{3})(\d{3})(\d{3})/, '$1-$2-$3-$4');
|
|
189
|
+
const title = phoneToArray.length < 2 ? phoneWithoutSpecialKey : `${phoneWithoutSpecialKey} x${phoneToArray[1]}`;
|
|
190
|
+
const specialKeys = phoneToArray[1] ? `,${phoneToArray[1]}` : '';
|
|
191
|
+
return {
|
|
192
|
+
number: phoneWithoutSpecialKey,
|
|
193
|
+
title,
|
|
194
|
+
specialKeys,
|
|
195
|
+
};
|
|
196
|
+
};
|
|
197
|
+
const formatTitleToCapital = (name) => name.replace(/-/g, ' ')
|
|
198
|
+
.replace(/\+/g, ' ').replace(/(\b[a-z](?!\s))/g, (letter) => letter.toUpperCase());
|
|
199
|
+
const capitalize = (text) => text.charAt(0).toUpperCase() + text.slice(1);
|
|
200
|
+
|
|
201
|
+
const BlockVehLinks = () => {
|
|
202
|
+
const { vehicleState: { items: vehicles } } = useStoreFormCarVehicle();
|
|
203
|
+
const { driverState: { items: drivers } } = useStoreFormCarDriverBase();
|
|
204
|
+
const { discountState: { vehlinks }, dispatchDiscountState } = useStoreFormCarDiscount();
|
|
205
|
+
const driverOptions = drivers.map((driver, index) => ({ name: driver.firstName, value: index }));
|
|
206
|
+
const handleDriverChange = (vehicleIndex) => ({ value }) => {
|
|
207
|
+
dispatchDiscountState({
|
|
208
|
+
type: StoreFormCarDiscountActionTypes.FormCarDiscountVehlinkSelect,
|
|
209
|
+
payload: {
|
|
210
|
+
driverIndex: value,
|
|
211
|
+
vehicleIndex,
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
};
|
|
215
|
+
if (drivers.length > 1) {
|
|
216
|
+
return (jsxs(Fragment, { children: [jsx(LabelFormBox, { title: "Since there are multiple drivers in this quote,\n please tell us who drives which vehicle the most.\n Please provide an answer that best suits your situation." }), vehicles.map((vehicle, index) => {
|
|
217
|
+
const { year, make, model } = vehicle;
|
|
218
|
+
const selectedDriver = vehlinks.find((vehlink) => (vehlink.vehicleIndex === index && vehlink.priority === DriverPriorityTypes.Prn));
|
|
219
|
+
return (jsx(SelectFormBox, { title: `Who is the principal driver of the ${year} ${make} ${model} ?`, onChange: handleDriverChange(index), options: driverOptions, defaultValue: selectedDriver?.driverIndex || 0, name: `vehlink-${index}` }, `vehlink-${index}`));
|
|
220
|
+
})] }));
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
const BlockNextPageInfo$2 = () => {
|
|
143
226
|
const { appConfigState: { appType } } = useStoreAppConfig();
|
|
227
|
+
const isTheBig = appType === AppTypes.TheBig;
|
|
228
|
+
return (jsx("div", { className: "next-page-info", children: isTheBig ? (jsx("div", { className: "privacy-policy", children: jsxs("p", { children: [jsx("span", { children: "DISCLAIMER: " }), "As insurance premiums are based on the information you provide it is important that it be 100% accurate and up to date. If you are not sure it is best to check before completing your quote."] }) })) : (jsxs(Fragment, { children: [jsx("h5", { children: "On the next page, you will also be able to:" }), jsxs("div", { className: "next-page-points", children: [jsx("p", { children: "1. See what rates insurance carriers are offering" }), jsx("p", { children: "2. Get in touch with a broker and secure your rate" }), jsx("p", { children: "3. Potentially save more by speaking with a broker" })] }), jsx("div", { className: "privacy-policy", children: jsxs("p", { children: ["Once you submit this form, you are agreeing to have your insurance quote sent to you via email and My Choice will provide your contact information to one of our trusted broker partners, who will contact you after your quote is complete to further assist you in securing your best rate. For more details, see our", jsx("a", { href: "https://www.mychoice.ca/privacy-policy/", children: " Privacy Policy" }), "."] }) })] })) }));
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
const BlockSubmit$2 = ({ className, label, buttonSize, isRecalc = false, }) => {
|
|
232
|
+
const { quoteState: { isRequested, quoteConfirm } } = useStoreFormCarQuote();
|
|
233
|
+
const { discountState: { isValid } } = useStoreFormCarDiscount();
|
|
234
|
+
const { appConfigState: { localIndex, insuranceType } } = useStoreAppConfig();
|
|
235
|
+
const navigate = useNavigate();
|
|
236
|
+
const { postRequestQuote } = CarQuoteDataHandler();
|
|
237
|
+
const { carDiscountFormValidate } = useValidationCarDiscount();
|
|
238
|
+
const handleGetQuotesClick = () => {
|
|
239
|
+
if (!isValid) {
|
|
240
|
+
carDiscountFormValidate(false, () => postRequestQuote(isRecalc, quoteConfirm));
|
|
241
|
+
}
|
|
242
|
+
else if (!isRequested) {
|
|
243
|
+
postRequestQuote(isRecalc, quoteConfirm);
|
|
244
|
+
}
|
|
245
|
+
else if (!isRecalc) {
|
|
246
|
+
navigate(`/${localIndex || defaultLocalIndex}/${insuranceType}/quotes`);
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
return (jsx(ButtonBase, { className: className, size: buttonSize, category: CategoryTypes.Filled, onClick: handleGetQuotesClick, color: ColorTypes.Primary, label: label }));
|
|
250
|
+
};
|
|
251
|
+
BlockSubmit$2.defaultProps = {
|
|
252
|
+
buttonSize: SizeTypes.Large,
|
|
253
|
+
label: 'Get Your Quotes',
|
|
254
|
+
className: '',
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
const VehicleOfferCoverages = ({ coverages, nonStandardCoverages, }) => {
|
|
258
|
+
const { vehicleState, dispatchVehicleState } = useStoreFormCarVehicle();
|
|
259
|
+
const { comprehensive, collision, liability, lossofuse, liabilityfordamage, limitedwaiverofdepreciation } = vehicleState.items[vehicleState.activeIndex];
|
|
260
|
+
const vehicle_names = vehicleState.items.map(({ year, make, model }) => [`${year} ${make} ${model}`]);
|
|
261
|
+
const isLeased = vehicleState.items.some((item) => item.leased);
|
|
262
|
+
const handleComprehensiveChange = ({ value }) => {
|
|
263
|
+
for (let i = 0; i < vehicleState.items.length; i += 1) {
|
|
264
|
+
dispatchVehicleState({
|
|
265
|
+
type: StoreFormCarVehicleActionTypes.FormCarVehicleSelect,
|
|
266
|
+
payload: {
|
|
267
|
+
vehicleIndex: i,
|
|
268
|
+
},
|
|
269
|
+
});
|
|
270
|
+
dispatchVehicleState({
|
|
271
|
+
type: StoreFormCarVehicleActionTypes.FormCarComprehensiveCoverageSelect,
|
|
272
|
+
payload: { coverage: !!Number(value), deductible: value },
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
const handleLiabilityChange = ({ value }) => {
|
|
277
|
+
for (let i = 0; i < vehicleState.items.length; i += 1) {
|
|
278
|
+
dispatchVehicleState({
|
|
279
|
+
type: StoreFormCarVehicleActionTypes.FormCarVehicleSelect,
|
|
280
|
+
payload: {
|
|
281
|
+
vehicleIndex: i,
|
|
282
|
+
},
|
|
283
|
+
});
|
|
284
|
+
dispatchVehicleState({
|
|
285
|
+
type: StoreFormCarVehicleActionTypes.FormCarLiabilityCoverageSelect,
|
|
286
|
+
payload: { coverage: true, limit: value },
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
const handleCollisionChange = ({ value }) => {
|
|
291
|
+
for (let i = 0; i < vehicleState.items.length; i += 1) {
|
|
292
|
+
dispatchVehicleState({
|
|
293
|
+
type: StoreFormCarVehicleActionTypes.FormCarVehicleSelect,
|
|
294
|
+
payload: {
|
|
295
|
+
vehicleIndex: i,
|
|
296
|
+
},
|
|
297
|
+
});
|
|
298
|
+
dispatchVehicleState({
|
|
299
|
+
type: StoreFormCarVehicleActionTypes.FormCarCollisionCoverageSelect,
|
|
300
|
+
payload: { coverage: !!Number(value), deductible: value },
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
const handleLossOfUseChange = ({ value }) => {
|
|
305
|
+
for (let i = 0; i < vehicleState.items.length; i += 1) {
|
|
306
|
+
dispatchVehicleState({
|
|
307
|
+
type: StoreFormCarVehicleActionTypes.FormCarVehicleSelect,
|
|
308
|
+
payload: {
|
|
309
|
+
vehicleIndex: i,
|
|
310
|
+
},
|
|
311
|
+
});
|
|
312
|
+
dispatchVehicleState({
|
|
313
|
+
type: StoreFormCarVehicleActionTypes.FormCarLossOfUseCoverageSelect,
|
|
314
|
+
payload: { coverage: !!Number(value), limit: value },
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
const handleLiaiblityForDamageChange = ({ value }) => {
|
|
319
|
+
for (let i = 0; i < vehicleState.items.length; i += 1) {
|
|
320
|
+
dispatchVehicleState({
|
|
321
|
+
type: StoreFormCarVehicleActionTypes.FormCarVehicleSelect,
|
|
322
|
+
payload: {
|
|
323
|
+
vehicleIndex: i,
|
|
324
|
+
},
|
|
325
|
+
});
|
|
326
|
+
dispatchVehicleState({
|
|
327
|
+
type: StoreFormCarVehicleActionTypes.FormCarLiabilityForDamageCoverageSelect,
|
|
328
|
+
payload: { coverage: !!Number(value), limit: value },
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
const handleLimitedWaiverOfDepreciationChange = ({ value }) => {
|
|
333
|
+
for (let i = 0; i < vehicleState.items.length; i += 1) {
|
|
334
|
+
dispatchVehicleState({
|
|
335
|
+
type: StoreFormCarVehicleActionTypes.FormCarVehicleSelect,
|
|
336
|
+
payload: {
|
|
337
|
+
vehicleIndex: i,
|
|
338
|
+
},
|
|
339
|
+
});
|
|
340
|
+
dispatchVehicleState({
|
|
341
|
+
type: StoreFormCarVehicleActionTypes.FormCarLimitedWaiverOfDepreciationCoverageSelect,
|
|
342
|
+
payload: { coverage: !!Number(value), limit: value },
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
};
|
|
346
|
+
const getCoveragePremium = (code) => {
|
|
347
|
+
const coverage = coverages.find((coverage) => coverage.code === code);
|
|
348
|
+
return coverage ? `$${coverage.annualPremium.toFixed(2)}` : '-';
|
|
349
|
+
};
|
|
350
|
+
const doesCoverageExist = (code) => {
|
|
351
|
+
return coverages.some((coverage) => coverage.code === code);
|
|
352
|
+
};
|
|
353
|
+
const isNonStandardCoverageActive = (name) => {
|
|
354
|
+
if (!nonStandardCoverages)
|
|
355
|
+
return false;
|
|
356
|
+
return nonStandardCoverages[name] === true;
|
|
357
|
+
};
|
|
358
|
+
const getTPBIandTPPD = () => {
|
|
359
|
+
const tpbi = coverages.find((coverage) => coverage.code === 'TPBI');
|
|
360
|
+
const tppd = coverages.find((coverage) => coverage.code === 'TPPD');
|
|
361
|
+
if (!tpbi || !tppd) {
|
|
362
|
+
return '-';
|
|
363
|
+
}
|
|
364
|
+
const total = tpbi.annualPremium + tppd.annualPremium;
|
|
365
|
+
return `$${total.toFixed(2)}`;
|
|
366
|
+
};
|
|
367
|
+
const getSumOfPremiums = () => {
|
|
368
|
+
const premiums = coverages.map((coverage) => coverage.annualPremium);
|
|
369
|
+
const total = premiums.reduce((acc, premium) => {
|
|
370
|
+
return acc + Number(premium);
|
|
371
|
+
}, 0);
|
|
372
|
+
return `$${total.toFixed(2)}`;
|
|
373
|
+
};
|
|
374
|
+
return (jsxs(Fragment, { children: [jsx("div", { className: "offer-coverages-container", children: jsxs("table", { className: "offer-coverages-table", children: [jsxs("tr", { className: "table-header", children: [jsx("td", { children: vehicle_names.join(', ') }), jsx("td", { children: "Selection" }), jsx("td", { children: "Premium" })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) }), jsxs("tr", { children: [jsxs("td", { children: ["Third Party Liability Coverage", jsx("div", { style: { display: 'inline-block', marginLeft: '5px' }, children: jsx(TooltipForm, { id: "my-tooltip", description: "Third-party liability coverage is mandatory in Ontario and protects you if you're found at fault for injuring or killing someone or damaging their property while driving. This includes people in other vehicles, pedestrians, cyclists, and even passengers in your own car, as well as property like fences, buildings, street signs, and light poles. If you’re sued, this coverage helps pay for legal defence, settlements, and any court-ordered payments. The minimum required coverage is $200,000, but that amount often isn’t enough—most drivers choose at least $2 million to avoid having to pay out-of-pocket if costs exceed the limit. This is a mandatory coverage in Ontario. Talk to your broker to ensure you have the right amount of protection." }) })] }), jsx("td", { children: jsx(SelectFormBox, { options: liabilityOptions, name: "liability-limit", onChange: handleLiabilityChange, defaultValue: getSelectedOption(liabilityOptions, liability.coverage ? liability.limit : 1000000), title: "", description: "", placeholder: "Select from the list", autoSelectIfValueIsOutOfOptions: false, size: SizeTypes.Small, className: "coverages-select-input" }) }), jsx("td", { children: getTPBIandTPPD() })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) }), jsxs("tr", { children: [jsxs("td", { children: ["Direct Compensation - Property Damange Coverage", jsx("div", { style: { display: 'inline-block', marginLeft: '5px' }, children: jsx(TooltipForm, { id: "my-tooltip", description: "Third - Party Liability Direct Compensation responds when you are determined to be not at-fault in an accident with another vehicle, and covers the cost of damage to your vehicle (or actual cash value payout), it's equipment, contents, loss of use, and other associated incidentals such as towing fees and lot fees. This is considered an optional coverage, and it is highly recommended that you do not remove it. If your vehicle is financed or leased, the lienholder/lessor must agree to allow you to remove it. Should you remove it, you must also remove collision or all perils coverage. You will be entirely out-of-pocket in a not-at-fault accident and are legally restricted from claiming reimbursement (suing) the other vehicle owner or their insurer. Chat to your broker for more details about this coverage." }) })] }), jsx("td", { children: "$0 Deductible" }), jsx("td", { children: getCoveragePremium('TPDC') })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) }), jsxs("tr", { children: [jsxs("td", { children: ["Accident Benefits Coverage", jsx("div", { style: { display: 'inline-block', marginLeft: '5px' }, children: jsx(TooltipForm, { id: "my-tooltip", description: 'Accident Benefits is a mandatory coverage that responds when there is injury or death in an accident, regardless of fault, and for all affected individuals. It provides a core series of benefits with the capacity to increase coverage values, along with a menu of optional additional benefits that can be added on. The core and optional coverages must be thoroughly reviewed and evaluated, and decisions made based on your own personal circumstances and needs. Chat to your broker for more details about this coverage.' }) })] }), jsx("td", { children: "Included" }), jsx("td", { children: getCoveragePremium('AB') })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) }), jsxs("tr", { children: [jsxs("td", { children: ["Uninsured Automobile Coverage", jsx("div", { style: { display: 'inline-block', marginLeft: '5px' }, children: jsx(TooltipForm, { id: "my-tooltip", description: 'Uninsured Motorist Coverage is a mandatory coverage which responds when you are not at-fault in an accident with an uninsured or unidentified (hit-and-run) vehicle, and have incurred bodily injuries, death, or damage to your property, and the offending vehicle owner cannot be found, of if identified, cannot adequately compensate you. Coverage is capped to match the province minimum liability limit of $200,000. Due to the low coverage value, it is highly recommended to ensure inclusion of the OPCF44 Family Protection Coverage endorsement for additional protection. Chat to your broker for more details about this coverage.' }) })] }), jsx("td", { children: "Included" }), jsx("td", { children: getCoveragePremium('UA') })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) }), jsxs("tr", { children: [jsxs("td", { children: ["Comprehensive Coverage", jsx("div", { style: { display: 'inline-block', marginLeft: '5px' }, children: jsx(TooltipForm, { id: "my-tooltip", description: 'Comprehensive coverage responds to types of damages ( repair or actual cash value payout) incurred by your vehicle when it is not actively being driven. Examples would be fire, theft, vandalism, glass breakage, and weather-related losses. While considered an optional coverage, it is highly recommended. Should your vehicle be financed or leased, the lienholder/lessor will not allow you to leave this coverage out and will impose a satisfactory deductible to meet their requirements.' }) })] }), jsx("td", { children: jsx(SelectFormBox, { options: coverageOptions, name: "comprehensive-coverage", onChange: handleComprehensiveChange, defaultValue: getSelectedOption(coverageOptions, comprehensive.coverage ? comprehensive.deductible : 0), title: "", description: "", placeholder: "Select from the list", autoSelectIfValueIsOutOfOptions: false, size: SizeTypes.Small, className: "coverages-select-input" }) }), jsx("td", { children: getCoveragePremium('CMP') })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) }), jsxs("tr", { children: [jsxs("td", { children: ["Collision Coverage", jsx("div", { style: { display: 'inline-block', marginLeft: '5px' }, children: jsx(TooltipForm, { id: "my-tooltip", description: 'Collision coverage responds to your vehicle damages (repair or actual cash value payout) in the event you collide with another vehicle or object in the course of its use or operation, and is determined to be at-fault. While considered an optional coverage, it is highly recommended. Should your vehicle be financed or leased, the lienholder/lessor will not allow you to leave this coverage out and will impose a satisfactory deductible to meet their requirements. Chat to your broker for more details about this coverage.' }) })] }), jsx("td", { children: jsx(SelectFormBox, { options: coverageOptions, name: "collision-coverage", onChange: handleCollisionChange, defaultValue: getSelectedOption(coverageOptions, collision.coverage ? collision.deductible : 0), title: "", description: "", placeholder: "Select from the list", autoSelectIfValueIsOutOfOptions: false, size: SizeTypes.Small, className: "coverages-select-input" }) }), jsx("td", { children: getCoveragePremium('COL') })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) }), doesCoverageExist('5') && (jsxs(Fragment, { children: [jsxs("tr", { children: [jsx("td", { children: "Permission to Rent or Lease (OPCF 5)" }), jsx("td", { children: "Included" }), jsx("td", { children: getCoveragePremium('5') })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) })] })), isNonStandardCoverageActive(20) && (jsx(Fragment, { children: jsxs("tr", { children: [jsxs("td", { children: ["Loss of Use (OPCF 20)", jsx("div", { style: { display: 'inline-block', marginLeft: '5px' }, children: jsx(TooltipForm, { id: "my-tooltip", description: 'The OPCF20 Loss of Use / Transportation Replacement endorsement responds when you are determined to be at-fault for an accident, or have a comprehensive claim, and need replacement transportation while your vehicle is out-of-service being repaired, or until it is deemed to be a total loss and a settlement offer is made by your insurer. Most often used to pay for a temporary replacement vehicle rental, it can also be used to compensate for other acceptable forms of travel. Depending on the insurer, the coverage limits available may be a dollar amount or a time amount, and you must have collision and comprehensive, or all perils coverage to include this endorsement. While it is optional, it is highly recommended, and careful consideration must be given to the coverage amounts chosen, as repair delays can quickly exhaust your policy limits, leaving you out-of-pocket for transportation expenses. Chat to your broker for more details about this coverage.' }) })] }), jsx("td", { style: { paddingBottom: '7px' }, children: jsx(SelectFormBox, { options: lossOfUseOptions, name: "loss-of-use", onChange: handleLossOfUseChange, defaultValue: getSelectedOption(lossOfUseOptions, lossofuse.coverage ? lossofuse.limit : 0), title: "", description: "", placeholder: "Select from the list", autoSelectIfValueIsOutOfOptions: false, size: SizeTypes.Small, className: "coverages-select-input" }) }), jsx("td", { rowSpan: doesCoverageExist('PAK6') ? 2 : 1, children: doesCoverageExist('PAK6') ? getCoveragePremium('PAK6') : getCoveragePremium('20') })] }) })), isNonStandardCoverageActive(27) && (jsxs(Fragment, { children: [jsxs("tr", { children: [jsxs("td", { children: ["Liability for Damage for Non-Owned Cars (OPCF 27)", jsx("div", { style: { display: 'inline-block', marginLeft: '5px' }, children: jsx(TooltipForm, { id: "my-tooltip", description: 'The OPCF27 Liability for Damage to Non-Owned Automobile(s) endorsement responds when you rent or borrow a vehicle, and want to extend your coverages to that vehicle. Often used for special occasion rentals or vacation vehicle rentals. Full liability and physical damage coverages must be on your insured vehicle for this endorsement to apply, and a deductible is applicable. Careful consideration must be given in choosing a coverage amount that adequately covers the value of the vehicle you are expecting to rent or borrow. While considered optional, it is highly recommended, and often "packaged" with the OPCF20 Loss of Use / Transportation Replacement coverage by many insurers. Chat to your broker for more details about this coverage.' }) })] }), jsx("td", { children: jsx(SelectFormBox, { options: liabilityForDamageOptions, name: "liaiblity-for-damage", onChange: handleLiaiblityForDamageChange, defaultValue: getSelectedOption(liabilityForDamageOptions, liabilityfordamage.coverage ? liabilityfordamage.limit : 0), title: "", description: "", placeholder: "Select from the list", autoSelectIfValueIsOutOfOptions: false, size: SizeTypes.Small, className: "coverages-select-input" }) }), !doesCoverageExist('PAK6') && jsx("td", { children: getCoveragePremium('27') })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) })] })), isNonStandardCoverageActive('ACCW') && (jsxs(Fragment, { children: [jsxs("tr", { children: [jsxs("td", { children: ["Accident Waiver or Forgiveness (OPCF 39)", jsx("div", { style: { display: 'inline-block', marginLeft: '5px' }, children: jsx(TooltipForm, { id: "my-tooltip", description: "The OPCF39 Accident Waiver/Forgiveness endorsement responds by protecting your existing driving record from being negatively impacted by a single, partial at-fault or fully at-fault accident, and must be on the policy before the accident. The benefit of the coverage continues as long as you stay with the same insurer, as it's not transferable should you move to another insurance company. Subsequent at-fault or partial at-fault accidents will not have the protection and will be adversely rated accordingly. Eligibility, terms, conditions, and formulations used can vary significantly between insurers, so careful review and consideration are essential. While purchasing this endorsement is optional, it is highly recommended as the alternative of being accident-rated for several years will be significantly higher in premiums than the cost of the endorsement. Chat to your broker for more details about this coverage." }) })] }), jsx("td", { children: "Included" }), jsx("td", { children: getCoveragePremium('ACCW') })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) })] })), isNonStandardCoverageActive(43) && (jsxs(Fragment, { children: [jsxs("tr", { children: [jsxs("td", { children: ["Limited waiver of depreciation (OPCF ", isLeased ? '43A' : '43', ")", jsx("div", { style: { display: 'inline-block', marginLeft: '5px' }, children: jsx(TooltipForm, { id: "my-tooltip", description: 'The OPCF43/43A Removing Depreciation Deduction / Limited Waiver of Depreciation endorsement responds by protecting your original purchase/lease price of a "new" vehicle (as evidenced by a bill of sale or lease agreement) from depreciation should the vehicle be a total loss from an insured peril. Only new vehicles, and in some cases "demo\'s" with limited mileage are eligible, and the endorsement must be added immediately upon the vehicle delivery. Coverage durations available vary between insurers, generally ranging from 24 months to 60 months from the possession date of the vehicle. While an optional coverage, it is highly recommended as, without it, a total loss settlement based on actual cash value could leave you contractually owing money to a lienholder or lessor. Chat to your broker for more details about this coverage.' }) })] }), jsx("td", { children: jsx(SelectFormBox, { options: limitedWaiverOfDepreciationOptions, name: "liaiblity-for-damage", onChange: handleLimitedWaiverOfDepreciationChange, defaultValue: getSelectedOption(limitedWaiverOfDepreciationOptions, limitedwaiverofdepreciation.coverage ? limitedwaiverofdepreciation.limit : 0), title: "", description: "", placeholder: "Select from the list", autoSelectIfValueIsOutOfOptions: false, size: SizeTypes.Small, className: "coverages-select-input" }) }), jsx("td", { children: getCoveragePremium('43') })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) })] })), jsxs("tr", { children: [jsxs("td", { children: ["Family Protection (OPCF 44)", jsx("div", { style: { display: 'inline-block', marginLeft: '5px' }, children: jsx(TooltipForm, { id: "my-tooltip", description: 'The OPCF44 Family Protection Endorsement responds when you are determined to be not at-fault in a vehicle accident, and your claim / civil suit against the offending vehicle owner is not adequately satisfied as they are unidentified, uninsured, or underinsured. This endorsement bridges their coverages (if any) up to the full limits of the OPCF44 coverage on your policy. While considered an optional coverage, it is highly recommended as a form of self protection, and is extremely low in cost. Chat to your broker for more details about this coverage.' }) })] }), jsx("td", { children: "Included" }), jsx("td", { children: getCoveragePremium('44') })] }), jsx("tr", { children: jsx("td", { colSpan: 3, children: jsx("div", { className: "divider" }) }) }), jsxs("tr", { className: "premium-total", children: [jsx("td", { children: "Annual Premium" }), jsx("td", {}), jsx("td", { children: getSumOfPremiums() })] })] }) }), jsx("div", { style: { display: 'flex', flexDirection: 'column' }, children: jsx(BlockSubmit$2, { className: "mychoice recalculate", label: "Recalculate Quote", buttonSize: SizeTypes.Medium, isRecalc: true }) })] }));
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
const OfferSection = ({ offerCompany, brokerCompany, offerPrice, phoneNumber, isBestOffer, operationHours = {}, redirectUrl, fulfillmentUrl, coverages, nonStandardCoverages, }) => {
|
|
378
|
+
const { appConfigState: { appType }, } = useStoreAppConfig();
|
|
144
379
|
const { postRequestQuoteOnliaUrl } = CarQuoteDataHandler();
|
|
145
380
|
const isTheBig = appType === AppTypes.TheBig;
|
|
381
|
+
const isMyChoice = appType === AppTypes.MyChoice;
|
|
146
382
|
const mychoiceCls = appType === AppTypes.MyChoice ? 'mychoice' : '';
|
|
147
383
|
const { weekdayHours, saturdayHours, sundayHours } = operationHours;
|
|
148
384
|
const [detailsIsOpen, setDetailsIsOpenIsOpen] = useState(isBestOffer ?? false);
|
|
@@ -157,9 +393,7 @@ const OfferSection = ({ offerCompany, brokerCompany, offerPrice, phoneNumber, is
|
|
|
157
393
|
}
|
|
158
394
|
postRequestQuoteOnliaUrl(true, redirectUrl);
|
|
159
395
|
};
|
|
160
|
-
return (jsxs("div", { className: `offer-section ${mychoiceCls}`, children: [jsx(OfferHeader, { className: isTheBig ? 'thebig-bold' : '', companyName: offerCompany?.name, isBestOffer: isBestOffer }), jsx(OfferPrice, { className: isTheBig ? 'thebig' : '', companyLogo: offerCompany?.logo, price: offerPrice }), !isTheBig && offsiteUrl
|
|
161
|
-
? (jsxs("div", { className: "offer-phone", children: [jsx("h3", { children: "Click below to get this rate" }), jsx(ButtonBase, { className: `offer-phone-number ${mychoiceCls}`, label: "Buy Online", type: ButtonTypes.Button, category: CategoryTypes.Filled, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Medium, onClick: handleCTAClick })] })) : (jsxs("div", { className: "offer-phone", children: [jsx("h3", { className: isTheBig ? 'thebig-bold' : '', children: "Call now to get this rate" }), jsx("a", { target: "_blank", rel: "noreferrer noopener", href: `tel:${phoneNumber?.number}`, children: jsx(ButtonBase, { className: `${isTheBig ? 'thebig-bold' : 'mychoice'} offer-phone-number`, label: phoneNumber?.title, type: ButtonTypes.Button, category: CategoryTypes.Filled, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Medium }) })] })), jsxs("button", { className: "dropdown", onClick: handleDropdownClick, children: [jsx("span", { children: detailsIsOpen ? 'Less Info' : 'More Info' }), jsx(IconDropdownArrow, { color: "grey", className: detailsIsOpen ? 'rotated' : '' })] }), detailsIsOpen && (jsxs("div", { className: "offer-details", children: [jsx(OfferDetail, { className: isTheBig ? 'thebig-bold' : '', name: offerCompany?.name, companyType: CompanyRoleTypes.Offering, description: offerCompany?.description }), jsx("hr", {}), (isTheBig || !offsiteUrl)
|
|
162
|
-
&& (jsxs(Fragment, { children: [jsx(OfferDetail, { className: isTheBig ? 'thebig-bold' : '', logo: brokerCompany?.logo, name: brokerCompany?.title, companyType: CompanyRoleTypes.Broker, description: brokerCompany?.description }), jsx("hr", {})] })), jsx(OfferDetail, { className: isTheBig ? 'thebig-bold' : '', name: "Hours of Operation", children: jsx(OperationHoursInfo, { weekdayHours: weekdayHours, saturdayHours: saturdayHours, sundayHours: sundayHours }) })] }))] }));
|
|
396
|
+
return (jsxs("div", { className: `offer-section ${mychoiceCls}`, children: [jsx(OfferHeader, { className: isTheBig ? 'thebig-bold' : '', companyName: offerCompany?.name, isBestOffer: isBestOffer }), jsx(OfferPrice, { className: isTheBig ? 'thebig' : '', companyLogo: offerCompany?.logo, price: offerPrice }), !isTheBig && offsiteUrl ? (jsxs("div", { className: "offer-phone", children: [jsx("h3", { children: "Click below to get this rate" }), jsx(ButtonBase, { className: `offer-phone-number ${mychoiceCls}`, label: "Buy Online", type: ButtonTypes.Button, category: CategoryTypes.Filled, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Medium, onClick: handleCTAClick })] })) : (jsxs("div", { className: "offer-phone", children: [jsx("h3", { className: isTheBig ? 'thebig-bold' : '', children: "Call now to get this rate" }), jsx("a", { target: "_blank", rel: "noreferrer noopener", href: `tel:${phoneNumber?.number}`, children: jsx(ButtonBase, { className: `${isTheBig ? 'thebig-bold' : 'mychoice'} offer-phone-number`, label: phoneNumber?.title, type: ButtonTypes.Button, category: CategoryTypes.Filled, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Medium }) })] })), jsxs("button", { className: "dropdown", onClick: handleDropdownClick, children: [jsx("span", { children: detailsIsOpen ? 'Less Info' : 'More Info' }), jsx(IconDropdownArrow, { color: "grey", className: detailsIsOpen ? 'rotated' : '' })] }), detailsIsOpen && (jsxs("div", { className: "offer-details", children: [jsx(OfferDetail, { className: isTheBig ? 'thebig-bold' : '', name: offerCompany?.name, companyType: CompanyRoleTypes.Offering, description: offerCompany?.description }), jsx("hr", {}), (isTheBig || !offsiteUrl) && (jsxs(Fragment, { children: [jsx(OfferDetail, { className: isTheBig ? 'thebig-bold' : '', logo: brokerCompany?.logo, name: brokerCompany?.title, companyType: CompanyRoleTypes.Broker, description: brokerCompany?.description }), jsx("hr", {})] })), jsx(OfferDetail, { className: isTheBig ? 'thebig-bold' : '', name: "Hours of Operation", children: jsx(OperationHoursInfo, { weekdayHours: weekdayHours, saturdayHours: saturdayHours, sundayHours: sundayHours }) }), isMyChoice && coverages && (jsxs(Fragment, { children: [jsx("hr", {}), jsx(VehicleOfferCoverages, { coverages: coverages, nonStandardCoverages: nonStandardCoverages })] }))] }))] }));
|
|
163
397
|
};
|
|
164
398
|
OfferSection.defaultProps = {
|
|
165
399
|
offerPrice: { monthly: 0, yearly: 0 },
|
|
@@ -373,65 +607,6 @@ const getRecommendedRange = (distanceDaily, distanceBusiness) => {
|
|
|
373
607
|
}
|
|
374
608
|
};
|
|
375
609
|
|
|
376
|
-
const getSelectedOption = (options, val) => {
|
|
377
|
-
if (typeof val === 'boolean') {
|
|
378
|
-
return options.find(({ value }) => val === value)?.value || false;
|
|
379
|
-
}
|
|
380
|
-
if (typeof val === 'number') {
|
|
381
|
-
return options.find((option) => option.value?.toString() === val.toString())?.value;
|
|
382
|
-
}
|
|
383
|
-
return options.find((option) => option.value === val)?.value;
|
|
384
|
-
};
|
|
385
|
-
const getErrorMessage = (value, inValidation = false, message = '') => {
|
|
386
|
-
if (inValidation) {
|
|
387
|
-
if (value === null) {
|
|
388
|
-
return 'This field is required.';
|
|
389
|
-
}
|
|
390
|
-
if (typeof value === 'boolean') {
|
|
391
|
-
return '';
|
|
392
|
-
}
|
|
393
|
-
return !value ? 'This field is required.' : message;
|
|
394
|
-
}
|
|
395
|
-
return '';
|
|
396
|
-
};
|
|
397
|
-
const getDateErrorMessage = (values, inValidation = false) => {
|
|
398
|
-
const emptyValues = values.filter((value) => !value);
|
|
399
|
-
if (inValidation) {
|
|
400
|
-
if (emptyValues.length > 1) {
|
|
401
|
-
return 'These fields are required.';
|
|
402
|
-
}
|
|
403
|
-
if (emptyValues.length === 1) {
|
|
404
|
-
return 'This field is required.';
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
return '';
|
|
408
|
-
};
|
|
409
|
-
const formatPhoneObject = (phone) => {
|
|
410
|
-
const phoneToArray = (phone || defaultBrokerPhone).split(',');
|
|
411
|
-
const onlyNumbers = phoneToArray[0].replace(/\D/g, '');
|
|
412
|
-
let phoneNumber;
|
|
413
|
-
if (onlyNumbers.length < 11) {
|
|
414
|
-
phoneNumber = `1${onlyNumbers}`;
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
phoneNumber = onlyNumbers;
|
|
418
|
-
}
|
|
419
|
-
const phoneToNumbers = Number(phoneNumber).toString();
|
|
420
|
-
const phoneWithoutSpecialKey = phoneToNumbers.length > 10
|
|
421
|
-
? phoneToNumbers.replace(/(\d{1})(\d{3})(\d{3})(\d{4})/, '$1-$2-$3-$4')
|
|
422
|
-
: phoneToNumbers.replace(/(\d{1})(\d{3})(\d{3})(\d{3})/, '$1-$2-$3-$4');
|
|
423
|
-
const title = phoneToArray.length < 2 ? phoneWithoutSpecialKey : `${phoneWithoutSpecialKey} x${phoneToArray[1]}`;
|
|
424
|
-
const specialKeys = phoneToArray[1] ? `,${phoneToArray[1]}` : '';
|
|
425
|
-
return {
|
|
426
|
-
number: phoneWithoutSpecialKey,
|
|
427
|
-
title,
|
|
428
|
-
specialKeys,
|
|
429
|
-
};
|
|
430
|
-
};
|
|
431
|
-
const formatTitleToCapital = (name) => name.replace(/-/g, ' ')
|
|
432
|
-
.replace(/\+/g, ' ').replace(/(\b[a-z](?!\s))/g, (letter) => letter.toUpperCase());
|
|
433
|
-
const capitalize = (text) => text.charAt(0).toUpperCase() + text.slice(1);
|
|
434
|
-
|
|
435
610
|
const BlockCarInfo = () => {
|
|
436
611
|
const { status: statusMake, getVehicleMake, vehicleMakeList = [] } = useHandlerCarMake();
|
|
437
612
|
const { status: statusModel, getVehicleModel, vehicleModelList = [] } = useHandlerCarModel();
|
|
@@ -1521,62 +1696,6 @@ const PageDriver = () => {
|
|
|
1521
1696
|
return (jsxs("div", { className: "form-container", children: [jsx(TabDriver, { createItem: createDriver }), jsxs("div", { className: "form-section-container", children: [isRender && (jsxs(Fragment, { children: [jsx(SectionDriverInfo, {}), jsx(SectionDriverLicence, {}), jsx(SectionDriverInsurancePolicy, {}), jsx(SectionDriverCancellation, {}), jsx(SectionDriverHistory, {}), appType === AppTypes.MyChoice && jsx(HonestyMessage, {})] })), appType === AppTypes.TheBig ? (jsx(NavigationBottomTheBig, { createItem: createDriver, formSteps: formSteps[InsuranceTypes.Car], itemCount: items.length, validateForm: validateForm, formIsValid: driverFormIsValid })) : (jsx(NavigationBottom, { className: "mychoice", createItem: createDriver, formSteps: formSteps[InsuranceTypes.Car], itemCount: items.length, validateForm: validateForm, formIsValid: driverFormIsValid }))] }), localIndex !== defaultLocalIndex && (jsx("img", { className: "logo-for-partner", src: myChoicePartnerLogo, alt: "partner logo" }))] }));
|
|
1522
1697
|
};
|
|
1523
1698
|
|
|
1524
|
-
const BlockVehLinks = () => {
|
|
1525
|
-
const { vehicleState: { items: vehicles } } = useStoreFormCarVehicle();
|
|
1526
|
-
const { driverState: { items: drivers } } = useStoreFormCarDriverBase();
|
|
1527
|
-
const { discountState: { vehlinks }, dispatchDiscountState } = useStoreFormCarDiscount();
|
|
1528
|
-
const driverOptions = drivers.map((driver, index) => ({ name: driver.firstName, value: index }));
|
|
1529
|
-
const handleDriverChange = (vehicleIndex) => ({ value }) => {
|
|
1530
|
-
dispatchDiscountState({
|
|
1531
|
-
type: StoreFormCarDiscountActionTypes.FormCarDiscountVehlinkSelect,
|
|
1532
|
-
payload: {
|
|
1533
|
-
driverIndex: value,
|
|
1534
|
-
vehicleIndex,
|
|
1535
|
-
},
|
|
1536
|
-
});
|
|
1537
|
-
};
|
|
1538
|
-
if (drivers.length > 1) {
|
|
1539
|
-
return (jsxs(Fragment, { children: [jsx(LabelFormBox, { title: "Since there are multiple drivers in this quote,\n please tell us who drives which vehicle the most.\n Please provide an answer that best suits your situation." }), vehicles.map((vehicle, index) => {
|
|
1540
|
-
const { year, make, model } = vehicle;
|
|
1541
|
-
const selectedDriver = vehlinks.find((vehlink) => (vehlink.vehicleIndex === index && vehlink.priority === DriverPriorityTypes.Prn));
|
|
1542
|
-
return (jsx(SelectFormBox, { title: `Who is the principal driver of the ${year} ${make} ${model} ?`, onChange: handleDriverChange(index), options: driverOptions, defaultValue: selectedDriver?.driverIndex || 0, name: `vehlink-${index}` }, `vehlink-${index}`));
|
|
1543
|
-
})] }));
|
|
1544
|
-
}
|
|
1545
|
-
return null;
|
|
1546
|
-
};
|
|
1547
|
-
|
|
1548
|
-
const BlockNextPageInfo$2 = () => {
|
|
1549
|
-
const { appConfigState: { appType } } = useStoreAppConfig();
|
|
1550
|
-
const isTheBig = appType === AppTypes.TheBig;
|
|
1551
|
-
return (jsx("div", { className: "next-page-info", children: isTheBig ? (jsx("div", { className: "privacy-policy", children: jsxs("p", { children: [jsx("span", { children: "DISCLAIMER: " }), "As insurance premiums are based on the information you provide it is important that it be 100% accurate and up to date. If you are not sure it is best to check before completing your quote."] }) })) : (jsxs(Fragment, { children: [jsx("h5", { children: "On the next page, you will also be able to:" }), jsxs("div", { className: "next-page-points", children: [jsx("p", { children: "1. See what rates insurance carriers are offering" }), jsx("p", { children: "2. Get in touch with a broker and secure your rate" }), jsx("p", { children: "3. Potentially save more by speaking with a broker" })] }), jsx("div", { className: "privacy-policy", children: jsxs("p", { children: ["Once you submit this form, you are agreeing to have your insurance quote sent to you via email and My Choice will provide your contact information to one of our trusted broker partners, who will contact you after your quote is complete to further assist you in securing your best rate. For more details, see our", jsx("a", { href: "https://www.mychoice.ca/privacy-policy/", children: " Privacy Policy" }), "."] }) })] })) }));
|
|
1552
|
-
};
|
|
1553
|
-
|
|
1554
|
-
const BlockSubmit$2 = ({ className, label, buttonSize, isRecalc = false, }) => {
|
|
1555
|
-
const { quoteState: { isRequested, quoteConfirm } } = useStoreFormCarQuote();
|
|
1556
|
-
const { discountState: { isValid } } = useStoreFormCarDiscount();
|
|
1557
|
-
const { appConfigState: { localIndex, insuranceType } } = useStoreAppConfig();
|
|
1558
|
-
const navigate = useNavigate();
|
|
1559
|
-
const { postRequestQuote } = CarQuoteDataHandler();
|
|
1560
|
-
const { carDiscountFormValidate } = useValidationCarDiscount();
|
|
1561
|
-
const handleGetQuotesClick = () => {
|
|
1562
|
-
if (!isValid) {
|
|
1563
|
-
carDiscountFormValidate(false, () => postRequestQuote(isRecalc, quoteConfirm));
|
|
1564
|
-
}
|
|
1565
|
-
else if (!isRequested) {
|
|
1566
|
-
postRequestQuote(isRecalc, quoteConfirm);
|
|
1567
|
-
}
|
|
1568
|
-
else if (!isRecalc) {
|
|
1569
|
-
navigate(`/${localIndex || defaultLocalIndex}/${insuranceType}/quotes`);
|
|
1570
|
-
}
|
|
1571
|
-
};
|
|
1572
|
-
return (jsx(ButtonBase, { className: className, size: buttonSize, category: CategoryTypes.Filled, onClick: handleGetQuotesClick, color: ColorTypes.Primary, label: label }));
|
|
1573
|
-
};
|
|
1574
|
-
BlockSubmit$2.defaultProps = {
|
|
1575
|
-
buttonSize: SizeTypes.Large,
|
|
1576
|
-
label: 'Get Your Quotes',
|
|
1577
|
-
className: '',
|
|
1578
|
-
};
|
|
1579
|
-
|
|
1580
1699
|
const getDynamicLicenceBoxProps = ({ isAlbertaProvince, isOntarioProvince, isNewfoundlandProvince, isNovaScotiaProvince, isNewBrunswickProvince, }) => {
|
|
1581
1700
|
if (isAlbertaProvince) {
|
|
1582
1701
|
return {
|
|
@@ -1910,7 +2029,7 @@ const PageCarQuote = () => {
|
|
|
1910
2029
|
saturdayHours: items[0]?.brokerProfile.hoursSaturday,
|
|
1911
2030
|
sundayHours: items[0]?.brokerProfile.hoursSunday,
|
|
1912
2031
|
weekdayHours: items[0]?.brokerProfile.hoursWorkdays,
|
|
1913
|
-
}, phoneNumber: formatPhoneObject(items[0]?.brokerProfile.phone), redirectUrl: items[0]?.brokerProfile.redirectUrl || '' }) })) : (jsx(SplashScreen$2, {})) })) : (jsx(NoQuotesMessage, { type: "car" })) })), (!hasConfirmStep || appDeviceType !== DeviceTypes.Mobile) && (jsxs(Fragment, { children: [jsx(SectionQuoteEdit$2, {}), jsx(SectionQuoteRecalc$1, {})] }))] }), appDeviceType !== DeviceTypes.Mobile && quoteState.showCallMessage && jsx(SplashScreen$2, {}), !quoteState.showCallMessage && (jsx(Fragment, { children: jsxs("div", { style: { position: 'relative', width: '100%' }, children: [hasConfirmStep && (jsxs(Fragment, { children: [jsx("div", { className: "offer-container", children: jsx(SectionConfirm, {}) }), appDeviceType === DeviceTypes.Mobile && (jsxs(Fragment, { children: [jsx(SectionQuoteEdit$2, {}), jsx(SectionQuoteRecalc$1, {})] }))] })), jsx("div", { className: `offer-container ${hasConfirmStep ? 'blur' : ''}`, children: !!items?.length ? (quoteItems.map(({ company, brokerProfile, priceMonthly, priceYearly }, index) => (jsx("div", { children: (appDeviceType !== DeviceTypes.Mobile ||
|
|
2032
|
+
}, phoneNumber: formatPhoneObject(items[0]?.brokerProfile.phone), redirectUrl: items[0]?.brokerProfile.redirectUrl || '', coverages: items[0]?.coverages, nonStandardCoverages: items[0]?.nonStandardCoverages }) })) : (jsx(SplashScreen$2, {})) })) : (jsx(NoQuotesMessage, { type: "car" })) })), (!hasConfirmStep || appDeviceType !== DeviceTypes.Mobile) && (jsxs(Fragment, { children: [jsx(SectionQuoteEdit$2, {}), (isTheBig || !items[0]?.coverages) && jsx(SectionQuoteRecalc$1, {})] }))] }), appDeviceType !== DeviceTypes.Mobile && quoteState.showCallMessage && jsx(SplashScreen$2, {}), !quoteState.showCallMessage && (jsx(Fragment, { children: jsxs("div", { style: { position: 'relative', width: '100%' }, children: [hasConfirmStep && (jsxs(Fragment, { children: [jsx("div", { className: "offer-container", children: jsx(SectionConfirm, {}) }), appDeviceType === DeviceTypes.Mobile && (jsxs(Fragment, { children: [jsx(SectionQuoteEdit$2, {}), (isTheBig || !items[0]?.coverages) && jsx(SectionQuoteRecalc$1, {})] }))] })), jsx("div", { className: `offer-container ${hasConfirmStep ? 'blur' : ''}`, children: !!items?.length ? (quoteItems.map(({ company, brokerProfile, priceMonthly, priceYearly, coverages, nonStandardCoverages, }, index) => (jsx("div", { children: (appDeviceType !== DeviceTypes.Mobile ||
|
|
1914
2033
|
(appDeviceType === DeviceTypes.Mobile && index !== 0)) && (jsx(OfferSection, { isBestOffer: index === 0, offerCompany: company, brokerCompany: brokerProfile, offerPrice: {
|
|
1915
2034
|
monthly: priceMonthly,
|
|
1916
2035
|
yearly: priceYearly,
|
|
@@ -1918,7 +2037,7 @@ const PageCarQuote = () => {
|
|
|
1918
2037
|
saturdayHours: brokerProfile.hoursSaturday,
|
|
1919
2038
|
sundayHours: brokerProfile.hoursSunday,
|
|
1920
2039
|
weekdayHours: brokerProfile.hoursWorkdays,
|
|
1921
|
-
}, phoneNumber: formatPhoneObject(brokerProfile.phone), redirectUrl: brokerProfile.redirectUrl || '' })) }, index)))) : (jsx(NoQuotesMessage, { type: "car" })) })] }) }))] })) }));
|
|
2040
|
+
}, phoneNumber: formatPhoneObject(brokerProfile.phone), redirectUrl: brokerProfile.redirectUrl || '', coverages: coverages, nonStandardCoverages: nonStandardCoverages })) }, index)))) : (jsx(NoQuotesMessage, { type: "car" })) })] }) }))] })) }));
|
|
1922
2041
|
};
|
|
1923
2042
|
|
|
1924
2043
|
const IndicatorsContainer = () => jsx(Fragment, {});
|
|
@@ -3777,7 +3896,7 @@ var Desjardins = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWUAAACMCAYAAACk
|
|
|
3777
3896
|
|
|
3778
3897
|
var CanadaLife = "data:image/png;base64,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";
|
|
3779
3898
|
|
|
3780
|
-
var SquareOne = "data:image/png;base64,
|
|
3899
|
+
var SquareOne = "data:image/png;base64,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";
|
|
3781
3900
|
|
|
3782
3901
|
const ProviderImageFooter = () => {
|
|
3783
3902
|
const { appConfigState: { insuranceType }, } = useStoreAppConfig();
|