@mychoice/mychoice-sdk-store 2.2.22 → 2.2.24

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.
Files changed (30) hide show
  1. package/dist/cjs/index.js +224 -49
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/states/reducers/states/formStates/FormCarState/DiscountState/actions.d.ts +1 -0
  4. package/dist/cjs/states/reducers/states/formStates/FormCarState/DiscountState/interfaces.d.ts +11 -0
  5. package/dist/cjs/states/reducers/states/formStates/FormCarState/DriverState/DriverInsuranceState/actions.d.ts +5 -1
  6. package/dist/cjs/states/reducers/states/formStates/FormCarState/DriverState/DriverInsuranceState/interfaces.d.ts +24 -0
  7. package/dist/cjs/states/reducers/states/formStates/FormCarState/DriverState/DriverLicenceState/actions.d.ts +2 -0
  8. package/dist/cjs/states/reducers/states/formStates/FormCarState/DriverState/DriverLicenceState/interfaces.d.ts +12 -0
  9. package/dist/cjs/states/reducers/states/formStates/FormCarState/DriverState/DriverTicketState/actions.d.ts +1 -0
  10. package/dist/cjs/states/reducers/states/formStates/FormCarState/DriverState/DriverTicketState/interfaces.d.ts +7 -0
  11. package/dist/cjs/states/reducers/states/formStates/FormCarState/DriverState/initialState.d.ts +1 -0
  12. package/dist/cjs/states/reducers/states/formStates/FormCarState/DriverState/interfaces.d.ts +9 -0
  13. package/dist/cjs/states/reducers/states/formStates/FormCarState/VehicleState/actions.d.ts +1 -0
  14. package/dist/cjs/states/reducers/states/formStates/FormCarState/VehicleState/interfaces.d.ts +7 -0
  15. package/dist/esm/index.js +225 -50
  16. package/dist/esm/index.js.map +1 -1
  17. package/dist/esm/states/reducers/states/formStates/FormCarState/DiscountState/actions.d.ts +1 -0
  18. package/dist/esm/states/reducers/states/formStates/FormCarState/DiscountState/interfaces.d.ts +11 -0
  19. package/dist/esm/states/reducers/states/formStates/FormCarState/DriverState/DriverInsuranceState/actions.d.ts +5 -1
  20. package/dist/esm/states/reducers/states/formStates/FormCarState/DriverState/DriverInsuranceState/interfaces.d.ts +24 -0
  21. package/dist/esm/states/reducers/states/formStates/FormCarState/DriverState/DriverLicenceState/actions.d.ts +2 -0
  22. package/dist/esm/states/reducers/states/formStates/FormCarState/DriverState/DriverLicenceState/interfaces.d.ts +12 -0
  23. package/dist/esm/states/reducers/states/formStates/FormCarState/DriverState/DriverTicketState/actions.d.ts +1 -0
  24. package/dist/esm/states/reducers/states/formStates/FormCarState/DriverState/DriverTicketState/interfaces.d.ts +7 -0
  25. package/dist/esm/states/reducers/states/formStates/FormCarState/DriverState/initialState.d.ts +1 -0
  26. package/dist/esm/states/reducers/states/formStates/FormCarState/DriverState/interfaces.d.ts +9 -0
  27. package/dist/esm/states/reducers/states/formStates/FormCarState/VehicleState/actions.d.ts +1 -0
  28. package/dist/esm/states/reducers/states/formStates/FormCarState/VehicleState/interfaces.d.ts +7 -0
  29. package/dist/index.d.ts +80 -1
  30. package/package.json +3 -3
package/dist/cjs/index.js CHANGED
@@ -527,6 +527,7 @@ exports.StoreFormCarVehicleActionTypes = void 0;
527
527
  StoreFormCarVehicleActionTypes["FormCarParkingLocationSelect"] = "FormCarParkingLocationSelect";
528
528
  StoreFormCarVehicleActionTypes["FormCarDailyDistanceSelect"] = "FormCarDailyDistanceSelect";
529
529
  StoreFormCarVehicleActionTypes["FormCarBusinessDistanceSelect"] = "FormCarBusinessDistanceSelect";
530
+ StoreFormCarVehicleActionTypes["FormCarBusinessUsePercentSelect"] = "FormCarBusinessUsePercentSelect";
530
531
  StoreFormCarVehicleActionTypes["FormCarYearlyDistanceSelect"] = "FormCarYearlyDistanceSelect";
531
532
  StoreFormCarVehicleActionTypes["FormCarComprehensiveCoverageSelect"] = "FormCarComprehensiveCoverageSelect";
532
533
  StoreFormCarVehicleActionTypes["FormCarComprehensiveDeductibleSelect"] = "FormCarComprehensiveDeductibleSelect";
