@mychoice/mychoice-sdk-modules 1.0.0

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 (389) hide show
  1. package/README.md +11 -0
  2. package/dist/cjs/index.d.ts +3 -0
  3. package/dist/cjs/index.js +3194 -0
  4. package/dist/cjs/index.js.map +1 -0
  5. package/dist/cjs/init/AppConfig/AppConfig.d.ts +4 -0
  6. package/dist/cjs/init/AppConfig/helper.d.ts +2 -0
  7. package/dist/cjs/init/AppConfig/index.d.ts +1 -0
  8. package/dist/cjs/init/AppConfig/interfaces.d.ts +5 -0
  9. package/dist/cjs/init/AppContainer/AppContainer.d.ts +2 -0
  10. package/dist/cjs/init/AppContainer/index.d.ts +1 -0
  11. package/dist/cjs/init/AppHeader/AppHeader.d.ts +2 -0
  12. package/dist/cjs/init/AppHeader/index.d.ts +1 -0
  13. package/dist/cjs/init/AppLoader/AppLoader.d.ts +2 -0
  14. package/dist/cjs/init/AppLoader/index.d.ts +1 -0
  15. package/dist/cjs/init/AppModal/AppModal.d.ts +2 -0
  16. package/dist/cjs/init/AppModal/index.d.ts +1 -0
  17. package/dist/cjs/init/AppModal/interfaces.d.ts +4 -0
  18. package/dist/cjs/init/AppRouterListener/AppRouterListener.d.ts +2 -0
  19. package/dist/cjs/init/AppRouterListener/index.d.ts +1 -0
  20. package/dist/cjs/init/AppRoutes/AppRoutes.d.ts +3 -0
  21. package/dist/cjs/init/AppRoutes/BrokerKeys.d.ts +6 -0
  22. package/dist/cjs/init/AppRoutes/hoox/useRedirectPartner.d.ts +5 -0
  23. package/dist/cjs/init/AppRoutes/hoox/useRouteParams.d.ts +1 -0
  24. package/dist/cjs/init/AppRoutes/index.d.ts +3 -0
  25. package/dist/cjs/init/AppRoutes/routeTypes/RouteWrapperPrivate.d.ts +3 -0
  26. package/dist/cjs/init/AppRoutes/routeTypes/RouteWrapperPublic.d.ts +3 -0
  27. package/dist/cjs/init/AppRoutes/routeTypes/RouteWrapperRestricted.d.ts +3 -0
  28. package/dist/cjs/init/AppRoutes/routeTypes/index.d.ts +3 -0
  29. package/dist/cjs/init/AppRoutes/routeTypes/interface.d.ts +4 -0
  30. package/dist/cjs/init/AppWrapper/AppWrapper.d.ts +3 -0
  31. package/dist/cjs/init/AppWrapper/index.d.ts +1 -0
  32. package/dist/cjs/init/AppWrapper/interfaces.d.ts +5 -0
  33. package/dist/cjs/init/StoryAppWrapper/StoryAppWrapper.d.ts +3 -0
  34. package/dist/cjs/init/StoryAppWrapper/index.d.ts +1 -0
  35. package/dist/cjs/init/StoryAppWrapper/interfaces.d.ts +4 -0
  36. package/dist/cjs/init/helper.d.ts +2 -0
  37. package/dist/cjs/init/index.d.ts +3 -0
  38. package/dist/cjs/insurances/car/index.d.ts +1 -0
  39. package/dist/cjs/insurances/car/pages/discount/PageDiscount.d.ts +2 -0
  40. package/dist/cjs/insurances/car/pages/discount/helpers.d.ts +2 -0
  41. package/dist/cjs/insurances/car/pages/discount/index.d.ts +1 -0
  42. package/dist/cjs/insurances/car/pages/discount/sections/SectionDiscountInfo.d.ts +2 -0
  43. package/dist/cjs/insurances/car/pages/discount/sections/blocks/BlockNextPageInfo.d.ts +2 -0
  44. package/dist/cjs/insurances/car/pages/discount/sections/blocks/BlockSubmit.d.ts +3 -0
  45. package/dist/cjs/insurances/car/pages/discount/sections/blocks/BlockVehLinks.d.ts +2 -0
  46. package/dist/cjs/insurances/car/pages/discount/sections/blocks/index.d.ts +3 -0
  47. package/dist/cjs/insurances/car/pages/discount/sections/blocks/interfaces.d.ts +7 -0
  48. package/dist/cjs/insurances/car/pages/discount/sections/index.d.ts +1 -0
  49. package/dist/cjs/insurances/car/pages/driver/PageDriver.d.ts +2 -0
  50. package/dist/cjs/insurances/car/pages/driver/TabDriver.d.ts +3 -0
  51. package/dist/cjs/insurances/car/pages/driver/index.d.ts +1 -0
  52. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverCancellation/SectionDriverCancellation.d.ts +2 -0
  53. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverCancellation/index.d.ts +1 -0
  54. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverHistory/SectionDriverHistory.d.ts +2 -0
  55. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverHistory/blocks/BlockDriverAccident.d.ts +2 -0
  56. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverHistory/blocks/BlockDriverSuspension.d.ts +2 -0
  57. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverHistory/blocks/BlockDriverTicket.d.ts +2 -0
  58. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverHistory/blocks/index.d.ts +3 -0
  59. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverHistory/index.d.ts +1 -0
  60. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverInfo/SectionDriverInfo.d.ts +2 -0
  61. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverInfo/index.d.ts +1 -0
  62. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverInsurancePolicy/SectionDriverInsurancePolicy.d.ts +2 -0
  63. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverInsurancePolicy/index.d.ts +1 -0
  64. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverLicence/SectionDriverLicence.d.ts +2 -0
  65. package/dist/cjs/insurances/car/pages/driver/sections/SectionDriverLicence/index.d.ts +1 -0
  66. package/dist/cjs/insurances/car/pages/driver/sections/index.d.ts +5 -0
  67. package/dist/cjs/insurances/car/pages/helpers.d.ts +7 -0
  68. package/dist/cjs/insurances/car/pages/index.d.ts +6 -0
  69. package/dist/cjs/insurances/car/pages/interfaces.d.ts +9 -0
  70. package/dist/cjs/insurances/car/pages/quote/PageQuote.d.ts +2 -0
  71. package/dist/cjs/insurances/car/pages/quote/index.d.ts +1 -0
  72. package/dist/cjs/insurances/car/pages/quote/sections/SectionQuoteEdit.d.ts +2 -0
  73. package/dist/cjs/insurances/car/pages/quote/sections/SectionQuoteRecalc.d.ts +2 -0
  74. package/dist/cjs/insurances/car/pages/quote/sections/SplashScreen.d.ts +2 -0
  75. package/dist/cjs/insurances/car/pages/quote/sections/blocks/BlockEndorsements.d.ts +3 -0
  76. package/dist/cjs/insurances/car/pages/quote/sections/index.d.ts +2 -0
  77. package/dist/cjs/insurances/car/pages/vehicle/PageVehicle.d.ts +2 -0
  78. package/dist/cjs/insurances/car/pages/vehicle/TabVehicle.d.ts +3 -0
  79. package/dist/cjs/insurances/car/pages/vehicle/helpers.d.ts +3 -0
  80. package/dist/cjs/insurances/car/pages/vehicle/index.d.ts +1 -0
  81. package/dist/cjs/insurances/car/pages/vehicle/sections/SectionCoverage.d.ts +2 -0
  82. package/dist/cjs/insurances/car/pages/vehicle/sections/SectionMain.d.ts +2 -0
  83. package/dist/cjs/insurances/car/pages/vehicle/sections/blocks/BlockCarConditionInfo.d.ts +2 -0
  84. package/dist/cjs/insurances/car/pages/vehicle/sections/blocks/BlockCarInfo.d.ts +2 -0
  85. package/dist/cjs/insurances/car/pages/vehicle/sections/blocks/index.d.ts +2 -0
  86. package/dist/cjs/insurances/car/pages/vehicle/sections/index.d.ts +2 -0
  87. package/dist/cjs/insurances/helpers.d.ts +11 -0
  88. package/dist/cjs/insurances/home/index.d.ts +1 -0
  89. package/dist/cjs/insurances/home/pages/address/PageAddress.d.ts +2 -0
  90. package/dist/cjs/insurances/home/pages/address/index.d.ts +1 -0
  91. package/dist/cjs/insurances/home/pages/address/sections/SectionAddress.d.ts +2 -0
  92. package/dist/cjs/insurances/home/pages/address/sections/blocks/BlockAddressInfo.d.ts +2 -0
  93. package/dist/cjs/insurances/home/pages/address/sections/blocks/index.d.ts +1 -0
  94. package/dist/cjs/insurances/home/pages/address/sections/index.d.ts +1 -0
  95. package/dist/cjs/insurances/home/pages/applicant/PageApplicant.d.ts +2 -0
  96. package/dist/cjs/insurances/home/pages/applicant/index.d.ts +1 -0
  97. package/dist/cjs/insurances/home/pages/applicant/sections/SectionApplicantCancellation/SectionApplicantCancellation.d.ts +2 -0
  98. package/dist/cjs/insurances/home/pages/applicant/sections/SectionApplicantCancellation/index.d.ts +1 -0
  99. package/dist/cjs/insurances/home/pages/applicant/sections/SectionApplicantClaim/SectionApplicantClaim.d.ts +2 -0
  100. package/dist/cjs/insurances/home/pages/applicant/sections/SectionApplicantClaim/index.d.ts +1 -0
  101. package/dist/cjs/insurances/home/pages/applicant/sections/SectionApplicantInfo/SectionApplicantInfo.d.ts +2 -0
  102. package/dist/cjs/insurances/home/pages/applicant/sections/SectionApplicantInfo/index.d.ts +1 -0
  103. package/dist/cjs/insurances/home/pages/applicant/sections/SectionApplicantInsurancePolicy/SectionApplicantInsurancePolicy.d.ts +2 -0
  104. package/dist/cjs/insurances/home/pages/applicant/sections/SectionApplicantInsurancePolicy/index.d.ts +1 -0
  105. package/dist/cjs/insurances/home/pages/applicant/sections/index.d.ts +4 -0
  106. package/dist/cjs/insurances/home/pages/discount/PageDiscount.d.ts +2 -0
  107. package/dist/cjs/insurances/home/pages/discount/index.d.ts +1 -0
  108. package/dist/cjs/insurances/home/pages/discount/sections/SectionDiscountInfo.d.ts +2 -0
  109. package/dist/cjs/insurances/home/pages/discount/sections/blocks/BlockDwellingInfo.d.ts +2 -0
  110. package/dist/cjs/insurances/home/pages/discount/sections/blocks/BlockNextPageInfo.d.ts +2 -0
  111. package/dist/cjs/insurances/home/pages/discount/sections/blocks/BlockSubmit.d.ts +3 -0
  112. package/dist/cjs/insurances/home/pages/discount/sections/blocks/index.d.ts +3 -0
  113. package/dist/cjs/insurances/home/pages/discount/sections/blocks/interfaces.d.ts +7 -0
  114. package/dist/cjs/insurances/home/pages/discount/sections/index.d.ts +1 -0
  115. package/dist/cjs/insurances/home/pages/dwelling/PageProperty.d.ts +2 -0
  116. package/dist/cjs/insurances/home/pages/dwelling/helpers.d.ts +3 -0
  117. package/dist/cjs/insurances/home/pages/dwelling/index.d.ts +1 -0
  118. package/dist/cjs/insurances/home/pages/dwelling/sections/SectionDwelling.d.ts +2 -0
  119. package/dist/cjs/insurances/home/pages/dwelling/sections/index.d.ts +1 -0
  120. package/dist/cjs/insurances/home/pages/helpers.d.ts +4 -0
  121. package/dist/cjs/insurances/home/pages/index.d.ts +4 -0
  122. package/dist/cjs/insurances/index.d.ts +3 -0
  123. package/dist/cjs/shared/boxes/Container/Container.d.ts +3 -0
  124. package/dist/cjs/shared/boxes/Container/index.d.ts +2 -0
  125. package/dist/cjs/shared/boxes/Container/interface.d.ts +7 -0
  126. package/dist/cjs/shared/boxes/DateSelectFormBox/DateSelectFormBox.d.ts +3 -0
  127. package/dist/cjs/shared/boxes/DateSelectFormBox/index.d.ts +1 -0
  128. package/dist/cjs/shared/boxes/DateSelectFormBox/interface.d.ts +21 -0
  129. package/dist/cjs/shared/boxes/InputFormBox/InputFormBox.d.ts +3 -0
  130. package/dist/cjs/shared/boxes/InputFormBox/InputFormEmailBox.d.ts +3 -0
  131. package/dist/cjs/shared/boxes/InputFormBox/InputFormLicenceBox.d.ts +3 -0
  132. package/dist/cjs/shared/boxes/InputFormBox/InputFormPhoneBox.d.ts +3 -0
  133. package/dist/cjs/shared/boxes/InputFormBox/index.d.ts +4 -0
  134. package/dist/cjs/shared/boxes/InputFormBox/interface.d.ts +14 -0
  135. package/dist/cjs/shared/boxes/LabelFormBox/LabelFormBox.d.ts +3 -0
  136. package/dist/cjs/shared/boxes/LabelFormBox/index.d.ts +1 -0
  137. package/dist/cjs/shared/boxes/LabelFormBox/interface.d.ts +10 -0
  138. package/dist/cjs/shared/boxes/SelectFormBox/SelectFormBox.d.ts +3 -0
  139. package/dist/cjs/shared/boxes/SelectFormBox/index.d.ts +1 -0
  140. package/dist/cjs/shared/boxes/SelectFormBox/interface.d.ts +12 -0
  141. package/dist/cjs/shared/boxes/SwitchButtonBox/SwitchButtonBox.d.ts +3 -0
  142. package/dist/cjs/shared/boxes/SwitchButtonBox/index.d.ts +1 -0
  143. package/dist/cjs/shared/boxes/SwitchButtonBox/interface.d.ts +10 -0
  144. package/dist/cjs/shared/boxes/index.d.ts +5 -0
  145. package/dist/cjs/shared/headers/HeaderDesktop/Mychoice.d.ts +3 -0
  146. package/dist/cjs/shared/headers/HeaderDesktop/Partner.d.ts +3 -0
  147. package/dist/cjs/shared/headers/HeaderDesktop/TheBig.d.ts +3 -0
  148. package/dist/cjs/shared/headers/HeaderDesktop/index.d.ts +3 -0
  149. package/dist/cjs/shared/headers/HeaderMobile/MyChoice.d.ts +3 -0
  150. package/dist/cjs/shared/headers/HeaderMobile/index.d.ts +1 -0
  151. package/dist/cjs/shared/headers/constants.d.ts +11 -0
  152. package/dist/cjs/shared/headers/index.d.ts +4 -0
  153. package/dist/cjs/shared/headers/interfaces.d.ts +8 -0
  154. package/dist/cjs/shared/index.d.ts +6 -0
  155. package/dist/cjs/shared/loaders/LoaderPrimary/LoaderPrimary.d.ts +2 -0
  156. package/dist/cjs/shared/loaders/LoaderPrimary/index.d.ts +1 -0
  157. package/dist/cjs/shared/loaders/index.d.ts +1 -0
  158. package/dist/cjs/shared/modals/ModalConfirm/ModalConfirm.d.ts +2 -0
  159. package/dist/cjs/shared/modals/ModalConfirm/index.d.ts +1 -0
  160. package/dist/cjs/shared/modals/ModalFinale/ModalFinale.d.ts +2 -0
  161. package/dist/cjs/shared/modals/ModalFinale/index.d.ts +1 -0
  162. package/dist/cjs/shared/modals/ModalMessage/ModalMessage.d.ts +2 -0
  163. package/dist/cjs/shared/modals/ModalMessage/index.d.ts +1 -0
  164. package/dist/cjs/shared/modals/ModalPostal/ModalPostal.d.ts +3 -0
  165. package/dist/cjs/shared/modals/ModalPostal/index.d.ts +1 -0
  166. package/dist/cjs/shared/modals/ModalQuoteRequest/ModalQuoteRequest.d.ts +3 -0
  167. package/dist/cjs/shared/modals/ModalQuoteRequest/index.d.ts +1 -0
  168. package/dist/cjs/shared/modals/index.d.ts +5 -0
  169. package/dist/cjs/shared/modals/interfaces.d.ts +21 -0
  170. package/dist/cjs/shared/navigations/NavigationBottom/NavigationBottom.d.ts +3 -0
  171. package/dist/cjs/shared/navigations/NavigationBottom/NavigationBottomTheBig.d.ts +3 -0
  172. package/dist/cjs/shared/navigations/NavigationBottom/index.d.ts +2 -0
  173. package/dist/cjs/shared/navigations/NavigationTab/NavigationTab.d.ts +3 -0
  174. package/dist/cjs/shared/navigations/NavigationTab/NavigationTabMobile.d.ts +3 -0
  175. package/dist/cjs/shared/navigations/NavigationTab/index.d.ts +3 -0
  176. package/dist/cjs/shared/navigations/NavigationTab/interface.d.ts +18 -0
  177. package/dist/cjs/shared/navigations/NavigationTop/NavigationTop.d.ts +3 -0
  178. package/dist/cjs/shared/navigations/NavigationTop/components/ButtonsBox.d.ts +3 -0
  179. package/dist/cjs/shared/navigations/NavigationTop/components/PostalCodeDataBox.d.ts +3 -0
  180. package/dist/cjs/shared/navigations/NavigationTop/components/StepsBox.d.ts +3 -0
  181. package/dist/cjs/shared/navigations/NavigationTop/components/index.d.ts +3 -0
  182. package/dist/cjs/shared/navigations/NavigationTop/components/interface.d.ts +5 -0
  183. package/dist/cjs/shared/navigations/NavigationTop/index.d.ts +1 -0
  184. package/dist/cjs/shared/navigations/constants/index.d.ts +1 -0
  185. package/dist/cjs/shared/navigations/constants/insuranceSteps.d.ts +17 -0
  186. package/dist/cjs/shared/navigations/index.d.ts +5 -0
  187. package/dist/cjs/shared/navigations/interfaces.d.ts +34 -0
  188. package/dist/cjs/shared/sections/index.d.ts +1 -0
  189. package/dist/cjs/shared/sections/quotes/OfferSection/OfferSection.d.ts +3 -0
  190. package/dist/cjs/shared/sections/quotes/OfferSection/index.d.ts +1 -0
  191. package/dist/cjs/shared/sections/quotes/index.d.ts +1 -0
  192. package/dist/cjs/shared/sections/quotes/interfaces.d.ts +11 -0
  193. package/dist/esm/index.d.ts +3 -0
  194. package/dist/esm/index.js +3138 -0
  195. package/dist/esm/index.js.map +1 -0
  196. package/dist/esm/init/AppConfig/AppConfig.d.ts +4 -0
  197. package/dist/esm/init/AppConfig/helper.d.ts +2 -0
  198. package/dist/esm/init/AppConfig/index.d.ts +1 -0
  199. package/dist/esm/init/AppConfig/interfaces.d.ts +5 -0
  200. package/dist/esm/init/AppContainer/AppContainer.d.ts +2 -0
  201. package/dist/esm/init/AppContainer/index.d.ts +1 -0
  202. package/dist/esm/init/AppHeader/AppHeader.d.ts +2 -0
  203. package/dist/esm/init/AppHeader/index.d.ts +1 -0
  204. package/dist/esm/init/AppLoader/AppLoader.d.ts +2 -0
  205. package/dist/esm/init/AppLoader/index.d.ts +1 -0
  206. package/dist/esm/init/AppModal/AppModal.d.ts +2 -0
  207. package/dist/esm/init/AppModal/index.d.ts +1 -0
  208. package/dist/esm/init/AppModal/interfaces.d.ts +4 -0
  209. package/dist/esm/init/AppRouterListener/AppRouterListener.d.ts +2 -0
  210. package/dist/esm/init/AppRouterListener/index.d.ts +1 -0
  211. package/dist/esm/init/AppRoutes/AppRoutes.d.ts +3 -0
  212. package/dist/esm/init/AppRoutes/BrokerKeys.d.ts +6 -0
  213. package/dist/esm/init/AppRoutes/hoox/useRedirectPartner.d.ts +5 -0
  214. package/dist/esm/init/AppRoutes/hoox/useRouteParams.d.ts +1 -0
  215. package/dist/esm/init/AppRoutes/index.d.ts +3 -0
  216. package/dist/esm/init/AppRoutes/routeTypes/RouteWrapperPrivate.d.ts +3 -0
  217. package/dist/esm/init/AppRoutes/routeTypes/RouteWrapperPublic.d.ts +3 -0
  218. package/dist/esm/init/AppRoutes/routeTypes/RouteWrapperRestricted.d.ts +3 -0
  219. package/dist/esm/init/AppRoutes/routeTypes/index.d.ts +3 -0
  220. package/dist/esm/init/AppRoutes/routeTypes/interface.d.ts +4 -0
  221. package/dist/esm/init/AppWrapper/AppWrapper.d.ts +3 -0
  222. package/dist/esm/init/AppWrapper/index.d.ts +1 -0
  223. package/dist/esm/init/AppWrapper/interfaces.d.ts +5 -0
  224. package/dist/esm/init/StoryAppWrapper/StoryAppWrapper.d.ts +3 -0
  225. package/dist/esm/init/StoryAppWrapper/index.d.ts +1 -0
  226. package/dist/esm/init/StoryAppWrapper/interfaces.d.ts +4 -0
  227. package/dist/esm/init/helper.d.ts +2 -0
  228. package/dist/esm/init/index.d.ts +3 -0
  229. package/dist/esm/insurances/car/index.d.ts +1 -0
  230. package/dist/esm/insurances/car/pages/discount/PageDiscount.d.ts +2 -0
  231. package/dist/esm/insurances/car/pages/discount/helpers.d.ts +2 -0
  232. package/dist/esm/insurances/car/pages/discount/index.d.ts +1 -0
  233. package/dist/esm/insurances/car/pages/discount/sections/SectionDiscountInfo.d.ts +2 -0
  234. package/dist/esm/insurances/car/pages/discount/sections/blocks/BlockNextPageInfo.d.ts +2 -0
  235. package/dist/esm/insurances/car/pages/discount/sections/blocks/BlockSubmit.d.ts +3 -0
  236. package/dist/esm/insurances/car/pages/discount/sections/blocks/BlockVehLinks.d.ts +2 -0
  237. package/dist/esm/insurances/car/pages/discount/sections/blocks/index.d.ts +3 -0
  238. package/dist/esm/insurances/car/pages/discount/sections/blocks/interfaces.d.ts +7 -0
  239. package/dist/esm/insurances/car/pages/discount/sections/index.d.ts +1 -0
  240. package/dist/esm/insurances/car/pages/driver/PageDriver.d.ts +2 -0
  241. package/dist/esm/insurances/car/pages/driver/TabDriver.d.ts +3 -0
  242. package/dist/esm/insurances/car/pages/driver/index.d.ts +1 -0
  243. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverCancellation/SectionDriverCancellation.d.ts +2 -0
  244. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverCancellation/index.d.ts +1 -0
  245. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverHistory/SectionDriverHistory.d.ts +2 -0
  246. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverHistory/blocks/BlockDriverAccident.d.ts +2 -0
  247. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverHistory/blocks/BlockDriverSuspension.d.ts +2 -0
  248. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverHistory/blocks/BlockDriverTicket.d.ts +2 -0
  249. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverHistory/blocks/index.d.ts +3 -0
  250. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverHistory/index.d.ts +1 -0
  251. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverInfo/SectionDriverInfo.d.ts +2 -0
  252. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverInfo/index.d.ts +1 -0
  253. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverInsurancePolicy/SectionDriverInsurancePolicy.d.ts +2 -0
  254. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverInsurancePolicy/index.d.ts +1 -0
  255. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverLicence/SectionDriverLicence.d.ts +2 -0
  256. package/dist/esm/insurances/car/pages/driver/sections/SectionDriverLicence/index.d.ts +1 -0
  257. package/dist/esm/insurances/car/pages/driver/sections/index.d.ts +5 -0
  258. package/dist/esm/insurances/car/pages/helpers.d.ts +7 -0
  259. package/dist/esm/insurances/car/pages/index.d.ts +6 -0
  260. package/dist/esm/insurances/car/pages/interfaces.d.ts +9 -0
  261. package/dist/esm/insurances/car/pages/quote/PageQuote.d.ts +2 -0
  262. package/dist/esm/insurances/car/pages/quote/index.d.ts +1 -0
  263. package/dist/esm/insurances/car/pages/quote/sections/SectionQuoteEdit.d.ts +2 -0
  264. package/dist/esm/insurances/car/pages/quote/sections/SectionQuoteRecalc.d.ts +2 -0
  265. package/dist/esm/insurances/car/pages/quote/sections/SplashScreen.d.ts +2 -0
  266. package/dist/esm/insurances/car/pages/quote/sections/blocks/BlockEndorsements.d.ts +3 -0
  267. package/dist/esm/insurances/car/pages/quote/sections/index.d.ts +2 -0
  268. package/dist/esm/insurances/car/pages/vehicle/PageVehicle.d.ts +2 -0
  269. package/dist/esm/insurances/car/pages/vehicle/TabVehicle.d.ts +3 -0
  270. package/dist/esm/insurances/car/pages/vehicle/helpers.d.ts +3 -0
  271. package/dist/esm/insurances/car/pages/vehicle/index.d.ts +1 -0
  272. package/dist/esm/insurances/car/pages/vehicle/sections/SectionCoverage.d.ts +2 -0
  273. package/dist/esm/insurances/car/pages/vehicle/sections/SectionMain.d.ts +2 -0
  274. package/dist/esm/insurances/car/pages/vehicle/sections/blocks/BlockCarConditionInfo.d.ts +2 -0
  275. package/dist/esm/insurances/car/pages/vehicle/sections/blocks/BlockCarInfo.d.ts +2 -0
  276. package/dist/esm/insurances/car/pages/vehicle/sections/blocks/index.d.ts +2 -0
  277. package/dist/esm/insurances/car/pages/vehicle/sections/index.d.ts +2 -0
  278. package/dist/esm/insurances/helpers.d.ts +11 -0
  279. package/dist/esm/insurances/home/index.d.ts +1 -0
  280. package/dist/esm/insurances/home/pages/address/PageAddress.d.ts +2 -0
  281. package/dist/esm/insurances/home/pages/address/index.d.ts +1 -0
  282. package/dist/esm/insurances/home/pages/address/sections/SectionAddress.d.ts +2 -0
  283. package/dist/esm/insurances/home/pages/address/sections/blocks/BlockAddressInfo.d.ts +2 -0
  284. package/dist/esm/insurances/home/pages/address/sections/blocks/index.d.ts +1 -0
  285. package/dist/esm/insurances/home/pages/address/sections/index.d.ts +1 -0
  286. package/dist/esm/insurances/home/pages/applicant/PageApplicant.d.ts +2 -0
  287. package/dist/esm/insurances/home/pages/applicant/index.d.ts +1 -0
  288. package/dist/esm/insurances/home/pages/applicant/sections/SectionApplicantCancellation/SectionApplicantCancellation.d.ts +2 -0
  289. package/dist/esm/insurances/home/pages/applicant/sections/SectionApplicantCancellation/index.d.ts +1 -0
  290. package/dist/esm/insurances/home/pages/applicant/sections/SectionApplicantClaim/SectionApplicantClaim.d.ts +2 -0
  291. package/dist/esm/insurances/home/pages/applicant/sections/SectionApplicantClaim/index.d.ts +1 -0
  292. package/dist/esm/insurances/home/pages/applicant/sections/SectionApplicantInfo/SectionApplicantInfo.d.ts +2 -0
  293. package/dist/esm/insurances/home/pages/applicant/sections/SectionApplicantInfo/index.d.ts +1 -0
  294. package/dist/esm/insurances/home/pages/applicant/sections/SectionApplicantInsurancePolicy/SectionApplicantInsurancePolicy.d.ts +2 -0
  295. package/dist/esm/insurances/home/pages/applicant/sections/SectionApplicantInsurancePolicy/index.d.ts +1 -0
  296. package/dist/esm/insurances/home/pages/applicant/sections/index.d.ts +4 -0
  297. package/dist/esm/insurances/home/pages/discount/PageDiscount.d.ts +2 -0
  298. package/dist/esm/insurances/home/pages/discount/index.d.ts +1 -0
  299. package/dist/esm/insurances/home/pages/discount/sections/SectionDiscountInfo.d.ts +2 -0
  300. package/dist/esm/insurances/home/pages/discount/sections/blocks/BlockDwellingInfo.d.ts +2 -0
  301. package/dist/esm/insurances/home/pages/discount/sections/blocks/BlockNextPageInfo.d.ts +2 -0
  302. package/dist/esm/insurances/home/pages/discount/sections/blocks/BlockSubmit.d.ts +3 -0
  303. package/dist/esm/insurances/home/pages/discount/sections/blocks/index.d.ts +3 -0
  304. package/dist/esm/insurances/home/pages/discount/sections/blocks/interfaces.d.ts +7 -0
  305. package/dist/esm/insurances/home/pages/discount/sections/index.d.ts +1 -0
  306. package/dist/esm/insurances/home/pages/dwelling/PageProperty.d.ts +2 -0
  307. package/dist/esm/insurances/home/pages/dwelling/helpers.d.ts +3 -0
  308. package/dist/esm/insurances/home/pages/dwelling/index.d.ts +1 -0
  309. package/dist/esm/insurances/home/pages/dwelling/sections/SectionDwelling.d.ts +2 -0
  310. package/dist/esm/insurances/home/pages/dwelling/sections/index.d.ts +1 -0
  311. package/dist/esm/insurances/home/pages/helpers.d.ts +4 -0
  312. package/dist/esm/insurances/home/pages/index.d.ts +4 -0
  313. package/dist/esm/insurances/index.d.ts +3 -0
  314. package/dist/esm/shared/boxes/Container/Container.d.ts +3 -0
  315. package/dist/esm/shared/boxes/Container/index.d.ts +2 -0
  316. package/dist/esm/shared/boxes/Container/interface.d.ts +7 -0
  317. package/dist/esm/shared/boxes/DateSelectFormBox/DateSelectFormBox.d.ts +3 -0
  318. package/dist/esm/shared/boxes/DateSelectFormBox/index.d.ts +1 -0
  319. package/dist/esm/shared/boxes/DateSelectFormBox/interface.d.ts +21 -0
  320. package/dist/esm/shared/boxes/InputFormBox/InputFormBox.d.ts +3 -0
  321. package/dist/esm/shared/boxes/InputFormBox/InputFormEmailBox.d.ts +3 -0
  322. package/dist/esm/shared/boxes/InputFormBox/InputFormLicenceBox.d.ts +3 -0
  323. package/dist/esm/shared/boxes/InputFormBox/InputFormPhoneBox.d.ts +3 -0
  324. package/dist/esm/shared/boxes/InputFormBox/index.d.ts +4 -0
  325. package/dist/esm/shared/boxes/InputFormBox/interface.d.ts +14 -0
  326. package/dist/esm/shared/boxes/LabelFormBox/LabelFormBox.d.ts +3 -0
  327. package/dist/esm/shared/boxes/LabelFormBox/index.d.ts +1 -0
  328. package/dist/esm/shared/boxes/LabelFormBox/interface.d.ts +10 -0
  329. package/dist/esm/shared/boxes/SelectFormBox/SelectFormBox.d.ts +3 -0
  330. package/dist/esm/shared/boxes/SelectFormBox/index.d.ts +1 -0
  331. package/dist/esm/shared/boxes/SelectFormBox/interface.d.ts +12 -0
  332. package/dist/esm/shared/boxes/SwitchButtonBox/SwitchButtonBox.d.ts +3 -0
  333. package/dist/esm/shared/boxes/SwitchButtonBox/index.d.ts +1 -0
  334. package/dist/esm/shared/boxes/SwitchButtonBox/interface.d.ts +10 -0
  335. package/dist/esm/shared/boxes/index.d.ts +5 -0
  336. package/dist/esm/shared/headers/HeaderDesktop/Mychoice.d.ts +3 -0
  337. package/dist/esm/shared/headers/HeaderDesktop/Partner.d.ts +3 -0
  338. package/dist/esm/shared/headers/HeaderDesktop/TheBig.d.ts +3 -0
  339. package/dist/esm/shared/headers/HeaderDesktop/index.d.ts +3 -0
  340. package/dist/esm/shared/headers/HeaderMobile/MyChoice.d.ts +3 -0
  341. package/dist/esm/shared/headers/HeaderMobile/index.d.ts +1 -0
  342. package/dist/esm/shared/headers/constants.d.ts +11 -0
  343. package/dist/esm/shared/headers/index.d.ts +4 -0
  344. package/dist/esm/shared/headers/interfaces.d.ts +8 -0
  345. package/dist/esm/shared/index.d.ts +6 -0
  346. package/dist/esm/shared/loaders/LoaderPrimary/LoaderPrimary.d.ts +2 -0
  347. package/dist/esm/shared/loaders/LoaderPrimary/index.d.ts +1 -0
  348. package/dist/esm/shared/loaders/index.d.ts +1 -0
  349. package/dist/esm/shared/modals/ModalConfirm/ModalConfirm.d.ts +2 -0
  350. package/dist/esm/shared/modals/ModalConfirm/index.d.ts +1 -0
  351. package/dist/esm/shared/modals/ModalFinale/ModalFinale.d.ts +2 -0
  352. package/dist/esm/shared/modals/ModalFinale/index.d.ts +1 -0
  353. package/dist/esm/shared/modals/ModalMessage/ModalMessage.d.ts +2 -0
  354. package/dist/esm/shared/modals/ModalMessage/index.d.ts +1 -0
  355. package/dist/esm/shared/modals/ModalPostal/ModalPostal.d.ts +3 -0
  356. package/dist/esm/shared/modals/ModalPostal/index.d.ts +1 -0
  357. package/dist/esm/shared/modals/ModalQuoteRequest/ModalQuoteRequest.d.ts +3 -0
  358. package/dist/esm/shared/modals/ModalQuoteRequest/index.d.ts +1 -0
  359. package/dist/esm/shared/modals/index.d.ts +5 -0
  360. package/dist/esm/shared/modals/interfaces.d.ts +21 -0
  361. package/dist/esm/shared/navigations/NavigationBottom/NavigationBottom.d.ts +3 -0
  362. package/dist/esm/shared/navigations/NavigationBottom/NavigationBottomTheBig.d.ts +3 -0
  363. package/dist/esm/shared/navigations/NavigationBottom/index.d.ts +2 -0
  364. package/dist/esm/shared/navigations/NavigationTab/NavigationTab.d.ts +3 -0
  365. package/dist/esm/shared/navigations/NavigationTab/NavigationTabMobile.d.ts +3 -0
  366. package/dist/esm/shared/navigations/NavigationTab/index.d.ts +3 -0
  367. package/dist/esm/shared/navigations/NavigationTab/interface.d.ts +18 -0
  368. package/dist/esm/shared/navigations/NavigationTop/NavigationTop.d.ts +3 -0
  369. package/dist/esm/shared/navigations/NavigationTop/components/ButtonsBox.d.ts +3 -0
  370. package/dist/esm/shared/navigations/NavigationTop/components/PostalCodeDataBox.d.ts +3 -0
  371. package/dist/esm/shared/navigations/NavigationTop/components/StepsBox.d.ts +3 -0
  372. package/dist/esm/shared/navigations/NavigationTop/components/index.d.ts +3 -0
  373. package/dist/esm/shared/navigations/NavigationTop/components/interface.d.ts +5 -0
  374. package/dist/esm/shared/navigations/NavigationTop/index.d.ts +1 -0
  375. package/dist/esm/shared/navigations/constants/index.d.ts +1 -0
  376. package/dist/esm/shared/navigations/constants/insuranceSteps.d.ts +17 -0
  377. package/dist/esm/shared/navigations/index.d.ts +5 -0
  378. package/dist/esm/shared/navigations/interfaces.d.ts +34 -0
  379. package/dist/esm/shared/sections/index.d.ts +1 -0
  380. package/dist/esm/shared/sections/quotes/OfferSection/OfferSection.d.ts +3 -0
  381. package/dist/esm/shared/sections/quotes/OfferSection/index.d.ts +1 -0
  382. package/dist/esm/shared/sections/quotes/index.d.ts +1 -0
  383. package/dist/esm/shared/sections/quotes/interfaces.d.ts +11 -0
  384. package/dist/images/logotype-mychoice-primary.png +0 -0
  385. package/dist/images/logotype-thebig-primary.png +0 -0
  386. package/dist/images/pigLoader.mp4 +0 -0
  387. package/dist/images/powered-by-mychoice.png +0 -0
  388. package/dist/index.d.ts +292 -0
  389. package/package.json +40 -0
