@mychoice/mychoice-sdk-modules 2.0.1 → 2.1.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 (27) hide show
  1. package/dist/cjs/index.js +75 -16
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/init/helper.d.ts +2 -2
  4. package/dist/cjs/insurances/car/pages/helpers.d.ts +2 -2
  5. package/dist/cjs/insurances/car/pages/quote/PageAllQuotes.d.ts +2 -0
  6. package/dist/cjs/insurances/car/pages/quote/sections/SectionConfirm.d.ts +1 -0
  7. package/dist/cjs/insurances/car/pages/quote/sections/blocks/BlockConfirmImages.d.ts +1 -0
  8. package/dist/cjs/insurances/car/pages/quote/sections/blocks/BlockQuoteStatistics.d.ts +2 -0
  9. package/dist/cjs/insurances/car/pages/quote/sections/index.d.ts +1 -0
  10. package/dist/cjs/insurances/home/pages/address/sections/blocks/BlockAddressInfo.d.ts +1 -1
  11. package/dist/cjs/shared/sections/quotes/OfferSection/BestOfferSection.d.ts +3 -0
  12. package/dist/cjs/shared/sections/quotes/OfferSection/DummyOfferSection.d.ts +3 -0
  13. package/dist/esm/index.js +75 -16
  14. package/dist/esm/index.js.map +1 -1
  15. package/dist/esm/init/helper.d.ts +2 -2
  16. package/dist/esm/insurances/car/pages/helpers.d.ts +2 -2
  17. package/dist/esm/insurances/car/pages/quote/PageAllQuotes.d.ts +2 -0
  18. package/dist/esm/insurances/car/pages/quote/sections/SectionConfirm.d.ts +1 -0
  19. package/dist/esm/insurances/car/pages/quote/sections/blocks/BlockConfirmImages.d.ts +1 -0
  20. package/dist/esm/insurances/car/pages/quote/sections/blocks/BlockQuoteStatistics.d.ts +2 -0
  21. package/dist/esm/insurances/car/pages/quote/sections/index.d.ts +1 -0
  22. package/dist/esm/insurances/home/pages/address/sections/blocks/BlockAddressInfo.d.ts +1 -1
  23. package/dist/esm/shared/sections/quotes/OfferSection/BestOfferSection.d.ts +3 -0
  24. package/dist/esm/shared/sections/quotes/OfferSection/DummyOfferSection.d.ts +3 -0
  25. package/package.json +4 -4
  26. package/dist/cjs/insurances/life/pages/quote/sections/SectionQuoteRecalc.d.ts +0 -2
  27. package/dist/esm/insurances/life/pages/quote/sections/SectionQuoteRecalc.d.ts +0 -2
package/dist/cjs/index.js CHANGED
@@ -7,6 +7,7 @@ var mychoiceSdkComponents = require('@mychoice/mychoice-sdk-components');
7
7
  var mychoiceSdkStore = require('@mychoice/mychoice-sdk-store');
8
8
  var reactRouterDom = require('react-router-dom');
9
9
  var React = require('react');
10
+ var lodash = require('lodash');
10
11
  var GooglePlacesAutocomplete = require('react-google-places-autocomplete');
11
12
  var reactSelect = require('react-select');
12
13
  var reactHelmet = require('react-helmet');