@@ -690,6 +691,8 @@ const formCarVehicleStateReducer = (state = { ...carFormVehicleInitialState }, a
690
691
  return setLocalVehicles(action.localIndex, setItemProperty(state, 'distanceDaily', action.payload.distanceDaily));
691
692
  case exports.StoreFormCarVehicleActionTypes.FormCarBusinessDistanceSelect:
692
693
  return setLocalVehicles(action.localIndex, setItemProperty(state, 'distanceBusiness', action.payload.distanceBusiness));
694
+ case exports.StoreFormCarVehicleActionTypes.FormCarBusinessUsePercentSelect:
695
+ return setLocalVehicles(action.localIndex, setItemProperty(state, 'businessUsePercent', action.payload.businessUsePercent));
693
696
  case exports.StoreFormCarVehicleActionTypes.FormCarYearlyDistanceSelect:
694
697
  return setLocalVehicles(action.localIndex, setItemProperty(state, 'distanceYearly', action.payload.distanceYearly));
695
698
  case exports.StoreFormCarVehicleActionTypes.FormCarComprehensiveCoverageSelect:
@@ -774,6 +777,10 @@ exports.StoreFormCarDriverInsuranceActionTypes = void 0;
774
777
  StoreFormCarDriverInsuranceActionTypes["FormCarDriverListedMonthSelect"] = "FormCarDriverListedMonthSelect";
775
778
  StoreFormCarDriverInsuranceActionTypes["FormCarDriverInsuredSelect"] = "FormCarDriverInsuredSelect";
776
779
  StoreFormCarDriverInsuranceActionTypes["FormCarDriverInsuredDateSelect"] = "FormCarDriverInsuredDateSelect";
780
+ StoreFormCarDriverInsuranceActionTypes["FormCarDriverNotCurrentlyInsuredSelect"] = "FormCarDriverNotCurrentlyInsuredSelect";
781
+ StoreFormCarDriverInsuranceActionTypes["FormCarDriverLastPolicyEndYearSelect"] = "FormCarDriverLastPolicyEndYearSelect";
782
+ StoreFormCarDriverInsuranceActionTypes["FormCarDriverLastPolicyEndMonthSelect"] = "FormCarDriverLastPolicyEndMonthSelect";
783
+ StoreFormCarDriverInsuranceActionTypes["FormCarDriverLastPolicyCancelReasonSelect"] = "FormCarDriverLastPolicyCancelReasonSelect";
777
784
  })(exports.StoreFormCarDriverInsuranceActionTypes || (exports.StoreFormCarDriverInsuranceActionTypes = {}));
778
785
 
779
786
  exports.StoreFormCarDriverLicenceActionTypes = void 0;
@@ -788,6 +795,8 @@ exports.StoreFormCarDriverLicenceActionTypes = void 0;
788
795
  StoreFormCarDriverLicenceActionTypes["FormCarDriverG1LicenceMaxSelect"] = "FormCarDriverG1LicenceMaxSelect";
789
796
  StoreFormCarDriverLicenceActionTypes["FormCarDriverTrainingSelect"] = "FormCarDriverTrainingSelect";
790
797
  StoreFormCarDriverLicenceActionTypes["FormCarDriverPreviousLicenceSelect"] = "FormCarDriverPreviousLicenceSelect";
798
+ StoreFormCarDriverLicenceActionTypes["FormCarDriverReceivedG2Select"] = "FormCarDriverReceivedG2Select";
799
+ StoreFormCarDriverLicenceActionTypes["FormCarDriverReceivedGSelect"] = "FormCarDriverReceivedGSelect";
791
800
  StoreFormCarDriverLicenceActionTypes["FormCarDriverLicenceYearSelect"] = "FormCarDriverLicenceYearSelect";
792
801
  StoreFormCarDriverLicenceActionTypes["FormCarDriverLicenceMonthSelect"] = "FormCarDriverLicenceMonthSelect";
793
802
  })(exports.StoreFormCarDriverLicenceActionTypes || (exports.StoreFormCarDriverLicenceActionTypes = {}));
@@ -810,6 +819,7 @@ exports.StoreFormCarDriverTicketActionTypes = void 0;
810
819
  StoreFormCarDriverTicketActionTypes["FormCarDriverTrafficTicketReasonSelect"] = "FormCarDriverTrafficTicketReasonSelect";
811
820
  StoreFormCarDriverTicketActionTypes["FormCarDriverTrafficTicketYearSelect"] = "FormCarDriverTrafficTicketYearSelect";
812
821
  StoreFormCarDriverTicketActionTypes["FormCarDriverTrafficTicketMonthSelect"] = "FormCarDriverTrafficTicketMonthSelect";
822
+ StoreFormCarDriverTicketActionTypes["FormCarDriverTrafficTicketSpeedSelect"] = "FormCarDriverTrafficTicketSpeedSelect";
813
823
  StoreFormCarDriverTicketActionTypes["FormCarDriverTrafficTicketAdd"] = "FormCarDriverTrafficTicketAdd";
814
824
  StoreFormCarDriverTicketActionTypes["FormCarDriverTrafficTicketDelete"] = "FormCarDriverTrafficTicketDelete";
815
825
  })(exports.StoreFormCarDriverTicketActionTypes || (exports.StoreFormCarDriverTicketActionTypes = {}));