@@ -0,0 +1,3138 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { AppTypes, TitleForm, TooltipForm, IconDelete, ColorVariablesTypes, InputTypes, InputForm, InputFormPhone, InputFormEmail, InputFormLicence, SelectForm, getFormattedDate, DateTypes, getDateOptions, ButtonForm, OfferHeader, OfferPrice, ButtonBase, ButtonTypes, CategoryTypes, ColorTypes, ButtonVariantTypes, SizeTypes, IconDropdownArrow, OfferDetail, CompanyRoleTypes, OperationHoursInfo, InsuranceTypes, HeaderNavGroup, ButtonMenu, IconLoaderPrimary, RequestStatusTypes, formatPostalCode, IconLoaderSecondary, postalCodeFormat, DeviceTypes, Step, ButtonArrow, DirectionTypes, ButtonTabArrow, ButtonTab, ButtonTabMobile, NavigationCar, NavigationPerson, NavigationDiscount, NavigationQuotes, NavigationAddress, NavigationProperty, ModalTypes, defaultLocalIndex, defaultBrokerPhone, useEffectOnce, yearMessage, carCondition, carStatus, carWinterTiresCheck, carKeepPlace, carUsagePurpose, firstDriveDistanceList, dailyDriveBusinessDistanceList, yearlyDriveDistanceList, numberWithCommas, VehiclePrimaryUseTypes, comprehensiveCoverage, collisionCoverage, maritalStatusOptions, subYearsFromDate, occupationOptions, genderOptions, applicantRelationshipOptions, compareDates, DriverLicenceTypes, addMonthsToDate, addYearsToDate, getDifferenceInYears, yesNoOptions, addDaysToDate, getMinDate, CheckboxForm, subMonthsFromDate, getMinDateByYears, insuranceCancellationReasonOptions, DriverListTypes, licenceSuspensionsReasonOptions, trafficTicketsGroupOptions, DriverPriorityTypes, ValidationStatusTypes, QuoteEdit, coverageOptions, liabilityOptions, homeOwnerTypeOptions, residentsOptions, insuredYearsOptions, ApplicantListTypes, claimTypeOptions, exteriorFinishOptions, constructionTypeOptions, garageTypeOptions, getNumericOptions, fireHallDistanceOptions, fireHydrantDistanceOptions, heatingTypeOptions, buildingStructureOptions, InfoMessage } from '@mychoice/mychoice-sdk-components';
3
+ import { useStoreAppConfig, QuoteDataHandler, useStorePartner, useStoreAppLoader, useStoreAppModal, StoreConfigAppModalActionTypes, useHandlerPostal, useStoreDeviceType, useHandlerCarMake, useHandlerCarModel, useStoreFormCarVehicle, StoreFormCarVehicleActionTypes, useStoreFormCarDiscount, StoreFormCarDiscountActionTypes, useValidationVehicle, useStoreFormCarDriverBase, StoreFormCarDriverBaseActionTypes, useStoreFormCarConfig, useStoreFormCarDriverInfo, StoreFormCarDriverInfoActionTypes, useStoreFormCarDriverLicence, addDayToDate, StoreFormCarDriverLicenceActionTypes, useStoreFormCarDriverInsurance, useStoreFormCarQuote, StoreFormCarDriverInsuranceActionTypes, useStoreFormCarDriverCancellation, StoreFormCarDriverCancellationActionTypes, useStoreFormCarDriverSuspension, StoreFormCarDriverSuspensionActionTypes, useStoreFormCarDriverAccident, StoreFormCarDriverAccidentActionTypes, useStoreFormCarDriverTicket, StoreFormCarDriverTicketActionTypes, useValidationDriver, useValidationCarDiscount, useHandlerQuoterEmail, useStoreFormHomePostal, useStoreFormHomeAddress, StoreFormHomeAddressActionTypes, StoreFormHomePostalActionTypes, useValidationAddress, useStoreFormHomeApplicantInfo, useStoreFormHomeDwelling, StoreFormHomeApplicantInfoActionTypes, StoreFormHomeDwellingActionTypes, useStoreFormHomeApplicantInsurance, useStoreFormHomeDiscount, StoreFormHomeApplicantInsuranceActionTypes, useStoreFormHomeApplicantCancellation, useStoreFormHomeApplicantBase, StoreFormHomeApplicantCancellationActionTypes, StoreFormHomeApplicantBaseActionTypes, useStoreFormHomeApplicantClaim, StoreFormHomeApplicantClaimActionTypes, useValidationApplicant, useValidationDwelling, StoreFormHomeDiscountActionTypes, StoreConfigAppConfigActionTypes, useStoreFormCarPostal, ClearFormDataHandler, useStoreAppDevice, useStoreClient, useHandlerAuth, useHandlerPartner, StoreConfigAppLoaderActionTypes, StoreFormCarConfigActionTypes, StoreFormCarPostalActionTypes, StoreFormCarQuoteActionTypes, StoreClientActionTypes, StoreConfigAppDeviceActionTypes, StoreProvider, initHttpResponse } from '@mychoice/mychoice-sdk-store';
4
+ import { useNavigate, useLocation, BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
5
+ import React, { useState, useCallback, useEffect } from 'react';
6
+ import TagManager from 'react-gtm-module';
7
+ import 'react-phone-input-2/lib/style.css';
8
+
9
+ const LabelFormBox = (props) => {
10
+ const { name, className, title, subTitle, description, isRemovable, onIconClick, isActive, } = props;
11
+ const { appConfigState: { appType } } = useStoreAppConfig();
12
+ const isThebig = appType === AppTypes.TheBig;
13
+ return (jsxs("div", { className: `label-container ${className}`, children: [jsx(TitleForm, { className: isThebig ? 'thebig-medium' : '', title: title, subTitle: subTitle, isActive: isActive }), (name && description)
14
+ && jsx(TooltipForm, { id: `${name.toLowerCase()}-tooltip`, description: description }), isRemovable
15
+ && (jsx(IconDelete, { className: "icon-label-delete", onClick: onIconClick, color: ColorVariablesTypes.Primary, height: "1.125rem", width: "1.125rem" }))] }));
16
+ };
17
+ LabelFormBox.defaultProps = {
18
+ className: '',
19
+ isActive: false,
20
+ };
21
+
22
+ const Container = (props) => {
23
+ const { name, className, title, subTitle, description, isRemovable, onIconClick, errorMessage, hintMessage, children, } = props;
24
+ return (jsxs("div", { className: `input-form-box-container ${className}`, children: [title && name ? (jsx(LabelFormBox, { name: name, title: title, subTitle: subTitle, description: description, isRemovable: isRemovable, onIconClick: onIconClick })) : '', children, errorMessage && jsx("p", { className: "error-message", children: errorMessage }), hintMessage && jsx("p", { className: "hint-message", children: hintMessage })] }));
25
+ };
26
+ Container.defaultProps = {
27
+ name: '',
28
+ className: '',
29
+ title: '',
30
+ subTitle: '',
31
+ description: '',
32
+ errorMessage: '',
33
+ hintMessage: '',
34
+ };
35
+
36
+ const InputFormBox = (props) => {
37
+ const { className, defaultValue, placeholder, disabled, error, name, title, subTitle, description, onChange, errorMessage, hintMessage, type, minValue, maxValue, } = props;
38
+ return (jsx(Container, { name: name, className: ` ${className} ${error ? 'error' : ''}`, title: title, subTitle: subTitle, description: description, errorMessage: errorMessage, hintMessage: hintMessage, children: jsx(InputForm, { className: "input-form", name: name, type: type, defaultValue: defaultValue, onChange: onChange, placeholder: placeholder, disabled: disabled, minValue: minValue, maxValue: maxValue }) }));
39
+ };
40
+ InputFormBox.defaultProps = {
41
+ className: '',
42
+ type: InputTypes.Text,
43
+ title: '',
44
+ };
45
+
46
+ const InputFormPhoneBox = (props) => {
47
+ const { className, defaultValue, placeholder, disabled, error, name, title, onChange, errorMessage, hintMessage, } = props;
48
+ return (jsx(Container, { name: name, className: ` ${className} ${error ? 'error' : ''}`, title: title, errorMessage: errorMessage, hintMessage: hintMessage, children: jsx(InputFormPhone, { className: "input-form", name: name, type: InputTypes.Text, defaultValue: defaultValue, onChange: onChange, placeholder: placeholder, disabled: disabled }) }));
49
+ };
50
+ InputFormPhoneBox.defaultProps = {
51
+ className: '',
52
+ title: '',
53
+ };
54
+
55
+ const InputFormEmailBox = (props) => {
56
+ const { className, defaultValue, placeholder, disabled, error, name, title, onChange, errorMessage, hintMessage, description, validationStatus, } = props;
57
+ return (jsx(Container, { name: name, className: ` ${className} ${error ? 'error' : ''}`, title: title, errorMessage: errorMessage, hintMessage: hintMessage, description: description, children: jsx(InputFormEmail, { name: name, defaultValue: defaultValue, onChange: onChange, placeholder: placeholder, disabled: disabled, validationStatus: validationStatus, error: error }) }));
58
+ };
59
+ InputFormEmailBox.defaultProps = {
60
+ className: '',
61
+ title: '',
62
+ };
63
+
64
+ const InputFormLicenceBox = (props) => {
65
+ const { className, defaultValue, placeholder, disabled, error, name, title, description, onChange, errorMessage, hintMessage, maxLength, } = props;
66
+ return (jsx(Container, { name: name, className: ` ${className} ${error ? 'error' : ''}`, title: title, description: description, errorMessage: errorMessage, hintMessage: hintMessage, children: jsx(InputFormLicence, { className: "input-form", name: name, type: InputTypes.Text, defaultValue: defaultValue, onChange: onChange, placeholder: placeholder, disabled: disabled, maxLength: maxLength }) }));
67
+ };
68
+ InputFormLicenceBox.defaultProps = {
69
+ className: '',
70
+ title: '',
71
+ };
72
+
73
+ const SelectFormBox = (props) => {
74
+ const { className, defaultValue, disabled, error, name, title, description, onChange, errorMessage, hintMessage, isRemovable, onIconClick, options, groupOptions, placeholder, autoSelectIfValueIsOutOfOptions, } = props;
75
+ 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 }) }));
76
+ };
77
+ SelectFormBox.defaultProps = {
78
+ className: '',
79
+ title: '',
80
+ autoSelectIfValueIsOutOfOptions: true,
81
+ groupOptions: [],
82
+ options: [],
83
+ };
84
+
85
+ const DateSelectFormBox = (props) => {
86
+ const { className, defaultValue, disabled, name, dateNames, // this is need for scrolling after validation
87
+ datePlaceholders, title, description, onDateChange, isRemovable, onIconClick, errorMessage, hintMessage, isDay, isMonth, maxDate, minDate, error, } = props;
88
+ const { day, month, year } = defaultValue;
89
+ const isError = !disabled && error;
90
+ return (jsx(Container, { name: name, className: className, title: title, description: description, errorMessage: errorMessage, hintMessage: hintMessage, isRemovable: isRemovable, onIconClick: onIconClick, children: jsxs("div", { className: "date-content", children: [isDay && (jsx(SelectForm, { className: "input-form day-select", name: dateNames[2], defaultValue: day, onChange: onDateChange(DateTypes.Day), options: getDateOptions(DateTypes.Day, minDate, maxDate, defaultValue), placeholder: (datePlaceholders && datePlaceholders[2]) || 'Day', disabled: disabled, error: !day && isError, autoSelectIfValueIsOutOfOptions: !!day })), isMonth && (jsx(SelectForm, { className: "input-form month-select", name: dateNames[1], defaultValue: month, onChange: onDateChange(DateTypes.Month), options: getDateOptions(DateTypes.Month, minDate, maxDate, defaultValue), placeholder: (datePlaceholders && datePlaceholders[1]) || 'Month', disabled: disabled, error: !month && isError, autoSelectIfValueIsOutOfOptions: !!month })), jsx(SelectForm, { className: "input-form year-select", name: dateNames[0], defaultValue: year, onChange: onDateChange(DateTypes.Year), options: getDateOptions(DateTypes.Year, minDate, maxDate, defaultValue), placeholder: (datePlaceholders && datePlaceholders[0]) || 'Year', disabled: disabled, error: !year && isError, autoSelectIfValueIsOutOfOptions: !!year })] }) }));
91
+ };
92
+ DateSelectFormBox.defaultProps = {
93
+ isDay: false,
94
+ isMonth: true,
95
+ className: '',
96
+ dateNames: ['year', 'month', 'day'],
97
+ datePlaceholders: [],
98
+ title: '',
99
+ autoSelectIfValueIsOutOfOptions: true,
100
+ options: [],
101
+ minDate: getFormattedDate('1922-01-01', 'yyyy-MM-dd'),
102
+ maxDate: getFormattedDate('', 'yyyy-MM-dd'),
103
+ };
104
+
105
+ const SwitchButtonBox = (props) => {
106
+ const { name, title, description, hintMessage, isRemovable, errorMessage, className, defaultValue, items, onChange, } = props;
107
+ const [activeId, setActiveId] = useState(defaultValue);
108
+ const { appConfigState: { appType } } = useStoreAppConfig();
109
+ const isTheBig = appType === AppTypes.TheBig;
110
+ const setClassNames = (isActive) => {
111
+ if (isTheBig) {
112
+ return isActive ? 'thebig-bold' : 'thebig-regular';
113
+ }
114
+ return '';
115
+ };
116
+ const handleClick = useCallback((selectedItem) => () => {
117
+ setActiveId(selectedItem.value);
118
+ if (onChange) {
119
+ onChange({
120
+ name,
121
+ value: selectedItem.value,
122
+ });
123
+ }
124
+ }, []);
125
+ return (jsx(Container, { name: name, className: className, title: title, description: description, errorMessage: errorMessage, isRemovable: isRemovable, hintMessage: hintMessage, children: jsx("div", { className: "flex-items-container", children: items.map((item, index) => (jsx(ButtonForm, { className: setClassNames(item.value === activeId), onClick: handleClick(item), selected: item.value === activeId, label: item.name }, `${item.name}_${index}`))) }) }));
126
+ };
127
+ SwitchButtonBox.defaultProps = {
128
+ defaultValue: '',
129
+ items: [],
130
+ };
131
+
132
+ const OfferSection = ({ offerCompany, brokerCompany, offerPrice, phoneNumber, isBestOffer, operationHours = {}, redirectUrl, }) => {
133
+ const { appConfigState: { appType } } = useStoreAppConfig();
134
+ const { postRequestQuoteOnliaUrl } = QuoteDataHandler();
135
+ const isTheBig = appType === AppTypes.TheBig;
136
+ const { weekdayHours, saturdayHours, sundayHours } = operationHours;
137
+ const [detailsIsOpen, setDetailsIsOpenIsOpen] = useState(false);
138
+ const handleDropdownClick = () => {
139
+ setDetailsIsOpenIsOpen(!detailsIsOpen);
140
+ };
141
+ return (jsxs("div", { className: "offer-section", children: [jsx(OfferHeader, { className: isTheBig ? 'thebig-bold' : '', companyName: offerCompany?.name, isBestOffer: isBestOffer }), jsx(OfferPrice, { className: isTheBig ? 'thebig' : '', companyLogo: offerCompany?.logo, price: offerPrice }), !isTheBig && redirectUrl
142
+ ? (jsxs("div", { className: "offer-phone", children: [jsx("h3", { children: "Click below to get this rate" }), jsx(ButtonBase, { className: "offer-phone-number", label: "Get details", type: ButtonTypes.Button, category: CategoryTypes.Filled, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Medium, onClick: () => {
143
+ postRequestQuoteOnliaUrl(true, redirectUrl);
144
+ } })] })) : (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' : ''} 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 || !redirectUrl)
145
+ && (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 }) })] }))] }));
146
+ };
147
+ OfferSection.defaultProps = {
148
+ offerPrice: { monthly: 0, yearly: 0 },
149
+ operationHours: {},
150
+ redirectUrl: '',
151
+ };
152
+
153
+ var logo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABXgAAAEzCAMAAAC8BZu5AAAAq1BMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Nr6iZAAAAOHRSTlMAQODxEJCg+gUwwPdwCNrQAiI17FAcFAwr6HmvW5VDSdV/yapW5KWbJrkYiHRgs4NsZDtpjcTNvSddkcQAACntSURBVHja7N3ZjtpAEIXhAoMMZjAO27DDDPs2LDaZev8ny0UioWTotgFHkZz/u2/VXal0ulUtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyIJCfXbavR2K27deODu3SgIA+Guq5Wji6u9cv39obgQAkLZSJ1Izf9ksCAAgNYXBXOO467AtAIAUvO66mozbbwYCAHhO7kPvkd8ROQDAM8YXvZezJXEAgEfVPX2Ec2DqBYBHbBb6qG5I1gsA9wpeHH3C97IAAO6xuuhz3KgqAIDEThV92oShFwCSep1qGiqhAACS+DbRlCyIGwAggZyjqXlnfQ4AxBq4mqJ5RwAAVqGmyzkLAMBip2mrjAQAYHRU/bed9/UcHorFbZjjWg7A/2GvScwvi2UxipbTz7wm4dQlmcLRc6/rfQf0XgDZN3Y1RndxrJfkqtoZDCcap7GSBDbDyh/FjnzoBiDjyo5adbfnQG5on9auWvltiVPqVfSLGm8iAGRaIa82XrNkOfvi2w+XxG5V01sqewGAzArWauHlJMbIU4uiWM0cNegJAGRVT81qOUkg965ms0dr7wQAsqnuqknjutY8GPWaYjbrqonTEqNIbcYCAFlU9dWk35ZfOsW5qh7FrDBUE09MlmrVaAkAZNBWDZz9NUr4ORTnA7EYN9QglNuGGuNDACB7yq7e5q++TqbRcPpZ87z+SG5pXYxhg6XlEzbgB3v31pQ4EEQBuDFookCAABoQNob7TUBc9Pz/X7ZbtVtLkZnJRfYl4/neIW9TXWe6e4i+mwfo7apytscldyk63gJ6c9GoI9tY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";
154
+
155
+ const usePathGroups = (insuranceType) => {
156
+ const { appConfigState } = useStoreAppConfig();
157
+ const insurancePathGroup = {
158
+ [`${InsuranceTypes.Car}`]: [{ name: 'Car', link: `/${appConfigState.localIndex}/car` }],
159
+ [`${InsuranceTypes.Home}`]: [{ name: 'Home', link: `/${appConfigState.localIndex}/home` }],
160
+ // @todo: will be used in future
161
+ // [`${InsuranceTypes.Life}`]: [{ name: 'Life', link: `/${appConfigState.localIndex}/life` }],
162
+ };
163
+ const externalPathGroup = [
164
+ { name: 'Blog', link: 'https://www.mychoice.ca/blog/' },
165
+ { name: 'About us', link: 'https://www.mychoice.ca/about-us/' },
166
+ { name: 'Contact', link: 'https://www.mychoice.ca/contact/' },
167
+ ];
168
+ // @todo: use in future.
169
+ // const loggedOutPathGroup = [
170
+ // { name: 'Login', link: '/accounts/signin' },
171
+ // { name: 'Signup', link: '/accounts/signup' },
172
+ // ];
173
+ //
174
+ // const loggedInPathGroup = [
175
+ // { name: 'My Profile', link: '/accounts/myProfile' },
176
+ // { name: 'Quotes History', link: '/accounts/quotes/history' },
177
+ // { name: 'Logout', link: '/accounts/logout' },
178
+ // ];
179
+ return {
180
+ insurancePathGroup: insurancePathGroup[insuranceType],
181
+ externalPathGroup,
182
+ // loggedOutPathGroup,
183
+ // loggedInPathGroup,
184
+ };
185
+ };
186
+
187
+ const HeaderMyChoice = ({ className, }) => {
188
+ // const isLoggedIn = true;
189
+ const { appConfigState: { insuranceType } } = useStoreAppConfig();
190
+ const { externalPathGroup, insurancePathGroup } = usePathGroups(insuranceType);
191
+ return (jsx("div", { className: `${className} primary-header`, children: jsxs("div", { className: "content", children: [jsx("div", { className: "logo", children: jsx("a", { href: "https://www.mychoice.ca/", rel: "noreferrer", children: jsx("img", { src: logo, alt: "logotype" }) }) }), jsxs("div", { className: "nav-links", children: [jsx(HeaderNavGroup, { navItems: insurancePathGroup }), jsx(HeaderNavGroup, { navItems: externalPathGroup, isExternal: true })] })] }) }));
192
+ };
193
+ HeaderMyChoice.defaultProps = {
194
+ className: '',
195
+ };
196
+
197
+ const HeaderPartner = ({ className }) => {
198
+ const { partnerState } = useStorePartner();
199
+ return (jsx("div", { className: `${className} primary-header-partner`, children: jsxs("div", { className: "content", children: [jsx("a", { href: partnerState.redirectUrl || 'https://www.mychoice.ca/', target: "_blank", rel: "noreferrer", children: jsx("img", { src: partnerState.logo || 'https://s3.amazonaws.com/mychoice-logos-dev/partners/newpartner/AE1C9160-F0AD-4969-BEBB-86EBFA7CF2E7.png', alt: "new-partner-logotype" }) }), jsx("div", {})] }) }));
200
+ };
201
+
202
+ var theBigLogotype = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxkAAADkCAYAAAD0B+mlAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAMX9JREFUeNrsnd1V5MiWtqNmzfXAWEC2BVAWpMoCaAtSrHW+68qyAGFBJddzQWJBgwUICzqxoBMLBj4HzmjDVnc2DZkRUoQiQvk8a2lRp49SP/Gn/Ubs2PvLy7+OC2PMvQEAgFHwX/+z+kIpAABATP6DIgAAAAAAAEQGAAAAAAAgMgAAAAAAAJEBAAAAAACAyAAAAAAAAEQGAAAAAAAgMgAAAAAAABAZAAAAAACAyAAAAAAAAEQGAAAAAAAgMgAAAAAAABAZAAAAAACAyAAAAAAAAEQGAAAAAAAAIgMAAAAAABAZAAAAAACAyAAAAAAAAEBkAAAAAAAAIgMAAAAAABAZAAAAAACAyAAAAAAAAEBkAAAAAAAAIgMAAAAAABAZAAAAAAAAiAwAAAAAAEBkAAAAAADACPjPAe91+V//s6oocgDYV/7//zv59x68Y9n8mQx0u1Vz1M235TnQuxTNn2LXebu+bb6uk+r7dbjvSfPnzLaOm/vfRrr3urn30tN9D5s/J8316gh9Ut55EfAWz9oXn7U/rgK8QxXgeVehxg4YXmQAAMD4EZExHdiIehQjypdBuIEY4BcW51UDXcck+n6urLWdHFmc+yJGclO3a0/3ljZybHnuN4/vPJejeZdJBMP2cIA+ebrRH1+aPyIMK4/1dhFo7HgSYSTP61PMwhu4SwEAQO6I0XjdGAzPupICCaNG9tzy9AMVBj4MyrmDwLjxteqgqxhzfZf5HlSxvOesOf5o3r0WYZXwsx7ps/6m48ci8edFZAAAAEQybq7VsDmkOJIWGjJr/GB5+rSpz7M+99P2UFme/uJZDLQC4/Xfe9Y2pyo2qkzGj+/6vEvEBiIDAADgI8Nmrb7okC6lw7mLnsb5csPQ30Xly6VpYxVj05Cd72FdXzRlcZuRwJLVjVUm4giRAQAAMCBizNUIjXRRf/1Ly9PFraWTwacb3E8tT39onsvnJunqA3Ez39OVtlPtk7m8+4GKoxWrGogMAACA90bCEteppIWGGOFPlqd/7ygalw7neltlUMP0+yftcr6nVS57YhYZPvNKxSogMgAAAP40ECqKIWlKh3OdDFR1dzmyPP3Kc/jVbe3uYo9nx2e6CT8nRBjeE1gCkQEAALDJd9wd0kWjON1Znj61NVC1zm1Dnz75FKN671kPETJ2qkz75DVCwx7yZAAAwNBIXou+M5lFc4jrjK2vvRh0GAfpInWzNnabs8VAXVpszl463H/uOX+FjYCQGX2fuST68sO8JanrwpnWoe3m+oMAffJmR50X78aOg473EaGxjpFYEZEBAACwnWcPH+jX36uf9K2FwfDqokGG3zSRelHXpp+WBupim4GqIW9tE9A9eM4qPjG7VzFSFL+rHv2y1vpbOgh/3yJrl+Fff9BGzhzqapNbz0kiRwnuUgAAkLNxKoaDCI0Xi9MLSizpuhTh8OhgoBafGPmHxn4V4yWAkb90OHc2Flc+EYrNIUb7ucPPziI+r2T5lrr/xbytgrjgLUkkIgMAACBd40ZcPGzcrwhnmz4ubnSfGXmVsXeFWficjVbhM3X82XJk/XHpYLSfJfC8axUb34x9pDNhmuEGdkQGAACAIzbuLgXFlLyBWjd/rixPP3qfLE1D3H63/P2ThtD1SZfrTUcYHnVuabBPE2t70n4eXeqbENmIDAAAGLdxyl6L8SCG+ovlufN37kYuIW5Lnw/dcRWjjzhJvT8uLMttkthzFw5CY59zniAyAABg/DCbODoD1dZw+9M3Xl1XbI38mwDRgfoIhTGuZthGqpok2P5chMac8QeRAQAA4+WMIhiV0BDh8OBgoJcORv6L8Tz77BjNKoRIAf9Co3QQuiWlhsgAAICRobOINgZaTWllhYvhdm3sN3tXAdzrFh6uMbbVjKxn9zWgxGWAtorIAAAAyEBgTFQ8HFmcvqLEsjLy1g5Gni2PGirXZxssLdufzcrMckRVaCuYUu6X0lZs9gcdjyUUsU9IxgcAAENz6GnG1jXLcE3RZ0ebdO/I0/XKAM9YWZxzqQLijx3nScSsUt3Fchb/h5Zl/ZJy0AZNEil1YROxrDDkzkBkAABAVI6b437ge94QgSo/1MiT/RO/ebjclbrA+DSmbQSQzIQv9F0kf8SuDNPVCIzVpaX4rzN5FxuRQR6ed+AuBQAA+0BFEWQrNCQHyl3Py7wEagM211xsCNy52e1+c6TiJUt05v/U8vTbDNqfCFObnB+IDEQGAADsGVc+szpDFGyM822UvleyNBGg1SrGhsFqmz8iO1EsLpDNIQb5zPInLxm5hbGfqwO4SwEAwNhBYGSOiMTGgBXj/KLDzx90NcSnQX1o7MLgLj4QNwv97TZ3otds5gEykm8VYh33Sk3M234E130zi4yaoIiMXaszU3oqIgMAAPaLn43x9Jz7ZlqExqrSfBTHrsZzgMfZJRKEp49Egu7NsBFMkuRtMeBeotmA1fk0sICCCOAuBQAA+8B1zn7u8Dfj3oVL365yDqsY24xom9CoB8Zz0sCEIHnmHrBXKxn6gRn7R2Zt/u4aIDMgr76EzUBbj6guh36X5dhmQTWmtxzywXy/Ya39//7WhjZY6X9/9h2tBSCw0FjRZvNFvmOWEZqEULPltqsYyy3vkepqxhCc0wcRGWNEjKax+8xNtxiVrwOfipBaDcU608Fr6HrMVqDprJtUfqF/pR+4uhucOrarFRttIVFuNwQ05MnSUmR4XwXQyZm+qxit0KgsQuC2qxnVSOruPNMJu8LinAe65n6LDHgbzI42jfRmkHvUD+8tswv5o6Ki2DiOI7WrJxUdtYpZRAckMQaOIdkZWBFiAq0yPVcxPrje9S6xNILVDHENK31vwB8QwtMiMqAjx3pcqGEog+MSozA7YXGmx2kijyWiY6ZHK2aXKmZpW/uNRPspPLf9hbHP/F0ZMvOCe1ubGLsVlNL2miJGLELhHpi/Mp9n2d9VYKwzrfcTM57EgoPCxm/4yDAUH9E/mo512zGcHQw3+BWa+EgG7+uEBMZnYvbnRtsqqUHoi8zu6qyxGICPtuOcGg4ALlSWAroOcN2ZipzcxMU3mVDIfGLJ1u0OT5B3sJIB2xCD9bQZ2GSgqMa0cXwE4qLUge8487YlH1cxEMe2sREiiA2dFJEPvU28/jOMAnAYc8XAt1nFqDtMzokBLu5Eu2bLZbwsMykySYA536N6f617egoiA9wRP/t7FRtz9m1EFxeVcU96lCrtytlcI60gNqCv0JD+cW1xekGJgQO2ieMuTLeEgTbMNEHfOtD1f1gIbykHm8mt77qPZJ15vVeW593x7UJkQH+x8XszcFyZt5UNOtRw4qL1OT8a6SsebIoNkjRBD6EhPu7XlAR4HH9FkKbiiipjYxno2qtdHgtNWcjqxL3l9ZY5i3mtd9tVjFt6yj9hTwZ04bsMRuzXGGSQm2hOkN9GLDD+ITaad16rsALowgtFAJ4N+1SYxdxPpCLkyvL0aa5777SMbYXDE9HqEBngFzF479XFBcIMcvJh+8OMP7fLZ+3rN90gfkhrgA5iFcDHOFwkOAbH/u5WDkJ+kdsYrvswlsYtWh0gMiAA4ne5yjDqRcoD3ImUqQnn15sT4qLAqga4GoUAPg3q1JjGbOfqKm27qfsgAVHk9P01b/tSbIOqsIqByIDASGdcERLSywBXmrcIFceUxt8+UrKqsWRVAzwahQSwgF3jsUxuTDNv56GEhhjWthmuZzmIf/Ue+N24rYSW9BREBgxjCNbkPug8uB1qvotrg6vHpx8qbWMTigI+6UdLB6MQkQG7SHkGfpqA4V6OoSzFbpF9gMbde+CK0P6IDBhWaFwjNNwFhnlbvZhRGjth1Qw+6kNtgASXPkQ0GNhqeJr0g21UMW+u4WkvbcduXSlIpX7FLXmh4uK6Q10/GvZi7IQQthACERoGP0W7gU6NnSNKw0nMSijlc9pYtpyoKPDBoXF3L7xJMQR3YCOs7jrrGvi5lonmUrB55yfzlkgvFLtW5V5XMyLPpssKha0gkxDlIeu72NFWC8ty3YVsej8jjD8iA+IKjeemEzJbuF1g1Ab3KMTsfgrFmL7uVaLlEjrYQ53gc9WBDfUuY7ON0SyG5klIQ1Pd/3atzomRHzOk7bOW171lv1+acLkzpgOMK1LvxQiSDA4C7lIQkiVuLQiMAYRGSTGAA5cYCLBlbD40dvsHFgPMZNuI4ePYY6CupNzZCoGMowW2AoP9XIgMSAAxoMlzgMBAaEAqPJJNHnYwtxibX8wAG5lVDN94EiNDlNtoc2eYtz0YEwQGIgPSQpaclxTDnwJjgsAIJjTIpQG7jISCYoAt4/Ohscv/sBjQH9/GeD9KYDVj7SB2jkxem6YlitQJezAQGZAmp80AON/3QtAP2C0CIxi458FWgYGRABYGfRKrGBvG+7Pl/aIb7c2zLrSv2fA9g/Fa3uVb815zugYiA9Kmwm3qdUWHJHvhwD0PPuIKgQG7SHQV4897GrvVjBSMYZdnWCbaHCRq2LmuXtT0DkQG5GEALvb15TWs3inNIDi450GLZCN+nYVEYIClcbxrFeMpxp4el9WM2JMsapRfWZ5+nJiXg2xe/7V5hwlRCxEZkB+zfczWrEvCF1T/YOCet788qYHztTESCmYhwXKMnliO0VXEx1xo+97GgXFbSQiFlJPtJvCYwkjcoWRj/Xlz/HczXpwRdt8v5MmAGINPuWfvvKTah29nzYfrllClURAjJ4bRsAqwYiF9t07oOn1YJ/pcq46/+eb52juvF1O0aj6KovnnZMepzwOV165nPbF41pbDT57bqX4ceCZK1DB8efnXsTTa+wHudRk7dKC6rDCjHJ9f+hp/TV3+e+Bn7tR+aXNRuZOZqZQeaKh227z3F6ofAABiwkpGeL5FuGex8XeaYJmUJq/wdV0NyolJY+l6F7KsvdJDZpPW5p+znjLTdLLRruTdjhJ/L3GbwmUGAAAAkTE+Ihk49TtjV2Zz5ZghMgZF3jHVcLV32k5qh2Xj2w9EVKHHWaLvWhlyIwAAAAwOG7/3Q+iIb7oY9r8Yu+yhoTkaez4DNcBniT2WrFhcmjd3NdngtujjlyoubxKBQ9uWvK9snntM7J2nJOkDAAAYHlYy9ktsrJs/ZWN0LU38pHBi+I1541VKblJt8qhg8d31utKulro5Uf59lFBdEDEEAABgQFjJ2E+xUZu3meeYs87FWMtXw/GViTyOuEVJzO9qqFwB0r4kznjzzx/GPoxhSKZkAgcAAEBkwDCG4LMa+rGExnTExZvC/gQx7n9Vt6jnSG1sEbmNbULeDAAAAEQGDCw0nmLcf8Szy7H3AEh9FikkFdI9H9LG7va8TgAAABAZsHdCo4x0+8Oxlae6Sp1GfARZNThJKdGQtDHNVxEz6MABG8ABAAAQGTCsEVg3fx4i3LoYYXHGNGRFYBSx3KMs2pmI2bs9rRsAAABEBuwlS4oga+EkezDKVAXGBqWJt0cDkQEAAIDIgIGpKYKsRUaVkovUZ0R2z8NlCgAAYCDIkwGt8bduDDAKoge6HyNGbogHjeSUS1tbNWUlSQEvItxeRAY5M8L2AxlIdu23et4liqU/Db0yp33YZiBc+Xw2Td5Z6DHRZ9iMUCcrlVJea/1b+5pUiPXOgdrMRMsv9BhWZ9YnJ5onK8p3MUI/tmoHMepxy7OtfdeR5qxCZACMhFgqrcqwrEQUlRFEGSsZw9TtrhDVD2b3qt+8+Ug+DyygpQ/fW5z3zXhY/W3er9R+sKu8DvQcOWb6W4kitzT9k2wO+s6B20w5xOSFTsg9anksYhnwDtTS1iKJI0nQuhj43rbt4MsAgqKdPJBGc2zZrlbatuqebes+dsNDZMBmZ4B+xCjDx9xm1QQxitTAKmK09QyMAnjjp8xya9CAMY23Z2pY9xHZR2pIiRhbeBAb4MaxHt+b8hcBVKU4Fus4K22lMnHceWWF6r55jvOmfJZ7YEvJ+0r/nu8SFTvaVTuZ8KhjxW2O/RuRAS0FRZClyMjW9Uc/yDXNBnYwkxm+MQgNNUCkz/pMRnqgYqOMOFu970zVkJYw3fPEjMGqfUZxn4nYPq61H49SaGjfnuvhMxmvCI5rERo5Tiaw8RtaSoogSzAoYF+ERtbGie47WHkWGJscqaFb0VzitVOp41QSzW6sYrwXHLG41mcam8CQcl2r2D8IdJt2MkH2z84RGZBTBykCfvj2yUAe/MPCrCUgNLIYYw91vBtiD9JF7oIsc6SO60SExntRMU0gwt51TkbyromD5lgFFhcfiQ1xI01GzCIyYNfHjw+SHw4pAoDgQmOl41ZO1AMaIVkLspFwEFtoqCH/kahNIRLhzxGsTJbar48jPcKxtrESkQEpC4zaxAm7yiw8APT5uGYhNNSVIoYhMsN1KrrQuI3RTvWen9X9USKGac4rkyLUrgeeOPisjV3r8yAyIEmBEUuFP1ILADBmoaFR+7qGVJUx8kGPruPlRQ4uFSNGJvBiGNK7Nh+nIj6zExr6vN8Te6xJquVFdKn9FBiFDnxHER+jpiYAwIPQKBKOtuJqzEnui+qjCDwqWEpjH71GEvhJJCvC2v6Ty46/E8FWGLcZ7NMhozptRDnaKn40ElkKBn420eN0ZXDm4VIPH/y3rvtib3qWnYw5a0QG+Bp8Fp46CSIDAFIQGrJH48xXBmzPuGyy3WosaG6XSl0javP5KvSTjvNL8mZ8WpZV199uGPEuK1SVGS5MvK0IlWdaJlIlM11xS3bCQF3M+qxKSlnX28YpnUg402Pad8ywZNmnP+wCd6n9EBcnusT3v4kIDEQGAPgipWg+m+NuYexnvK2NBTXCChUTm8js6K/N/y/JJknMF06gPKtR9tXYu7FNh0h4a7mK8We/SWzPTrIukFp3XfY93Ek7adrLifbJ1Y62tdbzpH//IuNCYIERHFYyhvnQDM1Ejy5Lu0NwwwcQADzSRvMpElrRcBE9TiE9ZfzU6EFL8+YSVZHFfnCxsdqIMGTzjT0z4SM7LRy/96/Z4hP6HqfqArl0LFeZAOiVGFP7c6kTxHIc5SYwEBnDcE8RfNhhAQDGLDRsZ2Q7Tbo0v5HIRRMmbKILDRF71xanFyFFhs62zzr0GXn+KqFiTUpoqJB02S9xpwLj2VMba1dpxW46bY7LkO5NvsFdCobmidC1ABBYaJxl9MzrHgYIAiO+0BDjz8ZtahL4UboanvMEXZTavVYpJjTcNWFw5rtfqouejGnfchIYiAxIvcMCAHQRGr+lnqRqA5J45k9taTgHoeMqxmZ/STEDd/S9VjqG2EbhvAvtwpTjBC0iA4bkMZGQeQAwfq4jC4215XlnGWYwh78Te0Wp6vn7+RAb0zsKoJhCw7ZcX/dg0A0QGRCXOUUAAHsiNGz3hchM6YKqgi5ocJm+USMPTLpeBlGEht7PdhWjxHXxY9j4DUNxxV6MLD5Wo4d2uJdC41BCQw7czsSn/MnSUHlNSNYwx1jJEhsD+CXQvSvLex9YtMFUo5S1QkOM+duB7llannfDNwWRAXF5MuzFyIF9iYT2hareO37KzGSEsI9LY5/AS2ajzzTZ3pKQtHmgbkanFqeuAty7MHaRj9rwubv2hVQmXbefdq/V+UBu14XleaxCIjIgIjKDcsbsHABE5nW1YGChIQaIbQbm1pASUXKhqyAiNJ43DNS1HivG1GSwNTJDhFWuLM650TCo0g7vLfpI6jlXrrUfhxYaNhv1HxPKy9OViUcvhn+MS4gMCM18BJ0QABAazmjSPDEEf3b4+ZH5y9XqHzPlzXUlbGpt3lY9GGMjoKtOp5anLz3fWwxDm1WMStuiCI0Hi9/IO6UeAjqo0HAwum9H0Ixnpv+enpZv5l2kNTZ+Q0jOiSYFAAF5NHY5Ct4LjeVQEZ10L8hdgEvLTOv35vi9eZe1+KsTpWowcXGomZi/W/7kKYAQrCzOuXm3KmHzm9MI+/Okf7juWbnW1ZkQ2Pajmt6wHUQGhKSgCAAgIM86zjgLDfO2kXQoo7zs8IwuyIqHZJ1eZ5QfJDdhIW4l7Z6ZtXGb/a08P4vU8dT1vrpB+WHo57Vgpf3YVWj8VLHnmxOH54Yt4C4FIZnppjj2ZABAENQlSQwUMTZOHX56rEKjCD0+bTzjraVx2BXZ09GG7WXc/dxI//eAt3sKsKJvIwKuPtlbIb/dtTdjqv2iHrAfrzb6sUviwhh7rf7s1/Sm7bCSAaGZmmFnDAFgD4VGc4gf+Y3jT4+HGp/0GcWIuhxo3F3HzJYMf+J1f4NlFuqXz4SICgcb970qQj9uVzQ6uUDS1BAZsJ8M9iEHgL0WG2XKQkOfUYy3X4yd20ofYmdLhrd9iTH2Yix2zLLb7GWYxsidpM/dWWhgZyAyAKEBAJCa0Fgbe1/svs+41lUNERtX5i2XUEihwbg7PDe+3aQcVjEWu9qfZR9ZROrDvfZaGfuN25/xbFkfBc0ckQEIDQDYP6Hxo4NB/nPg5xSxIWG+J83//Noc5+bNneph4+ibKVre65ZWMSjnvvcI6HfTxuhfWO4VqGy+2bECCWwIjS4TBt973t529WlCU98OG78hhtBYmvTjcANA3kJj0RhIYqhcZ/K8q23GjRqZMm6K0ee6eVxcX0pCigdHVqTKQBumbZI67lzF2BS4TZsQA35XlKzKeM7x4Sg0JDSzMf5yOdiwtjyviFU2ntvs2tO1nhEZkAKnmlW0oigAIKCRslQD5XoE7/KsBs1yI1LVgcMl+hqLE1rUTuN+ESLikApMm30Uc8f7VxbG+1FsgSqrQkMKDRVgLxb9S0IaH2YeZWoZ0hbDXQpiccGGRAAYQmiYNzekMb1TrUa/y16Oo55jbkiRMc24OsS9bSKGWkBj02YVwzlUru7NuLIUI7HbfGncXaf6UFucc2Ap/vYWVjIgJrfy0SPWNACEFhqSFdu4z/6n/E6Se0Pcp353+Jmcv3ovWHSWeBdFiPeINNlkE9nLVvgE/YY5rGLIuXWHW9jskTxKwd1OVzTkHYdYmZSxwibvzlwSNGLHIDIgPY508KwoCgAIbKDU6mZUj0horCz96v80iD/57zauIdNAriGl5Xm1x3LbKZiad7U1MsX9VxIfhtpcX1m21yOzO/JUH2SP021sY3pAF0ipz4VF2R9oHbGi8QG4S0FsLjQrOABAcKPcvM3Iv4zotVyM78Oe1/BqSOksva3IWA1crqVDO1mEiJqo38bvibSzZFyDhnCBVDFlKxy/x4rClTqsZEAKVA4fGgCAXkIj1IqGGoUuY9mth2Rta09CxdY1ZKm+/L7G/gOHZxyynYg7mjyfTVjjUKvyVWLdJxnXoI0VjYUJtzIp5W+7SihCcxUg+WLWsJIBKTBjNQMAhhQa5m0j86PnS8s1LxwOHzPDPvY0LC3Pe8254WPWXmd+bWfp72IYthIG2aGNeA1mot/EWWJdJ6mNzrqiIRMGL4GuL2L6xqFsat0n5R1pW7IfJbc8Y6xkhOchkeeQAeso4XKSGYOS5gIAAxkozxsrGseeLus6i+nDICn7Pp+Whe3ejjapatHV8FeB4eJTHzOZoDyr7eb6hfG3Qb5KtOsktdE55Mpk+77aT22uLef81jzPpc+wsM315BnaFbW19r0sVkwQGeE7QJHS8+hMS6ED53FCj0ZyPgDIWmjo9R4drnWg7kdll/upse7y3KsdRq3tzPmxGjtnLonndBZW7uOyz+Apco4GMWKvLJ9ZNsfPdQWkz3e6MOmtYmwa0kkFbAkpNBzd5loudEVj3icxo76T3Hv6rvzrXIQG7lL791EVn0GZhRCx8Yt5i5GdwibIAzZOAUAMoWHeJl58rTq7GsQzNWJcDRAxYlwj7NxuKYe1cctDIMbOvbpwnO0SFzobuzLuG5lTcM+pHL6TlQeXlirxbjNPzW1nI6jDY4Bri2i8c/zZ8Ub/KF37tobqvTcfh1JuhUbyucZYydjvj+taB4vXTKXGbuNfSM5Mv4y0AACdhYasKpj+M8hiyP90/E3rzz/ftalaffXnHYz1GwsXFxfXkBYxgqaaIbk2f18tEUP0xHRPtncXMDSsU/tQQ/E3S/El39Oyy7109jr15IS93jGk0AjgAtlSdrxu2z+udSJDrrE2fw/YMNGj9TSxdc3ysaIx0TJDZEBQsXGmg2jISA27KKgNAIg4FpYasWbW4xprB/eaTWSSR3Iu3G0x1vsYoJVnY/ojo+fU+JusekrJiBWx05TNg2X5z9QNrg5RT2KshnTFttwz87oC5zHSmE9B6F1obFxX+mXX/a1TzwJS+tzvzXOd93ApnJmArnm4S8FmJ1qauDHkD0IqagAAG6Fh3NyGPjMUu46jYqTLSsj9xiFG/0UPA+XS1hjUlYMfkatByu4swSzKLqLH2ehzWMUoA/eBpYo8H4IoitAwAVyn9LpnJoBLVk+STQTISga870SryFlxT8zA8dDhL0Mk0kf7iKKH1IRGMw6u1bDvZIzoOPp7Aq/z6BrpRnzQ1X0rxuZjERhJbmrVVapLy3ZxpDP9LmVvI0xuBlo9mJvdK1pJrma864NL49EVPLBLVqf+bRL2AkFkwGedSAaY6wi3P6EGotV7NfQ9dbBGZECS/UGFxnXH38s4eh5pHO1tgKjQEkP/54DPm6zAeNcuSstx68I2eaHDNauB3tPWPUyep0y0rl5XHjzttXp/3RPdzxozI/tV8yzJrmIIuEvBZ51IOmWMHB8TSh8AEhoHz3v+/lcTxwX1UQ325x7Pvxjw+eV7M8kk/r+LUb20PM9GPNwMvGpg80yz1KMceXKB/Oi6YuB/M3auZT6R+31LXWAgMsDHAOObnFcyBvcfzi375wcM/fwPdGsYWGjIHofCDOvHLTOcJz72NOjzT0IYaYoImB+ykTnBPRiflUlt7EOaTi1C/IoRnMwqxrv3tBkzFxnUWSihUTeH9I/LAcS4XF/2V0365N9AZEBKA+nQCv0g4yKLMQOXrShTgXRMT4NMhEbnGX3NT3SiYiXkmCoG4VffM5xi/KuR9s245wvYajCZt9WLRYbNonRoD8sdE0I24uEq0t4Hm7Y0zSFoi7bhy0DXrlSM/wjQx5/0upMYbs2IDBib4Qz25JwpvaD6ICOh0a5IvPS4xlJnPc+N31U1Mfy/6WrAKmAZyKytjDm/qLH22PFZz1uDKZfVi4+El7FfWTj47Fzd/7hrFePFRIrkpO3JZgWgyqTeKtNjZdJCjC+0j381b8mOu65gPunvv+rKxSLHvsLGb7ARGacUgxXrSCJjnml5xRBINc00iYmJlWV/evBwHa8Gl48ZW10ZaWe3z/QojP1K7pO2ZTluhzY+dEZdjLVKkwOe6NHm82h51jp6/TuAi4dNm/FZDgttDzZun7JRePLBakRh8cy3kQ1MqevJrpM+eT/bvj5k+11qPpzQ4myu5bKZ58Zs9JX3/aT9Rq081Xd09+AvL/86lpe+H+Bel7GXeSTUmukYkrBHQ/uSs7WQapk1z/XvgYtiZ/vVj819hGr6lot/5ubHqPnzR4Rb/4jpmjFUu8193NlXNoyR94bIn0ZIbn0dAPYXVjJgF4cUgbVhV4eeHfmEhclvb0asCQfc/yDlMUTERCsiEBMAkDXsyYBdFBSBEzEygR6rX28W6IrPLNLtERkAAACIDIhsDE4M0X9yMWJ/ph6rXNuUrIwtYwnAXDeZAgAAIDJgTJQxDMHMy6yOee+UhYYKDCmfoz2sGwAAAEQGgBqrFxFunftM823Eex+kKjQ2BMbxntYNAAAAIgP2XmDEdGmpcy47dce5i/gIyQkNdbuLLTBeiMoDAACAyIC4AiOmQTiGjbmxZ8xFaPyewmZw3eS9MvH39izp3QAAAIgMiGMQnpj4M8517uWoibZeEngU2Qxe60rC4GK1OSS07r2xTzAWkgU9HAAAAJEBwxuF8wQExpii/6Ri1E6b4w9JqqirVEO1pXVzfE+kDB4+yEILAAAAASEZH+KiUIM4hVC1yxEVrZTpRULPI88yb+pbXLkWjdG98tyOJuYtGpkcR4nVRUVPBwAAQGRAeGEhBuGZGJ2JGYSjif4jKzJNOV8mJjTEbUmS4M2aZ3vU8q67bohW97pChUWq+VQe2PANAACAyBijQV9EfgQxBA83/n1i0ptpbo3B9ciqf6FC7iDBZzvW46Jpo/K/RXSIq9qmQb7Wo/igPU0zqYOKUQgAAACRMUbuKQIrlmN7IV3NECP3ZwaP265ETEdUBTesYuSNrrq2kyOt2JX/tjlR8vBOFNe+6137cehVycf2+ZvjNqVJl41Vy7Y+jP5tJ1Ak0EXrgrnaqIfVAM9mVTfNs3wJ+Az/tjjtsnmGasd16sBjcNtX5D6r5nnIHQSIDBg9TxqRaXQ077VoPhylSdedaKyI0TOnGLIVFnM1am36zfTd33Z1TvLV3KrBnkNAiXZ18dS8RYYT0bGINTbqKryMXWdm92rswQf1INd42agDDNr4/K2ONuqnIjgGhIDoUpAC1cjfrzRphLTdJ8oRRSrbF3FR6EzuH+YtMllfYS7G+nVzrJvrLmOEcvYgOq6b514P6XYrkyJyT/O2Cj8z/dw9231gv+l7zIeKcgdO9SMRCBfUDSAyYGw8jHUVo0VdBiqqejBumDXNUlyIURvCVSR3Q0pcw+4178wQ4uLahNm3J9f8qaKPVcb0+K51U1AUgMiAsbAXHxtxmxLjl+oOzqPBTSoXcbGZsHGovUCtIXWWoxHYPPfKt0iS/RYq8kKJi49E3099lxN6QlIcqKAtKQpAZEDuXA6xMTAxQfVItQdDXNLOcJPKQmCIcbkycRI2iiH1m7pQ5baqIS5Uta/nVmOyNnECPsi7/M6qRpJcIzQAkQE587gr0sbYUOO3aI4nqj+IwCjYvJiFwBDj5XcTP5T2zKfBPrBxvvRQD3KNaxM/xPZPfRZIT2gUFAMgMiBLg3AfX1yFxplhI7hvyj1bFctZYFyPzWCPwGmfFQA16mcJvY8kCK3ZeJwct9QJ9IEQthBFYOyzS4sYwzpDVJs0E/XlxjkbvREYHRH3xdLj9R46/ObQdIukVYlYcB1LExQYLVMVfGf0lq3ISvi6w+9OOnxv5PzKsM8NEBmQCXNmnBEaHgVricDIQmAUPQXGnfaV10Rvm25xem0x1Atjn1ujFRheJzyaaxU9ykiMa9kIb+tGdqDGX+Vwj6qHwGhzKtRq5K7astPZbjFiJ1oHNrk1PuJUhVNJr/mUZVdXYw3jLGXrklhSAg4scEUFRAakzvnYw9V2EBoT/WiTrM/d4CkQrFkIjIkap648qdG9dbZ+I7v3rd7vRI3vbca0rDgkFSRAxLJGeZo7GIHWIkNFTJes5VJWi21iXsuxrYflxv3k+Vw3lb+6TvGtCNLGRChUupq1dKibuWE1AzrAngxAYMQd9NvN4A+UhjWPCIyskH7vMqstAlIiz00k9LOrEJB2oTPhv3zSrySPSpIum/JMOkt9bvmTA5twvLrS4Dr+isj7pmV12+FdbnVl55txD3axyDB5YlZiQ+vGNtohLmyAyIAkEYPhVwTGTsNCBvwrSmMndwiMfNB9GC4z2a2ArDwaUj/eCYwygzFBxkvbvDqFjdHuKPTk3icbq0R93kWucWLc8gQdmDw35OeGbRCSI0QfIDIgRYFR4DNv/TGW5ehfDZGnPuNHU0bkwchHYMjsuYtYCLJCpYkwv4qIz8zXf245FpzsqAf5/2eO/az0vFflWcv+h8PPpoRQDf7NWTuIORInAiIDkkHcFCbMODsP+rc6mOM+9RfiavFVjUXIBzEqbTcxe9+E/a5frVTE5zQWSFnYTNDsMv5c+s2PkP1Mr33u8JOKbhQc20lARAYgMiAJLlP1ec7EuNh089j3VQ1xITtBrGaJrVH/ZPY8rPUW1hbnfOoGpS4utu5qN0MIeUdXMFYzwtdHTSkAIgNyQGYjv+5bJu+Ag7988GX26G4PX/9B29Ic4zM/dDOy7SpGSR0nIfTmAz+X7WbwkmoEQGTA/tJGg2HG2b/QkFUNMdi+mf1woRLD41xXwmhL+WIbjeaGmdStTCzH3771MKiY13vNPbcl6DYhQEZvQGRAsrRRSCqKIuhHud4IBzlGsdGKiwmRyPZKZDBu9C/H1SfGo6yC2qwmPcYIzqH3tAmhahWmF4L3VSZ9wBmS8UEfcVGRBXR4sdH8KdRPWQy0aeavJEbGAmExHtS4tQmX+sD4sbUcK8ty/KwMC8tbxQyoIPe2yQQvbYoohf7b2MSh/umrgMiAoMiy/FKNQgacNMSGfCTE7aA0bnHwY7cjMRiWuMqMEtsoNL2FpebhKHteJrnIUyrUbLNz3/ash5jG+62lyCjoVkFYWn43nnBfBUQGhOJOPwa3bNBMTmysVWTM1aWgPQ5oRxCJieV5tad7TcdUeNqPbQXYy5ZytKmHx5h9Ue7dvO+DRR1O6FZe29hE25ht32EVCRAZ4I12prnGIMxKcNy2HwOdCRVjpYhohD1qG6pJyIjI+EQgw1+GX6ETBqcOP1tuGZ9t6iGF2emVxRh1RAvx0sZkk3dp3lxtXSaiyFEEiAzoLChWmwfLoqMQHKtNA0INmBM1PE708LnaIbORaz1q3KAQGRYCdIxGXNd232Ui4MVs3zhvY5inIPSYxHKj7Jg7ZNJRrF0xIQCIDDswfP4yBHNPwnNJ23ESHfVH76ArHm0IQ9sP16o1DBATgGHZWyx0pWKVeS85MsOt7OwSsgCIjF2GFmRZlwx8fspxhQgHyI67IbJzw95zhpCFPpAnAwAAfLK2OGdKMXVGXM1Ki/NeLM5JIREbyeDS5JyVakBkAABAbiKDTMPdBUZhObtss7fuJIF3snmGJ6p+cIGxpBigL2z8BgCAwUWGedsDRNQxe64c83nYCJEUVpSmHtsU9ENWv0qiAQIiAwAAUsQ2Ot1ZX5Ghe7Oqz/5/jfaUu2vWkxp+dYd62BkOVxIaxpq11pwgPttUjHcYy4rcnbYz9mCAN3CXAgAAb2gwAZv9ADNcprYiYaHFbWXS0TfeVsCVEd/RdmWm7nsjTUAXgpPM29lNc3xr2hibvAGRAQAAyWNrFM4pqs9FQp8VBgexN+2Yd6Gv0S/3nHpuTzHEQE4i40XFqwiL8+b476adlGzwhlDgLgUAAN4NZGOXufqiMTZvx5IAtHmPLxbG9drY5TmotGzWPethZnHeIoKxbBuC927HDLsYyBcW1+ntnvcJtgLNlyF/SQh3yAVWMgAAwLexvTR2s+jCcs+Kp7Q878DBEO9ryB83gmawvBvNvcRIPvbUPqz3APl2z1MXrFPL09eMDIDIAAAA6I+Lgbs3QkNdU+4sTz912Bz90b3EAH+wPP27bAIfQGDIPS4sT3/aFelIVzkeLUVbFamNP/VckQJAZAAAAGwYYLarGbN9EhrmbTXDtmwWPWfgXQzr65BCQ699HeDZawchdebxXWxXMQgJC4gMAAAAH+gMs4uBK0Kj3oeIU45lI/s35j3uJQb4g8NPrtWdybfAqBwFxoPDxncXV69l8ywnPd/FVSwtGBEAkQEAAODPmBbj6tHhJxJtaO1jtlnFyuFIyuaip2EsRvGLw/kXKvhOPNTDRPOVXDj+dO5QlmvzFjHJBnGb+r15pnnH95l3EEtrRgNAZAAAAPjF1cAVI/A3NXKdxYaIC501F8PuOIOysaXzbLgaua5G9VSN8U4z//IbdYH7w7gnRLzsEHGscjz/p7axwvJ9ChVLP0OJJYCxQQhbAAAIhhiLHWZ/WyNXcjhIxmvxaRcDb/XRrLAawXKIKDnNrGyumn9+tykPKUddAelyr6Ua1DPHn8r54sr2+K4ent+LO62DQuuhq8C76xKiVdpF8wyXxm3FRNrY/bt3e3Ux2xAffd7naizhmQEQGQAAkKIxvdRwnxcdfn6kRvh3NWbHVjxiUJfmbQVn57myOtA1M7MkXlNB1sVgPtbjImA9PJoeGchFnOjq13EC7/Zk/EezAsgK3KUAAGAIoSEG1w0l8Y9yeTbD5s4ojNs+maGQZyq6CqgNpCxfIr+L3P/Mw7sAIDIAAAAsDGoxAH8k9EhiDM4TKBdx1bGNADWz3UewRdQUiQk+XwKjzQ1SRBYaBW5SAIgMAAAY1qCWmfhfTfzZZjHqJwkZg6XDucuedfCsgu8ygfeWfQsnPmf9IwoNud9XBAYAIgMAAOIIDZm5PzFu+Rt8GoISvahIyZ1FN7TbGv1HPnJZqAvbN/O2fyBGPfzaPMM8UHm2QmMo17B2NQaBAYDIAACAmEa1GPrNP88HNHLvRNx0iV40UJlUDmVxoZvp+96zVsF3aYab+ZeIWhMVmyHLsxUaVwO8DwIDAJEBAAAJGdYSLWkSWGzI/oNvzX3OMkiMVjqcu/RUB88qcE7UYA4hNl60Hn6R1YuhVpH03WS15Kvxv3Im1/s65PsAIDIAAAC6iY1f1Rjta+iK+8oPNWpLnbHPoRzkOe8sT5fcGaXHe6/VIG9F352Hyz7qtSZaD+tI5brSlbOvPdtXK5a+qssdqxcAnzBknozChw8pAACMWmyIC82rG41GUZJDZtgl2dtnmaNlBUSM15UedQYrFtso9X1scmfIRvql5zp41msuNcleWweF1sPxFkEhv6036uE5sfa10vLdbF+FCqujLW2r1vep6aUAdnx5+dexdK57igIAYDSG+hdKAQAAYoK7FAAAAAAAIDIAAAAAAACRAQAAAAAAiAwAAAAAAABEBgAAAAAAIDIAAAAAAACRAQAAAAAAgMgAAAAAAABEBgAAAAAAIDIAAAAAAACRAQAAAAAAgMgAAAAAAABEBgAAAAAAIDIAAAAAAAAQGQAAAAAAgMgAAAAAAABEBgAAAAAAACIDAAAAAAAQGQAAAAAAgMgAAAAAAABEBgAAAAAAACIDAAAAAAAQGQAAAAAAgMgAAAAAAABAZAAAAAAAQCT+szmem+OBogAAAAAAAB/8nwADAP5wJPS5nm4vAAAAAElFTkSuQmCC";
203
+
204
+ const HeaderTheBig = ({ textBack, className, }) => (jsx("div", { className: `${className} primary-header-thebig`, children: jsxs("div", { className: "content", children: [jsx("div", { className: "logo", children: jsx("img", { src: theBigLogotype, alt: "thebig-logotype" }) }), jsx("a", { href: "https://www.thebig.ca/", target: "_blank", rel: "noreferrer", children: jsxs("div", { className: "back-button", children: [jsx("div", { className: "back-icon" }), jsx("h2", { children: textBack })] }) })] }) }));
205
+ HeaderTheBig.defaultProps = {
206
+ className: '',
207
+ };
208
+
209
+ const HeaderMyChoiceMobile = ({ className, }) => {
210
+ const { appConfigState: { insuranceType } } = useStoreAppConfig();
211
+ const { externalPathGroup, insurancePathGroup } = usePathGroups(insuranceType);
212
+ const [isMenuOpen, setIsMenuOpen] = useState(false);
213
+ const handleMenuClick = () => {
214
+ setIsMenuOpen(!isMenuOpen);
215
+ };
216
+ // const isLoggedIn = true;
217
+ return (jsxs("div", { className: `${className} ${isMenuOpen ? 'open' : ''} primary-header-mobile`, children: [jsxs("div", { className: "content-mobile", children: [jsx("div", { className: "logo", children: jsx("a", { href: "https://www.mychoice.ca/", target: "_blank", rel: "noreferrer", children: jsx("img", { src: logo, alt: "logotype" }) }) }), jsx(ButtonMenu, { className: `${className} ${isMenuOpen ? 'is-active' : ''}`, onClick: handleMenuClick })] }), isMenuOpen && (jsx("div", { className: "menu-items", children: jsxs("div", { className: "nav-links", children: [jsx(HeaderNavGroup, { navItems: insurancePathGroup }), jsx(HeaderNavGroup, { navItems: externalPathGroup })] }) }))] }));
218
+ };
219
+ HeaderMyChoiceMobile.defaultProps = {
220
+ className: '',
221
+ };
222
+
223
+ const LoaderPrimary = () => {
224
+ const { appLoaderState } = useStoreAppLoader();
225
+ return (jsxs("div", { className: "loader-wrapper", children: [!!appLoaderState.description && jsx("h4", { children: appLoaderState.description }), jsx(IconLoaderPrimary, {})] }));
226
+ };
227
+
228
+ const ModalConfirm = () => {
229
+ const { appModalState: { title, description, submitButtonText, cancelButtonText, submitCallBack, cancelCallBack, }, dispatchAppModalState, } = useStoreAppModal();
230
+ const handleClick = (callBack) => () => {
231
+ if (callBack) {
232
+ callBack();
233
+ }
234
+ dispatchAppModalState({
235
+ type: StoreConfigAppModalActionTypes.AppModalClose,
236
+ });
237
+ };
238
+ return (jsxs("div", { className: "modal-container confirm", children: [title && jsx("h3", { children: title }), description && jsx("p", { children: description }), jsxs("div", { className: "modal-buttons", children: [cancelButtonText && (jsx(ButtonBase, { type: ButtonTypes.Button, label: cancelButtonText, category: CategoryTypes.Outlined, color: ColorTypes.Default, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Large, onClick: handleClick(cancelCallBack) })), submitButtonText && (jsx(ButtonBase, { type: ButtonTypes.Button, label: submitButtonText, category: CategoryTypes.Filled, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Large, onClick: handleClick(submitCallBack) }))] })] }));
239
+ };
240
+
241
+ const ModalMessage = () => {
242
+ const { appModalState: { title, description, submitButtonText, submitCallBack, }, dispatchAppModalState, } = useStoreAppModal();
243
+ const handleOk = () => {
244
+ if (submitCallBack) {
245
+ submitCallBack();
246
+ }
247
+ else {
248
+ dispatchAppModalState({
249
+ type: StoreConfigAppModalActionTypes.AppModalClose,
250
+ });
251
+ }
252
+ };
253
+ return (jsxs("div", { className: "modal-container", children: [title && jsx("h3", { children: title }), description && jsx("p", { children: description }), jsx(ButtonBase, { type: ButtonTypes.Button, label: submitButtonText || 'OK', category: CategoryTypes.Filled, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Large, onClick: handleOk })] }));
254
+ };
255
+
256
+ const ModalPostal = () => {
257
+ const [inputValue, setInputValue] = useState('');
258
+ const insuranceType = getInsuranceType();
259
+ const { getPostal, status, errorMessage, } = useHandlerPostal(insuranceType);
260
+ const { appModalState: { title, submitButtonText, submitCallBack, }, } = useStoreAppModal();
261
+ const loading = status === RequestStatusTypes.Loading;
262
+ const error = status === RequestStatusTypes.Error;
263
+ const onSubmit = (event) => {
264
+ event.preventDefault();
265
+ if (!loading) {
266
+ if (submitCallBack) {
267
+ submitCallBack();
268
+ }
269
+ else {
270
+ getPostal(postalCodeFormat(inputValue));
271
+ }
272
+ }
273
+ };
274
+ const handleChange = (event) => {
275
+ setInputValue(event.target.value);
276
+ };
277
+ return (jsxs("div", { className: "modal-container", children: [title && jsx("h3", { children: title }), jsxs("form", { onSubmit: onSubmit, children: [jsxs("div", { className: "input-block", children: [jsx("input", { className: `input-form ${SizeTypes.Large} ${error ? 'error' : ''}`, name: "postal", type: InputTypes.Text, value: formatPostalCode(inputValue), onChange: handleChange, placeholder: "A1A 1A1", maxLength: 7 }), error && jsx("p", { className: "error-message", children: errorMessage })] }), jsx("div", { className: "button-container", children: jsx(ButtonBase, { className: `${loading ? 'disabled' : ''}`, type: ButtonTypes.Submit, label: !loading ? submitButtonText || 'OK' : '', category: CategoryTypes.Filled, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Large, children: loading ? jsx(IconLoaderSecondary, {}) : undefined }) })] })] }));
278
+ };
279
+ ModalPostal.defaultProps = {
280
+ title: '',
281
+ };
282
+
283
+ const ModalFinale = () => {
284
+ // const { isLoggedIn } = useStoreClientLoggedIn();
285
+ const { appModalState: { title, description, submitButtonText, submitCallBack, }, dispatchAppModalState, } = useStoreAppModal();
286
+ const handleOk = () => {
287
+ if (submitCallBack) {
288
+ submitCallBack();
289
+ }
290
+ dispatchAppModalState({
291
+ type: StoreConfigAppModalActionTypes.AppModalClose,
292
+ });
293
+ };
294
+ return (jsxs("div", { className: "modal-container", children: [title && jsx("h3", { children: title }), jsxs("div", { className: "modal-content", children: [description && jsx("p", { className: "description", children: description }), jsx(ButtonBase, { type: ButtonTypes.Button, label: submitButtonText || 'OK', category: CategoryTypes.Filled, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Large, onClick: handleOk })] })] }));
295
+ };
296
+
297
+ const ModalQuoteRequest = ({ title, description, phoneNumber, }) => (jsxs("div", { className: "modal-container", children: [title && jsx("h3", { children: title }), description
298
+ && jsx("p", { children: description }), jsxs("div", { className: "modal-buttons", children: [jsx(ButtonBase, { type: ButtonTypes.Button, label: "OK", category: CategoryTypes.Filled, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Large }), phoneNumber
299
+ && (jsx("a", { target: "_blank", rel: "noreferrer noopener", href: `tel:1${phoneNumber}`, className: "phoneNumber", children: "Call the Broker" }))] })] }));
300
+
301
+ const PostalCodeDataBox = ({ title, postalCode, className }) => (jsxs("div", { className: `${className} postal-code-data-box`, children: [jsx("h2", { children: title }), jsxs("p", { children: ["Your postal code:", ' ', postalCode] })] }));
302
+ PostalCodeDataBox.defaultProps = {
303
+ title: '',
304
+ postalCode: '',
305
+ };
306
+
307
+ const StepsBox = ({ formSteps, validationHooks }) => {
308
+ const { appConfigState: { insuranceType, localIndex } } = useStoreAppConfig();
309
+ const { appDeviceType } = useStoreDeviceType();
310
+ const isMobile = appDeviceType === DeviceTypes.Mobile;
311
+ const navigate = useNavigate();
312
+ const { dispatchAppModalState } = useStoreAppModal();
313
+ const { pathname } = useLocation();
314
+ const currentPath = pathname.split('/');
315
+ const activeIndex = formSteps.find((step) => currentPath[currentPath.length - 1] === step.path?.substring(1))?.key || 0;
316
+ const handleStepClick = (item) => () => {
317
+ if (window.location.pathname !== `/${localIndex}/${insuranceType}${item.path}`) { // ignore double click
318
+ if (activeIndex > (item.key || 0)) {
319
+ navigate(`/${localIndex}/${insuranceType}${item?.path}`);
320
+ }
321
+ else {
322
+ const validateOptions = [];
323
+ validationHooks.forEach((option, index) => {
324
+ if ((item.key || 0) > index) {
325
+ validateOptions.push(option.validateOptions);
326
+ }
327
+ });
328
+ const formValidations = [];
329
+ if (validateOptions.length) {
330
+ validateOptions.forEach((option, index) => {
331
+ const isValid = !option.isValid ? option.validate(false) : option.isValid;
332
+ formValidations.push({ isValid, validate: option.validate, index });
333
+ });
334
+ }
335
+ const formValidated = formValidations.find((option) => !option.isValid);
336
+ if (formValidated && !formValidated.isValid) {
337
+ navigate(`/${localIndex}/${insuranceType}${formSteps[(formValidated.index || 0)]?.path}`);
338
+ dispatchAppModalState({
339
+ type: StoreConfigAppModalActionTypes.AppModalMessageModal,
340
+ payload: {
341
+ title: 'Please enter missing values of required fields',
342
+ },
343
+ });
344
+ }
345
+ else if (activeIndex < formSteps.length) {
346
+ navigate(`/${localIndex}/${insuranceType}${item.path}`);
347
+ }
348
+ }
349
+ }
350
+ };
351
+ return (jsx("ol", { className: "navigation-steps-container", children: !isMobile ? formSteps?.map((item, index) => {
352
+ let cls;
353
+ switch (true) {
354
+ case activeIndex > index:
355
+ cls = 'done';
356
+ break;
357
+ case activeIndex === index:
358
+ cls = 'in-progress';
359
+ break;
360
+ default: cls = 'todo';
361
+ }
362
+ return (
363
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
364
+ jsx("div", { onKeyDown: handleStepClick(item), onClick: handleStepClick(item), className: "navigation-step-container", children: jsx(Step, { className: cls, item: item, index: index }) }, `${index}-${item?.title}`));
365
+ }) : jsx(Step, { item: formSteps[activeIndex], index: activeIndex, itemsCount: formSteps.length, isMobile: true }) }));
366
+ };
367
+ StepsBox.defaultProps = {
368
+ partnerId: '',
369
+ className: '',
370
+ activeIndex: 0,
371
+ };
372
+
373
+ const ButtonsBox = ({ formSteps, validationHooks, clearForm, }) => {
374
+ const { pathname } = useLocation();
375
+ const navigate = useNavigate();
376
+ const { appConfigState } = useStoreAppConfig();
377
+ const { appDeviceType } = useStoreDeviceType();
378
+ const { dispatchAppModalState } = useStoreAppModal();
379
+ const { appType, insuranceType, localIndex } = appConfigState;
380
+ const isMobile = appDeviceType === DeviceTypes.Mobile;
381
+ const isTheBig = appType === AppTypes.TheBig;
382
+ const currentPath = pathname.split('/');
383
+ const activeIndex = formSteps.find((step) => currentPath[currentPath.length - 1] === step.path?.substring(1))?.key || 0;
384
+ const onForwardClick = () => {
385
+ const { validateOptions: { validate, isValid } } = validationHooks[activeIndex] || { validateOptions: { isValid: true } };
386
+ const formIsValid = !isValid ? validate && validate() : isValid;
387
+ if (activeIndex < formSteps.length && formIsValid) {
388
+ navigate(`/${localIndex}/${insuranceType}${formSteps[activeIndex + 1].path}`);
389
+ }
390
+ };
391
+ const onBackClick = () => {
392
+ if (activeIndex > 0) {
393
+ navigate(`/${localIndex}/${insuranceType}${formSteps[activeIndex - 1].path}`);
394
+ }
395
+ };
396
+ const onFinishClick = () => {
397
+ dispatchAppModalState({
398
+ type: StoreConfigAppModalActionTypes.AppModalFinaleModal,
399
+ payload: {
400
+ title: 'Thank You!',
401
+ description: 'Thanks for using My Choice to compare car insurance rates.',
402
+ submitCallBack: () => {
403
+ navigate(`/${localIndex}/${insuranceType}${formSteps[0].path}`);
404
+ if (clearForm) {
405
+ clearForm();
406
+ }
407
+ },
408
+ },
409
+ });
410
+ };
411
+ const onClearClick = () => {
412
+ dispatchAppModalState({
413
+ type: StoreConfigAppModalActionTypes.AppModalConfirmModal,
414
+ payload: {
415
+ title: 'Are you sure you want to clear the form? This will erase all form data you have input.',
416
+ cancelButtonText: 'Cancel',
417
+ submitButtonText: 'Confirm',
418
+ submitCallBack: () => {
419
+ if (clearForm) {
420
+ clearForm();
421
+ }
422
+ },
423
+ },
424
+ });
425
+ };
426
+ return (jsxs("div", { className: "buttons-box", children: [activeIndex === 0 ? (jsx(ButtonBase, { size: isMobile ? SizeTypes.Small : SizeTypes.Medium, category: CategoryTypes.Outlined, color: ColorTypes.Secondary, variant: ButtonVariantTypes.Circle, className: "button-arrow button-with-text", onClick: onClearClick, children: jsx("span", { children: "Clear Form" }) }))
427
+ : (jsx(ButtonArrow, { direction: DirectionTypes.Left, category: CategoryTypes.Outlined, color: ColorTypes.Secondary, size: isMobile ? SizeTypes.Small : SizeTypes.Medium, onClick: onBackClick })), activeIndex === formSteps.length - 1 ? (jsx(Fragment, { children: !isTheBig && (jsx(ButtonBase, { size: isMobile ? SizeTypes.Small : SizeTypes.Medium, category: CategoryTypes.Filled, color: ColorTypes.Secondary, variant: ButtonVariantTypes.Circle, className: "button-arrow button-with-text", onClick: onFinishClick, children: jsx("span", { children: "Finish" }) })) })) : (jsx(ButtonArrow, { direction: DirectionTypes.Right, category: CategoryTypes.Filled, color: ColorTypes.Secondary, size: isMobile ? SizeTypes.Small : SizeTypes.Medium, onClick: onForwardClick }))] }));
428
+ };
429
+ ButtonsBox.defaultProps = {
430
+ isMobile: false,
431
+ activeIndex: 0,
432
+ };
433
+
434
+ const NavigationTop = ({ title, postalCode, validationHooks, formSteps, clearForm, }) => {
435
+ const { appConfigState: { appType } } = useStoreAppConfig();
436
+ const isTheBig = appType === AppTypes.TheBig;
437
+ return (jsx("div", { className: "navigation-container", children: jsxs("div", { className: "content", children: [jsx(PostalCodeDataBox, { className: isTheBig ? 'thebig' : '', title: title, postalCode: postalCode }), jsx(StepsBox, { formSteps: formSteps, validationHooks: validationHooks }), jsx(ButtonsBox, { formSteps: formSteps, validationHooks: validationHooks, clearForm: clearForm })] }) }));
438
+ };
439
+ NavigationTop.defaultProps = {
440
+ isMobile: false,
441
+ activeIndex: 0,
442
+ };
443
+
444
+ const NavigationBottom = ({ createItem, validateForm, formSteps, className, itemCount = 1, maxItemCount = 5, formIsValid, }) => {
445
+ const { pathname } = useLocation();
446
+ const navigate = useNavigate();
447
+ const { appConfigState } = useStoreAppConfig();
448
+ const { dispatchAppModalState } = useStoreAppModal();
449
+ const currentPath = pathname.split('/');
450
+ const activeIndex = formSteps.find((step) => currentPath[currentPath.length - 1] === step.path?.substring(1))?.key || 0;
451
+ const onForwardClick = () => {
452
+ const isValid = !formIsValid ? validateForm && validateForm() : formIsValid;
453
+ if (!isValid) {
454
+ dispatchAppModalState({
455
+ type: StoreConfigAppModalActionTypes.AppModalMessageModal,
456
+ payload: {
457
+ title: 'Please enter missing values of required fields',
458
+ },
459
+ });
460
+ }
461
+ if (activeIndex < formSteps.length && isValid) {
462
+ navigate(`/${appConfigState.localIndex}/${appConfigState.insuranceType}${formSteps[activeIndex + 1].path}`);
463
+ }
464
+ };
465
+ const onBackClick = () => {
466
+ if (activeIndex > 0) {
467
+ navigate(`/${appConfigState.localIndex}/${appConfigState.insuranceType}${formSteps[activeIndex - 1].path}`);
468
+ }
469
+ };
470
+ return (jsxs("div", { className: `${className} navigation-bottom`, children: [!!activeIndex && (jsx(ButtonBase, { className: "previous", label: "Previous", type: ButtonTypes.Button, category: CategoryTypes.Outlined, color: ColorTypes.Secondary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Medium, onClick: onBackClick })), itemCount < maxItemCount && createItem && (jsx(ButtonBase, { className: "add-item", label: `Add a ${formSteps[activeIndex].title?.split(' ')[0]}`, type: ButtonTypes.Button, category: CategoryTypes.Filled, color: ColorTypes.Default, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Medium, onClick: createItem })), jsx(ButtonBase, { className: "next", label: "Next", type: ButtonTypes.Button, category: CategoryTypes.Filled, color: ColorTypes.Secondary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Medium, onClick: onForwardClick })] }));
471
+ };
472
+ NavigationBottom.defaultProps = {
473
+ className: '',
474
+ activeIndex: 0,
475
+ };
476
+
477
+ const NavigationBottomTheBig = ({ createItem, validateForm, formSteps, className, itemCount = 1, maxItemCount = 5, formIsValid, }) => {
478
+ const { pathname } = useLocation();
479
+ const navigate = useNavigate();
480
+ const { appConfigState } = useStoreAppConfig();
481
+ const { dispatchAppModalState } = useStoreAppModal();
482
+ const currentPath = pathname.split('/');
483
+ const activeIndex = formSteps.find((step) => currentPath[currentPath.length - 1] === step.path?.substring(1))?.key || 0;
484
+ const onForwardClick = () => {
485
+ const isValid = !formIsValid ? validateForm && validateForm() : formIsValid;
486
+ if (!isValid) {
487
+ dispatchAppModalState({
488
+ type: StoreConfigAppModalActionTypes.AppModalMessageModal,
489
+ payload: {
490
+ title: 'Please enter missing values of required fields',
491
+ },
492
+ });
493
+ }
494
+ if (activeIndex < formSteps.length && isValid) {
495
+ navigate(`/${appConfigState.localIndex}/${appConfigState.insuranceType}${formSteps[activeIndex + 1].path}`);
496
+ }
497
+ };
498
+ const onBackClick = () => {
499
+ if (activeIndex > 0) {
500
+ navigate(`/${appConfigState.localIndex}/${appConfigState.insuranceType}${formSteps[activeIndex - 1].path}`);
501
+ }
502
+ };
503
+ return (jsxs("div", { className: `${className} navigation-bottom-thebig`, children: [itemCount < maxItemCount && createItem && (jsx(ButtonBase, { className: "add-item", label: `Add a ${formSteps[activeIndex].title?.split(' ')[0]}`, type: ButtonTypes.Button, category: CategoryTypes.Filled, color: ColorTypes.Default, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Medium, onClick: createItem })), jsxs("div", { className: "navigation-buttons", children: [!!activeIndex && (jsx(ButtonBase, { className: "previous", label: "Previous", type: ButtonTypes.Button, category: CategoryTypes.Outlined, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Medium, onClick: onBackClick })), jsx(ButtonBase, { className: "next", label: "Next", type: ButtonTypes.Button, category: CategoryTypes.Filled, color: ColorTypes.Primary, variant: ButtonVariantTypes.Rectangle, size: SizeTypes.Medium, onClick: onForwardClick })] })] }));
504
+ };
505
+ NavigationBottomTheBig.defaultProps = {
506
+ activeIndex: 0,
507
+ };
508
+
509
+ const NavigationTab = React.memo((props) => {
510
+ const { className, name, addButtonLabel, items, selectItem, removeItem, createItem, activeItemIndex = 0, maxItemCount = 5, readOnly, } = props;
511
+ const { appConfigState: { appType } } = useStoreAppConfig();
512
+ const isThebig = appType === AppTypes.TheBig;
513
+ const handleButtonClick = (index) => () => {
514
+ if (selectItem) {
515
+ selectItem(index);
516
+ }
517
+ };
518
+ const handleIconClick = (index) => (event) => {
519
+ event.stopPropagation();
520
+ if (removeItem) {
521
+ removeItem(index);
522
+ }
523
+ };
524
+ const handleArrowClick = (direction) => {
525
+ if (selectItem) {
526
+ if (direction === DirectionTypes.Left) {
527
+ selectItem(((activeItemIndex - 1) > -1) ? activeItemIndex - 1 : 0);
528
+ }
529
+ if (direction === DirectionTypes.Right) {
530
+ selectItem(((activeItemIndex + 1) < maxItemCount) ? activeItemIndex + 1 : maxItemCount);
531
+ }
532
+ }
533
+ };
534
+ const reduceCount = activeItemIndex === 4 ? 2 : 1;
535
+ return (jsxs("div", { className: `navigation-tab-box ${className}`, children: [(activeItemIndex > 1) && jsx(ButtonTabArrow, { onClick: () => handleArrowClick(DirectionTypes.Left) }), (activeItemIndex <= items.length - 2
536
+ && activeItemIndex < 3
537
+ && ((items.length > 2 && createItem) || (items.length > 3 && !createItem)))
538
+ && jsx(ButtonTabArrow, { onClick: () => handleArrowClick(DirectionTypes.Right), direction: DirectionTypes.Right }), jsxs("div", { className: "navigation-tab-container", style: { marginLeft: `${activeItemIndex > 1 ? `-${(activeItemIndex - reduceCount) * 9.875}rem` : '0'}` }, children: [items.map((tab, index) => (jsx(ButtonTab, { className: `${activeItemIndex === index ? 'active-tab' : 'inactive-tab'} ${isThebig ? 'thebig-bold' : ''}`, label: tab.name, buttonClick: handleButtonClick(index), iconClick: handleIconClick(index), selfDelete: index !== 0 && !readOnly }, `${name}-${index}`))), (items.length < maxItemCount && createItem) && (jsx(ButtonTab, { className: isThebig ? 'add-thebig-medium' : 'add', label: addButtonLabel, buttonClick: createItem, selfDelete: false }))] })] }));
539
+ }, (prevProps, nextProps) => !((prevProps.items !== nextProps.items
540
+ || prevProps.activeItemIndex !== nextProps.activeItemIndex)));
541
+ NavigationTab.defaultProps = {
542
+ className: '',
543
+ items: [],
544
+ readOnly: false,
545
+ addButtonLabel: '',
546
+ };
547
+
548
+ const NavigationTabMobile = React.memo((props) => {
549
+ const { items, addButtonLabel, selectItem, removeItem, createItem, activeItemIndex = 0, isOpen, openListClick, maxItemCount = 5, } = props;
550
+ const handleButtonClick = (index) => () => {
551
+ if (selectItem) {
552
+ selectItem(index);
553
+ }
554
+ };
555
+ const handleIconClick = (index) => (event) => {
556
+ event.stopPropagation();
557
+ if (removeItem) {
558
+ removeItem(index);
559
+ }
560
+ };
561
+ return (jsxs("div", { className: "navigation-tab-box", children: [jsxs("button", { type: ButtonTypes.Button, className: "navigation-tab-selected", onClick: openListClick, children: [jsx("h4", { children: items[activeItemIndex].name }), jsx(IconDropdownArrow, { className: isOpen ? 'rotated' : '' })] }), isOpen && (jsxs("div", { className: "navigation-tab-container-mobile", children: [items.map((tab, index) => (jsx(ButtonTabMobile, { label: tab.name, buttonClick: handleButtonClick(index), iconClick: handleIconClick(index), selfDelete: index !== 0 }, `${index}`))), (items.length < maxItemCount) && (jsx(ButtonTabMobile, { className: "add", label: addButtonLabel, buttonClick: createItem, selfDelete: false }))] }))] }));
562
+ }, (prevProps, nextProps) => !((prevProps.items !== nextProps.items
563
+ || prevProps.activeItemIndex !== nextProps.activeItemIndex
564
+ || prevProps.isOpen !== nextProps.isOpen)));
565
+ NavigationTabMobile.defaultProps = {
566
+ className: '',
567
+ items: [],
568
+ };
569
+
570
+ const formSteps = {
571
+ [InsuranceTypes.Car]: [
572
+ {
573
+ key: 0, path: '/', name: 'Step 1', title: 'Vehicle Info', icon: NavigationCar({}),
574
+ },
575
+ {
576
+ key: 1, path: '/driver', name: 'Step 2', title: 'Driver Info', icon: NavigationPerson({}),
577
+ },
578
+ {
579
+ key: 2, path: '/discount', name: 'Step 3', title: 'Discount Info', icon: NavigationDiscount({}),
580
+ },
581
+ {
582
+ key: 3, path: '/quotes', name: 'Step 4', title: 'Your Quotes', icon: NavigationQuotes({}),
583
+ },
584
+ ],
585
+ [InsuranceTypes.Home]: [
586
+ {
587
+ key: 0, path: '/', name: 'Step 1', title: 'Your Address', icon: NavigationAddress({}),
588
+ },
589
+ {
590
+ key: 1, path: '/applicant', name: 'Step 2', title: 'Applicant Info', icon: NavigationPerson({}),
591
+ },
592
+ {
593
+ key: 2, path: '/property', name: 'Step 3', title: 'Property Info', icon: NavigationProperty({}),
594
+ },
595
+ {
596
+ key: 3, path: '/discount', name: 'Step 4', title: 'Discount Info', icon: NavigationDiscount({}),
597
+ },
598
+ {
599
+ key: 4, path: '/quotes', name: 'Step 5', title: 'Your Quotes', icon: NavigationQuotes({}),
600
+ },
601
+ ],
602
+ };
603
+
604
+ const getInsuranceType = () => {
605
+ const pathParts = window.location.pathname.split('/');
606
+ if (pathParts.includes('car')) {
607
+ return InsuranceTypes.Car;
608
+ }
609
+ if (pathParts.includes('home')) {
610
+ return InsuranceTypes.Home;
611
+ }
612
+ return InsuranceTypes.Car;
613
+ };
614
+
615
+ const AppModalWrapper = () => {
616
+ const { appModalState } = useStoreAppModal();
617
+ switch (appModalState.modalType) {
618
+ case ModalTypes.MessageModal:
619
+ return (jsx(ModalMessage, {}));
620
+ case ModalTypes.ConfirmModal:
621
+ return (jsx(ModalConfirm, {}));
622
+ case ModalTypes.PostalModal:
623
+ return (jsx(ModalPostal, {}));
624
+ case ModalTypes.FinaleModal:
625
+ return (jsx(ModalFinale, {}));
626
+ default:
627
+ return null;
628
+ }
629
+ };
630
+ const AppModal = () => {
631
+ const { appModalState } = useStoreAppModal();
632
+ const insuranceType = getInsuranceType();
633
+ if (appModalState.isOpen && document.location.pathname.indexOf(insuranceType) !== -1) {
634
+ return (jsx("div", { className: "app-modal", children: jsx(AppModalWrapper, {}) }));
635
+ }
636
+ return null;
637
+ };
638
+
639
+ const AppHeader = () => {
640
+ const { appConfigState: { appType, localIndex } } = useStoreAppConfig();
641
+ const { appDeviceType } = useStoreDeviceType();
642
+ if (appType) {
643
+ return (jsxs("div", { className: "app-header", children: [appType === AppTypes.TheBig && jsx(HeaderTheBig, { textBack: "home" }), appType === AppTypes.MyChoice
644
+ && (localIndex !== defaultLocalIndex
645
+ ? jsx(HeaderPartner, {})
646
+ : (jsx(Fragment, { children: appDeviceType === DeviceTypes.Desktop
647
+ ? jsx(HeaderMyChoice, {})
648
+ : jsx(HeaderMyChoiceMobile, {}) })))] }));
649
+ }
650
+ return null;
651
+ };
652
+
653
+ const RouteWrapperPublic = (props) => {
654
+ const { children } = props;
655
+ const { appConfigState } = useStoreAppConfig();
656
+ if (appConfigState.isReady) {
657
+ return (jsx(Fragment, { children: children }));
658
+ }
659
+ return null;
660
+ };
661
+
662
+ const getVehicleYearRange = () => {
663
+ const currentDate = new Date();
664
+ const vehicleYear = [];
665
+ for (let year = (currentDate.getFullYear()); year >= 2001; year -= 1) {
666
+ vehicleYear.push({ name: `${year}`, value: `${year}` });
667
+ }
668
+ vehicleYear.push({ name: '2000 or older', value: '2000' });
669
+ return vehicleYear;
670
+ };
671
+ const getRecommendedRange = (distanceDaily, distanceBusiness) => {
672
+ let kmEachDay = +distanceDaily;
673
+ if (distanceBusiness && (+distanceBusiness > +distanceDaily)) {
674
+ kmEachDay = +distanceBusiness;
675
+ }
676
+ switch (true) {
677
+ case kmEachDay === 1:
678
+ return 8000;
679
+ case ((kmEachDay >= 2) && (kmEachDay <= 10)):
680
+ return 10000;
681
+ case ((kmEachDay >= 15) && (kmEachDay <= 20)):
682
+ return 15000;
683
+ case ((kmEachDay >= 30) && (kmEachDay <= 40)):
684
+ return 20000;
685
+ case ((kmEachDay >= 50) && (kmEachDay <= 80)):
686
+ return 30000;
687
+ case ((kmEachDay >= 90) && (kmEachDay <= 100)):
688
+ return 50000;
689
+ case kmEachDay === 150:
690
+ return 60000;
691
+ case kmEachDay === 200:
692
+ return 80000;
693
+ case kmEachDay === 250:
694
+ return 100000;
695
+ case kmEachDay === 300:
696
+ return 150000;
697
+ case kmEachDay === 350:
698
+ return 200000;
699
+ case kmEachDay === 400:
700
+ return 250000;
701
+ default:
702
+ return kmEachDay;
703
+ }
704
+ };
705
+
706
+ const getSelectedOption = (options, value) => {
707
+ if (typeof value === 'boolean') {
708
+ return value ? options[0].value : options[1].value;
709
+ }
710
+ return options.find((option) => option.value === value)?.value;
711
+ };
712
+ const getErrorMessage = (value, inValidation = false, message = '') => {
713
+ if (inValidation) {
714
+ return !value ? 'This field is required.' : message;
715
+ }
716
+ return '';
717
+ };
718
+ const getDateErrorMessage = (values, inValidation = false) => {
719
+ const emptyValues = values.filter((value) => !value);
720
+ if (inValidation) {
721
+ if (emptyValues.length > 1) {
722
+ return 'These fields are required.';
723
+ }
724
+ if (emptyValues.length === 1) {
725
+ return 'This field is required.';
726
+ }
727
+ }
728
+ return '';
729
+ };
730
+ const formatPhoneObject = (phone) => {
731
+ const phoneToArray = (phone || defaultBrokerPhone).split(',');
732
+ const onlyNumbers = phoneToArray[0].replace(/\D/g, '');
733
+ let phoneNumber;
734
+ if (onlyNumbers.length < 11) {
735
+ phoneNumber = `1${onlyNumbers}`;
736
+ }
737
+ else {
738
+ phoneNumber = onlyNumbers;
739
+ }
740
+ const phoneToNumbers = Number(phoneNumber).toString();
741
+ const phoneWithoutSpecialKey = phoneToNumbers.length > 10
742
+ ? phoneToNumbers.replace(/(\d{1})(\d{3})(\d{3})(\d{4})/, '$1-$2-$3-$4')
743
+ : phoneToNumbers.replace(/(\d{1})(\d{3})(\d{3})(\d{3})/, '$1-$2-$3-$4');
744
+ const title = phoneToArray.length < 2 ? phoneWithoutSpecialKey : `${phoneWithoutSpecialKey} x${phoneToArray[1]}`;
745
+ const specialKeys = phoneToArray[1] ? `,${phoneToArray[1]}` : '';
746
+ return {
747
+ number: phoneWithoutSpecialKey,
748
+ title,
749
+ specialKeys,
750
+ };
751
+ };
752
+ const formatTitleToCapital = (name) => name.replace(/-/g, ' ')
753
+ .replace(/\+/g, ' ').replace(/(\b[a-z](?!\s))/g, (letter) => letter.toUpperCase());
754
+ const capitalize = (text) => text.charAt(0).toUpperCase() + text.slice(1);
755
+
756
+ const BlockCarInfo = () => {
757
+ const { status: statusMake, getVehicleMake, vehicleMakeList = [] } = useHandlerCarMake();
758
+ const { status: statusModel, getVehicleModel, vehicleModelList = [] } = useHandlerCarModel();
759
+ const { vehicleState, dispatchVehicleState } = useStoreFormCarVehicle();
760
+ const { year: currentYear, make: currentMake, model: currentModel, } = vehicleState.items[vehicleState.activeIndex];
761
+ const yearIsValid = !currentYear || Number(currentYear) > 2000;
762
+ const handleVehicleYearChange = ({ value }) => {
763
+ if (value) {
764
+ dispatchVehicleState({
765
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleYearSet,
766
+ payload: { year: value },
767
+ });
768
+ getVehicleMake(value);
769
+ }
770
+ };
771
+ const handleVehicleMakeChange = ({ value }) => {
772
+ if (value) {
773
+ dispatchVehicleState({
774
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleMakeSet,
775
+ payload: { make: value },
776
+ });
777
+ getVehicleModel(currentYear, value);
778
+ }
779
+ };
780
+ const handleVehicleModelChange = ({ value }) => {
781
+ if (value) {
782
+ dispatchVehicleState({
783
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleModelSet,
784
+ payload: { model: value },
785
+ });
786
+ }
787
+ };
788
+ useEffectOnce(() => {
789
+ if (currentYear) {
790
+ getVehicleMake(currentYear);
791
+ }
792
+ if (currentMake) {
793
+ getVehicleModel(currentYear, currentMake);
794
+ }
795
+ });
796
+ return (jsxs(Fragment, { children: [jsx(SelectFormBox, { options: getVehicleYearRange(), name: "carYear", title: "Car Year", placeholder: "Select Year", description: "Every car is different, so for insurers to accurately cover, repair, or replace your vehicle, they need to know the make, model, age, body type, and vehicle history. Each factor will raise or lower your premium\u2014an older vehicle is typically more affordable to repair, for example, since cars lose value each year.", error: !currentYear && vehicleState.inValidation, errorMessage: !yearIsValid ? yearMessage : getErrorMessage(currentYear, vehicleState.inValidation), defaultValue: currentYear, autoSelectIfValueIsOutOfOptions: false, onChange: handleVehicleYearChange }), !!vehicleMakeList.length
797
+ && yearIsValid
798
+ && statusMake === RequestStatusTypes.Success
799
+ && (jsx(SelectFormBox, { options: vehicleMakeList, name: "carMakes", title: "Car Manufacturer", placeholder: "Select a Make", description: "The manufacturer of your vehicle is a huge influence on your insurance premium, but it isn\u2019t the only consideration. Some car manufacturers include security features that may qualify for discounts, like anti-theft protection or anti-lock brakes. Insurers also consider repair, risk, injury, and retail prices. If you do not see your vehicle on our list, call us for a telephonic quote.", error: !currentMake && vehicleState.inValidation, errorMessage: getErrorMessage(currentMake, vehicleState.inValidation), defaultValue: currentMake, autoSelectIfValueIsOutOfOptions: false, onChange: handleVehicleMakeChange })), vehicleModelList.length > 0
800
+ && currentMake
801
+ && yearIsValid
802
+ && statusModel === RequestStatusTypes.Success
803
+ && (jsx(SelectFormBox, { options: vehicleModelList, name: "carModel", title: "Car Model", placeholder: "Select a Model", description: "Insurers use the model to calculate insurance premiums. It may not significantly impact basic liability, but it does influence collision and comprehensive car insurance premiums. Safety features are also pivotal. Rear-view cameras and anti-theft devices decrease the likelihood of a claim, and larger cars risk more damage if you do have an accident. If you do not see your vehicle on our list, call us for a telephonic quote.", error: !currentModel && vehicleState.inValidation, errorMessage: getErrorMessage(currentModel, vehicleState.inValidation), defaultValue: currentModel, autoSelectIfValueIsOutOfOptions: false, onChange: handleVehicleModelChange }))] }));
804
+ };
805
+
806
+ const BlockCarConditionInfo = () => {
807
+ const { vehicleState, dispatchVehicleState } = useStoreFormCarVehicle();
808
+ const { year, condition, leased, winterTires, parkingLocation, primaryUse, distanceDaily, distanceBusiness, distanceYearly, purchaseYear, purchaseMonth, purchaseDay, } = vehicleState.items[vehicleState.activeIndex];
809
+ // eslint-disable-next-line max-len
810
+ const primaryUseHintMessage = primaryUse === 'business' ? 'Please choose "Business" only if your vehicle is used primarily for work (sales representatives, realtors, consultants, etc.). If you drive back and forth to work or use your vehicle occasionally for work, please select "Personal".' : '';
811
+ const defaultPurchaseDate = {
812
+ day: purchaseDay,
813
+ month: purchaseMonth,
814
+ year: purchaseYear,
815
+ };
816
+ const handleConditionChange = ({ value }) => {
817
+ dispatchVehicleState({
818
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleConditionSelect,
819
+ payload: { condition: value },
820
+ });
821
+ };
822
+ const handleLeasedChange = ({ value }) => {
823
+ dispatchVehicleState({
824
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleCarStatusSelect,
825
+ payload: { leased: value },
826
+ });
827
+ };
828
+ const handlePurchaseDateChange = (dateType) => ({ value }) => {
829
+ if (dateType === DateTypes.Day) {
830
+ dispatchVehicleState({
831
+ type: StoreFormCarVehicleActionTypes.FormCarVehiclePurchaseDaySelect,
832
+ payload: { purchaseDay: value },
833
+ });
834
+ }
835
+ if (dateType === DateTypes.Month) {
836
+ dispatchVehicleState({
837
+ type: StoreFormCarVehicleActionTypes.FormCarVehiclePurchaseMonthSelect,
838
+ payload: { purchaseMonth: value },
839
+ });
840
+ }
841
+ if (dateType === DateTypes.Year) {
842
+ dispatchVehicleState({
843
+ type: StoreFormCarVehicleActionTypes.FormCarVehiclePurchaseYearSelect,
844
+ payload: { purchaseYear: value },
845
+ });
846
+ }
847
+ };
848
+ const handleWinterTiresChange = ({ value }) => {
849
+ dispatchVehicleState({
850
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleWinterTiresSelect,
851
+ payload: { winterTires: value },
852
+ });
853
+ };
854
+ const handleCarParkingLocationChange = ({ value }) => {
855
+ dispatchVehicleState({
856
+ type: StoreFormCarVehicleActionTypes.FormCarParkingLocationSelect,
857
+ payload: { parkingLocation: value },
858
+ });
859
+ };
860
+ const handleCarUsageChange = ({ value }) => {
861
+ dispatchVehicleState({
862
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleUsageSelect,
863
+ payload: { primaryUse: value },
864
+ });
865
+ };
866
+ const handleCarDailyDistanceChange = ({ value }) => {
867
+ dispatchVehicleState({
868
+ type: StoreFormCarVehicleActionTypes.FormCarDailyDistanceSelect,
869
+ payload: { distanceDaily: value },
870
+ });
871
+ dispatchVehicleState({
872
+ type: StoreFormCarVehicleActionTypes.FormCarYearlyDistanceSelect,
873
+ payload: { distanceYearly: `${getRecommendedRange(value, primaryUse === VehiclePrimaryUseTypes.Business ? distanceBusiness : 1)}` },
874
+ });
875
+ };
876
+ const handleCarBusinessDailyDistanceChange = ({ value }) => {
877
+ dispatchVehicleState({
878
+ type: StoreFormCarVehicleActionTypes.FormCarBusinessDistanceSelect,
879
+ payload: { distanceBusiness: value },
880
+ });
881
+ dispatchVehicleState({
882
+ type: StoreFormCarVehicleActionTypes.FormCarYearlyDistanceSelect,
883
+ payload: { distanceYearly: `${getRecommendedRange(value, primaryUse === VehiclePrimaryUseTypes.Business ? distanceBusiness : 1)}` },
884
+ });
885
+ };
886
+ const handleCarYearlyDistanceChange = ({ value }) => {
887
+ dispatchVehicleState({
888
+ type: StoreFormCarVehicleActionTypes.FormCarYearlyDistanceSelect,
889
+ payload: { distanceYearly: value },
890
+ });
891
+ };
892
+ return (jsxs(Fragment, { children: [jsx(SwitchButtonBox, { items: carCondition, onChange: handleConditionChange, name: "condition", defaultValue: getSelectedOption(carCondition, condition), description: "Used cars are usually cheaper to insure than new ones because of the depreciation. The cost to replace this vehicle is typically less expensive and insurers will account for the condition of the car when giving you a rate.", title: "Was this car new or used when you bought it?" }), jsx(SwitchButtonBox, { items: carStatus, onChange: handleLeasedChange, name: "leased", defaultValue: getSelectedOption(carStatus, leased), description: "You can own or lease a car. Ownership means that you bought the vehicle or are currently financing it. Leasing is renting it under a long-term contract. In this case, the leasing company maintains ownership of the vehicle, which you will see clearly on your insurance policy.", title: "Is this car owned/financed or leased?" }), jsx(DateSelectFormBox, { name: "purchaseDate", dateNames: ['purchaseYear', 'purchaseMonth'], onDateChange: handlePurchaseDateChange, defaultValue: defaultPurchaseDate, title: "When did you buy this car?", description: "Insurers generally consider your age and driving experience when calculating a vehicle insurance quote. The safest drivers are often those who are over thirty, but each insurer will have their own parameters. The youngest and oldest drivers have the greatest liability reflected in their premiums due to inexperience or health complications, respectively.", errorMessage: getDateErrorMessage([
893
+ purchaseDay || '',
894
+ purchaseMonth || '',
895
+ purchaseYear || '',
896
+ ], vehicleState.inValidation), error: vehicleState.inValidation, minDate: year ? `${Number(year) - 1}-01-01` : getFormattedDate('', 'yyyy-MM-dd'), maxDate: getFormattedDate('', 'yyyy-MM-dd') }), jsx(SwitchButtonBox, { items: carWinterTiresCheck, onChange: handleWinterTiresChange, name: "winterTires", defaultValue: getSelectedOption(carWinterTiresCheck, winterTires), description: "Snow. Ice. Freezing temperatures. Winter tires protect you from all these winter weather conditions, and more. It also protects your wallet. Investing in winter tires can save you $50 to $100 on your insurance.", title: "Does your car have winter tires?" }), jsx(SelectFormBox, { options: carKeepPlace, name: "parkingLocation", onChange: handleCarParkingLocationChange, defaultValue: getSelectedOption(carKeepPlace, parkingLocation), title: "Where do you keep your car overnight?", placeholder: "Select from the list", description: "For many of us, the answer is \u201Cat home.\u201D If you park your car in various locations throughout the year, then select the most frequently parking spot. Be honest\u2014some insurers will use your overnight parking location to calculate a quote, which could affect your claims in the future.", autoSelectIfValueIsOutOfOptions: false, error: !parkingLocation && vehicleState.inValidation, errorMessage: getErrorMessage(parkingLocation, vehicleState.inValidation) }), jsx(SwitchButtonBox, { items: carUsagePurpose, onChange: handleCarUsageChange, name: "primaryUse", defaultValue: getSelectedOption(carUsagePurpose, primaryUse) || carUsagePurpose[0].value, hintMessage: primaryUseHintMessage, description: "The way you use your vehicle is a primary factor that insurers use in your policy terms and fees, whether it be personal or business.\n \u2022 Personal is driving from work or school to home.\n \u2022 Business considers other uses like sales calls, pick-ups or deliveries, or other business errands.", title: "What do you mainly use your car for?" }), jsx(SelectFormBox, { options: firstDriveDistanceList, name: "distanceDaily", onChange: handleCarDailyDistanceChange, defaultValue: getSelectedOption(firstDriveDistanceList, distanceDaily), title: "How far is your 1-way commute to work or school?", placeholder: "Select", description: "The distance you drive to work or school would be an example of your daily commute. It is one of the most important factors when determining coverage options since it exposes you to traffic each day. The shorter your commute, the less risk you carry of an accident.", autoSelectIfValueIsOutOfOptions: false, error: !distanceDaily && vehicleState.inValidation, errorMessage: getErrorMessage(distanceDaily, vehicleState.inValidation) }), primaryUse === 'business' && (jsx(SelectFormBox, { options: dailyDriveBusinessDistanceList, name: "distanceBusiness", onChange: handleCarBusinessDailyDistanceChange, defaultValue: getSelectedOption(dailyDriveBusinessDistanceList, distanceBusiness), title: "How many kilometers are driven for business use each day?", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false, error: !distanceBusiness && vehicleState.inValidation, errorMessage: getErrorMessage(distanceBusiness, vehicleState.inValidation) })), jsx(SelectFormBox, { options: yearlyDriveDistanceList, name: "distanceYearly", onChange: handleCarYearlyDistanceChange, defaultValue: getSelectedOption(yearlyDriveDistanceList, distanceYearly), title: "How many total kilometers are driven each year?", placeholder: "Select", hintMessage: distanceDaily ? `Based on your daily driven kilometers, we recommend
897
+ ${numberWithCommas(getRecommendedRange(distanceDaily, primaryUse === VehiclePrimaryUseTypes.Business ? distanceBusiness : 1))} for your yearly driven kilometers` : '', autoSelectIfValueIsOutOfOptions: false, error: !distanceYearly && vehicleState.inValidation, errorMessage: getErrorMessage(distanceYearly, vehicleState.inValidation) })] }));
898
+ };
899
+
900
+ const VehicleSectionMain = () => (jsxs("div", { className: "form-section top-section", children: [jsx(BlockCarInfo, {}), jsx(BlockCarConditionInfo, {})] }));
901
+
902
+ const VehicleSectionCoverage = () => {
903
+ const { vehicleState, dispatchVehicleState } = useStoreFormCarVehicle();
904
+ const { collision, comprehensive } = vehicleState.items[vehicleState.activeIndex];
905
+ const handleComprehensiveChange = ({ value }) => {
906
+ dispatchVehicleState({
907
+ type: StoreFormCarVehicleActionTypes.FormCarComprehensiveCoverageSelect,
908
+ payload: { coverage: value, deductible: 1000 },
909
+ });
910
+ };
911
+ const handleCollisionChange = ({ value }) => {
912
+ dispatchVehicleState({
913
+ type: StoreFormCarVehicleActionTypes.FormCarCollisionCoverageSelect,
914
+ payload: { coverage: value, deductible: 1000 },
915
+ });
916
+ };
917
+ return (jsxs("div", { className: "form-section", children: [jsx("h2", { children: "Do you want your insurance to have either comprehensive, collision coverage or both? " }), jsx(SwitchButtonBox, { items: comprehensiveCoverage, onChange: handleComprehensiveChange, name: "comprehensive", defaultValue: getSelectedOption(comprehensiveCoverage, comprehensive?.coverage), description: "Comprehensive insurance covers factors outside of traffic, like fire, flooding, and theft. It also includes terms, limits, and conditions, which become more favourable as the car ages and devalues. Comprehensive coverage is ideal for newer or lightly used vehicles, but for older vehicles, it tends to be poor value for money.", title: "Comprehensive Coverage" }), jsx(SwitchButtonBox, { items: collisionCoverage, onChange: handleCollisionChange, name: "collision", defaultValue: getSelectedOption(collisionCoverage, collision?.coverage), description: "Sometimes, you are at-fault in a collision. Collision coverage pays for repairs when you hit another car or object. It may also cover damage if another driver hits your vehicle, and their insurance doesn't cover the repairs. You will have to pay a deductible before the insurer begins to pay for damages. If another driver hits you without collision coverage, the liability portion of your insurance kicks in, and liability insurance will cover the other driver if you are at fault. The definition of at-fault varies based on location. When the cost of repairs exceeds the car's value, it is time to forgo collision coverage as unnecessary.", title: "Collision Coverage" })] }));
918
+ };
919
+
920
+ const TabVehicle = ({ createItem, readOnly }) => {
921
+ const { vehicleState, dispatchVehicleState } = useStoreFormCarVehicle();
922
+ const { dispatchDiscountState } = useStoreFormCarDiscount();
923
+ const { dispatchAppModalState } = useStoreAppModal();
924
+ const { appDeviceType } = useStoreDeviceType();
925
+ const [isOpen, setIsOpen] = useState(false);
926
+ const selectVehicle = (vehicleIndex) => {
927
+ dispatchVehicleState({
928
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleSelect,
929
+ payload: {
930
+ vehicleIndex,
931
+ },
932
+ });
933
+ setIsOpen(false);
934
+ };
935
+ const deleteVehicle = (itemIndex) => {
936
+ dispatchAppModalState({
937
+ type: StoreConfigAppModalActionTypes.AppModalConfirmModal,
938
+ payload: {
939
+ title: `Are you sure you want to delete ${vehicleState.tabs[itemIndex]?.name} ?`,
940
+ submitButtonText: 'YES',
941
+ cancelButtonText: 'NO',
942
+ submitCallBack: () => {
943
+ dispatchVehicleState({
944
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleDeleteVehicle,
945
+ payload: {
946
+ vehicleIndex: itemIndex,
947
+ },
948
+ });
949
+ dispatchDiscountState({
950
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountVehlinkByVehicleDelete,
951
+ payload: {
952
+ vehicleIndex: itemIndex,
953
+ },
954
+ });
955
+ dispatchAppModalState({
956
+ type: StoreConfigAppModalActionTypes.AppModalClose,
957
+ });
958
+ },
959
+ },
960
+ });
961
+ };
962
+ const handleOpenListClick = () => {
963
+ setIsOpen(!isOpen);
964
+ };
965
+ return (jsx(Fragment, { children: appDeviceType === DeviceTypes.Mobile
966
+ ? (jsx(NavigationTabMobile, { name: "vehicle-tab-navigation-mobile", addButtonLabel: "Add a Vehicle", items: vehicleState.tabs, activeItemIndex: vehicleState.activeIndex, selectItem: selectVehicle, createItem: createItem, removeItem: deleteVehicle, isOpen: isOpen, openListClick: handleOpenListClick })) : (jsx(NavigationTab, { name: "vehicle-tab-navigation", addButtonLabel: "Add a Vehicle", items: vehicleState.tabs, activeItemIndex: vehicleState.activeIndex, selectItem: selectVehicle, createItem: createItem, removeItem: deleteVehicle, readOnly: readOnly })) }));
967
+ };
968
+
969
+ var myChoicePartnerLogo = "data:image/png;base64,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";
970
+
971
+ const PageVehicle = () => {
972
+ const { appConfigState: { appType, localIndex } } = useStoreAppConfig();
973
+ const { vehicleState: { activeIndex, items }, dispatchVehicleState, } = useStoreFormCarVehicle();
974
+ const [isRender, setIsRender] = useState(false);
975
+ const { dispatchDiscountState } = useStoreFormCarDiscount();
976
+ const { vehicleFormIsValid, vehicleFormValidate } = useValidationVehicle();
977
+ useEffectOnce(() => {
978
+ window.scrollTo({
979
+ top: 0,
980
+ behavior: 'smooth',
981
+ });
982
+ });
983
+ useEffect(() => {
984
+ setIsRender(false);
985
+ }, [activeIndex]);
986
+ useEffect(() => {
987
+ setIsRender(true);
988
+ }, [isRender]);
989
+ const validateForm = () => vehicleFormValidate(false);
990
+ const createVehicle = () => {
991
+ dispatchVehicleState({
992
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleCreateVehicle,
993
+ });
994
+ dispatchDiscountState({
995
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountVehlinkAdd,
996
+ });
997
+ window.scrollTo({
998
+ top: 0,
999
+ behavior: 'smooth',
1000
+ });
1001
+ };
1002
+ return (jsxs("div", { className: "form-container", children: [jsx(TabVehicle, { createItem: createVehicle }), jsxs("div", { className: "form-section-container", children: [isRender && (jsxs(Fragment, { children: [jsx(VehicleSectionMain, {}), jsx(VehicleSectionCoverage, {})] })), appType === AppTypes.TheBig
1003
+ ? (jsx(NavigationBottomTheBig, { createItem: createVehicle, formSteps: formSteps[InsuranceTypes.Car], itemCount: items.length, validateForm: validateForm, formIsValid: vehicleFormIsValid }))
1004
+ : (jsx(NavigationBottom, { createItem: createVehicle, formSteps: formSteps[InsuranceTypes.Car], itemCount: items.length, validateForm: validateForm, formIsValid: vehicleFormIsValid }))] }), localIndex !== defaultLocalIndex
1005
+ && jsx("img", { className: "logo-for-partner", src: myChoicePartnerLogo, alt: "partner logo" })] }));
1006
+ };
1007
+
1008
+ const TabDriver = ({ createItem, readOnly }) => {
1009
+ const { driverState, dispatchDriverBaseState } = useStoreFormCarDriverBase();
1010
+ const { dispatchDiscountState } = useStoreFormCarDiscount();
1011
+ const { dispatchAppModalState } = useStoreAppModal();
1012
+ const { appDeviceType } = useStoreDeviceType();
1013
+ const [isOpen, setIsOpen] = useState(false);
1014
+ const selectDriver = (driverIndex) => {
1015
+ dispatchDriverBaseState({
1016
+ type: StoreFormCarDriverBaseActionTypes.FormCarDriverSelect,
1017
+ payload: {
1018
+ driverIndex,
1019
+ },
1020
+ });
1021
+ setIsOpen(false);
1022
+ };
1023
+ const deleteDriver = (itemIndex) => {
1024
+ dispatchAppModalState({
1025
+ type: StoreConfigAppModalActionTypes.AppModalConfirmModal,
1026
+ payload: {
1027
+ title: `Are you sure you want to delete ${driverState.tabs[itemIndex]?.name} ?`,
1028
+ submitButtonText: 'YES',
1029
+ cancelButtonText: 'NO',
1030
+ submitCallBack: () => {
1031
+ dispatchDriverBaseState({
1032
+ type: StoreFormCarDriverBaseActionTypes.FormCarDriverDelete,
1033
+ payload: {
1034
+ driverIndex: itemIndex,
1035
+ },
1036
+ });
1037
+ dispatchDiscountState({
1038
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountVehlinkByDriverDelete,
1039
+ payload: {
1040
+ driverIndex: itemIndex,
1041
+ },
1042
+ });
1043
+ dispatchAppModalState({
1044
+ type: StoreConfigAppModalActionTypes.AppModalClose,
1045
+ });
1046
+ },
1047
+ },
1048
+ });
1049
+ };
1050
+ const handleOpenListClick = () => {
1051
+ setIsOpen(!isOpen);
1052
+ };
1053
+ return (jsx(Fragment, { children: appDeviceType === DeviceTypes.Mobile ? (jsx(NavigationTabMobile, { name: "vehicle-tab-navigation-mobile", addButtonLabel: "Add a Driver", items: driverState.tabs, activeItemIndex: driverState.activeIndex, selectItem: selectDriver, createItem: createItem, removeItem: deleteDriver, isOpen: isOpen, openListClick: handleOpenListClick })) : (jsx(NavigationTab, { name: "vehicle-tab-navigation", addButtonLabel: "Add a Driver", items: driverState.tabs, activeItemIndex: driverState.activeIndex, selectItem: selectDriver, createItem: createItem, removeItem: deleteDriver, readOnly: readOnly })) }));
1054
+ };
1055
+
1056
+ const SectionDriverInfo = () => {
1057
+ const { configState } = useStoreFormCarConfig();
1058
+ const { driverState, dispatchDriverInfoState } = useStoreFormCarDriverInfo();
1059
+ const { discountState, dispatchDiscountState } = useStoreFormCarDiscount();
1060
+ const { firstName, maritalStatus, birthDay, birthMonth, birthYear, occupation, gender, applicantRelationship, } = driverState.items[driverState.activeIndex];
1061
+ const defaultDateOfBirth = {
1062
+ day: birthDay,
1063
+ month: birthMonth,
1064
+ year: birthYear,
1065
+ };
1066
+ useEffect(() => {
1067
+ if (discountState.quoterInfo.firstName !== driverState.items[0].firstName) {
1068
+ dispatchDiscountState({
1069
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountQuoterFirstNameSet,
1070
+ payload: { firstName: driverState.items[0].firstName },
1071
+ });
1072
+ }
1073
+ }, [driverState.items[0].firstName]);
1074
+ const handleFirstNameChange = ({ value }) => {
1075
+ dispatchDriverInfoState({
1076
+ type: StoreFormCarDriverInfoActionTypes.FormCarDriverNameSet,
1077
+ payload: { firstName: value },
1078
+ });
1079
+ };
1080
+ const handleMaritalStatusChange = ({ value }) => {
1081
+ dispatchDriverInfoState({
1082
+ type: StoreFormCarDriverInfoActionTypes.FormCarDriverMaritalStatusSelect,
1083
+ payload: { maritalStatus: value },
1084
+ });
1085
+ };
1086
+ const handleDateOfBirthChange = (dateType) => ({ value }) => {
1087
+ if (dateType === DateTypes.Day) {
1088
+ dispatchDriverInfoState({
1089
+ type: StoreFormCarDriverInfoActionTypes.FormCarDriverBirthDaySelect,
1090
+ payload: { birthDay: value, config: configState },
1091
+ });
1092
+ }
1093
+ if (dateType === DateTypes.Month) {
1094
+ dispatchDriverInfoState({
1095
+ type: StoreFormCarDriverInfoActionTypes.FormCarDriverBirthMonthSelect,
1096
+ payload: { birthMonth: value, config: configState },
1097
+ });
1098
+ }
1099
+ if (dateType === DateTypes.Year) {
1100
+ dispatchDriverInfoState({
1101
+ type: StoreFormCarDriverInfoActionTypes.FormCarDriverBirthYearSelect,
1102
+ payload: { birthYear: value, config: configState },
1103
+ });
1104
+ }
1105
+ };
1106
+ const handleOccupationChange = ({ value }) => {
1107
+ dispatchDriverInfoState({
1108
+ type: StoreFormCarDriverInfoActionTypes.FormCarDriverOccupationSelect,
1109
+ payload: { occupation: value },
1110
+ });
1111
+ };
1112
+ const handleGenderChange = ({ value }) => {
1113
+ dispatchDriverInfoState({
1114
+ type: StoreFormCarDriverInfoActionTypes.FormCarDriverGenderSelect,
1115
+ payload: { gender: value },
1116
+ });
1117
+ };
1118
+ const handleApplicantRelationshipChange = ({ value }) => {
1119
+ dispatchDriverInfoState({
1120
+ type: StoreFormCarDriverInfoActionTypes.FormCarDriverApplicantRelationshipSelect,
1121
+ payload: { applicantRelationship: value },
1122
+ });
1123
+ };
1124
+ return (jsxs("div", { className: "form-section", children: [jsx(InputFormBox, { name: "firstName", title: "What is your legal first name?", onChange: handleFirstNameChange, defaultValue: firstName, description: "The name on a policy should match the one on your official driver\u2019s licence.", placeholder: "Driver First Name", error: !firstName && driverState.inValidation, errorMessage: getErrorMessage(firstName, driverState.inValidation) }), jsx(SelectFormBox, { options: maritalStatusOptions, name: "maritalStatus", onChange: handleMaritalStatusChange, defaultValue: getSelectedOption(maritalStatusOptions, maritalStatus), title: "What is your marital status?", placeholder: "Select from the list", description: "If you are married, it may have a positive effect on your car insurance premiums and coverage. In some provinces, the law now considers same-sex partners to have a common-law marriage, so you will need to check your local regulations. If you are divorced or widowed, select single.", autoSelectIfValueIsOutOfOptions: false, error: !maritalStatus && driverState.inValidation, errorMessage: getErrorMessage(maritalStatus, driverState.inValidation) }), jsx(DateSelectFormBox, { name: "dateOfBirth", dateNames: ['birthYear', 'birthMonth', 'birthDay'], onDateChange: handleDateOfBirthChange, defaultValue: defaultDateOfBirth, title: "When were you born?", description: "Insurers generally consider your age and driving experience when calculating a vehicle insurance quote. The safest drivers are often those who are over thirty, but each insurer will have their own parameters. The youngest and oldest drivers have the greatest liability reflected in their premiums due to inexperience or health complications, respectively.", errorMessage: getDateErrorMessage([birthDay || '', birthMonth || '', birthYear || ''], driverState.inValidation), error: driverState.inValidation, maxDate: subYearsFromDate('', configState.licenceConfig.minLicenceAge || 16), isDay: true }), jsx(SwitchButtonBox, { name: "occupation", items: occupationOptions, onChange: handleOccupationChange, defaultValue: getSelectedOption(occupationOptions, occupation), title: "Are you currently employed or unemployed?", description: "Your employment status reflects your driving frequency, and insurers consider this in your policy." }), jsx(SwitchButtonBox, { items: genderOptions, onChange: handleGenderChange, name: "gender", defaultValue: getSelectedOption(genderOptions, gender), title: "What is your gender?", description: "The gender on the policy should match your official driver\u2019s licence. Some insurers analyze a driver's sex when creating a policy. Men are typically considered higher risk than female drivers, but the statistics supporting this idea vary from province to province. On average, men and women pay roughly the same for insurance, though." }), driverState.activeIndex > 0
1125
+ && (jsx(SelectFormBox, { options: applicantRelationshipOptions, name: "applicantRelationship", onChange: handleApplicantRelationshipChange, defaultValue: getSelectedOption(applicantRelationshipOptions, applicantRelationship), title: "Relationship to applicant", placeholder: "Select...", autoSelectIfValueIsOutOfOptions: false, error: !applicantRelationship && driverState.inValidation, errorMessage: getErrorMessage(applicantRelationship, driverState.inValidation) }))] }));
1126
+ };
1127
+
1128
+ const getLicenceTypeOptions = (options, optionValues, disabled) => (options.map((option) => {
1129
+ const newOption = option;
1130
+ if (optionValues.includes(option.value)) {
1131
+ newOption.disabled = disabled;
1132
+ }
1133
+ return newOption;
1134
+ }));
1135
+ const checkDateIsSpecial = (defaultMinDate, specialDate) => compareDates(specialDate, defaultMinDate) >= 0;
1136
+ const getLicenceMinDate = (licenceType, defaultMinDate, config) => {
1137
+ if (defaultMinDate) {
1138
+ if (licenceType === DriverLicenceTypes.G1) {
1139
+ return addMonthsToDate(defaultMinDate, config.minDates.g1.minMonth);
1140
+ }
1141
+ if (licenceType === DriverLicenceTypes.G) {
1142
+ if (checkDateIsSpecial(defaultMinDate, config.minDates.g.specialDate)) {
1143
+ return defaultMinDate;
1144
+ }
1145
+ return addMonthsToDate(defaultMinDate, config.minDates.g.minMonth);
1146
+ }
1147
+ if (licenceType === DriverLicenceTypes.G2) {
1148
+ return addMonthsToDate(defaultMinDate, config.minDates.g2.minMonth);
1149
+ }
1150
+ }
1151
+ return '';
1152
+ };
1153
+ const getLicenceMaxDate = (licenceType, minDate, config) => {
1154
+ let maxDate = '';
1155
+ const { minDates: { g: { specialDate } } } = config;
1156
+ if (licenceType === DriverLicenceTypes.G
1157
+ && compareDates(specialDate, minDate) >= 0) {
1158
+ maxDate = config.minDates.g.specialDate;
1159
+ }
1160
+ return getFormattedDate(maxDate, 'yyyy-MM-dd');
1161
+ };
1162
+ const getDisabledLicenceTypes = (gBlock, g2Block, g1Block) => {
1163
+ const disabledLicenceTypes = [];
1164
+ if (gBlock) {
1165
+ disabledLicenceTypes.push(DriverLicenceTypes.G);
1166
+ }
1167
+ if (g1Block) {
1168
+ disabledLicenceTypes.push(DriverLicenceTypes.G1);
1169
+ }
1170
+ if (g2Block) {
1171
+ disabledLicenceTypes.push(DriverLicenceTypes.G2);
1172
+ }
1173
+ return disabledLicenceTypes;
1174
+ };
1175
+
1176
+ const SectionDriverLicence = () => {
1177
+ const [driverEducation, setDriverEducation] = useState(false);
1178
+ const { configState } = useStoreFormCarConfig();
1179
+ const { driverState, dispatchDriverLicenceState } = useStoreFormCarDriverLicence();
1180
+ const { firstName, birthDay, birthMonth, birthYear, licenceInfo: { firstLicenceAge, licenceType, g1LicenceYear, g1LicenceMonth, gLicenceYear, gLicenceMonth, g2LicenceYear, g2LicenceMonth, passedDriverTraining, previousLicence, }, minMaxDates, } = driverState.items[driverState.activeIndex];
1181
+ const { gMax = getFormattedDate('', 'yyyy-MM-dd'), gMin = '1922-01-01', gOneMax = getFormattedDate('', 'yyyy-MM-dd'), gOneMin = '1922-01-01', gTwoMax = getFormattedDate('', 'yyyy-MM-dd'), gTwoMin = '1922-01-01', gBlock = false, gTwoBlock = false, gOneBlock = false, licenceAgeMax = 16, } = minMaxDates ?? {};
1182
+ const maxLicenceAge = licenceAgeMax;
1183
+ const driverNameDefault = `Driver ${driverState.activeIndex + 1}`;
1184
+ const birthDate = birthYear && birthMonth && birthDay ? `${birthYear}-${birthMonth}-${birthDay}` : '';
1185
+ const defaultMinDate = birthDate && firstLicenceAge ? addYearsToDate(birthDate, +firstLicenceAge) : '';
1186
+ const isOnlyG = checkDateIsSpecial(defaultMinDate, configState.minDates.g.specialDate);
1187
+ const { g, g1, g2, minLicenceAge, } = configState.licenceConfig;
1188
+ const licenceTypeOptions = [
1189
+ { value: g.name, name: g.title },
1190
+ { value: g1.name, name: g1.title },
1191
+ { value: g2.name, name: g2.title },
1192
+ ];
1193
+ useEffect(() => {
1194
+ if (!gOneBlock && !gTwoBlock) {
1195
+ if (licenceType !== DriverLicenceTypes.G1) {
1196
+ const g2Date = addDayToDate(`${g2LicenceYear}-${g2LicenceMonth}`, birthDay ? +birthDay + 1 : 1);
1197
+ if (getDifferenceInYears('', g2Date) <= 3) {
1198
+ setDriverEducation(true);
1199
+ }
1200
+ else {
1201
+ setDriverEducation(false);
1202
+ }
1203
+ }
1204
+ else {
1205
+ setDriverEducation(false);
1206
+ }
1207
+ }
1208
+ }, [g2LicenceYear, g2LicenceMonth, licenceType]);
1209
+ const getMinDate = (type) => {
1210
+ switch (type) {
1211
+ case DriverLicenceTypes.G:
1212
+ return gMin;
1213
+ case DriverLicenceTypes.G1:
1214
+ return gOneMin;
1215
+ case DriverLicenceTypes.G2:
1216
+ return gTwoMin;
1217
+ default: return '';
1218
+ }
1219
+ };
1220
+ const getMaxDate = (type) => {
1221
+ switch (type) {
1222
+ case DriverLicenceTypes.G:
1223
+ return gMax;
1224
+ case DriverLicenceTypes.G1:
1225
+ return gOneMax;
1226
+ case DriverLicenceTypes.G2:
1227
+ return gTwoMax;
1228
+ default: return '';
1229
+ }
1230
+ };
1231
+ const getLicenceYear = (type) => {
1232
+ switch (type) {
1233
+ case DriverLicenceTypes.G:
1234
+ return gLicenceYear;
1235
+ case DriverLicenceTypes.G1:
1236
+ return g1LicenceYear;
1237
+ case DriverLicenceTypes.G2:
1238
+ return g2LicenceYear;
1239
+ default: return '';
1240
+ }
1241
+ };
1242
+ const getLicenceMonth = (type) => {
1243
+ switch (type) {
1244
+ case DriverLicenceTypes.G:
1245
+ return gLicenceMonth;
1246
+ case DriverLicenceTypes.G1:
1247
+ return g1LicenceMonth;
1248
+ case DriverLicenceTypes.G2:
1249
+ return g2LicenceMonth;
1250
+ default: return '';
1251
+ }
1252
+ };
1253
+ const getDefaultLicenceDate = (type) => ({
1254
+ year: getLicenceYear(type),
1255
+ month: getLicenceMonth(type),
1256
+ day: birthDay || '01',
1257
+ });
1258
+ const handleLicenceAgeChange = ({ value }) => {
1259
+ dispatchDriverLicenceState({
1260
+ type: StoreFormCarDriverLicenceActionTypes.FormCarDriverLicenceAgeSelect,
1261
+ payload: { firstLicenceAge: value, config: configState },
1262
+ });
1263
+ };
1264
+ const handleLicenceTypeChange = ({ value }) => {
1265
+ dispatchDriverLicenceState({
1266
+ type: StoreFormCarDriverLicenceActionTypes.FormCarDriverLicenceTypeSelect,
1267
+ payload: { licenceType: value, config: configState },
1268
+ });
1269
+ };
1270
+ const handleTrainingChange = ({ value }) => {
1271
+ dispatchDriverLicenceState({
1272
+ type: StoreFormCarDriverLicenceActionTypes.FormCarDriverTrainingSelect,
1273
+ payload: { training: value },
1274
+ });
1275
+ };
1276
+ const handlePreviousLicenceChange = ({ value }) => {
1277
+ dispatchDriverLicenceState({
1278
+ type: StoreFormCarDriverLicenceActionTypes.FormCarDriverPreviousLicenceSelect,
1279
+ payload: { previousLicence: value },
1280
+ });
1281
+ };
1282
+ const handleLicenceDateChange = (type) => (dateType) => ({ value }) => {
1283
+ if (dateType === DateTypes.Month) {
1284
+ dispatchDriverLicenceState({
1285
+ type: StoreFormCarDriverLicenceActionTypes.FormCarDriverLicenceMonthSelect,
1286
+ payload: { value: value, config: configState, type },
1287
+ });
1288
+ }
1289
+ if (dateType === DateTypes.Year) {
1290
+ dispatchDriverLicenceState({
1291
+ type: StoreFormCarDriverLicenceActionTypes.FormCarDriverLicenceYearSelect,
1292
+ payload: { value: value, config: configState, type },
1293
+ });
1294
+ }
1295
+ };
1296
+ const getHintMessage = (type) => {
1297
+ const currentType = type || licenceType;
1298
+ const licenceMinDate = getMinDate(currentType);
1299
+ const licenceTypeTitle = configState.licenceConfig[currentType].title;
1300
+ const formattedMinDate = `${getFormattedDate(licenceMinDate, 'MMMM yyyy')}`;
1301
+ const defaultHintMessage = `${formattedMinDate} would be your earliest ${licenceTypeTitle}
1302
+ licence date based on your first licenced age and date of birth`;
1303
+ return currentType === DriverLicenceTypes.G2 ? `${defaultHintMessage}
1304
+ if you completed a driver education course` : defaultHintMessage;
1305
+ };
1306
+ return (jsxs("div", { className: "form-section", children: [jsx(InputFormBox, { name: "firstLicenceAge", title: `What age was ${firstName || driverNameDefault} when first licenced?`, onChange: handleLicenceAgeChange, type: InputTypes.Number, defaultValue: firstLicenceAge, description: configState.toolTip.licenceAge, hintMessage: birthDate ? `${firstName || driverNameDefault} was licenced in
1307
+ ${Number(birthYear) + Number(firstLicenceAge)} - ${Number(birthYear) + Number(firstLicenceAge) + 1}` : '', placeholder: "Select Licence Age", disabled: !birthDate, error: !firstLicenceAge && driverState.inValidation, errorMessage: getErrorMessage(firstLicenceAge, driverState.inValidation), minValue: minLicenceAge || 16, maxValue: maxLicenceAge }), jsx(SelectFormBox, { options: getLicenceTypeOptions(licenceTypeOptions, getDisabledLicenceTypes(gBlock, gTwoBlock, gOneBlock), true), name: "licenceType", onChange: handleLicenceTypeChange, defaultValue: getSelectedOption(licenceTypeOptions, licenceType), title: `Please choose the type of licence that ${firstName || driverNameDefault} currently holds`, placeholder: "Select from the list", disabled: !birthDate, description: configState.toolTip.licenceType, autoSelectIfValueIsOutOfOptions: false }), licenceType === DriverLicenceTypes.G && !isOnlyG
1308
+ && (jsx(DateSelectFormBox, { name: "g2LicenceDate", dateNames: ['g2LicenceYear', 'g2LicenceMonth'], onDateChange: handleLicenceDateChange(DriverLicenceTypes.G2), defaultValue: getDefaultLicenceDate(DriverLicenceTypes.G2), title: `${configState.licenceConfig.g2.title} licence date`, errorMessage: getDateErrorMessage(['01', g2LicenceMonth, g2LicenceYear], driverState.inValidation), hintMessage: getHintMessage(DriverLicenceTypes.G2), error: driverState.inValidation, minDate: getMinDate(DriverLicenceTypes.G2), maxDate: getMaxDate(DriverLicenceTypes.G2) })), licenceType && (jsx(DateSelectFormBox, { name: `${licenceType}LicenceDate`, dateNames: [`${licenceType}LicenceYear`, `${licenceType}LicenceMonth`], onDateChange: handleLicenceDateChange(), defaultValue: getDefaultLicenceDate(licenceType), title: `${configState.licenceConfig[licenceType].title} licence date`, errorMessage: getDateErrorMessage(['01', getLicenceMonth(licenceType), getLicenceYear(licenceType)], driverState.inValidation), hintMessage: getHintMessage(), error: driverState.inValidation, maxDate: getMaxDate(licenceType), minDate: getMinDate(licenceType) })), driverEducation
1309
+ && (jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleTrainingChange, name: "passedDriverTraining", defaultValue: getSelectedOption(yesNoOptions, passedDriverTraining), title: `Has ${firstName || driverNameDefault} completed a driver education course within the last 3 years?` })), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handlePreviousLicenceChange, name: "previousLicence", defaultValue: getSelectedOption(yesNoOptions, previousLicence), title: `Has ${firstName || driverNameDefault} ever had a full license anywhere else in Canada or USA?`, description: "If you have driving experience outside Canada or the United States, it may lower your premium. Your insurer may require proof of insurance in these other locations or some proof of driving experience from the country you indicate (like a copy of a previous driver\u2019s licence)." })] }));
1310
+ };
1311
+
1312
+ const SectionDriverInsurancePolicy = () => {
1313
+ const [hintMessage, setHintMessage] = useState('');
1314
+ const { configState } = useStoreFormCarConfig();
1315
+ const { driverState, dispatchDriverInsuranceState } = useStoreFormCarDriverInsurance();
1316
+ const { discountState, dispatchDiscountState } = useStoreFormCarDiscount();
1317
+ const { quoteState: { isRequested } } = useStoreFormCarQuote();
1318
+ const { listed, listedMonth = '', listedYear = '', insured, insuredDate = '', firstName, birthYear, birthMonth, birthDay, licenceInfo: { firstLicenceAge, licenceType, gLicenceYear, gLicenceMonth, g1LicenceYear, g1LicenceMonth, }, } = driverState.items[driverState.activeIndex];
1319
+ const { policyStartYear, policyStartMonth, policyStartDay } = discountState;
1320
+ const driverNameDefault = `Driver ${driverState.activeIndex + 1}`;
1321
+ const birthDate = birthYear && birthMonth && birthDay ? `${birthYear}-${birthMonth}-${birthDay}` : '';
1322
+ const getPeriodOptions = (year, month) => {
1323
+ const options = [{ value: '', name: 'Date Period', disabled: true }];
1324
+ if (year && month) {
1325
+ const listedDate = addDaysToDate(`${year}-${month}-01`, birthDay ? +birthDay + 1 : 1);
1326
+ const yearPeriod = getDifferenceInYears('', listedDate) || 0;
1327
+ for (let y = yearPeriod; y >= 0; y -= 1) {
1328
+ switch (true) {
1329
+ case y === 0:
1330
+ options.push({
1331
+ value: subMonthsFromDate('', 10),
1332
+ name: 'Less than 1 Year',
1333
+ });
1334
+ break;
1335
+ case y === 1:
1336
+ options.push({ value: addYearsToDate(listedDate, y), name: '1 Year' });
1337
+ break;
1338
+ default:
1339
+ options.push({
1340
+ value: addYearsToDate(listedDate, y),
1341
+ name: `${y} Years`,
1342
+ });
1343
+ }
1344
+ }
1345
+ }
1346
+ return options;
1347
+ };
1348
+ const defaultListedDate = {
1349
+ year: listedYear,
1350
+ month: listedMonth,
1351
+ day: '01',
1352
+ };
1353
+ const defaultPolicyStartDate = {
1354
+ year: policyStartYear,
1355
+ month: policyStartMonth,
1356
+ day: policyStartDay,
1357
+ };
1358
+ useEffect(() => {
1359
+ if (listedYear && listedMonth && !isRequested) {
1360
+ const options = getPeriodOptions(listedYear, listedMonth);
1361
+ if (options.length > 1) {
1362
+ dispatchDriverInsuranceState({
1363
+ type: StoreFormCarDriverInsuranceActionTypes.FormCarDriverInsuredDateSelect,
1364
+ payload: { insuredDate: options[1].value },
1365
+ });
1366
+ }
1367
+ }
1368
+ }, [listedYear, listedMonth]);
1369
+ useEffect(() => {
1370
+ if (listedYear && listedMonth && listed) {
1371
+ const listedDate = addDaysToDate(`${listedYear}-${listedMonth}-01`, birthDay ? +birthDay + 1 : 1);
1372
+ const setMessage = (licenceYear, licenceMonth) => {
1373
+ const licenceDate = addDaysToDate(`${licenceYear}-${licenceMonth}-01`, birthDay ? +birthDay + 1 : 1);
1374
+ const yearsPeriod = getDifferenceInYears(listedDate, licenceDate);
1375
+ if (yearsPeriod >= 5) {
1376
+ setHintMessage(`We noticed that you received your licence ${yearsPeriod} years before
1377
+ you had insurance. If this is correct, please continue with the form.`);
1378
+ }
1379
+ else {
1380
+ setHintMessage('');
1381
+ }
1382
+ };
1383
+ if (birthDate) {
1384
+ const defaultMinDate = birthDate && firstLicenceAge ? addYearsToDate(birthDate, +firstLicenceAge) : '';
1385
+ const isOnlyG = checkDateIsSpecial(defaultMinDate, configState.minDates.g.specialDate);
1386
+ if (isOnlyG) {
1387
+ setMessage(gLicenceYear, gLicenceMonth);
1388
+ }
1389
+ else if (licenceType === DriverLicenceTypes.G1) {
1390
+ setMessage(g1LicenceYear, g1LicenceMonth);
1391
+ }
1392
+ else {
1393
+ const licenceDate = addYearsToDate(birthDate, firstLicenceAge);
1394
+ const licenceYear = getFormattedDate(licenceDate, 'yyyy');
1395
+ const licenceMonth = getFormattedDate(licenceDate, 'MM');
1396
+ setMessage(licenceYear, licenceMonth);
1397
+ }
1398
+ }
1399
+ }
1400
+ else {
1401
+ setHintMessage('');
1402
+ }
1403
+ }, [listedYear, listedMonth, g1LicenceYear, g1LicenceMonth, firstLicenceAge, birthDate, gLicenceYear, gLicenceMonth]);
1404
+ const handleInsuredChange = ({ value }) => {
1405
+ dispatchDriverInsuranceState({
1406
+ type: StoreFormCarDriverInsuranceActionTypes.FormCarDriverInsuredSelect,
1407
+ payload: { insured: !value },
1408
+ });
1409
+ };
1410
+ const handleListedChange = ({ value }) => {
1411
+ dispatchDriverInsuranceState({
1412
+ type: StoreFormCarDriverInsuranceActionTypes.FormCarDriverListedSelect,
1413
+ payload: { listed: !value },
1414
+ });
1415
+ };
1416
+ const handleInsuredPeriodChange = ({ value }) => {
1417
+ dispatchDriverInsuranceState({
1418
+ type: StoreFormCarDriverInsuranceActionTypes.FormCarDriverInsuredDateSelect,
1419
+ payload: { insuredDate: value },
1420
+ });
1421
+ };
1422
+ const handleListedDateChange = (dateType) => ({ value }) => {
1423
+ if (dateType === DateTypes.Month) {
1424
+ dispatchDriverInsuranceState({
1425
+ type: StoreFormCarDriverInsuranceActionTypes.FormCarDriverListedMonthSelect,
1426
+ payload: { listedMonth: value },
1427
+ });
1428
+ }
1429
+ if (dateType === DateTypes.Year) {
1430
+ dispatchDriverInsuranceState({
1431
+ type: StoreFormCarDriverInsuranceActionTypes.FormCarDriverListedYearSelect,
1432
+ payload: { listedYear: value },
1433
+ });
1434
+ }
1435
+ };
1436
+ const handlePolicyStartDateChange = (dateType) => ({ value }) => {
1437
+ if (dateType === DateTypes.Day) {
1438
+ dispatchDiscountState({
1439
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountPolicyStartDaySelect,
1440
+ payload: { policyStartDay: value },
1441
+ });
1442
+ }
1443
+ if (dateType === DateTypes.Month) {
1444
+ dispatchDiscountState({
1445
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountPolicyStartMonthSelect,
1446
+ payload: { policyStartMonth: value },
1447
+ });
1448
+ }
1449
+ if (dateType === DateTypes.Year) {
1450
+ dispatchDiscountState({
1451
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountPolicyStartYearSelect,
1452
+ payload: { policyStartYear: value },
1453
+ });
1454
+ }
1455
+ };
1456
+ return (jsxs("div", { className: "form-section", children: [jsxs("div", { className: "box-container", children: [jsx(DateSelectFormBox, { name: "listedYear", dateNames: ['listedYear', 'listedMonth'], onDateChange: handleListedDateChange, defaultValue: defaultListedDate, disabled: !listed, title: `When was ${firstName || driverNameDefault} first listed as a driver on a Canadian or US insurance policy?`, description: "The selection indicates what year the main driver was first listed on a Canadian or US insurance policy. If you do not remember your age, it is acceptable to provide a best estimate for the purposes of the policy or quote.", errorMessage: listed ? getDateErrorMessage(['01', listedMonth, listedYear], driverState.inValidation) : '', error: driverState.inValidation, hintMessage: hintMessage, minDate: getMinDate(birthDate, firstLicenceAge) }), jsx(CheckboxForm, { name: "listed", label: "Never listed on an insurance policy", onChange: handleListedChange, defaultValue: !listed })] }), listed
1457
+ && (jsxs("div", { className: "box-container", children: [jsx(SelectFormBox, { name: "insuredDate", onChange: handleInsuredPeriodChange, options: getPeriodOptions(listedYear, listedMonth), defaultValue: insuredDate, disabled: !insured, title: `How long has ${firstName || driverNameDefault} been with their current insurance provider?`, description: "It is common for insurers to provide loyalty rewards or discounts for valued customers. Loyalty is a positive trait in the industry, and most insurance companies will want to provide some incentive for continued customer relationships through tangible policy rewards.", errorMessage: insured ? getErrorMessage(insuredDate, driverState.inValidation) : '', error: !insuredDate && driverState.inValidation }), jsx(CheckboxForm, { name: "insured", label: "Not currently insured", onChange: handleInsuredChange, defaultValue: !insured })] })), jsx(DateSelectFormBox, { name: "policyStart", dateNames: ['policyStartYear', 'policyStartMonth', 'policyStartDay'], onDateChange: handlePolicyStartDateChange, defaultValue: defaultPolicyStartDate, title: "What is the ideal start date for your new insurance policy?", description: "Select your preferred date for the beginning of your new insurance policy.For instance, you may set the start date for the day that your current insurance expires to ensure that you\u2019re continuously covered. Alternatively, select today's date for a quote or new policy.", errorMessage: getDateErrorMessage([
1458
+ policyStartDay || '',
1459
+ policyStartMonth || '',
1460
+ policyStartYear || '',
1461
+ ], driverState.inValidation), error: driverState.inValidation, minDate: addDaysToDate('', 1), maxDate: addDaysToDate('', 60), isDay: true })] }));
1462
+ };
1463
+
1464
+ const SectionDriverCancellation = () => {
1465
+ const { driverState, dispatchDriverCancellationState } = useStoreFormCarDriverCancellation();
1466
+ const { dispatchDriverBaseState } = useStoreFormCarDriverBase();
1467
+ const { insuranceCancellation, insuranceCancellationList = [] } = driverState.items[driverState.activeIndex];
1468
+ const { appConfigState: { appType } } = useStoreAppConfig();
1469
+ const isTheBig = appType === AppTypes.TheBig;
1470
+ const { firstName, birthYear, birthMonth, birthDay, licenceInfo: { firstLicenceAge }, } = driverState.items[driverState.activeIndex];
1471
+ const birthDate = birthYear && birthMonth && birthDay ? `${birthYear}-${birthMonth}-${birthDay}` : '';
1472
+ const handleIconClick = (index) => () => {
1473
+ dispatchDriverCancellationState({
1474
+ type: StoreFormCarDriverCancellationActionTypes.FormCarDriverInsuranceCancellationDelete,
1475
+ payload: { itemIndex: index },
1476
+ });
1477
+ };
1478
+ const handleCancellationChange = ({ value }) => {
1479
+ dispatchDriverCancellationState({
1480
+ type: StoreFormCarDriverCancellationActionTypes.FormCarDriverInsuranceCancellationSelect,
1481
+ payload: { insuranceCancellation: value },
1482
+ });
1483
+ if (!value) {
1484
+ dispatchDriverBaseState({
1485
+ type: StoreFormCarDriverBaseActionTypes.FormCarDriverInitialList,
1486
+ payload: { listKey: DriverListTypes.InsuranceCancellation },
1487
+ });
1488
+ }
1489
+ };
1490
+ const handleAddButtonClick = () => {
1491
+ dispatchDriverCancellationState({
1492
+ type: StoreFormCarDriverCancellationActionTypes.FormCarDriverInsuranceCancellationAdd,
1493
+ });
1494
+ };
1495
+ const handleReasonChange = (index) => ({ value }) => {
1496
+ dispatchDriverCancellationState({
1497
+ type: StoreFormCarDriverCancellationActionTypes.FormCarDriverInsuranceCancelReasonSelect,
1498
+ payload: {
1499
+ reason: value,
1500
+ index,
1501
+ },
1502
+ });
1503
+ };
1504
+ const handleStartDateChange = (index) => (dateType) => ({ value }) => {
1505
+ if (dateType === DateTypes.Month) {
1506
+ dispatchDriverCancellationState({
1507
+ type: StoreFormCarDriverCancellationActionTypes.FormCarDriverInsuranceCancelStartMonthSelect,
1508
+ payload: {
1509
+ startMonth: value,
1510
+ index,
1511
+ },
1512
+ });
1513
+ }
1514
+ if (dateType === DateTypes.Year) {
1515
+ dispatchDriverCancellationState({
1516
+ type: StoreFormCarDriverCancellationActionTypes.FormCarDriverInsuranceCancelStartYearSelect,
1517
+ payload: {
1518
+ startYear: value,
1519
+ index,
1520
+ },
1521
+ });
1522
+ }
1523
+ };
1524
+ const handleEndDateChange = (index) => (dateType) => ({ value }) => {
1525
+ if (dateType === DateTypes.Month) {
1526
+ dispatchDriverCancellationState({
1527
+ type: StoreFormCarDriverCancellationActionTypes.FormCarDriverInsuranceCancelEndMonthSelect,
1528
+ payload: {
1529
+ endMonth: value,
1530
+ index,
1531
+ },
1532
+ });
1533
+ }
1534
+ if (dateType === DateTypes.Year) {
1535
+ dispatchDriverCancellationState({
1536
+ type: StoreFormCarDriverCancellationActionTypes.FormCarDriverInsuranceCancelEndYearSelect,
1537
+ payload: {
1538
+ endYear: value,
1539
+ index,
1540
+ },
1541
+ });
1542
+ }
1543
+ };
1544
+ return (jsxs("div", { className: "form-section", children: [jsx("h2", { className: isTheBig ? 'thebig-bold' : '', children: "Insurance Cancellation" }), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleCancellationChange, name: "insuranceCancellation", defaultValue: getSelectedOption(yesNoOptions, insuranceCancellation), title: `Has ${firstName} had an insurance company cancellation or
1545
+ a time without insurance coverage, within the past 3 years?`, description: "If an insurance company cancels your policy, it will increase your future insurance premiums. The most common reasons for cancellations include missed payments, excessive claims, false declarations, or criminal actions, for example. If you cancel the insurance policy, it is not relevant." }), insuranceCancellation && (jsxs(Fragment, { children: [insuranceCancellationList?.map(({ cancellationReason, startYear, startMonth, endYear, endMonth, }, index) => {
1546
+ const defaultStartDate = {
1547
+ year: startYear,
1548
+ month: startMonth,
1549
+ };
1550
+ const defaultEndDate = {
1551
+ year: endYear,
1552
+ month: endMonth,
1553
+ };
1554
+ const now = getFormattedDate('', 'yyyy-MM-dd');
1555
+ const days = birthDay ? (+birthDay + 1) : 1;
1556
+ const endDate = endYear && endMonth ? addDayToDate(`${endYear}-${endMonth}`, days) : now;
1557
+ const currentMinDate = getMinDateByYears(getMinDate(birthDate, firstLicenceAge), 3);
1558
+ const currentEndDate = compareDates(endDate, currentMinDate) < 0 ? currentMinDate : endDate;
1559
+ return (jsxs("div", { className: "list-block", children: [jsx("hr", {}), jsxs("div", { className: "list-item", children: [jsx(SelectFormBox, { options: insuranceCancellationReasonOptions, name: `cancellationReason-${index}`, onChange: handleReasonChange(index), defaultValue: cancellationReason, title: "Reason", placeholder: "Select from the list", isRemovable: insuranceCancellationList.length > 1, onIconClick: handleIconClick(index), autoSelectIfValueIsOutOfOptions: false, error: !cancellationReason && driverState.inValidation, errorMessage: getErrorMessage(cancellationReason, driverState.inValidation) }), jsx(DateSelectFormBox, { name: `startDate-${index}`, dateNames: [`startYear-${index}`, `startMonth-${index}`], onDateChange: handleStartDateChange(index), defaultValue: defaultStartDate, title: "Start date", errorMessage: getDateErrorMessage(['01', startMonth, startYear], driverState.inValidation), error: driverState.inValidation, minDate: currentMinDate, maxDate: currentEndDate }), jsx(DateSelectFormBox, { name: `endDate-${index}`, dateNames: [`endYear-${index}`, `endMonth-${index}`], onDateChange: handleEndDateChange(index), defaultValue: defaultEndDate, title: "End Date", errorMessage: getDateErrorMessage(['01', endMonth, endYear], driverState.inValidation), error: driverState.inValidation, minDate: startMonth && startYear
1560
+ ? addDayToDate(`${startYear}-${startMonth}`, days) : currentMinDate })] })] }, `insurance-cancellation-${index}`));
1561
+ }), insuranceCancellationList?.length < 3 && (jsx(ButtonBase, { category: CategoryTypes.Filled, onClick: handleAddButtonClick, size: SizeTypes.Medium, color: ColorTypes.Primary, label: "Add another" }))] }))] }));
1562
+ };
1563
+
1564
+ const BlockDriverSuspension = () => {
1565
+ const { driverState, dispatchDriverSuspensionState } = useStoreFormCarDriverSuspension();
1566
+ const { licenceSuspension, licenceSuspensionList = [] } = driverState.items[driverState.activeIndex];
1567
+ const { dispatchDriverBaseState } = useStoreFormCarDriverBase();
1568
+ const { appConfigState: { appType } } = useStoreAppConfig();
1569
+ const isTheBig = appType === AppTypes.TheBig;
1570
+ const { firstName, birthYear, birthMonth, birthDay, licenceInfo: { firstLicenceAge }, } = driverState.items[driverState.activeIndex];
1571
+ const birthDate = birthYear && birthMonth && birthDay ? `${birthYear}-${birthMonth}-${birthDay}` : '';
1572
+ const handleSuspensionChange = ({ value }) => {
1573
+ dispatchDriverSuspensionState({
1574
+ type: StoreFormCarDriverSuspensionActionTypes.FormCarDriverLicenceSuspensionSelect,
1575
+ payload: { licenceSuspension: value },
1576
+ });
1577
+ if (!value) {
1578
+ dispatchDriverBaseState({
1579
+ type: StoreFormCarDriverBaseActionTypes.FormCarDriverInitialList,
1580
+ payload: { listKey: DriverListTypes.LicenceSuspension },
1581
+ });
1582
+ }
1583
+ };
1584
+ const handleIconClick = (index) => () => {
1585
+ dispatchDriverSuspensionState({
1586
+ type: StoreFormCarDriverSuspensionActionTypes.FormCarDriverLicenceSuspensionDelete,
1587
+ payload: { itemIndex: index },
1588
+ });
1589
+ };
1590
+ const handleAddButtonClick = () => {
1591
+ dispatchDriverSuspensionState({
1592
+ type: StoreFormCarDriverSuspensionActionTypes.FormCarDriverLicenceSuspensionAdd,
1593
+ });
1594
+ };
1595
+ const handleReasonChange = (index) => ({ value }) => {
1596
+ dispatchDriverSuspensionState({
1597
+ type: StoreFormCarDriverSuspensionActionTypes.FormCarDriverLicenceSuspensionReasonSelect,
1598
+ payload: {
1599
+ reason: value,
1600
+ index,
1601
+ },
1602
+ });
1603
+ };
1604
+ const handleSuspensionDateChange = (index) => (dateType) => ({ value }) => {
1605
+ if (dateType === DateTypes.Month) {
1606
+ dispatchDriverSuspensionState({
1607
+ type: StoreFormCarDriverSuspensionActionTypes.FormCarDriverLicenceSuspensionMonthSelect,
1608
+ payload: {
1609
+ suspensionMonth: value,
1610
+ index,
1611
+ },
1612
+ });
1613
+ }
1614
+ if (dateType === DateTypes.Year) {
1615
+ dispatchDriverSuspensionState({
1616
+ type: StoreFormCarDriverSuspensionActionTypes.FormCarDriverLicenceSuspensionYearSelect,
1617
+ payload: {
1618
+ suspensionYear: value,
1619
+ index,
1620
+ },
1621
+ });
1622
+ }
1623
+ };
1624
+ const handleReinstatementDateChange = (index) => (dateType) => ({ value }) => {
1625
+ if (dateType === DateTypes.Month) {
1626
+ dispatchDriverSuspensionState({
1627
+ type: StoreFormCarDriverSuspensionActionTypes.FormCarDriverLicenceReinstatementMonthSelect,
1628
+ payload: {
1629
+ reinstatementMonth: value,
1630
+ index,
1631
+ },
1632
+ });
1633
+ }
1634
+ if (dateType === DateTypes.Year) {
1635
+ dispatchDriverSuspensionState({
1636
+ type: StoreFormCarDriverSuspensionActionTypes.FormCarDriverLicenceReinstatementYearSelect,
1637
+ payload: {
1638
+ reinstatementYear: value,
1639
+ index,
1640
+ },
1641
+ });
1642
+ }
1643
+ };
1644
+ return (jsxs("div", { className: "form-block-container", children: [jsx("h2", { className: isTheBig ? 'thebig-bold' : '', children: "Licence Suspensions" }), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleSuspensionChange, name: "licenceSuspension", defaultValue: getSelectedOption(yesNoOptions, licenceSuspension), title: `Has ${firstName} had a licence suspension within the past 3 years?`, description: "Three licence suspensions are common: 1) driving under the influence, 2) being found guilty of drinking and driving, and 3) a police officer finding reasonable grounds for a driving offence. Licence suspensions are also different from driving prohibitions as part of a criminal sentence." }), licenceSuspension && (jsxs(Fragment, { children: [licenceSuspensionList?.map(({ suspensionReason, suspensionYear, suspensionMonth, reinstatementYear, reinstatementMonth, }, index) => {
1645
+ const defaultSuspensionDate = {
1646
+ year: suspensionYear,
1647
+ month: suspensionMonth,
1648
+ };
1649
+ const defaultReinstatementDate = {
1650
+ year: reinstatementYear,
1651
+ month: reinstatementMonth,
1652
+ };
1653
+ const now = getFormattedDate('', 'yyyy-MM-dd');
1654
+ const days = birthDay ? (+birthDay + 1) : 1;
1655
+ const endDate = reinstatementYear && reinstatementMonth ? addDayToDate(`${reinstatementYear}-${reinstatementMonth}`, days) : now;
1656
+ const currentMinDate = getMinDateByYears(getMinDate(birthDate, firstLicenceAge), 3);
1657
+ const currentEndDate = compareDates(endDate, currentMinDate) < 0 ? currentMinDate : endDate;
1658
+ return (jsxs("div", { className: "list-block", children: [jsx("hr", {}), jsxs("div", { className: "list-item", children: [jsx(SelectFormBox, { options: licenceSuspensionsReasonOptions, name: `suspensionReason-${index}`, onChange: handleReasonChange(index), defaultValue: suspensionReason, title: "Reason for licence suspension", placeholder: "Select from the list", isRemovable: licenceSuspensionList.length > 1, onIconClick: handleIconClick(index), autoSelectIfValueIsOutOfOptions: false, error: !suspensionReason && driverState.inValidation, errorMessage: getErrorMessage(suspensionReason, driverState.inValidation) }), jsx(DateSelectFormBox, { name: `suspensionDate-${index}`, dateNames: [`suspensionYear-${index}`, `suspensionMonth-${index}`], onDateChange: handleSuspensionDateChange(index), defaultValue: defaultSuspensionDate, title: "Start date", errorMessage: getDateErrorMessage(['01', suspensionMonth, suspensionYear], driverState.inValidation), error: driverState.inValidation, minDate: currentMinDate, maxDate: currentEndDate }), jsx(DateSelectFormBox, { name: `reinstatementDate-${index}`, dateNames: [`reinstatementYear-${index}`, `reinstatementMonth-${index}`], onDateChange: handleReinstatementDateChange(index), defaultValue: defaultReinstatementDate, title: "End Date", errorMessage: getDateErrorMessage(['01', reinstatementMonth, reinstatementYear], driverState.inValidation), error: driverState.inValidation, minDate: suspensionYear && suspensionMonth
1659
+ ? addDayToDate(`${suspensionYear}-${suspensionMonth}`, days) : currentMinDate })] })] }, `suspension-${index}`));
1660
+ }), licenceSuspensionList?.length < 3 && (jsx(ButtonBase, { className: "list-item-add", category: CategoryTypes.Filled, onClick: handleAddButtonClick, size: SizeTypes.Medium, color: ColorTypes.Primary, label: "Add another" }))] }))] }));
1661
+ };
1662
+
1663
+ const BlockDriverAccident = () => {
1664
+ const { driverState, dispatchDriverAccidentState } = useStoreFormCarDriverAccident();
1665
+ const { dispatchDriverBaseState } = useStoreFormCarDriverBase();
1666
+ const { appConfigState: { appType } } = useStoreAppConfig();
1667
+ const isTheBig = appType === AppTypes.TheBig;
1668
+ const { accident, accidentList = [] } = driverState.items[driverState.activeIndex];
1669
+ const { firstName, birthYear, birthMonth, birthDay, licenceInfo: { firstLicenceAge }, } = driverState.items[driverState.activeIndex];
1670
+ const birthDate = birthYear && birthMonth && birthDay ? `${birthYear}-${birthMonth}-${birthDay}` : '';
1671
+ const handleAccidentChange = ({ value }) => {
1672
+ dispatchDriverAccidentState({
1673
+ type: StoreFormCarDriverAccidentActionTypes.FormCarDriverAccidentSelect,
1674
+ payload: { accident: value },
1675
+ });
1676
+ if (!value) {
1677
+ dispatchDriverBaseState({
1678
+ type: StoreFormCarDriverBaseActionTypes.FormCarDriverInitialList,
1679
+ payload: { listKey: DriverListTypes.Accident },
1680
+ });
1681
+ }
1682
+ };
1683
+ const handleIconClick = (index) => () => {
1684
+ dispatchDriverAccidentState({
1685
+ type: StoreFormCarDriverAccidentActionTypes.FormCarDriverAccidentDelete,
1686
+ payload: { itemIndex: index },
1687
+ });
1688
+ };
1689
+ const handleAddButtonClick = () => {
1690
+ dispatchDriverAccidentState({
1691
+ type: StoreFormCarDriverAccidentActionTypes.FormCarDriverAccidentAdd,
1692
+ });
1693
+ };
1694
+ const handleAccidentDateChange = (index) => (dateType) => ({ value }) => {
1695
+ if (dateType === DateTypes.Month) {
1696
+ dispatchDriverAccidentState({
1697
+ type: StoreFormCarDriverAccidentActionTypes.FormCarDriverAccidentMonthSelect,
1698
+ payload: {
1699
+ accidentMonth: value,
1700
+ index,
1701
+ },
1702
+ });
1703
+ }
1704
+ if (dateType === DateTypes.Year) {
1705
+ dispatchDriverAccidentState({
1706
+ type: StoreFormCarDriverAccidentActionTypes.FormCarDriverAccidentYearSelect,
1707
+ payload: {
1708
+ accidentYear: value,
1709
+ index,
1710
+ },
1711
+ });
1712
+ }
1713
+ };
1714
+ return (jsxs("div", { className: "form-block-container", children: [jsx("h2", { className: isTheBig ? 'thebig-bold' : '', children: "Accidents" }), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleAccidentChange, name: "accident", defaultValue: getSelectedOption(yesNoOptions, accident), title: `Has ${firstName} ever been at-fault for any accidents?`, description: "An at-fault accident means you are responsible for the car accident according to the investigative report. Whether you did not obey traffic signals or hit the brakes too late, it will show up on your insurance record for up to ten years. Insurers access at-fault information if one party reports it, so it is best to disclose previous incidents. A clean driving record mitigates additional hikes to your insurance premium." }), accident && (jsxs(Fragment, { children: [accidentList?.map(({ accidentYear, accidentMonth, }, index) => {
1715
+ const defaultSuspensionDate = {
1716
+ year: accidentYear,
1717
+ month: accidentMonth,
1718
+ day: '01',
1719
+ };
1720
+ return (jsxs("div", { className: "list-block", children: [jsx("hr", {}), jsx(DateSelectFormBox, { name: `accidentDate-${index}`, dateNames: [`accidentYear-${index}`, `accidentMonth-${index}`], onDateChange: handleAccidentDateChange(index), isRemovable: accidentList.length > 1, onIconClick: handleIconClick(index), defaultValue: defaultSuspensionDate, title: "Accident date", errorMessage: getDateErrorMessage(['01', accidentMonth, accidentYear], driverState.inValidation), error: driverState.inValidation, minDate: getMinDate(birthDate, firstLicenceAge) })] }, `accident-${index}`));
1721
+ }), accidentList?.length < 3 && (jsx(ButtonBase, { category: CategoryTypes.Filled, onClick: handleAddButtonClick, size: SizeTypes.Medium, color: ColorTypes.Primary, label: "Add another" }))] }))] }));
1722
+ };
1723
+
1724
+ const BlockDriverTicket = () => {
1725
+ const { driverState, dispatchDriverTicketState } = useStoreFormCarDriverTicket();
1726
+ const { ticket, ticketList = [] } = driverState.items[driverState.activeIndex];
1727
+ const { dispatchDriverBaseState } = useStoreFormCarDriverBase();
1728
+ const { appConfigState: { appType } } = useStoreAppConfig();
1729
+ const isTheBig = appType === AppTypes.TheBig;
1730
+ const { firstName, minMaxDates, } = driverState.items[driverState.activeIndex];
1731
+ const { gOneMin } = minMaxDates;
1732
+ const handleTicketChange = ({ value }) => {
1733
+ dispatchDriverTicketState({
1734
+ type: StoreFormCarDriverTicketActionTypes.FormCarDriverTrafficTicketSelect,
1735
+ payload: { ticket: value },
1736
+ });
1737
+ if (!value) {
1738
+ dispatchDriverBaseState({
1739
+ type: StoreFormCarDriverBaseActionTypes.FormCarDriverInitialList,
1740
+ payload: { listKey: DriverListTypes.Ticket },
1741
+ });
1742
+ }
1743
+ };
1744
+ const handleIconClick = (index) => () => {
1745
+ dispatchDriverTicketState({
1746
+ type: StoreFormCarDriverTicketActionTypes.FormCarDriverTrafficTicketDelete,
1747
+ payload: { itemIndex: index },
1748
+ });
1749
+ };
1750
+ const handleAddButtonClick = () => {
1751
+ dispatchDriverTicketState({
1752
+ type: StoreFormCarDriverTicketActionTypes.FormCarDriverTrafficTicketAdd,
1753
+ });
1754
+ };
1755
+ const handleReasonChange = (index) => ({ value }) => {
1756
+ dispatchDriverTicketState({
1757
+ type: StoreFormCarDriverTicketActionTypes.FormCarDriverTrafficTicketReasonSelect,
1758
+ payload: {
1759
+ reason: value,
1760
+ index,
1761
+ },
1762
+ });
1763
+ };
1764
+ const handleTicketDateChange = (index) => (dateType) => ({ value }) => {
1765
+ if (dateType === DateTypes.Month) {
1766
+ dispatchDriverTicketState({
1767
+ type: StoreFormCarDriverTicketActionTypes.FormCarDriverTrafficTicketMonthSelect,
1768
+ payload: {
1769
+ ticketMonth: value,
1770
+ index,
1771
+ },
1772
+ });
1773
+ }
1774
+ if (dateType === DateTypes.Year) {
1775
+ dispatchDriverTicketState({
1776
+ type: StoreFormCarDriverTicketActionTypes.FormCarDriverTrafficTicketYearSelect,
1777
+ payload: {
1778
+ ticketYear: value,
1779
+ index,
1780
+ },
1781
+ });
1782
+ }
1783
+ };
1784
+ return (jsxs("div", { className: "form-block-container", children: [jsx("h2", { className: isTheBig ? 'thebig-bold' : '', children: "Traffic Tickets" }), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleTicketChange, name: "ticket", defaultValue: getSelectedOption(yesNoOptions, ticket), title: `Except for parking, has ${firstName} had any driving related tickets within the past 3 years?`, description: "Insurers want to make sure drivers are safe, which means minimizing driving infractions and encouraging good behaviour on the roads. Some of the most common liabilities include speeding, failure to stop, running a red light, reckless driving, and seatbelt negligence. It affects your insurance premium for up to three years and may void your policy." }), ticket && (jsxs(Fragment, { children: [ticketList?.map(({ ticketReason, ticketYear, ticketMonth, }, index) => {
1785
+ const defaultTicketDate = {
1786
+ year: ticketYear,
1787
+ month: ticketMonth,
1788
+ day: '01',
1789
+ };
1790
+ return (jsxs("div", { className: "list-block", children: [jsx("hr", {}), jsxs("div", { className: "list-item", children: [jsx(SelectFormBox, { groupOptions: trafficTicketsGroupOptions, name: `ticketReason-${index}`, onChange: handleReasonChange(index), defaultValue: ticketReason, title: "Reason for traffic ticket", placeholder: "Select from the list", isRemovable: ticketList.length > 1, onIconClick: handleIconClick(index), autoSelectIfValueIsOutOfOptions: false, error: !ticketReason && driverState.inValidation, errorMessage: getErrorMessage(ticketReason, driverState.inValidation) }), jsx(DateSelectFormBox, { name: `ticketDate-${index}`, dateNames: [`ticketYear-${index}`, `ticketMonth-${index}`], onDateChange: handleTicketDateChange(index), defaultValue: defaultTicketDate, title: "Ticket date", errorMessage: getDateErrorMessage(['01', ticketMonth, ticketYear], driverState.inValidation), error: driverState.inValidation, minDate: getMinDateByYears(gOneMin, 3) })] })] }, `ticket-${index}`));
1791
+ }), ticketList?.length < 3 && (jsx(ButtonBase, { className: "list-item-add", category: CategoryTypes.Filled, onClick: handleAddButtonClick, size: SizeTypes.Medium, color: ColorTypes.Primary, label: "Add another" }))] }))] }));
1792
+ };
1793
+
1794
+ const SectionDriverHistory = () => (jsxs("div", { className: "form-section", children: [jsx(BlockDriverSuspension, {}), jsx(BlockDriverAccident, {}), jsx(BlockDriverTicket, {})] }));
1795
+
1796
+ const PageDriver = () => {
1797
+ const { appConfigState: { appType, localIndex } } = useStoreAppConfig();
1798
+ const { driverState: { activeIndex, items }, dispatchDriverBaseState } = useStoreFormCarDriverBase();
1799
+ const { vehicleFormValidate, vehicleFormIsValid } = useValidationVehicle();
1800
+ const { driverFormIsValid, driverFormValidate } = useValidationDriver();
1801
+ useEffectOnce(() => {
1802
+ if (!vehicleFormIsValid) {
1803
+ vehicleFormValidate();
1804
+ }
1805
+ window.scrollTo({
1806
+ top: 0,
1807
+ behavior: 'smooth',
1808
+ });
1809
+ });
1810
+ const [isRender, setIsRender] = useState(false);
1811
+ const validateForm = () => driverFormValidate(false);
1812
+ const createDriver = () => {
1813
+ dispatchDriverBaseState({
1814
+ type: StoreFormCarDriverBaseActionTypes.FormCarDriverCreate,
1815
+ });
1816
+ window.scrollTo({
1817
+ top: 0,
1818
+ behavior: 'smooth',
1819
+ });
1820
+ };
1821
+ useEffect(() => {
1822
+ setIsRender(false);
1823
+ }, [activeIndex]);
1824
+ useEffect(() => {
1825
+ setIsRender(true);
1826
+ }, [isRender]);
1827
+ 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.TheBig
1828
+ ? (jsx(NavigationBottomTheBig, { createItem: createDriver, formSteps: formSteps[InsuranceTypes.Car], itemCount: items.length, validateForm: validateForm, formIsValid: driverFormIsValid }))
1829
+ : (jsx(NavigationBottom, { createItem: createDriver, formSteps: formSteps[InsuranceTypes.Car], itemCount: items.length, validateForm: validateForm, formIsValid: driverFormIsValid }))] }), localIndex !== defaultLocalIndex
1830
+ && jsx("img", { className: "logo-for-partner", src: myChoicePartnerLogo, alt: "partner logo" })] }));
1831
+ };
1832
+
1833
+ const BlockVehLinks = () => {
1834
+ const { vehicleState: { items: vehicles } } = useStoreFormCarVehicle();
1835
+ const { driverState: { items: drivers } } = useStoreFormCarDriverBase();
1836
+ const { discountState: { vehlinks }, dispatchDiscountState } = useStoreFormCarDiscount();
1837
+ const driverOptions = drivers.map((driver, index) => ({ name: driver.firstName, value: index }));
1838
+ const handleDriverChange = (vehicleIndex) => ({ value }) => {
1839
+ dispatchDiscountState({
1840
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountVehlinkSelect,
1841
+ payload: {
1842
+ driverIndex: value,
1843
+ vehicleIndex,
1844
+ },
1845
+ });
1846
+ };
1847
+ if (drivers.length > 1) {
1848
+ 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) => {
1849
+ const { year, make, model } = vehicle;
1850
+ const selectedDriver = vehlinks.find((vehlink) => (vehlink.vehicleIndex === index && vehlink.priority === DriverPriorityTypes.Prn));
1851
+ 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}`));
1852
+ })] }));
1853
+ }
1854
+ return null;
1855
+ };
1856
+
1857
+ const BlockNextPageInfo$1 = () => {
1858
+ const { appConfigState: { appType } } = useStoreAppConfig();
1859
+ const isTheBig = appType === AppTypes.TheBig;
1860
+ 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" }), "."] }) })] })) }));
1861
+ };
1862
+
1863
+ const BlockSubmit$1 = ({ className, label, buttonSize, isRecalc = false, }) => {
1864
+ const { postRequestQuote } = QuoteDataHandler();
1865
+ const { carDiscountFormValidate } = useValidationCarDiscount();
1866
+ const handleRequest = () => {
1867
+ postRequestQuote(isRecalc);
1868
+ };
1869
+ const handleGetQuotesClick = () => {
1870
+ carDiscountFormValidate(true, handleRequest);
1871
+ };
1872
+ return (jsx(ButtonBase, { className: className, size: buttonSize, category: CategoryTypes.Filled, onClick: handleGetQuotesClick, color: ColorTypes.Primary, label: label }));
1873
+ };
1874
+ BlockSubmit$1.defaultProps = {
1875
+ buttonSize: SizeTypes.Large,
1876
+ label: 'Get Your Quotes',
1877
+ className: '',
1878
+ };
1879
+
1880
+ const SectionDiscountInfo$1 = () => {
1881
+ const { appConfigState: { appType } } = useStoreAppConfig();
1882
+ const isTheBig = appType === AppTypes.TheBig;
1883
+ const { discountState, dispatchDiscountState } = useStoreFormCarDiscount();
1884
+ const { validateEmail, errorMessage } = useHandlerQuoterEmail();
1885
+ const { multiplePoliciesDiscount, appInstallDiscount, caaMemberDiscount, quoterInfo, emailTo: { email, emailStatus }, } = discountState;
1886
+ const { firstName, lastName, phone, driverLicense = '', caslConsent, } = quoterInfo;
1887
+ const handleMultiplePolicyChange = ({ value }) => {
1888
+ dispatchDiscountState({
1889
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountMultiplePoliciesSelect,
1890
+ payload: { multiplePoliciesDiscount: value },
1891
+ });
1892
+ };
1893
+ const handleAppInstallChange = ({ value }) => {
1894
+ dispatchDiscountState({
1895
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountAppInstallSelect,
1896
+ payload: { appInstallDiscount: value },
1897
+ });
1898
+ };
1899
+ const handleCaaMemberChange = ({ value }) => {
1900
+ dispatchDiscountState({
1901
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountCaaMemberSelect,
1902
+ payload: { caaMemberDiscount: value },
1903
+ });
1904
+ };
1905
+ const handleFirstNameChange = ({ value }) => {
1906
+ dispatchDiscountState({
1907
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountQuoterFirstNameSet,
1908
+ payload: { firstName: value },
1909
+ });
1910
+ };
1911
+ const handleLastNameChange = ({ value }) => {
1912
+ dispatchDiscountState({
1913
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountQuoterLastNameSet,
1914
+ payload: { lastName: value },
1915
+ });
1916
+ };
1917
+ const handleDriverLicenseChange = ({ value }) => {
1918
+ dispatchDiscountState({
1919
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountQuoterDriverLicenseSet,
1920
+ payload: { driverLicense: value },
1921
+ });
1922
+ };
1923
+ const handlePhoneNumberChange = ({ value }) => {
1924
+ dispatchDiscountState({
1925
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountQuoterPhoneSet,
1926
+ payload: { phone: value },
1927
+ });
1928
+ };
1929
+ const handleEmailChange = ({ value }) => {
1930
+ validateEmail(value);
1931
+ };
1932
+ const handleCaslConsentChange = ({ value }) => {
1933
+ dispatchDiscountState({
1934
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountQuoterCaslConsentSet,
1935
+ payload: { caslConsent: value },
1936
+ });
1937
+ };
1938
+ return (jsxs("div", { className: "form-section", children: [jsx("h5", { className: `${isTheBig ? 'thebig-medium' : ''} hint-message`, children: "You are just seconds away from the best quote" }), jsx(LabelFormBox, { title: "You are seconds away from receiving your car insurance quotes,\n please provide your email after completing the discount section so we\n can send you your personalized free car insurance quotes!" }), jsx(BlockVehLinks, {}), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleMultiplePolicyChange, name: "multiplePoliciesDiscount", defaultValue: getSelectedOption(yesNoOptions, multiplePoliciesDiscount), title: "You could receive a 10-15% discount for bundling insurance with multiple policies with the same insurance company. Does that interest you?", description: "Bundling your home and auto insurance can save you significantly on insurance premiums as a whole package. Do you want to learn more about the benefits of multiple policies for home, tenant, condo, or car insurance? All you have to do is select yes.." }), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleCaaMemberChange, name: "caaMemberDiscount", defaultValue: getSelectedOption(yesNoOptions, caaMemberDiscount), title: "Please indicate if you are a member of CAA, you could save up to an additional 20%." }), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleAppInstallChange, name: "appInstallDiscount", defaultValue: getSelectedOption(yesNoOptions, appInstallDiscount), title: "You could receive up to a 30% discount by using an app to track driving habits. Does that interest you?", description: "Get rewarded for safe driving with the click of a button. If you install the app, you may be eligible for a 30% discount on your insurance premiums. Typically, you receive 10% of the discount upfront and the balance after six months of good driving." }), isTheBig
1939
+ ? (jsxs("div", { className: "input-form-box-container", children: [jsx(LabelFormBox, { title: "Complete this form to see all your personalized\n quotes on the next page, you will also be able to:" }), jsxs("ol", { className: "ordered-block", children: [jsx("li", { children: "See what rates insurance carriers are offering" }), jsx("li", { children: "Get in touch with us and secure your rate" }), jsx("li", { children: "Potentially save more by speaking with a broker" })] })] }))
1940
+ : jsx("h2", { children: "Complete the form below to see which companies are offering your quotes." }), jsx(InputFormBox, { name: "firstName", title: "First Name", onChange: handleFirstNameChange, defaultValue: firstName, placeholder: "Your First Name", error: !firstName && discountState.inValidation, errorMessage: getErrorMessage(firstName, discountState.inValidation) }), jsx(InputFormBox, { name: "lastname", title: "Last Name", onChange: handleLastNameChange, defaultValue: lastName, placeholder: "Your Last Name", error: !lastName && discountState.inValidation, errorMessage: getErrorMessage(lastName, discountState.inValidation) }), isTheBig
1941
+ && (jsx(InputFormLicenceBox, { name: "driverLicense", title: "Driver Licence Number (Optional)", onChange: handleDriverLicenseChange, defaultValue: driverLicense, placeholder: "V1234-12345-12345", maxLength: 17, description: "Enter your drivers licence number in to receive a more accurate, prequalified quote from our broker partners. This will enable you to provide less details over the phone if you choose to have a broker contact you. This is an optional input." })), jsx(InputFormPhoneBox, { name: "phone", onChange: handlePhoneNumberChange, defaultValue: phone, title: "Phone Number", placeholder: "(855) 325-8444", error: !phone && discountState.inValidation, errorMessage: getErrorMessage(phone, discountState.inValidation) }), jsx(InputFormEmailBox, { validationStatus: emailStatus, errorMessage: emailStatus === ValidationStatusTypes.Declined
1942
+ ? errorMessage : getErrorMessage(email, discountState.inValidation), error: emailStatus === ValidationStatusTypes.Declined || (!email && discountState.inValidation), name: "email", title: "Please provide your email address so we can send you a copy of your quotes", description: "We will provide you with your insurance quotes immediately after this form completion. If you are not ready to apply today, don\u2019t worry as we will be emailing your quotes to you if you\u2019d like to complete at a later date with the help of one of our trusted broker partners.", onChange: handleEmailChange, defaultValue: email, placeholder: "johnsmith@mychoice.ca" }), isTheBig
1943
+ && (jsx(CheckboxForm, { className: "casl-consent", name: "caslConsent", label: "Yes, I consent to receiving emails from the Billyard Insurance Group.\n I understand that I can unsubscribe at any time", onChange: handleCaslConsentChange, defaultValue: caslConsent })), jsx(BlockSubmit$1, { className: isTheBig ? 'thebig-bold' : '' }), jsx(BlockNextPageInfo$1, {})] }));
1944
+ };
1945
+
1946
+ const PageCarDiscount = () => {
1947
+ const { vehicleFormValidate, vehicleFormIsValid } = useValidationVehicle();
1948
+ const { driverFormValidate, driverFormIsValid } = useValidationDriver();
1949
+ useEffectOnce(() => {
1950
+ if (!vehicleFormIsValid) {
1951
+ vehicleFormValidate();
1952
+ }
1953
+ if (!driverFormIsValid) {
1954
+ driverFormValidate();
1955
+ }
1956
+ window.scrollTo({
1957
+ top: 0,
1958
+ behavior: 'smooth',
1959
+ });
1960
+ });
1961
+ return (jsx("div", { className: "form-container", children: jsx("div", { className: "form-section-container", children: jsx(SectionDiscountInfo$1, {}) }) }));
1962
+ };
1963
+
1964
+ const SectionQuoteEdit = () => {
1965
+ const { appConfigState } = useStoreAppConfig();
1966
+ const { driverState, dispatchDriverBaseState } = useStoreFormCarDriverBase();
1967
+ const { vehicleState, dispatchVehicleState } = useStoreFormCarVehicle();
1968
+ const { discountState: { appInstallDiscount, multiplePoliciesDiscount } } = useStoreFormCarDiscount();
1969
+ const { appConfigState: { appType } } = useStoreAppConfig();
1970
+ const isTheBig = appType === AppTypes.TheBig;
1971
+ const navigate = useNavigate();
1972
+ const vehicles = vehicleState.items.map(({ year, make, model }) => [`${year} ${make} ${model}`]);
1973
+ const drivers = driverState.items.map(({ firstName }) => [`${firstName}`]);
1974
+ const discounts = [[]];
1975
+ if (!appInstallDiscount && !multiplePoliciesDiscount) {
1976
+ discounts[0].push('No discounts');
1977
+ }
1978
+ if (appInstallDiscount) {
1979
+ discounts[0].push('Driving habits scoring app');
1980
+ }
1981
+ if (multiplePoliciesDiscount) {
1982
+ discounts[0].push('Bundle w/ Home');
1983
+ }
1984
+ const vehicleEdit = (vehicleIndex) => () => {
1985
+ dispatchVehicleState({
1986
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleSelect,
1987
+ payload: {
1988
+ vehicleIndex,
1989
+ },
1990
+ });
1991
+ navigate(`/${appConfigState.localIndex || defaultLocalIndex}/car`);
1992
+ };
1993
+ const driverEdit = (driverIndex) => () => {
1994
+ dispatchDriverBaseState({
1995
+ type: StoreFormCarDriverBaseActionTypes.FormCarDriverSelect,
1996
+ payload: {
1997
+ driverIndex,
1998
+ },
1999
+ });
2000
+ navigate(`/${appConfigState.localIndex || defaultLocalIndex}/car/driver`);
2001
+ };
2002
+ const discountEdit = () => () => {
2003
+ navigate(`/${appConfigState.localIndex || defaultLocalIndex}/car/discount`);
2004
+ };
2005
+ return (jsxs("div", { className: "edit-quote-section", children: [jsx("h3", { className: isTheBig ? 'thebig-bold' : '', children: "Edit Quote" }), jsxs("div", { className: "edit-section-content", children: [jsx(QuoteEdit, { className: isTheBig ? 'thebig-medium' : '', editClick: vehicleEdit, title: "Vehicle Information", items: vehicles }), jsx(QuoteEdit, { className: isTheBig ? 'thebig-medium' : '', editClick: driverEdit, title: "Driver Information", items: drivers }), jsx(QuoteEdit, { className: isTheBig ? 'thebig-medium' : '', editClick: discountEdit, title: "Discount Information", items: discounts })] })] }));
2006
+ };
2007
+
2008
+ const BlockEndorsements = () => {
2009
+ const { vehicleState } = useStoreFormCarVehicle();
2010
+ const { activeIndex } = vehicleState;
2011
+ const { appConfigState: { appType } } = useStoreAppConfig();
2012
+ const isTheBig = appType === AppTypes.TheBig;
2013
+ const [isCoverage, setIsCoverage] = useState(vehicleState.items[activeIndex].collision.coverage
2014
+ && vehicleState.items[activeIndex].comprehensive.coverage);
2015
+ useEffect(() => {
2016
+ setIsCoverage(vehicleState.items[activeIndex].collision.coverage
2017
+ && vehicleState.items[activeIndex].comprehensive.coverage);
2018
+ }, [activeIndex, vehicleState]);
2019
+ return (jsxs("div", { className: "endorsements-container", children: [jsx("h4", { className: isTheBig ? 'thebig-bold' : '', children: "Endorsements" }), jsxs("div", { className: "labels-block", children: [jsx(LabelFormBox, { className: !isCoverage ? 'inActive' : '', name: "loss", title: "Loss of Use", description: "This endorsement will offer you protection in the event you are without use of your vehicle from an accident or it is stolen. You will be provided with a rental or replacement car while your own vehicle is in the process of being repaired or replaced.", isActive: isCoverage }), jsx(LabelFormBox, { className: !isCoverage ? 'inActive' : '', name: "liabilityDamage", title: "Liability for Damage for Non-owned Cars", description: "This endorsement will provide coverage and insure you as a driver for vehicles you do not own, for up to $50,000 in physical damages, effectively known as the \u2018rental car endorsement\u2019. This would be applicable throughout all of Canada and the USA.", isActive: isCoverage }), jsx(LabelFormBox, { name: "forgiveness", title: "Accident Waiver or Forgiveness", description: "Available to only drivers who have clean record, this endorsement will effectively forgive you and protect your driving record if you were to have your first at-fault accident. This would be beneficial as it would mean that you monthly premiums would not increase if you were to have an at-fault accident.", isActive: true })] })] }));
2020
+ };
2021
+
2022
+ const SectionQuoteRecalc = () => {
2023
+ const { appConfigState: { appType } } = useStoreAppConfig();
2024
+ const isTheBig = appType === AppTypes.TheBig;
2025
+ const { vehicleState, dispatchVehicleState } = useStoreFormCarVehicle();
2026
+ const { comprehensive, collision, liability } = vehicleState.items[vehicleState.activeIndex];
2027
+ const handleComprehensiveChange = ({ value }) => {
2028
+ dispatchVehicleState({
2029
+ type: StoreFormCarVehicleActionTypes.FormCarComprehensiveCoverageSelect,
2030
+ payload: { coverage: !!Number(value), deductible: value },
2031
+ });
2032
+ };
2033
+ const handleCollisionChange = ({ value }) => {
2034
+ dispatchVehicleState({
2035
+ type: StoreFormCarVehicleActionTypes.FormCarCollisionCoverageSelect,
2036
+ payload: { coverage: !!Number(value), deductible: value },
2037
+ });
2038
+ };
2039
+ const handleLiabilityChange = ({ value }) => {
2040
+ dispatchVehicleState({
2041
+ type: StoreFormCarVehicleActionTypes.FormCarLiabilityCoverageSelect,
2042
+ payload: { coverage: true, limit: value },
2043
+ });
2044
+ };
2045
+ return (jsxs("div", { className: "form-container", children: [jsx(TabVehicle, { readOnly: true }), jsxs("div", { className: "form-section edit-recalc-container", children: [jsx(SelectFormBox, { options: coverageOptions, name: "comprehensive-coverage", onChange: handleComprehensiveChange, defaultValue: getSelectedOption(coverageOptions, comprehensive.coverage ? comprehensive.deductible : 0), title: "Comprehensive coverage", description: "This deductible is the amount of money that you will pay out of your own pocket if your vehicle is damaged in events not covered by collision coverage. This includes events such as falling or flying objects, vandalism, and theft. Your insurance company covers the cost of repair minus the deductible chosen.", placeholder: "Select from the list", autoSelectIfValueIsOutOfOptions: false }), jsx(SelectFormBox, { options: coverageOptions, name: "collision-coverage", onChange: handleCollisionChange, defaultValue: getSelectedOption(coverageOptions, collision.coverage ? collision.deductible : 0), title: "Collision coverage", description: "This deductible is the specific dollar amount you will pay out of your own pocket if your vehicle is damaged in an accident. Your insurance company covers the remaining amount.", placeholder: "Select from the list", autoSelectIfValueIsOutOfOptions: false }), jsx(SelectFormBox, { options: liabilityOptions, name: "liability-limit", onChange: handleLiabilityChange, defaultValue: getSelectedOption(liabilityOptions, liability.coverage ? liability.limit : 1000000), title: "Third Party Liability", description: "This protects you from lawsuits resulting from accidents causing bodily injury or death to others or property damage.", placeholder: "Select from the list", autoSelectIfValueIsOutOfOptions: false }), jsx(BlockSubmit$1, { className: `${isTheBig ? 'thebig-bold' : ''} recalculate`, label: "Recalculate Quote", buttonSize: SizeTypes.Medium, isRecalc: true }), isTheBig && jsx(BlockEndorsements, {})] })] }));
2046
+ };
2047
+
2048
+ const SplashScreen = () => {
2049
+ const { discountState } = useStoreFormCarDiscount();
2050
+ const phoneObject = formatPhoneObject(discountState.quoterInfo.brokerInfo?.phone) || {};
2051
+ return (jsxs("div", { className: "splash-screen-wrapper", children: [jsx("h2", { children: "We Aren\u2019t Done Yet" }), "This quote requires us to get a bit more information from you, please give", discountState.quoterInfo.brokerInfo?.id
2052
+ && ` ${formatTitleToCapital(discountState.quoterInfo.brokerInfo?.id)} `, !discountState.quoterInfo.brokerInfo?.id && ' us ', "a call at", phoneObject.number
2053
+ && (jsx("a", { className: "phoneNumber", target: "_blank", rel: "noreferrer noopener", href: `tel:${phoneObject?.number}`, children: phoneObject?.title })), "and we will be happy to get you the best rate.", jsx("div", { className: "logo", children: jsx("img", { src: theBigLogotype, alt: "thebig-logotype" }) })] }));
2054
+ };
2055
+
2056
+ const PageQuote = () => {
2057
+ const { vehicleFormValidate, vehicleFormIsValid } = useValidationVehicle();
2058
+ const { driverFormValidate, driverFormIsValid } = useValidationDriver();
2059
+ const { carDiscountFormValidate, carDiscountFormIsValid } = useValidationCarDiscount();
2060
+ const { quoteState } = useStoreFormCarQuote();
2061
+ const { postRequestQuote } = QuoteDataHandler();
2062
+ const { appLoaderState } = useStoreAppLoader();
2063
+ const { appDeviceType } = useStoreDeviceType();
2064
+ const { items } = quoteState;
2065
+ useEffectOnce(() => {
2066
+ if (!vehicleFormIsValid) {
2067
+ vehicleFormValidate();
2068
+ }
2069
+ if (vehicleFormIsValid && !driverFormIsValid) {
2070
+ driverFormValidate();
2071
+ }
2072
+ if (vehicleFormIsValid && driverFormIsValid && !carDiscountFormIsValid) {
2073
+ carDiscountFormValidate();
2074
+ }
2075
+ if (!quoteState.isRequested) {
2076
+ postRequestQuote(false);
2077
+ }
2078
+ window.scrollTo({
2079
+ top: 0,
2080
+ behavior: 'smooth',
2081
+ });
2082
+ });
2083
+ return (jsx("div", { className: "quote-page-content", children: !appLoaderState.isOpen
2084
+ && (jsxs(Fragment, { children: [jsxs("div", { className: "form-section-container", children: [appDeviceType === DeviceTypes.Mobile && (jsx(Fragment, { children: !!items?.length && (jsx(Fragment, { children: !quoteState.showCallMessage
2085
+ ? (jsx("div", { className: "offer-container", children: jsx(OfferSection, { isBestOffer: true, offerCompany: items[0]?.company, brokerCompany: items[0]?.brokerProfile, offerPrice: {
2086
+ monthly: items[0]?.priceMonthly,
2087
+ yearly: items[0]?.priceYearly,
2088
+ }, operationHours: {
2089
+ saturdayHours: items[0]?.brokerProfile.hoursSaturday,
2090
+ sundayHours: items[0]?.brokerProfile.hoursSunday,
2091
+ weekdayHours: items[0]?.brokerProfile.hoursWorkdays,
2092
+ }, phoneNumber: formatPhoneObject(items[0]?.brokerProfile.phone), redirectUrl: items[0]?.brokerProfile.redirectUrl || '' }) }))
2093
+ : jsx(SplashScreen, {}) })) })), jsx(SectionQuoteEdit, {}), jsx(SectionQuoteRecalc, {})] }), appDeviceType !== DeviceTypes.Mobile && quoteState.showCallMessage
2094
+ && jsx(SplashScreen, {}), !quoteState.showCallMessage
2095
+ && (jsx("div", { className: "offer-container", children: !!items?.length
2096
+ && items.map(({ company, brokerProfile, priceMonthly, priceYearly, }, index) => (jsx("div", { children: (appDeviceType !== DeviceTypes.Mobile || (appDeviceType === DeviceTypes.Mobile && index !== 0)) && (jsx(OfferSection, { isBestOffer: index === 0, offerCompany: company, brokerCompany: brokerProfile, offerPrice: {
2097
+ monthly: priceMonthly,
2098
+ yearly: priceYearly,
2099
+ }, operationHours: {
2100
+ saturdayHours: brokerProfile.hoursSaturday,
2101
+ sundayHours: brokerProfile.hoursSunday,
2102
+ weekdayHours: brokerProfile.hoursWorkdays,
2103
+ }, phoneNumber: formatPhoneObject(brokerProfile.phone), redirectUrl: brokerProfile.redirectUrl || '' })) }, index))) }))] })) }));
2104
+ };
2105
+
2106
+ const BlockAddressInfo = () => {
2107
+ const { status, errorMessage, } = useHandlerPostal(InsuranceTypes.Home);
2108
+ const { postalState, dispatchPostalState } = useStoreFormHomePostal();
2109
+ const { addressState, dispatchAddressState } = useStoreFormHomeAddress();
2110
+ const { item: { postalCode, city, provinceCode } } = postalState;
2111
+ const { addressStreet, unitApartmentNumber, inValidation } = addressState;
2112
+ const error = status === RequestStatusTypes.Error;
2113
+ const streetAddressErrMessage = !/\b\s+\b/.test(addressStreet) ? 'The street address should be in the format "123 Streetname Rd."' : '';
2114
+ const handleAddressStreetChange = ({ value }) => {
2115
+ dispatchAddressState({
2116
+ type: StoreFormHomeAddressActionTypes.FormHomeAddressStreetSet,
2117
+ payload: { addressStreet: value },
2118
+ });
2119
+ };
2120
+ const handleUnitApartmentNumberChange = ({ value }) => {
2121
+ dispatchAddressState({
2122
+ type: StoreFormHomeAddressActionTypes.FormHomeAddressUnitApartmentNumberSet,
2123
+ payload: { unitApartmentNumber: value },
2124
+ });
2125
+ };
2126
+ const handleCityChange = ({ value }) => {
2127
+ dispatchPostalState({
2128
+ type: StoreFormHomePostalActionTypes.FormHomePostalCitySet,
2129
+ payload: { city: value },
2130
+ });
2131
+ };
2132
+ const handlePostalCodeChange = ({ value }) => {
2133
+ dispatchPostalState({
2134
+ type: StoreFormHomePostalActionTypes.FormHomePostalCodeSet,
2135
+ payload: { postalCode: value },
2136
+ });
2137
+ };
2138
+ return (jsxs(Fragment, { children: [jsx(InputFormBox, { name: "addressStreet", title: "Street Address", onChange: handleAddressStreetChange, defaultValue: addressStreet, placeholder: "Street Name and Number", error: (!addressStreet || !/\b\s+\b/.test(addressStreet)) && inValidation, errorMessage: getErrorMessage(addressStreet, inValidation, streetAddressErrMessage) }), jsx(InputFormBox, { name: "unitApartmentNumber", title: "Unit/Apartment number", onChange: handleUnitApartmentNumberChange, defaultValue: unitApartmentNumber, placeholder: "Unit, Suite or Apartment Number" }), jsx(InputFormBox, { name: "city", title: "City", onChange: handleCityChange, defaultValue: city, placeholder: "City", error: !city && inValidation, errorMessage: getErrorMessage(city, inValidation) }), jsx(InputFormBox, { name: "postalCode", title: "Postal Code", onChange: handlePostalCodeChange, defaultValue: postalCode, placeholder: "", maxLength: 7, error: !postalCode && inValidation, errorMessage: getErrorMessage(postalCode, inValidation) }), error && jsx("p", { className: "error-message", children: errorMessage }), jsx(InputFormBox, { name: "province", title: "Province", defaultValue: provinceCode, placeholder: "", error: !provinceCode && inValidation, errorMessage: getErrorMessage(provinceCode, inValidation), disabled: true })] }));
2139
+ };
2140
+
2141
+ const SectionAddress = () => {
2142
+ const { addressState: { type, inValidation }, dispatchAddressState } = useStoreFormHomeAddress();
2143
+ const handleOwnerTypeChange = ({ value }) => {
2144
+ dispatchAddressState({
2145
+ type: StoreFormHomeAddressActionTypes.FormHomeAddressTypeSelect,
2146
+ payload: { type: value },
2147
+ });
2148
+ };
2149
+ return (jsxs("div", { className: "form-section", children: [jsx(SelectFormBox, { options: homeOwnerTypeOptions, name: "ownerType", onChange: handleOwnerTypeChange, defaultValue: type, title: "Type of Insurance", placeholder: "Select Type of Insurance", error: !type && inValidation, errorMessage: getErrorMessage(type, inValidation) }), jsx(BlockAddressInfo, {})] }));
2150
+ };
2151
+
2152
+ const PageAddress = () => {
2153
+ const { appConfigState: { appType } } = useStoreAppConfig();
2154
+ const { addressFormIsValid, addressFormValidate } = useValidationAddress();
2155
+ const validateForm = () => addressFormValidate(false);
2156
+ return (jsx("div", { className: "form-container", children: jsxs("div", { className: "form-section-container", children: [jsx(SectionAddress, {}), appType === AppTypes.TheBig
2157
+ ? (jsx(NavigationBottomTheBig, { formSteps: formSteps[InsuranceTypes.Home], validateForm: validateForm, formIsValid: addressFormIsValid }))
2158
+ : (jsx(NavigationBottom, { formSteps: formSteps[InsuranceTypes.Home], validateForm: validateForm, formIsValid: addressFormIsValid }))] }) }));
2159
+ };
2160
+
2161
+ const SectionApplicantInfo = () => {
2162
+ const { applicantState, dispatchApplicantInfoState } = useStoreFormHomeApplicantInfo();
2163
+ const { dwellingState, dispatchDwellingState } = useStoreFormHomeDwelling();
2164
+ const { quoterInfo, insured: { birthDay, birthMonth, birthYear, }, } = applicantState;
2165
+ const { firstName, } = quoterInfo || {};
2166
+ const { familiesCount, occupiedYear } = dwellingState;
2167
+ // VARIABLES =========
2168
+ const birthDate = birthYear ? `${birthYear}-${birthMonth || '01'}-${birthDay || '01'}` : '';
2169
+ const occupiedDate = occupiedYear ? `${occupiedYear}-${birthMonth || '01'}-${birthDay || '01'}` : '';
2170
+ const defaultDateOfBirth = {
2171
+ day: birthDay,
2172
+ month: birthMonth,
2173
+ year: birthYear,
2174
+ };
2175
+ const defaultOccupiedDate = {
2176
+ day: birthDay || '01',
2177
+ month: birthMonth || '01',
2178
+ year: occupiedYear,
2179
+ };
2180
+ const liveYears = getDifferenceInYears('', occupiedDate);
2181
+ const occupiedHintMessage = ((yearsCount) => {
2182
+ if (yearsCount === 0) {
2183
+ return 'You have lived at this location for less then a year.';
2184
+ }
2185
+ if (yearsCount > 0) {
2186
+ return `You have lived at this location for ${liveYears} years.`;
2187
+ }
2188
+ return '';
2189
+ })(liveYears);
2190
+ //= ===========
2191
+ const handleFirstNameChange = ({ value }) => {
2192
+ dispatchApplicantInfoState({
2193
+ type: StoreFormHomeApplicantInfoActionTypes.FormHomeApplicantFirstNameSet,
2194
+ payload: { firstName: value },
2195
+ });
2196
+ };
2197
+ const handleDateOfBirthChange = (dateType) => ({ value }) => {
2198
+ if (dateType === DateTypes.Day) {
2199
+ dispatchApplicantInfoState({
2200
+ type: StoreFormHomeApplicantInfoActionTypes.FormHomeApplicantBirthDaySelect,
2201
+ payload: { birthDay: value },
2202
+ });
2203
+ }
2204
+ if (dateType === DateTypes.Month) {
2205
+ dispatchApplicantInfoState({
2206
+ type: StoreFormHomeApplicantInfoActionTypes.FormHomeApplicantBirthMonthSelect,
2207
+ payload: { birthMonth: value },
2208
+ });
2209
+ }
2210
+ if (dateType === DateTypes.Year) {
2211
+ dispatchApplicantInfoState({
2212
+ type: StoreFormHomeApplicantInfoActionTypes.FormHomeApplicantBirthYearSelect,
2213
+ payload: { birthYear: value },
2214
+ });
2215
+ }
2216
+ };
2217
+ const handleFamiliesCountChange = ({ value }) => {
2218
+ dispatchDwellingState({
2219
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingFamiliesCountSelect,
2220
+ payload: { familiesCount: value },
2221
+ });
2222
+ };
2223
+ const handleOccupiedDateChange = (dateType) => ({ value }) => {
2224
+ if (dateType === DateTypes.Year) {
2225
+ dispatchDwellingState({
2226
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingOccupiedYearSelect,
2227
+ payload: { occupiedYear: value },
2228
+ });
2229
+ }
2230
+ };
2231
+ return (jsxs("div", { className: "form-section", children: [jsx(InputFormBox, { name: "firstName", title: "First Name", onChange: handleFirstNameChange, defaultValue: firstName, placeholder: "Applicant First Name", error: !firstName && applicantState.inValidation, errorMessage: getErrorMessage(firstName, applicantState.inValidation) }), jsx(DateSelectFormBox, { name: "dateOfBirth", dateNames: ['birthYear', 'birthMonth', 'birthDay'], onDateChange: handleDateOfBirthChange, defaultValue: defaultDateOfBirth, title: "Date of birth of the eldest applicant", description: "If there\u2019s more than one applicant, please use the date of birth of the eldest applicant.", error: applicantState.inValidation, errorMessage: getDateErrorMessage([birthDay || '', birthMonth || '', birthYear || ''], applicantState.inValidation), maxDate: subYearsFromDate('', 14), isDay: true }), jsxs("div", { children: [jsx(SelectFormBox, { options: residentsOptions, name: "familiesCount", onChange: handleFamiliesCountChange, defaultValue: getSelectedOption(residentsOptions, familiesCount), title: "Who occupies this residence?", placeholder: "Select", description: "Let us know whether this address is being used for residential or commercial purposes.", autoSelectIfValueIsOutOfOptions: false, error: !familiesCount && applicantState.inValidation, errorMessage: getErrorMessage(`${familiesCount}`.toString(), applicantState.inValidation) }), familiesCount?.toString() === '0' && (jsx("p", { className: "warning-message", children: "Please contact a licenced representative at 1-855-331-6933 from Monday \u2013 Saturday: 9:30 AM \u2013 9:30 PM to get an accurate quote. With properties that are used for commercial purpose, speaking with a representative will ensure that the incidents are accurately incorporated into your insurance quote." }))] }), jsx(DateSelectFormBox, { name: "occupiedDate", dateNames: ['occupiedYear'], datePlaceholders: ['Select'], onDateChange: handleOccupiedDateChange, defaultValue: defaultOccupiedDate, title: "What year did you move into this property?", hintMessage: occupiedHintMessage, errorMessage: getDateErrorMessage(['01', '01', occupiedYear || ''], applicantState.inValidation), error: applicantState.inValidation, minDate: birthDate, isMonth: false })] }));
2232
+ };
2233
+
2234
+ const getInsuranceYearsOptions = (maxValue) => (insuredYearsOptions.filter((option) => +option.value <= +maxValue));
2235
+
2236
+ const SectionApplicantInsurancePolicy = () => {
2237
+ const { applicantState, dispatchApplicantInsuranceState } = useStoreFormHomeApplicantInsurance();
2238
+ const { discountState } = useStoreFormHomeDiscount();
2239
+ const { policyStartYear, policyStartMonth } = discountState;
2240
+ const { insuredCurrent, insuredBefore, insured: { dateInsuredCurrent, dateInsuredSince } } = applicantState;
2241
+ // const defaultListedDate: SelectDateInterface = {
2242
+ // year: listedYear as string,
2243
+ // month: listedMonth as string,
2244
+ // day: '01',
2245
+ // };
2246
+ // const defaultInsuredDate: SelectDateInterface = {
2247
+ // year: insuredYear as string,
2248
+ // month: insuredMonth as string,
2249
+ // day: '01',
2250
+ // };
2251
+ //
2252
+ const defaultPolicyStartDate = {
2253
+ year: policyStartYear,
2254
+ month: policyStartMonth,
2255
+ day: '01',
2256
+ };
2257
+ const handleInsuredBeforeChange = ({ value }) => {
2258
+ dispatchApplicantInsuranceState({
2259
+ type: StoreFormHomeApplicantInsuranceActionTypes.FormHomeApplicantInsuredBeforeSelect,
2260
+ payload: { insuredBefore: value },
2261
+ });
2262
+ };
2263
+ const handleInsuredCurrentChange = ({ value }) => {
2264
+ dispatchApplicantInsuranceState({
2265
+ type: StoreFormHomeApplicantInsuranceActionTypes.FormHomeApplicantInsuredCurrentSelect,
2266
+ payload: { insuredCurrent: value },
2267
+ });
2268
+ };
2269
+ const handlePolicyStartChange = (dateType) => ({ value }) => {
2270
+ if (dateType === DateTypes.Month) {
2271
+ dispatchApplicantInsuranceState({
2272
+ type: StoreFormHomeApplicantInsuranceActionTypes.FormHomeApplicantPolicyStartMonthSelect,
2273
+ payload: { policyStartMonth: value },
2274
+ });
2275
+ }
2276
+ if (dateType === DateTypes.Year) {
2277
+ dispatchApplicantInsuranceState({
2278
+ type: StoreFormHomeApplicantInsuranceActionTypes.FormHomeApplicantPolicyStartYearSelect,
2279
+ payload: { policyStartYear: value },
2280
+ });
2281
+ }
2282
+ };
2283
+ const handleInsuredSinceDateChange = ({ value }) => {
2284
+ dispatchApplicantInsuranceState({
2285
+ type: StoreFormHomeApplicantInsuranceActionTypes.FormHomeApplicantDateInsuredSinceSelect,
2286
+ payload: { dateInsuredSince: value },
2287
+ });
2288
+ };
2289
+ const handleInsuredCurrentDateChange = ({ value }) => {
2290
+ dispatchApplicantInsuranceState({
2291
+ type: StoreFormHomeApplicantInsuranceActionTypes.FormHomeApplicantDateInsuredCurrentSelect,
2292
+ payload: { dateInsuredCurrent: value },
2293
+ });
2294
+ };
2295
+ return (jsxs("div", { className: "form-section", children: [jsx(DateSelectFormBox, { name: "policyStart", dateNames: ['policyStartYear', 'policyStartMonth'], onDateChange: handlePolicyStartChange, defaultValue: defaultPolicyStartDate, title: "When do you want to start the policy?", errorMessage: getDateErrorMessage(['01', policyStartMonth || '', policyStartYear || ''], applicantState.inValidation), error: applicantState.inValidation, minDate: getFormattedDate('', 'yyyy-MM-dd'), maxDate: getFormattedDate(addYearsToDate('', 1), 'yyyy-MM-dd') }), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleInsuredCurrentChange, name: "insuredCurrent", defaultValue: getSelectedOption(yesNoOptions, insuredCurrent), title: "Do you have a current active policy?", description: "Insurers offer better rates to customers who have a long history of coverage without any gaps." }), insuredCurrent
2296
+ && (jsxs(Fragment, { children: [jsx(SelectFormBox, { options: insuredYearsOptions, name: "dateInsuredSince", onChange: handleInsuredSinceDateChange, defaultValue: getSelectedOption(insuredYearsOptions, dateInsuredSince), title: "How long have you had insurance without gaps?", description: "Let us know how long you\u2019ve had home insurance without letting the policy expire. It\u2019s fine if you\u2019ve changed providers in the past: what matters is that you switched before your coverage expired.", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false, error: !dateInsuredSince && applicantState.inValidation, errorMessage: getErrorMessage(dateInsuredSince, applicantState.inValidation) }), jsx(SelectFormBox, { options: getInsuranceYearsOptions(dateInsuredSince || insuredYearsOptions.length.toString()), name: "dateInsuredCurrent", onChange: handleInsuredCurrentDateChange, defaultValue: getSelectedOption(getInsuranceYearsOptions(dateInsuredSince || insuredYearsOptions.length.toString()), dateInsuredCurrent), title: "How long have you been insured with your current company?", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false, error: !dateInsuredCurrent && applicantState.inValidation, errorMessage: getErrorMessage(dateInsuredCurrent, applicantState.inValidation) })] })), (!insuredCurrent && insuredCurrent !== null)
2297
+ && (jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleInsuredBeforeChange, name: "insuredBefore", defaultValue: getSelectedOption(yesNoOptions, insuredBefore), title: "Have you ever had a home insurance policy?", description: "The gender on the policy should match your official applicant\u2019s licence. Some insurers analyze a applicant's sex when creating a policy. Men are typically considered higher risk than female applicants, but the statistics supporting this idea vary from province to province. On average, men and women pay roughly the same for insurance, though." }))] }));
2298
+ };
2299
+
2300
+ const SectionApplicantCancellation = () => {
2301
+ const { applicantState, dispatchApplicantCancellationState } = useStoreFormHomeApplicantCancellation();
2302
+ const { dispatchApplicantBaseState } = useStoreFormHomeApplicantBase();
2303
+ const { insuranceCancellation, insuranceCancellationList } = applicantState;
2304
+ const { appConfigState: { appType } } = useStoreAppConfig();
2305
+ const isTheBig = appType === AppTypes.TheBig;
2306
+ const handleIconClick = (index) => () => {
2307
+ dispatchApplicantCancellationState({
2308
+ type: StoreFormHomeApplicantCancellationActionTypes.FormHomeApplicantCancellationDelete,
2309
+ payload: { itemIndex: index },
2310
+ });
2311
+ };
2312
+ const handleCancellationChange = ({ value }) => {
2313
+ dispatchApplicantCancellationState({
2314
+ type: StoreFormHomeApplicantCancellationActionTypes.FormHomeApplicantCancellationSelect,
2315
+ payload: { insuranceCancellation: value },
2316
+ });
2317
+ if (!value) {
2318
+ dispatchApplicantBaseState({
2319
+ type: StoreFormHomeApplicantBaseActionTypes.FormHomeApplicantInitialList,
2320
+ payload: { listKey: ApplicantListTypes.InsuranceCancellation },
2321
+ });
2322
+ }
2323
+ };
2324
+ const handleAddButtonClick = () => {
2325
+ dispatchApplicantCancellationState({
2326
+ type: StoreFormHomeApplicantCancellationActionTypes.FormHomeApplicantCancellationAdd,
2327
+ });
2328
+ };
2329
+ const handleCancellationDateChange = (index) => (dateType) => ({ value }) => {
2330
+ if (dateType === DateTypes.Month) {
2331
+ dispatchApplicantCancellationState({
2332
+ type: StoreFormHomeApplicantCancellationActionTypes.FormHomeApplicantCancellationMonthSelect,
2333
+ payload: {
2334
+ cancellationMonth: value,
2335
+ index,
2336
+ },
2337
+ });
2338
+ }
2339
+ if (dateType === DateTypes.Year) {
2340
+ dispatchApplicantCancellationState({
2341
+ type: StoreFormHomeApplicantCancellationActionTypes.FormHomeApplicantCancellationYearSelect,
2342
+ payload: {
2343
+ cancellationYear: value,
2344
+ index,
2345
+ },
2346
+ });
2347
+ }
2348
+ };
2349
+ return (jsxs("div", { className: "form-section", children: [jsx("h2", { className: isTheBig ? 'thebig-bold' : '', children: "Cancellations" }), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleCancellationChange, name: "insuranceCancellation", defaultValue: getSelectedOption(yesNoOptions, insuranceCancellation), title: "How many cancellations have you had due to non-payment?" }), insuranceCancellation && (jsxs(Fragment, { children: [insuranceCancellationList?.map(({ cancellationYear, cancellationMonth, }, index) => {
2350
+ const defaultCancellationDate = {
2351
+ year: cancellationYear,
2352
+ month: cancellationMonth,
2353
+ day: '01',
2354
+ };
2355
+ return (jsxs("div", { className: "list-block", children: [jsx("hr", {}), jsx("div", { className: "list-item", children: jsx(DateSelectFormBox, { name: `cancellationDate-${index}`, dateNames: [`cancellationYear-${index}`, `cancellationMonth-${index}`], onDateChange: handleCancellationDateChange(index), defaultValue: defaultCancellationDate, title: "What was the date of the cancellation?", isRemovable: insuranceCancellationList.length > 1, onIconClick: handleIconClick(index), errorMessage: getDateErrorMessage(['01', cancellationMonth, cancellationYear], applicantState.inValidation), error: applicantState.inValidation }) })] }, `insurance-cancellation-${index}`));
2356
+ }), insuranceCancellationList && insuranceCancellationList.length < 3
2357
+ ? (jsx(ButtonBase, { category: CategoryTypes.Filled, onClick: handleAddButtonClick, size: SizeTypes.Medium, color: ColorTypes.Primary, label: "Add another" })) : (jsx("p", { className: "warning-message", children: "If You have 3+ Cancellations, please contact a licenced representative at XXXXXXXXXXX from Monday \u2013 Saturday: 9:30 AM \u2013 9:30 PM to get an accurate quote. With quotes that have more than two cancellations, speaking with a representative will ensure that the incidents are accurately incorporated into your insurance quote." }))] }))] }));
2358
+ };
2359
+
2360
+ const SectionApplicantClaim = () => {
2361
+ const { applicantState, dispatchApplicantClaimState } = useStoreFormHomeApplicantClaim();
2362
+ const { dispatchApplicantBaseState } = useStoreFormHomeApplicantBase();
2363
+ const { insuranceClaim, insuranceClaimList } = applicantState;
2364
+ const { appConfigState: { appType } } = useStoreAppConfig();
2365
+ const isTheBig = appType === AppTypes.TheBig;
2366
+ const handleIconClick = (index) => () => {
2367
+ dispatchApplicantClaimState({
2368
+ type: StoreFormHomeApplicantClaimActionTypes.FormHomeApplicantClaimDelete,
2369
+ payload: { itemIndex: index },
2370
+ });
2371
+ };
2372
+ const handleClaimChange = ({ value }) => {
2373
+ dispatchApplicantClaimState({
2374
+ type: StoreFormHomeApplicantClaimActionTypes.FormHomeApplicantClaimSelect,
2375
+ payload: { insuranceClaim: value },
2376
+ });
2377
+ if (!value) {
2378
+ dispatchApplicantBaseState({
2379
+ type: StoreFormHomeApplicantBaseActionTypes.FormHomeApplicantInitialList,
2380
+ payload: { listKey: ApplicantListTypes.InsuranceClaim },
2381
+ });
2382
+ }
2383
+ };
2384
+ const handleAddButtonClick = () => {
2385
+ dispatchApplicantClaimState({
2386
+ type: StoreFormHomeApplicantClaimActionTypes.FormHomeApplicantClaimAdd,
2387
+ });
2388
+ };
2389
+ const handleClaimTypeChange = (index) => ({ value }) => {
2390
+ dispatchApplicantClaimState({
2391
+ type: StoreFormHomeApplicantClaimActionTypes.FormHomeApplicantClaimTypeSelect,
2392
+ payload: {
2393
+ claimType: value,
2394
+ index,
2395
+ },
2396
+ });
2397
+ };
2398
+ const handleClaimDateChange = (index) => (dateType) => ({ value }) => {
2399
+ if (dateType === DateTypes.Month) {
2400
+ dispatchApplicantClaimState({
2401
+ type: StoreFormHomeApplicantClaimActionTypes.FormHomeApplicantClaimMonthSelect,
2402
+ payload: {
2403
+ claimMonth: value,
2404
+ index,
2405
+ },
2406
+ });
2407
+ }
2408
+ if (dateType === DateTypes.Year) {
2409
+ dispatchApplicantClaimState({
2410
+ type: StoreFormHomeApplicantClaimActionTypes.FormHomeApplicantClaimYearSelect,
2411
+ payload: {
2412
+ claimYear: value,
2413
+ index,
2414
+ },
2415
+ });
2416
+ }
2417
+ };
2418
+ return (jsxs("div", { className: "form-section", children: [jsx("h2", { className: isTheBig ? 'thebig-bold' : '', children: "Claims" }), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleClaimChange, name: "insuranceClaim", defaultValue: getSelectedOption(yesNoOptions, insuranceClaim), title: "Any claims within the last 5 years?", description: "Your quotes will be more accurate if you let us know your claims history." }), insuranceClaim && (jsxs(Fragment, { children: [insuranceClaimList?.map(({ claimYear, claimMonth, claimType, }, index) => {
2419
+ const defaultClaimDate = {
2420
+ year: claimYear,
2421
+ month: claimMonth,
2422
+ day: '01',
2423
+ };
2424
+ return (jsxs("div", { className: "list-block", children: [jsx("hr", {}), jsxs("div", { className: "list-item", children: [jsx(DateSelectFormBox, { name: `claimDate-${index}`, dateNames: [`claimYear-${index}`, `claimMonth-${index}`], onDateChange: handleClaimDateChange(index), defaultValue: defaultClaimDate, title: "Claim Date", isRemovable: insuranceClaimList.length > 1, onIconClick: handleIconClick(index), errorMessage: getDateErrorMessage(['01', claimMonth, claimYear], applicantState.inValidation), error: applicantState.inValidation, minDate: subYearsFromDate('', 5) }), jsx(SelectFormBox, { options: claimTypeOptions, name: `claim-type-${index}`, onChange: handleClaimTypeChange(index), defaultValue: claimType, title: "Claim Type", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false, error: !claimType && applicantState.inValidation, errorMessage: getErrorMessage(claimType, applicantState.inValidation) })] })] }, `driver-claim-${index}`));
2425
+ }), insuranceClaimList && insuranceClaimList.length < 3
2426
+ ? (jsx(ButtonBase, { category: CategoryTypes.Filled, onClick: handleAddButtonClick, size: SizeTypes.Medium, color: ColorTypes.Primary, label: "Add another" })) : (jsx("p", { className: "warning-message", children: "If You have 3+ Claims, please contact a licenced representative at XXXXXXXXXXX from Monday \u2013 Saturday: 9:30 AM \u2013 9:30 PM to get an accurate quote. With quotes that have more than two claims, speaking with a representative will ensure that the incidents are accurately incorporated into your insurance quote." }))] }))] }));
2427
+ };
2428
+
2429
+ const PageApplicant = () => {
2430
+ const { appConfigState: { appType } } = useStoreAppConfig();
2431
+ const { applicantState: { insuredCurrent, insuredBefore }, } = useStoreFormHomeApplicantBase();
2432
+ const { addressFormIsValid, addressFormValidate } = useValidationAddress();
2433
+ const { applicantFormIsValid, applicantFormValidate } = useValidationApplicant();
2434
+ useEffectOnce(() => {
2435
+ if (!addressFormIsValid) {
2436
+ addressFormValidate();
2437
+ }
2438
+ window.scrollTo({
2439
+ top: 0,
2440
+ behavior: 'smooth',
2441
+ });
2442
+ });
2443
+ const validateForm = () => applicantFormValidate(false);
2444
+ return (jsx("div", { className: "form-container", children: jsxs("div", { className: "form-section-container", children: [jsx(SectionApplicantInfo, {}), jsx(SectionApplicantInsurancePolicy, {}), (insuredCurrent || insuredBefore)
2445
+ && (jsxs(Fragment, { children: [jsx(SectionApplicantClaim, {}), jsx(SectionApplicantCancellation, {})] })), appType === AppTypes.TheBig
2446
+ ? (jsx(NavigationBottomTheBig, { formSteps: formSteps[InsuranceTypes.Home], validateForm: validateForm, formIsValid: applicantFormIsValid }))
2447
+ : (jsx(NavigationBottom, { formSteps: formSteps[InsuranceTypes.Home], validateForm: validateForm, formIsValid: applicantFormIsValid }))] }) }));
2448
+ };
2449
+
2450
+ const SectionDwelling = () => {
2451
+ const { dwellingState, dispatchDwellingState } = useStoreFormHomeDwelling();
2452
+ const { builtYear, livingArea, exteriorFinish, constructionType, garageType, basementFinishPercent, storeysCount, roofReplaceYear, fireHallDistance, fireHydrantDistance,
2453
+ // replacementCost,
2454
+ heatings, buildingStructure, } = dwellingState;
2455
+ const builtDate = {
2456
+ day: '01',
2457
+ month: '01',
2458
+ year: builtYear,
2459
+ };
2460
+ const roofReplaceDate = {
2461
+ day: '01',
2462
+ month: '01',
2463
+ year: roofReplaceYear,
2464
+ };
2465
+ useEffectOnce(() => {
2466
+ const keys = [
2467
+ 'builtYear',
2468
+ 'livingArea',
2469
+ 'roofReplaceYear',
2470
+ 'fireHallDistance',
2471
+ 'fireHydrantDistance',
2472
+ 'buildingStructure',
2473
+ // 'replacementCost': string, // TODO: need to be approved
2474
+ ];
2475
+ const listKeys = ['heatings'];
2476
+ const errors = [];
2477
+ Object.keys(dwellingState).forEach((key) => {
2478
+ if (keys.includes(key) && !dwellingState[key]) {
2479
+ errors.push(key);
2480
+ }
2481
+ if (listKeys.includes(key)) {
2482
+ dwellingState[key].forEach((listItem, listItemIndex) => {
2483
+ Object.keys(listItem).forEach((objectKey) => {
2484
+ if (!listItem[objectKey]) {
2485
+ errors.push(`heatings-${listItemIndex}`);
2486
+ }
2487
+ });
2488
+ });
2489
+ }
2490
+ });
2491
+ if (errors.length) {
2492
+ const element = document.getElementsByName(errors[0])[0];
2493
+ element?.scrollIntoView({ block: 'center', behavior: 'smooth' });
2494
+ }
2495
+ });
2496
+ const handleBuiltDateChange = (dateType) => ({ value }) => {
2497
+ if (dateType === DateTypes.Year) {
2498
+ dispatchDwellingState({
2499
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingBuiltYearSelect,
2500
+ payload: { builtYear: value },
2501
+ });
2502
+ }
2503
+ };
2504
+ const handleLivingAreaChange = ({ value }) => {
2505
+ dispatchDwellingState({
2506
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingLivingAreaSelect,
2507
+ payload: { livingArea: value },
2508
+ });
2509
+ };
2510
+ const handleExteriorFinishChange = ({ value }) => {
2511
+ dispatchDwellingState({
2512
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingExteriorFinishSelect,
2513
+ payload: { exteriorFinish: value },
2514
+ });
2515
+ };
2516
+ const handleConstructionTypeChange = ({ value }) => {
2517
+ dispatchDwellingState({
2518
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingConstructionTypeSelect,
2519
+ payload: { constructionType: value },
2520
+ });
2521
+ };
2522
+ const handleGarageTypeChange = ({ value }) => {
2523
+ dispatchDwellingState({
2524
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingGarageTypeSelect,
2525
+ payload: { garageType: value },
2526
+ });
2527
+ };
2528
+ const handleBasementFinishPercentChange = ({ value }) => {
2529
+ dispatchDwellingState({
2530
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingBasementFinishPercentSelect,
2531
+ payload: { basementFinishPercent: value },
2532
+ });
2533
+ };
2534
+ const handleStoreysCountChange = ({ value }) => {
2535
+ dispatchDwellingState({
2536
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingStoreysCountSelect,
2537
+ payload: { storeysCount: value },
2538
+ });
2539
+ };
2540
+ const handleRoofReplaceDateChange = (dateType) => ({ value }) => {
2541
+ if (dateType === DateTypes.Year) {
2542
+ dispatchDwellingState({
2543
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingRoofReplaceYearSelect,
2544
+ payload: { roofReplaceYear: value },
2545
+ });
2546
+ }
2547
+ };
2548
+ const handleFireHallDistanceChange = ({ value }) => {
2549
+ dispatchDwellingState({
2550
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingFireHallDistanceSelect,
2551
+ payload: { fireHallDistance: value },
2552
+ });
2553
+ };
2554
+ const handleFireHydrantDistanceChange = ({ value }) => {
2555
+ dispatchDwellingState({
2556
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingFireHydrantDistanceSelect,
2557
+ payload: { fireHydrantDistance: value },
2558
+ });
2559
+ };
2560
+ const handleHeatingTypeChange = (index) => ({ value }) => {
2561
+ dispatchDwellingState({
2562
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingHeatingSelect,
2563
+ payload: {
2564
+ type: value,
2565
+ index,
2566
+ },
2567
+ });
2568
+ };
2569
+ const handleBuildingStructureChange = ({ value }) => {
2570
+ dispatchDwellingState({
2571
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingBuildingStructureSelect,
2572
+ payload: { buildingStructure: value },
2573
+ });
2574
+ };
2575
+ // const handleReplacementCostChange = ({ value }: OnChangeEventInterface) => {
2576
+ // dispatchDwellingState({
2577
+ // type: StoreFormHomeDwellingActionTypes.FormHomeDwellingReplacementCostSelect,
2578
+ // payload: { replacementCost: value as string },
2579
+ // });
2580
+ // };
2581
+ return (jsxs("div", { className: "form-section top-section", children: [jsx(DateSelectFormBox, { name: "builtDate", dateNames: ['builtYear'], datePlaceholders: ['Select'], onDateChange: handleBuiltDateChange, defaultValue: builtDate, title: "What year was your property built?", errorMessage: getDateErrorMessage(['01', '01', builtYear || ''], dwellingState.inValidation), error: dwellingState.inValidation, isMonth: false }), jsx(InputFormBox, { name: "livingArea", title: "What is the total living area of your property (in sq ft)?", type: InputTypes.Number, onChange: handleLivingAreaChange, defaultValue: livingArea, placeholder: "Living area", error: !livingArea && dwellingState.inValidation, errorMessage: getErrorMessage(livingArea, dwellingState.inValidation) }), jsx(SelectFormBox, { options: exteriorFinishOptions, name: "exteriorFinish", onChange: handleExteriorFinishChange, defaultValue: getSelectedOption(exteriorFinishOptions, exteriorFinish), title: "What is the exterior finish of your property?", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false }), jsx(SelectFormBox, { options: constructionTypeOptions, name: "constructionType", onChange: handleConstructionTypeChange, defaultValue: getSelectedOption(constructionTypeOptions, constructionType), title: "What is the construction type of your property?", placeholder: "Select", description: "Insurance companies need to know the construction type of your property in order to provide a quote. Generally, if your property is made with a more solid material such as brick, it is less combustible and the cost of insurance is lower. Most properties built since 1970 are made of wood even though they may have a brick, concrete or stone exterior. Brick and masonry construction was more common in houses built before 1970. Most high-rise buildings are constructed with fire-resistive material. Select \u2018Other\u2019 if you are unsure of your property construction type.", autoSelectIfValueIsOutOfOptions: false }), jsx(SelectFormBox, { options: garageTypeOptions, name: "garageType", onChange: handleGarageTypeChange, defaultValue: getSelectedOption(garageTypeOptions, garageType), title: "What is the type of garage?", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false }), jsx(SelectFormBox, { options: getNumericOptions(0, 100, '%'), name: "basementFinishPercent", onChange: handleBasementFinishPercentChange, defaultValue: getSelectedOption(getNumericOptions(0, 100, '%'), basementFinishPercent), title: "What percentage of the basement is finished?", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false }), jsx(InputFormBox, { name: "storeysCount", title: "How many storeys are there in your property?", type: InputTypes.Number, onChange: handleStoreysCountChange, defaultValue: storeysCount, placeholder: "Storeys count", minValue: 1, maxValue: 30 }), jsx(DateSelectFormBox, { name: "roofReplaceDate", dateNames: ['roofReplaceYear'], datePlaceholders: ['Select'], onDateChange: handleRoofReplaceDateChange, defaultValue: roofReplaceDate, title: "What year was your roof most recently replaced?", errorMessage: getDateErrorMessage(['01', '01', roofReplaceYear || ''], dwellingState.inValidation), error: dwellingState.inValidation, isMonth: false }), jsx(SelectFormBox, { options: fireHallDistanceOptions, name: "fireHallDistance", onChange: handleFireHallDistanceChange, defaultValue: getSelectedOption(fireHallDistanceOptions, fireHallDistance), title: "What is the approximate distance to the nearest fire hall?", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false, error: !fireHallDistance && dwellingState.inValidation, errorMessage: getErrorMessage(fireHallDistance.toString(), dwellingState.inValidation) }), jsx(SelectFormBox, { options: fireHydrantDistanceOptions, name: "fireHydrantDistance", onChange: handleFireHydrantDistanceChange, defaultValue: getSelectedOption(fireHydrantDistanceOptions, fireHydrantDistance), title: "What is the approximate distance to the nearest fire hydrant?", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false, error: !fireHydrantDistance && dwellingState.inValidation, errorMessage: getErrorMessage(fireHydrantDistance.toString(), dwellingState.inValidation) }), jsx(SelectFormBox, { options: heatingTypeOptions, name: `heatings-${0}`, onChange: handleHeatingTypeChange(0), defaultValue: getSelectedOption(heatingTypeOptions, heatings[0].type), title: "What is the type of the primary heating installed at your property?", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false, error: !heatings[0].type && dwellingState.inValidation, errorMessage: getErrorMessage(heatings[0].type, dwellingState.inValidation) }), jsx(SelectFormBox, { options: heatingTypeOptions, name: `heatings-${1}`, onChange: handleHeatingTypeChange(1), defaultValue: getSelectedOption(heatingTypeOptions, heatings[1].type), title: "What is the type of the secondary heating installed at your property?", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false, error: !heatings[1].type && dwellingState.inValidation, errorMessage: getErrorMessage(heatings[1].type, dwellingState.inValidation) }), jsx(SelectFormBox, { options: buildingStructureOptions, name: "buildingStructure", onChange: handleBuildingStructureChange, defaultValue: getSelectedOption(buildingStructureOptions, buildingStructure), title: "What is the style of the building?", placeholder: "Select", autoSelectIfValueIsOutOfOptions: false, error: !buildingStructure && dwellingState.inValidation, errorMessage: getErrorMessage(buildingStructure, dwellingState.inValidation) })] }));
2582
+ };
2583
+
2584
+ const PageProperty = () => {
2585
+ const { appConfigState: { appType } } = useStoreAppConfig();
2586
+ const { addressFormIsValid, addressFormValidate } = useValidationAddress();
2587
+ const { applicantFormIsValid, applicantFormValidate } = useValidationApplicant();
2588
+ const { dwellingFormIsValid, dwellingFormValidate } = useValidationDwelling();
2589
+ const [isOpen, setIsOpen] = useState(true);
2590
+ useEffectOnce(() => {
2591
+ if (!addressFormIsValid) {
2592
+ addressFormValidate();
2593
+ }
2594
+ if (!applicantFormIsValid) {
2595
+ applicantFormValidate();
2596
+ }
2597
+ window.scrollTo({
2598
+ top: 0,
2599
+ behavior: 'smooth',
2600
+ });
2601
+ });
2602
+ const validateForm = () => dwellingFormValidate(false);
2603
+ const handleIconClick = () => {
2604
+ setIsOpen(false);
2605
+ };
2606
+ return (jsxs(Fragment, { children: [isOpen && jsx(InfoMessage, { text: "We have gathered and pre-filled the information below about your property to simplify the quote process. Please review to make sure it is accurate and provide any missing details.", isRemovable: true, onIconClick: handleIconClick }), jsx("div", { className: "form-container", children: jsxs("div", { className: "form-section-container", children: [jsx(SectionDwelling, {}), appType === AppTypes.TheBig
2607
+ ? (jsx(NavigationBottomTheBig, { formSteps: formSteps[InsuranceTypes.Home], validateForm: validateForm, formIsValid: dwellingFormIsValid }))
2608
+ : (jsx(NavigationBottom, { formSteps: formSteps[InsuranceTypes.Home], validateForm: validateForm, formIsValid: dwellingFormIsValid }))] }) })] }));
2609
+ };
2610
+
2611
+ const dwellingSwitchInfo = [
2612
+ { name: 'burglarAlarm', title: 'a monitored burglar alarm' },
2613
+ { name: 'fireAlarm', title: 'a monitored fire alarm' },
2614
+ { name: 'sprinkler', title: 'a sprinkler system' },
2615
+ { name: 'deadbolt', title: 'deadbolt locks on all entrances' },
2616
+ ];
2617
+ const dwellingSelectInfo = [
2618
+ { name: 'fireExtinguishersCount', title: 'Number of fire extinguishers' },
2619
+ { name: 'mortgageCount', title: 'How many mortgages do you have on the property?' },
2620
+ ];
2621
+ const BlockDwellingInfo = () => {
2622
+ const { dwellingState, } = useStoreFormHomeDwelling();
2623
+ const { applicantState: { insured: { nonsmoker } }, dispatchApplicantInfoState } = useStoreFormHomeApplicantInfo();
2624
+ const { dispatchDwellingState } = useStoreFormHomeDwelling();
2625
+ // const { dispatchDiscountState } = useStoreFormHomeDiscount();
2626
+ const handleChange = (name) => ({ value }) => {
2627
+ dispatchDwellingState({
2628
+ type: StoreFormHomeDwellingActionTypes[`FormHomeDwelling${capitalize(name)}Select`],
2629
+ payload: { [name]: value },
2630
+ });
2631
+ };
2632
+ const handleSmokerChange = ({ value }) => {
2633
+ dispatchApplicantInfoState({
2634
+ type: StoreFormHomeApplicantInfoActionTypes.FormHomeApplicantNonsmokerSelect,
2635
+ payload: {
2636
+ nonsmoker: value,
2637
+ },
2638
+ });
2639
+ };
2640
+ return (jsxs(Fragment, { children: [dwellingSwitchInfo.map(({ name, title }, index) => (jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleChange(name), name: name, defaultValue: getSelectedOption(yesNoOptions, dwellingState[name]), title: `Does your property have ${title}?` }, `dwelling-switch-info-${index}`))), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleSmokerChange, name: "nonsmoker", defaultValue: getSelectedOption(yesNoOptions, nonsmoker), title: "Are the occupants non-smokers?" }), dwellingSelectInfo.map(({ name, title }, index) => (jsx(SelectFormBox, { options: constructionTypeOptions, name: name, onChange: handleChange(name), defaultValue: getSelectedOption(constructionTypeOptions, dwellingState[name]), title: title, placeholder: "Select", autoSelectIfValueIsOutOfOptions: false, error: !dwellingState[name] && dwellingState.inValidation, errorMessage: getErrorMessage(dwellingState[name], dwellingState.inValidation) }, `dwelling-select-info-${index}`)))] }));
2641
+ };
2642
+
2643
+ const BlockNextPageInfo = () => {
2644
+ const { appConfigState: { appType } } = useStoreAppConfig();
2645
+ const isTheBig = appType === AppTypes.TheBig;
2646
+ 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" }), "."] }) })] })) }));
2647
+ };
2648
+
2649
+ const BlockSubmit = ({ className, label, buttonSize, isRecalc = false, }) => {
2650
+ const { postRequestQuote } = QuoteDataHandler();
2651
+ const handleGetQuotesClick = () => {
2652
+ postRequestQuote(isRecalc);
2653
+ };
2654
+ return (jsx(ButtonBase, { className: className, size: buttonSize, category: CategoryTypes.Filled, onClick: handleGetQuotesClick, color: ColorTypes.Primary, label: label }));
2655
+ };
2656
+ BlockSubmit.defaultProps = {
2657
+ buttonSize: SizeTypes.Large,
2658
+ label: 'Get Your Quotes',
2659
+ className: '',
2660
+ };
2661
+
2662
+ const SectionDiscountInfo = () => {
2663
+ const { appConfigState: { appType } } = useStoreAppConfig();
2664
+ const isTheBig = appType === AppTypes.TheBig;
2665
+ const { discountState, dispatchDiscountState } = useStoreFormHomeDiscount();
2666
+ const { applicantState, dispatchApplicantInfoState } = useStoreFormHomeApplicantInfo();
2667
+ const { validateEmail, errorMessage } = useHandlerQuoterEmail();
2668
+ const { quoterInfo = {}, } = applicantState;
2669
+ const { multiplePoliciesDiscount, emailTo: { email, emailStatus }, } = discountState;
2670
+ const { firstName = '', lastName = '', phone = '', } = quoterInfo;
2671
+ const handleMultiplePolicyChange = ({ value }) => {
2672
+ dispatchDiscountState({
2673
+ type: StoreFormHomeDiscountActionTypes.FormHomeDiscountMultiplePoliciesSelect,
2674
+ payload: { multiplePoliciesDiscount: value },
2675
+ });
2676
+ };
2677
+ const handleFirstNameChange = ({ value }) => {
2678
+ dispatchApplicantInfoState({
2679
+ type: StoreFormHomeApplicantInfoActionTypes.FormHomeApplicantFirstNameSet,
2680
+ payload: { firstName: value },
2681
+ });
2682
+ };
2683
+ const handleLastNameChange = ({ value }) => {
2684
+ dispatchApplicantInfoState({
2685
+ type: StoreFormHomeApplicantInfoActionTypes.FormHomeApplicantLastNameSet,
2686
+ payload: { lastName: value },
2687
+ });
2688
+ };
2689
+ const handlePhoneNumberChange = ({ value }) => {
2690
+ dispatchApplicantInfoState({
2691
+ type: StoreFormHomeApplicantInfoActionTypes.FormHomeApplicantPhoneSet,
2692
+ payload: { phone: value },
2693
+ });
2694
+ };
2695
+ const handleEmailChange = ({ value }) => {
2696
+ validateEmail(value);
2697
+ };
2698
+ return (jsxs("div", { className: "form-section", children: [jsx("h5", { className: `${isTheBig ? 'thebig-medium' : ''} hint-message`, children: "You are just seconds away from the best quote" }), jsx(LabelFormBox, { title: "You are seconds away from receiving your home insurance quotes, please provide your email after completing the discount section so we can send you your personalized free home insurance quotes!" }), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleMultiplePolicyChange, name: "multiplePoliciesDiscount", defaultValue: getSelectedOption(yesNoOptions, multiplePoliciesDiscount), title: "Save up to 18% more. Are you open to bundling multiple policies (e.g. auto) with the same company?", description: "Most insurers offer discounts to consumers who purchase multiple policies. Select \u2018yes\u2019 if you\u2019d like to bundle your home and auto insurance policies." }), jsx(BlockDwellingInfo, {}), jsx("h2", { children: "Complete the form below to see which companies are offering your quotes." }), jsx(SwitchButtonBox, { items: yesNoOptions, onChange: handleMultiplePolicyChange, name: "multiplePoliciesDiscount", defaultValue: getSelectedOption(yesNoOptions, multiplePoliciesDiscount), title: "Do you authorize us to run a soft credit check and check your claims history so that you can save up to 50% on your insurance? Rest assured, this will not affect your credit score in any way." }), jsx(InputFormBox, { name: "firstName", title: "First Name", onChange: handleFirstNameChange, defaultValue: firstName, placeholder: "Your First Name", error: !firstName && discountState.inValidation, errorMessage: getErrorMessage(firstName, discountState.inValidation) }), jsx(InputFormBox, { name: "lastName", title: "Last Name", onChange: handleLastNameChange, defaultValue: lastName, placeholder: "Your Last Name", error: !lastName && discountState.inValidation, errorMessage: getErrorMessage(lastName, discountState.inValidation) }), jsx(InputFormPhoneBox, { name: "phone", onChange: handlePhoneNumberChange, defaultValue: phone, title: "Phone Number", placeholder: "(855) 325-8444", error: !phone && discountState.inValidation, errorMessage: getErrorMessage(phone, discountState.inValidation) }), jsx(InputFormEmailBox, { validationStatus: emailStatus, name: "email", title: "Please provide your email address so we can send you a copy of your quotes", description: "We will provide you with your insurance quotes immediately after this form completion. If you are not ready to apply today, don\u2019t worry as we will be emailing your quotes to you if you\u2019d like to complete at a later date with the help of one of our trusted broker partners.", onChange: handleEmailChange, defaultValue: email, placeholder: "johnsmith@mychoice.ca", errorMessage: emailStatus === ValidationStatusTypes.Declined
2699
+ ? errorMessage : getErrorMessage(email, discountState.inValidation), error: emailStatus === ValidationStatusTypes.Declined || (!email && discountState.inValidation) }), jsx(BlockSubmit, { className: isTheBig ? 'thebig-bold' : '' }), jsx(BlockNextPageInfo, {})] }));
2700
+ };
2701
+
2702
+ const PageHomeDiscount = () => {
2703
+ const { applicantFormValidate, applicantFormIsValid } = useValidationApplicant();
2704
+ const { dwellingFormValidate, dwellingFormIsValid } = useValidationDwelling();
2705
+ useEffectOnce(() => {
2706
+ if (!applicantFormIsValid) {
2707
+ applicantFormValidate();
2708
+ }
2709
+ if (!dwellingFormIsValid) {
2710
+ dwellingFormValidate();
2711
+ }
2712
+ window.scrollTo({
2713
+ top: 0,
2714
+ behavior: 'smooth',
2715
+ });
2716
+ });
2717
+ return (jsx("div", { className: "form-container", children: jsx("div", { className: "form-section-container", children: jsx(SectionDiscountInfo, {}) }) }));
2718
+ };
2719
+
2720
+ const AppRouterListener = () => {
2721
+ const routeLocation = useLocation();
2722
+ useEffect(() => {
2723
+ if (process.env.REACT_APP_ENV === 'production') {
2724
+ TagManager.dataLayer({
2725
+ dataLayer: {
2726
+ page: routeLocation.pathname,
2727
+ },
2728
+ dataLayerName: 'PageDataLayer',
2729
+ });
2730
+ }
2731
+ window.scrollTo(0, 0);
2732
+ }, [routeLocation]);
2733
+ return null;
2734
+ };
2735
+
2736
+ const AppRouteWrapper = (props) => {
2737
+ const { children, insuranceType } = props;
2738
+ const { appConfigState: { isReady } } = useStoreAppConfig();
2739
+ const { dispatchAppModalState } = useStoreAppModal();
2740
+ const { postalState: { item: { postalCode: carPostal } } } = useStoreFormCarPostal();
2741
+ // const { postalState: { item: { postalCode: homePostal } } } = useStoreFormHomePostal();
2742
+ // car insurance validation
2743
+ const { vehicleFormValidate, vehicleFormIsValid } = useValidationVehicle();
2744
+ const { driverFormValidate, driverFormIsValid } = useValidationDriver();
2745
+ const { carDiscountFormValidate, carDiscountFormIsValid } = useValidationCarDiscount();
2746
+ // home insurance validation
2747
+ // const { addressFormValidate, addressFormIsValid } = useValidationAddress();
2748
+ // const { applicantFormValidate, applicantFormIsValid } = useValidationApplicant();
2749
+ // const { dwellingFormValidate, dwellingFormIsValid } = useValidationDwelling();
2750
+ // const { homeDiscountFormValidate, homeDiscountFormIsValid } = useValidationHomeDiscount();
2751
+ const { clearFormData, checkIsExpired, checkIsExpiredWithModal } = ClearFormDataHandler();
2752
+ const formValidationHooks = {
2753
+ [InsuranceTypes.Car]: [
2754
+ {
2755
+ key: 0,
2756
+ path: '/',
2757
+ name: 'Step 1',
2758
+ validateOptions: { validate: vehicleFormValidate, isValid: vehicleFormIsValid },
2759
+ },
2760
+ {
2761
+ key: 1,
2762
+ path: '/driver',
2763
+ name: 'Step 2',
2764
+ validateOptions: { validate: driverFormValidate, isValid: driverFormIsValid },
2765
+ },
2766
+ {
2767
+ key: 2,
2768
+ path: '/discount',
2769
+ name: 'Step 3',
2770
+ validateOptions: { validate: carDiscountFormValidate, isValid: carDiscountFormIsValid },
2771
+ },
2772
+ ],
2773
+ // [InsuranceTypes.Home]: [
2774
+ // {
2775
+ // key: 0,
2776
+ // path: '/',
2777
+ // name: 'Step 1',
2778
+ // validateOptions: { validate: addressFormValidate, isValid: addressFormIsValid },
2779
+ // },
2780
+ // {
2781
+ // key: 1,
2782
+ // path: '/applicant',
2783
+ // name: 'Step 2',
2784
+ // validateOptions: { validate: applicantFormValidate, isValid: applicantFormIsValid },
2785
+ // },
2786
+ // {
2787
+ // key: 2,
2788
+ // path: '/property',
2789
+ // name: 'Step 3',
2790
+ // validateOptions: { validate: dwellingFormValidate, isValid: dwellingFormIsValid },
2791
+ // },
2792
+ // {
2793
+ // key: 3,
2794
+ // path: '/discount',
2795
+ // name: 'Step 4',
2796
+ // validateOptions: { validate: homeDiscountFormValidate, isValid: homeDiscountFormIsValid },
2797
+ // },
2798
+ // ],
2799
+ };
2800
+ useEffectOnce(() => {
2801
+ if (checkIsExpired()) {
2802
+ checkIsExpiredWithModal();
2803
+ }
2804
+ });
2805
+ useEffect(() => {
2806
+ if (isReady) {
2807
+ if (!carPostal && insuranceType === InsuranceTypes.Car) {
2808
+ dispatchAppModalState({
2809
+ type: StoreConfigAppModalActionTypes.AppModalPostalModal,
2810
+ payload: {
2811
+ title: 'Please Enter Your Postal Code',
2812
+ },
2813
+ });
2814
+ }
2815
+ // if (!homePostal && insuranceType === InsuranceTypes.Home) {
2816
+ // dispatchAppModalState({
2817
+ // type: StoreConfigAppModalActionTypes.AppModalPostalModal,
2818
+ // payload: {
2819
+ // title: 'Please Enter Your Postal Code',
2820
+ // },
2821
+ // });
2822
+ // }
2823
+ }
2824
+ }, [carPostal, isReady]);
2825
+ return (jsx(Fragment, { children: isReady && (jsxs(Fragment, { children: [jsx(AppHeader, {}), jsx(AppModal, {}), insuranceType && (jsx(NavigationTop, { title: `${insuranceType.replace(/^./, insuranceType[0].toUpperCase())} Insurance Quote`, postalCode: carPostal, formSteps: formSteps[insuranceType], validationHooks: formValidationHooks[insuranceType], clearForm: clearFormData })), jsx("div", { className: `${insuranceType ? 'form-page-content' : ''}`, children: children })] })) }));
2826
+ };
2827
+ const NestedRoutes = () => {
2828
+ const insuranceType = getInsuranceType();
2829
+ const { appConfigState, dispatchAppConfigState } = useStoreAppConfig();
2830
+ useEffectOnce(() => {
2831
+ dispatchAppConfigState({
2832
+ type: StoreConfigAppConfigActionTypes.AppConfigSetDrawWrapper,
2833
+ payload: true,
2834
+ });
2835
+ });
2836
+ return (jsx(Fragment, { children: appConfigState.drawWrapper && (jsx(Fragment, { children: jsxs(Routes, { children: [jsx(Route, { path: "*", element: jsx(Navigate, { to: { pathname: `/${appConfigState.localIndex || defaultLocalIndex}/${InsuranceTypes.Car}` } }) }), insuranceType === InsuranceTypes.Car
2837
+ && (jsxs(Route, { path: "car", children: [jsx(Route, { index: true, element: (jsx(AppRouteWrapper, { insuranceType: InsuranceTypes.Car, children: jsx(RouteWrapperPublic, { children: jsx(PageVehicle, {}) }) })) }), jsx(Route, { path: "driver", element: (jsx(AppRouteWrapper, { insuranceType: InsuranceTypes.Car, children: jsx(RouteWrapperPublic, { children: jsx(PageDriver, {}) }) })) }), jsx(Route, { path: "discount", element: (jsx(AppRouteWrapper, { insuranceType: InsuranceTypes.Car, children: jsx(RouteWrapperPublic, { children: jsx(PageCarDiscount, {}) }) })) }), jsx(Route, { path: "quotes", element: (jsx(AppRouteWrapper, { insuranceType: InsuranceTypes.Car, children: jsx(RouteWrapperPublic, { children: jsx(PageQuote, {}) }) })) })] }))] }) })) }));
2838
+ };
2839
+ const RedirectWithSearchParams = ({ to, path }) => {
2840
+ const insuranceType = getInsuranceType();
2841
+ const [isRender, setIsRender] = useState(false);
2842
+ const { getPostal } = useHandlerPostal(insuranceType);
2843
+ const { dispatchDiscountState } = useStoreFormCarDiscount();
2844
+ const queryRoot = useLocation().search.split('?');
2845
+ useEffectOnce(() => {
2846
+ if (queryRoot.length > 1) {
2847
+ const query = JSON.parse(`{"${decodeURI(queryRoot[1]).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"')}"}`);
2848
+ if (!isRender) {
2849
+ if (query.postal_code) {
2850
+ getPostal(query.postal_code).then(() => {
2851
+ setIsRender(true);
2852
+ });
2853
+ }
2854
+ else {
2855
+ setIsRender(true);
2856
+ }
2857
+ if (query.utm_source) {
2858
+ dispatchDiscountState({ type: StoreFormCarDiscountActionTypes.FormCarDiscountQuoterUtmSourceSet, payload: { utmSource: query.utm_source } });
2859
+ }
2860
+ if (query.utm_campaign) {
2861
+ dispatchDiscountState({ type: StoreFormCarDiscountActionTypes.FormCarDiscountQuoterUtmCampaignSet, payload: { utmCampaign: query.utm_campaign } });
2862
+ }
2863
+ if (path === 'broker') {
2864
+ dispatchDiscountState({ type: StoreFormCarDiscountActionTypes.FormCarDiscountQuoterBrokerInfoSet, payload: query });
2865
+ }
2866
+ }
2867
+ }
2868
+ else {
2869
+ setIsRender(true);
2870
+ }
2871
+ });
2872
+ return jsx(Fragment, { children: isRender && jsx(Navigate, { to: to }) });
2873
+ };
2874
+ const AppRoutes = (props) => {
2875
+ const { appType } = props;
2876
+ const defaultInsuranceType = getInsuranceType();
2877
+ const { appConfigState: { localIndex } } = useStoreAppConfig();
2878
+ return (jsxs(BrowserRouter, { children: [jsx(AppRouterListener, {}), jsxs(Routes, { children: [jsx(Route, { path: "/", element: (jsx(RedirectWithSearchParams, { to: `/${localIndex}/${defaultInsuranceType}` })) }), jsx(Route, { path: `/${localIndex}`, element: (jsx(RedirectWithSearchParams, { to: `/${localIndex}/${defaultInsuranceType}` })) }), jsx(Route, { path: "*", element: (jsx(RedirectWithSearchParams, { to: `/${localIndex}/${defaultInsuranceType}` })) }), jsx(Route, { path: "/broker", element: (jsx(RedirectWithSearchParams, { to: `/${localIndex}/${defaultInsuranceType}`, path: "broker" })
2879
+ // <BrokerKeys redirectURL={`/${localIndex}/${defaultInsuranceType}`} />
2880
+ ) }), jsx(Route, { path: `/${localIndex}`, element: (jsx(NestedRoutes, { appType: appType })) }), jsx(Route, { path: `/${localIndex}/*`, element: (jsx(NestedRoutes, { appType: appType })) }), jsx(Route, { path: "/postal/*", element: (jsx(RedirectWithSearchParams, { to: `/${localIndex}/${defaultInsuranceType}` })) }), jsx(Route, { path: "/auto/postal/*", element: (jsx(RedirectWithSearchParams, { to: `/${localIndex}/${defaultInsuranceType}` })) })] })] }));
2881
+ };
2882
+
2883
+ const AppLoader = () => {
2884
+ const { appLoaderState } = useStoreAppLoader();
2885
+ if (appLoaderState.isOpen) {
2886
+ return (jsx("div", { className: "app-loader", children: jsx(LoaderPrimary, {}) }));
2887
+ }
2888
+ return null;
2889
+ };
2890
+
2891
+ const setExternalColors = (primaryColor, secondaryColor) => {
2892
+ document.documentElement.style.setProperty('--color-primary', primaryColor);
2893
+ document.documentElement.style.setProperty('--color-secondary', secondaryColor);
2894
+ };
2895
+ const setInsuranceStepsCount = (count) => {
2896
+ document.documentElement.style.setProperty('--steps-count', count);
2897
+ };
2898
+
2899
+ const AppConfig = (props) => {
2900
+ const { appType } = props;
2901
+ const insuranceType = getInsuranceType();
2902
+ const { dispatchDeviceState } = useStoreAppDevice();
2903
+ const { dispatchAppLoaderState } = useStoreAppLoader();
2904
+ const { appConfigState, dispatchAppConfigState } = useStoreAppConfig();
2905
+ const { dispatchClientState } = useStoreClient();
2906
+ const { partnerState } = useStorePartner();
2907
+ // car insurance steps states
2908
+ const { dispatchPostalState: dispatchCarPostalState, postalState } = useStoreFormCarPostal();
2909
+ const { dispatchConfigState } = useStoreFormCarConfig();
2910
+ const { dispatchDriverBaseState } = useStoreFormCarDriverBase();
2911
+ const { dispatchVehicleState } = useStoreFormCarVehicle();
2912
+ const { dispatchDiscountState: dispatchCarDiscountState } = useStoreFormCarDiscount();
2913
+ const { dispatchQuoteState } = useStoreFormCarQuote();
2914
+ // home insurance steps states
2915
+ const { dispatchPostalState: dispatchHomePostalState } = useStoreFormHomePostal();
2916
+ const { dispatchAddressState } = useStoreFormHomeAddress();
2917
+ const { dispatchApplicantBaseState } = useStoreFormHomeApplicantBase();
2918
+ const { dispatchDwellingState } = useStoreFormHomeDwelling();
2919
+ const { dispatchDiscountState: dispatchHomeDiscountState } = useStoreFormHomeDiscount();
2920
+ // const { dispatchQuoteState } = useStoreFormCarQuote();
2921
+ const localIndex = window.location.pathname.split('/')[1];
2922
+ const authHandler = useHandlerAuth();
2923
+ const partnerHandler = useHandlerPartner();
2924
+ const windowResize = () => {
2925
+ dispatchDeviceState({
2926
+ type: StoreConfigAppDeviceActionTypes.AppDeviceSetSize,
2927
+ payload: {
2928
+ width: window.innerWidth,
2929
+ height: window.innerHeight,
2930
+ },
2931
+ });
2932
+ };
2933
+ useEffectOnce(() => {
2934
+ if (!appConfigState.isPreloaded && partnerHandler.status === RequestStatusTypes.Waiting) {
2935
+ window.addEventListener('resize', windowResize);
2936
+ windowResize();
2937
+ dispatchAppConfigState({
2938
+ type: StoreConfigAppConfigActionTypes.AppConfigSetAppType,
2939
+ payload: appType,
2940
+ });
2941
+ }
2942
+ if (appType !== AppTypes.TheBig && localIndex !== defaultLocalIndex && localIndex !== '') {
2943
+ partnerHandler.getPartner(localIndex);
2944
+ }
2945
+ else {
2946
+ dispatchAppConfigState({
2947
+ type: StoreConfigAppConfigActionTypes.AppConfigSetLocalIndex,
2948
+ payload: defaultLocalIndex,
2949
+ });
2950
+ dispatchAppConfigState({
2951
+ type: StoreConfigAppConfigActionTypes.AppConfigSetPreloaded,
2952
+ payload: true,
2953
+ });
2954
+ }
2955
+ });
2956
+ useEffect(() => {
2957
+ if (appConfigState.isReady) {
2958
+ dispatchAppLoaderState({
2959
+ type: StoreConfigAppLoaderActionTypes.AppLoaderClose,
2960
+ });
2961
+ dispatchConfigState({
2962
+ type: StoreFormCarConfigActionTypes.FormCarConfigSet,
2963
+ payload: { province: postalState.item.provinceCode },
2964
+ });
2965
+ }
2966
+ }, [appConfigState]);
2967
+ useEffect(() => {
2968
+ if (appConfigState.isPreloaded) {
2969
+ if (authHandler.status === RequestStatusTypes.Waiting) {
2970
+ authHandler.checkUser();
2971
+ }
2972
+ if (authHandler.status !== RequestStatusTypes.Waiting
2973
+ && authHandler.status !== RequestStatusTypes.Loading) {
2974
+ if (insuranceType === InsuranceTypes.Car) {
2975
+ dispatchCarPostalState({
2976
+ type: StoreFormCarPostalActionTypes.FormCarPostalGetLocal,
2977
+ });
2978
+ dispatchDriverBaseState({
2979
+ type: StoreFormCarDriverBaseActionTypes.FormCarDriverGetLocal,
2980
+ });
2981
+ dispatchDriverBaseState({
2982
+ type: StoreFormCarDriverBaseActionTypes.FormCarDriverValidate,
2983
+ payload: { inValidation: false },
2984
+ });
2985
+ dispatchVehicleState({
2986
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleGetLocal,
2987
+ });
2988
+ dispatchVehicleState({
2989
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleValidate,
2990
+ payload: { inValidation: false },
2991
+ });
2992
+ dispatchCarDiscountState({
2993
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountGetLocal,
2994
+ });
2995
+ dispatchCarDiscountState({
2996
+ type: StoreFormCarDiscountActionTypes.FormCarDiscountValidate,
2997
+ payload: { inValidation: false },
2998
+ });
2999
+ dispatchQuoteState({
3000
+ type: StoreFormCarQuoteActionTypes.FormCarQuoteGetLocal,
3001
+ });
3002
+ }
3003
+ if (insuranceType === InsuranceTypes.Home) {
3004
+ dispatchHomePostalState({
3005
+ type: StoreFormHomePostalActionTypes.FormHomePostalGetLocal,
3006
+ });
3007
+ dispatchAddressState({
3008
+ type: StoreFormHomeAddressActionTypes.FormHomeAddressGetLocal,
3009
+ });
3010
+ dispatchApplicantBaseState({
3011
+ type: StoreFormHomeApplicantBaseActionTypes.FormHomeApplicantGetLocal,
3012
+ });
3013
+ dispatchDwellingState({
3014
+ type: StoreFormHomeDwellingActionTypes.FormHomeDwellingGetLocal,
3015
+ });
3016
+ dispatchHomeDiscountState({
3017
+ type: StoreFormHomeDiscountActionTypes.FormHomeDiscountGetLocal,
3018
+ });
3019
+ // dispatchQuoteState({
3020
+ // type: StoreFormCarQuoteActionTypes.FormCarQuoteGetLocal,
3021
+ // });
3022
+ }
3023
+ if (authHandler.status === RequestStatusTypes.Success) {
3024
+ dispatchClientState({
3025
+ type: StoreClientActionTypes.ClientGetLocal,
3026
+ });
3027
+ }
3028
+ dispatchAppConfigState({
3029
+ type: StoreConfigAppConfigActionTypes.AppConfigSetIsReady,
3030
+ payload: true,
3031
+ });
3032
+ }
3033
+ }
3034
+ }, [appConfigState.isPreloaded, authHandler.status]);
3035
+ useEffect(() => {
3036
+ if (appType === AppTypes.TheBig) {
3037
+ setExternalColors('#F1642F', '#4C4B4B');
3038
+ dispatchAppConfigState({
3039
+ type: StoreConfigAppConfigActionTypes.AppConfigSetPreloaded,
3040
+ payload: true,
3041
+ });
3042
+ }
3043
+ }, [appType]);
3044
+ useEffect(() => {
3045
+ const stepCount = `${formSteps[insuranceType].length}`;
3046
+ setInsuranceStepsCount(stepCount);
3047
+ dispatchAppConfigState({
3048
+ type: StoreConfigAppConfigActionTypes.AppConfigSetInsuranceType,
3049
+ payload: insuranceType,
3050
+ });
3051
+ }, [insuranceType]);
3052
+ useEffect(() => {
3053
+ if (partnerHandler.status === RequestStatusTypes.Success) {
3054
+ setExternalColors(partnerState.primaryColor, partnerState.secondaryColor);
3055
+ dispatchAppConfigState({
3056
+ type: StoreConfigAppConfigActionTypes.AppConfigSetPreloaded,
3057
+ payload: true,
3058
+ });
3059
+ }
3060
+ if (partnerHandler.status === RequestStatusTypes.Error) ;
3061
+ }, [partnerHandler.status]);
3062
+ return null;
3063
+ };
3064
+
3065
+ const AppWrapperConfig = (props) => {
3066
+ initHttpResponse();
3067
+ const { appType } = props;
3068
+ const { appConfigState: { isReady, drawWrapper }, dispatchAppConfigState } = useStoreAppConfig();
3069
+ useEffectOnce(() => {
3070
+ dispatchAppConfigState({
3071
+ type: StoreConfigAppConfigActionTypes.AppConfigSetDrawWrapper,
3072
+ payload: true,
3073
+ });
3074
+ });
3075
+ return (jsxs(Fragment, { children: [jsx(AppLoader, {}), jsx(AppConfig, { appType: appType }), drawWrapper && isReady
3076
+ && jsx(AppRoutes, { appType: appType })] }));
3077
+ };
3078
+ const AppWrapper = ({ appType }) => (jsx(StoreProvider, { children: jsx(AppWrapperConfig, { appType: appType }) }));
3079
+ AppWrapper.defaultProps = {
3080
+ appType: AppTypes.MyChoice,
3081
+ insuranceType: InsuranceTypes.Car,
3082
+ };
3083
+
3084
+ const StoreConfig = () => {
3085
+ const { dispatchAppConfigState } = useStoreAppConfig();
3086
+ const { dispatchDriverBaseState } = useStoreFormCarDriverBase();
3087
+ const { dispatchVehicleState } = useStoreFormCarVehicle();
3088
+ const { dispatchDeviceState } = useStoreAppDevice();
3089
+ const windowResize = () => {
3090
+ dispatchDeviceState({
3091
+ type: StoreConfigAppDeviceActionTypes.AppDeviceSetSize,
3092
+ payload: {
3093
+ width: window.innerWidth,
3094
+ height: window.innerHeight,
3095
+ },
3096
+ });
3097
+ };
3098
+ useEffectOnce(() => {
3099
+ dispatchDriverBaseState({
3100
+ type: StoreFormCarDriverBaseActionTypes.FormCarDriverGetLocal,
3101
+ });
3102
+ dispatchVehicleState({
3103
+ type: StoreFormCarVehicleActionTypes.FormCarVehicleGetLocal,
3104
+ });
3105
+ dispatchAppConfigState({
3106
+ type: StoreConfigAppConfigActionTypes.AppConfigSetIsReady,
3107
+ payload: true,
3108
+ });
3109
+ window.addEventListener('resize', windowResize);
3110
+ windowResize();
3111
+ });
3112
+ return null;
3113
+ };
3114
+ const StoryAppWrapperConfig = (props) => {
3115
+ const { children } = props;
3116
+ const { appConfigState, dispatchAppConfigState } = useStoreAppConfig();
3117
+ useEffectOnce(() => {
3118
+ dispatchAppConfigState({
3119
+ type: StoreConfigAppConfigActionTypes.AppConfigSetDrawWrapper,
3120
+ payload: true,
3121
+ });
3122
+ });
3123
+ return (jsxs(Fragment, { children: [jsx(StoreConfig, {}), appConfigState.drawWrapper
3124
+ && (jsxs(Fragment, { children: [jsx(AppModal, {}), children] }))] }));
3125
+ };
3126
+ const StoryAppWrapper = (props) => {
3127
+ const { appType, children } = props;
3128
+ useEffectOnce(() => {
3129
+ initHttpResponse();
3130
+ });
3131
+ return (jsx(StoreProvider, { children: jsx(BrowserRouter, { children: jsx(StoryAppWrapperConfig, { appType: appType, children: children }) }) }));
3132
+ };
3133
+ StoryAppWrapper.defaultProps = {
3134
+ appType: AppTypes.MyChoice,
3135
+ };
3136
+
3137
+ export { AppWrapper, DateSelectFormBox, HeaderMyChoice, HeaderMyChoiceMobile, HeaderPartner, HeaderTheBig, InputFormBox, InputFormEmailBox, InputFormLicenceBox, InputFormPhoneBox, LabelFormBox, LoaderPrimary, ModalConfirm, ModalFinale, ModalMessage, ModalPostal, ModalQuoteRequest, NavigationBottom, NavigationBottomTheBig, NavigationTab, NavigationTabMobile, NavigationTop, OfferSection, PageAddress, PageApplicant, PageCarDiscount, PageDriver, PageHomeDiscount, PageProperty, PageQuote, PageVehicle, SelectFormBox, StoryAppWrapper, SwitchButtonBox, capitalize, checkDateIsSpecial, formSteps, formatPhoneObject, formatTitleToCapital, getDateErrorMessage, getDisabledLicenceTypes, getErrorMessage, getInsuranceType, getLicenceMaxDate, getLicenceMinDate, getLicenceTypeOptions, getSelectedOption, usePathGroups };
3138
+ //# sourceMappingURL=index.js.map