{"version":3,"file":"index-fyrtfgfq.js","sources":["../../Client/business/CommonSets/RelationToAdmitted/index.ts","../../Client/node_modules/@mui/icons-material/AutoAwesomeOutlined.js","../../Client/node_modules/@mui/icons-material/CampaignOutlined.js","../../Client/node_modules/@mui/icons-material/EditOffOutlined.js","../../Client/node_modules/@mui/icons-material/ExpandMoreOutlined.js","../../Client/node_modules/@mui/icons-material/OpenInNewOutlined.js","../../Client/node_modules/@mui/icons-material/TuneOutlined.js","../../Client/app/State/Models.ts","../../Client/node_modules/immer/dist/immer.esm.mjs","../../Client/app/State/Context.ts","../../Client/shared/Hooks/ScrollTo.ts","../../Client/shared/Hooks/Viewport.tsx","../../Client/legacy/Components/ReactToPdf/Components/BlockQuote.tsx","../../Client/app/Error/hook.ts","../../Client/app/Error/internal.tsx","../../Client/app/Error/index.tsx","../../Client/app/ImsRaterQuote/State.tsx","../../Client/app/ProductComparison/ColorScheme.ts","../../Client/app/Components/ViewWrapper/hook.ts","../../Client/app/Components/ViewWrapper/index.tsx","../../Client/node_modules/countup.js/dist/countUp.min.js","../../Client/node_modules/react-countup/build/index.js","../../Client/app/ProductComparison/Price/index.tsx","../../Client/app/ProductComparison/Logo/index.tsx","../../Client/app/ProductComparison/NavigationArrow/index.tsx","../../Client/app/ProductComparison/SidebarCell/index.tsx","../../Client/app/ProductComparison/Row/index.tsx","../../Client/app/ProductComparison/ComparisonTable/index.tsx","../../Client/app/ProductComparison/Element/TemplateIcon/index.tsx","../../Client/app/ProductComparison/Element/Templates/ChangeInsuredName/index.tsx","../../Client/app/ProductComparison/Element/Templates/Date/index.tsx","../../Client/app/ProductComparison/Element/Templates/Dropdown/index.tsx","../../Client/app/ProductComparison/Element/Templates/FeatureElement/index.tsx","../../Client/app/ProductComparison/AutoComplete/index.tsx","../../Client/app/ProductComparison/Element/Templates/InsuredPreviousAddress/index.tsx","../../Client/app/ProductComparison/Hooks/UsePatchQuote.ts","../../Client/app/ProductComparison/Element/Templates/ManualPremiumAdjustment/index.tsx","../../Client/app/ProductComparison/Element/Templates/PriorClaims/index.tsx","../../Client/app/ProductComparison/Element/Templates/Range/index.tsx","../../Client/app/ProductComparison/Element/Templates/ReadOnlyText/index.tsx","../../Client/app/ProductComparison/Element/Templates/Select/hook.ts","../../Client/app/ProductComparison/Element/Templates/Select/index.tsx","../../Client/app/ProductComparison/Element/Templates/Text/index.tsx","../../Client/app/ProductComparison/Hooks/UseElement.ts","../../Client/app/ProductComparison/TileEntryIssue/index.tsx","../../Client/app/ProductComparison/TileEntry/index.tsx","../../Client/app/ProductComparison/ToolTip/index.tsx","../../Client/app/ProductComparison/TrimToolTip/index.tsx","../../Client/app/Components/NoData/index.tsx","../../Client/app/ProductComparison/Element/Templates/Collection/hook.ts","../../Client/app/ProductComparison/Element/Templates/Collection/Template/index.tsx","../../Client/app/ProductComparison/Element/Templates/Collection/index.tsx","../../Client/app/ProductComparison/Element/index.tsx","../../Client/app/ProductComparison/Element/Refs.ts","../../Client/app/ProductComparison/GroupHeaderRow/index.tsx","../../Client/app/ProductComparison/Hooks/UseTileNavigator.ts","../../Client/app/Components/GetUrqButton/index.tsx","../../Client/app/ResetQuotes/ResetUrq.ts","../../Client/legacy/Components/Documents/AdverseActionNotice/Pdf.tsx","../../Client/legacy/Components/Documents/AdverseActionNotice/Link.tsx","../../Client/app/ProductComparison/IssueBanner/index.tsx","../../Client/app/ProductComparison/TileCell/index.tsx","../../Client/app/ProductComparison/IssueSection/index.tsx","../../Client/app/ProductComparison/GroupMenu/index.tsx","../../Client/app/ProductComparison/SidebarHeader/SidebarActions/GetEAndSQuoteButton/index.tsx","../../Client/app/ProductComparison/SidebarHeader/SidebarActions/GetFloodQuoteButton/hook.ts","../../Client/app/ProductComparison/SidebarHeader/SidebarActions/GetFloodQuoteButton/index.tsx","../../Client/app/ProductComparison/SidebarHeader/SidebarActions/hook.ts","../../Client/app/ProductComparison/SidebarHeader/SidebarActions/index.tsx","../../Client/app/ProductComparison/SidebarHeading/index.tsx","../../Client/app/ProductComparison/SidebarLink/index.tsx","../../Client/app/ProductComparison/SidebarProductName/index.tsx","../../Client/app/ResetQuotes/ResetQuotes.ts","../../Client/app/ResetQuotes/index.tsx","../../Client/legacy/Components/IconLink/index.tsx","../../Client/app/ProductComparison/SidebarHeader/index.tsx","../../Client/app/ProductComparison/SidebarLabel/index.tsx","../../Client/business/Components/Alerts/EAndSAlert/hook.ts","../../Client/business/Components/Alerts/EAndSAlert/index.tsx","../../Client/app/ProductComparison/Quote/index.tsx"],"sourcesContent":["type SwitchFunctions<T> = {\r\n onDecline: () => T;\r\n onNonRenewal: () => T;\r\n onRequest: () => T;\r\n};\r\n\r\nexport class RelationToAdmitted {\r\n readonly name: string;\r\n\r\n private constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n public static readonly Decline = new RelationToAdmitted('Decline');\r\n public static readonly NonRenewal = new RelationToAdmitted('NonRenewal');\r\n public static readonly Request = new RelationToAdmitted('Request');\r\n\r\n public switch<T>({ onDecline, onNonRenewal, onRequest }: SwitchFunctions<T>): T {\r\n switch (this) {\r\n case RelationToAdmitted.Decline:\r\n return onDecline();\r\n case RelationToAdmitted.NonRenewal:\r\n return onNonRenewal();\r\n case RelationToAdmitted.Request:\r\n return onRequest();\r\n default:\r\n throw new Error(`RelationToAdmitted case not implemented: ${this}`);\r\n }\r\n }\r\n}\r\n\r\nexport namespace RelationToAdmitted {\r\n export function all(): RelationToAdmitted[] {\r\n return [RelationToAdmitted.Decline, RelationToAdmitted.NonRenewal, RelationToAdmitted.Request];\r\n }\r\n\r\n export function parseOrDefault(value: string | undefined | null): RelationToAdmitted | null {\r\n return all().find(relationToAdmitted => relationToAdmitted.name.toLowerCase() === value?.toLowerCase()) || null;\r\n }\r\n\r\n export function parse(value: string | undefined | null): RelationToAdmitted {\r\n const result = parseOrDefault(value);\r\n if (!result) {\r\n throw new Error(`Could not parse any RelationToAdmitted from the value: ${value}`);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m19 9 1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25zm0 6-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25zm-7.5-5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12zm-1.51 3.49L9 15.17l-.99-2.18L5.83 12l2.18-.99L9 8.83l.99 2.18 2.18.99z\"\n}), 'AutoAwesomeOutlined');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M18 11v2h4v-2zm-2 6.61c.96.71 2.21 1.65 3.2 2.39.4-.53.8-1.07 1.2-1.6-.99-.74-2.24-1.68-3.2-2.4-.4.54-.8 1.08-1.2 1.61M20.4 5.6c-.4-.53-.8-1.07-1.2-1.6-.99.74-2.24 1.68-3.2 2.4.4.53.8 1.07 1.2 1.6.96-.72 2.21-1.65 3.2-2.4M4 9c-1.1 0-2 .9-2 2v2c0 1.1.9 2 2 2h1v4h2v-4h1l5 3V6L8 9zm5.03 1.71L11 9.53v4.94l-1.97-1.18-.48-.29H4v-2h4.55zM15.5 12c0-1.33-.58-2.53-1.5-3.35v6.69c.92-.81 1.5-2.01 1.5-3.34\"\n}), 'CampaignOutlined');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m14.06 9.02.92.92-1.11 1.11 1.41 1.41 2.52-2.52-3.75-3.75-2.52 2.52 1.41 1.41zm6.65-1.98c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29s-.51.1-.7.29l-1.83 1.83 3.75 3.75zM2.81 2.81 1.39 4.22l7.32 7.32L3 17.25V21h3.75l5.71-5.71 7.32 7.32 1.41-1.41zM5.92 19H5v-.92l5.13-5.13.92.92z\"\n}), 'EditOffOutlined');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n}), 'ExpandMoreOutlined');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3z\"\n}), 'OpenInNewOutlined');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M3 17v2h6v-2zM3 5v2h10V5zm10 16v-2h8v-2h-8v-2h-2v6zM7 9v2H3v2h4v2h2V9zm14 4v-2H11v2zm-6-4h2V7h4V5h-4V3h-2z\"\n}), 'TuneOutlined');","import {\r\n Address,\r\n ComparisonElementDescriptionModel,\r\n ComparisonQuoteImportantNoticeModel,\r\n ComparisonQuotesModel,\r\n Mutable,\r\n QuoteCreateRequestModel,\r\n ValidateCityStateZipModel,\r\n} from '@shared/Models';\r\nimport { Context } from '../Views/CreateAddress';\r\n\r\nexport type MissingPropertyData = {\r\n livingSpace: boolean;\r\n roofAge: boolean;\r\n yearBuilt: boolean;\r\n singleFamilyResidence: boolean;\r\n};\r\n\r\nexport type QuoteError = {\r\n ErrorCode: number;\r\n ErrorMessage: string;\r\n};\r\n\r\nexport type WithError = {\r\n readonly warning: string | null;\r\n readonly error: ApplicationError | null;\r\n};\r\n\r\nexport type ApplicationError = {\r\n readonly exception: Error;\r\n readonly severity: Severity;\r\n};\r\n\r\nexport enum Severity {\r\n warning = 'WARN',\r\n error = 'ERROR',\r\n}\r\n\r\nexport type State = {\r\n readonly address: Address | null;\r\n readonly quoteRequest: QuoteCreateRequestModel;\r\n readonly quoteId: string | null;\r\n readonly comparisonModel: ComparisonQuotesModel | null;\r\n readonly comparisonModelQuoteOrder: string[];\r\n readonly elementDescriptions: ComparisonElementDescriptionModel[] | null;\r\n readonly patching: boolean;\r\n readonly importantNotices: ComparisonQuoteImportantNoticeModel[];\r\n readonly visibleQuoteIds: string[];\r\n readonly warning: string | null;\r\n readonly missingPropertyData: MissingPropertyData | null;\r\n readonly quoteError: QuoteError | null;\r\n\r\n readonly createAddress: {\r\n readonly context: Context;\r\n readonly addressKey: string;\r\n readonly latitude?: number;\r\n readonly longitude?: number;\r\n readonly success: boolean;\r\n readonly zipCodeSuggestions: ValidateCityStateZipModel | null;\r\n readonly originalZipCode: string | null;\r\n };\r\n} & WithError;\r\n\r\nexport type MutableState = Mutable<State>;\r\n\r\nexport const InitialState: MutableState = {\r\n address: null,\r\n quoteRequest: {} as QuoteCreateRequestModel,\r\n quoteId: null,\r\n comparisonModel: null,\r\n comparisonModelQuoteOrder: [],\r\n elementDescriptions: null,\r\n patching: false,\r\n importantNotices: [],\r\n visibleQuoteIds: [],\r\n error: null,\r\n warning: null,\r\n missingPropertyData: null,\r\n quoteError: null,\r\n\r\n createAddress: {\r\n context: 'CreateAddress',\r\n addressKey: '',\r\n success: false,\r\n zipCodeSuggestions: null,\r\n originalZipCode: null,\r\n },\r\n};\r\n\r\nexport enum ActionType {\r\n Update,\r\n ClearStorage,\r\n Revert,\r\n}\r\n\r\nexport type StateKeys = keyof typeof InitialState;\r\nexport type StateValues = (typeof InitialState)[StateKeys];\r\n\r\nexport type Action = {\r\n type: ActionType;\r\n updater?: (state: MutableState) => void;\r\n};\r\n\r\nexport type ApplicationState = {\r\n state: State;\r\n update: (updater: (state: MutableState) => void) => Promise<void>;\r\n revert: () => Promise<void>;\r\n undo: () => Promise<void>;\r\n};\r\n","function n(n){for(var r=arguments.length,t=Array(r>1?r-1:0),e=1;e<r;e++)t[e-1]=arguments[e];if(\"production\"!==process.env.NODE_ENV){var i=Y[n],o=i?\"function\"==typeof i?i.apply(null,t):i:\"unknown error nr: \"+n;throw Error(\"[Immer] \"+o)}throw Error(\"[Immer] minified error nr: \"+n+(t.length?\" \"+t.map((function(n){return\"'\"+n+\"'\"})).join(\",\"):\"\")+\". Find the full error at: https://bit.ly/3cXEKWf\")}function r(n){return!!n&&!!n[Q]}function t(n){var r;return!!n&&(function(n){if(!n||\"object\"!=typeof n)return!1;var r=Object.getPrototypeOf(n);if(null===r)return!0;var t=Object.hasOwnProperty.call(r,\"constructor\")&&r.constructor;return t===Object||\"function\"==typeof t&&Function.toString.call(t)===Z}(n)||Array.isArray(n)||!!n[L]||!!(null===(r=n.constructor)||void 0===r?void 0:r[L])||s(n)||v(n))}function e(t){return r(t)||n(23,t),t[Q].t}function i(n,r,t){void 0===t&&(t=!1),0===o(n)?(t?Object.keys:nn)(n).forEach((function(e){t&&\"symbol\"==typeof e||r(e,n[e],n)})):n.forEach((function(t,e){return r(e,t,n)}))}function o(n){var r=n[Q];return r?r.i>3?r.i-4:r.i:Array.isArray(n)?1:s(n)?2:v(n)?3:0}function u(n,r){return 2===o(n)?n.has(r):Object.prototype.hasOwnProperty.call(n,r)}function a(n,r){return 2===o(n)?n.get(r):n[r]}function f(n,r,t){var e=o(n);2===e?n.set(r,t):3===e?n.add(t):n[r]=t}function c(n,r){return n===r?0!==n||1/n==1/r:n!=n&&r!=r}function s(n){return X&&n instanceof Map}function v(n){return q&&n instanceof Set}function p(n){return n.o||n.t}function l(n){if(Array.isArray(n))return Array.prototype.slice.call(n);var r=rn(n);delete r[Q];for(var t=nn(r),e=0;e<t.length;e++){var i=t[e],o=r[i];!1===o.writable&&(o.writable=!0,o.configurable=!0),(o.get||o.set)&&(r[i]={configurable:!0,writable:!0,enumerable:o.enumerable,value:n[i]})}return Object.create(Object.getPrototypeOf(n),r)}function d(n,e){return void 0===e&&(e=!1),y(n)||r(n)||!t(n)||(o(n)>1&&(n.set=n.add=n.clear=n.delete=h),Object.freeze(n),e&&i(n,(function(n,r){return d(r,!0)}),!0)),n}function h(){n(2)}function y(n){return null==n||\"object\"!=typeof n||Object.isFrozen(n)}function b(r){var t=tn[r];return t||n(18,r),t}function m(n,r){tn[n]||(tn[n]=r)}function _(){return\"production\"===process.env.NODE_ENV||U||n(0),U}function j(n,r){r&&(b(\"Patches\"),n.u=[],n.s=[],n.v=r)}function g(n){O(n),n.p.forEach(S),n.p=null}function O(n){n===U&&(U=n.l)}function w(n){return U={p:[],l:U,h:n,m:!0,_:0}}function S(n){var r=n[Q];0===r.i||1===r.i?r.j():r.g=!0}function P(r,e){e._=e.p.length;var i=e.p[0],o=void 0!==r&&r!==i;return e.h.O||b(\"ES5\").S(e,r,o),o?(i[Q].P&&(g(e),n(4)),t(r)&&(r=M(e,r),e.l||x(e,r)),e.u&&b(\"Patches\").M(i[Q].t,r,e.u,e.s)):r=M(e,i,[]),g(e),e.u&&e.v(e.u,e.s),r!==H?r:void 0}function M(n,r,t){if(y(r))return r;var e=r[Q];if(!e)return i(r,(function(i,o){return A(n,e,r,i,o,t)}),!0),r;if(e.A!==n)return r;if(!e.P)return x(n,e.t,!0),e.t;if(!e.I){e.I=!0,e.A._--;var o=4===e.i||5===e.i?e.o=l(e.k):e.o,u=o,a=!1;3===e.i&&(u=new Set(o),o.clear(),a=!0),i(u,(function(r,i){return A(n,e,o,r,i,t,a)})),x(n,o,!1),t&&n.u&&b(\"Patches\").N(e,t,n.u,n.s)}return e.o}function A(e,i,o,a,c,s,v){if(\"production\"!==process.env.NODE_ENV&&c===o&&n(5),r(c)){var p=M(e,c,s&&i&&3!==i.i&&!u(i.R,a)?s.concat(a):void 0);if(f(o,a,p),!r(p))return;e.m=!1}else v&&o.add(c);if(t(c)&&!y(c)){if(!e.h.D&&e._<1)return;M(e,c),i&&i.A.l||x(e,c)}}function x(n,r,t){void 0===t&&(t=!1),!n.l&&n.h.D&&n.m&&d(r,t)}function z(n,r){var t=n[Q];return(t?p(t):n)[r]}function I(n,r){if(r in n)for(var t=Object.getPrototypeOf(n);t;){var e=Object.getOwnPropertyDescriptor(t,r);if(e)return e;t=Object.getPrototypeOf(t)}}function k(n){n.P||(n.P=!0,n.l&&k(n.l))}function E(n){n.o||(n.o=l(n.t))}function N(n,r,t){var e=s(r)?b(\"MapSet\").F(r,t):v(r)?b(\"MapSet\").T(r,t):n.O?function(n,r){var t=Array.isArray(n),e={i:t?1:0,A:r?r.A:_(),P:!1,I:!1,R:{},l:r,t:n,k:null,o:null,j:null,C:!1},i=e,o=en;t&&(i=[e],o=on);var u=Proxy.revocable(i,o),a=u.revoke,f=u.proxy;return e.k=f,e.j=a,f}(r,t):b(\"ES5\").J(r,t);return(t?t.A:_()).p.push(e),e}function R(e){return r(e)||n(22,e),function n(r){if(!t(r))return r;var e,u=r[Q],c=o(r);if(u){if(!u.P&&(u.i<4||!b(\"ES5\").K(u)))return u.t;u.I=!0,e=D(r,c),u.I=!1}else e=D(r,c);return i(e,(function(r,t){u&&a(u.t,r)===t||f(e,r,n(t))})),3===c?new Set(e):e}(e)}function D(n,r){switch(r){case 2:return new Map(n);case 3:return Array.from(n)}return l(n)}function F(){function t(n,r){var t=s[n];return t?t.enumerable=r:s[n]=t={configurable:!0,enumerable:r,get:function(){var r=this[Q];return\"production\"!==process.env.NODE_ENV&&f(r),en.get(r,n)},set:function(r){var t=this[Q];\"production\"!==process.env.NODE_ENV&&f(t),en.set(t,n,r)}},t}function e(n){for(var r=n.length-1;r>=0;r--){var t=n[r][Q];if(!t.P)switch(t.i){case 5:a(t)&&k(t);break;case 4:o(t)&&k(t)}}}function o(n){for(var r=n.t,t=n.k,e=nn(t),i=e.length-1;i>=0;i--){var o=e[i];if(o!==Q){var a=r[o];if(void 0===a&&!u(r,o))return!0;var f=t[o],s=f&&f[Q];if(s?s.t!==a:!c(f,a))return!0}}var v=!!r[Q];return e.length!==nn(r).length+(v?0:1)}function a(n){var r=n.k;if(r.length!==n.t.length)return!0;var t=Object.getOwnPropertyDescriptor(r,r.length-1);if(t&&!t.get)return!0;for(var e=0;e<r.length;e++)if(!r.hasOwnProperty(e))return!0;return!1}function f(r){r.g&&n(3,JSON.stringify(p(r)))}var s={};m(\"ES5\",{J:function(n,r){var e=Array.isArray(n),i=function(n,r){if(n){for(var e=Array(r.length),i=0;i<r.length;i++)Object.defineProperty(e,\"\"+i,t(i,!0));return e}var o=rn(r);delete o[Q];for(var u=nn(o),a=0;a<u.length;a++){var f=u[a];o[f]=t(f,n||!!o[f].enumerable)}return Object.create(Object.getPrototypeOf(r),o)}(e,n),o={i:e?5:4,A:r?r.A:_(),P:!1,I:!1,R:{},l:r,t:n,k:i,o:null,g:!1,C:!1};return Object.defineProperty(i,Q,{value:o,writable:!0}),i},S:function(n,t,o){o?r(t)&&t[Q].A===n&&e(n.p):(n.u&&function n(r){if(r&&\"object\"==typeof r){var t=r[Q];if(t){var e=t.t,o=t.k,f=t.R,c=t.i;if(4===c)i(o,(function(r){r!==Q&&(void 0!==e[r]||u(e,r)?f[r]||n(o[r]):(f[r]=!0,k(t)))})),i(e,(function(n){void 0!==o[n]||u(o,n)||(f[n]=!1,k(t))}));else if(5===c){if(a(t)&&(k(t),f.length=!0),o.length<e.length)for(var s=o.length;s<e.length;s++)f[s]=!1;else for(var v=e.length;v<o.length;v++)f[v]=!0;for(var p=Math.min(o.length,e.length),l=0;l<p;l++)o.hasOwnProperty(l)||(f[l]=!0),void 0===f[l]&&n(o[l])}}}}(n.p[0]),e(n.p))},K:function(n){return 4===n.i?o(n):a(n)}})}function T(){function e(n){if(!t(n))return n;if(Array.isArray(n))return n.map(e);if(s(n))return new Map(Array.from(n.entries()).map((function(n){return[n[0],e(n[1])]})));if(v(n))return new Set(Array.from(n).map(e));var r=Object.create(Object.getPrototypeOf(n));for(var i in n)r[i]=e(n[i]);return u(n,L)&&(r[L]=n[L]),r}function f(n){return r(n)?e(n):n}var c=\"add\";m(\"Patches\",{$:function(r,t){return t.forEach((function(t){for(var i=t.path,u=t.op,f=r,s=0;s<i.length-1;s++){var v=o(f),p=i[s];\"string\"!=typeof p&&\"number\"!=typeof p&&(p=\"\"+p),0!==v&&1!==v||\"__proto__\"!==p&&\"constructor\"!==p||n(24),\"function\"==typeof f&&\"prototype\"===p&&n(24),\"object\"!=typeof(f=a(f,p))&&n(15,i.join(\"/\"))}var l=o(f),d=e(t.value),h=i[i.length-1];switch(u){case\"replace\":switch(l){case 2:return f.set(h,d);case 3:n(16);default:return f[h]=d}case c:switch(l){case 1:return\"-\"===h?f.push(d):f.splice(h,0,d);case 2:return f.set(h,d);case 3:return f.add(d);default:return f[h]=d}case\"remove\":switch(l){case 1:return f.splice(h,1);case 2:return f.delete(h);case 3:return f.delete(t.value);default:return delete f[h]}default:n(17,u)}})),r},N:function(n,r,t,e){switch(n.i){case 0:case 4:case 2:return function(n,r,t,e){var o=n.t,s=n.o;i(n.R,(function(n,i){var v=a(o,n),p=a(s,n),l=i?u(o,n)?\"replace\":c:\"remove\";if(v!==p||\"replace\"!==l){var d=r.concat(n);t.push(\"remove\"===l?{op:l,path:d}:{op:l,path:d,value:p}),e.push(l===c?{op:\"remove\",path:d}:\"remove\"===l?{op:c,path:d,value:f(v)}:{op:\"replace\",path:d,value:f(v)})}}))}(n,r,t,e);case 5:case 1:return function(n,r,t,e){var i=n.t,o=n.R,u=n.o;if(u.length<i.length){var a=[u,i];i=a[0],u=a[1];var s=[e,t];t=s[0],e=s[1]}for(var v=0;v<i.length;v++)if(o[v]&&u[v]!==i[v]){var p=r.concat([v]);t.push({op:\"replace\",path:p,value:f(u[v])}),e.push({op:\"replace\",path:p,value:f(i[v])})}for(var l=i.length;l<u.length;l++){var d=r.concat([l]);t.push({op:c,path:d,value:f(u[l])})}i.length<u.length&&e.push({op:\"replace\",path:r.concat([\"length\"]),value:i.length})}(n,r,t,e);case 3:return function(n,r,t,e){var i=n.t,o=n.o,u=0;i.forEach((function(n){if(!o.has(n)){var i=r.concat([u]);t.push({op:\"remove\",path:i,value:n}),e.unshift({op:c,path:i,value:n})}u++})),u=0,o.forEach((function(n){if(!i.has(n)){var o=r.concat([u]);t.push({op:c,path:o,value:n}),e.unshift({op:\"remove\",path:o,value:n})}u++}))}(n,r,t,e)}},M:function(n,r,t,e){t.push({op:\"replace\",path:[],value:r===H?void 0:r}),e.push({op:\"replace\",path:[],value:n})}})}function C(){function r(n,r){function t(){this.constructor=n}a(n,r),n.prototype=(t.prototype=r.prototype,new t)}function e(n){n.o||(n.R=new Map,n.o=new Map(n.t))}function o(n){n.o||(n.o=new Set,n.t.forEach((function(r){if(t(r)){var e=N(n.A.h,r,n);n.p.set(r,e),n.o.add(e)}else n.o.add(r)})))}function u(r){r.g&&n(3,JSON.stringify(p(r)))}var a=function(n,r){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var t in r)r.hasOwnProperty(t)&&(n[t]=r[t])})(n,r)},f=function(){function n(n,r){return this[Q]={i:2,l:r,A:r?r.A:_(),P:!1,I:!1,o:void 0,R:void 0,t:n,k:this,C:!1,g:!1},this}r(n,Map);var o=n.prototype;return Object.defineProperty(o,\"size\",{get:function(){return p(this[Q]).size}}),o.has=function(n){return p(this[Q]).has(n)},o.set=function(n,r){var t=this[Q];return u(t),p(t).has(n)&&p(t).get(n)===r||(e(t),k(t),t.R.set(n,!0),t.o.set(n,r),t.R.set(n,!0)),this},o.delete=function(n){if(!this.has(n))return!1;var r=this[Q];return u(r),e(r),k(r),r.t.has(n)?r.R.set(n,!1):r.R.delete(n),r.o.delete(n),!0},o.clear=function(){var n=this[Q];u(n),p(n).size&&(e(n),k(n),n.R=new Map,i(n.t,(function(r){n.R.set(r,!1)})),n.o.clear())},o.forEach=function(n,r){var t=this;p(this[Q]).forEach((function(e,i){n.call(r,t.get(i),i,t)}))},o.get=function(n){var r=this[Q];u(r);var i=p(r).get(n);if(r.I||!t(i))return i;if(i!==r.t.get(n))return i;var o=N(r.A.h,i,r);return e(r),r.o.set(n,o),o},o.keys=function(){return p(this[Q]).keys()},o.values=function(){var n,r=this,t=this.keys();return(n={})[V]=function(){return r.values()},n.next=function(){var n=t.next();return n.done?n:{done:!1,value:r.get(n.value)}},n},o.entries=function(){var n,r=this,t=this.keys();return(n={})[V]=function(){return r.entries()},n.next=function(){var n=t.next();if(n.done)return n;var e=r.get(n.value);return{done:!1,value:[n.value,e]}},n},o[V]=function(){return this.entries()},n}(),c=function(){function n(n,r){return this[Q]={i:3,l:r,A:r?r.A:_(),P:!1,I:!1,o:void 0,t:n,k:this,p:new Map,g:!1,C:!1},this}r(n,Set);var t=n.prototype;return Object.defineProperty(t,\"size\",{get:function(){return p(this[Q]).size}}),t.has=function(n){var r=this[Q];return u(r),r.o?!!r.o.has(n)||!(!r.p.has(n)||!r.o.has(r.p.get(n))):r.t.has(n)},t.add=function(n){var r=this[Q];return u(r),this.has(n)||(o(r),k(r),r.o.add(n)),this},t.delete=function(n){if(!this.has(n))return!1;var r=this[Q];return u(r),o(r),k(r),r.o.delete(n)||!!r.p.has(n)&&r.o.delete(r.p.get(n))},t.clear=function(){var n=this[Q];u(n),p(n).size&&(o(n),k(n),n.o.clear())},t.values=function(){var n=this[Q];return u(n),o(n),n.o.values()},t.entries=function(){var n=this[Q];return u(n),o(n),n.o.entries()},t.keys=function(){return this.values()},t[V]=function(){return this.values()},t.forEach=function(n,r){for(var t=this.values(),e=t.next();!e.done;)n.call(r,e.value,e.value,this),e=t.next()},n}();m(\"MapSet\",{F:function(n,r){return new f(n,r)},T:function(n,r){return new c(n,r)}})}function J(){F(),C(),T()}function K(n){return n}function $(n){return n}var G,U,W=\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol(\"x\"),X=\"undefined\"!=typeof Map,q=\"undefined\"!=typeof Set,B=\"undefined\"!=typeof Proxy&&void 0!==Proxy.revocable&&\"undefined\"!=typeof Reflect,H=W?Symbol.for(\"immer-nothing\"):((G={})[\"immer-nothing\"]=!0,G),L=W?Symbol.for(\"immer-draftable\"):\"__$immer_draftable\",Q=W?Symbol.for(\"immer-state\"):\"__$immer_state\",V=\"undefined\"!=typeof Symbol&&Symbol.iterator||\"@@iterator\",Y={0:\"Illegal state\",1:\"Immer drafts cannot have computed properties\",2:\"This object has been frozen and should not be mutated\",3:function(n){return\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \"+n},4:\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",5:\"Immer forbids circular references\",6:\"The first or second argument to `produce` must be a function\",7:\"The third argument to `produce` must be a function or undefined\",8:\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",9:\"First argument to `finishDraft` must be a draft returned by `createDraft`\",10:\"The given draft is already finalized\",11:\"Object.defineProperty() cannot be used on an Immer draft\",12:\"Object.setPrototypeOf() cannot be used on an Immer draft\",13:\"Immer only supports deleting array indices\",14:\"Immer only supports setting array indices and the 'length' property\",15:function(n){return\"Cannot apply patch, path doesn't resolve: \"+n},16:'Sets cannot have \"replace\" patches.',17:function(n){return\"Unsupported patch operation: \"+n},18:function(n){return\"The plugin for '\"+n+\"' has not been loaded into Immer. To enable the plugin, import and call `enable\"+n+\"()` when initializing your application.\"},20:\"Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available\",21:function(n){return\"produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '\"+n+\"'\"},22:function(n){return\"'current' expects a draft, got: \"+n},23:function(n){return\"'original' expects a draft, got: \"+n},24:\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"},Z=\"\"+Object.prototype.constructor,nn=\"undefined\"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(n){return Object.getOwnPropertyNames(n).concat(Object.getOwnPropertySymbols(n))}:Object.getOwnPropertyNames,rn=Object.getOwnPropertyDescriptors||function(n){var r={};return nn(n).forEach((function(t){r[t]=Object.getOwnPropertyDescriptor(n,t)})),r},tn={},en={get:function(n,r){if(r===Q)return n;var e=p(n);if(!u(e,r))return function(n,r,t){var e,i=I(r,t);return i?\"value\"in i?i.value:null===(e=i.get)||void 0===e?void 0:e.call(n.k):void 0}(n,e,r);var i=e[r];return n.I||!t(i)?i:i===z(n.t,r)?(E(n),n.o[r]=N(n.A.h,i,n)):i},has:function(n,r){return r in p(n)},ownKeys:function(n){return Reflect.ownKeys(p(n))},set:function(n,r,t){var e=I(p(n),r);if(null==e?void 0:e.set)return e.set.call(n.k,t),!0;if(!n.P){var i=z(p(n),r),o=null==i?void 0:i[Q];if(o&&o.t===t)return n.o[r]=t,n.R[r]=!1,!0;if(c(t,i)&&(void 0!==t||u(n.t,r)))return!0;E(n),k(n)}return n.o[r]===t&&(void 0!==t||r in n.o)||Number.isNaN(t)&&Number.isNaN(n.o[r])||(n.o[r]=t,n.R[r]=!0),!0},deleteProperty:function(n,r){return void 0!==z(n.t,r)||r in n.t?(n.R[r]=!1,E(n),k(n)):delete n.R[r],n.o&&delete n.o[r],!0},getOwnPropertyDescriptor:function(n,r){var t=p(n),e=Reflect.getOwnPropertyDescriptor(t,r);return e?{writable:!0,configurable:1!==n.i||\"length\"!==r,enumerable:e.enumerable,value:t[r]}:e},defineProperty:function(){n(11)},getPrototypeOf:function(n){return Object.getPrototypeOf(n.t)},setPrototypeOf:function(){n(12)}},on={};i(en,(function(n,r){on[n]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)}})),on.deleteProperty=function(r,t){return\"production\"!==process.env.NODE_ENV&&isNaN(parseInt(t))&&n(13),on.set.call(this,r,t,void 0)},on.set=function(r,t,e){return\"production\"!==process.env.NODE_ENV&&\"length\"!==t&&isNaN(parseInt(t))&&n(14),en.set.call(this,r[0],t,e,r[0])};var un=function(){function e(r){var e=this;this.O=B,this.D=!0,this.produce=function(r,i,o){if(\"function\"==typeof r&&\"function\"!=typeof i){var u=i;i=r;var a=e;return function(n){var r=this;void 0===n&&(n=u);for(var t=arguments.length,e=Array(t>1?t-1:0),o=1;o<t;o++)e[o-1]=arguments[o];return a.produce(n,(function(n){var t;return(t=i).call.apply(t,[r,n].concat(e))}))}}var f;if(\"function\"!=typeof i&&n(6),void 0!==o&&\"function\"!=typeof o&&n(7),t(r)){var c=w(e),s=N(e,r,void 0),v=!0;try{f=i(s),v=!1}finally{v?g(c):O(c)}return\"undefined\"!=typeof Promise&&f instanceof Promise?f.then((function(n){return j(c,o),P(n,c)}),(function(n){throw g(c),n})):(j(c,o),P(f,c))}if(!r||\"object\"!=typeof r){if(void 0===(f=i(r))&&(f=r),f===H&&(f=void 0),e.D&&d(f,!0),o){var p=[],l=[];b(\"Patches\").M(r,f,p,l),o(p,l)}return f}n(21,r)},this.produceWithPatches=function(n,r){if(\"function\"==typeof n)return function(r){for(var t=arguments.length,i=Array(t>1?t-1:0),o=1;o<t;o++)i[o-1]=arguments[o];return e.produceWithPatches(r,(function(r){return n.apply(void 0,[r].concat(i))}))};var t,i,o=e.produce(n,r,(function(n,r){t=n,i=r}));return\"undefined\"!=typeof Promise&&o instanceof Promise?o.then((function(n){return[n,t,i]})):[o,t,i]},\"boolean\"==typeof(null==r?void 0:r.useProxies)&&this.setUseProxies(r.useProxies),\"boolean\"==typeof(null==r?void 0:r.autoFreeze)&&this.setAutoFreeze(r.autoFreeze)}var i=e.prototype;return i.createDraft=function(e){t(e)||n(8),r(e)&&(e=R(e));var i=w(this),o=N(this,e,void 0);return o[Q].C=!0,O(i),o},i.finishDraft=function(r,t){var e=r&&r[Q];\"production\"!==process.env.NODE_ENV&&(e&&e.C||n(9),e.I&&n(10));var i=e.A;return j(i,t),P(void 0,i)},i.setAutoFreeze=function(n){this.D=n},i.setUseProxies=function(r){r&&!B&&n(20),this.O=r},i.applyPatches=function(n,t){var e;for(e=t.length-1;e>=0;e--){var i=t[e];if(0===i.path.length&&\"replace\"===i.op){n=i.value;break}}e>-1&&(t=t.slice(e+1));var o=b(\"Patches\").$;return r(n)?o(n,t):this.produce(n,(function(n){return o(n,t)}))},e}(),an=new un,fn=an.produce,cn=an.produceWithPatches.bind(an),sn=an.setAutoFreeze.bind(an),vn=an.setUseProxies.bind(an),pn=an.applyPatches.bind(an),ln=an.createDraft.bind(an),dn=an.finishDraft.bind(an);export default fn;export{un as Immer,pn as applyPatches,K as castDraft,$ as castImmutable,ln as createDraft,R as current,J as enableAllPlugins,F as enableES5,C as enableMapSet,T as enablePatches,dn as finishDraft,d as freeze,L as immerable,r as isDraft,t as isDraftable,H as nothing,e as original,fn as produce,cn as produceWithPatches,sn as setAutoFreeze,vn as setUseProxies};\n//# sourceMappingURL=immer.esm.js.map\n","import { ApplicationState } from '@app/State';\r\nimport { createContext } from 'react';\r\nimport { AppSettings } from '../Models';\r\n\r\nexport const StateContext = createContext<ApplicationState>({} as ApplicationState);\r\nexport const StepContext = createContext<string>({} as string);\r\nexport const AppSettingsContext = createContext<AppSettings | null>({} as AppSettings);\r\n","import { createRef, RefObject, useMemo } from 'react';\r\n\r\ninterface IWithRef {\r\n ref: RefObject<HTMLDivElement>;\r\n}\r\n\r\nexport const useScrollTo = (items: any[], block: ScrollLogicalPosition = 'center') => {\r\n const refs: IWithRef[] = useMemo(() => items.map(item => ({ ...item, ref: createRef<HTMLDivElement>() })), [items]);\r\n\r\n return {\r\n getRef,\r\n scrollTo,\r\n };\r\n\r\n function getRef(refIndex: number) {\r\n return refs.filter((_, index) => index === refIndex)[0].ref;\r\n }\r\n\r\n function scrollTo(refIndex: number) {\r\n const ref = getRef(refIndex).current;\r\n if (!ref || !ref.scrollIntoView) {\r\n return;\r\n }\r\n\r\n ref.scrollIntoView({ block, behavior: 'smooth' });\r\n }\r\n};\r\n","import { useEffect } from 'react';\r\n\r\nimport { useResize } from './Resize';\r\n\r\nexport enum Viewport {\r\n ExtraExtraSmall = 'xxs',\r\n ExtraSmall = 'xs',\r\n Small = 's',\r\n Medium = 'm',\r\n Large = 'l',\r\n ExtraLarge = 'xl',\r\n ExtraExtraLarge = 'xxl',\r\n}\r\n\r\nexport const useViewport = (callback: (viewport: Viewport) => void) => {\r\n let viewport: Viewport | null = null;\r\n\r\n useEffect(() => {\r\n const width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\r\n callback((viewport = getViewportFromWidth(width)));\r\n }, []);\r\n\r\n useResize((width: number) => {\r\n const localViewport = getViewportFromWidth(width);\r\n if (viewport !== localViewport) callback((viewport = localViewport));\r\n });\r\n};\r\n\r\nfunction getViewportFromWidth(width: number) {\r\n return (\r\n width <= 400 ? Viewport.ExtraExtraSmall\r\n : width > 400 && width <= 768 ? Viewport.ExtraSmall\r\n : width > 768 && width <= 1135 ? Viewport.Small\r\n : width > 1135 && width <= 1300 ? Viewport.Medium\r\n : width > 1300 && width <= 1599 ? Viewport.Large\r\n : width > 1599 && width <= 1799 ? Viewport.ExtraLarge\r\n : Viewport.ExtraExtraLarge\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { Colors, FontSizes } from './Styles';\r\nimport { Paragraph } from './Paragraph';\r\n\r\nexport class BlockQuote extends React.Component<React.PropsWithChildren> {\r\n render() {\r\n const { children } = this.props;\r\n\r\n return (\r\n <div\r\n style={{\r\n borderLeft: `4px solid ${Colors.lightGray2}`,\r\n padding: '0 0 0 12px',\r\n margin: '0 0 24px 0',\r\n }}\r\n >\r\n <Paragraph fontSize={FontSizes.small3} margin='0 0 8px 0'>\r\n {children}\r\n </Paragraph>\r\n </div>\r\n );\r\n }\r\n}\r\n","import { logError } from '@api/ApiCaller';\r\nimport { getMessageFromError, isAdmin, stackTraceWithSourceMaps, toPhoneNumber } from '@shared/Common';\r\nimport { useAsyncEffect } from '@shared/Hooks';\r\nimport { ApiError } from '@shared/Models';\r\nimport { useContext, useState } from 'react';\r\nimport { AppSettingsContext } from '../State/Context';\r\nimport { ApplicationError, Severity } from '../State/Models';\r\n\r\n/** If an error is thrown in the SPA, the router will automatically catch and format the error message.\r\n * @param exception The exception could be almost anything, so the type is \"unknown\".\r\n * */\r\nexport function useRouterErrorElement(exception: unknown) {\r\n const appSettings = useContext(AppSettingsContext),\r\n [errorMessage, setErrorMessage] = useState<string | null>(null),\r\n [stackTrace, setStackTrace] = useState<string | null>(null);\r\n\r\n const supportPhone = toPhoneNumber(appSettings?.customerSupportPhoneNumber || ''),\r\n applicationError = { exception, severity: Severity.error } as ApplicationError,\r\n admin = isAdmin();\r\n\r\n useAsyncEffect(onErrorReceived, [exception]);\r\n\r\n return {\r\n errorMessage,\r\n stackTrace,\r\n supportPhone,\r\n admin,\r\n };\r\n\r\n async function onErrorReceived() {\r\n setErrorMessage(await getErrorMessage());\r\n\r\n const st = await stackTraceWithSourceMaps(applicationError.exception);\r\n if (!st) return;\r\n setStackTrace(st);\r\n await logError(new ApiError('SinglePageApplication', 'ERROR', st));\r\n\r\n async function getErrorMessage() {\r\n const actionError = await getMessageFromError(exception as any),\r\n message = !!actionError ? actionError : 'There was an unexpected error. Please try again.';\r\n return message;\r\n }\r\n }\r\n}\r\n","import { pages } from '@shared/Constants';\r\nimport { ErrorIcon, Link, Paragraph, Title } from '@webkit/index';\r\nimport { clsx } from 'clsx';\r\nimport { useRouterErrorElement } from './hook';\r\n\r\ninterface Props {\r\n exception: unknown;\r\n}\r\n\r\nexport function ErrorInternal(props: Props) {\r\n const { errorMessage, stackTrace, supportPhone, admin } = useRouterErrorElement(props.exception);\r\n\r\n return (\r\n <div className='max-w-prose m-auto min-h-[calc(100vh-56px)] p-[25px] xs:p-[15px]'>\r\n <div\r\n className={clsx(\r\n 'relative p-[25px] bg-white shadow-lg',\r\n 'border-0 border-t-[12px] border-solid border-brand-red-150 rounded-sm'\r\n )}\r\n >\r\n <div className='max-w-prose m-auto grid grid-cols-1 gap-4'>\r\n <div className='inline-flex items-center gap-2 mb-2'>\r\n <ErrorIcon fontSize='large' className='text-brand-red-250' />\r\n <Title>Uh oh!</Title>\r\n </div>\r\n\r\n <Paragraph size='lg'>\r\n <strong>{errorMessage}</strong>\r\n </Paragraph>\r\n\r\n {admin && stackTrace && <pre className='text-xs'>{stackTrace}</pre>}\r\n\r\n <div>\r\n <hr className='my-3 text-brand-gray-600' />\r\n <Paragraph size='sm'>\r\n See <Link href={pages.ContactUs}>options to contact us</Link> or call us at{' '}\r\n <Link href={`tel:${supportPhone}`}>{supportPhone}</Link>.\r\n </Paragraph>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useRouteError } from 'react-router-dom-v5-compat';\r\nimport { ErrorInternal } from './internal';\r\n\r\ninterface Props {\r\n error: unknown;\r\n}\r\n\r\nexport function RouteError({ error }: Props) {\r\n return <ErrorInternal exception={error} />;\r\n}\r\n\r\nexport function ErrorElement() {\r\n const error = useRouteError();\r\n return <ErrorInternal exception={error} />;\r\n}\r\n","import { WithError } from '@app/State/Models';\r\nimport {\r\n ComparisonElementDescriptionModel,\r\n ComparisonQuoteModel,\r\n ComparisonQuotesModel,\r\n Mutable,\r\n RepriceModel,\r\n} from '@shared/Models';\r\nimport { produce } from 'immer';\r\nimport * as React from 'react';\r\n\r\nexport type ImsRaterQuoteState = {\r\n readonly quoteId: string;\r\n readonly visibleQuoteIds: string[];\r\n readonly repriceModel: RepriceModel | null;\r\n readonly comparisonModel: ComparisonQuotesModel | null;\r\n readonly elementDescriptions: ComparisonElementDescriptionModel[];\r\n readonly manualPremiumAdjustment?: number;\r\n} & WithError;\r\n\r\nexport type MutableImsRaterQuoteState = Mutable<ImsRaterQuoteState>;\r\n\r\nexport enum ActionType {\r\n Update,\r\n Revert,\r\n}\r\n\r\nexport type Action = {\r\n type: ActionType;\r\n updater?: (state: MutableImsRaterQuoteState) => void;\r\n};\r\n\r\nexport type ImsRaterQuoteStateHook = {\r\n state: ImsRaterQuoteState;\r\n update: (updater: (state: MutableImsRaterQuoteState) => void) => void;\r\n revert: () => void;\r\n};\r\n\r\nexport const useImsRaterQuoteState = (): ImsRaterQuoteStateHook => {\r\n const [state, dispatch] = React.useReducer(reducer, {\r\n quoteId: '',\r\n visibleQuoteIds: [],\r\n repriceModel: null,\r\n comparisonModel: null,\r\n elementDescriptions: [] as ComparisonElementDescriptionModel[],\r\n manualPremiumAdjustment: 0,\r\n error: null,\r\n warning: null,\r\n });\r\n\r\n return {\r\n state,\r\n update: (updater: (state: MutableImsRaterQuoteState) => void) => dispatch({ type: ActionType.Update, updater }),\r\n revert: () => dispatch({ type: ActionType.Revert }),\r\n };\r\n\r\n function reducer(state: ImsRaterQuoteState, action: Action) {\r\n const { type, updater } = action;\r\n\r\n switch (type) {\r\n case ActionType.Update:\r\n return updater ? produce(state, draft => updater(draft as Mutable<ImsRaterQuoteState>)) : { ...state };\r\n case ActionType.Revert:\r\n return { ...state };\r\n default:\r\n throw new Error(ActionType[action.type] + ' action not implemented.');\r\n }\r\n }\r\n};\r\n\r\nexport const ImsRaterQuoteStateContext = React.createContext<ImsRaterQuoteStateHook>({} as ImsRaterQuoteStateHook);\r\n\r\nexport const ComparisonQuoteModelContext = React.createContext<ComparisonQuoteModel>({} as ComparisonQuoteModel);\r\n","import { RatingType } from '@business/CommonSets';\r\n\r\nexport enum ColorScheme {\r\n Standard = 'standard-color-scheme',\r\n Rater = 'rater-color-scheme',\r\n Urq = 'urq-color-scheme',\r\n}\r\n\r\nexport function getRatingTypeColor(ratingType: RatingType): string {\r\n return ratingType.switch({\r\n onAdmitted: () => '!bg-brand-green-100',\r\n onEAndS: () => '!bg-brand-purple-200',\r\n onNfip: () => '!bg-brand-blue-200',\r\n });\r\n}\r\n","import { ImsRaterQuoteStateContext } from '@app/ImsRaterQuote/State';\r\nimport { ColorScheme } from '@app/ProductComparison/ColorScheme';\r\nimport { StateContext } from '@app/State';\r\nimport { useContext, useEffect } from 'react';\r\nimport { ViewWrapperProps } from './models';\r\n\r\n/** Sets the body class name for the color scheme and the HTML page title on load. */\r\nexport function useViewWrapper(props: ViewWrapperProps) {\r\n const { id, isLoading, includeTopBuffer, className } = props,\r\n application = useContext(StateContext),\r\n imsState = useContext(ImsRaterQuoteStateContext),\r\n error = application?.state?.error || imsState?.state?.error;\r\n\r\n useEffect(setTitleAndColorScheme, [props.title, props.colorScheme]);\r\n\r\n return {\r\n id,\r\n includeTopBuffer,\r\n isLoading,\r\n className,\r\n error,\r\n };\r\n\r\n function setTitleAndColorScheme() {\r\n document.title = props.title ? `Swyfft - ${props.title}` : 'Swyfft.com';\r\n document.body.className = props.colorScheme || ColorScheme.Standard;\r\n }\r\n}\r\n","import { RouteError } from '@app/Error';\r\nimport { Spinner } from '@webkit/index';\r\nimport { clsx } from 'clsx';\r\nimport { PropsWithChildren } from 'react';\r\nimport { useViewWrapper } from './hook';\r\nimport { ViewWrapperProps } from './models';\r\nimport './style.scss';\r\n\r\n/** The component that handles the layout, color scheme, and sets the HTML page title. */\r\nexport function ViewWrapper(props: PropsWithChildren<ViewWrapperProps>) {\r\n const { id, includeTopBuffer, isLoading, className, error } = useViewWrapper(props);\r\n\r\n if (error) return <RouteError error={error} />;\r\n\r\n return (\r\n <div id={id}>\r\n {includeTopBuffer && <div className='top-buffer' />}\r\n\r\n <div className='wrapper'>\r\n <div className={clsx('view-wrapper', className)}>\r\n {isLoading ? (\r\n <div className='spinner-wrapper'>\r\n <Spinner size='md' />\r\n </div>\r\n ) : (\r\n <div>{props.children}</div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","var t=function(){return t=Object.assign||function(t){for(var i,n=1,s=arguments.length;n<s;n++)for(var a in i=arguments[n])Object.prototype.hasOwnProperty.call(i,a)&&(t[a]=i[a]);return t},t.apply(this,arguments)},i=function(){function i(i,n,s){var a=this;this.endVal=n,this.options=s,this.version=\"2.8.0\",this.defaults={startVal:0,decimalPlaces:0,duration:2,useEasing:!0,useGrouping:!0,useIndianSeparators:!1,smartEasingThreshold:999,smartEasingAmount:333,separator:\",\",decimal:\".\",prefix:\"\",suffix:\"\",enableScrollSpy:!1,scrollSpyDelay:200,scrollSpyOnce:!1},this.finalEndVal=null,this.useEasing=!0,this.countDown=!1,this.error=\"\",this.startVal=0,this.paused=!0,this.once=!1,this.count=function(t){a.startTime||(a.startTime=t);var i=t-a.startTime;a.remaining=a.duration-i,a.useEasing?a.countDown?a.frameVal=a.startVal-a.easingFn(i,0,a.startVal-a.endVal,a.duration):a.frameVal=a.easingFn(i,a.startVal,a.endVal-a.startVal,a.duration):a.frameVal=a.startVal+(a.endVal-a.startVal)*(i/a.duration);var n=a.countDown?a.frameVal<a.endVal:a.frameVal>a.endVal;a.frameVal=n?a.endVal:a.frameVal,a.frameVal=Number(a.frameVal.toFixed(a.options.decimalPlaces)),a.printValue(a.frameVal),i<a.duration?a.rAF=requestAnimationFrame(a.count):null!==a.finalEndVal?a.update(a.finalEndVal):a.options.onCompleteCallback&&a.options.onCompleteCallback()},this.formatNumber=function(t){var i,n,s,e,o=t<0?\"-\":\"\";i=Math.abs(t).toFixed(a.options.decimalPlaces);var r=(i+=\"\").split(\".\");if(n=r[0],s=r.length>1?a.options.decimal+r[1]:\"\",a.options.useGrouping){e=\"\";for(var l=3,h=0,u=0,p=n.length;u<p;++u)a.options.useIndianSeparators&&4===u&&(l=2,h=1),0!==u&&h%l==0&&(e=a.options.separator+e),h++,e=n[p-u-1]+e;n=e}return a.options.numerals&&a.options.numerals.length&&(n=n.replace(/[0-9]/g,(function(t){return a.options.numerals[+t]})),s=s.replace(/[0-9]/g,(function(t){return a.options.numerals[+t]}))),o+a.options.prefix+n+s+a.options.suffix},this.easeOutExpo=function(t,i,n,s){return n*(1-Math.pow(2,-10*t/s))*1024/1023+i},this.options=t(t({},this.defaults),s),this.formattingFn=this.options.formattingFn?this.options.formattingFn:this.formatNumber,this.easingFn=this.options.easingFn?this.options.easingFn:this.easeOutExpo,this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.endVal=this.validateValue(n),this.options.decimalPlaces=Math.max(this.options.decimalPlaces),this.resetDuration(),this.options.separator=String(this.options.separator),this.useEasing=this.options.useEasing,\"\"===this.options.separator&&(this.options.useGrouping=!1),this.el=\"string\"==typeof i?document.getElementById(i):i,this.el?this.printValue(this.startVal):this.error=\"[CountUp] target is null or undefined\",\"undefined\"!=typeof window&&this.options.enableScrollSpy&&(this.error?console.error(this.error,i):(window.onScrollFns=window.onScrollFns||[],window.onScrollFns.push((function(){return a.handleScroll(a)})),window.onscroll=function(){window.onScrollFns.forEach((function(t){return t()}))},this.handleScroll(this)))}return i.prototype.handleScroll=function(t){if(t&&window&&!t.once){var i=window.innerHeight+window.scrollY,n=t.el.getBoundingClientRect(),s=n.top+window.pageYOffset,a=n.top+n.height+window.pageYOffset;a<i&&a>window.scrollY&&t.paused?(t.paused=!1,setTimeout((function(){return t.start()}),t.options.scrollSpyDelay),t.options.scrollSpyOnce&&(t.once=!0)):(window.scrollY>a||s>i)&&!t.paused&&t.reset()}},i.prototype.determineDirectionAndSmartEasing=function(){var t=this.finalEndVal?this.finalEndVal:this.endVal;this.countDown=this.startVal>t;var i=t-this.startVal;if(Math.abs(i)>this.options.smartEasingThreshold&&this.options.useEasing){this.finalEndVal=t;var n=this.countDown?1:-1;this.endVal=t+n*this.options.smartEasingAmount,this.duration=this.duration/2}else this.endVal=t,this.finalEndVal=null;null!==this.finalEndVal?this.useEasing=!1:this.useEasing=this.options.useEasing},i.prototype.start=function(t){this.error||(this.options.onStartCallback&&this.options.onStartCallback(),t&&(this.options.onCompleteCallback=t),this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal))},i.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused},i.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal)},i.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,null==this.finalEndVal&&this.resetDuration(),this.finalEndVal=null,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count))},i.prototype.printValue=function(t){var i;if(this.el){var n=this.formattingFn(t);if(null===(i=this.options.plugin)||void 0===i?void 0:i.render)this.options.plugin.render(this.el,n);else if(\"INPUT\"===this.el.tagName)this.el.value=n;else\"text\"===this.el.tagName||\"tspan\"===this.el.tagName?this.el.textContent=n:this.el.innerHTML=n}},i.prototype.ensureNumber=function(t){return\"number\"==typeof t&&!isNaN(t)},i.prototype.validateValue=function(t){var i=Number(t);return this.ensureNumber(i)?i:(this.error=\"[CountUp] invalid start or end value: \".concat(t),null)},i.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration},i}();export{i as CountUp};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar React = require('react');\nvar countup_js = require('countup.js');\n\nfunction _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : String(i);\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n/**\n * Silence SSR Warnings.\n * Borrowed from Formik v2.1.1, Licensed MIT.\n *\n * https://github.com/formium/formik/blob/9316a864478f8fcd4fa99a0735b1d37afdf507dc/LICENSE\n */\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Create a stable reference to a callback which is updated after each render is committed.\n * Typed version borrowed from Formik v2.2.1. Licensed MIT.\n *\n * https://github.com/formium/formik/blob/9316a864478f8fcd4fa99a0735b1d37afdf507dc/LICENSE\n */\nfunction useEventCallback(fn) {\n var ref = React.useRef(fn);\n\n // we copy a ref to the callback scoped to the current state/props on each render\n useIsomorphicLayoutEffect(function () {\n ref.current = fn;\n });\n return React.useCallback(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return ref.current.apply(void 0, args);\n }, []);\n}\n\nvar createCountUpInstance = function createCountUpInstance(el, props) {\n var decimal = props.decimal,\n decimals = props.decimals,\n duration = props.duration,\n easingFn = props.easingFn,\n end = props.end,\n formattingFn = props.formattingFn,\n numerals = props.numerals,\n prefix = props.prefix,\n separator = props.separator,\n start = props.start,\n suffix = props.suffix,\n useEasing = props.useEasing,\n useGrouping = props.useGrouping,\n useIndianSeparators = props.useIndianSeparators,\n enableScrollSpy = props.enableScrollSpy,\n scrollSpyDelay = props.scrollSpyDelay,\n scrollSpyOnce = props.scrollSpyOnce,\n plugin = props.plugin;\n return new countup_js.CountUp(el, end, {\n startVal: start,\n duration: duration,\n decimal: decimal,\n decimalPlaces: decimals,\n easingFn: easingFn,\n formattingFn: formattingFn,\n numerals: numerals,\n separator: separator,\n prefix: prefix,\n suffix: suffix,\n plugin: plugin,\n useEasing: useEasing,\n useIndianSeparators: useIndianSeparators,\n useGrouping: useGrouping,\n enableScrollSpy: enableScrollSpy,\n scrollSpyDelay: scrollSpyDelay,\n scrollSpyOnce: scrollSpyOnce\n });\n};\n\nvar _excluded$1 = [\"ref\", \"startOnMount\", \"enableReinitialize\", \"delay\", \"onEnd\", \"onStart\", \"onPauseResume\", \"onReset\", \"onUpdate\"];\nvar DEFAULTS = {\n decimal: '.',\n separator: ',',\n delay: null,\n prefix: '',\n suffix: '',\n duration: 2,\n start: 0,\n decimals: 0,\n startOnMount: true,\n enableReinitialize: true,\n useEasing: true,\n useGrouping: true,\n useIndianSeparators: false\n};\nvar useCountUp = function useCountUp(props) {\n var filteredProps = Object.fromEntries(Object.entries(props).filter(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n value = _ref2[1];\n return value !== undefined;\n }));\n var _useMemo = React.useMemo(function () {\n return _objectSpread2(_objectSpread2({}, DEFAULTS), filteredProps);\n }, [props]),\n ref = _useMemo.ref,\n startOnMount = _useMemo.startOnMount,\n enableReinitialize = _useMemo.enableReinitialize,\n delay = _useMemo.delay,\n onEnd = _useMemo.onEnd,\n onStart = _useMemo.onStart,\n onPauseResume = _useMemo.onPauseResume,\n onReset = _useMemo.onReset,\n onUpdate = _useMemo.onUpdate,\n instanceProps = _objectWithoutProperties(_useMemo, _excluded$1);\n var countUpRef = React.useRef();\n var timerRef = React.useRef();\n var isInitializedRef = React.useRef(false);\n var createInstance = useEventCallback(function () {\n return createCountUpInstance(typeof ref === 'string' ? ref : ref.current, instanceProps);\n });\n var getCountUp = useEventCallback(function (recreate) {\n var countUp = countUpRef.current;\n if (countUp && !recreate) {\n return countUp;\n }\n var newCountUp = createInstance();\n countUpRef.current = newCountUp;\n return newCountUp;\n });\n var start = useEventCallback(function () {\n var run = function run() {\n return getCountUp(true).start(function () {\n onEnd === null || onEnd === void 0 || onEnd({\n pauseResume: pauseResume,\n reset: reset,\n start: restart,\n update: update\n });\n });\n };\n if (delay && delay > 0) {\n timerRef.current = setTimeout(run, delay * 1000);\n } else {\n run();\n }\n onStart === null || onStart === void 0 || onStart({\n pauseResume: pauseResume,\n reset: reset,\n update: update\n });\n });\n var pauseResume = useEventCallback(function () {\n getCountUp().pauseResume();\n onPauseResume === null || onPauseResume === void 0 || onPauseResume({\n reset: reset,\n start: restart,\n update: update\n });\n });\n var reset = useEventCallback(function () {\n // Quick fix for https://github.com/glennreyes/react-countup/issues/736 - should be investigated\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (getCountUp().el) {\n timerRef.current && clearTimeout(timerRef.current);\n getCountUp().reset();\n onReset === null || onReset === void 0 || onReset({\n pauseResume: pauseResume,\n start: restart,\n update: update\n });\n }\n });\n var update = useEventCallback(function (newEnd) {\n getCountUp().update(newEnd);\n onUpdate === null || onUpdate === void 0 || onUpdate({\n pauseResume: pauseResume,\n reset: reset,\n start: restart\n });\n });\n var restart = useEventCallback(function () {\n reset();\n start();\n });\n var maybeInitialize = useEventCallback(function (shouldReset) {\n if (startOnMount) {\n if (shouldReset) {\n reset();\n }\n start();\n }\n });\n React.useEffect(function () {\n if (!isInitializedRef.current) {\n isInitializedRef.current = true;\n maybeInitialize();\n } else if (enableReinitialize) {\n maybeInitialize(true);\n }\n }, [enableReinitialize, isInitializedRef, maybeInitialize, delay, props.start, props.suffix, props.prefix, props.duration, props.separator, props.decimals, props.decimal, props.formattingFn]);\n React.useEffect(function () {\n return function () {\n reset();\n };\n }, [reset]);\n return {\n start: restart,\n pauseResume: pauseResume,\n reset: reset,\n update: update,\n getCountUp: getCountUp\n };\n};\n\nvar _excluded = [\"className\", \"redraw\", \"containerProps\", \"children\", \"style\"];\nvar CountUp = function CountUp(props) {\n var className = props.className,\n redraw = props.redraw,\n containerProps = props.containerProps,\n children = props.children,\n style = props.style,\n useCountUpProps = _objectWithoutProperties(props, _excluded);\n var containerRef = React.useRef(null);\n var isInitializedRef = React.useRef(false);\n var _useCountUp = useCountUp(_objectSpread2(_objectSpread2({}, useCountUpProps), {}, {\n ref: containerRef,\n startOnMount: typeof children !== 'function' || props.delay === 0,\n // component manually restarts\n enableReinitialize: false\n })),\n start = _useCountUp.start,\n reset = _useCountUp.reset,\n updateCountUp = _useCountUp.update,\n pauseResume = _useCountUp.pauseResume,\n getCountUp = _useCountUp.getCountUp;\n var restart = useEventCallback(function () {\n start();\n });\n var update = useEventCallback(function (end) {\n if (!props.preserveValue) {\n reset();\n }\n updateCountUp(end);\n });\n var initializeOnMount = useEventCallback(function () {\n if (typeof props.children === 'function') {\n // Warn when user didn't use containerRef at all\n if (!(containerRef.current instanceof Element)) {\n console.error(\"Couldn't find attached element to hook the CountUp instance into! Try to attach \\\"containerRef\\\" from the render prop to a an Element, eg. <span ref={containerRef} />.\");\n return;\n }\n }\n\n // unlike the hook, the CountUp component initializes on mount\n getCountUp();\n });\n React.useEffect(function () {\n initializeOnMount();\n }, [initializeOnMount]);\n React.useEffect(function () {\n if (isInitializedRef.current) {\n update(props.end);\n }\n }, [props.end, update]);\n var redrawDependencies = redraw && props;\n\n // if props.redraw, call this effect on every props change\n React.useEffect(function () {\n if (redraw && isInitializedRef.current) {\n restart();\n }\n }, [restart, redraw, redrawDependencies]);\n\n // if not props.redraw, call this effect only when certain props are changed\n React.useEffect(function () {\n if (!redraw && isInitializedRef.current) {\n restart();\n }\n }, [restart, redraw, props.start, props.suffix, props.prefix, props.duration, props.separator, props.decimals, props.decimal, props.className, props.formattingFn]);\n React.useEffect(function () {\n isInitializedRef.current = true;\n }, []);\n if (typeof children === 'function') {\n // TypeScript forces functional components to return JSX.Element | null.\n return children({\n countUpRef: containerRef,\n start: start,\n reset: reset,\n update: updateCountUp,\n pauseResume: pauseResume,\n getCountUp: getCountUp\n });\n }\n return /*#__PURE__*/React.createElement(\"span\", _extends({\n className: className,\n ref: containerRef,\n style: style\n }, containerProps), typeof props.start !== 'undefined' ? getCountUp().formattingFn(props.start) : '');\n};\n\nexports.default = CountUp;\nexports.useCountUp = useCountUp;\n","import * as React from 'react';\r\nimport { FunctionComponent, useEffect, useRef } from 'react';\r\nimport { useCountUp } from 'react-countup';\r\nimport './style.scss';\r\n\r\ninterface Props {\r\n amount: number;\r\n className?: string;\r\n subtext?: JSX.Element;\r\n id: string;\r\n}\r\n\r\nexport const Price: FunctionComponent<Props> = props => {\r\n const priceRef = useRef<HTMLDivElement>(null),\r\n { update } = useCountUp({\r\n ref: priceRef,\r\n start: 0,\r\n end: props.amount,\r\n duration: 1,\r\n prefix: '$',\r\n separator: ',',\r\n useEasing: true,\r\n easingFn,\r\n });\r\n\r\n useEffect(() => update(props.amount), [props.amount]);\r\n\r\n return (\r\n <div className={`comparison-price ${props.className || ''}`}>\r\n <div className={'amount-and-term'}>\r\n <div\r\n id={`premium-amount-${props.id}`}\r\n ref={priceRef}\r\n className={`amount ${props.amount > 0 ? 'visible' : ''}`}\r\n />\r\n\r\n <div className={`amount ${props.amount === 0 ? 'visible' : ''}`}>$----</div>\r\n\r\n {props.amount > 0 && <div className='term'>/ yr</div>}\r\n </div>\r\n {props.subtext && <div className='subtext'>{props.subtext}</div>}\r\n </div>\r\n );\r\n\r\n function easingFn(t, b, c, d) {\r\n return c * ((t = t / d - 1) * t * t + 1) + b;\r\n }\r\n};\r\n","import { useClassName } from '@shared/Hooks';\r\nimport './style.scss';\r\n\r\ninterface LogoProps {\r\n id?: string;\r\n src: string;\r\n alt: string;\r\n className?: string;\r\n}\r\n\r\nexport function Logo({ id, src, alt, className }: LogoProps) {\r\n const logoClassName = useClassName('comparison-logo', [className]);\r\n return <img id={id} className={logoClassName} src={src} alt={alt} />;\r\n}\r\n","import { useClassName } from '@shared/Hooks';\r\nimport { CSSProperties, FunctionComponent } from 'react';\r\nimport './style.scss';\r\n\r\ninterface Props {\r\n position: 'left' | 'right';\r\n visible: boolean;\r\n onClick: () => void;\r\n style?: CSSProperties;\r\n className?: string;\r\n}\r\n\r\nexport const NavigationArrow: FunctionComponent<Props> = props => {\r\n const className = useClassName('navigation-arrow', [\r\n props.position,\r\n props.visible ? 'visible' : '',\r\n props.className,\r\n ]);\r\n return (\r\n <div className={className} onClick={props.onClick} style={props.style}>\r\n <div className='chevron' />\r\n </div>\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { FunctionComponent } from 'react';\r\nimport './style.scss';\r\n\r\ninterface Props {\r\n className?: string;\r\n}\r\n\r\nexport const SidebarCell: FunctionComponent<Props & React.PropsWithChildren> = props => {\r\n return (\r\n <div className='sidebar-cell'>\r\n {props.children}\r\n <div className={'sidebar-cell-buffer'} />\r\n </div>\r\n );\r\n};\r\n","import { SidebarCell } from '@app/ProductComparison/SidebarCell';\r\nimport { clsx } from 'clsx';\r\nimport { ComponentPropsWithoutRef, CSSProperties, forwardRef, PropsWithChildren } from 'react';\r\nimport './style.scss';\r\n\r\ninterface RowProps extends ComponentPropsWithoutRef<'div'>, PropsWithChildren {\r\n sidebar?: string | JSX.Element;\r\n header?: boolean;\r\n className?: string;\r\n style?: CSSProperties;\r\n}\r\n\r\nexport const Row = forwardRef<HTMLDivElement | null, PropsWithChildren<RowProps>>(function (\r\n { id, sidebar, header, className, style, children },\r\n ref\r\n) {\r\n return (\r\n <div ref={ref} className={clsx('comparison-row', [header && 'header', className])} style={style} id={id}>\r\n <SidebarCell>{sidebar}</SidebarCell>\r\n\r\n {children}\r\n </div>\r\n );\r\n});\r\n","import { NavigationArrow } from '@app/ProductComparison/NavigationArrow';\r\nimport { Row } from '@app/ProductComparison/Row';\r\nimport { Mobile, TabletAndDesktop } from '@legacy/Components/MediaQueries/MediaQueries';\r\nimport { useClassName, useResize } from '@shared/Hooks';\r\nimport { PropsWithChildren, useEffect, useRef, useState } from 'react';\r\nimport './style.scss';\r\n\r\ninterface ComparisonTableProps {\r\n sidebarHeader: () => JSX.Element;\r\n tileHeaders: JSX.Element[];\r\n totalTiles: number;\r\n visibleQuoteIds: string[];\r\n tileCount: number;\r\n tileIndex: number;\r\n setTileIndex: (index: number) => void;\r\n issueSection: () => JSX.Element;\r\n className?: string;\r\n children;\r\n}\r\n\r\nexport function ComparisonTable({\r\n sidebarHeader,\r\n tileHeaders,\r\n totalTiles,\r\n visibleQuoteIds,\r\n tileCount,\r\n tileIndex,\r\n setTileIndex,\r\n issueSection,\r\n className,\r\n children,\r\n}: PropsWithChildren<ComparisonTableProps>) {\r\n // These states control the sizing and positioning of elements in the table\r\n const [bufferWidth, setBufferWidth] = useState<number>(0);\r\n\r\n const tableClassName = useClassName('comparison-table', [\r\n getClassName(),\r\n visibleQuoteIds.length === 1 ? 'single-quote' : 'multiple-quotes',\r\n className,\r\n ]);\r\n\r\n const tableRef = useRef<HTMLDivElement>(null),\r\n stickyHeaderRef = useRef<HTMLDivElement>(null);\r\n\r\n // When resizing, recalculate the width of the table and the buffer, and the sticky header position\r\n useResize(() => {\r\n handleBufferWidth();\r\n });\r\n\r\n // Whenever the tile states change, recalculate the width of the table and the buffer, and the sticky header position\r\n useEffect(() => {\r\n setContainerClassName();\r\n handleBufferWidth();\r\n }, [totalTiles, visibleQuoteIds, tileCount, tileIndex, tileHeaders]);\r\n\r\n return (\r\n <>\r\n <div className='left-buffer' style={{ width: bufferWidth }} />\r\n <div className='right-buffer' style={{ width: `calc(${bufferWidth}px - var(--cell-gap))` }} />\r\n\r\n <div ref={tableRef} className={tableClassName}>\r\n <NavigationArrow\r\n position='left'\r\n visible={tileIndex > 0}\r\n onClick={() => setTileIndex(Math.max(0, tileIndex - 1))}\r\n />\r\n\r\n <NavigationArrow\r\n position='right'\r\n visible={tileIndex < totalTiles - tileCount}\r\n onClick={() => setTileIndex(Math.min(totalTiles - 1, tileIndex + 1))}\r\n style={{ right: `calc(${bufferWidth}px - 40px)` }}\r\n />\r\n\r\n <div className='mobile-sidebar-header'>\r\n <Mobile>{sidebarHeader()}</Mobile>\r\n </div>\r\n\r\n {/* The sticky header uses fixed positioning and gets its width set dynamically based on the table width.\r\n Its top position also varies for mobile. */}\r\n <>\r\n <Row ref={stickyHeaderRef} sidebar={<TabletAndDesktop>{sidebarHeader()}</TabletAndDesktop>} header>\r\n {tileHeaders}\r\n </Row>\r\n </>\r\n\r\n {children}\r\n\r\n {issueSection()}\r\n </div>\r\n </>\r\n );\r\n\r\n function handleBufferWidth() {\r\n setBufferWidth((window.innerWidth - (tableRef.current?.offsetWidth || 0)) / 2);\r\n }\r\n\r\n function getClassName() {\r\n if (visibleQuoteIds.length === 1 || tileCount === 1) return 'one-column';\r\n if (visibleQuoteIds.length === 2 || tileCount === 2) return 'two-columns';\r\n if (visibleQuoteIds.length > 2 && tileCount > 2) return 'three-columns';\r\n return '';\r\n }\r\n\r\n function setContainerClassName() {\r\n const transitionContainer = document.getElementsByClassName('transition-container')[0];\r\n if (!transitionContainer) return;\r\n if (visibleQuoteIds.length === 1) transitionContainer.classList.add('one-column');\r\n else transitionContainer.classList.remove('one-column');\r\n }\r\n}\r\n","import { Tooltip } from '@webkit/index';\r\nimport { PropsWithChildren } from 'react';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n tooltip?: string;\r\n} & PropsWithChildren;\r\n\r\nexport function TemplateIcon(props: Props) {\r\n return (\r\n <div className='template-icon'>\r\n <Tooltip message={props.tooltip || ''} isDisabled={!props.tooltip}>\r\n {props.children}\r\n </Tooltip>\r\n </div>\r\n );\r\n}\r\n","import { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { PrimaryButton, SecondaryButton, Text } from '@legacy/Components/Form';\r\nimport { PortalPopup } from '@legacy/Components/Popup';\r\nimport { ElementNames } from '@shared/Constants';\r\nimport { useConditionalRender, useDocumentClick, useFormReducer } from '@shared/Hooks';\r\nimport { ComparisonQuoteModel } from '@shared/Models';\r\nimport { ExpandMoreIcon, Rules, Value } from '@webkit/index';\r\nimport { createRef, FunctionComponent } from 'react';\r\nimport { TemplateIcon } from '../../TemplateIcon';\r\nimport './style.scss';\r\n\r\ninterface Props extends ElementTemplateProps {\r\n quote: ComparisonQuoteModel;\r\n}\r\n\r\nexport const ChangeInsuredName: FunctionComponent<Props> = props => {\r\n const { rendered, visible, setVisible } = useConditionalRender(),\r\n [triggerClassName, popupClassName] = useDocumentClick(() => setVisible(false), 2).classNames,\r\n { quote, disabled } = props,\r\n triggerRef = createRef<HTMLDivElement>();\r\n\r\n return (\r\n <div className={`change-insured-name ${triggerClassName.current}`} ref={triggerRef}>\r\n {!props.singleTile && (\r\n <div\r\n className={'change-insured-name-trigger' + (disabled ? ' disabled' : '')}\r\n onClick={() => setVisible(!visible)}\r\n >\r\n <div className='change-insured-name-trigger-label'>\r\n {[quote.InsuredNameFirst, quote.InsuredNameMiddle, quote.InsuredNameLast]\r\n .filter(n => n)\r\n .join(' ')}\r\n </div>\r\n\r\n <TemplateIcon>\r\n <ExpandMoreIcon fontSize='medium' />\r\n </TemplateIcon>\r\n </div>\r\n )}\r\n\r\n {!props.singleTile && rendered && (\r\n <PortalPopup\r\n triggerRef={triggerRef}\r\n visible={visible}\r\n className={`changed-insured-name-popup ${popupClassName.current}`}\r\n >\r\n <InsuredNameForm {...{ ...props, setVisible }} />\r\n </PortalPopup>\r\n )}\r\n\r\n {props.singleTile && (\r\n <div className={'change-insured-form-wrapper' + (props.disabled ? ' disabled' : '')}>\r\n <InsuredNameForm {...{ ...props, setVisible }} />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\ninterface InsuredNameFormProps extends Props {\r\n setVisible: (visible: boolean) => void;\r\n}\r\n\r\nconst InsuredNameForm: FunctionComponent<InsuredNameFormProps> = props => {\r\n const { quote, patchRaw, setVisible } = props;\r\n\r\n // The name fields in our database are limited to 50 chars, so we match that with the validation rules below\r\n const { form, set, valid, revert } = useFormReducer({\r\n firstName: new Value<string>('first name', quote.InsuredNameFirst || '', [\r\n Rules.required(),\r\n Rules.maxLength(50),\r\n ]),\r\n middleName: new Value<string>('middle name', quote.InsuredNameMiddle || '', [Rules.maxLength(50)]),\r\n lastName: new Value<string>('last name', quote.InsuredNameLast || '', [Rules.required(), Rules.maxLength(50)]),\r\n });\r\n\r\n return (\r\n <>\r\n {props.singleTile && (\r\n <div className='single-tile-insured-name-form'>\r\n <Text\r\n id={'change-insured-name-first-name' + quote.QuoteId}\r\n value={form.firstName}\r\n onTextChange={value => set('firstName', value)}\r\n placeholder='First Name...'\r\n />\r\n\r\n <Text\r\n id={'change-insured-name-middle-name' + quote.QuoteId}\r\n value={form.middleName}\r\n onTextChange={value => set('middleName', value)}\r\n placeholder='Middle Name (optional)...'\r\n />\r\n\r\n <Text\r\n id={'change-insured-name-last-name' + quote.QuoteId}\r\n value={form.lastName}\r\n onTextChange={value => set('lastName', value)}\r\n placeholder='Last Name...'\r\n />\r\n </div>\r\n )}\r\n\r\n {!props.singleTile && (\r\n <>\r\n <Text\r\n id={'change-insured-name-first-name' + quote.QuoteId}\r\n value={form.firstName}\r\n onTextChange={value => set('firstName', value)}\r\n placeholder='First Name...'\r\n />\r\n\r\n <Text\r\n id={'change-insured-name-middle-name' + quote.QuoteId}\r\n value={form.middleName}\r\n onTextChange={value => set('middleName', value)}\r\n placeholder='Middle Name (optional)...'\r\n />\r\n\r\n <Text\r\n id={'change-insured-name-last-name' + quote.QuoteId}\r\n value={form.lastName}\r\n onTextChange={value => set('lastName', value)}\r\n placeholder='Last Name...'\r\n />\r\n </>\r\n )}\r\n\r\n <div className='buttons'>\r\n <SecondaryButton label='Cancel' onClick={onCancel} />\r\n\r\n <PrimaryButton\r\n label='Save'\r\n className={isDisabled() ? 'disabled' : ''}\r\n onClick={onSave}\r\n disabled={isDisabled()}\r\n />\r\n </div>\r\n </>\r\n );\r\n\r\n function onCancel() {\r\n setVisible(false);\r\n setTimeout(revert, 150);\r\n }\r\n\r\n async function onSave() {\r\n setVisible(false);\r\n\r\n await patchRaw([\r\n {\r\n elementName: ElementNames.FirstNameInsured,\r\n value: form.firstName.content,\r\n },\r\n {\r\n elementName: ElementNames.MiddleNameInsured,\r\n value: form.middleName.content,\r\n },\r\n {\r\n elementName: ElementNames.LastNameInsured,\r\n value: form.lastName.content,\r\n },\r\n ]);\r\n }\r\n\r\n function isDisabled() {\r\n const nameMatches = [\r\n quote.InsuredNameFirst === form.firstName.content,\r\n quote.InsuredNameMiddle === form.middleName.content,\r\n quote.InsuredNameLast === form.lastName.content,\r\n ];\r\n\r\n return !valid() || nameMatches.every(m => m);\r\n }\r\n};\r\n","import { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { dateFormat } from '@shared/Constants';\r\nimport { useAsyncEffect } from '@shared/Hooks';\r\nimport { DatePicker, Value } from '@webkit/index';\r\nimport dayjs from 'dayjs';\r\nimport { createRef, FunctionComponent, useEffect, useMemo, useState } from 'react';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n minValue?: number | Date;\r\n maxValue?: number | Date;\r\n} & Omit<ElementTemplateProps, 'minValue' | 'maxValue'>;\r\n\r\nexport const Date: FunctionComponent<Props> = props => {\r\n const dateValue = new Value<dayjs.Dayjs | null>(\r\n 'date',\r\n props.value.content ? dayjs(props.value.content, 'MM/DD/YYYY') : null\r\n ),\r\n triggerRef = createRef<HTMLDivElement>(),\r\n [date, setDate] = useState<Value<dayjs.Dayjs | null>>(dateValue),\r\n minValue = useMemo(() => getDateFromMinValue(props.minValue), [props.minValue]),\r\n maxValue = useMemo(() => getDateFromMaxValue(props.maxValue), [props.maxValue]);\r\n\r\n useEffect(() => {\r\n setDate(dateValue);\r\n }, [props.value.content]);\r\n\r\n useAsyncEffect(async () => {\r\n const str = !!date.content ? date.content.format(dateFormat) : '';\r\n props.onChange(str);\r\n\r\n props.onBlur();\r\n await props.patch(str);\r\n }, [date.content]);\r\n\r\n return (\r\n <div className={'fill-date-input' + (props.disabled ? ' disabled' : '')} ref={triggerRef}>\r\n <div className={`fill-date-input-label ${props.singleTile ? 'single-tile' : ''}`}>\r\n <DatePicker\r\n id='quote-date'\r\n date={date}\r\n minDate={minValue}\r\n maxDate={maxValue}\r\n onChange={d => setDate(Object.assign({ ...date.set(d as dayjs.Dayjs) }))}\r\n onOpenChange={isOpen => (isOpen ? props.onFocus() : props.onBlur())}\r\n />\r\n </div>\r\n </div>\r\n );\r\n\r\n function getDateFromMinValue(value: Date | number | undefined): dayjs.Dayjs {\r\n if (value === undefined) return dayjs();\r\n if ((value as Date).getMonth) return dayjs(value);\r\n return dayjs()\r\n .startOf('day')\r\n .subtract(value as number, 'days');\r\n }\r\n\r\n function getDateFromMaxValue(value: Date | number | undefined): dayjs.Dayjs {\r\n if (value === undefined) return dayjs();\r\n if ((value as Date).getMonth) return dayjs(value);\r\n return dayjs()\r\n .endOf('day')\r\n .add(value as number, 'days');\r\n }\r\n};\r\n","import { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { PortalPopup } from '@legacy/Components/Popup';\r\nimport { Svg } from '@legacy/Components/Svg';\r\nimport { DropdownItem } from '@legacy/FormFields';\r\nimport { ElementTemplateTypes, iconPaths, isKeyName, KeyName } from '@shared/Constants';\r\nimport { useConditionalRender, useDocumentClick, useKeyboardEvent } from '@shared/Hooks';\r\nimport { QuoteChoiceModel } from '@shared/Models';\r\nimport { ExpandMoreIcon, Value } from '@webkit/index';\r\nimport { createRef, FunctionComponent } from 'react';\r\nimport { TemplateIcon } from '../../TemplateIcon';\r\nimport './style.scss';\r\n\r\ntype DropdownElementTemplateProps = ElementTemplateProps & {\r\n /** A boolean indicating whether the element can accept multiple selections. */\r\n multiple?: boolean;\r\n};\r\n\r\nexport const Dropdown: FunctionComponent<DropdownElementTemplateProps> = props => {\r\n const options = getOptions(props.elementType, props.choices),\r\n [triggerClassName, popupClassName] = useDocumentClick(onDocumentClick, 2).classNames,\r\n { rendered, visible, setVisible } = useConditionalRender(),\r\n triggerRef = createRef<HTMLDivElement>();\r\n\r\n useKeyboardEvent(onEscapeKeyDown);\r\n\r\n return (\r\n <>\r\n <div ref={triggerRef} className={`dropdown ${triggerClassName.current}`}>\r\n <div className={'dropdown-trigger' + (props.disabled ? ' disabled' : '')} onClick={onTriggerClick}>\r\n <div className='dropdown-trigger-label'>\r\n {getOptionDisplayText(options, props.value) || (\r\n <div className='dropdown-placeholder'>Select an option...</div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <TemplateIcon>\r\n <ExpandMoreIcon fontSize='medium' />\r\n </TemplateIcon>\r\n\r\n {rendered && (\r\n <PortalPopup\r\n triggerRef={triggerRef}\r\n visible={visible}\r\n className={`dropdown-selector ${options.length > 6 ? 'scrollable' : ''} ${popupClassName.current}`}\r\n id={`${props.name}${props.quoteId}_popup`}\r\n >\r\n <div className='options'>\r\n {options.map((option, index) => (\r\n <div\r\n className={`option ${isOptionSelected(option.value) ? 'selected' : ''}`}\r\n data-text={option.text}\r\n key={option.value.toString(0) + index}\r\n onClick={async () => await onOptionClick(option.value.toString())}\r\n >\r\n <div className='option-label'>\r\n {option.text}\r\n\r\n <div className='option-icon'>\r\n <Svg path={iconPaths.checkMarkSolid} alt='Selected Item' />\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n\r\n {props.isCommonElement && !props.hideCommonElementNotice && (\r\n <div className='popup-disclaimer'>\r\n <b>Note:</b> This is a common element and changing it here will modify the value across\r\n all quotes.\r\n </div>\r\n )}\r\n </div>\r\n </PortalPopup>\r\n )}\r\n </>\r\n );\r\n\r\n function isOptionSelected(option: string | number) {\r\n return props.multiple\r\n ? props.value.content.split('|').includes(option.toString())\r\n : option === props.value.content;\r\n }\r\n\r\n async function onDocumentClick() {\r\n setVisible(false);\r\n props.setFocus(false);\r\n\r\n if (props.multiple) {\r\n props.onBlur();\r\n await props.patch(props.value.content);\r\n }\r\n }\r\n\r\n function onEscapeKeyDown(e: KeyboardEvent) {\r\n if (isKeyName(e.key, KeyName.Escape)) setVisible(false);\r\n }\r\n\r\n function getOptions(elementType?: string | null, choices?: QuoteChoiceModel[]): DropdownItem[] {\r\n if (elementType === ElementTemplateTypes.Boolean) {\r\n return [new DropdownItem('true', 'Yes'), new DropdownItem('false', 'No')];\r\n }\r\n\r\n if (choices) {\r\n return [...choices]\r\n .sort(({ OrderBy: a }, { OrderBy: b }) => a - b)\r\n .map(choice => new DropdownItem(choice.Value, choice.Name));\r\n }\r\n\r\n return [];\r\n }\r\n\r\n function onTriggerClick() {\r\n setVisible(!visible);\r\n !visible ? props.onFocus() : props.onBlur();\r\n }\r\n\r\n function getOptionDisplayText(options: DropdownItem[], value: Value<string>) {\r\n if (props.multiple) {\r\n const selected = value.content.split('|').filter(v => !!v),\r\n selectedOptions = options.filter(option => selected.includes(option.value.toString()));\r\n\r\n return selectedOptions.map(option => option.text).join(', ');\r\n }\r\n\r\n return options.find(option => option.value === value.content)?.text || '';\r\n }\r\n\r\n async function onOptionClick(value: string) {\r\n if (props.multiple) {\r\n // The API is expecting a pipe-delimited string of values to be sent for the element's content and will also\r\n // send the same format back when the element is retrieved. Splitting the element's value here is how we get\r\n // the list of selected values to display to the user and why later we're joining the values back together with\r\n // a pipe delimiter before sending them to the API.\r\n const values = props.value.content.split('|').filter(v => !!v),\r\n index = values.indexOf(value);\r\n\r\n if (index > -1) {\r\n values.splice(index, 1);\r\n } else {\r\n values.push(value);\r\n }\r\n\r\n props.onChange(values.join('|'));\r\n } else {\r\n setVisible(false);\r\n props.onChange(value);\r\n props.onBlur();\r\n await props.patch(value);\r\n }\r\n }\r\n};\r\n","import { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { isBooleanString, toBoolean } from '@shared/Common';\r\nimport { CheckCircleIcon } from '@webkit/index';\r\n\r\nexport function FeatureElement(props: ElementTemplateProps) {\r\n const { quoteId, name } = props,\r\n { content } = props.value,\r\n isBoolean = isBooleanString(content),\r\n booleanValue = toBoolean(content),\r\n hasValue = !!content;\r\n\r\n return (\r\n <div className='h-6'>\r\n {!hasValue ? (\r\n '-'\r\n ) : !isBoolean ? (\r\n content\r\n ) : booleanValue ? (\r\n <CheckCircleIcon\r\n id={`check-icon-${name}-${quoteId}`}\r\n fontSize='medium'\r\n className='text-brand-green-300 m-auto'\r\n />\r\n ) : (\r\n '-'\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { Text } from '@legacy/Components/Form';\r\nimport { Popup } from '@legacy/Components/Popup';\r\nimport { debounce } from '@shared/Common';\r\nimport { isKeyName, KeyName } from '@shared/Constants';\r\nimport { useConditionalRender, useDocumentClick } from '@shared/Hooks';\r\nimport { Value } from '@webkit/index';\r\nimport { createRef, useEffect, useRef, useState } from 'react';\r\nimport './style.scss';\r\n\r\ninterface Props<OptionModel> {\r\n value: Value<string>;\r\n onChange: (value: string) => void;\r\n fetch: () => Promise<OptionModel[]>;\r\n onError: (message: string) => void;\r\n option: (model: OptionModel) => string | JSX.Element;\r\n select: (model: OptionModel) => void;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n noResults?: string | JSX.Element;\r\n}\r\n\r\nexport const AutoComplete = <OptionModel,>(props: Props<OptionModel>) => {\r\n const [loading, setLoading] = useState<boolean>(false),\r\n [options, setOptions] = useState<OptionModel[]>([]),\r\n [activeOptionId, setActiveOptionId] = useState<number>(0),\r\n optionsWithRefs = options.map(option => ({ option, ref: createRef<HTMLDivElement>() })),\r\n { rendered, visible, setVisible } = useConditionalRender(),\r\n { className } = useDocumentClick(() => setVisible(false), true),\r\n textRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n window.addEventListener('keydown', onKeyDown);\r\n return () => {\r\n window.removeEventListener('keydown', onKeyDown);\r\n };\r\n }, [onKeyDown]);\r\n\r\n return (\r\n <div className={'auto-complete ' + className.current}>\r\n <div ref={textRef}>\r\n <Text\r\n value={props.value}\r\n onTextChange={onChange}\r\n disabled={props.disabled}\r\n placeholder={props.placeholder}\r\n />\r\n </div>\r\n\r\n {rendered && (\r\n <Popup\r\n visible={visible}\r\n className={`auto-complete-popup ${className.current}`}\r\n style={{ top: `calc(${textRef.current?.getBoundingClientRect().height || 0}px + 20px)` }}\r\n triggerRef={textRef}\r\n doNotScrollIntoView\r\n >\r\n {loading ? (\r\n <div className='infinite-scroll-loader-cp' />\r\n ) : options.length === 0 ? (\r\n <div className='auto-complete-option' onClick={() => setVisible(false)}>\r\n {props.noResults ? props.noResults : 'No Results Found'}\r\n </div>\r\n ) : (\r\n options.map((option, index) => (\r\n <div\r\n key={'option-' + index}\r\n ref={optionsWithRefs[index].ref}\r\n className={'auto-complete-option ' + (activeOptionId === index ? 'active' : '')}\r\n onClick={() => onSelect(option)}\r\n onMouseEnter={() => setActiveOptionId(index)}\r\n >\r\n {props.option(option)}\r\n </div>\r\n ))\r\n )}\r\n </Popup>\r\n )}\r\n </div>\r\n );\r\n\r\n async function onChange(value: string) {\r\n props.onChange(value);\r\n if (!value) return;\r\n debounce('auto-complete', fetchOptions, 1000);\r\n }\r\n\r\n async function fetchOptions() {\r\n setLoading(true);\r\n setVisible(true);\r\n\r\n try {\r\n const options = await props.fetch();\r\n setOptions(options);\r\n } catch (e) {\r\n props.onError(e.ErrorMessage || 'There was a problem fetching options.');\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n function onSelect(option: OptionModel) {\r\n props.select(option);\r\n setVisible(false);\r\n }\r\n\r\n function onKeyDown(e: KeyboardEvent) {\r\n if (!visible) return;\r\n\r\n if (isKeyName(e.key, KeyName.Up)) {\r\n setActiveOptionId(Math.max(activeOptionId - 1, 0));\r\n scrollOptionIntoView();\r\n }\r\n\r\n if (isKeyName(e.key, KeyName.Down)) {\r\n setActiveOptionId(Math.min(activeOptionId + 1, options.length - 1));\r\n scrollOptionIntoView();\r\n }\r\n\r\n if (isKeyName(e.key, KeyName.Escape)) setVisible(false);\r\n if (isKeyName(e.key, KeyName.Enter)) options[activeOptionId] && onSelect(options[activeOptionId]);\r\n }\r\n\r\n function scrollOptionIntoView() {\r\n optionsWithRefs[activeOptionId].ref.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n }\r\n};\r\n","import { getProperty, searchHomeownerAddresses } from '@api/HOApi';\r\nimport { AutoComplete } from '@app/ProductComparison/AutoComplete';\r\nimport { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { Path } from '@app/Views';\r\nimport { PrimaryButton, SecondaryButton } from '@legacy/Components/Form';\r\nimport { PortalPopup } from '@legacy/Components/Popup';\r\nimport { Svg } from '@legacy/Components/Svg';\r\nimport { normalizeError, toAddress } from '@shared/Common';\r\nimport { ElementNames, ErrorCodes, iconPaths } from '@shared/Constants';\r\nimport {\r\n ReducerType,\r\n ToastContext,\r\n useActive,\r\n useConditionalRender,\r\n useDocumentClick,\r\n useFormReducer,\r\n} from '@shared/Hooks';\r\nimport { PropertyData } from '@shared/Models';\r\nimport { Rules, Value } from '@webkit/index';\r\nimport { createContext, createRef, FunctionComponent, useContext, useEffect, useState } from 'react';\r\nimport './style.scss';\r\n\r\ninterface IContext {\r\n formReducer: ReducerType<{ address: Value<string> }>;\r\n onChange: (value: string) => void;\r\n fetchOptions: () => Promise<PropertyData[]>;\r\n buildOption: (option: PropertyData) => string;\r\n onSelect: (option: PropertyData) => void;\r\n onCancel: () => void;\r\n onSave: () => Promise<void>;\r\n loading: boolean;\r\n error: boolean;\r\n valid: () => boolean;\r\n addressLabel: string;\r\n}\r\n\r\nconst Context = createContext({} as IContext);\r\n\r\nexport const InsuredPreviousAddress: FunctionComponent<ElementTemplateProps> = props => {\r\n const toast = useContext(ToastContext),\r\n quoteAddress = props.comparisonModel?.QuoteProperty?.FullAddress,\r\n quote = props.comparisonModel?.Quotes.find(quote => quote.QuoteId === props.quoteId),\r\n [addressKey, setAddressKey] = useState<string>(quote?.InsuranceScoreAddressKey || ''),\r\n [addressLabel, setAddressLabel] = useState<string>(''),\r\n formReducer = useFormReducer({\r\n address: new Value<string>('insured previous address', addressLabel, [Rules.required()]),\r\n }),\r\n { form, set, valid, revert } = formReducer,\r\n { rendered, visible, setVisible } = useConditionalRender(),\r\n [triggerClassName, popupClassName] = useDocumentClick(onCancel, 2).classNames,\r\n [loading, setLoading] = useState<boolean>(false),\r\n [error, setError] = useState<boolean>(false),\r\n triggerRef = createRef<HTMLDivElement>();\r\n\r\n const isActive = useActive();\r\n\r\n const contextValues = {\r\n formReducer,\r\n onChange,\r\n fetchOptions,\r\n buildOption,\r\n onSelect,\r\n onCancel,\r\n onSave,\r\n loading,\r\n error,\r\n valid,\r\n addressLabel,\r\n };\r\n\r\n useEffect(() => {\r\n if (!isActive()) return;\r\n // noinspection JSIgnoredPromiseFromCall\r\n fetchInitialAddress();\r\n }, [quote?.InsuranceScoreAddressKey]);\r\n\r\n return (\r\n <div className={'previous-address ' + triggerClassName.current} ref={triggerRef}>\r\n {!props.singleTile && (\r\n <div\r\n className={'previous-address-trigger' + (props.disabled ? ' disabled' : '')}\r\n onClick={() => setVisible(!visible)}\r\n >\r\n <div className='previous-address-trigger-label'>{addressLabel || 'Set Previous Address'}</div>\r\n <div className='previous-address-trigger-icon'>\r\n <Svg path={iconPaths.chevronDown} alt='Set Previous Address' />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!props.singleTile && rendered && (\r\n <PortalPopup\r\n triggerRef={triggerRef}\r\n className={`previous-address-popup ${popupClassName.current}`}\r\n visible={visible}\r\n >\r\n <Context.Provider value={contextValues}>\r\n <Form />\r\n </Context.Provider>\r\n </PortalPopup>\r\n )}\r\n\r\n {props.singleTile && (\r\n <Context.Provider value={contextValues}>\r\n <div className={'previous-address-popup single-tile' + (props.disabled ? ' disabled' : '')}>\r\n <Form />\r\n </div>\r\n </Context.Provider>\r\n )}\r\n </div>\r\n );\r\n\r\n function onChange(value: string) {\r\n set('address', value);\r\n setError(false);\r\n }\r\n\r\n function buildOption(option: PropertyData) {\r\n return toAddress(option);\r\n }\r\n\r\n function onSelect(option: PropertyData) {\r\n set('address', toAddress(option));\r\n setAddressKey(option.AddressKey);\r\n }\r\n\r\n function onCancel() {\r\n setVisible(false);\r\n setError(false);\r\n revert();\r\n }\r\n\r\n async function fetchInitialAddress() {\r\n if (!addressKey) return;\r\n\r\n try {\r\n const property = await getProperty(addressKey, false),\r\n address = toAddress(property);\r\n\r\n if (address === quoteAddress) return;\r\n\r\n setAddressLabel(address);\r\n } catch (e) {\r\n toast.error('There was a problem loading the insured previous address.');\r\n }\r\n }\r\n\r\n async function fetchOptions() {\r\n return await searchHomeownerAddresses(form.address.content);\r\n }\r\n\r\n async function onSave() {\r\n let hasError: boolean = false;\r\n\r\n if (!valid()) return;\r\n if (form.address.content === addressLabel) return;\r\n\r\n setLoading(true);\r\n\r\n try {\r\n const addressMatches = await fetchOptions();\r\n if (!addressMatches.some(propertyData => toAddress(propertyData) === form.address.content)) {\r\n hasError = true;\r\n setError(hasError);\r\n setLoading(false);\r\n return;\r\n }\r\n\r\n await props.patchRaw(\r\n [\r\n {\r\n elementName: ElementNames.InsuranceScoreAddressKey,\r\n value: addressKey,\r\n },\r\n ],\r\n onCatchError\r\n );\r\n } finally {\r\n setLoading(false);\r\n if (!hasError) setVisible(false);\r\n }\r\n\r\n function onCatchError(e: any) {\r\n const normalized = normalizeError(e),\r\n subCode = parseInt(normalized.subCode);\r\n\r\n if (subCode === ErrorCodes.PropertyInvalid || subCode === ErrorCodes.MissingInsuredAddress) {\r\n hasError = true;\r\n setError(hasError);\r\n return;\r\n }\r\n\r\n toast.error('There was a problem updating the insured previous address.');\r\n }\r\n }\r\n};\r\n\r\nconst AddressNotFoundMessage = () => (\r\n <>\r\n Address not found. Please verify the address is correct or{' '}\r\n <a href={Path.AddressManagement} target='_blank' rel='noopener noreferrer'>\r\n click here\r\n </a>{' '}\r\n to add it to our system.\r\n </>\r\n);\r\n\r\nconst Form: FunctionComponent = () => {\r\n const context = useContext(Context),\r\n {\r\n formReducer,\r\n onChange,\r\n fetchOptions,\r\n buildOption,\r\n onSelect,\r\n onCancel,\r\n onSave,\r\n loading,\r\n error,\r\n valid,\r\n addressLabel,\r\n } = context,\r\n { form } = formReducer;\r\n\r\n const toast = useContext(ToastContext);\r\n\r\n return (\r\n <>\r\n <AutoComplete<PropertyData>\r\n value={form.address}\r\n onChange={onChange}\r\n fetch={fetchOptions}\r\n onError={toast.error}\r\n option={buildOption}\r\n select={onSelect}\r\n placeholder='Start typing an address...'\r\n noResults={<AddressNotFoundMessage />}\r\n />\r\n\r\n {error && (\r\n <div className='insured-address-error'>\r\n <AddressNotFoundMessage />\r\n </div>\r\n )}\r\n\r\n <div className='buttons'>\r\n <SecondaryButton label='Cancel' onClick={onCancel} />\r\n\r\n <PrimaryButton\r\n label='Save'\r\n onClick={onSave}\r\n className={isDisabled() ? 'disabled' : ''}\r\n disabled={isDisabled()}\r\n loading={loading}\r\n />\r\n </div>\r\n </>\r\n );\r\n\r\n function isDisabled() {\r\n return !valid() || error || form.address.content === addressLabel;\r\n }\r\n};\r\n","import { patchComparisonQuoteByProduct } from '@api/ComparisonQuoteApi';\r\nimport { patchQuote } from '@api/HOApi';\r\nimport { ImsRaterQuoteStateContext } from '@app/ImsRaterQuote/State';\r\nimport {\r\n IPatch,\r\n IPatchClaims,\r\n IPatchFromRequest,\r\n IPatchPremiumAdjustment,\r\n IPatchRequest,\r\n} from '@app/ProductComparison/Interfaces';\r\nimport { StateContext } from '@app/State';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport { mapToComparisonQuotes } from '@shared/Common';\r\nimport { ComparisonQuotesModel, QuoteClaimModel, QuotePatchRequestModel } from '@shared/Models';\r\nimport { QuoteElementModel } from '@shared/Models/ComparisonQuoteModels/QuoteElementModel';\r\nimport { createContext, useContext, useState } from 'react';\r\n\r\nexport type IPatchQuoteHook = {\r\n patch: IPatch;\r\n patchClaims: IPatchClaims;\r\n patchPremiumAdjustment: IPatchPremiumAdjustment;\r\n patchFromRequest: IPatchFromRequest;\r\n patchLoading: boolean;\r\n};\r\n\r\nexport function usePatchQuote(\r\n update: (comparisonModel: ComparisonQuotesModel) => void,\r\n productLine: ProductLine | null,\r\n isReprice?: boolean,\r\n updatePatching?: (patching: boolean) => void\r\n): IPatchQuoteHook {\r\n // Get the state context for the whole single page app\r\n const singlePageAppState = useContext(StateContext).state;\r\n\r\n // TODO: Move rater quote into the single page app and lose this extra state and context\r\n const imsRaterQuoteState = useContext(ImsRaterQuoteStateContext).state;\r\n\r\n // The rater does not show more than one quote, so if in rater context don't mess with the order, otherwise use the comparisonModelQuoteOrder\r\n const quoteOrder = imsRaterQuoteState\r\n ? imsRaterQuoteState.visibleQuoteIds\r\n : singlePageAppState?.comparisonModelQuoteOrder || [];\r\n\r\n const [loading, setLoading] = useState<boolean>(false);\r\n\r\n return { patch, patchClaims, patchPremiumAdjustment, patchFromRequest, patchLoading: loading };\r\n\r\n /** Patches a basic comparison element for a given quote. */\r\n async function patch(quoteId: string, requests: IPatchRequest[], requiredConfirmationElementNames?: string[]) {\r\n await patchFromRequest({\r\n QuoteId: quoteId,\r\n Elements: requests.map(\r\n r =>\r\n ({\r\n ElementName: r.elementName || '',\r\n Value: r.value,\r\n } as QuoteElementModel)\r\n ),\r\n RequiredConfirmationElementNames: requiredConfirmationElementNames || [],\r\n } as QuotePatchRequestModel);\r\n }\r\n\r\n /** Patches claims separately from other quote elements (used for Vave claims, which differs from the basic NumLosses element). */\r\n async function patchClaims(quoteId: string, claims: QuoteClaimModel[]): Promise<void> {\r\n await patchFromRequest({\r\n QuoteId: quoteId,\r\n Claims: claims,\r\n Elements: [] as QuoteElementModel[],\r\n } as QuotePatchRequestModel);\r\n }\r\n\r\n /** Patches a manual premium adjustment for a reprice quote. The reprice quote state should track the adjustment made here so that it is not lost\r\n * in subsequent patches that would override the adjustment -- see the ManualPremiumAdjustment/index.tsx file. */\r\n async function patchPremiumAdjustment(quoteId: string, manualPremiumAdjustment: number): Promise<void> {\r\n await wrapPatchRequest(async () => {\r\n const repriceRequest = {\r\n QuoteId: quoteId,\r\n ManualPremiumAdjustment: manualPremiumAdjustment,\r\n Elements: [],\r\n },\r\n repriceQuote = await patchQuote(repriceRequest),\r\n comparisonModel = mapToComparisonQuotes(repriceQuote, true);\r\n update(comparisonModel);\r\n });\r\n }\r\n\r\n /** Processes and submits a patch request to the desired endpoint.\r\n * Reprice quotes will use a different endpoint and will keep track of the manual premium adjustment via the imsRaterQuoteState. */\r\n async function patchFromRequest(request: QuotePatchRequestModel) {\r\n await wrapPatchRequest(async () => {\r\n let comparisonModel: ComparisonQuotesModel;\r\n if (isReprice) {\r\n request = {\r\n ...request,\r\n\r\n // Without tracking this state here, a manual premium adjustment request will be overridden with subsequent requests\r\n ManualPremiumAdjustment: imsRaterQuoteState?.manualPremiumAdjustment || 0,\r\n Elements: request.Elements as any,\r\n };\r\n }\r\n\r\n if (!productLine) throw new Error('Product line was missing when updating a quote.');\r\n comparisonModel = await patchComparisonQuoteByProduct(productLine, request, quoteOrder);\r\n update(comparisonModel);\r\n });\r\n }\r\n\r\n /** A reusable wrapper that tracks loading state and sets errors for any type of patch request. */\r\n async function wrapPatchRequest(apiCall: () => Promise<void>) {\r\n setLoading(true);\r\n\r\n if (updatePatching) {\r\n updatePatching(true);\r\n }\r\n\r\n try {\r\n await apiCall();\r\n } finally {\r\n setLoading(false);\r\n\r\n if (updatePatching) {\r\n updatePatching(false);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const PatchQuoteHookContext = createContext<IPatchQuoteHook>({} as IPatchQuoteHook);\r\n","import * as React from 'react';\r\n\r\nimport { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { PrimaryButton, Text } from '@legacy/Components/Form';\r\n\r\nimport { PatchQuoteHookContext } from '@app/ProductComparison/Hooks/UsePatchQuote';\r\n\r\nimport { ImsRaterQuoteStateContext } from '@app/ImsRaterQuote/State';\r\n\r\nimport './style.scss';\r\n\r\nexport const ManualPremiumAdjustment: React.FC<ElementTemplateProps> = props => {\r\n const { update } = React.useContext(ImsRaterQuoteStateContext),\r\n { patchPremiumAdjustment } = React.useContext(PatchQuoteHookContext);\r\n\r\n return (\r\n <div className='manual-premium-adjustment-wrapper'>\r\n <div className='note'>\r\n <strong>Note:</strong> This is an annual, manual premium adjustment. Use sparingly.\r\n </div>\r\n\r\n <div className='manual-premium-adjustment-form'>\r\n <Text\r\n placeholder='Manual Premium Adjustment...'\r\n value={props.value}\r\n onChange={e => props.onChange(e.target.value)}\r\n onFocus={value => props.onFocus(value)}\r\n onBlur={valueToFormat => props.onBlur(valueToFormat)}\r\n disabled={props.disabled}\r\n />\r\n\r\n <PrimaryButton label='Save' onClick={onSave} disabled={props.disabled} />\r\n </div>\r\n </div>\r\n );\r\n\r\n async function onSave() {\r\n const parsedValue = parseInt(props.value.content.replace(/[^A-Za-z0-9_.\\-]+/g, ''));\r\n await patchPremiumAdjustment(props.quoteId, parsedValue);\r\n // This state is used to prevent the manual premium adjustment being overridden by subsequent quote patches\r\n // See PatchQuote.ts\r\n update(state => ({ ...state, manualPremiumAdjustment: parsedValue }));\r\n }\r\n};\r\n","import { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { PrimaryButton, SecondaryButton } from '@legacy/Components/Form';\r\nimport { PortalPopup } from '@legacy/Components/Popup';\r\nimport { Svg } from '@legacy/Components/Svg';\r\nimport { formatCurrencyUS } from '@shared/Common';\r\nimport { iconPaths, simpleDateFormat } from '@shared/Constants';\r\nimport { useConditionalRender, useDocumentClick, useFormReducer } from '@shared/Hooks';\r\nimport { ComparisonQuoteModel, QuoteChoiceModel, QuoteClaimModel } from '@shared/Models';\r\nimport {\r\n DatePicker,\r\n DesignContext,\r\n ExpandMoreIcon,\r\n Rules,\r\n Select,\r\n SelectItem,\r\n Text,\r\n Tooltip,\r\n Value,\r\n} from '@webkit/index';\r\nimport dayjs from 'dayjs';\r\nimport utc from 'dayjs/plugin/utc';\r\nimport { createRef, FunctionComponent, useEffect, useState } from 'react';\r\nimport { TemplateIcon } from '../../TemplateIcon';\r\nimport './style.scss';\r\n\r\n// Add utc to dayjs\r\ndayjs.extend(utc);\r\n\r\ninterface Props extends ElementTemplateProps {\r\n quote: ComparisonQuoteModel;\r\n}\r\n\r\nexport const PriorClaims: FunctionComponent<Props> = props => {\r\n const { rendered, visible, setVisible } = useConditionalRender(),\r\n [triggerClassName, popupClassName] = useDocumentClick(hide, {\r\n generateUniqueClassName: 3,\r\n exceptionClassNames: ['swyfft-popover'],\r\n }).classNames,\r\n triggerRef = createRef<HTMLDivElement>();\r\n\r\n return (\r\n <div className={`prior-claims ${popupClassName.current}`} ref={triggerRef}>\r\n <div\r\n className={\r\n 'prior-claims-trigger' +\r\n (props.disabled ? ' disabled' : '') +\r\n (props.singleTile ? ' single-tile' : '')\r\n }\r\n onClick={onTriggerClick}\r\n >\r\n <div className='prior-claims-trigger-label'>{props.quote.Claims.length}</div>\r\n\r\n {!props.singleTile && (\r\n <TemplateIcon>\r\n <ExpandMoreIcon fontSize='medium' />\r\n </TemplateIcon>\r\n )}\r\n </div>\r\n\r\n {!props.singleTile && rendered && (\r\n <PortalPopup\r\n triggerRef={triggerRef}\r\n visible={visible}\r\n className={`prior-claims-popup ${popupClassName.current}`}\r\n >\r\n <ClaimsList {...{ ...props, visible, hide }} dropdownClassName={triggerClassName.current} />\r\n </PortalPopup>\r\n )}\r\n\r\n {props.singleTile && (\r\n <div className='prior-claims-popup single-tile'>\r\n <ClaimsList {...{ ...props, hide }} visible dropdownClassName={triggerClassName.current} />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n\r\n function hide() {\r\n setVisible(false);\r\n props.onBlur();\r\n }\r\n\r\n function onTriggerClick() {\r\n if (visible) {\r\n hide();\r\n } else {\r\n setVisible(true);\r\n props.onFocus();\r\n }\r\n }\r\n};\r\n\r\ninterface ClaimsListProps extends Props {\r\n visible: boolean;\r\n hide: () => void;\r\n dropdownClassName: string;\r\n}\r\n\r\nconst ClaimsList: FunctionComponent<ClaimsListProps> = props => {\r\n const [claims, setClaims] = useState<QuoteClaimModel[]>([]),\r\n [editIndex, setEditIndex] = useState<number | null>(null);\r\n\r\n const { form, set, valid, validate, revert } = useFormReducer({\r\n type: new Value<string>('claim type', '', [Rules.required()]),\r\n date: new Value<dayjs.Dayjs | null>('claim date', null, [Rules.required()]),\r\n amount: new Value<string>('claim amount', '', [Rules.required(), Rules.currency(), Rules.min(0)]),\r\n });\r\n\r\n const { quote } = props;\r\n\r\n useEffect(() => {\r\n if (!props.visible) return;\r\n\r\n // Claim dates are stored in UTC, but we want to display them in local time\r\n const claimsWithLocalTime = quote.Claims.map(claim => ({\r\n ...claim,\r\n // dayjs uses local time by default, so we parse the DB date with it to get local time here\r\n Date: dayjs(claim.Date).toISOString(),\r\n }));\r\n\r\n setClaims([...claimsWithLocalTime]);\r\n }, [props.visible]);\r\n\r\n return (\r\n <DesignContext.Provider value='standard'>\r\n <div className='claims-list'>\r\n {claims.length ? renderClaims() : !props.singleTile && <span className='no-claims'>No claims</span>}\r\n </div>\r\n\r\n <div className={'new' + (props.disabled ? ' disabled' : '')}>\r\n <div className='input'>\r\n <div className='top'>\r\n <DatePicker\r\n id='claim-date'\r\n placeholder='Date'\r\n date={form.date}\r\n maxDate={dayjs()}\r\n onChange={date => set('date', date)}\r\n />\r\n\r\n <Select\r\n id='claim-type'\r\n value={form.type}\r\n onSelectionChange={type => set('type', type)}\r\n placeholder='Type'\r\n >\r\n {(props.choices || []).map((choice: QuoteChoiceModel) => (\r\n <SelectItem key={choice.Value}>{choice.Name}</SelectItem>\r\n ))}\r\n </Select>\r\n </div>\r\n\r\n <div className='bottom'>\r\n <Text\r\n id='claim-amount'\r\n type='number'\r\n value={form.amount}\r\n placeholder='$'\r\n onChange={value => set('amount', value)}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className={`add-claim-button-container ${editIndex === null ? 'visible' : ''}`}>\r\n <PrimaryButton\r\n id='add-claim'\r\n onClick={onAddClaim}\r\n label={<Svg path={iconPaths.add} alt='Add Claim' />}\r\n className='add-claim-button'\r\n role='add-claim'\r\n />\r\n </div>\r\n\r\n <div className={`edit-claim-buttons-container ${editIndex === null ? '' : 'visible'}`}>\r\n <SecondaryButton\r\n id='cancel-edit-claim'\r\n onClick={onCancelEditClaim}\r\n label={<Svg path={iconPaths.close} alt='Cancel Edit Claim' />}\r\n className='cancel-edit-claim-button'\r\n role='cancel-edit-claim'\r\n />\r\n\r\n <PrimaryButton\r\n id='update-claim'\r\n onClick={onUpdateClaim}\r\n label={<Svg path={iconPaths.checkMark} alt='Update Claim' />}\r\n className='update-claim-button'\r\n role='update-claim'\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className={'buttons' + (props.disabled ? ' disabled' : '')}>\r\n <SecondaryButton id='cancel-claims' label='Cancel' onClick={onCancel} />\r\n\r\n <PrimaryButton\r\n id='submit-claims'\r\n label='Save Claims'\r\n onClick={onSave}\r\n disabled={editIndex !== null || !haveClaimsChanged()}\r\n />\r\n </div>\r\n </DesignContext.Provider>\r\n );\r\n\r\n function renderClaims() {\r\n return claims.map((claim: QuoteClaimModel, index: number) => (\r\n <div className={`claim ${editIndex === index ? 'editing' : ''}`} key={index}>\r\n <div className={`claim-buttons ${editIndex === null ? 'visible' : ''}`}>\r\n <Tooltip message='Edit'>\r\n <div className='button-wrapper' onClick={() => onEditClaim(index)}>\r\n <Svg className='edit' path={iconPaths.edit} alt='Edit claim' />\r\n </div>\r\n </Tooltip>\r\n <Tooltip message='Delete'>\r\n <div className='button-wrapper' onClick={() => onRemoveClaim(index)}>\r\n <Svg className='remove' path={iconPaths.close} alt='Remove claim' />\r\n </div>\r\n </Tooltip>\r\n </div>\r\n <span className='date'>{dayjs(claim.Date).format(simpleDateFormat)}</span>\r\n <div className='claim-info'>\r\n <span className='type'>{claim.Type}</span>\r\n <span className='amount'>{formatCurrencyUS(claim.Amount, 2)}</span>\r\n </div>\r\n </div>\r\n ));\r\n }\r\n\r\n function onUpdateClaim() {\r\n if (editIndex === null) return;\r\n\r\n const localClaims = [...claims],\r\n claim = { ...localClaims[editIndex] };\r\n\r\n (claim.Amount as any) = form.amount.content;\r\n (claim.Date as any) = form.date.content;\r\n (claim.Type as any) = form.type.content;\r\n localClaims[editIndex] = claim;\r\n\r\n setClaims(localClaims);\r\n setEditIndex(null);\r\n revert();\r\n }\r\n\r\n function onCancelEditClaim() {\r\n setEditIndex(null);\r\n revert();\r\n }\r\n\r\n function onAddClaim() {\r\n validate();\r\n if (!valid()) return;\r\n\r\n setClaims([\r\n ...claims,\r\n {\r\n Date: form.date.content!.toISOString(),\r\n Type: form.type.content,\r\n Amount: parseFloat(form.amount.content),\r\n IsFullyRepaired: true,\r\n Description: '',\r\n },\r\n ]);\r\n\r\n revert();\r\n }\r\n\r\n function onEditClaim(index: number) {\r\n setEditIndex(index);\r\n\r\n const claim = claims[index];\r\n set('amount', claim.Amount.toString());\r\n set('date', dayjs(claim.Date));\r\n set('type', claim.Type);\r\n }\r\n\r\n function onRemoveClaim(index: number) {\r\n const c = [...claims];\r\n c.splice(index, 1);\r\n setClaims(c);\r\n }\r\n\r\n function onCancel() {\r\n props.hide();\r\n revert();\r\n setClaims(quote.Claims);\r\n setEditIndex(null);\r\n }\r\n\r\n async function onSave() {\r\n props.hide();\r\n\r\n if (haveClaimsChanged()) {\r\n // Dates are set with local time in the UI (see onChange function for the datepicker above), but we need to convert to UTC before saving\r\n const claimsWithUtcTime = claims.map(claim => ({\r\n ...claim,\r\n // dayjs uses local time by default, so we add the .utc extension with it to get UTC here\r\n Date: dayjs(claim.Date).utc().toISOString(),\r\n }));\r\n await props.patchClaims(claimsWithUtcTime);\r\n }\r\n }\r\n\r\n function haveClaimsChanged() {\r\n return (\r\n claims.length !== quote.Claims.length ||\r\n !claims.every(\r\n (claim, index) =>\r\n claim.Amount == quote.Claims[index].Amount &&\r\n dayjs(claim.Date).format() == dayjs(quote.Claims[index].Date).format() &&\r\n claim.Type == quote.Claims[index].Type\r\n )\r\n );\r\n }\r\n};\r\n","import { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { PortalPopup } from '@legacy/Components/Popup';\r\nimport { formatCurrencyUS, getClosestNumberDivisibleBy, getPercentageInRange } from '@shared/Common';\r\nimport { ElementTemplateTypes, isKeyName, KeyName } from '@shared/Constants';\r\nimport { useClassName, useConditionalRender, useDocumentClick } from '@shared/Hooks';\r\nimport { SliderIcon } from '@webkit/index';\r\nimport numeral from 'numeral';\r\nimport { ChangeEvent, createRef, FunctionComponent, KeyboardEvent, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { TemplateIcon } from '../../TemplateIcon';\r\nimport './style.scss';\r\n\r\nlet debounceTimeout: ReturnType<typeof setTimeout>;\r\nexport interface RangeProps extends ElementTemplateProps {\r\n hideSlider?: boolean;\r\n}\r\n\r\nexport const Range: FunctionComponent<RangeProps> = props => {\r\n const [rangeNumber, setRangeNumber] = useState<number>(parseValue(props.value.content)),\r\n inputRef = useRef<HTMLInputElement>(null),\r\n { rendered, visible, setVisible } = useConditionalRender(),\r\n [triggerClassName, popupClassName] = useDocumentClick(closePopup, 2).classNames,\r\n className = useClassName('fill-slider', [\r\n props.disabled ? 'disabled' : '',\r\n triggerClassName.current,\r\n props.singleTile ? 'single-tile' : '',\r\n props.hideSlider ? 'hide-slider' : '',\r\n ]),\r\n triggerRef = createRef<HTMLDivElement>(),\r\n increment = useMemo(deriveIncrement, [props.comparisonModel]);\r\n // If the min or max value is not divisible by the increment, a slider input control button will not align to the min or max. To fix this we need to snap\r\n // the min or max to the closest value divisible by the increment, and use these numbers as the superficial min/max on the range input. The real min/max\r\n // values will still be set properly by code in the onRangeInputChange function below and the values displayed for the min/max will still be the real values.\r\n // This fixes a specific issue where the Home Value slider button would be slightly to the left of the max when, for example, the min value was something\r\n // like 231,648. See SW-26085.\r\n const sliderMin = useMemo(\r\n () => getClosestNumberDivisibleBy(props.minValue || 0, increment),\r\n [props.comparisonModel]\r\n ),\r\n sliderMax = useMemo(() => getClosestNumberDivisibleBy(props.maxValue || 0, increment), [props.comparisonModel]);\r\n\r\n useEffect(() => {\r\n const parsed = parseValue(props.value.content);\r\n if (!isNaN(parsed)) {\r\n setRangeNumber(parsed);\r\n }\r\n }, [props.value.content]);\r\n\r\n return (\r\n <div className={className} ref={triggerRef}>\r\n <div id={`slider-label-${props.label}`} className='slider-label' onClick={onClickInput}>\r\n <input\r\n id={`slider-input-value-${props.label}`}\r\n ref={inputRef}\r\n className='slider-input-value'\r\n onFocus={() => props.onFocus(props.value.content)}\r\n value={props.value.content}\r\n onChange={onTextInputChange}\r\n onKeyUp={onTextInputKeyUp}\r\n onBlur={onTextInputBlur}\r\n />\r\n\r\n {!props.singleTile && !props.hideSlider && (\r\n <TemplateIcon>\r\n <SliderIcon fontSize='small' />\r\n </TemplateIcon>\r\n )}\r\n </div>\r\n {!props.singleTile && !props.hideSlider && rendered && (\r\n <PortalPopup\r\n triggerRef={triggerRef}\r\n visible={visible}\r\n className={`slider-content popup ${popupClassName.current}`}\r\n >\r\n <div className='min-max'>\r\n <span>{formatRangeMinMaxLabel(props.minValue)}</span>\r\n <span>{formatRangeMinMaxLabel(props.maxValue)}</span>\r\n </div>\r\n <input\r\n id={`slider-input-${props.label}`}\r\n type='range'\r\n autoComplete='nope'\r\n value={rangeNumber}\r\n min={sliderMin}\r\n max={sliderMax}\r\n step={increment}\r\n onChange={onRangeInputChange}\r\n onMouseUp={onRangeInputMouseUp}\r\n style={{ backgroundSize: getBackgroundSize() }}\r\n />\r\n {props.isCommonElement && !props.hideCommonElementNotice && (\r\n <div className='popup-disclaimer'>\r\n <b>Note:</b> This is a common element and changing it here will modify the value across all\r\n quotes.\r\n </div>\r\n )}\r\n </PortalPopup>\r\n )}\r\n {props.singleTile && !props.hideSlider && (\r\n <div className={'slider-content' + (props.disabled ? ' disabled' : '')}>\r\n <div className='min-max'>\r\n <span>{formatRangeMinMaxLabel(props.minValue)}</span>\r\n <span>{formatRangeMinMaxLabel(props.maxValue)}</span>\r\n </div>\r\n <input\r\n type='range'\r\n autoComplete='nope'\r\n value={rangeNumber}\r\n min={sliderMin}\r\n max={sliderMax}\r\n step={increment}\r\n onChange={onRangeInputChange}\r\n onMouseUp={onRangeInputMouseUp}\r\n onKeyUp={onRangeInputKeyUp}\r\n style={{ backgroundSize: getBackgroundSize() }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n function deriveIncrement(): number {\r\n // Default to the quote element increment if it exists\r\n if (props.increment) {\r\n return props.increment;\r\n }\r\n // If there is no min or max value from the quote element, the increment will default to 1\r\n if (!props.minValue || !props.maxValue) {\r\n return 1;\r\n }\r\n // Get the range from the min and max values\r\n const range = props.maxValue - props.minValue,\r\n // Divide the range by 100 to get a reasonable increment number to aim for (this will be converted to an absolute number below)\r\n goal = range / 100,\r\n // Set up a list of clean increment numbers to match the goal increment to\r\n increments = [1, 10, 100, 500, 1000, 5000, 10000];\r\n // Return a clean increment closest to the goal increment\r\n return increments.reduce((prev: number, curr: number) =>\r\n Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev\r\n );\r\n }\r\n\r\n function parseValue(value: string) {\r\n const unFormattedValue = value.replace(/[^0-9\\-.]/g, '');\r\n const parsed = parseFloat(unFormattedValue);\r\n return isNaN(parsed) ? 0 : parsed;\r\n }\r\n\r\n function closePopup() {\r\n setVisible(false);\r\n }\r\n\r\n function onClickInput() {\r\n setVisible(true);\r\n }\r\n\r\n function onTextInputChange(e: ChangeEvent<HTMLInputElement>) {\r\n const value = e.target.value,\r\n parsedValue = parseValue(value);\r\n\r\n setRangeNumber(parsedValue);\r\n props.onChange(value);\r\n }\r\n\r\n async function onTextInputKeyUp(e: KeyboardEvent<HTMLInputElement>) {\r\n if (isKeyName(e.key, KeyName.Enter) || isKeyName(e.key, KeyName.Escape) || isKeyName(e.key, KeyName.Tab)) {\r\n await patch(rangeNumber.toString());\r\n inputRef.current?.blur();\r\n closePopup();\r\n }\r\n }\r\n\r\n async function onTextInputBlur() {\r\n props.onBlur();\r\n await patch(rangeNumber.toString());\r\n }\r\n\r\n function onRangeInputChange(e: ChangeEvent<HTMLInputElement>) {\r\n const parsed = parseFloat(e.target.value);\r\n\r\n // Initialize the value to the slider value rounded to the nearest increment (unless the increment is 1). If the current value is not divisible by the increment, the slider will not reach it.\r\n let value = increment === 1 ? parsed : Math.round(parsed / increment) * increment;\r\n\r\n // Snap the value to the min or max if it is equal to or outside the boundary\r\n if (value !== props.minValue && value !== props.maxValue) {\r\n if (props.minValue && value <= props.minValue) {\r\n value = props.minValue;\r\n } else if (props.maxValue && value >= props.maxValue) {\r\n value = props.maxValue;\r\n }\r\n }\r\n\r\n props.onChange(props.format ? numeral(value).format(props.format) : value.toString());\r\n setRangeNumber(value);\r\n }\r\n\r\n async function onRangeInputMouseUp() {\r\n const value = rangeNumber.toString();\r\n await patch(value);\r\n inputRef.current?.blur();\r\n closePopup();\r\n }\r\n async function onRangeInputKeyUp() {\r\n if (debounceTimeout) clearTimeout(debounceTimeout);\r\n\r\n debounceTimeout = setTimeout(async () => {\r\n const value = rangeNumber.toString();\r\n await patch(value);\r\n inputRef.current?.blur();\r\n closePopup();\r\n }, 300);\r\n }\r\n\r\n async function patch(value: string) {\r\n await props.patch(value);\r\n props.onBlur();\r\n }\r\n\r\n function getBackgroundSize() {\r\n return `${getPercentageInRange(rangeNumber, props.minValue || 0, props.maxValue || 0)}% 100%`;\r\n }\r\n\r\n function formatRangeMinMaxLabel(value?: number | null) {\r\n if (props.elementType === ElementTemplateTypes.Percent) return formatCurrencyUS(value);\r\n if (props.format) return numeral(value).format(props.format);\r\n return value;\r\n }\r\n};\r\n","import { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { EditDisabledIcon } from '@webkit/index';\r\nimport { TemplateIcon } from '../../TemplateIcon';\r\nimport './style.scss';\r\n\r\nexport function ReadOnlyText({ value, singleTile, choices }: ElementTemplateProps) {\r\n const elementValue = value.content.toString(),\r\n displayValue = getDisplayValue();\r\n\r\n return (\r\n <div className='readonly'>\r\n {displayValue}\r\n\r\n {elementValue && !singleTile && (\r\n <TemplateIcon tooltip='Read Only'>\r\n <EditDisabledIcon fontSize='small' />\r\n </TemplateIcon>\r\n )}\r\n </div>\r\n );\r\n\r\n function getDisplayValue(): string {\r\n // Use the selected choice name if it is a choice element type (which has a list of choices)\r\n if (choices?.length) return choices.find(choice => choice.Value === elementValue)?.Name || '-';\r\n // Use the element value if it is not a choice element type\r\n if (!elementValue) return '-';\r\n if (elementValue.toLowerCase() === 'true') return 'Yes';\r\n if (elementValue.toLowerCase() === 'false') return 'No';\r\n return elementValue;\r\n }\r\n}\r\n","import { ElementTemplateTypes } from '@shared/Constants';\r\nimport { QuoteChoiceModel } from '@shared/Models';\r\nimport { useEffect, useMemo, useState } from 'react';\r\nimport { SelectElementTemplateProps } from '.';\r\n\r\nexport function useSelectElementTemplate(props: SelectElementTemplateProps) {\r\n const [selected, setSelected] = useState<string[]>(props.value.content ? props.value.content.split(',') : []),\r\n isBooleanElement = useMemo(() => props.elementType === ElementTemplateTypes.Boolean, [props.elementType]),\r\n booleanChoices = useMemo(\r\n () =>\r\n [\r\n { Name: 'Yes', Value: 'true' },\r\n { Name: 'No', Value: 'false' },\r\n ] as QuoteChoiceModel[],\r\n [isBooleanElement]\r\n );\r\n\r\n useEffect(() => {\r\n setSelected(props.value.content ? props.value.content.split('|') : []);\r\n }, [props.value.content]);\r\n\r\n return {\r\n choices: isBooleanElement ? booleanChoices : props.choices || [],\r\n onToggle,\r\n isSelected: (value: string) => selected.includes(value),\r\n };\r\n\r\n async function onToggle(choice: QuoteChoiceModel) {\r\n const s = props.multiple\r\n ? selected.includes(choice.Value)\r\n ? selected.filter(v => v !== choice.Value)\r\n : [...selected, choice.Value]\r\n : [choice.Value];\r\n\r\n setSelected(s);\r\n await props.patch(props.multiple ? s.join('|') : choice.Value);\r\n }\r\n}\r\n","import { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { useSelectElementTemplate } from './hook';\r\nimport './style.scss';\r\n\r\nexport type SelectElementTemplateProps = {\r\n multiple?: boolean;\r\n} & ElementTemplateProps;\r\n\r\nexport function Select(props: SelectElementTemplateProps) {\r\n const { choices, isSelected, onToggle } = useSelectElementTemplate(props);\r\n\r\n return (\r\n <div className='choice-button-wrapper'>\r\n {choices.map(choice => (\r\n <div\r\n key={choice.Value}\r\n className={`choice-button ${isSelected(choice.Value) ? 'selected' : ''} ${\r\n props.disabled ? 'disabled' : ''\r\n }`}\r\n onClick={async () => onToggle(choice)}\r\n >\r\n {choice.Name}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { ChangeEvent, FunctionComponent, KeyboardEvent, useRef } from 'react';\r\nimport './style.scss';\r\n\r\nexport const Text: FunctionComponent<ElementTemplateProps> = props => {\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n return (\r\n <input\r\n ref={inputRef}\r\n className={'fill-text-input' + (props.disabled ? ' disabled' : '')}\r\n value={props.value.content}\r\n onChange={onChange}\r\n onFocus={onFocus}\r\n onBlur={onBlur}\r\n disabled={!props.editable}\r\n onKeyDown={handleEnterKeyDown}\r\n placeholder='Enter a value...'\r\n />\r\n );\r\n\r\n function onChange(e: ChangeEvent<HTMLInputElement>) {\r\n const value = e.target.value;\r\n props.onChange(value);\r\n }\r\n\r\n function onFocus(e: ChangeEvent<HTMLInputElement>) {\r\n const value = e.target.value;\r\n props.onFocus(value);\r\n }\r\n\r\n async function onBlur(e: ChangeEvent<HTMLInputElement>) {\r\n const value = e.target.value;\r\n props.onBlur(value);\r\n await props.patch(value);\r\n }\r\n\r\n function handleEnterKeyDown(e: KeyboardEvent<HTMLInputElement>) {\r\n if (e.key === 'Enter') inputRef.current?.blur();\r\n }\r\n};\r\n","import { IElement, IPatch, IPatchClaims, IPatchRequest } from '@app/ProductComparison/Interfaces';\r\nimport { StateContext } from '@app/State';\r\nimport { getQuotePath } from '@app/Views';\r\nimport {\r\n addNumeralFormatting,\r\n addPercentageInputFormatting,\r\n findValueFromChoices,\r\n formatCurrencyUS,\r\n getMessageFromError,\r\n windDisplayFormat,\r\n} from '@shared/Common';\r\nimport { dateFormat, ElementDisplayFormatTypes, ElementNames, ElementTemplateTypes } from '@shared/Constants';\r\nimport { ToastActions, useToast } from '@shared/Hooks';\r\nimport {\r\n ComparisonElementDescriptionModel,\r\n ComparisonElementModel,\r\n ComparisonElementsModel,\r\n QuoteClaimModel,\r\n QuotePatchRequestModel,\r\n} from '@shared/Models';\r\nimport { TrackingEvent } from '@shared/TrackingEvents';\r\nimport { Value } from '@webkit/index';\r\nimport dayjs from 'dayjs';\r\nimport utc from 'dayjs/plugin/utc';\r\nimport { useContext, useEffect, useMemo, useRef, useState } from 'react';\r\n\r\ndayjs.extend(utc);\r\n\r\ninterface Props {\r\n quoteId: string;\r\n carrierCode: string;\r\n comparisonElements: ComparisonElementsModel;\r\n patch: IPatch;\r\n patchFromRequest: (request: QuotePatchRequestModel, onCatchError?: (error: any) => void) => Promise<void>;\r\n patchClaims: IPatchClaims;\r\n descriptions: ComparisonElementDescriptionModel[] | null;\r\n onChange?: (value: string | number) => void;\r\n toast: ToastActions;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface State {\r\n value: Value<string>;\r\n}\r\n\r\nenum Bound {\r\n Min = 'minimum',\r\n Max = 'maximum',\r\n}\r\n\r\nconst validationMessageMs = 8 * 1000;\r\n\r\nexport const useElement = (props: Props): IElement => {\r\n const { ElementDisplay, Elements } = props.comparisonElements,\r\n element = useMemo(\r\n () => Elements.find(element => element?.QuoteId === props.quoteId),\r\n [props.quoteId, Elements]\r\n ),\r\n formatted = useMemo(() => formatElementValue(element, element?.Value) || '', [element?.Value]),\r\n initialValue = new Value<string>(ElementDisplay, formatted),\r\n [state, setState] = useState<State>({ value: initialValue }),\r\n [focus, setFocus] = useState<boolean>(false),\r\n originalValue = useRef<string | number>(state.value.content),\r\n descriptions = useMemo(\r\n () => props.descriptions?.find(description => description.carrierCode === props.carrierCode),\r\n [props.descriptions, props.carrierCode]\r\n ),\r\n description = useMemo(\r\n () => (descriptions ? descriptions.descriptions[element?.ElementName || ''] : ''),\r\n [descriptions, element?.ElementName]\r\n ),\r\n trackingStep = getQuotePath(useContext(StateContext).state?.comparisonModel?.Quotes.length),\r\n quoteId = element?.QuoteId || '',\r\n toast = useToast();\r\n\r\n useEffect(() => {\r\n setState({\r\n value: element ? state.value.set(formatted) : state.value.reset(),\r\n });\r\n\r\n if (originalValue.current && element) {\r\n originalValue.current = formatted;\r\n }\r\n }, [element]);\r\n\r\n return {\r\n element,\r\n value: state.value,\r\n focus,\r\n onChange,\r\n onFocus,\r\n setFocus,\r\n onBlur,\r\n patch,\r\n patchRaw,\r\n patchFromRequest,\r\n patchClaims,\r\n description,\r\n };\r\n\r\n function onChange(value: string) {\r\n if (isNumberElement(element) && /[a-zA-Z]/.test(value.toString())) {\r\n props.toast.error(`${ElementDisplay} can only accept number inputs.`, validationMessageMs);\r\n return;\r\n }\r\n\r\n setState({ value: state.value.set(value) });\r\n props.onChange && props.onChange(value);\r\n }\r\n\r\n function onFocus(value?: string) {\r\n setFocus(true);\r\n\r\n if (value !== undefined)\r\n setState({ value: state.value.set(value === '' ? '' : value.replace(/[^A-Za-z0-9_.\\-]+/g, '')) });\r\n }\r\n\r\n /** Turns off the focused state and has an optional parameter used to format the value\r\n * (i.e. if using a different patch method within an element template). */\r\n function onBlur(valueToFormat?: string) {\r\n setFocus(false);\r\n\r\n if (valueToFormat) {\r\n const formattedValue = validateAndFormatValue(valueToFormat);\r\n setState({ value: state.value.set(formattedValue || '') });\r\n }\r\n }\r\n\r\n async function patch(value: string): Promise<void> {\r\n const formattedValue = validateAndFormatValue(value);\r\n setState({ value: state.value.set(formattedValue || '') });\r\n\r\n // If we have an element that expects a decimal value, we need to strip the formatting before patching\r\n const patchValue = formatAsDecimalOrDefault((formattedValue || '').toString());\r\n\r\n if (formattedValue !== originalValue.current) {\r\n try {\r\n await props.patch(quoteId, [\r\n {\r\n elementName: element?.ElementName,\r\n value: patchValue,\r\n },\r\n ]);\r\n\r\n originalValue.current = (formattedValue || '').toString();\r\n } catch (error) {\r\n toast.error(await getMessageFromError(error));\r\n setState({ value: state.value.set(element?.Value || '') });\r\n }\r\n\r\n TrackingEvent.trackSinglePageApplication(trackingStep, 'patch', element?.ElementName);\r\n }\r\n }\r\n\r\n async function patchRaw(requests: IPatchRequest[]) {\r\n try {\r\n await props.patch(quoteId, requests);\r\n } catch (error) {\r\n toast.error(await getMessageFromError(error));\r\n setState({ value: state.value.set(element?.Value || '') });\r\n }\r\n TrackingEvent.trackSinglePageApplication(trackingStep, 'patch', element?.ElementName);\r\n }\r\n\r\n async function patchFromRequest(request: QuotePatchRequestModel, onCatchError?: (error: any) => void) {\r\n await props.patchFromRequest(request, onCatchError);\r\n }\r\n\r\n async function patchClaims(claims: QuoteClaimModel[]) {\r\n try {\r\n await props.patchClaims(quoteId, claims);\r\n } catch (error) {\r\n toast.error(await getMessageFromError(error));\r\n setState({ value: state.value.set(element?.Value || '') });\r\n }\r\n TrackingEvent.trackSinglePageApplication(trackingStep, 'patch', element?.ElementName);\r\n }\r\n\r\n /** Validates a string value according to any bounds, increments, and formats it with the element-specific style. */\r\n function validateAndFormatValue(value: string) {\r\n const snappedBound = snapToBound(value),\r\n snappedIncrement = snapToIncrement(snappedBound);\r\n return formatElementValue(element, snappedIncrement);\r\n }\r\n\r\n /** Formats a string value as a decimal value if the element type requires it. */\r\n function formatAsDecimalOrDefault(value: string) {\r\n return isNumberElement(element) ? value.replace(/[^A-Za-z0-9_.\\-]+/g, '') : value;\r\n }\r\n\r\n function snapToBound(value: string) {\r\n if (!element || !isNumberElement(element)) return value;\r\n\r\n const parsed = parseFloat(value);\r\n\r\n if (element.MinValue && parsed < element.MinValue) {\r\n return handleBound(Bound.Min, element.MinValue, parsed);\r\n }\r\n\r\n if (element.MaxValue && parsed > element.MaxValue) {\r\n return handleBound(Bound.Max, element.MaxValue, parsed);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function handleBound(bound: Bound, boundValue: number, value: number) {\r\n const formattedBound = formatElementValue(element, boundValue.toString());\r\n !props.disabled &&\r\n props.toast.error(`${ElementDisplay} has a ${bound} value of ${formattedBound}`, validationMessageMs);\r\n\r\n const snapped = snapToBound();\r\n const rounded = element?.ElementName === ElementNames.livingSpace ? snapped : Math.round(snapped);\r\n\r\n return rounded.toString();\r\n\r\n function snapToBound() {\r\n return bound === Bound.Min ? Math.max(boundValue, value) : Math.min(boundValue, value);\r\n }\r\n }\r\n\r\n function snapToIncrement(value: string) {\r\n let increment = element?.Increment;\r\n if (!increment) return value;\r\n\r\n if (element?.ElementName === ElementNames.livingSpace) increment = 1;\r\n\r\n // We're multiplying `parsed` and `increment` by 100 to account for JavaScript's handling of floating point precision. In\r\n // the hypothetical scenario where `parsed` is \"12.34\" and `increment` is \"0.01\", 12.34 % 0.01 will return 0.00999... instead\r\n // of 0, but 1234 % 1 is 0.\r\n const parsed = parseFloat(value);\r\n if (!isNaN(parsed) && (parsed * 100) % (increment * 100) !== 0) {\r\n const nearest = increment * Math.round(parsed / increment);\r\n return nearest.toString();\r\n }\r\n\r\n return value;\r\n }\r\n};\r\n\r\nexport function formatElementValue(\r\n element: ComparisonElementModel | undefined,\r\n value: string | null | undefined\r\n): string | null | undefined {\r\n switch (element?.ElementName) {\r\n case ElementNames.ProbableEffectiveDate:\r\n return (value ? dayjs(value) : dayjs()).format(dateFormat);\r\n case ElementNames.InsuranceScoreRetrievedOn:\r\n return dayjs(value).utc(true).local().startOf('day').format(dateFormat);\r\n case ElementNames.LimitedFungiLimits:\r\n return value;\r\n }\r\n\r\n switch (element?.ElementType) {\r\n case ElementTemplateTypes.Choice:\r\n return value;\r\n }\r\n\r\n switch (element?.DisplayFormat) {\r\n case ElementDisplayFormatTypes.Int:\r\n return addNumeralFormatting(value || '', ElementDisplayFormatTypes.Int);\r\n case ElementDisplayFormatTypes.Mixed:\r\n return findValueFromChoices(value, element);\r\n case ElementDisplayFormatTypes.Wind:\r\n return windDisplayFormat(value || '');\r\n case ElementDisplayFormatTypes.Float:\r\n return addNumeralFormatting(value || '', ElementDisplayFormatTypes.Float);\r\n case ElementDisplayFormatTypes.Currency:\r\n return formatCurrencyUS(value, 2);\r\n case ElementDisplayFormatTypes.MixedCurrency:\r\n return formatCurrencyUS(value, 0);\r\n case ElementDisplayFormatTypes.Percentage:\r\n // Certain elements, i.e. the Override Other Structures Max Percentage and Override Living Expenses Max Percentage admin elements, are number type\r\n // without a min/max value and have a percent display format type. The percentage formatting function expects a decimal which it multiplies by 100.\r\n // In the case of a number element that is returning an int like 1, that percentage formatting would turn the 1 into 100. To fix this, we can first\r\n // apply the numeral float formatting to get a decimal that can then be formatted as a percentage. - Darius Carrick 5/30/23 SW-23664\r\n if (element?.ElementType === ElementTemplateTypes.Number) {\r\n return windDisplayFormat(value || '');\r\n }\r\n\r\n // If the element is a range, we don't want to multiply the value by 100 to prevent the percentage formatting from patching the wrong value.\r\n if (element?.ElementType === ElementTemplateTypes.Range) {\r\n return value;\r\n }\r\n\r\n return addPercentageInputFormatting(parseFloat(value || '0')).toString();\r\n case ElementDisplayFormatTypes.Text:\r\n return value;\r\n case ElementDisplayFormatTypes.Date:\r\n // Format a readonly date element to the start of day UTC\r\n return !!value ? dayjs(value).utc().startOf('day').format(dateFormat) : '';\r\n case ElementDisplayFormatTypes.ChoiceText:\r\n case ElementDisplayFormatTypes.Boolean:\r\n default:\r\n return value;\r\n }\r\n}\r\n\r\nexport function isNumberElement(element: ComparisonElementModel | undefined) {\r\n if (element?.ElementType === ElementTemplateTypes.Range) return true;\r\n\r\n switch (element?.DisplayFormat) {\r\n case ElementDisplayFormatTypes.Int:\r\n case ElementDisplayFormatTypes.Mixed:\r\n case ElementDisplayFormatTypes.Wind:\r\n case ElementDisplayFormatTypes.Float:\r\n case ElementDisplayFormatTypes.Currency:\r\n case ElementDisplayFormatTypes.MixedCurrency:\r\n case ElementDisplayFormatTypes.Percentage:\r\n case ElementDisplayFormatTypes.Year:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n","import { useClassName, usePosition } from '@shared/Hooks';\r\nimport { QuotePremiumErrorModel, QuoteWarningModel } from '@shared/Models';\r\nimport Portal from '@webkit/components/portal';\r\nimport { FunctionComponent, RefObject } from 'react';\r\nimport './style.scss';\r\ninterface Props {\r\n trigger: RefObject<HTMLElement>;\r\n visible: boolean;\r\n error?: QuotePremiumErrorModel;\r\n warning?: QuoteWarningModel;\r\n}\r\n\r\nexport const TileEntryIssue: FunctionComponent<Props> = ({ trigger, visible, error, warning }) => {\r\n const position = usePosition(trigger, position => {\r\n position.top += 15;\r\n position.left += 15;\r\n position.width -= 30;\r\n });\r\n\r\n const className = useClassName('tile-entry-issue', [\r\n visible ? 'visible' : '',\r\n error ? 'error' : '',\r\n warning ? 'warning' : '',\r\n ]);\r\n\r\n return (\r\n <Portal className='tile-entry-issue-portal'>\r\n <div className={className} style={position}>\r\n {error?.Message || warning?.Warning}\r\n </div>\r\n </Portal>\r\n );\r\n};\r\n","import { Svg } from '@legacy/Components/Svg';\r\nimport { iconPaths } from '@shared/Constants';\r\nimport { QuotePremiumErrorModel, QuoteWarningModel } from '@shared/Models';\r\nimport { createRef, forwardRef, PropsWithChildren, useState } from 'react';\r\nimport Skeleton from 'react-loading-skeleton';\r\nimport { TileEntryIssue } from '../TileEntryIssue';\r\nimport './style.scss';\r\n\r\ninterface Props {\r\n id: string;\r\n label: string;\r\n readonly?: boolean;\r\n error?: QuotePremiumErrorModel;\r\n warning?: QuoteWarningModel;\r\n className?: string;\r\n focused?: boolean;\r\n hovered?: boolean;\r\n iconPath?: string;\r\n onMouseEnter?: () => void;\r\n onMouseLeave?: () => void;\r\n hideErrorTip?: boolean;\r\n loading?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const TileEntry = forwardRef<HTMLDivElement, PropsWithChildren<Props>>((props, ref) => {\r\n const triggerRef = createRef<HTMLDivElement>(),\r\n [errorVisible, setErrorVisible] = useState<boolean>(false);\r\n\r\n return (\r\n <div id={props.id} ref={ref} className={getClassName()} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>\r\n {props.loading && <Skeleton containerClassName='tile-entry-loading-skeleton' />}\r\n\r\n <div className='comparison-tile-entry-cover' />\r\n\r\n {props.iconPath && (\r\n <div className={'comparison-tile-entry-icon' + toggleEditClassName()}>\r\n <Svg path={props.iconPath} alt='' />\r\n </div>\r\n )}\r\n\r\n {!props.hideErrorTip && (props.error || props.warning) && (\r\n <TileEntryIssue\r\n trigger={triggerRef}\r\n visible={errorVisible}\r\n error={props.error}\r\n warning={props.warning}\r\n />\r\n )}\r\n\r\n <div className='comparison-tile-entry-label'>{props.label}</div>\r\n\r\n <div className='comparison-tile-entry-value' ref={triggerRef}>\r\n {props.children}\r\n </div>\r\n </div>\r\n );\r\n\r\n function onMouseEnter() {\r\n props.onMouseEnter && props.onMouseEnter();\r\n\r\n if (!props.hideErrorTip && (props.error || props.warning)) setErrorVisible(true);\r\n }\r\n\r\n function onMouseLeave() {\r\n props.onMouseLeave && props.onMouseLeave();\r\n\r\n if (!props.hideErrorTip && (props.error || props.warning)) setErrorVisible(false);\r\n }\r\n\r\n function getClassName() {\r\n let name = 'comparison-tile-entry';\r\n if (props.focused) name += ' focused';\r\n if (props.hovered) name += ' hovered';\r\n if (props.iconPath) name += ' with-icon';\r\n if (props.error) name += ' error';\r\n if (props.warning) name += ' warning';\r\n if (props.className) name += ` ${props.className}`;\r\n if (props.loading || props.disabled) name += ' disabled';\r\n return name;\r\n }\r\n\r\n function toggleEditClassName() {\r\n return props.iconPath === iconPaths.edit ? ' edit' : '';\r\n }\r\n});\r\n","import { Svg } from '@legacy/Components/Svg';\r\nimport { iconPaths } from '@shared/Constants';\r\nimport { useClassName, useDocumentClick, usePosition } from '@shared/Hooks';\r\nimport Portal from '@webkit/components/portal';\r\nimport { ComponentPropsWithoutRef, forwardRef, RefObject } from 'react';\r\nimport './style.scss';\r\n\r\nexport interface ToolTipProps extends ComponentPropsWithoutRef<'div'> {\r\n title: string;\r\n visible: boolean;\r\n onClose: () => void;\r\n className?: string;\r\n trigger?: RefObject<HTMLElement>;\r\n}\r\n\r\nexport const ToolTip = forwardRef<HTMLDivElement | null, ToolTipProps>((props, ref) => {\r\n const baseClassName = 'tool-tip-container',\r\n className = useClassName(baseClassName, [props.visible ? 'visible' : '', props.className]),\r\n position = usePosition(props.trigger);\r\n\r\n useDocumentClick(props.onClose, baseClassName);\r\n\r\n return (\r\n <Portal>\r\n <div {...{ className }} ref={ref} style={position}>\r\n <div className='tool-tip-arrow' />\r\n\r\n <Svg className='tool-tip-close-icon' path={iconPaths.closeFat} alt='Close' onClick={props.onClose} />\r\n\r\n <h3 className='tool-tip-title'>{props.title}</h3>\r\n\r\n <div className='tool-tip-description'>{props.children}</div>\r\n </div>\r\n </Portal>\r\n );\r\n});\r\n","import { useConditionalRender } from '@shared/Hooks';\r\nimport { Modal } from '@webkit/components';\r\nimport Portal from '@webkit/components/portal';\r\nimport { forwardRef, useEffect, useRef, useState } from 'react';\r\nimport { ToolTip, ToolTipProps } from '../ToolTip';\r\nimport './style.scss';\r\n\r\ninterface Props extends ToolTipProps {\r\n height: number;\r\n content: string;\r\n}\r\n\r\nexport const TrimToolTip = forwardRef<HTMLDivElement | null, Props>((props, ref) => {\r\n const { visible, rendered, setVisible } = useConditionalRender(),\r\n [required, setRequired] = useState<boolean>(false),\r\n content = useRef<HTMLDivElement | null>(null);\r\n\r\n useEffect(() => {\r\n if (!props.visible || !content.current) return;\r\n\r\n const rect = content.current.getBoundingClientRect();\r\n setRequired(rect.height >= props.height);\r\n }, [visible, content.current]);\r\n\r\n return (\r\n <>\r\n <ToolTip\r\n ref={ref}\r\n trigger={props.trigger}\r\n title={props.title}\r\n visible={props.visible}\r\n onClose={props.onClose}\r\n className={props.className}\r\n >\r\n <div\r\n ref={content}\r\n dangerouslySetInnerHTML={{ __html: props.content || '' }}\r\n style={{ maxHeight: props.height }}\r\n />\r\n\r\n {required && (\r\n <div className='tool-tip-cover'>\r\n <a onClick={() => setVisible(true)}>Show more...</a>\r\n </div>\r\n )}\r\n </ToolTip>\r\n\r\n {rendered && (\r\n <Portal>\r\n <Modal\r\n id={`tool-tip-details-${props.title}`}\r\n size='lg'\r\n title={props.title}\r\n isOpen={visible}\r\n onOpenChange={isOpen => setVisible(isOpen)}\r\n >\r\n <div className='my-4 [&_table]:w-full [&_td]:p-2 [&_td]:text-brand-gray-600 [&_td]:text-base'>\r\n <span dangerouslySetInnerHTML={{ __html: props.content }} />\r\n </div>\r\n </Modal>\r\n </Portal>\r\n )}\r\n </>\r\n );\r\n});\r\n","import * as React from 'react';\r\nimport { FC } from 'react';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n message?: string;\r\n}\r\n\r\nexport const NoData: FC<Props> = (props: Props) => {\r\n return (\r\n <div className='no-data-container'>\r\n {props.message || 'No data'}\r\n </div>\r\n );\r\n};\r\n","import { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { ElementTemplateTypes } from '@shared/Constants';\r\nimport { useToast } from '@shared/Hooks';\r\nimport { Mutable, QuotePatchRequestModel } from '@shared/Models';\r\nimport { QuoteElementModel } from '@shared/Models/ComparisonQuoteModels/QuoteElementModel';\r\nimport { Rules, Value } from '@webkit/index';\r\nimport dayjs from 'dayjs';\r\nimport { useEffect, useMemo, useState } from 'react';\r\n\r\nexport type ElementRow = {\r\n [key: string]: ElementValue;\r\n};\r\n\r\ntype ElementValue = {\r\n element: Mutable<QuoteElementModel>;\r\n value: Value<string> | Value<dayjs.Dayjs | null>;\r\n};\r\n\r\nexport function useCollectionElementTemplate(props: ElementTemplateProps) {\r\n const quote = useMemo(\r\n () => props.comparisonModel?.Quotes.find(q => q.QuoteId === props.quoteId),\r\n [props.comparisonModel, props.quoteId]\r\n ),\r\n childElements = useMemo(getChildElements, [quote, props.name]),\r\n [isModalOpen, setModalOpen] = useState<boolean>(false),\r\n [elementRows, setElementRows] = useState<ElementRow[]>(buildElementRows()),\r\n toast = useToast(),\r\n displayValue = useMemo(getDisplayValue, [quote, props.name]);\r\n\r\n useEffect(resetRows, [quote]);\r\n\r\n useEffect(() => {\r\n // Delay resetting table rows for 250ms when closing the modal to prevent a flash of the previous data.\r\n if (isModalOpen) resetRows();\r\n else setTimeout(resetRows, 250);\r\n }, [isModalOpen]);\r\n\r\n return {\r\n displayValue,\r\n toggleModal,\r\n tableHeaders: childElements?.map(e => e.ElementDisplay || e.ElementName || '') || [],\r\n elementRows,\r\n addEmptyRow: () => addRow(),\r\n deleteRow,\r\n save,\r\n onChange,\r\n isModalOpen,\r\n };\r\n\r\n async function save() {\r\n try {\r\n const values = elementRows.flatMap(row => Object.values(row).map(v => v.value));\r\n values.forEach(v => v.validate());\r\n\r\n setElementRows([...elementRows]);\r\n\r\n if (values.some(v => !v.valid)) return;\r\n if (!props.name) throw new Error('Unable to patch collection element without a name.');\r\n\r\n toggleModal(false);\r\n\r\n const request = {\r\n QuoteId: props.quoteId,\r\n Elements: [] as QuoteElementModel[],\r\n IsComparisonQuote: true,\r\n [props.name]: elementRows.map(row => {\r\n const element = {} as QuoteElementModel;\r\n Object.values(row).forEach(elementValue => {\r\n const elementName = elementValue.element.ElementName.split('_')[1];\r\n element[elementName] = elementValue.value.content;\r\n });\r\n return element;\r\n }),\r\n } as Partial<QuotePatchRequestModel>;\r\n\r\n await props.patchFromRequest(request as QuotePatchRequestModel);\r\n } catch (e) {\r\n toast.error('An error has occurred while saving the collection element. Please try again later.');\r\n }\r\n }\r\n\r\n function addRow(model?: any) {\r\n setElementRows([...elementRows, buildRow(model)]);\r\n }\r\n\r\n function deleteRow(index: number) {\r\n setElementRows(elementRows.filter((_, i) => i !== index));\r\n }\r\n\r\n function resetRows() {\r\n if (!quote || !props.name) return;\r\n\r\n const collectionItems = quote[props.name];\r\n if (!collectionItems) return;\r\n\r\n setElementRows(collectionItems.map(buildRow));\r\n }\r\n\r\n function buildElementRows(): ElementRow[] {\r\n const quote = props.comparisonModel?.Quotes.find(q => q.QuoteId === props.quoteId);\r\n if (!quote) throw new Error(`No quote found with ID ${props.quoteId}.`);\r\n if (!props.name) throw new Error('No name provided for collection element.');\r\n\r\n return [];\r\n }\r\n\r\n function getDisplayValue(): string {\r\n if (!props.name) throw new Error('No name provided for collection element.');\r\n if (!quote) throw new Error(`No quote found with ID ${props.quoteId}.`);\r\n return (quote[props.name] as any[]).length.toString();\r\n }\r\n\r\n function getChildElements(): QuoteElementModel[] {\r\n if (!quote) throw new Error(`No quote found with ID ${props.quoteId}.`);\r\n return [...quote.Elements.filter(e => e.ParentElementName === props.name).map(e => ({ ...e }))];\r\n }\r\n\r\n function toggleModal(isOpen: boolean) {\r\n setModalOpen(isOpen);\r\n }\r\n\r\n function buildRow(model?: any) {\r\n return childElements.reduce((acc: ElementRow, element: QuoteElementModel) => {\r\n acc[element.ElementName] = {\r\n element: { ...element },\r\n value:\r\n element.ElementType === ElementTemplateTypes.Date\r\n ? buildDateElementValue(element, model)\r\n : buildElementValue(element, model),\r\n };\r\n return acc;\r\n }, {} as ElementRow);\r\n }\r\n\r\n function buildElementValue(element: QuoteElementModel, model?: any): Value<string> {\r\n const rules = [Rules.required()];\r\n\r\n if (element.MinValue !== null) rules.push(Rules.min(element.MinValue));\r\n if (element.MaxValue !== null) rules.push(Rules.max(element.MaxValue));\r\n\r\n // If the element is a number, we should enforce that the user enters only numbers.\r\n if (element.ElementType === ElementTemplateTypes.Number) rules.push(Rules.integer());\r\n\r\n // In the event the user is adding an empty row, we won't have a model so set the value's content to the default element value.\r\n if (!model) {\r\n return new Value<string>(element.ElementDisplay || element.ElementName, element.DefaultValue || '', rules);\r\n }\r\n\r\n const propertyName = element.ElementName.split('_')[1],\r\n propertyValue = model[propertyName] === undefined ? '' : model[propertyName];\r\n\r\n return new Value<string>(element.ElementDisplay || element.ElementName, propertyValue.toString(), rules);\r\n }\r\n\r\n function buildDateElementValue(element: QuoteElementModel, model?: any): Value<dayjs.Dayjs | null> {\r\n const rules = [Rules.required()];\r\n\r\n if (element.MinValue !== null)\r\n rules.push(Rules.after(dayjs().startOf('day').subtract(element.MinValue, 'days'), true));\r\n if (element.MaxValue !== null)\r\n rules.push(Rules.before(dayjs().endOf('day').add(element.MaxValue, 'days'), true));\r\n\r\n // In the event the user is adding an empty row, we won't have a model so set the value's content to the default element value.\r\n if (!model) return new Value<dayjs.Dayjs | null>(element.ElementDisplay || element.ElementName, null, rules);\r\n\r\n const propertyName = element.ElementName.split('_')[1],\r\n propertyValue = model[propertyName] || '';\r\n\r\n return new Value<dayjs.Dayjs | null>(\r\n element.ElementDisplay || element.ElementName,\r\n dayjs(propertyValue),\r\n rules\r\n );\r\n }\r\n\r\n function onChange(combinedElementName: string, index: number, value: string & dayjs.Dayjs) {\r\n const row = elementRows[index],\r\n elementValue = row[combinedElementName];\r\n\r\n elementValue.value.set(value);\r\n elementValue.element.Value = value;\r\n\r\n setElementRows([...elementRows]);\r\n }\r\n}\r\n","import { ElementTemplateTypes } from '@shared/Constants';\r\nimport { QuoteElementModel } from '@shared/Models/ComparisonQuoteModels/QuoteElementModel';\r\nimport { DatePicker, Select, SelectItem, Text, Value } from '@webkit/index';\r\nimport dayjs from 'dayjs';\r\nimport { useMemo } from 'react';\r\n\r\nexport type CollectionElementInnerTemplateProps = {\r\n element: QuoteElementModel;\r\n value: Value<string> | Value<dayjs.Dayjs | null>;\r\n rowIndex: number;\r\n onChange: (elementName: string, index: number, value: string | dayjs.Dayjs | null) => void;\r\n};\r\n\r\nexport function Template({ element, value, rowIndex, onChange }: CollectionElementInnerTemplateProps) {\r\n const placeholder = useMemo(() => `${element.ElementDisplay}...`, [element.ElementDisplay]);\r\n\r\n switch (element.ElementType) {\r\n case ElementTemplateTypes.Boolean:\r\n return (\r\n <Select\r\n value={value as Value<string>}\r\n placeholder={placeholder}\r\n onSelectionChange={(selection: string) => onChange(element.ElementName, rowIndex, selection)}\r\n >\r\n <SelectItem key='true'>Yes</SelectItem>\r\n <SelectItem key='false'>No</SelectItem>\r\n </Select>\r\n );\r\n case ElementTemplateTypes.Choice:\r\n return (\r\n <Select\r\n value={value as Value<string>}\r\n placeholder={placeholder}\r\n onSelectionChange={(selection: string) => onChange(element.ElementName, rowIndex, selection)}\r\n >\r\n {element.Choices.map(choice => (\r\n <SelectItem key={choice.Value}>{choice.Name}</SelectItem>\r\n ))}\r\n </Select>\r\n );\r\n case ElementTemplateTypes.Date:\r\n return (\r\n <DatePicker\r\n id={element.ElementName}\r\n date={value as Value<dayjs.Dayjs | null>}\r\n placeholder={placeholder}\r\n minDate={\r\n element.MinValue !== null\r\n ? dayjs().startOf('day').subtract(element.MinValue, 'days')\r\n : undefined\r\n }\r\n maxDate={element.MaxValue !== null ? dayjs().endOf('day').add(element.MaxValue, 'days') : undefined}\r\n onChange={date => onChange(element.ElementName, rowIndex, date)}\r\n />\r\n );\r\n default:\r\n return (\r\n <Text\r\n value={value as Value<string>}\r\n placeholder={placeholder}\r\n onChange={text => onChange(element.ElementName, rowIndex, text)}\r\n />\r\n );\r\n }\r\n}\r\n","import { NoData } from '@app/Components/NoData';\r\nimport { ElementTemplateProps } from '@app/ProductComparison/Interfaces';\r\nimport { Button, DeleteIcon, DesignContext, Modal, ModalRow, OpenInNewIcon, Tooltip } from '@webkit/index';\r\nimport { TemplateIcon } from '../../TemplateIcon';\r\nimport { useCollectionElementTemplate } from './hook';\r\nimport './style.scss';\r\nimport { Template } from './Template';\r\n\r\nexport function Collection(props: ElementTemplateProps) {\r\n const {\r\n displayValue,\r\n toggleModal,\r\n tableHeaders,\r\n elementRows,\r\n addEmptyRow,\r\n deleteRow,\r\n save,\r\n onChange,\r\n isModalOpen,\r\n } = useCollectionElementTemplate(props);\r\n\r\n return (\r\n <DesignContext.Provider value='standard'>\r\n <div className='collection-element' onClick={() => toggleModal(true)}>\r\n <span className='collection-element-display-value'>{displayValue}</span>\r\n\r\n <TemplateIcon>\r\n <OpenInNewIcon fontSize='small' />\r\n </TemplateIcon>\r\n\r\n <Modal\r\n isOpen={isModalOpen}\r\n isKeyboardDismissable={false}\r\n isDismissable={false}\r\n onOpenChange={toggleModal}\r\n showCloseButton={false}\r\n title={props.label}\r\n size='lg'\r\n >\r\n <ModalRow>\r\n <table className='collection-table'>\r\n <thead>\r\n <tr>\r\n {tableHeaders.map(column => (\r\n <th key={column} className='collection-table-cell'>\r\n {column}\r\n </th>\r\n ))}\r\n <th style={{ width: '50px' }}></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {!elementRows.length && (\r\n <tr>\r\n <td colSpan={tableHeaders.length + 1} className='collection-table-cell'>\r\n <NoData />\r\n </td>\r\n </tr>\r\n )}\r\n\r\n {elementRows.map((row, index) => (\r\n <tr key={index}>\r\n {Object.keys(row).map((key: string) => {\r\n const elementValue = row[key];\r\n return (\r\n <td\r\n key={elementValue.element.ElementName}\r\n className='collection-table-cell'\r\n >\r\n <Template\r\n element={elementValue.element}\r\n value={elementValue.value}\r\n rowIndex={index}\r\n onChange={onChange}\r\n />\r\n </td>\r\n );\r\n })}\r\n <td>\r\n <div className='collection-action' onClick={() => deleteRow(index)}>\r\n <Tooltip message='Delete Row'>\r\n <DeleteIcon />\r\n </Tooltip>\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </ModalRow>\r\n\r\n <div className='collection-buttons'>\r\n <Button isSecondary onClick={() => toggleModal(false)}>\r\n Cancel\r\n </Button>\r\n <Button isSecondary onClick={addEmptyRow}>\r\n Add Row\r\n </Button>\r\n <Button onClick={save}>Save</Button>\r\n </div>\r\n </Modal>\r\n </div>\r\n </DesignContext.Provider>\r\n );\r\n}\r\n","import { ImsRaterQuoteStateContext } from '@app/ImsRaterQuote/State';\r\nimport {\r\n ChangeInsuredName,\r\n Date,\r\n Dropdown,\r\n FeatureElement,\r\n InsuredPreviousAddress,\r\n ManualPremiumAdjustment,\r\n PriorClaims,\r\n Range,\r\n ReadOnlyText,\r\n Select,\r\n Text,\r\n} from '@app/ProductComparison/Element/Templates';\r\nimport { useElement } from '@app/ProductComparison/Hooks/UseElement';\r\nimport { ElementTemplateProps, IElements } from '@app/ProductComparison/Interfaces';\r\nimport { StateContext } from '@app/State/Context';\r\nimport { getQuotePath } from '@app/Views';\r\nimport { RatingType, StateCode } from '@business/CommonSets';\r\nimport { Svg } from '@legacy/Components/Svg';\r\nimport { stripExtraQuoteElementLabelParts } from '@shared/Common';\r\nimport { getLocalDate, getMaxEffectiveDate } from '@shared/Common/DateHelpers';\r\nimport {\r\n CommercialElementNames,\r\n ElementGroupNames,\r\n ElementNames,\r\n ElementTemplateTypes,\r\n iconPaths,\r\n} from '@shared/Constants';\r\nimport { ToastContext, useConditionalRender } from '@shared/Hooks';\r\nimport { ComparisonElementsModel, ComparisonQuotesModel, QuotePremiumErrorModel } from '@shared/Models';\r\nimport { TrackingEvent } from '@shared/TrackingEvents';\r\nimport { clsx } from 'clsx';\r\nimport dayjs from 'dayjs';\r\nimport { FunctionComponent, RefObject, useContext, useRef } from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { TileEntry } from '../TileEntry';\r\nimport { TrimToolTip } from '../TrimToolTip';\r\nimport { Collection } from './Templates/Collection';\r\n\r\ninterface Props extends IElements {\r\n comparisonElements: ComparisonElementsModel;\r\n elementGroupName?: string;\r\n validationError?: QuotePremiumErrorModel;\r\n hideTips?: boolean;\r\n tileEntryClassName?: string;\r\n loading?: boolean;\r\n focusedElement?: string;\r\n onChange?: (value: string) => void;\r\n onCommonElementFocus?: (elementName: string) => void;\r\n onCommonElementBlur?: (elementName: string) => void;\r\n singleTile?: boolean;\r\n comparisonModel: ComparisonQuotesModel | null;\r\n isReprice?: boolean;\r\n disabled?: boolean;\r\n elementRef?: RefObject<HTMLDivElement>;\r\n hidden?: boolean;\r\n minProbableEffectiveDateOffset?: number;\r\n}\r\n\r\nexport const Element: FunctionComponent<Props> = props => {\r\n const toolTipRef = useRef<HTMLDivElement>(null),\r\n toolTipHeight = useMediaQuery({ maxWidth: 767 }) ? 300 : 500,\r\n appState = useContext(StateContext),\r\n raterQuoteState = useContext(ImsRaterQuoteStateContext),\r\n toast = useContext(ToastContext),\r\n { rendered: toolTipRendered, visible: toolTipVisible, setVisible: setToolTipVisible } = useConditionalRender();\r\n\r\n const { ElementDisplay } = props.comparisonElements,\r\n {\r\n element,\r\n value,\r\n focus,\r\n onChange,\r\n onFocus,\r\n setFocus,\r\n onBlur,\r\n patch,\r\n patchRaw,\r\n patchFromRequest,\r\n patchClaims,\r\n description,\r\n } = useElement({\r\n quoteId: props.quote.QuoteId,\r\n carrierCode: props.quote.CarrierCode || '',\r\n comparisonElements: props.comparisonElements,\r\n patch: props.patch,\r\n patchFromRequest: props.patchFromRequest,\r\n patchClaims: props.patchClaims,\r\n descriptions: props.descriptions,\r\n onChange: props.onChange,\r\n toast,\r\n }),\r\n ratingType = RatingType.parse(props.quote.RatingType);\r\n\r\n const elementProps: ElementTemplateProps = {\r\n label: ElementDisplay,\r\n value,\r\n editable: element?.Editable,\r\n choices: element?.Choices,\r\n elementType: element?.ElementType,\r\n minValue: element?.MinValue,\r\n maxValue: element?.MaxValue,\r\n increment: element?.Increment,\r\n onFocus: (value?: string) => {\r\n if (element?.IsCommonElement && props.onCommonElementFocus)\r\n props.onCommonElementFocus(element?.ElementName);\r\n onFocus(value);\r\n },\r\n setFocus,\r\n onChange,\r\n onBlur: (value?: string) => {\r\n if (element?.IsCommonElement && props.onCommonElementBlur) {\r\n props.onCommonElementBlur(element?.ElementName);\r\n }\r\n onBlur(value);\r\n },\r\n patch,\r\n patchFromRequest,\r\n patchRaw,\r\n patchClaims,\r\n defaultValue: element?.DefaultValue,\r\n format: element?.DisplayFormat,\r\n quoteId: props.quote.QuoteId,\r\n isCommonElement: element?.IsCommonElement || false,\r\n disabled: getDisabledState(),\r\n singleTile: props.singleTile,\r\n comparisonModel: props.comparisonModel,\r\n name: element?.ElementName,\r\n hideCommonElementNotice: ratingType === RatingType.Admitted,\r\n };\r\n\r\n const error =\r\n props.quote.QuotePremiumErrors.find(error => error.ElementName === element?.ElementName) ||\r\n props.validationError;\r\n const warning = props.quote.QuoteWarnings.find(warning => warning.ElementName === element?.ElementName);\r\n\r\n // Do not show tooltip for a features section element if the feature is not checked for this quote - SW-32327\r\n const hiddenForFeatureElement =\r\n props.elementGroupName === ElementGroupNames.Features &&\r\n element?.Value?.toLowerCase() === 'false' &&\r\n description;\r\n\r\n return (\r\n <TileEntry\r\n id={element?.ElementName + props.quote.QuoteId}\r\n label={stripExtraQuoteElementLabelParts(ElementDisplay)}\r\n focused={focus || (!!props.focusedElement && props.focusedElement === element?.ElementName)}\r\n error={error}\r\n warning={warning}\r\n hideErrorTip={props.hideTips}\r\n className={clsx(props.tileEntryClassName, props.hidden && 'not-visible')}\r\n loading={props.loading || appState?.state?.patching}\r\n ref={props.elementRef}\r\n disabled={elementProps.disabled}\r\n >\r\n {getTemplate()}\r\n\r\n {!props.hideTips && description && !hiddenForFeatureElement && (\r\n <Svg\r\n className={\r\n 'comparison-tile-entry-description-icon' + (props.singleTile ? ' single-tile-tooltip-icon' : '')\r\n }\r\n alt={`Click for more information about ${ElementDisplay}.`}\r\n path={iconPaths.info}\r\n onClick={onToolTipIconClick}\r\n />\r\n )}\r\n\r\n {toolTipRendered && (\r\n <TrimToolTip\r\n ref={toolTipRef}\r\n trigger={props.elementRef}\r\n title={stripExtraQuoteElementLabelParts(ElementDisplay)}\r\n visible={toolTipVisible}\r\n onClose={() => setToolTipVisible(false)}\r\n className={props.singleTile ? 'single-tile-tooltip' : ''}\r\n height={toolTipHeight}\r\n content={getElementDescription() || ''}\r\n />\r\n )}\r\n </TileEntry>\r\n );\r\n\r\n function getTemplate() {\r\n // If no element is present (meaning that one quote in the comparison model doesn't have a matching element),\r\n // we should display a read-only element with a dash to indicate a non-applicable value.\r\n if (!element) {\r\n return <div className='readonly'>-</div>;\r\n }\r\n\r\n if (element.ElementName === ElementNames.ProbableEffectiveDate) {\r\n // The logic in getMinVaveEffectiveDate was more complicated than it needed to be and was hard to combine with the new admin offset element, so\r\n // we are no longer using it here. The new logic below simplifies the minimum probable effective date calculation and should work for all carriers.\r\n // For most cases that date should be the current day, not in the past so policies can't be back-dated. But if the admin offset is present, we apply\r\n // that offset. Note that the offset could be a positive or negative number.\r\n // const minDate = getMinVaveEffectiveDate(props.quote.CreatedOn, props.minProbableEffectiveDateOffset);\r\n\r\n let now = dayjs();\r\n\r\n if (props.minProbableEffectiveDateOffset) {\r\n now = now.add(props.minProbableEffectiveDateOffset, 'day');\r\n }\r\n\r\n const minDate = now.toDate();\r\n const maxDate = getMaxEffectiveDate(props.quote.CreatedOn, minDate);\r\n\r\n return <Date {...elementProps} minValue={minDate} maxValue={maxDate} />;\r\n }\r\n\r\n if (element.ElementName === ElementNames.InsuredNameDetails) {\r\n return <ChangeInsuredName {...elementProps} quote={props.quote} />;\r\n }\r\n\r\n if (\r\n element.ElementName === ElementNames.PriorClaims ||\r\n element.ElementName === CommercialElementNames.lossHistory\r\n ) {\r\n return <PriorClaims {...elementProps} quote={props.quote} />;\r\n }\r\n\r\n if (element.ElementName === ElementNames.ChangeInsuranceScoreAddressStub) {\r\n return <InsuredPreviousAddress {...elementProps} />;\r\n }\r\n\r\n if (element.ElementName === ElementNames.ManualPremiumAdjustment) {\r\n return <ManualPremiumAdjustment {...elementProps} />;\r\n }\r\n\r\n if (props.elementGroupName === ElementGroupNames.Features) {\r\n return <FeatureElement {...elementProps} />;\r\n }\r\n\r\n if (!element.Editable) {\r\n return <ReadOnlyText {...elementProps} />;\r\n }\r\n\r\n // TODO: We should have an element type on the backend that would be a range input without a slider, but do not want to hold up SW-23640 - Darius 4/17/2023\r\n if (element.ElementName === ElementNames.yearBuilt) {\r\n return (\r\n <Range\r\n {...elementProps}\r\n hideSlider={\r\n ratingType === RatingType.Admitted &&\r\n props.comparisonModel?.QuoteProperty?.StateCode === StateCode.TX.code\r\n }\r\n />\r\n );\r\n }\r\n\r\n switch (element.ElementType) {\r\n case ElementTemplateTypes.Boolean:\r\n case ElementTemplateTypes.Choice:\r\n return elementProps.singleTile ? <Select {...elementProps} /> : <Dropdown {...elementProps} />;\r\n case ElementTemplateTypes.MultiSelect:\r\n return elementProps.singleTile ? (\r\n <Select {...elementProps} multiple />\r\n ) : (\r\n <Dropdown {...elementProps} multiple />\r\n );\r\n case ElementTemplateTypes.Number:\r\n case ElementTemplateTypes.Index:\r\n case ElementTemplateTypes.Text:\r\n return element?.MinValue !== null && element?.MaxValue !== null ? (\r\n <Range {...elementProps} />\r\n ) : (\r\n <Text {...elementProps} />\r\n );\r\n case ElementTemplateTypes.Info:\r\n return <ReadOnlyText {...elementProps} />;\r\n case ElementTemplateTypes.Range:\r\n case ElementTemplateTypes.Percent:\r\n return <Range {...elementProps} />;\r\n case ElementTemplateTypes.Date:\r\n const minDate = getLocalDate(props.quote.CreatedOn).subtract(100, 'year').toDate();\r\n let maxDate = getLocalDate(props.quote.CreatedOn).toDate();\r\n if (\r\n element.ElementName === ElementNames.UpcomingLoanClosingDate ||\r\n element.ElementName === ElementNames.ExistingNfipPolicyExpirationDate\r\n ) {\r\n maxDate = getLocalDate(props.quote.CreatedOn).add(1, 'year').toDate();\r\n }\r\n\r\n return <Date {...elementProps} minValue={minDate} maxValue={maxDate} />;\r\n case ElementTemplateTypes.Collection:\r\n return <Collection {...elementProps} />;\r\n default:\r\n return <ReadOnlyText {...elementProps} />;\r\n }\r\n }\r\n\r\n function getElementDescription() {\r\n return description;\r\n }\r\n\r\n function onToolTipIconClick() {\r\n setToolTipVisible(true);\r\n TrackingEvent.trackSinglePageApplication(\r\n getQuotePath(props.comparisonModel?.Quotes.length),\r\n 'tooltip',\r\n element?.ElementName\r\n );\r\n setTimeout(() => toolTipRef.current?.scrollIntoView({ block: 'nearest', behavior: 'smooth' }), 50);\r\n }\r\n\r\n function getDisabledState() {\r\n return (\r\n (props.quote.IsPurchased && !props.isReprice) ||\r\n props.quote.IsReadOnly ||\r\n props.quote.IsCancel ||\r\n props.quote.IsRewrite ||\r\n (raterQuoteState && raterQuoteState.state?.repriceModel?.IsRenewal) ||\r\n props.loading ||\r\n appState?.state?.patching ||\r\n props.disabled\r\n );\r\n }\r\n};\r\n","import { createRef, RefObject } from 'react';\r\n\r\nexport class ElementRefs {\r\n private refs: { [key: string]: RefObject<HTMLDivElement> } = {};\r\n\r\n get(key: string) {\r\n return this.refs[key] ? this.refs[key] : (this.refs[key] = createRef<HTMLDivElement>());\r\n }\r\n}\r\n","import { Row } from '@app/ProductComparison/Row';\r\nimport { ComponentPropsWithoutRef, forwardRef } from 'react';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n id: string;\r\n} & ComponentPropsWithoutRef<'div'>;\r\n\r\nexport const GroupHeaderRow = forwardRef<HTMLDivElement, Props>((props, ref) => {\r\n return (\r\n <Row ref={ref} id={props.id} className='group-heading'>\r\n {props.children}\r\n </Row>\r\n );\r\n});\r\n","import { ITileNavigator } from '@app/ProductComparison/Interfaces';\r\nimport { useResize, useViewport, Viewport } from '@shared/Hooks';\r\nimport { useState } from 'react';\r\n\r\nexport const useTileNavigator = (totalTiles: number): ITileNavigator => {\r\n const [tileIndex, setTileIndex] = useState<number>(0),\r\n [tileCount, setTileCount] = useState<number>(totalTiles);\r\n\r\n useViewport(setTileCountFromViewport);\r\n useResize(() => setTileIndex(0));\r\n\r\n return {\r\n tileIndex,\r\n setTileIndex,\r\n tileCount,\r\n };\r\n\r\n function setTileCountFromViewport(viewport: Viewport) {\r\n if (totalTiles === 2) {\r\n switch (viewport) {\r\n case Viewport.ExtraExtraSmall:\r\n case Viewport.ExtraSmall:\r\n case Viewport.Small:\r\n return setTileCount(1);\r\n default:\r\n return setTileCount(2);\r\n }\r\n }\r\n\r\n switch (viewport) {\r\n case Viewport.ExtraExtraSmall:\r\n case Viewport.ExtraSmall:\r\n case Viewport.Small:\r\n return setTileCount(1);\r\n case Viewport.Medium:\r\n return setTileCount(2);\r\n default:\r\n return setTileCount(3);\r\n }\r\n }\r\n};\r\n","import { StateContext } from '@app/State';\r\nimport { getPath, Path, UrlParams } from '@app/Views';\r\nimport { isAdmin, navigate } from '@shared/Common';\r\nimport { createUrqOrDefault, getUrqButtonLabel, getUrqButtonTooltip } from '@shared/Common/UrqHelpers';\r\nimport { useNavigateWithParams } from '@shared/Hooks';\r\nimport { ComparisonQuoteModel } from '@shared/Models';\r\nimport { TrackingEvent } from '@shared/TrackingEvents';\r\nimport { Button, Tooltip } from '@webkit/index';\r\nimport { useContext } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport './style.scss';\r\n\r\ntype UrqButtonProps = {\r\n quote: ComparisonQuoteModel;\r\n};\r\n\r\nexport function GetUrqButton({ quote }: UrqButtonProps) {\r\n const { ImsPolicyNumber, UpcomingRenewalQuoteId, HasRenewalPolicy, QuoteId } = quote;\r\n\r\n if (!ImsPolicyNumber) {\r\n return <></>;\r\n }\r\n\r\n const stateReducer = useContext(StateContext),\r\n navigateToRoute = useNavigateWithParams(),\r\n params = useParams<UrlParams>(),\r\n hasUrq = !!UpcomingRenewalQuoteId,\r\n { trackSinglePageApplication: trackSinglePageApplication } = TrackingEvent,\r\n // The URQ button should be disabled if there is already a subsequent renewal policy in place,\r\n // unless a URQ already exists, in which case you can still view it.\r\n disabled = !isAdmin() || (!hasUrq && !!HasRenewalPolicy);\r\n\r\n return (\r\n <Tooltip message={getUrqButtonTooltip(ImsPolicyNumber, !!HasRenewalPolicy, UpcomingRenewalQuoteId)}>\r\n <Button id={'get-urq-button'} onClick={onClick} isDisabled={disabled}>\r\n {getUrqButtonLabel(ImsPolicyNumber, UpcomingRenewalQuoteId)}\r\n </Button>\r\n </Tooltip>\r\n );\r\n\r\n async function onClick() {\r\n trackUrqClick();\r\n\r\n if (hasUrq) {\r\n goToUrq(UpcomingRenewalQuoteId);\r\n return;\r\n }\r\n\r\n const newUrqQuoteId = await createUrqOrDefault(QuoteId);\r\n goToUrq(newUrqQuoteId);\r\n }\r\n\r\n function trackUrqClick() {\r\n trackSinglePageApplication(Path.Customize, hasUrq ? 'view urq' : 'create urq');\r\n }\r\n\r\n function goToUrq(urqQuoteId: string) {\r\n const url = getPath(Path.UpcomingRenewalQuote, {\r\n quoteId: urqQuoteId,\r\n product: params?.product || 'homeowner',\r\n });\r\n\r\n // If we're in the single page application, we can navigate using the router\r\n if (stateReducer.update !== undefined) {\r\n navigateToRoute(url);\r\n return;\r\n }\r\n\r\n // If we're not in the single page application, we need to use the old navigate function (i.e. in the IMS Rater)\r\n navigate(url);\r\n }\r\n}\r\n","import { resetUpcomingRenewalQuote } from '@api/HOApi';\r\nimport { StateContext } from '@app/State';\r\nimport { Path } from '@app/Views';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport { normalizeError } from '@shared/Common';\r\nimport { ToastContext, useNavigateWithParams } from '@shared/Hooks';\r\nimport { useContext, useState } from 'react';\r\n\r\nexport type UseResetUrq = {\r\n resetUrq: () => Promise<void>;\r\n loading: boolean;\r\n};\r\n\r\nexport function useResetUrq(): UseResetUrq {\r\n const { state, update } = useContext(StateContext),\r\n toast = useContext(ToastContext),\r\n navigate = useNavigateWithParams();\r\n\r\n const [loading, setLoading] = useState<boolean>(false);\r\n\r\n return {\r\n resetUrq,\r\n loading,\r\n };\r\n\r\n async function resetUrq() {\r\n setLoading(true);\r\n updatePatching(true);\r\n\r\n try {\r\n const product = ProductLine.parseOrDefault(state.comparisonModel?.ProductLineId);\r\n if (!product) {\r\n throw new Error('Unable to reset quotes because product line is invalid.');\r\n }\r\n\r\n const quoteId = await resetUpcomingRenewalQuote(state.quoteId || '', true);\r\n navigate(Path.UpcomingRenewalQuote, { quoteId, product: product.lowercaseName }, true);\r\n } catch (error) {\r\n const normalizedError = normalizeError(error),\r\n defaultMessage = 'There was an issue resetting the URQ. Please contact tech support.',\r\n message = normalizedError?.message || defaultMessage;\r\n await toast.error(message);\r\n } finally {\r\n updatePatching(false);\r\n setLoading(false);\r\n }\r\n }\r\n\r\n function updatePatching(patching: boolean) {\r\n update(state => {\r\n state.patching = patching;\r\n });\r\n }\r\n}\r\n","import { BlockQuote, Colors, Column, FontSizes, Heading3, Page, Paragraph } from '@legacy/Components/ReactToPdf';\r\nimport * as Common from '@shared/Common';\r\nimport * as Constants from '@shared/Constants';\r\nimport * as Models from '@shared/Models';\r\nimport dayjs from 'dayjs';\r\nimport * as React from 'react';\r\n\r\ninterface Props {\r\n quoteDetails: Models.AdverseActionQuoteDetails;\r\n reasons: Models.AdverseActionReason[];\r\n ncfReferenceNumber: string;\r\n}\r\n\r\nexport const AdverseActionNoticePdf: React.FunctionComponent<Props> = props => {\r\n const { quoteDetails, reasons, ncfReferenceNumber } = props,\r\n fontSize = FontSizes.small3,\r\n twoLineAddress = quoteDetails.address.split(',');\r\n\r\n return (\r\n <Page currentPage={1} totalPages={1}>\r\n <Column width='80%' margin='0 auto'>\r\n <img\r\n // Images need full url for Aspose HTML to PDF\r\n src='https://www.swyfft.com/images/green-wordmark-logo-2x.png'\r\n style={{\r\n width: '64px',\r\n height: '36px',\r\n margin: '0 auto 24px auto',\r\n display: 'block',\r\n }}\r\n alt='Swyfft Logo'\r\n />\r\n\r\n <Heading3 textAlign='center' margin='0 0 24px 0'>\r\n Adverse Action Notice: Eligibility Affected\r\n </Heading3>\r\n\r\n <BlockQuote>\r\n {quoteDetails.createdOn\r\n ? dayjs(quoteDetails.createdOn).format(Constants.simpleDateFormat)\r\n : dayjs().format(Constants.simpleDateFormat)}\r\n <br />\r\n {quoteDetails.firstName &&\r\n quoteDetails.lastName &&\r\n Common.returnFullName(quoteDetails.firstName, quoteDetails.middleName, quoteDetails.lastName)}\r\n <br />\r\n {twoLineAddress[0]}\r\n <br />\r\n {twoLineAddress[1]}\r\n </BlockQuote>\r\n\r\n <Paragraph {...{ fontSize }}>Dear {quoteDetails.firstName && quoteDetails.firstName},</Paragraph>\r\n\r\n <Paragraph {...{ fontSize }} margin='0 0 24px 0'>\r\n Thank you for considering Swyfft as your insurance provider. As part of your underwriting policy, an\r\n inquiry has been made with LexisNexis Risk Solutions Inc., our provider of consumer reports. You are\r\n receiving this notice because your insurance eligibility has been adversely affected by information\r\n received from LexisNexis Risk Solutions Inc. In compliance with the Fair Credit Reporting Act\r\n (Public Law 91-508) and the Consumer Credit Reform Act of 1996, you are hereby informed that the\r\n action taken above is being taken wholly or partly because of information contained in a consumer\r\n report. The primary factors affecting your insurance score are:\r\n </Paragraph>\r\n\r\n <table\r\n style={{\r\n width: '100%',\r\n padding: '8px 16px',\r\n backgroundColor: Colors.smokeWhite,\r\n border: `1px solid ${Colors.lightGray2}`,\r\n margin: '0 0 24px 0',\r\n }}\r\n >\r\n <thead style={{ color: Colors.darkGray2, fontSize: FontSizes.medium1 }}>\r\n <tr>\r\n <th style={{ width: '25%', textAlign: 'left', padding: '8px', fontSize }}>Reason Code</th>\r\n <th style={{ width: '80%', textAlign: 'left', padding: '8px', fontSize }}>Description</th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {reasons.map((reason: Models.AdverseActionReason, index: number) => (\r\n <tr key={`${reason.code}-${index}`} style={{ verticalAlign: 'top' }}>\r\n <td style={{ padding: '8px', fontWeight: 'bold', fontSize }}>{reason.code}</td>\r\n <td style={{ padding: '8px', fontSize }}>{reason.description}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n\r\n <Paragraph {...{ fontSize }} margin='0 0 24px 0'>\r\n You have the right under the Fair Credit Reporting Act to obtain a free copy of such report from\r\n LexisNexis Risk Solutions Inc. within 60 days of receipt of this notice. LexisNexis did not make any\r\n decisions regarding your policy eligibility and is, therefore, unable to provide specific reasons\r\n regarding the policy determination. To receive a free copy of your report, call or mail LexisNexis\r\n at the address listed below. To help facilitate your order, please include the NCF Reference number\r\n provided.\r\n </Paragraph>\r\n\r\n <BlockQuote>\r\n LexisNexis Consumer Contact Center\r\n <br />\r\n Box 105108\r\n <br />\r\n Atlanta, GA 30348-5108\r\n <br />\r\n 1-800-456-6004\r\n <br />\r\n NCF Reference # {ncfReferenceNumber}\r\n </BlockQuote>\r\n </Column>\r\n </Page>\r\n );\r\n};\r\n","import { getAdverseActionNotice } from '@api/HOApi';\r\nimport { useReactToPdf } from '@legacy/Components/ReactToPdf';\r\nimport { handleGeneralError, returnFullName } from '@shared/Common';\r\nimport { AdverseActionQuoteDetails } from '@shared/Models';\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { AdverseActionNoticePdf } from './Pdf';\r\n\r\ninterface Props {\r\n quoteDetails: AdverseActionQuoteDetails;\r\n label?: string;\r\n className?: string;\r\n}\r\n\r\nexport const AdverseActionNoticeLink: React.FunctionComponent<Props> = ({ quoteDetails, label, className }) => {\r\n const [loading, setLoading] = useState<boolean>(false);\r\n const { ncfId, firstName, middleName, lastName } = quoteDetails;\r\n\r\n return (\r\n <a id='adverse-action-notice-link' className={className} onClick={downloadPdf}>\r\n {loading ? 'Loading...' : label || 'Download Adverse Action Notice'}\r\n </a>\r\n );\r\n\r\n async function downloadPdf() {\r\n setLoading(true);\r\n\r\n try {\r\n const adverseActionNotice = await getAdverseActionNotice(ncfId);\r\n const { reasons, ncfReferenceNumber } = adverseActionNotice;\r\n\r\n await useReactToPdf({\r\n component: (\r\n <AdverseActionNoticePdf\r\n quoteDetails={quoteDetails}\r\n reasons={reasons}\r\n ncfReferenceNumber={ncfReferenceNumber}\r\n />\r\n ),\r\n unformattedFileName:\r\n 'Adverse Action Notice ' + returnFullName(firstName || '', middleName, lastName || ''),\r\n });\r\n } catch (e) {\r\n await handleGeneralError(e);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n};\r\n","import { createEAndSFromAdmitted } from '@api/HOApi';\r\nimport { GetUrqButton } from '@app/Components/GetUrqButton';\r\nimport { ElementRefs } from '@app/ProductComparison/Element/Refs';\r\nimport { useResetUrq } from '@app/ResetQuotes/ResetUrq';\r\nimport { getQuotePath } from '@app/Views';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport { AdverseActionNoticeLink } from '@legacy/Components/Documents/AdverseActionNotice/Link';\r\nimport { PrimaryGreenButton } from '@legacy/Components/FormGroups/Buttons';\r\nimport { isAdmin, toAddress } from '@shared/Common';\r\nimport { ToastContext, useNavigateWithParams } from '@shared/Hooks';\r\nimport { ComparisonQuoteModel, IPhysicalAddress, QuotePropertyModel } from '@shared/Models';\r\nimport { ErrorIcon, ExpandMoreIcon, Tooltip } from '@webkit/index';\r\nimport { clsx } from 'clsx';\r\nimport { useContext, useEffect, useState } from 'react';\r\nimport './style.scss';\r\n\r\ninterface IssueBannerProps {\r\n visible: boolean;\r\n displayAdverseActionNotice: boolean | undefined;\r\n quoteProperty: QuotePropertyModel | null | undefined;\r\n quote: ComparisonQuoteModel;\r\n elementRefs: ElementRefs;\r\n className?: string;\r\n}\r\n\r\ninterface Issue {\r\n elementName: string | null;\r\n message: string;\r\n isError: boolean;\r\n}\r\n\r\nexport function IssueBanner({\r\n visible,\r\n displayAdverseActionNotice,\r\n quoteProperty,\r\n quote,\r\n className,\r\n elementRefs,\r\n}: IssueBannerProps) {\r\n const { error: onError } = useContext(ToastContext),\r\n navigate = useNavigateWithParams();\r\n\r\n const { resetUrq, loading: resetUrqLoading } = useResetUrq();\r\n\r\n const [issueIndex, setIssueIndex] = useState<number>(0),\r\n [loading, setLoading] = useState<boolean>(false);\r\n\r\n const issues = buildIssueList(),\r\n issueCount = issues.length,\r\n issue = issues[issueIndex],\r\n fixable = !!issue?.elementName;\r\n\r\n useEffect(() => {\r\n setIssueIndex(0);\r\n }, [issueCount]);\r\n\r\n return (\r\n <div className={clsx('issue-banner', visible && 'visible', className)}>\r\n <div className='issue-banner-header'>\r\n <div className='title-wrapper'>\r\n <span className='title'>{`Issue${issueCount === 1 ? '' : 's'} With Your Quote`}</span>\r\n <div className='count'>\r\n <span className='count-label'>\r\n {`${issueIndex + 1}/${issueCount} issue${issueCount === 1 ? '' : 's'}`}\r\n </span>\r\n <span className={`next-issue ${issueCount > 1 ? 'visible' : ''}`} onClick={onNextClick}>\r\n Next Issue\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div className='cta'>\r\n {!quote.IsPurchased &&\r\n !quote.IsUpcomingRenewalQuote &&\r\n ((displayAdverseActionNotice && quote.NcfGuid) || quote.NcfGuid) &&\r\n !!quoteProperty && (\r\n <AdverseActionNoticeLink\r\n className='adverse-action-notice-link'\r\n label='Adverse Action Notice'\r\n quoteDetails={{\r\n ncfId: quote.NcfGuid || '',\r\n createdOn: quote.CreatedOn,\r\n firstName: quote.InsuredNameFirst,\r\n middleName: quote.InsuredNameMiddle,\r\n lastName: quote.InsuredNameLast,\r\n address: toAddress(quoteProperty as IPhysicalAddress),\r\n }}\r\n />\r\n )}\r\n\r\n {!quote.IsPurchased && !quote.IsUpcomingRenewalQuote && quote.HasEAndSOffer && (\r\n <PrimaryGreenButton\r\n label='Get E&S Quote'\r\n className='get-e-and-s-button mini-button-cp'\r\n loading={loading}\r\n onClick={onGetEAndSQuoteClick}\r\n />\r\n )}\r\n\r\n {showUrqReset() && (\r\n <Tooltip\r\n message={\r\n 'Resetting a URQ creates a new URQ with the latest quote definition rating applied, and will retain any changes made to the previous URQ EXCEPT changes made to the Claims section.' +\r\n 'Any previous claims changes will be lost when you click Reset URQ.'\r\n }\r\n >\r\n <PrimaryGreenButton\r\n label={'Reset URQ'}\r\n className={'mini-button-cp'}\r\n onClick={resetUrq}\r\n loading={resetUrqLoading}\r\n />\r\n </Tooltip>\r\n )}\r\n\r\n {isAdmin() &&\r\n !quote.IsUpcomingRenewalQuote &&\r\n quote.UpcomingRenewalQuoteId &&\r\n // TODO: Remove logic hiding this when URQ is ready for Flood - see SW-26253\r\n !ProductLine.matches(quote.ProductLineId, ProductLine.Flood) && <GetUrqButton quote={quote} />}\r\n </div>\r\n\r\n <div className='clearfix' />\r\n </div>\r\n\r\n <div className='description'>\r\n {`Please see the following important message${issueCount === 1 ? '' : 's'} about your quote.`}\r\n </div>\r\n\r\n <div\r\n className={`selected-issue ${issue?.isError ? 'error' : 'warning'} ${\r\n fixable ? 'fixable' : 'unfixable'\r\n }`}\r\n onClick={fixable ? onIssueClick : undefined}\r\n >\r\n <div className='selected-issue-text'>{issue?.message || ''}</div>\r\n <div className='selected-issue-icon-wrapper'>\r\n <ExpandMoreIcon\r\n fontSize='medium'\r\n className={clsx('selected-issue-icon rotate', fixable && 'visible')}\r\n />\r\n <ErrorIcon fontSize='medium' className={clsx('selected-issue-icon', !fixable && 'visible')} />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n function onIssueClick() {\r\n const issue = issues[issueIndex];\r\n if (!issue) {\r\n return;\r\n }\r\n\r\n elementRefs.get(quote.QuoteId + issue?.elementName).current?.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n });\r\n }\r\n\r\n function onNextClick() {\r\n setIssueIndex(issueIndex === issueCount - 1 ? 0 : issueIndex + 1);\r\n }\r\n\r\n async function onGetEAndSQuoteClick() {\r\n try {\r\n setLoading(true);\r\n\r\n const comparisonModel = await createEAndSFromAdmitted(quote.QuoteId),\r\n path = getQuotePath(comparisonModel.Quotes.length, false);\r\n\r\n navigate(path, {\r\n quoteId: comparisonModel.Quotes[0].QuoteId,\r\n product: ProductLine.Homeowner.lowercaseName,\r\n });\r\n } catch (e) {\r\n onError('An error has occurred while generating your E&S quote. Please try again later.');\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n function buildIssueList(): Issue[] {\r\n return [\r\n ...quote.QuotePremiumErrors.map(error => ({\r\n elementName: error.ElementName,\r\n message: error.Message,\r\n isError: true,\r\n })),\r\n ...quote.QuoteWarnings.map(warning => ({\r\n elementName: warning.ElementName,\r\n message: warning.Warning,\r\n isError: false,\r\n })),\r\n ];\r\n }\r\n\r\n function showUrqReset() {\r\n return (\r\n isAdmin() &&\r\n quote.IsUpcomingRenewalQuote &&\r\n !quote.IsAfterUpcomingRenewalLastDayToMakeChanges &&\r\n !quote.UpcomingRenewalHasLatestQuoteDef\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { forwardRef, PropsWithChildren } from 'react';\r\nimport { clsx } from 'clsx';\r\nimport './style.scss';\r\n\r\ninterface TileCellProps {\r\n tileIndex: number;\r\n loading?: boolean;\r\n className?: string;\r\n children;\r\n}\r\n\r\nexport const TileCell = forwardRef<HTMLDivElement, PropsWithChildren<TileCellProps>>(function (\r\n { tileIndex, loading, className, children },\r\n ref,\r\n) {\r\n /** The transform setting uses the tile index to shift the tile position when navigating between tiles. It moves the tile left 100% of it's width\r\n * multiplied by the index of the tile and a bit more to account for the padding between cells which is defined by the --cell-gap CSS variable. */\r\n const transform =\r\n tileIndex === 0 ? undefined : `translateX(calc(-${tileIndex * 100}% - (var(--cell-gap) * ${tileIndex}))`;\r\n\r\n return (\r\n <div ref={ref} className={clsx('tile-cell', loading && 'loading', className)} style={{ transform }}>\r\n {children}\r\n </div>\r\n );\r\n});\r\n","import { ElementRefs } from '@app/ProductComparison/Element/Refs';\r\nimport { IssueBanner } from '@app/ProductComparison/IssueBanner';\r\nimport { Row } from '@app/ProductComparison/Row';\r\nimport { TileCell } from '@app/ProductComparison/TileCell';\r\nimport { ComparisonQuoteModel, QuotePropertyModel } from '@shared/Models';\r\nimport './style.scss';\r\n\r\ntype IssueSectionProps = {\r\n visibleQuotes: ComparisonQuoteModel[];\r\n quoteProperty: QuotePropertyModel | null | undefined;\r\n displayAdverseActionNotice: boolean | undefined;\r\n tileIndex: number;\r\n elementRefs: ElementRefs;\r\n};\r\n\r\nexport function IssueSection({\r\n visibleQuotes,\r\n quoteProperty,\r\n displayAdverseActionNotice,\r\n tileIndex,\r\n elementRefs,\r\n}: IssueSectionProps) {\r\n return (\r\n <Row className='issue-section'>\r\n {visibleQuotes.map(quote => (\r\n <TileCell key={quote.QuoteId} className='issue-banner-wrapper' tileIndex={tileIndex}>\r\n <IssueBanner\r\n quote={quote}\r\n visible={quote.QuotePremiumErrors.length > 0 || quote.QuoteWarnings.length > 0}\r\n elementRefs={elementRefs}\r\n quoteProperty={quoteProperty}\r\n displayAdverseActionNotice={displayAdverseActionNotice}\r\n />\r\n </TileCell>\r\n ))}\r\n </Row>\r\n );\r\n}\r\n","import { useClassName, useConditionalRender, useDocumentClick } from '@shared/Hooks';\r\nimport './style.scss';\r\n\r\ninterface GroupMenuItemType {\r\n label: string;\r\n onClick: () => void;\r\n}\r\n\r\ninterface GroupMenuProps {\r\n triggerLabel: string;\r\n items: GroupMenuItemType[];\r\n className?: string;\r\n}\r\n\r\nexport function GroupMenu({ triggerLabel, items, className }: GroupMenuProps) {\r\n const { visible, setVisible, rendered } = useConditionalRender(),\r\n // The useDocumentClick hook makes the menu close when clicked away, but we don't want that to happen when clicking a menu item, which is why the\r\n // className is applied to the container rather than the trigger\r\n { className: documentClick } = useDocumentClick(() => setVisible(false), true),\r\n containerClassName = useClassName('comparison-group-menu', [className, documentClick.current]),\r\n triggerClassName = useClassName('menu-toggle', [visible ? 'expanded' : '']),\r\n selectorClassName = useClassName('menu-selector', [visible ? 'visible' : '']);\r\n\r\n return (\r\n <div>\r\n <div className='group-menu-buffer' />\r\n <div className={containerClassName}>\r\n <div className={triggerClassName} onClick={() => setVisible(!visible)}>\r\n {triggerLabel}\r\n </div>\r\n\r\n {rendered && (\r\n <ul className={selectorClassName}>\r\n {items.map(item => (\r\n <li\r\n key={item.label}\r\n className='menu-item'\r\n onClick={() => {\r\n item.onClick();\r\n setVisible(false);\r\n }}\r\n >\r\n {item.label}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { getPath, Path } from '@app/Views';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport { navigateOnNewTab } from '@shared/Common';\r\nimport { ComparisonQuoteModel } from '@shared/Models';\r\nimport { hasAuth } from '@shared/Storage';\r\nimport { TrackingEvent } from '@shared/TrackingEvents';\r\nimport { Button, Tooltip } from '@webkit/index';\r\nimport { useMemo } from 'react';\r\n\r\ninterface IGetEAndSQuoteButtonProps {\r\n productLine: ProductLine;\r\n quote: ComparisonQuoteModel;\r\n}\r\n\r\nexport function GetEAndSQuoteButton({ productLine, quote }: IGetEAndSQuoteButtonProps) {\r\n const loggedIn = hasAuth(),\r\n message = useMemo(() => {\r\n return loggedIn ? 'Get an E&S quote for this property.' : 'Please log in to get an E&S quote.';\r\n }, [loggedIn]);\r\n\r\n return (\r\n <Tooltip message={message}>\r\n <Button id='get-es-quote-button' onClick={getEAndSQuote} isDisabled={!loggedIn} isSecondary>\r\n <span className='normal-case tracking-[0.5px] font-normal'>E&S Quote</span>\r\n </Button>\r\n </Tooltip>\r\n );\r\n\r\n function getEAndSQuote() {\r\n const url = getPath(Path.RequestEAndSQuote, {\r\n product: productLine.lowercaseName,\r\n quoteId: quote.QuoteId,\r\n });\r\n TrackingEvent.trackSinglePageApplication(url, 'User clicked get E&S quote button from an admitted quote page');\r\n navigateOnNewTab(url);\r\n }\r\n}\r\n","import { createOrGetQuotesByProduct } from '@api/ComparisonQuoteApi';\r\nimport { StateContext } from '@app/State';\r\nimport { Severity } from '@app/State/Models';\r\nimport { getPath, getQuotePath } from '@app/Views';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport { formatCurrencyUS, getApiError, navigateOnNewTab } from '@shared/Common';\r\nimport { getCreateQuoteRequestWithPropertyConfirmations } from '@shared/Common/ComparisonQuoteHelpers';\r\nimport { useAsyncEffect } from '@shared/Hooks';\r\nimport { ComparisonQuoteModel, ComparisonQuotesModel, Mutable } from '@shared/Models';\r\nimport { hasAuth } from '@shared/Storage';\r\nimport { TrackingEvent } from '@shared/TrackingEvents';\r\nimport { useContext, useMemo, useState } from 'react';\r\n\r\nexport function useGetFloodQuoteButton(hoComparisonModel: ComparisonQuotesModel, hoQuote: ComparisonQuoteModel) {\r\n // Single Page App state context used for setting errors on the SPA\r\n const singlePageAppState = useContext(StateContext);\r\n\r\n // Button state variables\r\n const [loading, setLoading] = useState(true),\r\n [animating, setAnimating] = useState(false),\r\n [floodComparisonModel, setFloodComparisonModel] = useState<ComparisonQuotesModel | null>(null);\r\n\r\n // Memoized values\r\n const authorized = useMemo(() => hasAuth(), []),\r\n quoteCount = useMemo(() => floodComparisonModel?.Quotes.length || 0, [floodComparisonModel?.Quotes.length]),\r\n quoteId = useMemo(() => floodComparisonModel?.Quotes[0].QuoteId, [floodComparisonModel?.Quotes[0].QuoteId]),\r\n // The back end always orders the quotes with the lowest premium first\r\n rawPremium = floodComparisonModel?.Quotes[0].GrossAnnualPayment,\r\n premium = useMemo(() => formatCurrencyUS(rawPremium), [floodComparisonModel?.Quotes[0].GrossAnnualPayment]),\r\n disabled = useMemo(\r\n () => !loading && (!authorized || !quoteCount || !quoteId || rawPremium === 0),\r\n [loading, authorized, quoteCount, quoteId, rawPremium]\r\n ),\r\n message = useMemo(() => getTooltipMessage(), [loading, authorized, floodComparisonModel, rawPremium]);\r\n\r\n // Get or create flood quotes on mount\r\n useAsyncEffect(getOrCreateFloodQuotes, []);\r\n\r\n // Data and functions used by the component\r\n return {\r\n loading,\r\n disabled,\r\n animating,\r\n quoteCount,\r\n premium,\r\n message,\r\n navigateToFloodQuotes,\r\n };\r\n\r\n async function getOrCreateFloodQuotes() {\r\n try {\r\n // Stop if the user is not authorized\r\n if (!authorized) return;\r\n\r\n const quotes = await createOrGetQuotes();\r\n if (!quotes) return;\r\n\r\n setFloodComparisonModel(quotes);\r\n onAnimate();\r\n } catch (error) {\r\n onError(error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n function navigateToFloodQuotes() {\r\n if (disabled || !quoteId) return;\r\n\r\n const quotePath = getQuotePath(quoteCount),\r\n url = getPath(quotePath, {\r\n product: ProductLine.Flood.lowercaseName,\r\n quoteId,\r\n });\r\n\r\n TrackingEvent.trackSinglePageApplication(\r\n quotePath,\r\n `User clicked on get flood quote button from homeowner quote ${hoQuote.QuoteId}`\r\n );\r\n\r\n navigateOnNewTab(url);\r\n }\r\n\r\n async function createOrGetQuotes() {\r\n // We should already have all the proper data from the homeowner quotes\r\n const fromHomeowner = true,\r\n request = getCreateQuoteRequestWithPropertyConfirmations(\r\n hoComparisonModel,\r\n hoQuote,\r\n hoQuote.QuoteId,\r\n // The fromHomeowner flag logs that this flood quote was created from the homeowner quote page and not the flood landing page\r\n fromHomeowner\r\n ),\r\n // Product line should be hard-coded to flood\r\n result = await createOrGetQuotesByProduct(ProductLine.Flood, request);\r\n return result.comparisonModel;\r\n }\r\n\r\n function getTooltipMessage() {\r\n if (loading) return 'Generating flood quotes...';\r\n if (!authorized) return 'Please log in to get a flood quote.';\r\n if (disabled) return 'No flood quotes available.';\r\n if (quoteCount === 1) return `View flood quote for ${premium} per year.`;\r\n return `Compare up to ${quoteCount} flood quotes from ${premium} per year.`;\r\n }\r\n\r\n function onAnimate() {\r\n setAnimating(true);\r\n // 500ms timeout works with tailwind css animate-ping and animate-bounce classes\r\n setTimeout(() => setAnimating(false), 500);\r\n }\r\n\r\n function onError(error: any) {\r\n const apiError = getApiError(error);\r\n singlePageAppState?.update(\r\n state =>\r\n (state.error = {\r\n exception: new Error(apiError.message) as Mutable<Error>,\r\n severity: apiError?.severity === 'ERROR' ? Severity.error : Severity.warning,\r\n })\r\n );\r\n }\r\n}\r\n","import { ComparisonQuoteModel, ComparisonQuotesModel } from '@shared/Models';\r\nimport { Button, StarsIcon, Tooltip } from '@webkit/index';\r\nimport { tv } from 'tailwind-variants';\r\nimport { useGetFloodQuoteButton } from './hook';\r\n\r\ninterface Props {\r\n hoComparisonModel: ComparisonQuotesModel;\r\n hoQuote: ComparisonQuoteModel;\r\n}\r\n\r\nconst premiumStyle = tv({\r\n base: 'text-base text-white font-black',\r\n variants: {\r\n animating: {\r\n true: 'animate-bounce',\r\n false: '',\r\n },\r\n },\r\n});\r\n\r\nconst starsStyle = tv({\r\n base: 'text-white absolute -top-3 right-3',\r\n variants: {\r\n animating: {\r\n true: 'animate-ping',\r\n false: 'opacity-0 pointer-events-none',\r\n },\r\n },\r\n});\r\n\r\nexport function GetFloodQuoteButton(props: Props) {\r\n const { hoComparisonModel, hoQuote } = props,\r\n { loading, disabled, animating, quoteCount, premium, message, navigateToFloodQuotes } = useGetFloodQuoteButton(\r\n hoComparisonModel,\r\n hoQuote\r\n );\r\n\r\n return (\r\n <Tooltip message={message}>\r\n <div className='relative'>\r\n <Button\r\n id='get-flood-quote-button'\r\n onClick={navigateToFloodQuotes}\r\n isLoading={loading}\r\n isDisabled={disabled}\r\n isSecondary\r\n >\r\n {disabled ? (\r\n <span className='text-brand-gray-600 normal-case tracking-[0.5px] font-normal'>\r\n Flood quotes not available\r\n </span>\r\n ) : (\r\n <span className='inline-flex gap-2 items-center normal-case tracking-[0.5px] font-normal'>\r\n <span>Flood quote{quoteCount > 1 ? 's' : ''} from</span>\r\n <strong className={premiumStyle({ animating })}>\r\n {premium}\r\n <span className='text-xs ml-1'>/yr</span>\r\n </strong>\r\n </span>\r\n )}\r\n </Button>\r\n\r\n <StarsIcon className={starsStyle({ animating })} fontSize='large' />\r\n </div>\r\n </Tooltip>\r\n );\r\n}\r\n","import { AppSettingsContext } from '@app/State/Context';\r\nimport { ProductLine, RatingType, StateCode } from '@business/CommonSets';\r\nimport { useContext, useMemo } from 'react';\r\nimport { SidebarActionsProps } from './models';\r\n\r\nexport function useSidebarActions(props: SidebarActionsProps) {\r\n const appSettings = useContext(AppSettingsContext),\r\n { comparisonModel } = props,\r\n productLine = ProductLine.parse(comparisonModel.ProductLineId),\r\n stateCode = StateCode.parse(comparisonModel.QuoteProperty?.StateCode),\r\n floodEnabledInState = useMemo(isFloodEnabledInState, [stateCode, appSettings?.allowedStatesFlood]),\r\n requestEAndSQuoteEnabled = useMemo(() => appSettings?.requestEAndSQuoteEnabled, [appSettings]),\r\n purchasedQuote = useMemo(isPurchasedQuote, [comparisonModel.Quotes]),\r\n admittedQuotes = useMemo(hasAdmittedQuotes, [comparisonModel.Quotes]);\r\n\r\n return {\r\n productLine,\r\n floodEnabledInState,\r\n requestEAndSQuoteEnabled,\r\n purchasedQuote,\r\n admittedQuotes,\r\n };\r\n\r\n function isFloodEnabledInState() {\r\n return stateCode && appSettings?.allowedStatesFlood.includes(stateCode.code);\r\n }\r\n\r\n function isPurchasedQuote() {\r\n return comparisonModel.Quotes.some(q => q.IsPurchased);\r\n }\r\n\r\n function hasAdmittedQuotes() {\r\n return comparisonModel.Quotes.some(q => RatingType.parse(q.RatingType) === RatingType.Admitted);\r\n }\r\n}\r\n","import { GetEAndSQuoteButton } from '@app/ProductComparison/SidebarHeader/SidebarActions/GetEAndSQuoteButton';\r\nimport { GetFloodQuoteButton } from '@app/ProductComparison/SidebarHeader/SidebarActions/GetFloodQuoteButton';\r\nimport { useSidebarActions } from './hook';\r\nimport { SidebarActionsProps } from './models';\r\n\r\nexport function SidebarActions(props: SidebarActionsProps) {\r\n const { comparisonModel } = props,\r\n firstQuote = comparisonModel.Quotes[0],\r\n { productLine, floodEnabledInState, requestEAndSQuoteEnabled, purchasedQuote, admittedQuotes } =\r\n useSidebarActions(props);\r\n\r\n return (\r\n <div id='sidebar-actions' className='grid grid-cols-1 gap-1 mt-3'>\r\n {productLine.switch({\r\n onHomeowner: () => (\r\n <>\r\n {floodEnabledInState && (\r\n <GetFloodQuoteButton hoComparisonModel={comparisonModel} hoQuote={firstQuote} />\r\n )}\r\n\r\n {!purchasedQuote && requestEAndSQuoteEnabled && admittedQuotes && (\r\n <GetEAndSQuoteButton productLine={productLine} quote={firstQuote} />\r\n )}\r\n </>\r\n ),\r\n onCommercial: () => <></>,\r\n onFlood: () => <></>,\r\n })}\r\n </div>\r\n );\r\n}\r\n","import { useClassName } from '@shared/Hooks';\r\nimport * as React from 'react';\r\nimport { FunctionComponent } from 'react';\r\nimport './style.scss';\r\n\r\ninterface Props extends React.PropsWithChildren {\r\n className?: string;\r\n}\r\n\r\nexport const SidebarHeading: FunctionComponent<Props> = props => {\r\n const className = useClassName('sidebar-heading', [props.className]);\r\n return <h1 className={className}>{props.children}</h1>;\r\n};\r\n","import { useClassName } from '@shared/Hooks';\r\nimport { forwardRef, MouseEventHandler, PropsWithChildren } from 'react';\r\nimport './style.scss';\r\n\r\ninterface Props {\r\n href?: string;\r\n target?: string;\r\n rel?: string;\r\n onClick?: MouseEventHandler<HTMLAnchorElement>;\r\n className?: string;\r\n}\r\n\r\nexport const SidebarLink = forwardRef<HTMLAnchorElement | null, PropsWithChildren<Props>>((props, ref) => {\r\n const className = useClassName('sidebar-link', [props.className]);\r\n return (\r\n <a\r\n ref={ref}\r\n className={className}\r\n href={props.href}\r\n target={props.target}\r\n rel={props.rel}\r\n onClick={props.onClick}\r\n >\r\n {props.children}\r\n </a>\r\n );\r\n});\r\n","import { useClassName } from '@shared/Hooks';\r\nimport * as React from 'react';\r\nimport { FunctionComponent } from 'react';\r\nimport './style.scss';\r\n\r\ninterface Props extends React.PropsWithChildren {\r\n subtext?: string;\r\n className?: string;\r\n}\r\n\r\nexport const ProductName: FunctionComponent<Props> = props => {\r\n const className = useClassName('sidebar-product-name', [props.className]);\r\n return (\r\n <h2 className={className}>\r\n {props.children}\r\n {props.subtext && <div className='subtext'>{props.subtext}</div>}\r\n </h2>\r\n );\r\n};\r\n","import { createQuotesByProduct } from '@api/ComparisonQuoteApi';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport { ProgressModal } from '@legacy/Components/Modals/Progress';\r\nimport { navigate } from '@shared/Common';\r\nimport { getCreateQuoteRequestWithPropertyConfirmations } from '@shared/Common/ComparisonQuoteHelpers';\r\nimport { ToastContext } from '@shared/Hooks';\r\nimport { useContext } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { StateContext } from '../State';\r\nimport { AppSettingsContext } from '../State/Context';\r\nimport { getPath, getQuotePath } from '../Views';\r\n\r\ntype UseResetQuotes = {\r\n resetQuotes: () => Promise<void>;\r\n};\r\n\r\nexport function useResetQuotes(): UseResetQuotes {\r\n const { state, update } = useContext(StateContext),\r\n appSettings = useContext(AppSettingsContext),\r\n toast = useContext(ToastContext),\r\n { product } = useParams(),\r\n productLine = ProductLine.parseOrDefault(product);\r\n\r\n return {\r\n resetQuotes,\r\n };\r\n\r\n async function resetQuotes() {\r\n const comparisonModel = state.comparisonModel;\r\n if (!comparisonModel) {\r\n return;\r\n }\r\n\r\n const loadingModal = new ProgressModal('Resetting quotes...');\r\n loadingModal.start();\r\n updatePatching(true);\r\n\r\n const quote = comparisonModel.Quotes[0],\r\n quoteId = quote.QuoteId;\r\n\r\n try {\r\n if (!productLine) {\r\n throw new Error('Unable to reset quotes because product line is invalid.');\r\n }\r\n\r\n const request = getCreateQuoteRequestWithPropertyConfirmations(comparisonModel, quote, quoteId),\r\n response = await createQuotesByProduct(productLine, request);\r\n\r\n if (!response.comparisonModel) {\r\n throw new Error('Unable to reset quotes because the response is invalid.');\r\n }\r\n\r\n const path = getQuotePath(response.comparisonModel.Quotes.length);\r\n\r\n // Use a non-router based navigation to ensure the page is fully reloaded.\r\n navigate(\r\n getPath(path, {\r\n quoteId: response.comparisonModel.Quotes[0].QuoteId,\r\n product: productLine.lowercaseName,\r\n })\r\n );\r\n } catch (e) {\r\n console.error(e);\r\n await toast.error('An error has occurred while resetting the quotes. Please contact tech support.');\r\n } finally {\r\n loadingModal.done();\r\n updatePatching(false);\r\n }\r\n }\r\n\r\n function updatePatching(patching: boolean) {\r\n update(state => {\r\n state.patching = patching;\r\n });\r\n }\r\n}\r\n","import { SidebarLink } from '@app/ProductComparison/SidebarLink';\r\nimport { useResetQuotes } from '@app/ResetQuotes/ResetQuotes';\r\nimport { useResetUrq } from '@app/ResetQuotes/ResetUrq';\r\nimport { PrimaryButton, SecondaryButton } from '@legacy/Components/Form';\r\nimport { PortalPopup } from '@legacy/Components/Popup';\r\nimport { useDocumentClick } from '@shared/Hooks';\r\nimport { createRef, useState } from 'react';\r\nimport './style.scss';\r\n\r\nexport type ResetQuotesProps = {\r\n isSingleQuote: boolean;\r\n isUrq?: boolean;\r\n};\r\n\r\nexport function ResetQuotes({ isSingleQuote, isUrq }: ResetQuotesProps) {\r\n const [confirmVisible, setConfirmVisible] = useState<boolean>(false),\r\n { className } = useDocumentClick(() => setConfirmVisible(false), true),\r\n linkRef = createRef<HTMLAnchorElement>();\r\n\r\n const { resetQuotes } = useResetQuotes(),\r\n { resetUrq } = useResetUrq();\r\n\r\n return (\r\n <div className='reset-quotes'>\r\n <SidebarLink className='sidebar-link' ref={linkRef} onClick={() => setConfirmVisible(true)}>\r\n Reset {isUrq ? 'URQ' : `Quote${isSingleQuote ? '' : 's'}`}\r\n </SidebarLink>\r\n\r\n <PortalPopup\r\n visible={confirmVisible}\r\n className={`reset-quotes-confirmation ${className.current}`}\r\n width={300}\r\n triggerRef={linkRef}\r\n doNotScrollIntoView\r\n >\r\n {isUrq ? (\r\n <div>\r\n <p>\r\n Resetting a URQ creates a new URQ with the latest quote definition rating applied, and will\r\n retain any changes made to the previous URQ EXCEPT changes made to the Claims section. Any\r\n previous claims changes will be lost when you click Reset URQ. Click yes to proceed.\r\n </p>\r\n </div>\r\n ) : (\r\n <div>\r\n <p>\r\n Do you want to reset all the values for {isSingleQuote ? 'this quote' : 'all quotes'} to the\r\n defaults? Click yes to proceed.\r\n </p>\r\n </div>\r\n )}\r\n\r\n <div className='buttons'>\r\n <SecondaryButton label='No' onClick={() => setConfirmVisible(false)} />\r\n\r\n <PrimaryButton id={'reset-confirm-button'} label='Yes' onClick={reset} />\r\n </div>\r\n </PortalPopup>\r\n </div>\r\n );\r\n\r\n async function reset() {\r\n setConfirmVisible(false);\r\n\r\n if (isUrq) {\r\n await resetUrq();\r\n return;\r\n }\r\n\r\n await resetQuotes();\r\n }\r\n}\r\n","import Loader from '@legacy/Components/Loader';\r\nimport { Svg } from '@legacy/Components/Svg';\r\nimport { Tooltip, TooltipPlacement, TooltipSize } from '@legacy/Components/Tooltip';\r\nimport { useClassName } from '@shared/Hooks';\r\nimport { forwardRef, PropsWithChildren } from 'react';\r\nimport './style.scss';\r\n\r\ntype IconLinkProps = {\r\n id: string;\r\n iconPath: string;\r\n iconAlt: string;\r\n className?: string;\r\n toolTip?: string;\r\n toolTipPlacement?: TooltipPlacement;\r\n href?: string;\r\n onClick?: (() => void) | (() => Promise<void>);\r\n hide?: boolean;\r\n disabled?: boolean;\r\n horizontalIcon?: boolean;\r\n loading?: boolean;\r\n};\r\n\r\nexport const IconLink = forwardRef<HTMLButtonElement, PropsWithChildren<IconLinkProps>>((props, ref) => {\r\n const buttonClassName = useClassName('icon-link', [\r\n props.hide ? '' : 'visible',\r\n props.disabled ? 'disabled' : '',\r\n props.toolTip ? '' : 'without-tooltip',\r\n props.horizontalIcon ? 'horizontal-icon' : '',\r\n props.className ? props.className : '',\r\n ]);\r\n\r\n if (props.toolTip)\r\n return (\r\n <Tooltip\r\n wrapperClassName='icon-link-tooltip-wrapper'\r\n message={props.toolTip}\r\n size={TooltipSize.Large}\r\n placement={props.toolTipPlacement || TooltipPlacement.BottomRight}\r\n >\r\n {getButton()}\r\n </Tooltip>\r\n );\r\n else return getButton();\r\n\r\n function getButton() {\r\n return (\r\n <button\r\n id={props.id}\r\n ref={ref}\r\n className={buttonClassName}\r\n onClick={() => {\r\n if (!props.disabled && props.onClick) {\r\n props.onClick();\r\n }\r\n }}\r\n disabled={props.disabled}\r\n type='button'\r\n >\r\n {props.href ? (\r\n <a id={`${props.id}-link`} className={buttonClassName} href={props.href}>\r\n {getButtonLabel()}\r\n </a>\r\n ) : (\r\n getButtonLabel()\r\n )}\r\n </button>\r\n );\r\n }\r\n\r\n function getButtonLabel() {\r\n return (\r\n <>\r\n {props.loading ? (\r\n <Loader />\r\n ) : (\r\n <Svg id={`${props.id}-icon`} className='icon-link-icon' alt={props.iconAlt} path={props.iconPath} />\r\n )}\r\n\r\n <span className='icon-link-label'>{props.children}</span>\r\n </>\r\n );\r\n }\r\n});\r\n","import { GroupMenu } from '@app/ProductComparison/GroupMenu';\r\nimport { SidebarActions } from '@app/ProductComparison/SidebarHeader/SidebarActions';\r\nimport { SidebarHeading } from '@app/ProductComparison/SidebarHeading';\r\nimport { SidebarLink } from '@app/ProductComparison/SidebarLink';\r\nimport { ProductName } from '@app/ProductComparison/SidebarProductName';\r\nimport { ResetQuotes } from '@app/ResetQuotes';\r\nimport { IconLink } from '@legacy/Components/IconLink';\r\nimport { isAdmin, scrollToTop } from '@shared/Common';\r\nimport { ElementGroupNames, iconPaths } from '@shared/Constants';\r\nimport { ComparisonQuoteModel, ComparisonQuotesModel } from '@shared/Models';\r\nimport { hasAuth } from '@shared/Storage';\r\nimport { useMemo } from 'react';\r\nimport './style.scss';\r\n\r\nexport type SidebarHeaderProps = {\r\n comparisonModel: ComparisonQuotesModel | null;\r\n visibleQuotes: ComparisonQuoteModel[];\r\n scrollTo?: (index: number) => void;\r\n hideResetQuotes?: boolean;\r\n isUrq?: boolean;\r\n isReprice?: boolean;\r\n};\r\n\r\nexport function SidebarHeader({\r\n comparisonModel,\r\n visibleQuotes,\r\n scrollTo,\r\n hideResetQuotes,\r\n isUrq,\r\n isReprice,\r\n}: SidebarHeaderProps) {\r\n if (!comparisonModel) {\r\n return <></>;\r\n }\r\n\r\n const fullAddress = comparisonModel?.QuoteProperty?.FullAddress || '',\r\n quoteProperty = comparisonModel?.QuoteProperty,\r\n [addressLine1, addressLine2] = useMemo(\r\n () => [quoteProperty?.Street1, `${quoteProperty?.City}, ${quoteProperty?.StateCode} ${quoteProperty?.Zip}`],\r\n [comparisonModel?.QuoteProperty]\r\n ),\r\n zillowAddress = useMemo(() => formatAddressZillow(), [fullAddress]);\r\n\r\n const isPurchased = useMemo(() => visibleQuotes.some(q => q.IsPurchased), [visibleQuotes]),\r\n headingText = useMemo(() => getHeadingText(), [visibleQuotes]),\r\n canResetQuotes = useMemo(\r\n () => isAdmin() && visibleQuotes.some(q => !(q.IsPurchased && q.IsReadOnly)),\r\n [visibleQuotes]\r\n );\r\n\r\n const elementGroups = comparisonModel?.ElementGroups || [],\r\n elementGroupsWithoutFeatures = elementGroups.filter(eg => eg.ElementGroupName !== ElementGroupNames.Features);\r\n\r\n return (\r\n <div id='sidebar-header'>\r\n {isUrq && (\r\n <IconLink\r\n id={'urq-back-link'}\r\n className={'urq-back-link'}\r\n iconPath={iconPaths.arrowLeft}\r\n iconAlt={'go back to rater quote'}\r\n onClick={onClickBack}\r\n toolTip={'Navigate back to the previous page.'}\r\n >\r\n Back\r\n </IconLink>\r\n )}\r\n\r\n <SidebarHeading>{headingText}</SidebarHeading>\r\n\r\n <ProductName>\r\n <div id='address-line-1'>{addressLine1}</div>\r\n\r\n <div id='address-line-2'>{addressLine2}</div>\r\n </ProductName>\r\n\r\n <div>\r\n <SidebarLink\r\n href={`https://www.google.com/maps/place/${encodeURIComponent(fullAddress)}`}\r\n target='_blank'\r\n rel='noopener noreferrer'\r\n >\r\n Google\r\n </SidebarLink>\r\n\r\n <SidebarLink\r\n href={`https://www.zillow.com/homes/1_ah/${zillowAddress}_rb/`}\r\n target='_blank'\r\n rel='noopener noreferrer'\r\n >\r\n Zillow\r\n </SidebarLink>\r\n\r\n {!hideResetQuotes && canResetQuotes && (\r\n <ResetQuotes isSingleQuote={visibleQuotes.length === 1} isUrq={isUrq} />\r\n )}\r\n </div>\r\n\r\n {hasAuth() && !isUrq && !isReprice && comparisonModel.QuoteProperty && (\r\n <SidebarActions comparisonModel={comparisonModel} />\r\n )}\r\n\r\n {scrollTo && (\r\n <GroupMenu\r\n triggerLabel='Jump to'\r\n items={[\r\n { label: 'Top', onClick: scrollToTop },\r\n ...(visibleQuotes.length === 1 ? elementGroupsWithoutFeatures : elementGroups)\r\n .filter(elementGroup =>\r\n elementGroup.ComparisonElements.some(elements =>\r\n elements.Elements.some(element =>\r\n visibleQuotes.some(q => q.QuoteId === element.QuoteId)\r\n )\r\n )\r\n )\r\n .map((elementGroup, index) => ({\r\n label: elementGroup.ElementGroupName,\r\n onClick: () => scrollTo && scrollTo(index),\r\n })),\r\n ]}\r\n />\r\n )}\r\n </div>\r\n );\r\n\r\n function formatAddressZillow() {\r\n const spaceRegEx = new RegExp(' ', 'g');\r\n const highwayRegEx = new RegExp('highway', 'i');\r\n return fullAddress.replace(spaceRegEx, '-').replace(highwayRegEx, 'Hwy');\r\n }\r\n\r\n function getHeadingText() {\r\n if (isUrq) {\r\n return 'Upcoming Renewal Quote for:';\r\n }\r\n\r\n return visibleQuotes.length === 1\r\n ? `${isPurchased ? 'Purchased ' : ''}Quote for:`\r\n : `Compare ${visibleQuotes.length} Quotes for:`;\r\n }\r\n\r\n function onClickBack() {\r\n // The IMS Rater is not within the SinglePageApplication router, so we need to use the window's back function instead\r\n window.history.back();\r\n }\r\n}\r\n","import { Svg } from '@legacy/Components/Svg';\r\nimport { Tooltip, TooltipSize } from '@legacy/Components/Tooltip';\r\nimport { stripExtraQuoteElementLabelParts } from '@shared/Common';\r\nimport { iconPaths, QuoteElementAdminLabelPart } from '@shared/Constants';\r\nimport { ComparisonElementsModel } from '@shared/Models';\r\nimport './style.scss';\r\n\r\ninterface SidebarLabelProps {\r\n comparisonElement: ComparisonElementsModel;\r\n totalTiles: number;\r\n}\r\n\r\nexport function SidebarLabel({ comparisonElement, totalTiles }: SidebarLabelProps) {\r\n return (\r\n <div className='element-label'>\r\n {stripExtraQuoteElementLabelParts(comparisonElement.ElementDisplay)}\r\n {getIcon(comparisonElement)}\r\n </div>\r\n );\r\n\r\n function getIcon(elements: ComparisonElementsModel): JSX.Element | undefined {\r\n if (elements.ElementDisplay.includes(QuoteElementAdminLabelPart))\r\n return (\r\n <Tooltip\r\n message='Admin Only'\r\n size={TooltipSize.Fill}\r\n childrenClassName={'remove-tooltip-style-cp'}\r\n wrapperClassName={'remove-tooltip-style-cp'}\r\n >\r\n <div className='label-admin-icon'>A</div>\r\n </Tooltip>\r\n );\r\n\r\n if (totalTiles > 1 && elements.Elements.every(element => element?.IsCommonElement))\r\n return (\r\n <Tooltip\r\n message='Common Element'\r\n size={TooltipSize.Fill}\r\n childrenClassName={'remove-tooltip-style-cp'}\r\n wrapperClassName={'remove-tooltip-style-cp'}\r\n >\r\n <Svg className='label-linked-element-icon' path={iconPaths.link} alt='Common Element' />\r\n </Tooltip>\r\n );\r\n\r\n return undefined;\r\n }\r\n}\r\n","import { RatingType, RelationToAdmitted } from '@business/CommonSets';\r\nimport { useAsyncEffect } from '@shared/Hooks';\r\nimport { getLocalData, saveLocalData } from '@shared/Storage';\r\nimport { TrackingEvent } from '@shared/TrackingEvents';\r\nimport { useState } from 'react';\r\nimport { EAndSAlertProps } from './models';\r\n\r\nconst localStorageKey = 'ratingBadgeTooltipDismissed',\r\n autoTimeoutSeconds = 10;\r\n\r\nexport function useEAndSAlert(props: EAndSAlertProps) {\r\n const { comparisonModel } = props,\r\n [visible, setVisible] = useState(false);\r\n\r\n useAsyncEffect(showAlertOnLoad, []);\r\n\r\n return {\r\n visible,\r\n setVisible,\r\n dismiss,\r\n };\r\n\r\n async function showAlertOnLoad() {\r\n if (isDismissed() || hasNonEAndSQuotes() || didAgentRequestEAndS()) return;\r\n setVisible(true);\r\n setTimeout(() => setVisible(false), autoTimeoutSeconds * 1000);\r\n }\r\n\r\n function dismiss() {\r\n saveLocalData(localStorageKey, 'true');\r\n setVisible(false);\r\n TrackingEvent.trackSinglePageApplication(window.location.pathname, 'User dismissed rating type alert');\r\n }\r\n\r\n function isDismissed() {\r\n return JSON.parse(getLocalData(localStorageKey) || 'false');\r\n }\r\n\r\n function hasNonEAndSQuotes() {\r\n return comparisonModel.Quotes.some(q =>\r\n RatingType.all()\r\n .filter(rt => rt !== RatingType.EAndS)\r\n .includes(RatingType.parse(q.RatingType))\r\n );\r\n }\r\n\r\n function didAgentRequestEAndS() {\r\n return comparisonModel.Quotes.some(\r\n q => RelationToAdmitted.parseOrDefault(q.RelationToAdmitted) === RelationToAdmitted.Request\r\n );\r\n }\r\n}\r\n","import { RatingType } from '@business/CommonSets';\r\nimport { AnnounceIcon, Button, Link, Paragraph } from '@webkit/index';\r\nimport { tv } from 'tailwind-variants';\r\nimport { useEAndSAlert } from './hook';\r\nimport { EAndSAlertProps } from './models';\r\n\r\nconst alertStyle = tv({\r\n base:\r\n 'grid grid-cols-1 gap-4 min-w-[300px] max-w-[440px] m-5 ' +\r\n 'bg-white border-solid border-0 border-t-4 border-brand-green-250 shadow-lg ' +\r\n 'transform transition-opacity duration-300 ' +\r\n 'fixed bottom-0 left-0 px-6 py-4 z-[20] ',\r\n variants: {\r\n visible: {\r\n true: 'opacity-100 pointer-events-auto',\r\n false: 'opacity-0 pointer-events-none',\r\n },\r\n },\r\n});\r\n\r\nexport function EAndSAlert(props: EAndSAlertProps) {\r\n const { visible, setVisible, dismiss } = useEAndSAlert(props);\r\n\r\n return (\r\n <div id='e-and-s-alert' className={alertStyle({ visible })}>\r\n <div className='inline-flex items-center gap-2'>\r\n <AnnounceIcon fontSize='large' className='text-brand-green-300' />\r\n <h5 className='text-lg text-black font-black m-0'>{RatingType.EAndS.displayValue} Market</h5>\r\n </div>\r\n\r\n <Paragraph>\r\n <span className='text-black'>\r\n <>\r\n An Admitted market is not available for this risk, however it does qualify for the following\r\n Excess & Surplus Lines quote(s).\r\n </>\r\n </span>\r\n </Paragraph>\r\n\r\n <div className='mx-auto'>\r\n <Button onClick={() => setVisible(false)}>Okay</Button>\r\n </div>\r\n\r\n <div className='mx-auto'>\r\n <Link href=''>\r\n <span onClick={dismiss}>Don't show this</span>\r\n </Link>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { ComparisonTable } from '@app/ProductComparison/ComparisonTable';\r\nimport { Element } from '@app/ProductComparison/Element';\r\nimport { ElementRefs } from '@app/ProductComparison/Element/Refs';\r\nimport { GroupHeaderRow } from '@app/ProductComparison/GroupHeaderRow';\r\nimport { PatchQuoteHookContext, usePatchQuote } from '@app/ProductComparison/Hooks/UsePatchQuote';\r\nimport { useTileNavigator } from '@app/ProductComparison/Hooks/UseTileNavigator';\r\nimport { IssueSection } from '@app/ProductComparison/IssueSection';\r\nimport { Row } from '@app/ProductComparison/Row';\r\nimport { SidebarHeader } from '@app/ProductComparison/SidebarHeader';\r\nimport { SidebarLabel } from '@app/ProductComparison/SidebarLabel';\r\nimport { TileCell } from '@app/ProductComparison/TileCell';\r\nimport { ProductLine, RatingType } from '@business/CommonSets';\r\nimport { EAndSAlert } from '@business/Components/Alerts/EAndSAlert';\r\nimport { ElementDisplayNames, ElementGroupNames } from '@shared/Constants';\r\nimport { ToastContext, useScrollTo, useToast } from '@shared/Hooks';\r\nimport {\r\n ComparisonElementDescriptionModel,\r\n ComparisonElementsModel,\r\n ComparisonQuoteModel,\r\n ComparisonQuotesModel,\r\n} from '@shared/Models';\r\nimport Portal from '@webkit/components/portal';\r\nimport * as React from 'react';\r\nimport { useMemo, useRef } from 'react';\r\nimport { getRatingTypeColor } from '../ColorScheme';\r\nimport './style.scss';\r\n\r\nexport type ProductComparisonQuoteProps = {\r\n comparisonModel: ComparisonQuotesModel | null;\r\n visibleQuoteIds: string[];\r\n elementDescriptions: ComparisonElementDescriptionModel[] | null;\r\n updateComparisonModel: (comparisonModel: ComparisonQuotesModel) => void;\r\n tileHeader: (quote: ComparisonQuoteModel, tileIndex: number) => JSX.Element;\r\n disableRatingTypeAlert: boolean;\r\n hideResetQuotes?: boolean;\r\n overViewSection?: (tileIndex: number) => JSX.Element;\r\n isReprice?: boolean;\r\n isSingleQuote?: boolean;\r\n isUrq?: boolean;\r\n updatePatching?: (patching: boolean) => void;\r\n disableElements?: boolean;\r\n productLine: ProductLine;\r\n};\r\n\r\nexport function ProductComparisonQuote({\r\n comparisonModel,\r\n visibleQuoteIds,\r\n elementDescriptions,\r\n updateComparisonModel,\r\n tileHeader,\r\n disableRatingTypeAlert,\r\n hideResetQuotes,\r\n overViewSection,\r\n isReprice,\r\n isSingleQuote,\r\n isUrq,\r\n updatePatching,\r\n disableElements,\r\n productLine,\r\n}: ProductComparisonQuoteProps) {\r\n /** The visible quotes are controlled byt the visibleQuoteIds state, which will change when viewing a single quote from a comparison quote view, or, in\r\n * the future, when hiding individual quotes when we have more than two carriers. */\r\n const visibleQuotes = (comparisonModel?.Quotes || []).filter(quote => visibleQuoteIds.includes(quote.QuoteId)),\r\n elementRefs = useRef(new ElementRefs());\r\n\r\n const totalTiles = visibleQuotes.length,\r\n { tileIndex, setTileIndex, tileCount } = useTileNavigator(totalTiles);\r\n\r\n const elementGroups = useMemo(\r\n () =>\r\n isSingleQuote || visibleQuotes.length === 1\r\n ? // We only want to show the Features elements when comparing quotes\r\n comparisonModel?.ElementGroups.filter(\r\n elementGroup =>\r\n elementGroup.ElementGroupName !== ElementGroupNames.Features &&\r\n elementGroup.ComparisonElements.length > 0 &&\r\n // Also filter out any groups that are not for the visible quote when a single quote is being viewed\r\n elementGroup.ComparisonElements.some(ce =>\r\n ce.Elements.some(e => e.QuoteId === visibleQuoteIds[0])\r\n )\r\n ) || []\r\n : comparisonModel?.ElementGroups || [],\r\n [comparisonModel, isSingleQuote, visibleQuotes.length]\r\n ),\r\n { getRef, scrollTo } = useScrollTo(elementGroups);\r\n\r\n const toast = useToast(),\r\n patchQuote = usePatchQuote(updateComparisonModel, productLine, isReprice, updatePatching),\r\n { patch, patchFromRequest, patchClaims, patchLoading } = patchQuote;\r\n\r\n // This object will hold any minimum probable effective date offsets, if present. We collect these values here so we can pass them to the Element component\r\n // when the Probable Effective Date element needs to be rendered. This will work for a single quote or multiple quotes.\r\n const minProbableEffectiveDateOffsets: Record<string, number | undefined> = {};\r\n\r\n // The assumption here is that the minimum probable effective date offset element will always be in the Property Coverages group. This way we avoid having\r\n // to search through a bunch of element groups and then search them for the element we want.\r\n const elementGroup = elementGroups.find(group => group.ElementGroupName === 'Property Coverages');\r\n\r\n if (elementGroup) {\r\n const minProbableEffectiveDateOffsetElement = elementGroup.ComparisonElements.find(\r\n item => item.ElementDisplay === ElementDisplayNames.MinimumProbableEffectiveDateOffset\r\n );\r\n\r\n if (minProbableEffectiveDateOffsetElement) {\r\n minProbableEffectiveDateOffsetElement.Elements.forEach(element => {\r\n minProbableEffectiveDateOffsets[element.QuoteId] = Number(element.Value);\r\n });\r\n }\r\n }\r\n\r\n return (\r\n <ToastContext.Provider value={toast}>\r\n <PatchQuoteHookContext.Provider value={patchQuote}>\r\n <ComparisonTable\r\n tileIndex={tileIndex}\r\n tileCount={tileCount}\r\n totalTiles={totalTiles}\r\n visibleQuoteIds={visibleQuoteIds}\r\n setTileIndex={setTileIndex}\r\n sidebarHeader={getSidebarHeader}\r\n tileHeaders={getTileHeaders()}\r\n issueSection={getIssueSection}\r\n >\r\n {overViewSection && overViewSection(tileIndex)}\r\n\r\n {getElementGroups()}\r\n </ComparisonTable>\r\n\r\n {!disableRatingTypeAlert && comparisonModel && (\r\n <Portal>\r\n <EAndSAlert comparisonModel={comparisonModel} />\r\n </Portal>\r\n )}\r\n </PatchQuoteHookContext.Provider>\r\n </ToastContext.Provider>\r\n );\r\n\r\n function getSidebarHeader() {\r\n return (\r\n <SidebarHeader\r\n comparisonModel={comparisonModel}\r\n visibleQuotes={visibleQuotes}\r\n scrollTo={scrollTo}\r\n hideResetQuotes={hideResetQuotes}\r\n isUrq={isUrq}\r\n isReprice={isReprice}\r\n />\r\n );\r\n }\r\n\r\n function getTileHeaders() {\r\n return visibleQuotes.map(quote => (\r\n <TileCell key={quote.QuoteId} tileIndex={tileIndex}>\r\n {tileHeader(quote, tileIndex)}\r\n </TileCell>\r\n ));\r\n }\r\n\r\n function getIssueSection() {\r\n return (\r\n <IssueSection\r\n quoteProperty={comparisonModel?.QuoteProperty}\r\n displayAdverseActionNotice={comparisonModel?.DisplayAdverseActionNotice}\r\n tileIndex={tileIndex}\r\n elementRefs={elementRefs.current}\r\n visibleQuotes={visibleQuotes}\r\n />\r\n );\r\n }\r\n\r\n function getElementGroups() {\r\n return elementGroups.map((elementGroup, index) => {\r\n const elements = getElements(elementGroup.ComparisonElements, elementGroup.ElementGroupName),\r\n groupHeaderRef = getRef(index);\r\n return (\r\n !!elements.length && (\r\n <React.Fragment key={elementGroup.ElementGroupName}>\r\n <GroupHeaderRow\r\n ref={groupHeaderRef}\r\n id={elementGroup.ElementGroupName.replace(/ /g, '-').toLowerCase()}\r\n >\r\n {visibleQuotes.map(quote => {\r\n const { QuoteId } = quote,\r\n ratingType = RatingType.parse(quote.RatingType);\r\n return (\r\n <TileCell\r\n key={elementGroup.ElementGroupName + QuoteId}\r\n tileIndex={tileIndex}\r\n className={getRatingTypeColor(ratingType)}\r\n >\r\n {elementGroup.ElementGroupName}\r\n </TileCell>\r\n );\r\n })}\r\n </GroupHeaderRow>\r\n\r\n {elements}\r\n </React.Fragment>\r\n )\r\n );\r\n });\r\n }\r\n\r\n function getElements(comparisonElements: ComparisonElementsModel[], elementGroupName: string) {\r\n const childElementNames = [\r\n ...new Set(\r\n comparisonModel?.Quotes.flatMap(quote => quote.Elements)\r\n .filter(element => element.ParentElementName)\r\n .map(element => element.ElementName)\r\n ),\r\n ];\r\n\r\n return (\r\n comparisonElements\r\n // We don't want to render any elements that only apply to a hidden quote (i.e. not included in visibleQuoteIds), otherwise we will have a row\r\n // in the comparison table which just shows a \"-\" in the tile cell for that element.\r\n .filter(comparisonElement =>\r\n comparisonElement.Elements.some(element => visibleQuoteIds.includes(element.QuoteId))\r\n )\r\n\r\n // Don't render any elements that have a parent element, as these are part of a collection element and will be rendered in its template.\r\n .filter(comparisonElement =>\r\n comparisonElement.Elements.some(element => !childElementNames.includes(element.ElementName))\r\n )\r\n\r\n .map(comparisonElement => (\r\n <Row\r\n key={comparisonElement.ElementDisplay}\r\n sidebar={<SidebarLabel comparisonElement={comparisonElement} totalTiles={totalTiles} />}\r\n >\r\n {visibleQuotes.map(quote => {\r\n const elementId = comparisonElement.ElementDisplay + quote.QuoteId;\r\n const element = comparisonElement.Elements.find(\r\n element => element.QuoteId === quote.QuoteId\r\n );\r\n const elementName = element?.ElementName || '';\r\n\r\n // See the comment above related to managing render load with Element components. The Element visibility is handled here instead of\r\n // within the Element component because we don't to delay the render on, for example, the Confirmation view, which also uses the Element\r\n // component, because we render so many fewer elements there.\r\n return (\r\n <TileCell key={elementId} tileIndex={tileIndex}>\r\n <Element\r\n comparisonModel={comparisonModel}\r\n isReprice={isReprice}\r\n singleTile={isSingleQuote || visibleQuoteIds.length === 1}\r\n quote={quote}\r\n descriptions={elementDescriptions}\r\n elementGroupName={elementGroupName}\r\n comparisonElements={comparisonElement}\r\n patch={patch}\r\n patchFromRequest={patchFromRequest}\r\n patchClaims={patchClaims}\r\n loading={elementGroupName !== ElementGroupNames.Features && patchLoading}\r\n disabled={disableElements}\r\n elementRef={elementRefs.current.get(quote.QuoteId + elementName)}\r\n minProbableEffectiveDateOffset={minProbableEffectiveDateOffsets[quote.QuoteId]}\r\n />\r\n </TileCell>\r\n );\r\n })}\r\n </Row>\r\n ))\r\n );\r\n }\r\n}\r\n"],"names":["_RelationToAdmitted","name","__publicField","onDecline","onNonRenewal","onRequest","RelationToAdmitted","all","parseOrDefault","value","relationToAdmitted","parse","result","_interopRequireDefault","require$$0","AutoAwesomeOutlined","_createSvgIcon","_jsxRuntime","require$$2","CampaignOutlined","EditOffOutlined","ExpandMoreOutlined","OpenInNewOutlined","TuneOutlined","Severity","InitialState","n","r","t","e","Q","Z","L","s","v","i","o","nn","u","a","f","c","X","q","p","l","rn","d","y","h","b","tn","_","U","j","g","S","O","w","P","M","x","H","A","z","I","k","E","N","en","on","R","D","G","W","B","un","an","fn","StateContext","createContext","AppSettingsContext","useScrollTo","items","block","refs","useMemo","item","createRef","getRef","scrollTo","refIndex","index","ref","Viewport","useViewport","callback","viewport","useEffect","width","getViewportFromWidth","useResize","localViewport","BlockQuote","React.Component","children","jsx","Colors","Paragraph","FontSizes","useRouterErrorElement","exception","appSettings","useContext","errorMessage","setErrorMessage","useState","stackTrace","setStackTrace","supportPhone","toPhoneNumber","applicationError","admin","isAdmin","useAsyncEffect","onErrorReceived","getErrorMessage","st","stackTraceWithSourceMaps","logError","ApiError","actionError","getMessageFromError","ErrorInternal","props","clsx","jsxs","ErrorIcon","Title","Link","pages","RouteError","error","ErrorElement","useRouteError","ActionType","ActionType2","useImsRaterQuoteState","state","dispatch","React.useReducer","reducer","updater","action","type","produce","draft","ImsRaterQuoteStateContext","React.createContext","ComparisonQuoteModelContext","ColorScheme","getRatingTypeColor","ratingType","useViewWrapper","id","isLoading","includeTopBuffer","className","application","imsState","_a","_b","setTitleAndColorScheme","ViewWrapper","Spinner","build","React","countup_js","require$$1","_iterableToArrayLimit","ownKeys","_objectSpread2","_defineProperty","_toPrimitive","_toPropertyKey","obj","key","_extends","target","source","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","_slicedToArray","arr","_arrayWithHoles","_unsupportedIterableToArray","_nonIterableRest","minLen","_arrayLikeToArray","len","arr2","useIsomorphicLayoutEffect","useEventCallback","_len","args","_key","createCountUpInstance","el","decimal","decimals","duration","easingFn","end","formattingFn","numerals","prefix","separator","start","suffix","useEasing","useGrouping","useIndianSeparators","enableScrollSpy","scrollSpyDelay","scrollSpyOnce","plugin","_excluded$1","DEFAULTS","useCountUp","filteredProps","_ref","_ref2","_useMemo","startOnMount","enableReinitialize","delay","onEnd","onStart","onPauseResume","onReset","onUpdate","instanceProps","countUpRef","timerRef","isInitializedRef","createInstance","getCountUp","recreate","countUp","newCountUp","run","pauseResume","reset","restart","update","newEnd","maybeInitialize","shouldReset","_excluded","CountUp","redraw","containerProps","style","useCountUpProps","containerRef","_useCountUp","updateCountUp","initializeOnMount","redrawDependencies","Price","priceRef","useRef","Logo","src","alt","logoClassName","useClassName","NavigationArrow","SidebarCell","Row","forwardRef","sidebar","header","ComparisonTable","sidebarHeader","tileHeaders","totalTiles","visibleQuoteIds","tileCount","tileIndex","setTileIndex","issueSection","bufferWidth","setBufferWidth","tableClassName","getClassName","tableRef","stickyHeaderRef","handleBufferWidth","setContainerClassName","Fragment","Mobile","TabletAndDesktop","transitionContainer","TemplateIcon","Tooltip","ChangeInsuredName","rendered","visible","setVisible","useConditionalRender","triggerClassName","popupClassName","useDocumentClick","quote","disabled","triggerRef","ExpandMoreIcon","PortalPopup","InsuredNameForm","patchRaw","form","set","valid","revert","useFormReducer","Value","Rules.required","Rules.maxLength","Text","SecondaryButton","onCancel","PrimaryButton","isDisabled","onSave","ElementNames","nameMatches","m","Date","dateValue","dayjs","date","setDate","minValue","getDateFromMinValue","maxValue","getDateFromMaxValue","str","dateFormat","DatePicker","isOpen","Dropdown","options","getOptions","onDocumentClick","useKeyboardEvent","onEscapeKeyDown","onTriggerClick","getOptionDisplayText","option","isOptionSelected","onOptionClick","Svg","iconPaths","isKeyName","KeyName","elementType","choices","ElementTemplateTypes","DropdownItem","choice","selected","values","FeatureElement","quoteId","content","isBoolean","isBooleanString","booleanValue","toBoolean","hasValue","CheckCircleIcon","AutoComplete","loading","setLoading","setOptions","activeOptionId","setActiveOptionId","optionsWithRefs","textRef","onKeyDown","onChange","Popup","onSelect","debounce","fetchOptions","scrollOptionIntoView","Context","InsuredPreviousAddress","toast","ToastContext","quoteAddress","_c","addressKey","setAddressKey","addressLabel","setAddressLabel","formReducer","setError","isActive","useActive","contextValues","buildOption","fetchInitialAddress","Form","toAddress","property","getProperty","address","searchHomeownerAddresses","hasError","propertyData","onCatchError","normalized","normalizeError","subCode","ErrorCodes","AddressNotFoundMessage","Path","context","usePatchQuote","productLine","isReprice","updatePatching","singlePageAppState","imsRaterQuoteState","quoteOrder","patch","patchClaims","patchPremiumAdjustment","patchFromRequest","requests","requiredConfirmationElementNames","claims","manualPremiumAdjustment","wrapPatchRequest","repriceRequest","repriceQuote","patchQuote","comparisonModel","mapToComparisonQuotes","request","patchComparisonQuoteByProduct","apiCall","PatchQuoteHookContext","ManualPremiumAdjustment","React.useContext","valueToFormat","parsedValue","utc","PriorClaims","hide","ClaimsList","setClaims","editIndex","setEditIndex","validate","Rules.currency","Rules.min","claimsWithLocalTime","claim","DesignContext","renderClaims","Select","SelectItem","onAddClaim","onCancelEditClaim","onUpdateClaim","haveClaimsChanged","onEditClaim","onRemoveClaim","simpleDateFormat","localClaims","claimsWithUtcTime","debounceTimeout","Range","rangeNumber","setRangeNumber","parseValue","inputRef","closePopup","increment","deriveIncrement","sliderMin","getClosestNumberDivisibleBy","sliderMax","parsed","onClickInput","onTextInputChange","onTextInputKeyUp","onTextInputBlur","SliderIcon","formatRangeMinMaxLabel","onRangeInputChange","onRangeInputMouseUp","getBackgroundSize","onRangeInputKeyUp","range","goal","prev","curr","unFormattedValue","numeral","getPercentageInRange","formatCurrencyUS","ReadOnlyText","singleTile","elementValue","displayValue","getDisplayValue","EditDisabledIcon","useSelectElementTemplate","setSelected","isBooleanElement","booleanChoices","onToggle","isSelected","onFocus","onBlur","handleEnterKeyDown","validationMessageMs","useElement","ElementDisplay","Elements","element","formatted","formatElementValue","initialValue","setState","focus","setFocus","originalValue","descriptions","description","trackingStep","getQuotePath","useToast","isNumberElement","formattedValue","validateAndFormatValue","patchValue","formatAsDecimalOrDefault","TrackingEvent","snappedBound","snapToBound","snappedIncrement","snapToIncrement","handleBound","bound","boundValue","formattedBound","snapped","ElementDisplayFormatTypes","addNumeralFormatting","findValueFromChoices","windDisplayFormat","addPercentageInputFormatting","TileEntryIssue","trigger","warning","position","usePosition","Portal","TileEntry","errorVisible","setErrorVisible","onMouseEnter","onMouseLeave","Skeleton","toggleEditClassName","ToolTip","baseClassName","TrimToolTip","required","setRequired","rect","Modal","NoData","useCollectionElementTemplate","childElements","getChildElements","isModalOpen","setModalOpen","elementRows","setElementRows","buildElementRows","resetRows","toggleModal","addRow","deleteRow","save","row","elementName","model","buildRow","collectionItems","acc","buildDateElementValue","buildElementValue","rules","Rules.max","Rules.integer","propertyName","propertyValue","Rules.after","Rules.before","combinedElementName","Template","rowIndex","placeholder","selection","text","Collection","tableHeaders","addEmptyRow","OpenInNewIcon","ModalRow","column","DeleteIcon","Button","Element","toolTipRef","toolTipHeight","useMediaQuery","appState","raterQuoteState","toolTipRendered","toolTipVisible","setToolTipVisible","RatingType","elementProps","getDisabledState","hiddenForFeatureElement","ElementGroupNames","stripExtraQuoteElementLabelParts","getTemplate","onToolTipIconClick","getElementDescription","now","minDate","maxDate","getMaxEffectiveDate","CommercialElementNames","StateCode","getLocalDate","ElementRefs","GroupHeaderRow","useTileNavigator","setTileCount","setTileCountFromViewport","GetUrqButton","ImsPolicyNumber","UpcomingRenewalQuoteId","HasRenewalPolicy","QuoteId","stateReducer","navigateToRoute","useNavigateWithParams","params","useParams","hasUrq","trackSinglePageApplication","getUrqButtonTooltip","onClick","getUrqButtonLabel","trackUrqClick","goToUrq","newUrqQuoteId","createUrqOrDefault","urqQuoteId","url","getPath","navigate","useResetUrq","resetUrq","product","ProductLine","resetUpcomingRenewalQuote","normalizedError","defaultMessage","message","patching","AdverseActionNoticePdf","quoteDetails","reasons","ncfReferenceNumber","fontSize","twoLineAddress","Page","Column","Heading3","Constants.simpleDateFormat","Common.returnFullName","reason","AdverseActionNoticeLink","label","ncfId","firstName","middleName","lastName","downloadPdf","adverseActionNotice","getAdverseActionNotice","useReactToPdf","returnFullName","handleGeneralError","IssueBanner","displayAdverseActionNotice","quoteProperty","elementRefs","onError","resetUrqLoading","issueIndex","setIssueIndex","issues","buildIssueList","issueCount","issue","fixable","onNextClick","PrimaryGreenButton","onGetEAndSQuoteClick","showUrqReset","onIssueClick","createEAndSFromAdmitted","path","TileCell","transform","IssueSection","visibleQuotes","GroupMenu","triggerLabel","documentClick","containerClassName","selectorClassName","GetEAndSQuoteButton","loggedIn","hasAuth","getEAndSQuote","navigateOnNewTab","useGetFloodQuoteButton","hoComparisonModel","hoQuote","animating","setAnimating","floodComparisonModel","setFloodComparisonModel","authorized","quoteCount","rawPremium","premium","getTooltipMessage","getOrCreateFloodQuotes","navigateToFloodQuotes","quotes","createOrGetQuotes","onAnimate","quotePath","getCreateQuoteRequestWithPropertyConfirmations","createOrGetQuotesByProduct","apiError","getApiError","premiumStyle","tv","starsStyle","GetFloodQuoteButton","StarsIcon","useSidebarActions","stateCode","floodEnabledInState","isFloodEnabledInState","requestEAndSQuoteEnabled","purchasedQuote","isPurchasedQuote","admittedQuotes","hasAdmittedQuotes","SidebarActions","firstQuote","SidebarHeading","SidebarLink","ProductName","useResetQuotes","resetQuotes","loadingModal","ProgressModal","response","createQuotesByProduct","ResetQuotes","isSingleQuote","isUrq","confirmVisible","setConfirmVisible","linkRef","IconLink","buttonClassName","TooltipSize","TooltipPlacement","getButton","getButtonLabel","Loader","SidebarHeader","hideResetQuotes","fullAddress","addressLine1","addressLine2","zillowAddress","formatAddressZillow","isPurchased","headingText","getHeadingText","canResetQuotes","elementGroups","elementGroupsWithoutFeatures","eg","onClickBack","scrollToTop","elementGroup","elements","spaceRegEx","highwayRegEx","SidebarLabel","comparisonElement","getIcon","QuoteElementAdminLabelPart","localStorageKey","autoTimeoutSeconds","useEAndSAlert","showAlertOnLoad","dismiss","isDismissed","hasNonEAndSQuotes","didAgentRequestEAndS","saveLocalData","getLocalData","rt","alertStyle","EAndSAlert","AnnounceIcon","ProductComparisonQuote","elementDescriptions","updateComparisonModel","tileHeader","disableRatingTypeAlert","overViewSection","disableElements","ce","patchLoading","minProbableEffectiveDateOffsets","group","minProbableEffectiveDateOffsetElement","ElementDisplayNames","getSidebarHeader","getTileHeaders","getIssueSection","getElementGroups","getElements","groupHeaderRef","React.Fragment","comparisonElements","elementGroupName","childElementNames","elementId"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,8,20,21]}