@@ -1069,37 +1079,32 @@ const setDriverLicenceInfoDate = (state, type, payload) => {
1069
1079
  const { licenceType } = newState.items[newState.activeIndex].licenceInfo;
1070
1080
  const { birthDay } = newState.items[newState.activeIndex];
1071
1081
  const currentDate = mychoiceSdkComponents.getFormattedDate('', 'yyyy-MM-dd');
1072
- if (!(licenceType === mychoiceSdkComponents.DriverLicenceTypes.G && (currentLicenceType === mychoiceSdkComponents.DriverLicenceTypes.G2))) {
1073
- switch (type) {
1074
- case mychoiceSdkComponents.DateTypes.Year:
1075
- newState.items[newState.activeIndex].licenceInfo[`${licenceType}LicenceYear`] = value;
1076
- break;
1077
- case mychoiceSdkComponents.DateTypes.Month:
1078
- newState.items[newState.activeIndex].licenceInfo[`${licenceType}LicenceMonth`] = value;
1079
- break;
1080
- }
1081
- if (licenceType === mychoiceSdkComponents.DriverLicenceTypes.G2) {
1082
- const { minMaxDates } = newState.items[newState.activeIndex];
1083
- if (minMaxDates) {
1084
- minMaxDates.gTwoMax = currentDate;
1085
- }
1086
- }
1082
+ // When the picker explicitly targets a different slot (e.g. G1 driver entering G2/G date),
1083
+ // write to that slot rather than the store's current licenceType.
1084
+ const targetSlot = currentLicenceType && currentLicenceType !== licenceType
1085
+ ? currentLicenceType
1086
+ : licenceType;
1087
+ switch (type) {
1088
+ case mychoiceSdkComponents.DateTypes.Year:
1089
+ newState.items[newState.activeIndex].licenceInfo[`${targetSlot}LicenceYear`] = value;
1090
+ break;
1091
+ case mychoiceSdkComponents.DateTypes.Month:
1092
+ newState.items[newState.activeIndex].licenceInfo[`${targetSlot}LicenceMonth`] = value;
1093
+ break;
1087
1094
  }
1088
- else {
1089
- switch (type) {
1090
- case mychoiceSdkComponents.DateTypes.Year:
1091
- newState.items[newState.activeIndex].licenceInfo.g2LicenceYear = value;
1092
- break;
1093
- case mychoiceSdkComponents.DateTypes.Month:
1094
- newState.items[newState.activeIndex].licenceInfo.g2LicenceMonth = value;
1095
- break;
1095
+ if (targetSlot === mychoiceSdkComponents.DriverLicenceTypes.G2) {
1096
+ const { minMaxDates } = newState.items[newState.activeIndex];
1097
+ if (minMaxDates) {
1098
+ minMaxDates.gTwoMax = currentDate;
1096
1099
  }
1100
+ }
1101
+ // Non-Ontario G driver entering G2 date: recompute the G min date (existing behaviour).
1102
+ if (licenceType === mychoiceSdkComponents.DriverLicenceTypes.G && targetSlot === mychoiceSdkComponents.DriverLicenceTypes.G2) {
1097
1103
  const { g2LicenceMonth, g2LicenceYear } = newState.items[newState.activeIndex].licenceInfo;
1098
1104
  if (g2LicenceMonth && g2LicenceYear && config) {
1099
1105
  const g2Date = mychoiceSdkComponents.addDaysToDate(`${g2LicenceYear}-${g2LicenceMonth}-01`, birthDay ? +birthDay + 1 : 1);
1100
1106
  const gMinDefaultDate = mychoiceSdkComponents.getLicenceMinDate(licenceType, g2Date, config);
1101
- const gMinDate = mychoiceSdkComponents.compareDates(gMinDefaultDate, currentDate) > 0
1102
- ? currentDate : gMinDefaultDate;
1107
+ const gMinDate = mychoiceSdkComponents.compareDates(gMinDefaultDate, currentDate) > 0 ? currentDate : gMinDefaultDate;
1103
1108
  const { minMaxDates } = newState.items[newState.activeIndex];
1104
1109
  if (minMaxDates) {
1105
1110
  minMaxDates.gMin = gMinDate;
@@ -1353,6 +1358,14 @@ const formCarDriverInsuranceStateReducer = (state = { ...carFormDriverInitialSta
1353
1358
  return setLocalDrivers(action?.localIndex, setDriverItemProperty(state, 'insured', action.payload.insured));
1354
1359
  case exports.StoreFormCarDriverInsuranceActionTypes.FormCarDriverInsuredDateSelect:
1355
1360
  return setLocalDrivers(action?.localIndex, setDriverItemProperty(state, 'insuredDate', action.payload.insuredDate));
1361
+ case exports.StoreFormCarDriverInsuranceActionTypes.FormCarDriverNotCurrentlyInsuredSelect:
1362
+ return setLocalDrivers(action?.localIndex, setDriverItemProperty(state, 'notCurrentlyInsured', action.payload.notCurrentlyInsured));
1363
+ case exports.StoreFormCarDriverInsuranceActionTypes.FormCarDriverLastPolicyEndYearSelect:
1364
+ return setLocalDrivers(action?.localIndex, setDriverItemProperty(state, 'lastPolicyEndYear', action.payload.lastPolicyEndYear));
1365
+ case exports.StoreFormCarDriverInsuranceActionTypes.FormCarDriverLastPolicyEndMonthSelect:
1366
+ return setLocalDrivers(action?.localIndex, setDriverItemProperty(state, 'lastPolicyEndMonth', action.payload.lastPolicyEndMonth));
1367
+ case exports.StoreFormCarDriverInsuranceActionTypes.FormCarDriverLastPolicyCancelReasonSelect:
1368
+ return setLocalDrivers(action?.localIndex, setDriverItemProperty(state, 'lastPolicyCancelReason', action.payload.lastPolicyCancelReason));
1356
1369
  default:
1357
1370
  return state;
1358
1371
  }
@@ -1372,6 +1385,10 @@ const formCarDriverLicenceStateReducer = (state = { ...carFormDriverInitialState
1372
1385
  return setLocalDrivers(action?.localIndex, setDriverLicenceInfo(state, 'passedDriverTraining', action.payload.training));
1373
1386
  case exports.StoreFormCarDriverLicenceActionTypes.FormCarDriverPreviousLicenceSelect:
1374
1387
  return setLocalDrivers(action?.localIndex, setDriverLicenceInfo(state, 'previousLicence', action.payload.previousLicence));
1388
+ case exports.StoreFormCarDriverLicenceActionTypes.FormCarDriverReceivedG2Select:
1389
+ return setLocalDrivers(action?.localIndex, setDriverLicenceInfo(state, 'receivedG2', action.payload.receivedG2));
1390
+ case exports.StoreFormCarDriverLicenceActionTypes.FormCarDriverReceivedGSelect:
1391
+ return setLocalDrivers(action?.localIndex, setDriverLicenceInfo(state, 'receivedG', action.payload.receivedG));
1375
1392
  case exports.StoreFormCarDriverLicenceActionTypes.FormCarDriverGLicenceMinSelect:
1376
1393
  return setLocalDrivers(action?.localIndex, setDriverLicenceMinMaxDates(state, 'gMin', action.payload.gMin));
1377
1394
  case exports.StoreFormCarDriverLicenceActionTypes.FormCarDriverG1LicenceMinSelect:
@@ -1466,6 +1483,8 @@ const formCarDriverTicketStateReducer = (state = { ...carFormDriverInitialState
1466
1483
  return setLocalDrivers(action?.localIndex, setDriverListItemProperty(state, 'ticketList', action.payload.index, 'ticketYear', action.payload.ticketYear));
1467
1484
  case exports.StoreFormCarDriverTicketActionTypes.FormCarDriverTrafficTicketMonthSelect:
1468
1485
  return setLocalDrivers(action?.localIndex, setDriverListItemProperty(state, 'ticketList', action.payload.index, 'ticketMonth', action.payload.ticketMonth));
1486
+ case exports.StoreFormCarDriverTicketActionTypes.FormCarDriverTrafficTicketSpeedSelect:
1487
+ return setLocalDrivers(action?.localIndex, setDriverListItemProperty(state, 'ticketList', action.payload.index, 'speed', action.payload.speed));
1469
1488
  default:
1470
1489
  return state;
1471
1490
  }
@@ -1889,6 +1908,7 @@ const formCarDiscountStateInitialState = {
1889
1908
  priority: mychoiceSdkComponents.DriverPriorityTypes.Prn,
1890
1909
  vehicleIndex: 0,
1891
1910
  }],
1911
+ occVehlinks: [],
1892
1912
  inValidation: false,
1893
1913
  isValid: false,
1894
1914
  };
@@ -1910,6 +1930,7 @@ exports.StoreFormCarDiscountActionTypes = void 0;
1910
1930
  StoreFormCarDiscountActionTypes["FormCarDiscountVehlinkSelect"] = "FormCarDiscountVehlinkSelect";
1911
1931
  StoreFormCarDiscountActionTypes["FormCarDiscountVehlinkByVehicleDelete"] = "FormCarDiscountVehlinkByVehicleDelete";
1912
1932
  StoreFormCarDiscountActionTypes["FormCarDiscountVehlinkByDriverDelete"] = "FormCarDiscountVehlinkByDriverDelete";
1933
+ StoreFormCarDiscountActionTypes["FormCarDiscountOccVehlinkSelect"] = "FormCarDiscountOccVehlinkSelect";
1913
1934
  StoreFormCarDiscountActionTypes["FormCarDiscountQuoterEmailStatusSet"] = "FormCarDiscountQuoterEmailStatusSet";
1914
1935
  StoreFormCarDiscountActionTypes["FormCarDiscountValidate"] = "FormCarDiscountValidate";
1915
1936
  StoreFormCarDiscountActionTypes["FormCarDiscountValidateSet"] = "FormCarDiscountValidateSet";
@@ -2027,6 +2048,14 @@ const formCarDiscountStateReducer = (state = { ...formCarDiscountStateInitialSta
2027
2048
  return setLocalDiscounts$1(action.localIndex, deleteVehlinkByDriver(state, action.payload.driverIndex));
2028
2049
  case exports.StoreFormCarDiscountActionTypes.FormCarDiscountVehlinkSelect:
2029
2050
  return setLocalDiscounts$1(action.localIndex, selectDriverForVehicle(state, action.payload.driverIndex, action.payload.vehicleIndex));
2051
+ case exports.StoreFormCarDiscountActionTypes.FormCarDiscountOccVehlinkSelect: {
2052
+ const { driverIndex, vehicleIndex } = action.payload;
2053
+ const filtered = state.occVehlinks.filter((l) => l.driverIndex !== driverIndex);
2054
+ const updated = vehicleIndex >= 0
2055
+ ? [...filtered, { driverIndex, vehicleIndex }]
2056
+ : filtered;
2057
+ return setLocalDiscounts$1(action.localIndex, { ...state, occVehlinks: updated });
2058
+ }
2030
2059
  case exports.StoreFormCarDiscountActionTypes.FormCarDiscountMultiplePoliciesSelect:
2031
2060
  return setLocalDiscounts$1(action.localIndex, setDiscountStateProperty(state, 'multiplePoliciesDiscount', action.payload.multiplePoliciesDiscount));
2032
2061
  case exports.StoreFormCarDiscountActionTypes.FormCarDiscountCaaMemberSelect:
@@ -5073,7 +5102,7 @@ const CarQuoteDataHandler = () => {
5073
5102
  const navigate = reactRouterDom.useNavigate();
5074
5103
  const { checkIsExpired, checkIsExpiredWithModal } = ClearFormDataHandler();
5075
5104
  const [requestState, setRequestState] = react.useReducer(dataHandlerReducer, { ...initialHandlerRequestState });
5076
- const { status, successMessage, responseData, errorMessage, isFirstRequest, responseError, } = requestState;
5105
+ const { status, successMessage, responseData, errorMessage, isFirstRequest, responseError } = requestState;
5077
5106
  const { cancelToken } = useCancelToken();
5078
5107
  const openLoader = (loaderDescription = '') => {
5079
5108
  dispatchAppLoaderState({
@@ -5119,11 +5148,12 @@ const CarQuoteDataHandler = () => {
5119
5148
  provinceName: postal.provinceName,
5120
5149
  };
5121
5150
  requestBody.quoterInfo.recalculate = isRecalc;
5151
+ requestBody.quoterInfo.initial = !isRecalc;
5122
5152
  const isAbReformEligible = requestBody.provinceCode === 'ON' && policyStartDate >= '2026-07-01';
5123
5153
  // Flag if any Accident Benefits buy-ups are selected (Ontario only)
5124
5154
  if (isRecalc && isAbReformEligible) {
5125
- const hasAbChanges = vehicles.some((v) => v.accidentbenefits?.baseCoverage !== 'minimum_required'
5126
- || v.accidentbenefits?.additionalCoverages?.length > 0);
5155
+ const hasAbChanges = vehicles.some((v) => v.accidentbenefits?.baseCoverage !== 'minimum_required' ||
5156
+ v.accidentbenefits?.additionalCoverages?.length > 0);
5127
5157
  requestBody.quoterInfo.accidentBenefitsChanged = hasAbChanges;
5128
5158
  }
5129
5159
  delete requestBody.isValid;
@@ -5150,15 +5180,12 @@ const CarQuoteDataHandler = () => {
5150
5180
  }
5151
5181
  // driver
5152
5182
  requestBody.drivers = requestBody.drivers.map((driverItem) => {
5153
- const { birthYear, birthMonth, birthDay = '01', licenceInfo, } = driverItem;
5183
+ const { birthYear, birthMonth, birthDay = '01', licenceInfo } = driverItem;
5154
5184
  const driver = { ...driverItem };
5155
5185
  driver.dateOfBirth = `${birthYear}-${birthMonth}-${birthDay}`;
5156
5186
  if (driver.applicantRelationship === '') {
5157
5187
  delete driver.applicantRelationship;
5158
5188
  }
5159
- if (driver.gender === mychoiceSdkComponents.GenderTypes.Other) {
5160
- driver.gender = mychoiceSdkComponents.GenderTypes.Male;
5161
- }
5162
5189
  // ==================================
5163
5190
  // thebig additional properties
5164
5191
  if (appConfigState.appType === mychoiceSdkComponents.AppTypes.TheBig) {
@@ -5223,7 +5250,72 @@ const CarQuoteDataHandler = () => {
5223
5250
  delete driver.licenceInfo.g2LicenceMonth;
5224
5251
  };
5225
5252
  const { g1LicenceMonth, g1LicenceYear, g2LicenceMonth, g2LicenceYear, gLicenceYear, gLicenceMonth, } = licenceInfo;
5226
- if (isOnlyG) {
5253
+ const isOntarioMyChoiceLicence = requestBody.provinceCode === 'ON' && mychoiceSdkComponents.isMyChoiceLike(appConfigState.appType);
5254
+ if (isOntarioMyChoiceLicence) {
5255
+ // Ontario new flow: licenceType = first class received (Q2).
5256
+ // receivedG2/receivedG flags determine the full progression.
5257
+ // Q1 date is stored in the slot matching licenceType.
5258
+ const { receivedG2, receivedG } = driver.licenceInfo;
5259
+ const firstClass = driver.licenceInfo.licenceType;
5260
+ // isOnlyG must use the actual Q1 date the user entered, not DOB+firstLicenceAge.
5261
+ // DOB+16 can predate 1994 for older drivers (e.g. born 1966 → 1982), which falsely
5262
+ // triggers the G-Full path even when the user's actual first licence is much later.
5263
+ const getOntarioQ1Slot = () => {
5264
+ if (firstClass === mychoiceSdkComponents.DriverLicenceTypes.G2)
5265
+ return { year: g2LicenceYear, month: g2LicenceMonth };
5266
+ if (firstClass === mychoiceSdkComponents.DriverLicenceTypes.G)
5267
+ return { year: gLicenceYear, month: gLicenceMonth };
5268
+ return { year: g1LicenceYear, month: g1LicenceMonth };
5269
+ };
5270
+ const { year: ontarioQ1Year, month: ontarioQ1Month } = getOntarioQ1Slot();
5271
+ const ontarioQ1DateStr = ontarioQ1Year && ontarioQ1Month
5272
+ ? `${ontarioQ1Year}-${ontarioQ1Month}-01` : '';
5273
+ const ontarioIsOnlyG = !!ontarioQ1DateStr
5274
+ && mychoiceSdkComponents.compareDates(configState.minDates.g.specialDate, ontarioQ1DateStr) >= 0;
5275
+ // Determine which dates to send and final licence_type for the API.
5276
+ // The backend always requires g1_licence_date as the first licence date.
5277
+ if (ontarioIsOnlyG || firstClass === mychoiceSdkComponents.DriverLicenceTypes.G) {
5278
+ // G Full path: Q1 date is in gLicenceYear/Month slot
5279
+ driver.licenceInfo.gLicenceDate = addDayToDate(`${gLicenceYear}-${gLicenceMonth}`, +birthDay + 1);
5280
+ driver.licenceInfo.licenceType = mychoiceSdkComponents.DriverLicenceTypes.G;
5281
+ delete driver.licenceInfo.passedDriverTraining;
5282
+ }
5283
+ else if (firstClass === mychoiceSdkComponents.DriverLicenceTypes.G1) {
5284
+ // G1 path: Q1 date is in g1LicenceYear/Month
5285
+ driver.licenceInfo.g1LicenceDate = addDayToDate(`${g1LicenceYear}-${g1LicenceMonth}`, +birthDay + 1);
5286
+ if (receivedG2) {
5287
+ driver.licenceInfo.g2LicenceDate = addDayToDate(`${g2LicenceYear}-${g2LicenceMonth}`, +birthDay + 1);
5288
+ if (receivedG) {
5289
+ driver.licenceInfo.gLicenceDate = addDayToDate(`${gLicenceYear}-${gLicenceMonth}`, +birthDay + 1);
5290
+ driver.licenceInfo.licenceType = mychoiceSdkComponents.DriverLicenceTypes.G;
5291
+ }
5292
+ else {
5293
+ driver.licenceInfo.licenceType = mychoiceSdkComponents.DriverLicenceTypes.G2;
5294
+ }
5295
+ }
5296
+ else if (receivedG) {
5297
+ driver.licenceInfo.gLicenceDate = addDayToDate(`${gLicenceYear}-${gLicenceMonth}`, +birthDay + 1);
5298
+ driver.licenceInfo.licenceType = mychoiceSdkComponents.DriverLicenceTypes.G;
5299
+ }
5300
+ else {
5301
+ driver.licenceInfo.licenceType = mychoiceSdkComponents.DriverLicenceTypes.G1;
5302
+ }
5303
+ }
5304
+ else if (firstClass === mychoiceSdkComponents.DriverLicenceTypes.G2) {
5305
+ // G2 path: Q1 (first licence) date is in g2LicenceYear/Month.
5306
+ driver.licenceInfo.g1LicenceDate = addDayToDate(`${g2LicenceYear}-${g2LicenceMonth}`, +birthDay + 1);
5307
+ driver.licenceInfo.g2LicenceDate = addDayToDate(`${g2LicenceYear}-${g2LicenceMonth}`, +birthDay + 1);
5308
+ if (receivedG) {
5309
+ driver.licenceInfo.gLicenceDate = addDayToDate(`${gLicenceYear}-${gLicenceMonth}`, +birthDay + 1);
5310
+ driver.licenceInfo.licenceType = mychoiceSdkComponents.DriverLicenceTypes.G;
5311
+ }
5312
+ else {
5313
+ driver.licenceInfo.licenceType = mychoiceSdkComponents.DriverLicenceTypes.G2;
5314
+ }
5315
+ }
5316
+ deleteLicenceDates();
5317
+ }
5318
+ else if (isOnlyG) {
5227
5319
  if (driver.licenceInfo.licenceType === mychoiceSdkComponents.DriverLicenceTypes.G) {
5228
5320
  driver.licenceInfo.gLicenceDate = addDayToDate(`${gLicenceYear}-${gLicenceMonth}`, +birthDay + 1);
5229
5321
  delete driver.licenceInfo.g1LicenceDate;
@@ -5253,6 +5345,51 @@ const CarQuoteDataHandler = () => {
5253
5345
  deleteLicenceDates();
5254
5346
  }
5255
5347
  }
5348
+ if (isOntarioMyChoiceLicence) {
5349
+ const { receivedG2, receivedG } = driver.licenceInfo;
5350
+ const g1Date = driver.licenceInfo.g1LicenceDate;
5351
+ const g2Date = driver.licenceInfo.g2LicenceDate;
5352
+ const gDate = driver.licenceInfo.gLicenceDate;
5353
+ const training = !!driver.licenceInfo.passedDriverTraining;
5354
+ const hasG1 = driver.licenceInfo.licenceType === mychoiceSdkComponents.DriverLicenceTypes.G1 || !!g1Date;
5355
+ const hasG2 = !!g2Date || receivedG2;
5356
+ const hasG = !!gDate || receivedG;
5357
+ let outside = false;
5358
+ if (hasG1 && hasG2 && g1Date && g2Date) {
5359
+ const monthsG1toG2 = mychoiceSdkComponents.getDifferenceInMonths(g2Date, g1Date);
5360
+ if (!training && monthsG1toG2 < 12)
5361
+ outside = true;
5362
+ if (training && monthsG1toG2 < 8)
5363
+ outside = true;
5364
+ }
5365
+ if (hasG1 && hasG && g1Date && gDate) {
5366
+ const monthsG1toG = mychoiceSdkComponents.getDifferenceInMonths(gDate, g1Date);
5367
+ if (!training && monthsG1toG < 24)
5368
+ outside = true;
5369
+ if (training && monthsG1toG < 20)
5370
+ outside = true;
5371
+ }
5372
+ if (hasG2 && hasG && g2Date && gDate) {
5373
+ const monthsG2toG = mychoiceSdkComponents.getDifferenceInMonths(gDate, g2Date);
5374
+ if (monthsG2toG < 12)
5375
+ outside = true;
5376
+ }
5377
+ if (receivedG2 === undefined && !!g2Date)
5378
+ outside = true;
5379
+ if (hasG1 && hasG && !hasG2)
5380
+ outside = true;
5381
+ driver.licenceInfo.outsideExp = outside;
5382
+ delete driver.licenceInfo.receivedG2;
5383
+ delete driver.licenceInfo.receivedG;
5384
+ // API only accepts passed_driver_training for G2 licence type
5385
+ if (driver.licenceInfo.licenceType !== mychoiceSdkComponents.DriverLicenceTypes.G2) {
5386
+ delete driver.licenceInfo.passedDriverTraining;
5387
+ }
5388
+ }
5389
+ else {
5390
+ driver.licenceInfo.outsideExp = !!driver.licenceInfo.previousLicence;
5391
+ }
5392
+ delete driver.licenceInfo.previousLicence;
5256
5393
  delete driver.birthYear;
5257
5394
  delete driver.birthMonth;
5258
5395
  delete driver.birthDay;
@@ -5296,29 +5433,67 @@ const CarQuoteDataHandler = () => {
5296
5433
  driver.ticketList = driver.ticketList?.map((listItem) => ({
5297
5434
  reason: listItem.ticketReason,
5298
5435
  ticketDate: addDayToDate(`${listItem.ticketYear}-${listItem.ticketMonth}`, +birthDay + 1),
5436
+ ...(listItem.speed !== undefined ? { speed: listItem.speed } : {}),
5299
5437
  }));
5300
5438
  }
5301
5439
  return driver;
5302
5440
  });
5303
- const localVehlinks = [];
5441
+ // Build a complete set of vehlinks combining primary assignments + occasional assignments
5442
+ const buildVehlinks = () => {
5443
+ const driverCount = requestBody.drivers.length;
5444
+ const vehicleCount = requestBody.vehicles.length;
5445
+ const result = [];
5446
+ for (let vehicleIndex = 0; vehicleIndex < vehicleCount; vehicleIndex++) {
5447
+ const primaryDriverIndex = requestBody.vehlinks[vehicleIndex]?.driverIndex ?? 0;
5448
+ // Primary driver for this vehicle
5449
+ result.push({
5450
+ driverIndex: Number(primaryDriverIndex + 1),
5451
+ vehicleIndex: Number(vehicleIndex + 1),
5452
+ priority: mychoiceSdkComponents.DriverPriorityTypes.Prn,
5453
+ });
5454
+ if (driverCount > 1) {
5455
+ for (let driverIndex = 0; driverIndex < driverCount; driverIndex++) {
5456
+ if (driverIndex === primaryDriverIndex)
5457
+ continue;
5458
+ if (vehicleCount === 1) {
5459
+ // f) All non-primary drivers are occasional on the only vehicle
5460
+ result.push({
5461
+ driverIndex: Number(driverIndex + 1),
5462
+ vehicleIndex: Number(vehicleIndex + 1),
5463
+ priority: mychoiceSdkComponents.DriverPriorityTypes.Occ,
5464
+ });
5465
+ }
5466
+ else {
5467
+ // g-k) Use user-selected vehicle for extra drivers; skip if they are primary on another vehicle
5468
+ const isPrimaryElsewhere = requestBody.vehlinks.some((l) => l.driverIndex === driverIndex && l.vehicleIndex !== vehicleIndex);
5469
+ if (isPrimaryElsewhere)
5470
+ continue;
5471
+ const occAssignment = discount.occVehlinks?.find((l) => l.driverIndex === driverIndex);
5472
+ const occVehicleIndex = occAssignment ? occAssignment.vehicleIndex : 0;
5473
+ if (occVehicleIndex === vehicleIndex) {
5474
+ result.push({
5475
+ driverIndex: Number(driverIndex + 1),
5476
+ vehicleIndex: Number(vehicleIndex + 1),
5477
+ priority: mychoiceSdkComponents.DriverPriorityTypes.Occ,
5478
+ });
5479
+ }
5480
+ }
5481
+ }
5482
+ }
5483
+ }
5484
+ return result;
5485
+ };
5304
5486
  // vehicle
5305
- requestBody.vehicles = requestBody.vehicles.map((vehicleItem, vehicleIndex) => {
5487
+ requestBody.vehicles = requestBody.vehicles.map((vehicleItem) => {
5306
5488
  const vehicle = { ...vehicleItem, ...postalState.item };
5307
5489
  if (!vehicle.redirectURL) {
5308
5490
  delete vehicle.redirectURL;
5309
5491
  }
5310
- const vehlink = requestBody.drivers.map((_, driverIndex) => ({
5311
- driverIndex: Number(driverIndex + 1),
5312
- vehicleIndex: Number(vehicleIndex + 1),
5313
- priority: requestBody.vehlinks[vehicleIndex].driverIndex === driverIndex
5314
- ? mychoiceSdkComponents.DriverPriorityTypes.Prn : mychoiceSdkComponents.DriverPriorityTypes.Occ,
5315
- }));
5316
- localVehlinks.push(...vehlink);
5317
5492
  vehicle.purchaseDate = addDayToDate(`${vehicle.purchaseYear}-${vehicle.purchaseMonth}`);
5318
5493
  delete vehicle.purchaseYear;
5319
5494
  delete vehicle.purchaseMonth;
5320
5495
  delete vehicle.purchaseDay;
5321
- if (vehicle.primaryUse === mychoiceSdkComponents.VehiclePrimaryUseTypes.Personal) {
5496
+ if (vehicle.primaryUse === mychoiceSdkComponents.VehiclePrimaryUseTypes.Personal || vehicle.businessUsePercent) {
5322
5497
  delete vehicle.distanceBusiness;
5323
5498
  }
5324
5499
  if (!vehicle.collision.coverage) {
@@ -5339,8 +5514,7 @@ const CarQuoteDataHandler = () => {
5339
5514
  const transformedVehicle = { ...vehiclePayload };
5340
5515
  if (accidentbenefits) {
5341
5516
  const { baseCoverage, additionalCoverages } = accidentbenefits;
5342
- if (isAbReformEligible
5343
- && (baseCoverage !== 'minimum_required' || additionalCoverages.length > 0)) {
5517
+ if (isAbReformEligible && (baseCoverage !== 'minimum_required' || additionalCoverages.length > 0)) {
5344
5518
  transformedVehicle.accidentBenefits = {
5345
5519
  baseCoverage,
5346
5520
  additionalCoverages,
@@ -5350,7 +5524,7 @@ const CarQuoteDataHandler = () => {
5350
5524
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
5351
5525
  return transformedVehicle;
5352
5526
  });
5353
- requestBody.vehlinks = localVehlinks;
5527
+ requestBody.vehlinks = buildVehlinks();
5354
5528
  return {
5355
5529
  ...requestBody,
5356
5530
  };
@@ -5495,7 +5669,7 @@ const CarQuoteDataHandler = () => {
5495
5669
  });
5496
5670
  dispatchAppLoaderState({ type: exports.StoreConfigAppLoaderActionTypes.AppLoaderClose });
5497
5671
  };
5498
- return ({
5672
+ return {
5499
5673
  status,
5500
5674
  successMessage,
5501
5675
  responseData,
@@ -5505,7 +5679,7 @@ const CarQuoteDataHandler = () => {
5505
5679
  postRequestQuoteOnliaUrl,
5506
5680
  postRequestQuote,
5507
5681
  postPerformLeadsAction,
5508
- });
5682
+ };
5509
5683
  };
5510
5684
 
5511
5685
  const HomeQuoteDataHandler = () => {
@@ -5636,6 +5810,7 @@ const HomeQuoteDataHandler = () => {
5636
5810
  quoterInfo: discount.quoterInfo || {},
5637
5811
  };
5638
5812
  requestBody.quoterInfo.recalculate = isRecalc;
5813
+ requestBody.quoterInfo.initial = !isRecalc;
5639
5814
  if (requestBody.quoterInfo?.utmSource === '') {
5640
5815
  delete requestBody.quoterInfo.utmSource;
5641
5816
  }
@@ -5953,7 +6128,7 @@ const useValidationVehicle = () => {
5953
6128
  vehicleState.items.forEach((item) => {
5954
6129
  Object.keys(item).map((key) => {
5955
6130
  if (checkableKeys.includes(key) && !item[key]) {
5956
- if (!(item.primaryUse === mychoiceSdkComponents.VehiclePrimaryUseTypes.Personal && key === 'distanceBusiness')) {
6131
+ if (!(key === 'distanceBusiness' && (item.primaryUse === mychoiceSdkComponents.VehiclePrimaryUseTypes.Personal || item.businessUsePercent))) {
5957
6132
  errors.push(key);
5958
6133
  }
5959
6134
  }