@@ -1760,6 +1761,62 @@ const SectionQuoteRecalc$1 = () => {
1760
1761
  return (jsxRuntime.jsxs("div", { className: "form-container", children: [jsxRuntime.jsx(TabVehicle, { readOnly: true }), jsxRuntime.jsxs("div", { className: `form-section edit-recalc-container ${mychoiceCls}`, children: [jsxRuntime.jsx(SelectFormBox, { options: mychoiceSdkComponents.coverageOptions, name: "comprehensive-coverage", onChange: handleComprehensiveChange, defaultValue: getSelectedOption(mychoiceSdkComponents.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 }), jsxRuntime.jsx(SelectFormBox, { options: mychoiceSdkComponents.coverageOptions, name: "collision-coverage", onChange: handleCollisionChange, defaultValue: getSelectedOption(mychoiceSdkComponents.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 }), jsxRuntime.jsx(SelectFormBox, { options: mychoiceSdkComponents.liabilityOptions, name: "liability-limit", onChange: handleLiabilityChange, defaultValue: getSelectedOption(mychoiceSdkComponents.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 }), jsxRuntime.jsx(BlockSubmit$2, { className: `${isTheBig ? 'thebig-bold' : 'mychoice'} recalculate`, label: "Recalculate Quote", buttonSize: mychoiceSdkComponents.SizeTypes.Medium, isRecalc: true }), isTheBig && jsxRuntime.jsx(BlockEndorsements, {})] })] }));
1761
1762
  };
1762
1763
 
1764
+ const BlockConfirmImages = () => (jsxRuntime.jsxs("div", { className: "image-section", children: [jsxRuntime.jsx("div", { className: "providers-title", children: "We compare rates from Canada's top providers, including:" }), jsxRuntime.jsxs("div", { className: "providers-carousel", children: [jsxRuntime.jsx("img", { width: "175", height: "70", src: "https://www.mychoice.ca/wp-content/uploads/2023/02/logo-3.png", alt: "S.G.I. Canada" }), jsxRuntime.jsx("img", { width: "175", height: "70", src: "https://www.mychoice.ca/wp-content/uploads/2023/02/logo-5.png", alt: "Onlia Insurance" }), jsxRuntime.jsx("img", { width: "175", height: "70", src: "https://www.mychoice.ca/wp-content/uploads/2023/02/logo-4.png", alt: "Economical insurance" }), jsxRuntime.jsx("img", { width: "175", height: "70", src: "https://www.mychoice.ca/wp-content/uploads/2023/02/logo-1.png", alt: "CAA" }), jsxRuntime.jsx("img", { width: "175", height: "70", src: "https://www.mychoice.ca/wp-content/uploads/2023/06/Coachman-logo-2.png", alt: "Coachman" })] })] }));
1765
+
1766
+ const lockEmoji = '\u{1F512}';
1767
+ const savedPercentage = lodash.random(25, 30);
1768
+ const SectionConfirm = () => {
1769
+ const { discountState, dispatchDiscountState } = mychoiceSdkStore.useStoreFormCarDiscount();
1770
+ const { postPerformLeadsAction } = mychoiceSdkStore.CarQuoteDataHandler();
1771
+ const { quoteState } = mychoiceSdkStore.useStoreFormCarQuote();
1772
+ const { appDeviceType } = mychoiceSdkStore.useStoreDeviceType();
1773
+ const { quoterInfo } = discountState;
1774
+ const { items: quotes } = quoteState;
1775
+ const { firstName, lastName, phone } = quoterInfo;
1776
+ const bestQuote = quotes.length ? quotes[0] : null;
1777
+ const [comparedCountMax] = React.useState(lodash.random(1021, 1502));
1778
+ const [comparedCountMin, setComparedCountMin] = React.useState(1000);
1779
+ React.useEffect(() => {
1780
+ if (comparedCountMin < comparedCountMax) {
1781
+ const intervalId = setInterval(() => {
1782
+ setComparedCountMin((prev) => prev + 1);
1783
+ }, 2.5);
1784
+ return () => {
1785
+ clearInterval(intervalId);
1786
+ };
1787
+ }
1788
+ return () => { };
1789
+ }, [comparedCountMax, comparedCountMin]);
1790
+ const handleFirstNameChange = ({ value }) => {
1791
+ dispatchDiscountState({
1792
+ type: mychoiceSdkStore.StoreFormCarDiscountActionTypes.FormCarDiscountQuoterFirstNameSet,
1793
+ payload: { firstName: value },
1794
+ });
1795
+ };
1796
+ const handleLastNameChange = ({ value }) => {
1797
+ dispatchDiscountState({
1798
+ type: mychoiceSdkStore.StoreFormCarDiscountActionTypes.FormCarDiscountQuoterLastNameSet,
1799
+ payload: { lastName: value },
1800
+ });
1801
+ };
1802
+ const handlePhoneNumberChange = ({ value }) => {
1803
+ dispatchDiscountState({
1804
+ type: mychoiceSdkStore.StoreFormCarDiscountActionTypes.FormCarDiscountQuoterPhoneSet,
1805
+ payload: { phone: value },
1806
+ });
1807
+ };
1808
+ const handleSubmit = async () => {
1809
+ await postPerformLeadsAction?.();
1810
+ window.scrollTo({
1811
+ top: 0,
1812
+ behavior: 'smooth',
1813
+ });
1814
+ };
1815
+ if (!bestQuote)
1816
+ return null;
1817
+ return (jsxRuntime.jsxs("div", { style: { zIndex: '1' }, children: [jsxRuntime.jsxs("div", { className: "shadow-box mb", children: [jsxRuntime.jsx("div", { className: "large-title", children: "10+ Quotes Found" }), jsxRuntime.jsx("p", { children: "Complete the last step to reveal which insurance companies are offering these rates." })] }), jsxRuntime.jsxs("div", { className: "shadow-box", children: [jsxRuntime.jsx("div", { className: "highlighted-heading", children: "Best Offer" }), jsxRuntime.jsx("h1", { children: `$${bestQuote.priceMonthly} / month` }), jsxRuntime.jsx("div", { className: "highlighted-heading", children: jsxRuntime.jsx("span", { children: `$${bestQuote.priceYearly} / year` }) })] }), jsxRuntime.jsxs("div", { className: "statistics-wrapper", children: [jsxRuntime.jsx("div", { className: "counter", id: "output", children: comparedCountMin }), jsxRuntime.jsx("div", { className: "divider" }), jsxRuntime.jsx("div", { style: { textAlign: 'center', fontSize: '1.15rem', marginTop: '10px' }, children: `Canadians have compared rates in the last 24 hours and saved ${savedPercentage}% on average` })] }), jsxRuntime.jsx("div", { style: { marginBottom: '2rem' }, children: jsxRuntime.jsx("div", { className: "all-quotes-form", children: jsxRuntime.jsx("h2", { style: { whiteSpace: 'normal', marginTop: '20px', textAlign: 'center' }, children: `${lockEmoji} Complete the form below to see which companies are offering your quotes.` }) }) }), jsxRuntime.jsx("div", { style: { marginBottom: '1rem' }, children: jsxRuntime.jsx(InputFormBox, { name: "firstName", title: "First Name", onChange: handleFirstNameChange, defaultValue: firstName, placeholder: "Your First Name", error: !firstName && discountState.inValidation, errorMessage: getErrorMessage(firstName, discountState.inValidation) }) }), jsxRuntime.jsx("div", { style: { marginBottom: '1rem' }, children: jsxRuntime.jsx(InputFormBox, { name: "lastname", title: "Last Name", onChange: handleLastNameChange, defaultValue: lastName, placeholder: "Your Last Name", error: !lastName && discountState.inValidation, errorMessage: getErrorMessage(lastName, discountState.inValidation) }) }), jsxRuntime.jsx("div", { style: { marginBottom: '1rem' }, children: jsxRuntime.jsx(InputFormPhoneBox, { name: "phone", onChange: handlePhoneNumberChange, defaultValue: phone, title: "Phone Number", placeholder: "(111) 111-1111", error: !phone && discountState.inValidation, errorMessage: getErrorMessage(phone, discountState.inValidation) }) }), jsxRuntime.jsx("div", { className: "submit-wrapper", children: jsxRuntime.jsx(mychoiceSdkComponents.ButtonBase, { className: "mychoice", size: mychoiceSdkComponents.SizeTypes.Large, category: mychoiceSdkComponents.CategoryTypes.Filled, onClick: handleSubmit, color: mychoiceSdkComponents.ColorTypes.Primary, label: "Get Your Quote" }) }), jsxRuntime.jsxs("div", { className: "extra-info", children: [jsxRuntime.jsx("h5", { children: "On the next page, you will also be able to:" }), jsxRuntime.jsx("div", { className: "next-page-points", children: jsxRuntime.jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [jsxRuntime.jsxs("div", { className: "bullet-container", children: [jsxRuntime.jsx("div", { className: "bullet-point", children: "1" }), jsxRuntime.jsx("div", { children: "See what rates insurance carriers are offering" })] }), jsxRuntime.jsxs("div", { className: "bullet-container", children: [jsxRuntime.jsx("div", { className: "bullet-point", children: "2" }), jsxRuntime.jsx("div", { children: "Get in touch with a broker and secure your rate" })] }), jsxRuntime.jsxs("div", { className: "bullet-container", children: [jsxRuntime.jsx("div", { className: "bullet-point", children: "3" }), jsxRuntime.jsx("div", { children: "Potentially save more by speaking with a broker" })] })] }) }), jsxRuntime.jsx("div", { className: "privacy-policy", children: jsxRuntime.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", jsxRuntime.jsx("a", { href: "https://www.mychoice.ca/privacy-policy/", children: " Privacy Policy" }), "."] }) })] }), appDeviceType === mychoiceSdkComponents.DeviceTypes.Mobile && jsxRuntime.jsx(BlockConfirmImages, {})] }));
1818
+ };
1819
+
1763
1820
  const SplashScreen$2 = () => {
1764
1821
  const { discountState } = mychoiceSdkStore.useStoreFormCarDiscount();
1765
1822
  const phoneObject = formatPhoneObject(discountState.quoterInfo.brokerInfo?.phone) || {};
@@ -1769,6 +1826,7 @@ const SplashScreen$2 = () => {
1769
1826
  };
1770
1827
 
1771
1828
  const PageCarQuote = () => {
1829
+ const { appConfigState: { appType } } = mychoiceSdkStore.useStoreAppConfig();
1772
1830
  const { vehicleFormValidate, vehicleFormIsValid } = mychoiceSdkStore.useValidationVehicle();
1773
1831
  const { driverFormValidate, driverFormIsValid } = mychoiceSdkStore.useValidationDriver();
1774
1832
  const { carDiscountFormValidate, carDiscountFormIsValid } = mychoiceSdkStore.useValidationCarDiscount();
@@ -1776,7 +1834,10 @@ const PageCarQuote = () => {
1776
1834
  const { postRequestQuote } = mychoiceSdkStore.CarQuoteDataHandler();
1777
1835
  const { appLoaderState } = mychoiceSdkStore.useStoreAppLoader();
1778
1836
  const { appDeviceType } = mychoiceSdkStore.useStoreDeviceType();
1779
- const { items } = quoteState;
1837
+ const { items, quoteConfirm } = quoteState;
1838
+ const isTheBig = appType === mychoiceSdkComponents.AppTypes.TheBig;
1839
+ const hasConfirmStep = items?.length && !isTheBig && items[0]?.confirmQuote && quoteConfirm;
1840
+ const quoteItems = hasConfirmStep ? items?.slice(0, 3) : items;
1780
1841
  mychoiceSdkComponents.useEffectOnce(() => {
1781
1842
  if (!vehicleFormIsValid) {
1782
1843
  vehicleFormValidate();
@@ -1795,27 +1856,25 @@ const PageCarQuote = () => {
1795
1856
  behavior: 'smooth',
1796
1857
  });
1797
1858
  });
1798
- return (jsxRuntime.jsx("div", { className: "quote-page-content", children: !appLoaderState.isOpen
1799
- && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: "form-section-container", children: [appDeviceType === mychoiceSdkComponents.DeviceTypes.Mobile && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: !!items?.length && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: !quoteState.showCallMessage
1800
- ? (jsxRuntime.jsx("div", { className: "offer-container", children: jsxRuntime.jsx(OfferSection, { isBestOffer: true, offerCompany: items[0]?.company, brokerCompany: items[0]?.brokerProfile, offerPrice: {
1801
- monthly: items[0]?.priceMonthly,
1802
- yearly: items[0]?.priceYearly,
1803
- }, operationHours: {
1804
- saturdayHours: items[0]?.brokerProfile.hoursSaturday,
1805
- sundayHours: items[0]?.brokerProfile.hoursSunday,
1806
- weekdayHours: items[0]?.brokerProfile.hoursWorkdays,
1807
- }, phoneNumber: formatPhoneObject(items[0]?.brokerProfile.phone), redirectUrl: items[0]?.brokerProfile.redirectUrl || '' }) }))
1808
- : jsxRuntime.jsx(SplashScreen$2, {}) })) })), jsxRuntime.jsx(SectionQuoteEdit$2, {}), jsxRuntime.jsx(SectionQuoteRecalc$1, {})] }), appDeviceType !== mychoiceSdkComponents.DeviceTypes.Mobile && quoteState.showCallMessage
1809
- && jsxRuntime.jsx(SplashScreen$2, {}), !quoteState.showCallMessage
1810
- && (jsxRuntime.jsx("div", { className: "offer-container", children: !!items?.length
1811
- && items.map(({ company, brokerProfile, priceMonthly, priceYearly, }, index) => (jsxRuntime.jsx("div", { children: (appDeviceType !== mychoiceSdkComponents.DeviceTypes.Mobile || (appDeviceType === mychoiceSdkComponents.DeviceTypes.Mobile && index !== 0)) && (jsxRuntime.jsx(OfferSection, { isBestOffer: index === 0, offerCompany: company, brokerCompany: brokerProfile, offerPrice: {
1859
+ return (jsxRuntime.jsx("div", { className: "quote-page-content", children: !appLoaderState.isOpen && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: "form-section-container", children: [appDeviceType === mychoiceSdkComponents.DeviceTypes.Mobile && !hasConfirmStep && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: !!items?.length && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: !quoteState.showCallMessage
1860
+ ? (jsxRuntime.jsx("div", { className: "offer-container", children: jsxRuntime.jsx(OfferSection, { isBestOffer: true, offerCompany: items[0]?.company, brokerCompany: items[0]?.brokerProfile, offerPrice: {
1861
+ monthly: items[0]?.priceMonthly,
1862
+ yearly: items[0]?.priceYearly,
1863
+ }, operationHours: {
1864
+ saturdayHours: items[0]?.brokerProfile.hoursSaturday,
1865
+ sundayHours: items[0]?.brokerProfile.hoursSunday,
1866
+ weekdayHours: items[0]?.brokerProfile.hoursWorkdays,
1867
+ }, phoneNumber: formatPhoneObject(items[0]?.brokerProfile.phone), redirectUrl: items[0]?.brokerProfile.redirectUrl || '' }) }))
1868
+ : jsxRuntime.jsx(SplashScreen$2, {}) })) })), (!hasConfirmStep || appDeviceType !== mychoiceSdkComponents.DeviceTypes.Mobile) && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(SectionQuoteEdit$2, {}), jsxRuntime.jsx(SectionQuoteRecalc$1, {})] }))] }), appDeviceType !== mychoiceSdkComponents.DeviceTypes.Mobile && quoteState.showCallMessage
1869
+ && jsxRuntime.jsx(SplashScreen$2, {}), !quoteState.showCallMessage && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("div", { style: { position: 'relative', width: '100%' }, children: [hasConfirmStep && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: "offer-container", children: jsxRuntime.jsx(SectionConfirm, {}) }), appDeviceType === mychoiceSdkComponents.DeviceTypes.Mobile
1870
+ && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(SectionQuoteEdit$2, {}), jsxRuntime.jsx(SectionQuoteRecalc$1, {})] }))] })), jsxRuntime.jsx("div", { className: `offer-container ${hasConfirmStep ? 'blur' : ''}`, children: !!items?.length && quoteItems.map(({ company, brokerProfile, priceMonthly, priceYearly, }, index) => (jsxRuntime.jsx("div", { children: (appDeviceType !== mychoiceSdkComponents.DeviceTypes.Mobile || (appDeviceType === mychoiceSdkComponents.DeviceTypes.Mobile && index !== 0)) && (jsxRuntime.jsx(OfferSection, { isBestOffer: index === 0, offerCompany: company, brokerCompany: brokerProfile, offerPrice: {
1812
1871
  monthly: priceMonthly,
1813
1872
  yearly: priceYearly,
1814
1873
  }, operationHours: {
1815
1874
  saturdayHours: brokerProfile.hoursSaturday,
1816
1875
  sundayHours: brokerProfile.hoursSunday,
1817
1876
  weekdayHours: brokerProfile.hoursWorkdays,
1818
- }, phoneNumber: formatPhoneObject(brokerProfile.phone), redirectUrl: brokerProfile.redirectUrl || '' })) }, index))) }))] })) }));
1877
+ }, phoneNumber: formatPhoneObject(brokerProfile.phone), redirectUrl: brokerProfile.redirectUrl || '' })) }, index))) })] }) })), appDeviceType !== mychoiceSdkComponents.DeviceTypes.Mobile && hasConfirmStep && jsxRuntime.jsx(BlockConfirmImages, {})] })) }));
1819
1878
  };
1820
1879
 
1821
1880
  const IndicatorsContainer = () => jsxRuntime.jsx(jsxRuntime.Fragment, {});