{"version":3,"file":"js/singlePageApplication.bundle.js","mappings":"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","sources":["webpack://swyfft-web/webpack/runtime/chunk loaded","webpack://swyfft-web/webpack/runtime/create fake namespace object","webpack://swyfft-web/./Api/MinimumEarnedPremiumApi/index.ts","webpack://swyfft-web/./Hooks/AuthorizeRedirect/index.ts","webpack://swyfft-web/./ProductComparison/QuoteHistoryModal/event.tsx","webpack://swyfft-web/./ProductComparison/QuoteHistoryModal/index.tsx","webpack://swyfft-web/./SinglePageApplication/Api/ComparisonQuotes.ts","webpack://swyfft-web/./SinglePageApplication/Api/Property.ts","webpack://swyfft-web/./SinglePageApplication/App/Route/index.tsx","webpack://swyfft-web/./SinglePageApplication/App/auth.tsx","webpack://swyfft-web/./SinglePageApplication/App/index.tsx","webpack://swyfft-web/./SinglePageApplication/App/transition.tsx","webpack://swyfft-web/./SinglePageApplication/Components/AppUpdatePrompt/hook.ts","webpack://swyfft-web/./SinglePageApplication/Components/AppUpdatePrompt/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Buttons/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Header/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Landing/Address/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Landing/HeroText/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Landing/LandingContent/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Landing/LandingFooter/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Landing/LandingLayout/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Landing/LandingViewWrapper/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Landing/Logo/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Landing/Name/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/LayoutWrapper/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/OverviewSection/CarrierOverview/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/OverviewSection/FinancialRating/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/OverviewSection/hook.ts","webpack://swyfft-web/./SinglePageApplication/Components/OverviewSection/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/ProductHeader/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/QuoteStepTile/hook.ts","webpack://swyfft-web/./SinglePageApplication/Components/QuoteStepTile/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/RouteLoadingSpinner/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/SelectedQuoteHeader/hook.ts","webpack://swyfft-web/./SinglePageApplication/Components/SelectedQuoteHeader/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Sidebar/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/StepHeader/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/StepTile/TwoColumnLayout/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/StepTile/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Step/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/Table/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/TileHeader/BindButton/hook.ts","webpack://swyfft-web/./SinglePageApplication/Components/TileHeader/BindButton/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/TileHeader/EmailButton/hook.ts","webpack://swyfft-web/./SinglePageApplication/Components/TileHeader/EmailButton/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/TileHeader/HistoryButton/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/TileHeader/PrintButton/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/TileHeader/QRGButton/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/TileHeader/ViewButton/index.tsx","webpack://swyfft-web/./SinglePageApplication/Components/TileHeader/index.tsx","webpack://swyfft-web/./SinglePageApplication/Constants.ts","webpack://swyfft-web/./SinglePageApplication/EmailQuote/Email.tsx","webpack://swyfft-web/./SinglePageApplication/EmailQuote/Form.tsx","webpack://swyfft-web/./SinglePageApplication/EmailQuote/index.ts","webpack://swyfft-web/./SinglePageApplication/Hooks/BindQuoteRedirect/index.ts","webpack://swyfft-web/./SinglePageApplication/Page.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/CoverPageGroups.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/Disclaimers/index.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/Group.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/GroupRow.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/LogoBlock.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/MapElementGroupToPrintedQuote.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/PageContent.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/PageHeader.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/PageLayout.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/PageSidebar.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/Premium.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/RiskCharacteristicsGroup.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/SidebarLockup.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Components/TaxesAndFeesGroup/index.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Context.ts","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Document.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Helpers/index.ts","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Pages/Cover.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Pages/RiskCharacteristics.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Pages/index.tsx","webpack://swyfft-web/./SinglePageApplication/PrintQuote/Print.tsx","webpack://swyfft-web/./SinglePageApplication/Validation/index.ts","webpack://swyfft-web/./SinglePageApplication/Views/AddressManagement/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/AdjusterQueueManagement/AdjusterQueueForm/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/AdjusterQueueManagement/AdjusterQueueForm/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/AdjusterQueueManagement/api.ts","webpack://swyfft-web/./SinglePageApplication/Views/AdjusterQueueManagement/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/AdjusterQueueManagement/models.ts","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/ActivateLocation/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/api.ts","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/boxedList/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/context.ts","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/inlineHeader/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/producerContact/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/producerLocation/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/producerSearch.ts","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/producer/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/searchBar/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/AgencyDashboard/searchInfo/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/BindingRequirements/component.tsx","webpack://swyfft-web/./SinglePageApplication/Views/BindingRequirements/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/BindingRequirements/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/BindingRequirements/skeleton.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CatCodes/App/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CatCodes/Modal/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CatCodes/Models.ts","webpack://swyfft-web/./SinglePageApplication/Views/CatCodes/Search/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CatCodes/Table/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/ClaimsDashboard/ClaimTasks/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/ClaimsDashboard/SavedSearchForm/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/ClaimsDashboard/TaskForm/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/ClaimsDashboard/TaskSearchForm/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/ClaimsDashboard/api.ts","webpack://swyfft-web/./SinglePageApplication/Views/ClaimsDashboard/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/ClaimsDashboard/models.ts","webpack://swyfft-web/./SinglePageApplication/Views/ClaimsDashboard/reducer.ts","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/BuildingAddressInput/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/BuildingAddressInput/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/BuildingAddressInput/item.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/ConstructionType/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/ConstructionType/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/Form/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/GeneralLiability/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/GeneralLiability/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/GeneralLiability/models.ts","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/LessorsRisk/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/LessorsRisk/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/Loading.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/OccupancyType/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/OccupancyType/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/OccupancyType/models.ts","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/SwimmingPoolCount/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/SwimmingPoolCount/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/Components/SwimmingPoolCount/models.ts","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/CommercialLanding/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CompareCustomize/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/CompareCustomize/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/ConfirmQuote/ConfirmationElement/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/ConfirmQuote/ImportantNotices/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/ConfirmQuote/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/ConfirmQuote/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/ConfirmSingleFamilyResidence/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/ConfirmSingleFamilyResidence/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CreateAddress/api.ts","webpack://swyfft-web/./SinglePageApplication/Views/CreateAddress/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/CreateAddress/routeConfig.tsx","webpack://swyfft-web/./SinglePageApplication/Views/Customize/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/Customize/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/DeepLinkQuote/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/DeepLinkQuote/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/Hover/Api.ts","webpack://swyfft-web/./SinglePageApplication/Views/Hover/App/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/Hover/Authorization/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/Hover/Jobs/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/Hover/Webhooks/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/IsoForms/api.ts","webpack://swyfft-web/./SinglePageApplication/Views/IsoForms/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/IsoForms/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/Landing/TermsCheckbox/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/Landing/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/Landing/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/LoginAs/api.ts","webpack://swyfft-web/./SinglePageApplication/Views/LoginAs/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/MakeAPayment/PaymentAction/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/MakeAPayment/PaymentForm/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/MakeAPayment/PaymentSummary/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/MakeAPayment/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/MissingPropertyData/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/MissingPropertyData/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/PreciseLocation/api.ts","webpack://swyfft-web/./SinglePageApplication/Views/PreciseLocation/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/PreciseLocation/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/PreciseLocation/map.tsx","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/BindButton/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/BindButton/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/CarrierLogo/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/CoveragePreview/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/CoveragePreview/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/PremiumErrorInfo/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/PremiumInfo/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/PremiumInfo/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/QuoteActionLinks/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/ReviewButton/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/ReviewButton/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/TileWrapper/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/Tile/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/QuoteList/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/Redirect/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/RenewalEAndSOffer/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/RenewalEAndSOffer/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/RequestEAndSQuote/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/RequestEAndSQuote/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/Revalidation/index.ts","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/AgencyInformation/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/AgencyInformation/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/AgentInformation/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/AgentInformation/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/Base/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/Entry/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/Entry/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/Tracker/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/Tracker/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/api.ts","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/SignUp/models.ts","webpack://swyfft-web/./SinglePageApplication/Views/UnderwritingGuidelines/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/UnderwritingGuidelines/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/UnsupportedProperty/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/UpcomingRenewalQuote/UrqOverview/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/UpcomingRenewalQuote/UrqTileHeader/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/UpcomingRenewalQuote/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/UpcomingRenewalQuote/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/ZipCodeSuggestions/hook.ts","webpack://swyfft-web/./SinglePageApplication/Views/ZipCodeSuggestions/index.tsx","webpack://swyfft-web/./SinglePageApplication/Views/routes.tsx","webpack://swyfft-web/external var \"React\"","webpack://swyfft-web/external var \"ReactDOM\"","webpack://swyfft-web/external var \"numeral\"","webpack://swyfft-web/webpack/bootstrap","webpack://swyfft-web/webpack/runtime/amd options","webpack://swyfft-web/webpack/runtime/compat get default export","webpack://swyfft-web/webpack/runtime/define property getters","webpack://swyfft-web/webpack/runtime/global","webpack://swyfft-web/webpack/runtime/hasOwnProperty shorthand","webpack://swyfft-web/webpack/runtime/make namespace object","webpack://swyfft-web/webpack/runtime/node module decorator","webpack://swyfft-web/webpack/runtime/runtimeId","webpack://swyfft-web/webpack/runtime/jsonp chunk loading","webpack://swyfft-web/webpack/runtime/nonce","webpack://swyfft-web/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","import { fetchAndLog, fetchAndLogWithResponse } from '../Fetch';\r\n\r\nexport async function getMepMaxPercentage(productLine: number, carrierCode: string, purchasedOn: string | null) {\r\n return await fetchAndLog(\r\n `/api/mep/max-percentage?productLine=${productLine}&carrierCode=${carrierCode}&purchasedOn=${purchasedOn || ''}`,\r\n 'get mep max percentage',\r\n );\r\n}\r\n\r\nexport async function getMepDisclaimer(productLine: number, carrierCode: string, purchasedOn: string | null) {\r\n const response = await fetchAndLogWithResponse(\r\n `/api/mep/disclaimer?productLine=${productLine}&carrierCode=${carrierCode}&purchasedOn=${purchasedOn || ''}`,\r\n 'get mep disclaimer',\r\n );\r\n\r\n if (!response.ok) {\r\n throw response;\r\n }\r\n\r\n const text = await response.text();\r\n return text?.length ? text : '';\r\n}\r\n","import { useEffect } from 'react';\r\nimport { isAdmin, isAtLeastAgent, isLimitedAgentUser, navigate } from '@app/Common';\r\nimport { AccessRole, pages } from '@app/Constants';\r\nimport { Params, useParams } from 'react-router-dom-v5-compat';\r\n\r\nexport type AuthorizeRedirectType = AccessRole | ((params?: Params) => boolean) | undefined;\r\n\r\nexport const useAuthorizeRedirect = (type: AuthorizeRedirectType): boolean => {\r\n const params = useParams();\r\n\r\n useEffect(() => {\r\n handleAuthorizeRedirect(type, params);\r\n }, [type, params]);\r\n\r\n return isAuthorized(type, params);\r\n};\r\n\r\nexport function handleAuthorizeRedirect(type: AuthorizeRedirectType, params?: Params) {\r\n if (!isAuthorized(type, params)) navigate(pages.LoginWithReturnUrl);\r\n}\r\n\r\nfunction isAuthorized(type: AuthorizeRedirectType, params?: Params) {\r\n if (type === undefined) return true;\r\n if (type === AccessRole.Admin) return isAdmin();\r\n if (\r\n type === AccessRole.Agent ||\r\n type === AccessRole.IndependentAgent ||\r\n type === AccessRole.CaptiveAgent ||\r\n type === AccessRole.AgencyAdmin ||\r\n type === AccessRole.AgencyLocationAdmin\r\n )\r\n return isAtLeastAgent();\r\n if (type === AccessRole.LimitedAgent) return isLimitedAgentUser();\r\n if (type === AccessRole.AnonymousUser) return true;\r\n if (typeof type === 'function') return type(params);\r\n\r\n throw new Error(`Unsupported authorize redirection type: ${type}.`);\r\n}\r\n","import * as React from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport { IQuoteEvent } from '@app/Models';\r\nimport { ModalRow } from '@app/Components/Modals/StandardModal';\r\nimport { CardInlineData } from '@app/Components/Cards';\r\nimport { formatCurrencyUS } from '@app/Common';\r\nimport { dateTimeFormat } from '@app/Constants';\r\n\r\ntype Props = {\r\n event: IQuoteEvent;\r\n index: number;\r\n};\r\n\r\nexport const Event = ({ event, index }: Props) => (\r\n
\r\n {event.Event}\r\n {dayjs(event.CreatedOn).format(dateTimeFormat)}\r\n\r\n
\r\n \r\n \r\n {event.Agent ?\r\n {event.Agent}\r\n : '-'}\r\n \r\n\r\n \r\n {event.AnnualPremium ? formatCurrencyUS(event.AnnualPremium) : '-'}\r\n \r\n\r\n \r\n {event.IpAddress || '-'}\r\n \r\n \r\n\r\n {event.Notes && (\r\n \r\n \r\n
{event.Notes}
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n);\r\n","import * as React from 'react';\r\nimport { FunctionComponent, useEffect, useState } from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport Modal, { ModalTitle, ModalRow, ModalSeparator } from '@app/Components/Modals/StandardModal';\r\nimport { IQuoteDetails, IQuoteEvent } from '@app/Models';\r\nimport Portal from '@app/Components/Portal';\r\nimport { CardInlineData } from '@app/Components/Cards';\r\nimport { dateTimeFormat } from '@app/Constants';\r\nimport { getQuoteDetails } from '@app/Api/HOApi';\r\nimport { useToast } from '@app/Hooks/Toast';\r\nimport { isAdmin } from '@app/Common';\r\nimport { Event } from './event';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n visible: boolean;\r\n quoteId: string;\r\n address: string | null;\r\n onClose: () => void;\r\n};\r\n\r\nexport const QuoteHistoryModal: FunctionComponent = ({ visible, quoteId, address, onClose }) => {\r\n const [details, setDetails] = useState(null),\r\n [events, setEvents] = useState([]),\r\n [filter, setFilter] = useState(''),\r\n toast = useToast(),\r\n canViewAdminEvents = isAdmin();\r\n\r\n useEffect(() => {\r\n if (!visible) return;\r\n\r\n (async () => {\r\n try {\r\n const details = await getQuoteDetails(quoteId);\r\n setDetails(details);\r\n setEvents(details.QuoteEvents);\r\n } catch (e) {\r\n onClose();\r\n console.error(e);\r\n toast.error('An error occurred while trying to retrieve quote details. Please try again later.');\r\n }\r\n })();\r\n }, [quoteId, visible]);\r\n\r\n useEffect(() => {\r\n if (!details) return;\r\n\r\n const f = filter.toLowerCase();\r\n setEvents(\r\n details.QuoteEvents.filter(\r\n event =>\r\n event.Agent?.toLowerCase().includes(f) ||\r\n event.AnnualPremium?.toString().includes(f) ||\r\n dayjs(event.CreatedOn).format(dateTimeFormat).includes(f) ||\r\n event.Event?.toLowerCase().includes(f) ||\r\n event.IpAddress?.includes(f) ||\r\n event.Location?.toLowerCase().includes(f) ||\r\n event.Notes?.toLowerCase().includes(f),\r\n ),\r\n );\r\n }, [filter]);\r\n\r\n return (\r\n \r\n \r\n Quote History\r\n\r\n {!details &&
}\r\n\r\n {details && (\r\n <>\r\n \r\n \r\n {address || '-'}\r\n \r\n\r\n \r\n {quoteId}\r\n \r\n \r\n\r\n \r\n \r\n {dayjs(details.CreateDate).format(dateTimeFormat)}\r\n \r\n\r\n \r\n {dayjs(details.ModifiedOn).format(dateTimeFormat)}\r\n \r\n \r\n\r\n \r\n\r\n
\r\n setFilter(e.target.value)}\r\n />\r\n
\r\n\r\n
\r\n {events\r\n .filter(\r\n (event: IQuoteEvent) =>\r\n !event.IsAdminEvent || (event.IsAdminEvent && canViewAdminEvents),\r\n )\r\n .map((event: IQuoteEvent, index: number) => (\r\n \r\n ))}\r\n
\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n","import {\r\n getComparisonElementDescriptions,\r\n getComparisonImportantNotices,\r\n getComparisonQuotesByProduct,\r\n} from '@app/Api/ComparisonQuoteApi';\r\nimport { ApiError, ComparisonElementDescriptionModel, ComparisonQuotesModel } from '@app/Models';\r\nimport { ApplicationState } from '@app/SinglePageApplication/State';\r\nimport { UrlParams } from '@app/SinglePageApplication/Views';\r\nimport { CarrierCode, ProductLine } from '@business/CommonSets';\r\n\r\nexport type ComparisonQuoteData = {\r\n comparisonModel: ComparisonQuotesModel;\r\n elementDescriptions: ComparisonElementDescriptionModel[];\r\n};\r\n\r\n/** This hook fetches comparison quote data on load based on the Product and QuoteId in the url parameters and handles\r\n * updating the state. */\r\nexport async function loadComparisonQuotes(\r\n application: ApplicationState,\r\n params: UrlParams,\r\n isSingleQuote?: boolean,\r\n isUrq?: boolean,\r\n): Promise {\r\n const { update } = application,\r\n // These params can be undefined, so we use the empty string as a fallback to avoid type errors when calling .toLowerCase()\r\n quoteId = (params.quoteId || '').toLowerCase();\r\n\r\n if (!quoteId || !params.product) return;\r\n\r\n const productLine = ProductLine.parse(params.product),\r\n carriers = params.carriers ? params.carriers.split(',').map(carrier => CarrierCode.parse(carrier)) : [];\r\n\r\n try {\r\n const data = await load();\r\n setData(data);\r\n } catch (e) {\r\n update(state => (state.error = e));\r\n }\r\n\r\n async function load(): Promise {\r\n const comparisonModel = await getComparisonQuotesByProduct(productLine, quoteId);\r\n\r\n if (isUrq) {\r\n const urqQuote = comparisonModel.Quotes.find(quote => quote.IsUpcomingRenewalQuote);\r\n if (!urqQuote) {\r\n handleNonUrqQuote();\r\n }\r\n }\r\n\r\n const elementDescriptions = await getComparisonElementDescriptions(productLine, comparisonModel);\r\n\r\n return {\r\n comparisonModel,\r\n elementDescriptions,\r\n };\r\n }\r\n\r\n function setData(comparisonQuoteData: ComparisonQuoteData): void {\r\n const { comparisonModel, elementDescriptions } = comparisonQuoteData;\r\n update(state => {\r\n state.quoteId = quoteId;\r\n state.comparisonModel = comparisonModel;\r\n state.comparisonModelQuoteOrder = comparisonModel.Quotes.map(quote => quote.QuoteId);\r\n state.elementDescriptions = elementDescriptions;\r\n state.importantNotices = getComparisonImportantNotices(productLine, comparisonModel);\r\n\r\n // There are two scenarios that use `visibleQuoteIds`:\r\n // - Single quote view: only show the single quote represented by `quoteId`.\r\n // - Multi-quote view: if carriers are specified in the URL, only show quotes from those carriers.\r\n state.visibleQuoteIds =\r\n isSingleQuote ? [quoteId]\r\n : carriers?.length ?\r\n comparisonModel.Quotes.filter(quote => carriers.includes(CarrierCode.parse(quote.CarrierCode))).map(\r\n quote => quote.QuoteId,\r\n )\r\n : state.comparisonModel.Quotes.map(quote => quote.QuoteId);\r\n\r\n state.error = null;\r\n state.warning = null;\r\n });\r\n }\r\n\r\n function handleNonUrqQuote() {\r\n const uiMessage =\r\n 'The quote requested is not an Upcoming Renewal Quote (URQ). ' +\r\n 'Create a URQ for a valid policy via the quote page, history manage modal, or policy reviews dashboard.';\r\n throw new ApiError(400, null, uiMessage);\r\n }\r\n}\r\n","import { fetchAndLog, fetchAndLogWithResponse } from '@app/Api/Fetch';\r\nimport { Address, PropertyData } from '@app/Models';\r\n\r\n/** Retrieves the address key for an address. */\r\nexport const getAddressKey = async (address: string): Promise => {\r\n const response = await fetchAndLogWithResponse(`/api/property/address-key?address=${address}`, 'get address key');\r\n\r\n if (!response.ok) {\r\n throw response;\r\n }\r\n\r\n return await response.json();\r\n};\r\n\r\n/** Parses an address into its constituent components. */\r\nexport const parseAddress = async (address: string): Promise
=> {\r\n return await fetchAndLog(`/api/address?address=${encodeURIComponent(address)}`, 'parse address');\r\n};\r\n\r\n/** Creates a property using the given address. */\r\nexport const createProperty = async (address: Address): Promise => {\r\n return await fetchAndLog('/api/property', 'create property', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(address),\r\n });\r\n};\r\n","import * as React from 'react';\r\nimport { PropsWithChildren, useContext } from 'react';\r\nimport { AuthorizeRedirectType } from '@app/Hooks/AuthorizeRedirect';\r\nimport { Footer, Navbar } from '@app/Components/Menus';\r\nimport { Auth } from '@app/SinglePageApplication/App/auth';\r\nimport { AppSettingsContext } from '@app/SinglePageApplication/State/Context';\r\n\r\ninterface BaseViewProps {\r\n /* Optional AccessRole to match or boolean condition to trigger redirect to login page. */\r\n authorizeRedirect?: AuthorizeRedirectType;\r\n hideNavbar?: boolean;\r\n hideFooter?: boolean;\r\n}\r\n\r\n/* A route with options to redirect based on auth, hide navbar, or hide footer. */\r\nexport function Route({ authorizeRedirect, hideNavbar, hideFooter, children }: PropsWithChildren) {\r\n const appSettings = useContext(AppSettingsContext);\r\n return (\r\n \r\n {!hideNavbar && }\r\n\r\n {children}\r\n\r\n {!hideFooter &&
}\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { pages } from '@app/Constants';\r\nimport { AuthorizeRedirectType, useAuthorizeRedirect } from '@app/Hooks/AuthorizeRedirect';\r\nimport { navigate } from '@app/Common';\r\n\r\ntype Props = {\r\n check: AuthorizeRedirectType;\r\n};\r\n\r\nexport const Auth = ({ check, children }: React.PropsWithChildren) => {\r\n const auth = useAuthorizeRedirect(check);\r\n\r\n if (!auth) {\r\n navigate(pages.LoginWithReturnUrl);\r\n return <>;\r\n }\r\n\r\n return <>{children};\r\n};\r\n","import * as React from 'react';\r\nimport { useEffect, useMemo, useRef, useState } from 'react';\r\nimport {\r\n createBrowserRouter,\r\n Outlet,\r\n RouteObject,\r\n RouterProvider,\r\n} from 'react-router-dom-v5-compat';\r\nimport { HubChannel } from '@app/Business/CommonSets/HubChannel';\r\nimport { useAsyncEffect } from '@app/Hooks';\r\nimport { ToastContext, useToast } from '@app/Hooks/Toast';\r\nimport Hub from '@app/Hubs/Hub';\r\nimport { Route } from '@app/SinglePageApplication/App/Route';\r\nimport { Transition } from '@app/SinglePageApplication/App/transition';\r\nimport {\r\n AppUpdatePrompt,\r\n} from '@app/SinglePageApplication/Components/AppUpdatePrompt';\r\nimport { ErrorElement } from '@app/SinglePageApplication/Error';\r\nimport {\r\n ApplicationState,\r\n StateContext,\r\n useApplicationState,\r\n} from '@app/SinglePageApplication/State';\r\nimport {\r\n routes,\r\n SwyfftRouteObject,\r\n} from '@app/SinglePageApplication/Views/routes';\r\nimport { AppSettings } from '../Models';\r\nimport { AppSettingsContext } from '../State/Context';\r\nimport './style.scss';\r\n\r\nexport const App = () => {\r\n const reducer = useApplicationState(),\r\n reducerRef = useRef(reducer),\r\n toast = useToast(),\r\n [appSettings, setAppSettings] = useState(window.appSettings);\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n await Hub.on(HubChannel.AppSettings, setAppSettings);\r\n } catch (e) {\r\n console.error('Failed to connect to web socket.', e);\r\n }\r\n }, []);\r\n\r\n const router = useMemo(\r\n () =>\r\n createBrowserRouter([\r\n {\r\n path: '/',\r\n element: ,\r\n errorElement: (\r\n \r\n \r\n \r\n ),\r\n children: routes.map(routeMapper),\r\n },\r\n ]),\r\n [],\r\n );\r\n\r\n // Keep the reducerRef up to date with the latest reducer state\r\n useEffect(() => {\r\n reducerRef.current = reducer;\r\n }, [reducer.state]);\r\n\r\n // Show any warnings that are pushed to the state in the toast component\r\n useAsyncEffect(async () => {\r\n if (reducer.state.warning) {\r\n await toast.warning(reducer.state.warning);\r\n }\r\n }, [reducer.state.warning]);\r\n\r\n // Do not save users scroll position when transitioning between routes (i.e. render with scroll at the top of the screen)\r\n useEffect(() => {\r\n history.scrollRestoration = 'manual';\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n\r\n function routeMapper(route: SwyfftRouteObject): RouteObject {\r\n return {\r\n ...route,\r\n element: (\r\n \r\n {/* The transition component needs to be inside createBrowserRouter (instead of RouteWithSettings component) for gsap animation context. */}\r\n {route.noTransition ?\r\n <>{route.element instanceof Function ? route.element() : route.element}\r\n : {route.element}}\r\n \r\n ),\r\n children: (route.children || []).map(routeMapper)\r\n };\r\n }\r\n};\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { useLocation } from 'react-router-dom-v5-compat';\r\nimport { SwitchTransition, Transition as InnerTransition } from 'react-transition-group';\r\nimport gsap from 'gsap';\r\nimport { transitionDuration } from '../Constants';\r\n\r\nexport const Transition = ({ children }) => {\r\n const location = useLocation(),\r\n duration = transitionDuration / 1000,\r\n className = 'transitioning';\r\n\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, [location.pathname]);\r\n\r\n return (\r\n \r\n {\r\n node.classList.toggle(className);\r\n gsap.set(node, { autoAlpha: 0, y: 10 });\r\n gsap.timeline({ paused: true })\r\n .to(node, { autoAlpha: 1, y: 0, duration })\r\n .play()\r\n .then(() => onComplete(node));\r\n }}\r\n onExiting={(node: HTMLDivElement) => {\r\n node.classList.toggle(className);\r\n gsap.timeline({ paused: true })\r\n .to(node, { autoAlpha: 0, y: 10, duration })\r\n .play()\r\n .then(() => onComplete(node));\r\n }}\r\n >\r\n {children}\r\n \r\n \r\n );\r\n\r\n function onComplete(node: HTMLDivElement) {\r\n gsap.set(node, { clearProps: 'transform' });\r\n node.classList.toggle(className);\r\n }\r\n};\r\n","import { HubChannel } from '@app/Business/CommonSets/HubChannel';\r\nimport { isEmpty, refresh } from '@app/Common';\r\nimport { APP_VERSION_STORAGE_KEY } from '@app/Constants';\r\nimport { useAsyncEffect } from '@app/Hooks';\r\nimport Hub from '@app/Hubs/Hub';\r\nimport { getLocalData, saveLocalData } from '@app/Storage';\r\nimport { useState } from 'react';\r\nimport { useBeforeUnload } from 'react-router-dom-v5-compat';\r\n\r\nexport function useAppUpdatePrompt() {\r\n const [visible, setVisible] = useState(false);\r\n\r\n // Connect to the app version hub channel, which polls the app version from the server.\r\n useAsyncEffect(connectToAppVersion, []);\r\n\r\n // Clear the stored app version when exiting or reloading the page.\r\n useBeforeUnload(clearStoredAppVersion);\r\n\r\n return {\r\n visible,\r\n onClick,\r\n };\r\n\r\n async function connectToAppVersion() {\r\n try {\r\n await Hub.on(HubChannel.AppVersion, checkAppVersionAndPromptIfNeeded);\r\n } catch (e) {\r\n console.error('Failed to connect to web socket.', e);\r\n }\r\n }\r\n\r\n function checkAppVersionAndPromptIfNeeded(appVersion: string) {\r\n const localStoredVersion = getLocalData(APP_VERSION_STORAGE_KEY);\r\n\r\n // If there is no stored version, this is a fresh load, so save the app version\r\n if (isEmpty(localStoredVersion)) {\r\n saveLocalData(APP_VERSION_STORAGE_KEY, appVersion);\r\n return;\r\n }\r\n\r\n // Tf there is a stored app version, and it differs from the server app version, show the prompt\r\n if (appVersion !== localStoredVersion) setVisible(true);\r\n }\r\n\r\n function onClick() {\r\n // Clear the stored app version and refresh the page\r\n clearStoredAppVersion();\r\n refresh();\r\n }\r\n\r\n function clearStoredAppVersion() {\r\n saveLocalData(APP_VERSION_STORAGE_KEY, null);\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Button, BrowserUpdatedIcon, Paragraph } from '@swyfft/webkit';\r\nimport { useAppUpdatePrompt } from './hook';\r\nimport { tv } from 'tailwind-variants';\r\n\r\nconst updatePromptStyle = 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 right-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 AppUpdatePrompt() {\r\n const { visible, onClick } = useAppUpdatePrompt();\r\n\r\n return (\r\n
\r\n
\r\n \r\n
Site Update Available
\r\n
\r\n\r\n A new version of the web site is available.\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n (The page will be reloaded)\r\n
\r\n
\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { FunctionComponent, ReactNode } from 'react';\r\nimport { useNavigate } from 'react-router-dom-v5-compat';\r\nimport { IButtonProps } from '@app/Components/FormGroups/Buttons';\r\nimport { PrimaryButton, SecondaryButton } from '@app/Components/Form';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport { iconPaths } from '@app/Constants';\r\nimport './style.scss';\r\n\r\ninterface Props {\r\n positive: ReactNode;\r\n negative: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const StepButtons: FunctionComponent = ({ positive, negative, className }) => (\r\n
\r\n
\r\n
{negative}
\r\n
\r\n
\r\n
{positive}
\r\n
\r\n
\r\n);\r\n\r\nexport const PrimaryRouteButton: FunctionComponent = props => {\r\n const navigate = useNavigate();\r\n return (\r\n \r\n \r\n\r\n {props.label}\r\n
\r\n }\r\n className={`mini-button-cp ${props.className || ''} ${props.disabled ? 'disabled' : ''}`}\r\n onClick={props.onClick || (() => props.route && navigate(props.route))}\r\n />\r\n );\r\n};\r\n\r\nexport const SecondaryBackButton: FunctionComponent = props => {\r\n const navigate = useNavigate();\r\n return (\r\n \r\n \r\n\r\n {props.label}\r\n \r\n }\r\n className={`mini-button-cp ${props.className || ''}`}\r\n onClick={() => (props.onClick ? props.onClick() : navigate(-1))}\r\n />\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { FunctionComponent } from 'react';\r\n\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n className?: string;\r\n} & React.PropsWithChildren;\r\n\r\nexport const Header: FunctionComponent = ({ children, className }: Props) => (\r\n
{children}
\r\n);\r\n\r\nexport const SubHeader: FunctionComponent = ({ children, className }: Props) => (\r\n
{children}
\r\n);\r\n","import * as React from 'react';\r\nimport { forwardRef } from 'react';\r\nimport { PropertyData } from '@app/Models';\r\nimport { AutoComplete, Value } from '@swyfft/webkit';\r\nimport { searchHomeownerAddresses } from '@app/Api/HOApi';\r\nimport './style.scss';\r\n\r\nlet debounce: any;\r\n\r\ntype Props = {\r\n /** The underlying value containing the typed or selected address. */\r\n address: Value;\r\n\r\n /** Fired when the user types new content into the underlying input. */\r\n onChange: (address: string) => void;\r\n\r\n /** Fired when the user selects an entry from the select list. */\r\n onSelect?: (property: PropertyData) => void;\r\n\r\n /** An optional ID to apply to the DOM input. */\r\n id?: string;\r\n\r\n /** An optional name to apply to the DOM input. */\r\n name?: string;\r\n\r\n /** When set, the DOM input is focused on mount. */\r\n autoFocus?: boolean;\r\n};\r\n\r\nexport type Actions = {\r\n focus: () => void;\r\n};\r\n\r\nexport const AddressAutoComplete = forwardRef((props: Props, ref) => {\r\n return (\r\n
\r\n \r\n id={props.id || ''}\r\n name='address'\r\n placeholder='Type your address'\r\n value={props.address}\r\n suggestions={async (filter: string) => await search(filter)}\r\n getItemId={property => property.AddressKey}\r\n getItemText={property => property.FullAddress}\r\n autoComplete={new Date().getTime().toString()}\r\n autoFocus\r\n onTextChange={props.onChange}\r\n onSelect={property => props.onSelect && props.onSelect(property)}\r\n />\r\n
\r\n );\r\n\r\n async function search(filter: string): Promise {\r\n return new Promise(resolve => {\r\n if (debounce) clearTimeout(debounce);\r\n\r\n debounce = setTimeout(async () => {\r\n resolve(await searchHomeownerAddresses(filter, 8));\r\n }, 300);\r\n });\r\n }\r\n});\r\n","import * as React from 'react';\r\nimport { FunctionComponent } from 'react';\r\nimport './style.scss';\r\n\r\nexport const HeroText: FunctionComponent = ({ children }) => (\r\n
{children}
\r\n);\r\n","import * as React from 'react';\r\nimport { PropsWithChildren } from 'react';\r\nimport './style.scss';\r\n\r\nexport function LandingContent({ children }: PropsWithChildren<{ children }>) {\r\n return
{children}
;\r\n}\r\n","import * as React from 'react';\r\nimport { PropsWithChildren } from 'react';\r\nimport './style.scss';\r\n\r\nexport function LandingFooter({ children }: PropsWithChildren<{ children }>) {\r\n return
{children}
;\r\n}\r\n","import * as React from 'react';\r\nimport { PropsWithChildren } from 'react';\r\nimport './style.scss';\r\n\r\nexport function LandingLayout({ children }: PropsWithChildren<{ children }>) {\r\n return
{children}
;\r\n}\r\n","import { ProductLine } from '@business/CommonSets';\r\nimport * as React from 'react';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n product: ProductLine;\r\n} & React.PropsWithChildren;\r\n\r\nexport function LandingViewWrapper({ product, children }: Props) {\r\n const backgroundImage = React.useMemo(\r\n () =>\r\n product.switch({\r\n onHomeowner: () => '/images/homeowner-background.webp',\r\n onCommercial: () => '/images/commercial-background.webp',\r\n onFlood: () => '/images/flood-background.webp',\r\n onGrc: () => '',\r\n }),\r\n [product],\r\n );\r\n\r\n return (\r\n \r\n
{children}
\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { FunctionComponent } from 'react';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport { iconPaths } from '@app/Constants';\r\nimport './style.scss';\r\n\r\nexport const Logo: FunctionComponent = () => (\r\n \r\n);\r\n","import * as React from 'react';\r\nimport { FunctionComponent } from 'react';\r\nimport { Text, Value } from '@swyfft/webkit';\r\nimport './style.scss';\r\n\r\ninterface Props {\r\n firstName: Value;\r\n middleName: Value;\r\n lastName: Value;\r\n onChange: (key: 'firstName' | 'middleName' | 'lastName', value: string) => void;\r\n}\r\n\r\nexport const InsuredName: FunctionComponent = props => {\r\n return (\r\n
\r\n props.onChange('firstName', name)}\r\n placeholder='Insured first name'\r\n />\r\n\r\n props.onChange('middleName', name)}\r\n placeholder='Insured middle name (optional)'\r\n />\r\n\r\n props.onChange('lastName', name)}\r\n placeholder='Insured last name'\r\n />\r\n
\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { forwardRef, PropsWithChildren } from 'react';\r\nimport { useClassName } from '@app/Hooks';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n withCover?: boolean;\r\n fullWidth?: boolean;\r\n};\r\n\r\nexport const LayoutWrapper = forwardRef>(\r\n ({ withCover, fullWidth, children }, ref) => {\r\n const className = useClassName('layout-wrapper', [\r\n withCover ? 'with-cover' : '',\r\n fullWidth ? 'full-width' : '',\r\n ]);\r\n\r\n return (\r\n
\r\n
\r\n\r\n {children}\r\n
\r\n );\r\n },\r\n);\r\n","import * as React from 'react';\r\nimport { CarrierCode } from '@app/Business/CommonSets';\r\nimport { iconPaths } from '@app/Constants';\r\nimport { Paragraph } from '@swyfft/webkit';\r\n\r\ntype Props = {\r\n carrierCode: CarrierCode;\r\n};\r\n\r\nexport function CarrierOverview(props: Props) {\r\n const { carrierCode } = props;\r\n\r\n return (\r\n
\r\n {props.carrierCode.switch({\r\n onVave: LloydsCoverholderLogo,\r\n onHiscox: LloydsLogo,\r\n onBrit: LloydsLogo,\r\n onBenchmark: CarrierName,\r\n onBenchmarkSpecialty: CarrierName,\r\n onClearBlue: CarrierName,\r\n onClearBlueSpecialty: CarrierName,\r\n onDorchester: CarrierName,\r\n onNfip: CarrierName,\r\n onTopa: CarrierName,\r\n })}\r\n
\r\n );\r\n\r\n function CarrierName() {\r\n return <>{carrierCode.displayName};\r\n }\r\n\r\n function LloydsLogo() {\r\n return (\r\n \r\n );\r\n }\r\n\r\n function LloydsCoverholderLogo() {\r\n return (\r\n
\r\n \r\n Underwritten by certain underwriters at Lloyd's\r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { createRef } from 'react';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport { iconPaths } from '@app/Constants';\r\nimport { useConditionalRender } from '@app/Hooks';\r\nimport { ComparisonQuoteModel } from '@app/Models';\r\nimport { TileCell } from '@app/ProductComparison/TileCell';\r\nimport { ToolTip } from '@app/ProductComparison/ToolTip';\r\nimport { getQuotePath } from '@app/SinglePageApplication/Views';\r\nimport { TrackingEvent } from '@app/TrackingEvents';\r\nimport { CarrierCode } from '@business/CommonSets';\r\n\r\ninterface IFinancialRatingProps {\r\n quote: ComparisonQuoteModel;\r\n index: number;\r\n getRef: (index: number) => React.RefObject;\r\n scrollTo: (index: number) => void;\r\n visibleQuoteCount: number;\r\n tileIndex: number;\r\n}\r\n\r\nexport function FinancialRating({\r\n quote,\r\n index,\r\n getRef,\r\n scrollTo,\r\n visibleQuoteCount,\r\n tileIndex,\r\n}: IFinancialRatingProps) {\r\n const { rendered, visible, setVisible } = useConditionalRender(),\r\n { QuoteId } = quote,\r\n carrierCode = CarrierCode.parse(quote.CarrierCode),\r\n tileCellRef = createRef(),\r\n financialRating = carrierCode.getFinancialRating();\r\n\r\n return (\r\n \r\n {financialRating && (\r\n <>\r\n \r\n\r\n \r\n\r\n {rendered && (\r\n setVisible(false)}\r\n className={visibleQuoteCount === 1 ? 'single-tile-tooltip' : ''}\r\n >\r\n {financialRating.displayName}\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n\r\n function onClickToolTip() {\r\n setVisible(true);\r\n TrackingEvent.trackSinglePageApplication(getQuotePath(visibleQuoteCount), 'tooltip', 'Financial Rating');\r\n scrollTo(index);\r\n }\r\n}\r\n","import { useContext, useMemo } from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport * as localizedFormat from 'dayjs/plugin/localizedFormat';\r\nimport { simpleDateFormat } from '@app/Constants';\r\nimport { useScrollTo } from '@app/Hooks';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { OverviewSectionProps } from './models';\r\n\r\ndayjs.extend(localizedFormat);\r\n\r\nexport function useQuoteOverviewSection(props: OverviewSectionProps) {\r\n const { state } = useContext(StateContext),\r\n comparisonQuotes = useMemo(() => state.comparisonModel?.Quotes || [], [state.comparisonModel?.Quotes]),\r\n visibleQuotes = useMemo(() => getVisibleQuotes(), [comparisonQuotes, state.visibleQuoteIds]);\r\n\r\n const { getRef, scrollTo } = useScrollTo(visibleQuotes.map((_, index) => index));\r\n\r\n return {\r\n visibleQuotes,\r\n getRef,\r\n scrollTo,\r\n getGuaranteedUntilDate,\r\n };\r\n\r\n function getVisibleQuotes() {\r\n return comparisonQuotes.filter(quote => state.visibleQuoteIds.includes(quote.QuoteId));\r\n }\r\n\r\n /** Business wants the expiration displayed to be 1 day before the actual quote expiration date */\r\n function getGuaranteedUntilDate(expiresOn: string) {\r\n return dayjs(expiresOn).subtract(1, 'day').format(simpleDateFormat);\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Row } from '@app/ProductComparison/Row';\r\nimport { TileCell } from '@app/ProductComparison/TileCell';\r\nimport { FinancialRating } from '@app/SinglePageApplication/Components/OverviewSection/FinancialRating';\r\nimport { CarrierCode, RatingType } from '@business/CommonSets';\r\nimport { CarrierOverview } from './CarrierOverview';\r\nimport { useQuoteOverviewSection } from './hook';\r\nimport { OverviewSectionProps } from './models';\r\nimport './style.scss';\r\n\r\nexport function QuoteOverviewSection(props: OverviewSectionProps) {\r\n const { tileIndex } = props,\r\n { visibleQuotes, getRef, scrollTo, getGuaranteedUntilDate } = useQuoteOverviewSection(props);\r\n\r\n return (\r\n <>\r\n \r\n {visibleQuotes.map(quote => (\r\n \r\n \r\n \r\n ))}\r\n \r\n\r\n \r\n {visibleQuotes.map((quote, index) => (\r\n \r\n ))}\r\n \r\n\r\n \r\n {visibleQuotes.map(quote => (\r\n \r\n {RatingType.parse(quote.RatingType).displayValue}\r\n \r\n ))}\r\n \r\n\r\n \r\n {visibleQuotes.map(quote => (\r\n \r\n {getGuaranteedUntilDate(quote.ExpiresOn)}\r\n \r\n ))}\r\n \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport { ProductLine } from '@business/CommonSets';\r\n\r\ntype Props = {\r\n product: ProductLine;\r\n};\r\n\r\nexport function ProductHeader({ product }: Props) {\r\n const icon = React.useMemo(\r\n () =>\r\n product.switch({\r\n onHomeowner: () => '/images/homeowner-icon.svg',\r\n onCommercial: () => '/images/commercial-icon.svg',\r\n onFlood: () => '/images/flood-icon.svg',\r\n onGrc: () => {\r\n throw new Error('Unsupported product.');\r\n },\r\n }),\r\n [product]\r\n );\r\n\r\n return (\r\n
\r\n \r\n\r\n {`${product.value} Insurance`}\r\n
\r\n );\r\n}\r\n","import { useEffect, useState } from 'react';\r\nimport { useResize } from '@app/Hooks';\r\nimport { QuoteStepTileProps } from './models';\r\n\r\nexport function useQuoteStepTile(props: QuoteStepTileProps) {\r\n const [tileWidth, setTileWidth] = useState(0);\r\n\r\n useEffect(updateTileWidth, [props.tileContainerRef.current]);\r\n useResize(updateTileWidth);\r\n\r\n return {\r\n tileWidth,\r\n };\r\n\r\n function updateTileWidth() {\r\n if (!props.tileContainerRef.current) return;\r\n setTileWidth(props.tileContainerRef?.current.offsetWidth);\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { SelectedQuoteHeader } from '@app/SinglePageApplication/Components/SelectedQuoteHeader';\r\nimport { StepTile } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { useQuoteStepTile } from './hook';\r\nimport { QuoteStepTileProps } from './models';\r\n\r\nexport function QuoteStepTile(props: QuoteStepTileProps) {\r\n const { quote, quoteProperty, tileContainerRef, children } = props,\r\n { tileWidth } = useQuoteStepTile(props);\r\n\r\n return (\r\n \r\n {quote && quoteProperty && (\r\n \r\n )}\r\n {children}\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { Spinner } from '@swyfft/webkit';\r\n\r\nexport function RouteLoadingSpinner() {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import { useRef } from 'react';\r\nimport { CarrierCode, RatingType } from '@app/Business/CommonSets';\r\nimport { SelectedQuoteHeaderProps } from './models';\r\n\r\nexport function useSelectedQuoteHeader(props: SelectedQuoteHeaderProps) {\r\n const { quote } = props,\r\n carrierCode = CarrierCode.parse(quote.CarrierCode),\r\n ratingType = RatingType.parse(quote.RatingType),\r\n headerRef = useRef(null);\r\n\r\n return {\r\n carrierCode,\r\n ratingType,\r\n headerRef,\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { Logo } from '@app/ProductComparison/Logo';\r\nimport { Price } from '@app/ProductComparison/Price';\r\nimport { ProductName } from '@app/ProductComparison/SidebarProductName';\r\nimport { TwoColumnLayout } from '@app/SinglePageApplication/Components/StepTile/TwoColumnLayout';\r\nimport { useSelectedQuoteHeader } from './hook';\r\nimport { SelectedQuoteHeaderProps } from './models';\r\nimport './style.scss';\r\n\r\nexport function SelectedQuoteHeader(props: SelectedQuoteHeaderProps) {\r\n const { quote, quoteProperty, tileWidth: width } = props,\r\n { carrierCode, ratingType, headerRef } = useSelectedQuoteHeader(props);\r\n\r\n return (\r\n <>\r\n \r\n
You've Selected:
\r\n\r\n \r\n\r\n \r\n
{quoteProperty.Street1}
\r\n
\r\n {quoteProperty.City}, {quoteProperty.StateCode} {quoteProperty.Zip}\r\n
\r\n
\r\n
\r\n }\r\n second={\r\n }\r\n />\r\n }\r\n ratingType={ratingType}\r\n />\r\n \r\n );\r\n\r\n function PriceSubtext() {\r\n return <>{quote.GrossAnnualPayment > 0 ? 'Includes Taxes & Fees' : 'Premium unavailable'};\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Context, ReactNode, useContext } from 'react';\r\n\r\nimport { CloseIcon } from '@swyfft/webkit';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport { getAgentName } from '@app/Storage';\r\nimport * as Common from '@app/Common';\r\nimport * as Constants from '@app/Constants';\r\nimport './style.scss';\r\n\r\ntype SidebarNode = {\r\n title: string;\r\n onClick: () => void;\r\n itemCountProperty: string;\r\n itemSubCountProperty?: string;\r\n icon?: ReactNode;\r\n childNode?: SidebarNode[];\r\n};\r\n\r\ninterface ISidebarProps {\r\n agentTitle: string;\r\n pageTitle: string;\r\n stateContext: Context;\r\n nodes: SidebarNode[];\r\n className?: string;\r\n includeCloseButton?: boolean;\r\n onCloseClick?: () => void;\r\n onLogoClick?: () => void;\r\n}\r\n\r\nexport const Sidebar = (props: ISidebarProps) => {\r\n const context = useContext(props.stateContext);\r\n const agentName = getAgentName() || '';\r\n const agentNameParts = agentName.split(' ');\r\n\r\n const getUserInitials = (): ReactNode => {\r\n if (agentName && agentName.split(' ')) {\r\n return agentName\r\n .split(' ')\r\n .map(n => n[0])\r\n .join('');\r\n } else {\r\n return ;\r\n }\r\n };\r\n\r\n const handleNavigation = () => {\r\n if (props.onLogoClick) {\r\n props.onLogoClick();\r\n }\r\n };\r\n\r\n const handleLogout = async () => {\r\n await Common.logout();\r\n Common.navigate(Constants.pages.Root);\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
{props.pageTitle}
\r\n
Hi, {agentNameParts[0]}
\r\n
\r\n\r\n
\r\n {props.includeCloseButton && (\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n
\r\n
\r\n\r\n
\r\n {props.nodes.map((node: SidebarNode) => {\r\n return (\r\n
\r\n {node.icon}\r\n {node.title}\r\n\r\n {context['state'][node.itemCountProperty] > 0 && (\r\n
\r\n {context['state'][node.itemCountProperty]}\r\n\r\n {node.itemSubCountProperty &&\r\n context['state'][node.itemSubCountProperty] > 0 && (\r\n \r\n {context['state'][node.itemSubCountProperty]}\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n \r\n {getUserInitials()}\r\n \r\n\r\n
\r\n
{agentName}
\r\n\r\n
{props.agentTitle}
\r\n
\r\n
\r\n\r\n
\r\n {/*TODO: Enable when we know what this action should do*/}\r\n {/*
*/}\r\n {/* */}\r\n {/* Settings*/}\r\n {/*
*/}\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\ninterface IIconButtonProps {\r\n id?: string;\r\n className: string;\r\n onClick?: () => void;\r\n children: ReactNode;\r\n}\r\n\r\nconst IconButton = React.forwardRef((props: IIconButtonProps, ref) => {\r\n return (\r\n \r\n );\r\n});\r\n","import * as React from 'react';\r\nimport { clsx } from 'clsx';\r\nimport { getRatingTypeColor } from '@app/ProductComparison/ColorScheme';\r\nimport { StepHeaderProps } from './models';\r\nimport './style.scss';\r\n\r\nexport function StepHeader(props: StepHeaderProps) {\r\n const { title, titleElement, description, icon, ratingType } = props;\r\n return (\r\n \r\n {icon ?\r\n
\r\n
{icon}
\r\n
{getTitleLockup()}
\r\n
\r\n : getTitleLockup()}\r\n \r\n );\r\n\r\n function getTitleLockup() {\r\n return (\r\n <>\r\n {title &&

}\r\n {titleElement &&

{titleElement}

}\r\n {description &&
{description}
}\r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { forwardRef } from 'react';\r\nimport { clsx } from 'clsx';\r\nimport { TwoColumnLayoutProps } from './models';\r\nimport { getRatingTypeColor } from '@app/ProductComparison/ColorScheme';\r\n\r\nexport const TwoColumnLayout = forwardRef(function (props: TwoColumnLayoutProps, ref: React.RefObject) {\r\n const { className, first, second, width, ratingType, excludeHeader } = props;\r\n\r\n return (\r\n
\r\n {!excludeHeader && ratingType && (\r\n \r\n
\r\n {ratingType.displayValue}\r\n
\r\n
\r\n )}\r\n
{first}
\r\n
{second}
\r\n \r\n );\r\n});\r\n","import * as React from 'react';\r\nimport { PropsWithChildren, forwardRef } from 'react';\r\nimport Skeleton from 'react-loading-skeleton';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n id?: string;\r\n className?: string;\r\n};\r\n\r\nexport const StepTile = forwardRef>((props, ref) => {\r\n return (\r\n
\r\n {props.children}\r\n
\r\n );\r\n});\r\n\r\nexport const StepTileRow = ({ children, className }: PropsWithChildren<{ className?: string }>) => (\r\n
{children}
\r\n);\r\n\r\nexport const StepTileRowSeparator = () =>
;\r\n\r\nexport const StepTileText = ({ loading, children }: { loading?: boolean; children: any }) => (\r\n
\r\n {children}\r\n\r\n {loading && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n);\r\n","import * as React from 'react';\r\nimport { LayoutWrapper } from '../LayoutWrapper';\r\nimport { StepTile } from '../StepTile';\r\nimport { ViewWrapper } from '../ViewWrapper';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n title: string;\r\n id?: string;\r\n className?: string;\r\n fullWidth?: boolean;\r\n isLoading?: boolean;\r\n};\r\n\r\nexport const Step = ({ title, id, className, fullWidth, isLoading, children }: React.PropsWithChildren) => (\r\n
\r\n \r\n \r\n {children}\r\n \r\n \r\n
\r\n);\r\n","import * as React from 'react';\r\nimport { ReactElement, useMemo } from 'react';\r\nimport DataTable, { ConditionalStyles, TableColumn, TableStyles } from 'react-data-table-component';\r\nimport { useAsyncValue } from 'react-router-dom-v5-compat';\r\nimport { createEmptyModels } from '@app/Common';\r\nimport Loader from '@app/Components/Loader';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport { iconPaths } from '@app/Constants';\r\nimport './style.scss';\r\n\r\ninterface ITableProps {\r\n columns: TableColumn[];\r\n data: TModel[];\r\n noDataElement: ReactElement;\r\n loading?: boolean;\r\n hasMore?: boolean;\r\n loadingMore?: boolean;\r\n customStyles?: TableStyles;\r\n conditionalRowStyles?: ConditionalStyles[];\r\n hideResultMessage?: boolean;\r\n noTableHead?: boolean;\r\n}\r\n\r\nexport function Table(props: ITableProps) {\r\n const initialData = props.data ? props.data : (useAsyncValue() as TModel[] | undefined | null);\r\n const noData = !props.loading && initialData?.length === 0;\r\n\r\n const emptyLoaderData = useMemo(() => createEmptyModels(10), []);\r\n const lightGray2 = '#f2f4f5';\r\n\r\n let customStyles: TableStyles = {\r\n headCells: {\r\n style: {\r\n backgroundColor: lightGray2,\r\n fontSize: '13px',\r\n fontWeight: 'bold',\r\n },\r\n },\r\n rows: {\r\n style: {\r\n backgroundColor: lightGray2,\r\n },\r\n },\r\n };\r\n\r\n if (props.customStyles) {\r\n customStyles = {\r\n ...props.customStyles,\r\n headCells: { ...customStyles.headCells },\r\n rows: { ...customStyles.rows, ...props.customStyles.rows },\r\n };\r\n }\r\n\r\n if (noData) {\r\n return props.noDataElement;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n {props.loadingMore && }\r\n\r\n {!props.loading && !props.loadingMore && !props.hideResultMessage && (\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nfunction ResultCountMessage({ hasMore }: { hasMore: boolean }) {\r\n return (\r\n
\r\n {hasMore && }\r\n\r\n {!hasMore && }\r\n\r\n {hasMore ? 'Scroll down to load more data' : 'All data loaded'}\r\n
\r\n );\r\n}\r\n","import { FormEvent, useContext, useMemo } from 'react';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport { isAdmin, isAtLeastAgent, isLimitedAgentUser } from '@app/Common';\r\nimport { useBindQuoteRedirect } from '@app/SinglePageApplication/Hooks/BindQuoteRedirect';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { BindButtonProps } from './models';\r\n\r\nexport function useBindButton(props: BindButtonProps) {\r\n const { quote } = props,\r\n { update } = useContext(StateContext),\r\n isDisabled = useMemo(isBindButtonDisabled, [quote]),\r\n isUrq = useMemo(\r\n () => isAdmin() && quote.ImsPolicyNumber && !ProductLine.matches(quote.ProductLineId, ProductLine.Flood),\r\n [quote],\r\n ),\r\n { bindQuoteRedirect } = useBindQuoteRedirect();\r\n\r\n return {\r\n isUrq,\r\n isDisabled,\r\n submit,\r\n };\r\n\r\n function isBindButtonDisabled() {\r\n // Anonymous users and limited agent users cannot bind quotes\r\n if (!isAtLeastAgent() || isLimitedAgentUser()) return true;\r\n\r\n // Quotes with premium errors present cannot be bound\r\n if (quote.QuotePremiumErrors.length > 0) return true;\r\n\r\n // Purchased quotes, readonly quotes, or quotes with a $0 premium (indicating a soft decline) cannot be bound\r\n return quote.IsPurchased || quote.IsReadOnly || quote.GrossAnnualPayment === 0;\r\n }\r\n\r\n async function submit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n try {\r\n update(state => (state.quoteId = quote.QuoteId));\r\n bindQuoteRedirect(quote.QuoteId);\r\n } catch (e) {\r\n update(state => (state.error = e));\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { GetUrqButton } from '@app/SinglePageApplication/Components/GetUrqButton';\r\nimport { Button } from '@swyfft/webkit';\r\nimport { useBindButton } from './hook';\r\nimport { BindButtonProps } from './models';\r\n\r\nexport function BindButton(props: BindButtonProps) {\r\n const { isUrq, isDisabled, submit } = useBindButton(props);\r\n\r\n // Admin users viewing purchased quotes get a URQ access point instead of a bind button\r\n // TODO: Remove logic hiding this for flood when URQ is ready for Flood - see SW-26253\r\n return isUrq ?\r\n \r\n :
\r\n \r\n
;\r\n}\r\n","import { useContext, useRef } from 'react';\r\nimport { ToastContext } from '@app/Hooks';\r\nimport { useEmailQuote } from '@app/SinglePageApplication/EmailQuote';\r\nimport { EmailButtonProps } from './models';\r\n\r\nexport function useEmailButton(props: EmailButtonProps) {\r\n const { quote, quoteCount, disabled } = props,\r\n triggerRef = useRef(null),\r\n isDisabled = disabled || quote.IsReadOnly,\r\n toast = useContext(ToastContext),\r\n // This hook has some reusable logic that is used in multiple places.\r\n emailQuote = useEmailQuote(quote, toast, quoteCount);\r\n\r\n return {\r\n triggerRef,\r\n isDisabled,\r\n emailQuote,\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { IconLink } from '@app/Components/IconLink';\r\nimport { iconPaths } from '@app/Constants';\r\nimport { EmailQuoteForm } from '@app/SinglePageApplication/EmailQuote';\r\nimport { useEmailButton } from './hook';\r\nimport { EmailButtonProps } from './models';\r\nimport './style.scss';\r\n\r\n/** Button that opens a popup with a form to email a quote. */\r\nexport function EmailButton(props: EmailButtonProps) {\r\n const { quote } = props,\r\n { triggerRef, isDisabled, emailQuote } = useEmailButton(props),\r\n { setVisible, loading } = emailQuote;\r\n\r\n return (\r\n <>\r\n {/* The button that triggers the popup to open. */}\r\n setVisible(true)}\r\n disabled={isDisabled}\r\n loading={loading}\r\n >\r\n Email\r\n \r\n\r\n {/* The form that pops up when the button is clicked. */}\r\n \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { iconPaths } from '@app/Constants';\r\nimport { IconLink } from '@app/Components/IconLink';\r\nimport { QuoteHistoryModal } from '@app/ProductComparison/QuoteHistoryModal';\r\n\r\ninterface HistoryButtonProps {\r\n quoteId: string;\r\n address: string | null;\r\n}\r\n\r\nexport function HistoryButton({ quoteId, address }: HistoryButtonProps) {\r\n const [visible, setVisible] = React.useState(false);\r\n\r\n return (\r\n <>\r\n setVisible(true)}\r\n >\r\n History\r\n \r\n\r\n setVisible(false)}\r\n />\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { isAtLeastAgent, isLimitedAgentUser } from '@app/Common';\r\nimport { IconLink } from '@app/Components/IconLink';\r\nimport { iconPaths, QuotePremiumErrorHeaders } from '@app/Constants';\r\nimport { ToastContext } from '@app/Hooks';\r\nimport { usePrintQuote } from '@app/SinglePageApplication/PrintQuote/Print';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport { Button } from '@swyfft/webkit';\r\nimport { PrintButtonProps } from './models';\r\n\r\nexport function PrintButton({ quote, iconLink, disabled }: PrintButtonProps) {\r\n const { state } = useContext(StateContext),\r\n toast = useContext(ToastContext),\r\n { product } = useParams(),\r\n productLine = ProductLine.parse(product);\r\n\r\n const [print, printLoading] = usePrintQuote(state.comparisonModel, quote.QuoteId, toast.error, productLine),\r\n isAgent = isAtLeastAgent(),\r\n isLimitedAgent = isLimitedAgentUser(),\r\n hasOnlyMoratoriaError =\r\n quote.QuotePremiumErrors.length === 1 &&\r\n quote.QuotePremiumErrors.some(e => e.Header === QuotePremiumErrorHeaders.PurchaseMoratorium),\r\n printDisabled =\r\n // Disable if explicitly disabled by property\r\n disabled ||\r\n // Disable if not an agent\r\n !isAgent ||\r\n // Disable if is a limited agent\r\n isLimitedAgent ||\r\n // Disable if there is no premium\r\n quote.AnnualPremium === 0 ||\r\n // Disable if quote is purchased\r\n quote.IsPurchased ||\r\n // Disable if there are premium errors other than a moratoria error\r\n (quote.QuotePremiumErrors.length > 0 && !hasOnlyMoratoriaError);\r\n\r\n return iconLink ?\r\n \r\n Print\r\n \r\n : \r\n Print\r\n ;\r\n}\r\n","import * as React from 'react';\r\nimport { iconPaths, QrgLinks } from '@app/Constants';\r\nimport { IconLink } from '@app/Components/IconLink';\r\nimport { navigateOnNewTab } from '@app/Common';\r\nimport { useMemo } from 'react';\r\nimport { CarrierCode, ProductLine } from '@business/CommonSets';\r\n\r\ninterface QRGButtonProps {\r\n quoteId: string;\r\n stateCode: string;\r\n carrierCode: CarrierCode;\r\n productLine: ProductLine;\r\n}\r\n\r\nexport function QRGButton({ quoteId, stateCode, carrierCode, productLine }: QRGButtonProps) {\r\n const qrgLink = useMemo(() => getQrgLink(), [productLine, stateCode, carrierCode]);\r\n\r\n return !!qrgLink ?\r\n navigateOnNewTab(qrgLink)}\r\n >\r\n QRG\r\n \r\n : <>;\r\n\r\n function getQrgLink() {\r\n return QrgLinks[productLine.key]?.[stateCode]?.[carrierCode.value];\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { IconLink } from '@app/Components/IconLink';\r\nimport { iconPaths } from '@app/Constants';\r\nimport { useNavigateWithParams } from '@app/Hooks';\r\nimport { getQuotePath, Path } from '@app/SinglePageApplication/Views';\r\nimport { TrackingEvent } from '@app/TrackingEvents';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport { Button } from '@swyfft/webkit';\r\n\r\ninterface ViewButtonProps {\r\n quoteId: string;\r\n product: ProductLine;\r\n iconLink?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function ViewButton({ quoteId, product: productLine, iconLink, disabled }: ViewButtonProps) {\r\n const navigate = useNavigateWithParams();\r\n\r\n return iconLink ?\r\n \r\n View\r\n \r\n : ;\r\n\r\n function viewQuote() {\r\n // This button is only ever shown for multiple quotes, which is why we use 2 below\r\n const trackingStep = getQuotePath(2);\r\n TrackingEvent.trackSinglePageApplication(trackingStep, 'view_quote_button_clicked');\r\n navigate(Path.Customize, { quoteId, product: productLine.lowercaseName });\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { clsx } from 'clsx';\r\nimport { isAtLeastAgent, isLimitedAgentUser } from '@app/Common';\r\nimport { getRatingTypeColor } from '@app/ProductComparison/ColorScheme';\r\nimport { Logo } from '@app/ProductComparison/Logo';\r\nimport { Price } from '@app/ProductComparison/Price';\r\nimport { BindButton } from '@app/SinglePageApplication/Components/TileHeader/BindButton';\r\nimport { EmailButton } from '@app/SinglePageApplication/Components/TileHeader/EmailButton';\r\nimport { HistoryButton } from '@app/SinglePageApplication/Components/TileHeader/HistoryButton';\r\nimport { PrintButton } from '@app/SinglePageApplication/Components/TileHeader/PrintButton';\r\nimport { QRGButton } from '@app/SinglePageApplication/Components/TileHeader/QRGButton';\r\nimport { ViewButton } from '@app/SinglePageApplication/Components/TileHeader/ViewButton';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { CarrierCode, ProductLine, RatingType } from '@business/CommonSets';\r\nimport { TileHeaderProps } from './models';\r\nimport './style.scss';\r\n\r\nexport function TileHeader({ quote }: TileHeaderProps) {\r\n const { state } = React.useContext(StateContext),\r\n totalTiles = state.visibleQuoteIds.length || 0,\r\n quoteProperty = state.comparisonModel?.QuoteProperty,\r\n carrierCode = CarrierCode.parse(quote.CarrierCode),\r\n ratingType = RatingType.parse(quote.RatingType);\r\n\r\n const isAgent = isAtLeastAgent(),\r\n isLimitedAgent = isLimitedAgentUser();\r\n\r\n const columnClassName = clsx('quote-tile-header-column', [totalTiles === 1 ? 'single-tile' : '']);\r\n\r\n const { product } = useParams(),\r\n productLine = ProductLine.parse(product);\r\n\r\n return (\r\n
\r\n \r\n
\r\n {ratingType.displayValue}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n 0 ? <>Includes Taxes & Fees : <>Premium unavailable}\r\n />\r\n\r\n
\r\n \r\n {totalTiles > 1 && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n\r\n {isAgent && !isLimitedAgent && (\r\n
\r\n {quoteProperty && (\r\n <>\r\n {!quote.IsPurchased && }\r\n\r\n \r\n\r\n \r\n \r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n}\r\n","/** The duration of the transition for entering and exiting a route. */\r\nexport const transitionDuration = 200;\r\n","import { useState } from 'react';\r\nimport { emailQuote } from '@app/Api/EmailApi';\r\nimport { ToastActions, useFormReducer } from '@app/Hooks';\r\nimport { ComparisonQuoteModel } from '@app/Models';\r\nimport { TrackingEvent } from '@app/TrackingEvents';\r\nimport { CarrierCode } from '@business/CommonSets';\r\nimport { Rules, Value } from '@swyfft/webkit';\r\nimport { getQuotePath } from '../Views';\r\nimport './style.scss';\r\n\r\nexport const useEmailQuote = (quote: ComparisonQuoteModel, toast: ToastActions, quoteCount: number) => {\r\n const [loading, setLoading] = useState(false),\r\n [visible, setVisible] = useState(false),\r\n { form, set, valid, revert } = useFormReducer({\r\n email: new Value('email address', '', [Rules.required(), Rules.email()]),\r\n phone: new Value('phone number', '', [Rules.phone()]),\r\n message: new Value('message', '', [Rules.maxLength(500)]),\r\n });\r\n\r\n return {\r\n visible,\r\n setVisible,\r\n loading,\r\n form,\r\n set,\r\n valid,\r\n onCancel,\r\n onSubmit,\r\n };\r\n\r\n function onCancel() {\r\n setVisible(false);\r\n revert();\r\n }\r\n\r\n async function onSubmit() {\r\n setVisible(false);\r\n setLoading(true);\r\n\r\n try {\r\n await emailQuote(quote.QuoteId, {\r\n Email: form.email.content,\r\n Phone: form.phone.content,\r\n Message: form.message.content,\r\n ProductLineId: quote.ProductLineId,\r\n });\r\n await toast.success(\r\n `${CarrierCode.parse(quote.CarrierCode).displayName} quote successfully sent to ${form.email.content}.`,\r\n );\r\n revert();\r\n TrackingEvent.trackSinglePageApplication(getQuotePath(quoteCount), 'email');\r\n } catch (e) {\r\n await toast.error('There was a problem emailing the quote. Please try again later.');\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n};\r\n","import * as React from 'react';\r\nimport { useFetcher } from 'react-router-dom-v5-compat';\r\nimport { FormEvent, FunctionComponent, RefObject } from 'react';\r\nimport { Text, Modal, Button, ModalRow, DesignContext } from '@swyfft/webkit';\r\nimport { useEmailQuote } from '@app/SinglePageApplication/EmailQuote/Email';\r\nimport { ComparisonQuoteModel } from '@app/Models';\r\n\r\ninterface Props {\r\n quote: ComparisonQuoteModel;\r\n emailQuote: ReturnType;\r\n className?: string;\r\n triggerRef: RefObject;\r\n}\r\n\r\nexport const EmailQuoteForm: FunctionComponent = props => {\r\n const fetcher = useFetcher();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n props.emailQuote.set('email', value)}\r\n placeholder='Email Address...'\r\n />\r\n \r\n\r\n \r\n props.emailQuote.set('phone', value)}\r\n placeholder='Phone Number (optional)...'\r\n />\r\n \r\n\r\n \r\n props.emailQuote.set('message', value)}\r\n placeholder='Message (optional)...'\r\n />\r\n \r\n\r\n
\r\n \r\n\r\n \r\n Send Email\r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n\r\n async function onSubmit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n if (props.emailQuote.visible && props.emailQuote.valid()) await props.emailQuote.onSubmit();\r\n }\r\n};\r\n","export { useEmailQuote } from './Email';\r\nexport { EmailQuoteForm } from './Form';\r\n","import { useContext } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { CarrierCode, ProductLine } from '@app/Business/CommonSets';\r\nimport { navigate } from '@app/Common';\r\nimport { pages } from '@app/Constants';\r\nimport { useRedirect } from '@app/Hooks';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { getQuotePath, Path } from '@app/SinglePageApplication/Views';\r\nimport { setQuoteId } from '@app/Storage';\r\nimport { TrackingEvent } from '@app/TrackingEvents';\r\n\r\n/**\r\n * A hook responsible for determining where to send the user when the bind quote button is clicked.\r\n * - If the quote is a commercial quote and the legacy commercial quote page is enabled, send the user there.\r\n * - If the quote is a Vave homeowner quote, send the user to the underwriting guidelines page.\r\n * - If the quote has no required elements or important notices, send the user directly to the purchase page.\r\n * - Otherwise, send the user to the confirm quote page.\r\n *\r\n * @returns An object containing `bindQuoteRedirect`, a function used to redirect the user to the appropriate page.\r\n */\r\nexport function useBindQuoteRedirect() {\r\n const application = useContext(StateContext),\r\n params = useParams(),\r\n redirect = useRedirect();\r\n\r\n return { bindQuoteRedirect };\r\n\r\n async function bindQuoteRedirect(quoteId: string) {\r\n TrackingEvent.trackSinglePageApplication(\r\n getQuotePath(application.state.comparisonModel?.Quotes.length),\r\n 'bind',\r\n );\r\n\r\n const quote = application.state.comparisonModel?.Quotes.find(quote => quote.QuoteId === quoteId),\r\n product = params.product;\r\n\r\n if (!quote) throw new Error(`Quote with ID ${quoteId} not found.`);\r\n if (!product) throw new Error('Product not specified.');\r\n\r\n // Commercial quotes should be directed to the commercial bind quote page.\r\n const productLine = ProductLine.parse(product);\r\n if (productLine === ProductLine.Commercial) {\r\n setQuoteId(quote.QuoteId);\r\n navigate(pages.CommBindQuote);\r\n return;\r\n }\r\n\r\n // Homeowner Vave quotes require underwriting guidelines to be accepted before binding.\r\n if (productLine === ProductLine.Homeowner && CarrierCode.parse(quote.CarrierCode) === CarrierCode.Vave) {\r\n redirect(Path.UnderwritingGuidelines, { quoteId: quote.QuoteId, product });\r\n return;\r\n }\r\n\r\n // If there are no required elements or important notices for this quote, we can skip directly to the purchase page.\r\n // Note that we check the current required elements for a quote rather thant the state.staticRequiredElements in case all the elements have been changed\r\n // in which case we can skip the confirmation view - Darius 5/30/23 SW-23664.\r\n const importantNoticesForQuote = application.state.importantNotices.find(\r\n notice => notice.quoteId === quote.QuoteId,\r\n );\r\n\r\n if (!quote.ConfirmationElementNames?.length && !importantNoticesForQuote?.importantNotices.length) {\r\n navigate(pages.PurchaseWithProduct(ProductLine.parse(product), quote.QuoteId));\r\n return;\r\n }\r\n\r\n // Otherwise, we need to go to the confirm quote view.\r\n redirect(Path.ConfirmQuote, { quoteId: quote.QuoteId, product });\r\n }\r\n}\r\n","'use strict';\r\nimport * as React from 'react';\r\nimport { handleGeneralError, renderComponent } from '@app/Common';\r\nimport { init } from '@app/Main';\r\nimport { App } from './App';\r\n\r\ninit();\r\n\r\ntry {\r\n renderComponent();\r\n} catch (e) {\r\n handleGeneralError(e);\r\n}\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport { ElementGroupNames } from '@app/Constants';\r\nimport { Group } from '@app/SinglePageApplication/PrintQuote/Components/Group';\r\nimport { mapElementGroupToPrintedQuote } from '@app/SinglePageApplication/PrintQuote/Components/MapElementGroupToPrintedQuote';\r\nimport { PrintQuoteContext } from '@app/SinglePageApplication/PrintQuote/Context';\r\nimport { ProductLine } from '@business/CommonSets';\r\n\r\nexport function CoverPageGroups() {\r\n const { comparisonModel: quotes, quote, quoteId, productLine } = useContext(PrintQuoteContext),\r\n coverPageGroups = [\r\n ElementGroupNames.Deductibles,\r\n ElementGroupNames.PropertyCoverages,\r\n ElementGroupNames.AdditionalCoverages,\r\n ];\r\n\r\n // Flood can be condensed to a single page and include construction risk characteristics group\r\n if (productLine === ProductLine.Flood) {\r\n coverPageGroups.push(ElementGroupNames.ConstructionRiskCharacteristics);\r\n }\r\n\r\n return (\r\n <>\r\n {coverPageGroups.map(group => (\r\n \r\n {mapElementGroupToPrintedQuote(quotes, quoteId, quote, group)}\r\n \r\n ))}\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport { Colors, FontSizes, Paragraph, SubText } from '@app/Components/ReactToPdf';\r\nimport { simpleDateFormat } from '@app/Constants';\r\nimport { PrintQuoteContext } from '@app/SinglePageApplication/PrintQuote/Context';\r\nimport { CarrierCode, RatingType } from '@business/CommonSets';\r\n\r\nexport function Disclaimers() {\r\n const { comparisonModel: quotes, quote, mepDisclaimer } = useContext(PrintQuoteContext),\r\n quoteValidUntilDate = dayjs(quote.ExpiresOn).subtract(1, 'day').format(simpleDateFormat),\r\n carrierCode = CarrierCode.parse(quote.CarrierCode),\r\n ratingType = RatingType.parse(quote.RatingType),\r\n financialRating = carrierCode.getFinancialRating();\r\n\r\n return (\r\n <>\r\n
\r\n \r\n Thank you for the opportunity to offer a quotation on this risk. Please review the attached\r\n quotation carefully as the terms and conditions offered may be different from those requested in\r\n your submission for insurance. This quotation is valid until {quoteValidUntilDate}{' '}\r\n or until the inception date of the policy, whichever comes first.\r\n \r\n
\r\n\r\n {ratingType.switch({\r\n onAdmitted: () => <>,\r\n onEAndS: () => (\r\n \r\n {carrierCode.displayName} is a surplus lines insurer\r\n {financialRating ? ` and is ${financialRating.displayName}` : ''}.\r\n \r\n ),\r\n onNfip: () => <>,\r\n })}\r\n\r\n \r\n Please note if this offer is accepted, the insurance policy, not this proposal, will form the contract\r\n between the insured and the insurance company. In the event of a discrepancy between the proposal and\r\n the insurance policy, the policy will dictate the terms of coverage.\r\n \r\n\r\n \r\n This quote is not a binder. Coverage is not bound until you receive acknowledgment and acceptance from{' '}\r\n {carrierCode.displayName} in the form of a fully issued policy.\r\n \r\n\r\n {ratingType.switch({\r\n onAdmitted: () => <>,\r\n onEAndS: () => (\r\n \r\n † Minimum Earned Premium Disclosure: {mepDisclaimer}\r\n \r\n ),\r\n onNfip: () => <>,\r\n })}\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { PropsWithChildren } from 'react';\r\nimport { FontSizes, Heading2, Table } from '@app/Components/ReactToPdf';\r\n\r\ninterface GroupProps {\r\n label: string;\r\n margin?: string;\r\n children;\r\n}\r\n\r\nexport function Group({ label, margin, children }: PropsWithChildren) {\r\n return (\r\n \r\n \r\n {label}\r\n \r\n\r\n {children}\r\n
\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { FontSizes, ITableRowProps, TableRow } from '@app/Components/ReactToPdf/Components';\r\n\r\nexport function GroupRow({ label, data }: ITableRowProps) {\r\n return (\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { PropsWithChildren } from 'react';\r\n\r\nexport function LogoBlock({ children }: PropsWithChildren<{ children }>) {\r\n return (\r\n
\r\n \r\n\r\n
{children}
\r\n
\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { ReactElement, useContext } from 'react';\r\nimport { GroupRow } from '@app/SinglePageApplication/PrintQuote/Components/GroupRow';\r\nimport { ElementNames, ElementTemplateTypes } from '@app/Constants';\r\nimport { formatElementValue } from '@app/ProductComparison/Hooks/UseElement';\r\nimport { ComparisonQuoteModel, ComparisonQuotesModel } from '@app/Models';\r\nimport { PrintQuoteContext } from '@app/SinglePageApplication/PrintQuote/Context';\r\nimport { stripExtraQuoteElementLabelParts } from '@app/Common';\r\nimport { CarrierCode, ElementGroupName, StateCode } from '@business/CommonSets';\r\nimport { getComparisonElementFromComparisonModel, getElementGroupByName } from '@app/Common/ComparisonQuoteHelpers';\r\nimport { adjustElementsForPrintedQuote } from '../Helpers';\r\n\r\n/* Handles mapping quote element groups and their elements to be formatted properly for the printed quote.\r\nThere are also cases where we have to add hard-coded elements not present in the quote data to the printed quote due to differences in business requirements between the data structures, UI, and the printed quote. */\r\nexport function mapElementGroupToPrintedQuote(\r\n quotes: ComparisonQuotesModel,\r\n quoteId: string,\r\n quote: ComparisonQuoteModel,\r\n groupName: string,\r\n): (ReactElement | null)[] | null {\r\n const { productLine } = useContext(PrintQuoteContext),\r\n carrierCode = CarrierCode.parse(quote.CarrierCode),\r\n elementGroupName = ElementGroupName.parse(groupName),\r\n elementGroup = getElementGroupByName(quotes, elementGroupName),\r\n stateCode = StateCode.parse(quotes.QuoteProperty?.StateCode || '');\r\n\r\n const adjustedElements = adjustElementsForPrintedQuote(\r\n quoteId,\r\n quotes,\r\n productLine,\r\n carrierCode,\r\n stateCode,\r\n elementGroup,\r\n );\r\n\r\n return adjustedElements.map(comparisonElements => {\r\n const comparisonElementModel = comparisonElements.Elements.find(el => el.QuoteId === quoteId);\r\n if (!comparisonElementModel) {\r\n return null;\r\n }\r\n\r\n // SW-26325 - This is here to strip any extra quote element label parts out to handle Prior Claims for single Vave quotes\r\n // (An element can be passed down with the label \"Prior Claims Stub (Ignore)\" for single quotes, whereas for multiple quotes the element would get wrapped\r\n // in a ComparisonElementsModel labeled \"Prior Claims\" and if we filter out all elements with stub we won't be able to render this claims element properly,\r\n // see below where we map the value of ComparisonQuoteModel.Claims to the prior claims stub element value)\r\n const formattedLabel = stripExtraQuoteElementLabelParts(comparisonElements.ElementDisplay);\r\n\r\n // Initialize the formatted value as the element value\r\n let formattedValue = comparisonElementModel.Value;\r\n\r\n // Format the value for choice elements by selecting the choice Name property and defaulting to 'Not Specified' if the choice's value does not match\r\n // the element value, or is not there\r\n if (comparisonElementModel.ElementType === ElementTemplateTypes.Choice) {\r\n formattedValue =\r\n comparisonElementModel.Choices.find(choice => choice.Value === comparisonElementModel.Value)?.Name ||\r\n 'Not Specified';\r\n }\r\n\r\n // Map true or false values to Yes or No\r\n switch ((formattedValue || '').toLowerCase()) {\r\n case 'true':\r\n formattedValue = 'Yes';\r\n break;\r\n case 'false':\r\n formattedValue = 'No';\r\n break;\r\n }\r\n\r\n // Format the num losses element value to the raw element value or 'Not Specified' if it is not there\r\n if (comparisonElementModel.ElementName === ElementNames.numLosses) {\r\n formattedValue = !!comparisonElementModel.Value ? comparisonElementModel.Value : 'Not Specified';\r\n }\r\n\r\n // SW-26325 - The prior claims element for Vave is a \"stub\" so we have to get the value here from the\r\n // ComparisonQuoteModel.Claims value instead of the element itself (see related comment up above with the same ticket number for more info)\r\n if (comparisonElementModel.ElementName === ElementNames.PriorClaims) {\r\n formattedValue = quote.Claims.length.toString();\r\n }\r\n\r\n // SW-29817 - If the loss of use value is 0, mark it as excluded on the printed quote\r\n if (comparisonElementModel.ElementName === ElementNames.coverageDLimit) {\r\n const lossOfUse = getComparisonElementFromComparisonModel(\r\n quotes,\r\n ElementNames.coverageDLimit,\r\n quote.QuoteId,\r\n );\r\n if (lossOfUse?.Value !== null && lossOfUse?.Value === '0') {\r\n // The formatElementValue function will override this string because coverage D is a number type, so we render a different group row here\r\n return ;\r\n }\r\n }\r\n\r\n return (\r\n \r\n );\r\n });\r\n}\r\n","import * as React from 'react';\r\nimport { PropsWithChildren } from 'react';\r\nimport { Column } from '@app/Components/ReactToPdf';\r\n\r\nexport function PageContent({ children }: PropsWithChildren<{ children }>) {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport { Colors, FontSizes, Heading1, SubText } from '@app/Components/ReactToPdf';\r\nimport { LogoBlock } from '@app/SinglePageApplication/PrintQuote/Components/LogoBlock';\r\nimport { PrintQuoteContext } from '@app/SinglePageApplication/PrintQuote/Context';\r\nimport { CarrierCode } from '@business/CommonSets';\r\n\r\nexport function PageHeader() {\r\n const { quote, productLine } = useContext(PrintQuoteContext),\r\n productName = productLine.value,\r\n carrierCode = CarrierCode.parse(quote.CarrierCode),\r\n financialRating = carrierCode.getFinancialRating();\r\n\r\n return (\r\n \r\n \r\n {productName} Insurance Proposal\r\n \r\n\r\n \r\n {carrierCode.displayName}\r\n \r\n\r\n {financialRating && (\r\n \r\n {financialRating.displayName}\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport * as localizedFormat from 'dayjs/plugin/localizedFormat';\r\nimport { PropsWithChildren, useContext } from 'react';\r\nimport { dateTimeLocalizedFormat } from '@app/Constants';\r\nimport { PageContent } from '@app/SinglePageApplication/PrintQuote/Components/PageContent';\r\nimport { PageHeader } from '@app/SinglePageApplication/PrintQuote/Components/PageHeader';\r\nimport { PageSidebar } from '@app/SinglePageApplication/PrintQuote/Components/PageSidebar';\r\nimport { Page } from '@app/Components/ReactToPdf';\r\nimport { PrintQuoteContext } from '@app/SinglePageApplication/PrintQuote/Context';\r\n\r\ndayjs.extend(localizedFormat);\r\n\r\ninterface PageLayoutProps {\r\n currentPage: number;\r\n children;\r\n}\r\n\r\nexport function PageLayout({ currentPage, children }: PropsWithChildren) {\r\n const { quoteId, pageCount } = useContext(PrintQuoteContext),\r\n currentDateTime = dayjs().format(dateTimeLocalizedFormat),\r\n timestamp = `${quoteId} | ${currentDateTime}`;\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n {children}\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { FunctionComponent, useContext } from 'react';\r\nimport QRCode from 'react-qr-code';\r\nimport * as dayjs from 'dayjs';\r\nimport { parsePhoneNumber } from 'libphonenumber-js';\r\nimport { AppSetting, getStringAppSetting } from '@app/AppSetting';\r\nimport { getInsuredFullName, isAtLeastAgent } from '@app/Common';\r\nimport { Colors, Column, FontSizes, IconLockup } from '@app/Components/ReactToPdf';\r\nimport { simpleDateFormat } from '@app/Constants';\r\nimport { getPath, Path } from '@app/SinglePageApplication/Views';\r\nimport { getLoginDetails } from '@app/Storage';\r\nimport { PrintQuoteContext } from '../Context';\r\nimport { Disclaimers } from './Disclaimers';\r\nimport { Premium } from './Premium';\r\nimport { SidebarLockup } from './SidebarLockup';\r\n\r\nexport const PageSidebar: FunctionComponent = () => {\r\n const { comparisonModel: quotes, quote, quoteId, productLine } = useContext(PrintQuoteContext),\r\n isAgent = isAtLeastAgent(),\r\n agentDetails = getLoginDetails(),\r\n baseUrl = getStringAppSetting(AppSetting.BaseUrl),\r\n product = productLine.lowercaseName,\r\n // This link is intended for insureds and so will only go to the single quote view\r\n // We have to remove the trailing slash from the base url to make this work\r\n quoteUrl = baseUrl.slice(0, -1) + getPath(Path.Customize, { quoteId, product }),\r\n createdOnDate = dayjs(quote.CreatedOn).format(simpleDateFormat),\r\n // Valid until date should be one day before the expiration date\r\n validUntilDate = dayjs(quote.ExpiresOn).subtract(1, 'day').format(simpleDateFormat),\r\n // We need to remove special characters for rendering in Aspose html\r\n producerLocationName = quote.ProducerLocationName?.replace(/&/g, 'and');\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {createdOnDate}\r\n\r\n {validUntilDate}\r\n\r\n {producerLocationName}\r\n\r\n {isAgent && agentDetails && (\r\n <>\r\n {agentDetails.agentName}\r\n\r\n {agentDetails.agentPhoneNumber && (\r\n \r\n {parsePhoneNumber(agentDetails.agentPhoneNumber, 'US').format('NATIONAL')}\r\n \r\n )}\r\n\r\n \r\n {agentDetails.userName}\r\n \r\n \r\n )}\r\n\r\n {!!quote.InsuredNameFirst && !!quote.InsuredNameLast && (\r\n {getInsuredFullName(quote)}\r\n )}\r\n\r\n {quotes.QuoteProperty?.FullAddress || ''}\r\n\r\n \r\n \r\n View Quote Online\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n );\r\n\r\n function getEmailFontSize() {\r\n const emailLength = agentDetails?.userName.length || 0;\r\n if (emailLength > 35) return FontSizes.small1;\r\n if (emailLength > 26) return FontSizes.small2;\r\n return undefined;\r\n }\r\n};\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport { formatGrossAnnualPayment } from '@app/Common';\r\nimport { Colors, FontSizes, Heading1, SubText } from '@app/Components/ReactToPdf';\r\nimport { PrintQuoteContext } from '@app/SinglePageApplication/PrintQuote/Context';\r\n\r\nexport function Premium() {\r\n const { quote } = useContext(PrintQuoteContext);\r\n\r\n return (\r\n \r\n $ \r\n\r\n {formatGrossAnnualPayment(quote.GrossAnnualPayment)}\r\n\r\n Total Premium\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport { ElementGroupNames } from '@app/Constants';\r\nimport { Group } from '@app/SinglePageApplication/PrintQuote/Components/Group';\r\nimport { mapElementGroupToPrintedQuote } from '@app/SinglePageApplication/PrintQuote/Components/MapElementGroupToPrintedQuote';\r\nimport { PrintQuoteContext } from '@app/SinglePageApplication/PrintQuote/Context';\r\n\r\nexport function RiskCharacteristicsGroup() {\r\n const { comparisonModel: quotes, quoteId, quote } = useContext(PrintQuoteContext);\r\n\r\n return (\r\n \r\n {mapElementGroupToPrintedQuote(quotes, quoteId, quote, ElementGroupNames.ConstructionRiskCharacteristics)}\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { CSSProperties, PropsWithChildren } from 'react';\r\nimport { FontWeights, TextLockup } from '@app/Components/ReactToPdf';\r\n\r\ninterface SidebarLockupProps {\r\n label: string;\r\n fontSize?: string;\r\n style?: CSSProperties;\r\n children;\r\n}\r\n\r\nexport function SidebarLockup({ label, fontSize, style, children }: PropsWithChildren) {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","import { RatingType } from '@app/Business/CommonSets';\r\nimport { formatCurrencyUS } from '@app/Common';\r\nimport { Colors, FontSizes, SubText } from '@app/Components/ReactToPdf';\r\nimport { QuoteFeeTypes } from '@app/Constants';\r\nimport { Group } from '@app/SinglePageApplication/PrintQuote/Components/Group';\r\nimport { GroupRow } from '@app/SinglePageApplication/PrintQuote/Components/GroupRow';\r\nimport { PrintQuoteContext } from '@app/SinglePageApplication/PrintQuote/Context';\r\nimport * as React from 'react';\r\nimport { useContext } from 'react';\r\n\r\nexport function TaxesAndFeesGroup() {\r\n const { quote, mepMaxPercentage } = useContext(PrintQuoteContext),\r\n quoteFees = getQuoteFees(),\r\n ratingTYpe = RatingType.parse(quote.RatingType);\r\n\r\n return (\r\n <>\r\n \r\n \r\n\r\n {quoteFees.map(quoteFee => (\r\n }\r\n data={formatCurrencyUS(quoteFee.Value, 2)}\r\n />\r\n ))}\r\n\r\n \r\n \r\n\r\n {/* Fully-earned fees footnote */}\r\n {quoteFees.some(quoteFee => isFullyEarnedFee(quoteFee.DisplayName)) && (\r\n \r\n * Indicates fees fully earned upon binding\r\n \r\n )}\r\n\r\n {ratingTYpe.switch({\r\n onAdmitted: () => <>,\r\n onEAndS: () => (\r\n \r\n This policy contains a Minimum Earned Premium provision of up to {mepMaxPercentage * 100}% †\r\n \r\n ),\r\n onNfip: () => <>,\r\n })}\r\n\r\n
\r\n \r\n );\r\n\r\n function isFullyEarnedFee(displayName: string) {\r\n const feeNameNoCase = displayName.toLowerCase();\r\n return (\r\n feeNameNoCase.includes('policy fee') ||\r\n feeNameNoCase.includes('inspection fee') ||\r\n feeNameNoCase.includes('data fee')\r\n );\r\n }\r\n\r\n /** Fully earned fees have an asterisk applied that ties them to a footnote */\r\n function FeeLabel({ displayName }: { displayName: string }) {\r\n return isFullyEarnedFee(displayName) ? (\r\n \r\n {displayName} *\r\n \r\n ) : (\r\n {displayName}\r\n );\r\n }\r\n\r\n function getQuoteFees() {\r\n // We never show these fees on the printed quote because the user selects payment type later on the purchase page\r\n const filteredQuoteFees = quote.QuoteFees.filter(\r\n ({ Name }) => Name !== QuoteFeeTypes.MonthlyInstallment && Name !== QuoteFeeTypes.CreditCardFee\r\n );\r\n return filteredQuoteFees.sort(({ OrderNumber: a }, { OrderNumber: b }) => a - b);\r\n }\r\n}\r\n","import { createContext } from 'react';\r\nimport { ComparisonQuoteModel, ComparisonQuotesModel } from '@app/Models';\r\nimport { ProductLine } from '@business/CommonSets';\r\n\r\nexport interface IPrintQuoteContext {\r\n comparisonModel: ComparisonQuotesModel;\r\n quoteId: string;\r\n quote: ComparisonQuoteModel;\r\n pageCount: number;\r\n productLine: ProductLine;\r\n mepMaxPercentage: number;\r\n mepDisclaimer: string;\r\n}\r\n\r\nexport const PrintQuoteContext = createContext({} as IPrintQuoteContext);\r\n","import * as React from 'react';\r\nimport { Pages } from './Pages';\r\nimport { PrintQuoteContext } from '@app/SinglePageApplication/PrintQuote/Context';\r\nimport { ProductLine } from '@business/CommonSets';\r\n\r\nexport function Document() {\r\n const { productLine } = React.useContext(PrintQuoteContext),\r\n isFlood = productLine === ProductLine.Flood,\r\n // Flood can be condensed to a single page\r\n pages = isFlood ? Pages.slice(0, 1) : Pages;\r\n\r\n return (\r\n
\r\n {pages.map((page, index) => (\r\n
{page}
\r\n ))}\r\n
\r\n );\r\n}\r\n","import { CarrierCode, ElementGroupName, ProductLine, StateCode } from '@app/Business/CommonSets';\r\nimport { toBoolean } from '@app/Common';\r\nimport {\r\n createHardCodedElement,\r\n getComparisonElementFromComparisonModel,\r\n hasElementWithName,\r\n} from '@app/Common/ComparisonQuoteHelpers';\r\nimport { ElementDisplayNames, ElementNames } from '@app/Constants';\r\nimport {\r\n ComparisonElementGroupModel,\r\n ComparisonElementsModel,\r\n ComparisonQuotesModel,\r\n} from '@app/Models/ComparisonQuoteModels';\r\n\r\nexport function hasStubOrAdminElement(comparisonElement: ComparisonElementsModel) {\r\n const elementDisplay = comparisonElement.ElementDisplay.toLowerCase();\r\n\r\n // SW-26325 - We can't filter out the Prior Claims Stub because we need it for Vave single quote models in order to render the prior claims info\r\n // on the printed quote (see related comments up above with the same ticket number for more info)\r\n const isStubElement = elementDisplay.includes('stub') && !elementDisplay.includes('claims');\r\n\r\n // SW-26664 - Additional Replacement Cost is an admin only element, but if it is set to a value other than None, we want to display it on the printed quote\r\n // SW-27920 - Fixed the attempt to handle this case on the backend (SW-26664) which removed the (Admin Only) label from the element display. Instead of removing that\r\n // from all Admin elements to fix this issue, we should just handle the case here as it is specific to the printed quote requirements.\r\n const hasAdditionalReplacementCost =\r\n elementDisplay.includes(ElementDisplayNames.AdditionalReplacementCost.toLowerCase()) &&\r\n comparisonElement.Elements[0].Value?.toLowerCase() !== 'none';\r\n\r\n // If an element is Admin Only (and not Additional Replacement Cost with a value other than None), we don't want to display it on the printed quote\r\n const isAdminElement = !hasAdditionalReplacementCost && elementDisplay.includes('admin');\r\n\r\n return isStubElement || isAdminElement;\r\n}\r\n\r\nexport function adjustElementsForPrintedQuote(\r\n quoteId: string,\r\n quotes: ComparisonQuotesModel,\r\n productLine: ProductLine,\r\n carrierCode: CarrierCode,\r\n stateCode: StateCode,\r\n elementGroup: ComparisonElementGroupModel,\r\n) {\r\n const elementGroupName = ElementGroupName.parse(elementGroup.ElementGroupName);\r\n\r\n // Remove any admin and stub elements we don't want to display on the printed quote (it is agent facing only)\r\n let adjustedElements = elementGroup.ComparisonElements.filter(el => !hasStubOrAdminElement(el));\r\n\r\n // Adjust with product variations\r\n productLine.switch({\r\n onHomeowner,\r\n onFlood,\r\n onCommercial: productLine.throwNotImplementedError,\r\n onGrc: productLine.throwNotImplementedError,\r\n });\r\n\r\n return adjustedElements;\r\n\r\n function onHomeowner() {\r\n elementGroupName.switch({\r\n onPropertyCoverages,\r\n onAdditionalCoverages,\r\n onDeductibles,\r\n onDefault: doNothing,\r\n });\r\n\r\n function onPropertyCoverages() {\r\n // Add Replacement Cost Settlement element to Property Coverages for all Homeowner printed quotes\r\n adjustedElements.push(\r\n createHardCodedElement(\r\n quoteId,\r\n 'Personal Property - Replacement Cost Settlement',\r\n 'ReplacementCostSettlement',\r\n 'Yes',\r\n ),\r\n );\r\n\r\n carrierCode.switch({\r\n onBenchmark,\r\n onBenchmarkSpecialty: onTopaAndBenchmarkSpecialty,\r\n onTopa: onTopaAndBenchmarkSpecialty,\r\n onDorchester,\r\n onVave: doNothing,\r\n onClearBlue: doNothing,\r\n onClearBlueSpecialty: doNothing,\r\n onHiscox: doNothing,\r\n onNfip: doNothing,\r\n onBrit: doNothing,\r\n });\r\n\r\n function onBenchmark() {\r\n stateCode.switch({\r\n // Add RMPS element for Benchmark AL, MA, TX\r\n onAl: addRmpsElement,\r\n onMa: addRmpsElement,\r\n onTx: addRmpsElement,\r\n onDefault: doNothing,\r\n });\r\n }\r\n\r\n function onTopaAndBenchmarkSpecialty() {\r\n stateCode.switch({\r\n // Add RSPS for Topa FL, LA, TX\r\n onFl: addRspsElement,\r\n onLa: addRspsElement,\r\n onTx: addRspsElement,\r\n // Add RMPS for Topa AL, MA\r\n onAl: addRmpsElement,\r\n onMa: addRmpsElement,\r\n onDefault: doNothing,\r\n });\r\n }\r\n\r\n function onDorchester() {\r\n stateCode.switch({\r\n // Add RSPS for Dorchester MS\r\n onMs: addRspsElement,\r\n onDefault: doNothing,\r\n });\r\n }\r\n\r\n function addRmpsElement() {\r\n adjustedElements.push(\r\n createHardCodedElement(\r\n quoteId,\r\n 'Roofing Materials Payment Schedule',\r\n 'RoofingMaterialsPaymentSchedule',\r\n 'Yes',\r\n ),\r\n );\r\n }\r\n\r\n function addRspsElement() {\r\n adjustedElements.push(\r\n createHardCodedElement(\r\n quoteId,\r\n 'Roofing Systems Payment Schedule',\r\n 'RoofingSystemsPaymentSchedule',\r\n 'Yes',\r\n ),\r\n );\r\n }\r\n }\r\n\r\n function onAdditionalCoverages() {\r\n carrierCode.switch({\r\n onVave,\r\n onBenchmark: doNothing,\r\n onBenchmarkSpecialty: doNothing,\r\n onTopa: doNothing,\r\n onDorchester: doNothing,\r\n onClearBlue: doNothing,\r\n onClearBlueSpecialty: doNothing,\r\n onHiscox: doNothing,\r\n onNfip: doNothing,\r\n onBrit: doNothing,\r\n });\r\n\r\n function onVave() {\r\n // Add Vave exclusions for Pool Cage and Screen Enclosure\r\n adjustedElements.push(\r\n createHardCodedElement(quoteId, 'Pool Cage and Screen Enclosure', 'VaveExclusions', 'Excluded'),\r\n );\r\n }\r\n }\r\n\r\n function onDeductibles() {\r\n carrierCode.switch({\r\n onVave,\r\n onBenchmark: doNothing,\r\n onBenchmarkSpecialty: doNothing,\r\n onTopa: doNothing,\r\n onDorchester: doNothing,\r\n onClearBlue: doNothing,\r\n onClearBlueSpecialty: doNothing,\r\n onHiscox: doNothing,\r\n onNfip: doNothing,\r\n onBrit: doNothing,\r\n });\r\n\r\n function onVave() {\r\n const lossAssessmentEarthquakeCoverage = getComparisonElementFromComparisonModel(\r\n quotes,\r\n ElementNames.LossAssessmentEarthquake,\r\n quoteId,\r\n ),\r\n hasLossAssessmentEarthquakeCoverage = toBoolean(lossAssessmentEarthquakeCoverage?.Value);\r\n\r\n // SW-30635, SW-33332 - Add hard-coded element for Homeowner Vave quotes when LossAssessmentEarthquake element is present and its value is \"true\"\r\n if (hasLossAssessmentEarthquakeCoverage) {\r\n adjustedElements.push(\r\n createHardCodedElement(\r\n quoteId,\r\n 'Loss Assessment - Earthquake Deductible',\r\n 'LossAssessment',\r\n '10%',\r\n ),\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n function onFlood() {\r\n // SW-25759 - Remove the replacement cost element for all Flood quotes\r\n // (It is shown in the UI but business does not want it displayed on the printed quote because it is only used for rating)\r\n adjustedElements = adjustedElements.filter(\r\n comparisonElements => !hasElementWithName(comparisonElements, ElementNames.replacementCost),\r\n );\r\n\r\n elementGroupName.switch({\r\n onPropertyCoverages,\r\n onDefault: doNothing,\r\n });\r\n\r\n function onPropertyCoverages() {\r\n carrierCode.switch({\r\n // Flood carriers except Hiscox have the same default flood coverage elements\r\n onVave: addDefaultFloodCoverageElements,\r\n onNfip: addDefaultFloodCoverageElements,\r\n // Do not show default coverage elements for Hiscox\r\n onHiscox: doNothing,\r\n // Do nothing for non-flood carriers\r\n onBenchmark: doNothing,\r\n onBenchmarkSpecialty: doNothing,\r\n onTopa: doNothing,\r\n onDorchester: doNothing,\r\n onClearBlue: doNothing,\r\n onClearBlueSpecialty: doNothing,\r\n onBrit: doNothing,\r\n });\r\n }\r\n\r\n function addDefaultFloodCoverageElements() {\r\n adjustedElements.push(createHardCodedElement(quoteId, 'Other Coverages', 'OtherCoverages', 'Included'));\r\n adjustedElements.push(\r\n createHardCodedElement(\r\n quoteId,\r\n 'Increased Cost of Compliance',\r\n 'IncreasedCostOfCompliance',\r\n 'Included',\r\n ),\r\n );\r\n }\r\n }\r\n}\r\n\r\nfunction doNothing(): void {}\r\n","import * as React from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport * as utc from 'dayjs/plugin/utc';\r\nimport { CoverPageGroups } from '@app/SinglePageApplication/PrintQuote/Components/CoverPageGroups';\r\nimport { PageLayout } from '@app/SinglePageApplication/PrintQuote/Components/PageLayout';\r\nimport { TaxesAndFeesGroup } from '@app/SinglePageApplication/PrintQuote/Components/TaxesAndFeesGroup';\r\n\r\ndayjs.extend(utc);\r\n\r\nexport function Cover() {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { PageLayout } from '@app/SinglePageApplication/PrintQuote/Components/PageLayout';\r\nimport { RiskCharacteristicsGroup } from '../Components/RiskCharacteristicsGroup';\r\n\r\nexport function RiskCharacteristics() {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { Cover } from './Cover';\r\nimport { RiskCharacteristics } from './RiskCharacteristics';\r\n\r\nexport const Pages = [, ];\r\n","import * as React from 'react';\r\nimport { useMemo, useState } from 'react';\r\nimport { getMepDisclaimer, getMepMaxPercentage } from '@app/Api/MinimumEarnedPremiumApi';\r\nimport { getInsuredFullName } from '@app/Common';\r\nimport { useReactToPdf } from '@app/Components/ReactToPdf';\r\nimport { ComparisonQuoteModel, ComparisonQuotesModel } from '@app/Models';\r\nimport { TrackingEvent } from '@app/TrackingEvents';\r\nimport { CarrierCode, ProductLine, RatingType } from '@business/CommonSets';\r\nimport { getQuotePath } from '../Views';\r\nimport { PrintQuoteContext } from './Context';\r\nimport { Document } from './Document';\r\nimport { Pages } from './Pages';\r\n\r\nexport type PrintQuote = [() => Promise, boolean];\r\n\r\nexport function usePrintQuote(\r\n quotes: ComparisonQuotesModel | null,\r\n quoteId: string,\r\n onError: (message: string) => void,\r\n productLine: ProductLine,\r\n): PrintQuote {\r\n const [loading, setLoading] = useState(false),\r\n quote = useMemo(() => getQuote(quotes, quoteId), [quotes, quoteId]);\r\n\r\n return [async () => await printHomeownerQuote(quotes, quote, setLoading, quoteId, onError, productLine), loading];\r\n}\r\n\r\nexport async function printHomeownerQuote(\r\n quotes: ComparisonQuotesModel | null,\r\n quote: ComparisonQuoteModel,\r\n setLoading: (loading: boolean) => void,\r\n quoteId: string,\r\n onError: (message: string) => void,\r\n productLine: ProductLine,\r\n) {\r\n if (!quotes) {\r\n return;\r\n }\r\n\r\n try {\r\n setLoading(true);\r\n const fileName = getFileName(quotes, quote, productLine),\r\n ratingType = RatingType.parse(quote.RatingType);\r\n\r\n let mepMaxPercentage = 0,\r\n mepDisclaimer = '';\r\n await ratingType.switch({\r\n onAdmitted: () => Promise.resolve(),\r\n onEAndS: async () => {\r\n [mepMaxPercentage, mepDisclaimer] = await Promise.all([\r\n await getMepMaxPercentage(productLine.key, quote.CarrierCode || '', quote.PurchasedOn),\r\n await getMepDisclaimer(productLine.key, quote.CarrierCode || '', quote.PurchasedOn),\r\n ]);\r\n },\r\n onNfip: () => Promise.resolve(),\r\n });\r\n\r\n await useReactToPdf({\r\n component: (\r\n \r\n ),\r\n unformattedFileName: fileName,\r\n });\r\n } catch (e) {\r\n onError('There was an issue downloading the quote pdf. Please try again later.');\r\n console.error(e);\r\n } finally {\r\n setLoading(false);\r\n }\r\n\r\n TrackingEvent.trackSinglePageApplication(getQuotePath(quotes?.Quotes.length), 'print');\r\n}\r\n\r\nfunction getFileName(quotes: ComparisonQuotesModel, quote: ComparisonQuoteModel, productLine: ProductLine) {\r\n const insuredName = getInsuredFullName(quote),\r\n productName = productLine.value,\r\n carrierName = CarrierCode.parse(quote.CarrierCode).displayName,\r\n streetAddress = quotes?.QuoteProperty?.Street1 || '';\r\n return `${productName} Quote ${carrierName} ${insuredName} ${streetAddress}`;\r\n}\r\n\r\nfunction getQuote(quotes: ComparisonQuotesModel | null, quoteId: string) {\r\n return quotes?.Quotes.find(quote => quote.QuoteId === quoteId) || ({} as ComparisonQuoteModel);\r\n}\r\n\r\ninterface PrintedQuoteProps {\r\n comparisonModel: ComparisonQuotesModel;\r\n quote: ComparisonQuoteModel;\r\n quoteId: string;\r\n productLine: ProductLine;\r\n mepMaxPercentage: number;\r\n mepDisclaimer: string;\r\n}\r\n\r\nexport function PrintedQuote(props: PrintedQuoteProps) {\r\n const isFlood = props.productLine === ProductLine.Flood,\r\n // Flood can be condensed to a single page\r\n pageCount = isFlood ? 1 : Pages.length;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import * as dayjs from 'dayjs';\r\nimport { Value } from '@swyfft/webkit';\r\n\r\nexport function yearBuiltValidation(yearBuilt: Value) {\r\n yearBuilt.addRule({\r\n id: 'year-built-too-high',\r\n validator: () => !yearBuilt.content || parseInt(yearBuilt.content) <= dayjs().year(),\r\n error: () => `The year built must be ${dayjs().year()} or before.`,\r\n });\r\n\r\n yearBuilt.addRule({\r\n id: 'year-built-too-low',\r\n validator: () => !yearBuilt.content || parseInt(yearBuilt.content) >= 1900,\r\n error: () => `Swyfft does not support structures built before 1900.`,\r\n });\r\n}\r\n\r\nexport function yearBuiltAndRoofAgeValidation(yearBuilt: Value, roofAge: Value) {\r\n const invalidRoofAgeOrYearBuilt = {\r\n id: 'invalid-roof-age-or-year-built',\r\n validator: () =>\r\n !roofAge.content ||\r\n !yearBuilt.content ||\r\n parseInt(yearBuilt.content) + parseInt(roofAge.content) <= dayjs().year(),\r\n error: () => `The roof cannot be older than the year built.`,\r\n };\r\n\r\n roofAge.addRule(invalidRoofAgeOrYearBuilt);\r\n yearBuilt.addRule(invalidRoofAgeOrYearBuilt);\r\n}\r\n","import * as React from 'react';\r\nimport { createRef, forwardRef, useContext, useEffect, useImperativeHandle } from 'react';\r\n\r\nimport { getPath, Path } from '@app/SinglePageApplication/Views';\r\nimport { useDocumentClick, useFormReducer, useImmutableState, useNavigateWithParams, useToast } from '@app/Hooks';\r\nimport { InlineError } from '@app/FormFields';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { Value } from '@swyfft/webkit';\r\nimport { PropertyData } from '@app/Models';\r\nimport { debounce, toKebabCase } from '@app/Common';\r\nimport { clearForm } from '@app/Hooks/PersistentFormReducer';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRow } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { getProperties } from '@app/Api/HOApi';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { PrimaryRouteButton } from '@app/SinglePageApplication/Components/Buttons';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport './style.scss';\r\n\r\nexport interface State {\r\n addresses: PropertyData[];\r\n index: number;\r\n loading: boolean;\r\n visible: boolean;\r\n focus: boolean;\r\n}\r\n\r\nconst MAX_RESULTS = 8;\r\nconst MINIMUM_REQUIRED_RESULTS = 3;\r\n\r\ntype FormType = {\r\n searchText: Value;\r\n};\r\n\r\nexport const AddressManagementComponent = forwardRef((_, ref) => {\r\n const [componentState, componentUpdate] = useImmutableState({\r\n addresses: [],\r\n index: 0,\r\n loading: false,\r\n visible: false,\r\n focus: false,\r\n });\r\n const { form, set } = useFormReducer({ searchText: new Value('address', '') });\r\n const inputRef = createRef();\r\n const navigate = useNavigateWithParams();\r\n const toast = useToast();\r\n const { state, update } = useContext(StateContext);\r\n\r\n useEffect(() => {\r\n if (state.createAddress.success) {\r\n toast.success('Address changes have been made successfully.', 4000);\r\n clearForm();\r\n\r\n update(state => {\r\n state.createAddress.context = 'CreateAddress';\r\n state.createAddress.addressKey = '';\r\n state.createAddress.latitude = undefined;\r\n state.createAddress.longitude = undefined;\r\n state.createAddress.success = false;\r\n });\r\n }\r\n });\r\n\r\n useImperativeHandle(ref, () => ({\r\n focus: () => inputRef.current?.focus(),\r\n }));\r\n\r\n const { className } = useDocumentClick(\r\n () => {\r\n componentUpdate(state => (state.visible = false));\r\n },\r\n {\r\n exceptionClassNames: ['address-input'],\r\n generateUniqueClassName: true,\r\n }\r\n );\r\n\r\n const handleAddressFocus = () => {\r\n componentUpdate(state => {\r\n state.focus = true;\r\n state.visible = state.addresses.length > 0;\r\n });\r\n };\r\n\r\n const handleChangeAddress = async (partialAddress: string) => {\r\n set('searchText', partialAddress);\r\n\r\n if (partialAddress.length < MINIMUM_REQUIRED_RESULTS) {\r\n componentUpdate(state => {\r\n state.addresses = [];\r\n state.visible = false;\r\n });\r\n\r\n return;\r\n }\r\n\r\n debounce(\r\n 'address-lookup',\r\n async () => {\r\n try {\r\n componentUpdate(state => (state.loading = true));\r\n const addresses = await getProperties(partialAddress, MAX_RESULTS);\r\n\r\n componentUpdate(state => {\r\n state.addresses = addresses.length > 0 ? addresses.slice(0, MAX_RESULTS) : [];\r\n state.visible = addresses.length > 0;\r\n state.index = 0;\r\n state.loading = false;\r\n });\r\n } catch (e) {\r\n console.error(e);\r\n\r\n componentUpdate(state => {\r\n state.visible = false;\r\n state.addresses = [];\r\n });\r\n } finally {\r\n componentUpdate(state => (state.loading = false));\r\n }\r\n },\r\n 250\r\n );\r\n };\r\n\r\n const handleSelectAddress = async (property: PropertyData) => {\r\n let url = getPath(Path.EditAddress, { address: encodeURIComponent(toKebabCase(property.FullAddress)) });\r\n url += `?livingSpace=${property.LivingSpace || ''}`;\r\n\r\n await update(state => {\r\n state.createAddress.context = 'EditAddress';\r\n state.createAddress.addressKey = property.AddressKey;\r\n state.createAddress.latitude = property.Latitude || undefined;\r\n state.createAddress.longitude = property.Longitude || undefined;\r\n });\r\n\r\n clearForm();\r\n navigate(url);\r\n };\r\n\r\n const handleAddNewAddress = async () => {\r\n let url = getPath(Path.CreateAddressNoQuote);\r\n\r\n if (form.searchText.content) {\r\n try {\r\n url = getPath(Path.CreateAddressNoQuote, {\r\n address: encodeURIComponent(toKebabCase(form.searchText.content)),\r\n });\r\n } catch (error) {\r\n console.error(error);\r\n toast.error(\r\n 'An unexpected error has occurred while parsing a new address. Please check your input and try again.'\r\n );\r\n\r\n return;\r\n }\r\n }\r\n\r\n await update(state => {\r\n state.createAddress.context = 'CreateAddressNoQuote';\r\n state.createAddress.addressKey = '';\r\n state.createAddress.latitude = undefined;\r\n state.createAddress.longitude = undefined;\r\n });\r\n\r\n clearForm();\r\n navigate(url);\r\n };\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n handleChangeAddress(e.target.value)}\r\n onFocus={handleAddressFocus}\r\n onBlur={() => componentUpdate(state => (state.focus = false))}\r\n />\r\n
\r\n
\r\n\r\n \r\n\r\n
\r\n {componentState.addresses.map((address: PropertyData, index: number) => (\r\n handleSelectAddress(address)}\r\n onMouseEnter={() => componentUpdate(state => (state.index = index))}\r\n className={componentState.index === index ? 'selected' : ''}\r\n >\r\n \r\n {address.FullAddress}\r\n \r\n ))}\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n );\r\n});\r\n\r\nexport const AddressManagement = {\r\n path: Path.AddressManagement,\r\n auth: AccessRole.Agent,\r\n element: ,\r\n};\r\n","import * as React from 'react';\r\nimport { useContext, useMemo, useRef, useState } from 'react';\r\n\r\nimport { Value, Rules } from '@swyfft/webkit';\r\nimport {\r\n AdjusterQueueType,\r\n ALL_STATES_KEY,\r\n IQueue,\r\n} from '@app/SinglePageApplication/Views/AdjusterQueueManagement/models';\r\nimport { ToastContext, useFormReducer } from '@app/Hooks';\r\nimport { User } from '@app/Models';\r\nimport { ContactType } from '@app/Claims/Models';\r\nimport { saveQueue } from '@app/SinglePageApplication/Views/AdjusterQueueManagement/api';\r\nimport * as MembershipApi from '@app/Api/MembershipApi';\r\nimport * as Common from '@app/Common';\r\nimport { ProductLine } from '@business/CommonSets';\r\n\r\ntype ReporterTypes = Record>;\r\n\r\ntype Form = {\r\n name: Value;\r\n productLine: Value;\r\n queueType: Value;\r\n state: Value;\r\n catCode: Value;\r\n allReporterTypes: Value;\r\n reporterTypes: Value;\r\n adjuster: Value;\r\n adjusters: Value;\r\n};\r\n\r\nexport function useAdjusterQueueForm(onClose: (reload?: boolean) => void, queues: IQueue[], queue?: IQueue) {\r\n const [isLoading, setIsLoading] = useState(false);\r\n const debounce = useRef(null);\r\n const toast = useContext(ToastContext);\r\n\r\n const reporterTypes = useMemo(\r\n () =>\r\n Object.keys(ContactType)\r\n .filter((key: string) => isNaN(parseInt(key)))\r\n .sort((first: string, second: string) => first.localeCompare(second)),\r\n [],\r\n );\r\n\r\n const reporterTypeGroups = useMemo(\r\n () =>\r\n reporterTypes.reduce((result: string[][], _: string, index: number, array: string[]) => {\r\n const count = 4;\r\n\r\n if (index % count === 0) {\r\n result.push(array.slice(index, index + count));\r\n }\r\n return result;\r\n }, [] as string[][]),\r\n [],\r\n );\r\n\r\n const reporterTypeOptions = useMemo(\r\n () =>\r\n reporterTypes.reduce((all: any, typeName: string) => {\r\n let selected = true;\r\n\r\n if (queue) {\r\n selected = queue.ReporterTypes.some(item => item === typeName);\r\n }\r\n\r\n all[typeName] = new Value(typeName, selected);\r\n\r\n return all;\r\n }, {}) as ReporterTypes,\r\n [],\r\n );\r\n\r\n const { form, setWithoutValidation, valid, validate } = useFormReducer
({\r\n name: new Value('name', queue?.Label || '', [Rules.required(true, 'Please enter a name.')]),\r\n productLine: new Value(\r\n 'product line',\r\n queue?.IsHomeowner ? 'Homeowner'\r\n : queue?.IsCommercial ? 'Commercial'\r\n : '',\r\n [Rules.required(true, 'Please select a product line.')],\r\n ),\r\n queueType: new Value(\r\n 'queue type',\r\n queue?.IsLiability ? AdjusterQueueType.Liability\r\n : queue?.IsProperty ? AdjusterQueueType.Property\r\n : '',\r\n [Rules.required(true, 'Please select a queue type.')],\r\n ),\r\n state: new Value('state', queue?.StateCode || ALL_STATES_KEY),\r\n catCode: new Value('cat code', !!queue?.IsCatCode),\r\n allReporterTypes: new Value(\r\n 'all reporter types',\r\n Object.keys(reporterTypeOptions).filter(item => reporterTypeOptions[item].content).length ===\r\n reporterTypes.length,\r\n ),\r\n reporterTypes: new Value('reporter types', reporterTypeOptions, [\r\n Rules.minSelected(1, 'Please select at least one reporter type.'),\r\n ]),\r\n adjuster: new Value('adjuster', ''),\r\n adjusters: new Value('adjusters', queue?.Adjusters || [], [\r\n Rules.minLength(1, 'Please select at least one adjuster.'),\r\n ]),\r\n });\r\n\r\n const setAllReporterTypes = (value: boolean) => {\r\n const newReporterTypes = { ...form.reporterTypes.content };\r\n\r\n for (const key in newReporterTypes) {\r\n newReporterTypes[key].content = value;\r\n }\r\n\r\n setWithoutValidation('reporterTypes', newReporterTypes);\r\n };\r\n\r\n const getUsers = (value: string): Promise => {\r\n return new Promise(resolve => {\r\n if (debounce.current) {\r\n clearTimeout(debounce.current);\r\n }\r\n\r\n debounce.current = setTimeout(async () => {\r\n const results = await MembershipApi.getUsers(value, 10);\r\n resolve(results);\r\n }, 250);\r\n });\r\n };\r\n\r\n const isDuplicateQueue = (first: IQueue, second: IQueue) => {\r\n return (\r\n first.IsLiability === second.IsLiability &&\r\n first.IsProperty === second.IsProperty &&\r\n first.IsHomeowner === second.IsHomeowner &&\r\n first.IsCommercial === second.IsCommercial &&\r\n first.IsCatCode === second.IsCatCode &&\r\n (first.StateCode === second.StateCode ||\r\n first.StateCode === ALL_STATES_KEY ||\r\n second.StateCode === ALL_STATES_KEY) &&\r\n (first.ReporterTypes.some((type: string) => second.ReporterTypes.includes(type)) ||\r\n second.ReporterTypes.some((type: string) => first.ReporterTypes.includes(type))) &&\r\n first.Id !== second.Id\r\n );\r\n };\r\n\r\n const findDuplicateQueues = (newQueue: IQueue): string[] => {\r\n return queues.filter((q: IQueue) => isDuplicateQueue(newQueue, q)).map((q: IQueue) => q.Label);\r\n };\r\n\r\n const getCurrentNewQueue = (): IQueue => {\r\n const selectedReporterTypes = Object.keys(form.reporterTypes.content).filter(\r\n item => form.reporterTypes.content[item].content,\r\n );\r\n let stateCode: string | null = null;\r\n\r\n if (\r\n form.queueType.content === AdjusterQueueType.Liability ||\r\n (form.queueType.content === AdjusterQueueType.Property && !form.catCode.content)\r\n ) {\r\n stateCode = form.state.content;\r\n }\r\n\r\n return {\r\n Id: queue ? queue.Id : 0,\r\n Name: form.name.content\r\n .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n .replace(/\\s+/g, '-')\r\n .toLowerCase(),\r\n Label: form.name.content,\r\n IsLiability: form.queueType.content === AdjusterQueueType.Liability,\r\n IsProperty: form.queueType.content === AdjusterQueueType.Property,\r\n IsHomeowner: form.productLine.content === ProductLine.Homeowner.value,\r\n IsCommercial: form.productLine.content === ProductLine.Commercial.value,\r\n IsCatCode: form.catCode.content,\r\n StateCode: stateCode,\r\n ReporterTypes: selectedReporterTypes,\r\n Adjusters: form.adjusters.content,\r\n };\r\n };\r\n\r\n const setReporterTypeRules = () => {\r\n const reporterTypeKeys = Object.keys(form.reporterTypes.content);\r\n\r\n // If no reporter types are selected, add a rule to each one to show them as invalid when the form is submitted. Otherwise clear the rules and\r\n // re-validate to clear any styling for the invalid state. This logic is needed in order to show the invalid state styling on each checkbox,\r\n // since it is driven by the 'valid' property of each Value object on each box, not the Value object holding all the selected reporter types.\r\n if (!reporterTypeKeys.some((key: string) => form.reporterTypes.content[key].content)) {\r\n reporterTypeKeys.forEach((key: string) => {\r\n form.reporterTypes.content[key].setRules([Rules.equals(true)]);\r\n });\r\n } else {\r\n reporterTypeKeys.forEach((key: string) => {\r\n // We validate each checkbox here to clear any invalid styling\r\n form.reporterTypes.content[key].setRules([]);\r\n form.reporterTypes.content[key].validate();\r\n });\r\n }\r\n };\r\n\r\n const handleChangeQueueType = (queueType: string) => {\r\n setWithoutValidation('queueType', queueType);\r\n\r\n // The CAT code option is cleared when Liability is selected since it doesn't apply in that case, and will make it easier to check for duplicates.\r\n if (queueType === AdjusterQueueType.Liability) {\r\n setWithoutValidation('catCode', false);\r\n }\r\n };\r\n\r\n const handleChangeAllReporterTypes = (isSelected: boolean) => {\r\n const reporterTypes = Object.keys(form.reporterTypes.content);\r\n const typesSelected = reporterTypes.filter(item => form.reporterTypes.content[item].content);\r\n\r\n setWithoutValidation('allReporterTypes', isSelected);\r\n setAllReporterTypes(typesSelected.length !== reporterTypes.length);\r\n setReporterTypeRules();\r\n };\r\n\r\n const handleChangeReporterType = (value: string, isSelected: boolean) => {\r\n const newReporterTypes = { ...form.reporterTypes.content };\r\n newReporterTypes[value].content = isSelected;\r\n\r\n const typesSelected = reporterTypes.filter(item => form.reporterTypes.content[item].content);\r\n setWithoutValidation('reporterTypes', newReporterTypes);\r\n setWithoutValidation('allReporterTypes', typesSelected.length === reporterTypes.length);\r\n setReporterTypeRules();\r\n };\r\n\r\n const handleAddAdjuster = async () => {\r\n // Don't add the adjuster if the value is empty, already in the list, or not in the format of a valid email address\r\n if (\r\n form.adjuster.content === '' ||\r\n form.adjusters.content.indexOf(form.adjuster.content) > -1 ||\r\n !Common.validateEmail(form.adjuster.content)\r\n ) {\r\n return;\r\n }\r\n\r\n const newAdjusters = [...form.adjusters.content, form.adjuster.content];\r\n setWithoutValidation('adjusters', newAdjusters);\r\n setWithoutValidation('adjuster', '');\r\n };\r\n\r\n const handleSubmit = async () => {\r\n if (form.catCode.content) {\r\n form.state.setRules([]);\r\n } else {\r\n form.state.setRules([Rules.required(true, 'Please select a state.')]);\r\n }\r\n\r\n validate();\r\n\r\n Object.keys(form.reporterTypes.content).forEach((key: string) => {\r\n form.reporterTypes.content[key].validate();\r\n });\r\n\r\n if (!valid()) {\r\n return;\r\n }\r\n\r\n try {\r\n setIsLoading(true);\r\n const newQueue = getCurrentNewQueue();\r\n await saveQueue(newQueue);\r\n\r\n onClose(true);\r\n } catch (error) {\r\n Common.handleApiError(error, toast);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const duplicateQueues = findDuplicateQueues(getCurrentNewQueue());\r\n\r\n return {\r\n form,\r\n setWithoutValidation,\r\n isLoading,\r\n reporterTypeGroups,\r\n duplicateQueues,\r\n getUsers,\r\n handleChangeQueueType,\r\n handleChangeAllReporterTypes,\r\n handleChangeReporterType,\r\n handleAddAdjuster,\r\n handleSubmit,\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { FC } from 'react';\r\nimport { TableColumn } from 'react-data-table-component';\r\n\r\nimport {\r\n Button,\r\n RadioGroup,\r\n Checkbox,\r\n Text,\r\n Select,\r\n SelectItem,\r\n AutoComplete,\r\n DeleteIcon,\r\n PriorityHighIcon,\r\n Tooltip,\r\n FormLabel,\r\n} from '@swyfft/webkit';\r\nimport { useAdjusterQueueForm } from '@app/SinglePageApplication/Views/AdjusterQueueManagement/AdjusterQueueForm/hook';\r\nimport {\r\n IQueue,\r\n ALL_STATES_KEY,\r\n AdjusterQueueType,\r\n} from '@app/SinglePageApplication/Views/AdjusterQueueManagement/models';\r\nimport { Table } from '@app/SinglePageApplication/Components/Table';\r\nimport { NoData } from '@app/SinglePageApplication/Components/NoData';\r\nimport { ProductLine, StateCode } from '@business/CommonSets';\r\nimport { User } from '@app/Models';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n queue?: IQueue;\r\n queues: IQueue[];\r\n onClose: (reload?: boolean) => void;\r\n};\r\n\r\nexport const AdjusterQueueForm: FC = (props: Props) => {\r\n const {\r\n form,\r\n setWithoutValidation,\r\n isLoading,\r\n reporterTypeGroups,\r\n duplicateQueues,\r\n getUsers,\r\n handleChangeQueueType,\r\n handleChangeAllReporterTypes,\r\n handleChangeReporterType,\r\n handleAddAdjuster,\r\n handleSubmit,\r\n } = useAdjusterQueueForm(props.onClose, props.queues, props.queue);\r\n\r\n const columns: TableColumn[] = [\r\n {\r\n cell: row => row,\r\n },\r\n {\r\n cell: row => (\r\n {\r\n const newAdjusters = [...form.adjusters.content];\r\n const index = newAdjusters.indexOf(row);\r\n\r\n newAdjusters.splice(index, 1);\r\n setWithoutValidation('adjusters', newAdjusters);\r\n }}\r\n aria-label='Remove adjuster'\r\n tooltipMessage='Remove adjuster'\r\n iconButton={true}\r\n >\r\n \r\n \r\n ),\r\n width: '66px',\r\n },\r\n ];\r\n\r\n return (\r\n
\r\n
\r\n
\r\n setWithoutValidation('name', value)}\r\n label='Name'\r\n value={form.name}\r\n autoComplete='swyfft-adjuster-queue-name'\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n {\r\n setWithoutValidation('productLine', value);\r\n setWithoutValidation('state', '');\r\n }}\r\n value={form.productLine}\r\n label='Product Line'\r\n options={[\r\n { label: 'Homeowner', value: ProductLine.Homeowner.value },\r\n { label: 'Commercial', value: ProductLine.Commercial.value },\r\n ]}\r\n orientation='horizontal'\r\n />\r\n
\r\n\r\n
\r\n
\r\n handleChangeQueueType(value)}\r\n value={form.queueType}\r\n label='Queue Type'\r\n options={[\r\n { label: 'Liability', value: AdjusterQueueType.Liability },\r\n { label: 'Property', value: AdjusterQueueType.Property },\r\n ]}\r\n orientation='horizontal'\r\n />\r\n\r\n {form.queueType.content === 'Property' && (\r\n
\r\n {\r\n setWithoutValidation('catCode', value);\r\n setWithoutValidation('state', '');\r\n }}\r\n >\r\n CAT Code\r\n \r\n
\r\n )}\r\n
\r\n
\r\n\r\n
\r\n
\r\n setWithoutValidation('state', option)}\r\n >\r\n {[\r\n All States,\r\n ...StateCode.all().map(state => (\r\n {state.code}\r\n )),\r\n ]}\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n Reporter Types\r\n\r\n {!form.reporterTypes.valid && (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n
\r\n\r\n
\r\n \r\n All Reporter Types\r\n \r\n
\r\n
\r\n\r\n
\r\n {reporterTypeGroups.map((reporterTypes: string[], index: number) => {\r\n return (\r\n
\r\n {reporterTypes.map((item: string) => (\r\n
\r\n {/* We set noTooltip to true in order to not show an empty tooltip bubble if none of the boxes are checked,\r\n since all we want is the invalid styling. The tooltip next to the main label above will serve as the\r\n notice to users. */}\r\n handleChangeReporterType(item, isSelected)}\r\n noTooltip={true}\r\n >\r\n {item}\r\n \r\n
\r\n ))}\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n\r\n {duplicateQueues.length > 0 && !isLoading && (\r\n
\r\n
\r\n Warning: The following queues match the currently selected configuration. When assigning\r\n claims that match this queue, adjusters from all matching queues will be considered.\r\n
    \r\n {duplicateQueues.map((duplicate: string) => (\r\n
  • {duplicate}
  • \r\n ))}\r\n
\r\n
\r\n
\r\n )}\r\n\r\n
\r\n
\r\n
\r\n \r\n id='adjuster-queue-form-adjuster-input'\r\n name='adjuster'\r\n label='User'\r\n placeholder='Search by email address'\r\n value={form.adjuster}\r\n suggestions={getUsers}\r\n getItemId={item => item.EmailAddress}\r\n getItemText={item => item.EmailAddress}\r\n autoComplete={new Date().getTime().toString()}\r\n onTextChange={value => setWithoutValidation('adjuster', value)}\r\n onSelect={value => setWithoutValidation('adjuster', value.EmailAddress)}\r\n />\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n Adjusters\r\n\r\n {!form.adjusters.valid && (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n
\r\n\r\n
\r\n }\r\n loading={false}\r\n hasMore={false}\r\n loadingMore={false}\r\n hideResultMessage={true}\r\n noTableHead={true}\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import { IQueue } from '@app/SinglePageApplication/Views/AdjusterQueueManagement/models';\r\nimport { fetchAndLog } from '@app/Api/Fetch';\r\n\r\nexport async function getQueues(): Promise {\r\n return await fetchAndLog('/api/claims/queues', 'get adjuster queues', undefined, true);\r\n}\r\n\r\nexport async function saveQueue(queue: IQueue): Promise {\r\n return await fetchAndLog(\r\n '/api/claims/queue',\r\n 'save adjuster queue',\r\n {\r\n method: 'POST',\r\n body: JSON.stringify(queue),\r\n },\r\n true,\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useContext, useMemo, useState } from 'react';\r\nimport Skeleton from 'react-loading-skeleton';\r\nimport { handleApiError } from '@app/Common';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { ToastContext, useAsyncEffect, useFormReducer } from '@app/Hooks';\r\nimport { NoData } from '@app/SinglePageApplication/Components/NoData';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRow } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { Table } from '@app/SinglePageApplication/Components/Table';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { getQueues } from '@app/SinglePageApplication/Views/AdjusterQueueManagement/api';\r\nimport { IQueue } from '@app/SinglePageApplication/Views/AdjusterQueueManagement/models';\r\nimport { Button, EditIcon, Modal, Text, Value } from '@swyfft/webkit';\r\nimport { AdjusterQueueForm } from './AdjusterQueueForm';\r\nimport './style.scss';\r\n\r\ntype Form = {\r\n searchText: Value;\r\n};\r\n\r\nconst SKELETON_HEIGHT = '25px';\r\n\r\nconst customStyles = {\r\n table: {\r\n style: {\r\n border: '1px solid #d9d9e9',\r\n },\r\n },\r\n headRow: {\r\n style: {\r\n fontWeight: 'bold',\r\n },\r\n },\r\n};\r\n\r\nconst noDataElement = ;\r\n\r\nexport function AdjusterQueueManagementComponent() {\r\n const [isLoading, setIsLoading] = useState(true),\r\n [queues, setQueues] = useState([]),\r\n [filteredQueues, setFilteredQueues] = useState([]),\r\n [queueToEdit, setQueueToEdit] = useState(),\r\n [isQueueFormVisible, setIsQueueFormVisible] = useState(false),\r\n [reloadToggle, setReloadToggle] = useState(false),\r\n { form, set } = useFormReducer({ searchText: new Value('search text', '') }),\r\n toast = useContext(ToastContext),\r\n columns = useMemo(buildColumns, []);\r\n\r\n useAsyncEffect(async () => {\r\n if (isLoading) {\r\n await getData();\r\n }\r\n }, [reloadToggle]);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n {/* The onOpenChange handler is empty because we want to control the visibility via the cancel and submit buttons on the form component. Plus\r\n the Aria ModalOverlay always seems to fire that event and pass False for the isOpen argument when the Escape key is pressed, even if keyboard\r\n dismissal is disabled. */}\r\n {}}\r\n isDismissable={false}\r\n isKeyboardDismissable={false}\r\n size='large'\r\n showCloseButton={false}\r\n >\r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n\r\n async function getData() {\r\n try {\r\n const data = await getQueues();\r\n setQueues(data);\r\n setFilteredQueues(data);\r\n } catch (error) {\r\n handleApiError(error, toast);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }\r\n\r\n function handleChangeSearchText(value: string) {\r\n const newFilteredQueues = queues.filter(\r\n (queue: IQueue) =>\r\n !value ||\r\n queue.Label.toLowerCase().indexOf(value.toLowerCase()) > -1 ||\r\n queue.Adjusters.some((adjuster: string) => adjuster.toLowerCase().indexOf(value) > -1),\r\n );\r\n\r\n set('searchText', value);\r\n setFilteredQueues(newFilteredQueues);\r\n }\r\n\r\n function handleAddQueue() {\r\n setQueueToEdit(undefined);\r\n setIsQueueFormVisible(true);\r\n }\r\n\r\n function handleEditQueue(id: number) {\r\n const selectedQueue = filteredQueues.find((item: IQueue) => item.Id === id);\r\n\r\n setQueueToEdit(selectedQueue);\r\n setIsQueueFormVisible(true);\r\n }\r\n\r\n function handleCloseQueueForm(reload?: boolean) {\r\n setIsQueueFormVisible(false);\r\n\r\n if (reload) {\r\n setIsLoading(true);\r\n setReloadToggle(!reloadToggle);\r\n }\r\n }\r\n\r\n function buildColumns() {\r\n return [\r\n {\r\n name: 'Name',\r\n cell: row =>\r\n row.Name ?\r\n row.Label\r\n : ,\r\n width: '300px',\r\n },\r\n {\r\n name: 'Adjusters',\r\n cell: row =>\r\n row.Adjusters ?\r\n row.Adjusters\r\n : ,\r\n },\r\n {\r\n name: '',\r\n cell: row =>\r\n row.Id ?\r\n handleEditQueue(row.Id)}\r\n aria-label='Edit queue'\r\n tooltipMessage='Edit queue'\r\n iconButton={true}\r\n >\r\n \r\n \r\n : ,\r\n width: '66px',\r\n },\r\n ];\r\n }\r\n}\r\n\r\nexport const AdjusterQueueManagement = {\r\n path: Path.AdjusterQueueManagement,\r\n auth: AccessRole.Admin,\r\n element: ,\r\n};\r\n","export interface IQueue {\r\n Id: number;\r\n Name: string;\r\n Label: string;\r\n IsLiability: boolean;\r\n IsProperty: boolean;\r\n IsHomeowner: boolean;\r\n IsCommercial: boolean;\r\n IsCatCode: boolean;\r\n StateCode: string | null;\r\n ReporterTypes: string[];\r\n Adjusters: string[];\r\n}\r\n\r\nexport enum AdjusterQueueType {\r\n Liability = 'Liability',\r\n Property = 'Property',\r\n}\r\n\r\nexport const ALL_STATES_KEY = 'allStates';\r\n","import * as React from 'react';\r\nimport { useContext, useState } from 'react';\r\nimport { TextFormGroup } from '@app/Components/FormGroups/Text';\r\nimport { ToastContext, useFormReducer } from '@app/Hooks';\r\nimport { Rules, Value } from '@swyfft/webkit';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepTileRow } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { PrimaryRouteButton } from '@app/SinglePageApplication/Components/Buttons';\r\nimport { activateProducerLocation } from '@app/Api/AgenciesApi';\r\nimport './style.scss';\r\n\r\ntype FormType = {\r\n locationId: Value;\r\n};\r\n\r\nexport function ActivateLocationComponent() {\r\n const toast = useContext(ToastContext);\r\n const [loading, setLoading] = useState(false);\r\n const { form, set } = useFormReducer({\r\n locationId: new Value('Location Id', '', [Rules.required(), Rules.integer()]),\r\n });\r\n\r\n const handleActivateLocation = async () => {\r\n try {\r\n setLoading(true);\r\n await activateProducerLocation(form.locationId.content);\r\n await toast.success('Location activated successfully.');\r\n } catch (error) {\r\n const e = await error.json();\r\n const message = e.ErrorMessage;\r\n console.error(message);\r\n await toast.error(message);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n set('locationId', locationId)}\r\n />\r\n \r\n \r\n \r\n );\r\n}\r\n","import { fetchAndLogWithResponse } from '@app/Api/Fetch';\r\n\r\nexport async function searchProducers(search: string, request: RequestInit) {\r\n const response = await fetchAndLogWithResponse(\r\n `/api/agency-management/producersv2?search=${encodeURIComponent(search.trim())}&start=0&count=100`,\r\n 'search agencies',\r\n request,\r\n );\r\n return await response.json();\r\n}\r\n","import './style.scss';\r\nimport * as React from 'react';\r\n\r\nexport function BoxedList({ children }: { children: React.ReactNode }) {\r\n return
    {children}
;\r\n}\r\n","import { createContext } from 'react';\r\nimport { ProducerSearchOutput } from '@app/SinglePageApplication/Views/AgencyDashboard/models';\r\n\r\ninterface AgencyDashboardContext {\r\n searchOutput: ProducerSearchOutput;\r\n}\r\n\r\nexport const AgencyDashboardContext = createContext({} as AgencyDashboardContext);\r\n","import './style.scss';\r\nimport * as React from 'react';\r\nimport { Route, Routes } from 'react-router-dom-v5-compat';\r\nimport { Value } from '@swyfft/webkit';\r\nimport { SwyfftRouteObject } from '@app/SinglePageApplication/Views/routes';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { useFormReducer } from '@app/Hooks';\r\nimport { SearchBar } from '@app/SinglePageApplication/Views/AgencyDashboard/searchBar';\r\nimport { AgencyDashboardContext } from '@app/SinglePageApplication/Views/AgencyDashboard/context';\r\nimport { useProducerSearch } from '@app/SinglePageApplication/Views/AgencyDashboard/producerSearch';\r\nimport { Producer } from '@app/SinglePageApplication/Views/AgencyDashboard/producer';\r\nimport { ActivateLocationComponent } from '@app/SinglePageApplication/Views/AgencyDashboard/ActivateLocation';\r\n\r\nexport const AgencyDashboard: SwyfftRouteObject = {\r\n path: Path.AgencyDashboard,\r\n auth: AccessRole.Admin,\r\n element: ,\r\n hideFooter: true,\r\n};\r\n\r\nfunction AgencyDashboardComponent() {\r\n const { form, set } = useFormReducer({\r\n search: new Value('search for agencies', ''),\r\n });\r\n\r\n const searchOutput = useProducerSearch(form.search.content),\r\n { producers } = searchOutput;\r\n\r\n return (\r\n <>\r\n \r\n
\r\n \r\n \r\n set('search', text)} />\r\n\r\n
    \r\n {producers.map((producer, index) => (\r\n \r\n ))}\r\n
\r\n \r\n }\r\n />\r\n } />\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n","import './style.scss';\r\nimport * as React from 'react';\r\nimport { PropsWithChildren } from 'react';\r\n\r\nexport function InlineHeader({ children }: PropsWithChildren) {\r\n return
{children}
;\r\n}\r\n","import * as React from 'react';\r\nimport { toPhoneNumber } from '@app/Common';\r\nimport { ProducerContactDtoV2 } from '@app/SinglePageApplication/Views/AgencyDashboard/models';\r\nimport { InlineHeader } from '../inlineHeader';\r\n\r\nexport function ProducerContact({ contact, index }: { contact: ProducerContactDtoV2; index: number }) {\r\n return (\r\n
  • \r\n \r\n \r\n {contact.Name}\r\n \r\n\r\n
    {contact.Email}
    \r\n\r\n
    {toPhoneNumber(contact.Phone)}
    \r\n
    \r\n
  • \r\n );\r\n}\r\n","import './style.scss';\r\nimport * as React from 'react';\r\nimport { ProducerLocationDtoV2 } from '@app/SinglePageApplication/Views/AgencyDashboard/models';\r\nimport { InlineHeader } from '../inlineHeader';\r\nimport { toPhoneNumber } from '@app/Common';\r\nimport { BoxedList } from '../boxedList';\r\nimport { ProducerContact } from '../producerContact';\r\n\r\nexport function ProducerLocation({ location, index }: { location: ProducerLocationDtoV2; index: number }) {\r\n return (\r\n
  • \r\n \r\n \r\n {location.Name}\r\n \r\n\r\n
    {location.Email}
    \r\n\r\n
    {toPhoneNumber(location.Phone)}
    \r\n
    \r\n\r\n \r\n {location.Contacts.length === 0 && <>This location has no contacts.}\r\n\r\n {location.Contacts.length > 0 &&\r\n location.Contacts.map((contact, index) => (\r\n \r\n ))}\r\n \r\n
  • \r\n );\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport { ProducerDtoV2, ProducerSearchOutput } from '@app/SinglePageApplication/Views/AgencyDashboard/models';\r\nimport { useTimeout } from '@app/Hooks/Timeout';\r\nimport { searchProducers } from './api';\r\n\r\nconst searchDebounceMs = 500;\r\n\r\nexport function useProducerSearch(searchTerm: string): ProducerSearchOutput {\r\n const [producers, setProducers] = useState([]),\r\n [loading, setLoading] = useState(false),\r\n [responseTime, setResponseTime] = useState(0);\r\n\r\n const abortController = useRef(new AbortController());\r\n useEffect(() => {\r\n return () => {\r\n abortController.current.abort();\r\n abortController.current = new AbortController();\r\n };\r\n }, [searchTerm]);\r\n\r\n const lastSearch = useRef(searchTerm);\r\n useTimeout(\r\n () => {\r\n if (searchTerm === lastSearch.current) {\r\n return;\r\n }\r\n\r\n lastSearch.current = searchTerm;\r\n (async () => {\r\n try {\r\n window.scrollTo(0, 0);\r\n setLoading(true);\r\n setResponseTime(0);\r\n const start = dayjs();\r\n setProducers(\r\n searchTerm === '' ?\r\n []\r\n : await searchProducers(searchTerm, { signal: abortController.current.signal }),\r\n );\r\n const end = dayjs();\r\n setResponseTime(end.diff(start, 'seconds', true));\r\n } finally {\r\n setLoading(false);\r\n }\r\n })();\r\n },\r\n searchDebounceMs,\r\n [searchTerm],\r\n );\r\n\r\n return { producers, loading, responseTime, lastSearch };\r\n}\r\n","import './style.scss';\r\nimport * as React from 'react';\r\nimport { ProducerDtoV2 } from '@app/SinglePageApplication/Views/AgencyDashboard/models';\r\nimport { InlineHeader } from '@app/SinglePageApplication/Views/AgencyDashboard/inlineHeader';\r\nimport { BoxedList } from '../boxedList';\r\nimport { ProducerLocation } from '../producerLocation';\r\n\r\nexport function Producer({ producer }: { producer: ProducerDtoV2; index: number }) {\r\n return (\r\n
  • \r\n \r\n

    \r\n {producer.ProducerName}\r\n

    \r\n\r\n
    \r\n {producer.Locations.length} location(s)\r\n
    \r\n\r\n
    \r\n {producer.Locations.reduce((acc, location) => acc + location.Contacts.length, 0)} contact(s)\r\n
    \r\n
    \r\n\r\n \r\n {producer.Locations.length === 0 && <>This producer has no locations.}\r\n\r\n {producer.Locations.length > 0 &&\r\n producer.Locations.map((location, index) => (\r\n \r\n ))}\r\n \r\n
  • \r\n );\r\n}\r\n","import './style.scss';\r\nimport * as React from 'react';\r\nimport { Value } from '@swyfft/webkit';\r\nimport { Text } from '@app/Components/Form';\r\nimport { SearchInfo } from '@app/SinglePageApplication/Views/AgencyDashboard/searchInfo';\r\n\r\nexport function SearchBar({ search, setSearch }: { search: Value; setSearch: (search: string) => void }) {\r\n return (\r\n \r\n );\r\n}\r\n","import './style.scss';\r\nimport * as React from 'react';\r\nimport Loader from '@app/Components/Loader';\r\nimport { useContext, useRef, useEffect } from 'react';\r\nimport { AgencyDashboardContext } from '@app/SinglePageApplication/Views/AgencyDashboard/context';\r\n\r\nexport function SearchInfo() {\r\n const { loading, responseTime, producers, lastSearch } = useContext(AgencyDashboardContext).searchOutput;\r\n\r\n const responseTimeRef = useRef(responseTime);\r\n useEffect(() => {\r\n if (responseTimeRef.current === responseTime) {\r\n return;\r\n }\r\n\r\n responseTimeRef.current = responseTime;\r\n }, [responseTime]);\r\n\r\n return (\r\n <>\r\n {loading && (\r\n
    \r\n \r\n Searching...\r\n
    \r\n )}\r\n\r\n {!loading && responseTime > 0 && (\r\n
    \r\n Found{' '}\r\n \r\n {producers.length} {producers.length === 1 ? 'producer' : 'producers'}\r\n {' '}\r\n with match for \"{lastSearch.current}\" in{' '}\r\n \r\n {responseTime} second{responseTime === 1 ? '' : 's'}\r\n \r\n
    \r\n )}\r\n\r\n {!loading && responseTime === 0 && (\r\n
    \r\n Enter a search term: producer name, location name, agent name, or email address.\r\n
    \r\n )}\r\n \r\n );\r\n}\r\n","import { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRowSeparator } from '@app/SinglePageApplication/Components/StepTile';\r\nimport * as React from 'react';\r\nimport { ManageBindingRequirementsLoadingSkeleton } from './skeleton';\r\nimport { BindingRequirementsContext } from '@app/Api/BindingRequirementsApi/context';\r\nimport { BindingRequirementsFileManager } from '@app/Business/Components/BindingRequirements/FileManager';\r\nimport { usePolicyBindingRequirements } from './hook';\r\nimport { BindingRequirementsDueDate } from '@app/Business/Components/BindingRequirements/DueDate';\r\nimport { BindingRequirementsPolicyInfo } from '@app/Business/Components/BindingRequirements/PolicyInfo';\r\n\r\nconst title = 'Binding Requirements';\r\n\r\nexport function PolicyBindingRequirementsComponent() {\r\n const requirementsContext = usePolicyBindingRequirements(),\r\n { loading } = requirementsContext;\r\n\r\n return (\r\n \r\n {loading ?\r\n \r\n : \r\n } />\r\n\r\n
    \r\n \r\n
    \r\n\r\n \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n }\r\n
    \r\n );\r\n}\r\n","import { useParams } from 'react-router-dom-v5-compat';\r\nimport { UrlParams } from '..';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport { BindingRequirementsRequestModel } from '@app/Api/BindingRequirementsApi/models';\r\nimport { useContext } from 'react';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { useBindingRequirementsContext } from '@app/Api/BindingRequirementsApi/context';\r\nimport { Severity } from '@app/SinglePageApplication/State/Models';\r\nimport { Mutable } from '@app/Models';\r\n\r\nexport function usePolicyBindingRequirements() {\r\n const params = useParams(),\r\n productLine = ProductLine.parse(params.product),\r\n policyNumber = params.policyNumber as string,\r\n request: BindingRequirementsRequestModel = { ProductLine: productLine.key, PolicyNumber: policyNumber };\r\n\r\n const { update } = useContext(StateContext),\r\n requirementsContext = useBindingRequirementsContext(request, onError);\r\n\r\n return requirementsContext;\r\n\r\n function onError(exception: Error) {\r\n update(state => {\r\n state.error = {\r\n exception: exception as Mutable,\r\n severity: Severity.error,\r\n };\r\n });\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { Path } from '..';\r\nimport { SwyfftRouteObject } from '../routes';\r\nimport { PolicyBindingRequirementsComponent } from './component';\r\n\r\nexport const BindingRequirements: SwyfftRouteObject = {\r\n path: Path.BindingRequirements,\r\n auth: AccessRole.Agent,\r\n element: ,\r\n};\r\n","import * as React from 'react';\r\nimport { ElementSkeleton } from '@app/SinglePageApplication/Components/LoadingSkeleton';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRowSeparator } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { BindingRequirementsFileManagerSkeleton } from '@app/Business/Components/BindingRequirements/FileManager/skeleton';\r\nimport { BindingRequirementsPolicyInfoSkeleton } from '@app/Business/Components/BindingRequirements/PolicyInfo/skeleton';\r\n\r\ninterface Props {\r\n title: string;\r\n}\r\n\r\nexport function ManageBindingRequirementsLoadingSkeleton({ title }: Props) {\r\n return (\r\n <>\r\n \r\n \r\n
    \r\n }\r\n />\r\n\r\n
    \r\n \r\n
    \r\n\r\n \r\n\r\n
    \r\n \r\n
    \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useContext, useRef, useState } from 'react';\r\nimport { deleteCatCode } from '@app/Api/ClaimsApi';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { ToastContext } from '@app/Hooks';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRow } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { AppSettingsContext } from '@app/SinglePageApplication/State/Context';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { SwyfftRouteObject } from '@app/SinglePageApplication/Views/routes';\r\nimport { Button, Confirm } from '@swyfft/webkit';\r\nimport { CatCodeModal as Modal } from '../Modal';\r\nimport { Action, CatCode } from '../Models';\r\nimport { Search } from '../Search';\r\nimport { Table, TableActions } from '../Table';\r\nimport './style.scss';\r\n\r\nexport const CatCodes: SwyfftRouteObject = {\r\n path: Path.CatCodes,\r\n auth: AccessRole.Admin,\r\n element: ,\r\n shouldRevalidate: () => false,\r\n};\r\n\r\nexport function Component() {\r\n const toast = useContext(ToastContext),\r\n appSettings = useContext(AppSettingsContext);\r\n\r\n const [search, setSearch] = useState(''),\r\n [action, setAction] = useState(null),\r\n [code, setCode] = useState(null),\r\n [deleting, setDeleting] = useState(false);\r\n\r\n const tableRef = useRef(null);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n setSearch(search)} />\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n at.description).sort()}\r\n commercialAccidentTypes={appSettings?.commercialAccidentTypes.map(at => at.description).sort()}\r\n onError={(message: string) => toast.error(message)}\r\n onCancel={() => onCancel()}\r\n onSubmit={() => onSubmit()}\r\n />\r\n\r\n \r\n \r\n );\r\n\r\n function onSelect(code: CatCode, action: Action) {\r\n setCode(code);\r\n setAction(action);\r\n }\r\n\r\n function onCancel() {\r\n setAction(null);\r\n setCode(null);\r\n }\r\n\r\n function onSubmit() {\r\n setAction(null);\r\n setCode(null);\r\n tableRef.current?.update();\r\n }\r\n\r\n function onAdd() {\r\n setAction(Action.Add);\r\n }\r\n\r\n async function onDelete() {\r\n try {\r\n if (!code) return;\r\n\r\n setDeleting(true);\r\n await deleteCatCode(code);\r\n\r\n setAction(null);\r\n setCode(null);\r\n tableRef.current?.update();\r\n } catch (e) {\r\n toast.error('An error has occurred while deleting the CAT code. Please try again later.');\r\n } finally {\r\n setDeleting(false);\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { useEffect, useRef, useState } from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport * as ClaimsApi from '@app/Api/ClaimsApi';\r\nimport { LabelFormGroup } from '@app/Components/FormGroups/Label';\r\nimport { Action, CatCode, CatCodeAccidentType } from '../Models';\r\nimport { useFormReducer } from '@app/Hooks';\r\nimport { ProductLine, StateCode } from '@business/CommonSets';\r\nimport {\r\n Rules,\r\n Value,\r\n Tooltip,\r\n Modal,\r\n ModalRow,\r\n Text,\r\n HelpIcon,\r\n DatePicker,\r\n Checkbox,\r\n MultiSelect,\r\n SelectItem,\r\n Button,\r\n} from '@swyfft/webkit';\r\nimport { dateFormat } from '@app/Constants';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n action: Action | null;\r\n code: CatCode | null;\r\n homeownerAccidentTypes: string[] | undefined;\r\n commercialAccidentTypes: string[] | undefined;\r\n onError: (message: string) => void;\r\n onCancel: () => void;\r\n onSubmit: () => void;\r\n};\r\n\r\nexport const CatCodeModal = (props: Props) => {\r\n const states = useRef(StateCode.all().map(s => ({ id: s.code, name: s.code }))).current,\r\n [loading, setLoading] = useState(false);\r\n\r\n const { form, set, validate, valid, reset } = useFormReducer({\r\n code: new Value('CAT code', '', [Rules.required(), Rules.maxLength(25)]),\r\n name: new Value('name', '', [Rules.maxLength(50)]),\r\n startDate: new Value('start date', null, [Rules.required()]),\r\n endDate: new Value('end date', null, [Rules.required()]),\r\n superCat: new Value('super CAT', false),\r\n states: new Value('states', [], [Rules.minLength(1, 'At least one state must be selected.')]),\r\n homeownerAccidentTypes: new Value(\r\n 'homeowner accident types',\r\n [],\r\n [Rules.minLength(1, 'At least one accident type must be selected.')],\r\n ),\r\n commercialAccidentTypes: new Value(\r\n 'commercial accident types',\r\n [],\r\n [Rules.minLength(1, 'At least one accident type must be selected.')],\r\n ),\r\n notes: new Value('notes', '', [Rules.maxLength(1000)]),\r\n });\r\n\r\n useEffect(() => {\r\n if (!props.code || !props.action) reset();\r\n else if (props.action === Action.Edit) {\r\n const code = props.code;\r\n set('code', code.Code || '');\r\n set('name', code.Name || '');\r\n set('startDate', dayjs(code.StartDate, 'MM-DD-YYYY'));\r\n set('endDate', dayjs(code.EndDate, 'MM-DD-YYYY'));\r\n set('states', code.States || []);\r\n set(\r\n 'homeownerAccidentTypes',\r\n code.AccidentTypes.filter(at => at.ProductLineId === ProductLine.Homeowner.key).map(at => at.Name),\r\n );\r\n set(\r\n 'commercialAccidentTypes',\r\n code.AccidentTypes.filter(at => at.ProductLineId === ProductLine.Commercial.key).map(at => at.Name),\r\n );\r\n set('notes', code.Notes || '');\r\n set('superCat', code.IsSuperCat || false);\r\n }\r\n }, [props.code, props.action]);\r\n\r\n return (\r\n !open && props.onCancel()}\r\n >\r\n \r\n {props.action === Action.Add ?\r\n set('code', value)} value={form.code} label='CAT Code' />\r\n : }\r\n \r\n\r\n \r\n
    \r\n set('name', value)}\r\n value={form.name}\r\n placeholder='The name of the CAT that will be shown on the website and emails to our insureds.'\r\n label={\r\n
    \r\n Name\r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n }\r\n />\r\n
    \r\n
    \r\n\r\n \r\n
    \r\n
    \r\n set('startDate', date)}\r\n />\r\n
    \r\n\r\n
    \r\n set('endDate', date)}\r\n />\r\n
    \r\n\r\n
    \r\n set('superCat', checked)}>\r\n Super CAT\r\n \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n {states.length && (\r\n set('states', items)}\r\n >\r\n {states.map(state => (\r\n {state.name}\r\n ))}\r\n \r\n )}\r\n \r\n\r\n \r\n {props.homeownerAccidentTypes && (\r\n set('homeownerAccidentTypes', items)}\r\n >\r\n {props.homeownerAccidentTypes.map(accidentType => (\r\n {accidentType}\r\n ))}\r\n \r\n )}\r\n \r\n\r\n \r\n {props.commercialAccidentTypes && (\r\n set('commercialAccidentTypes', items)}\r\n >\r\n {props.commercialAccidentTypes.map(accidentType => (\r\n {accidentType}\r\n ))}\r\n \r\n )}\r\n \r\n\r\n \r\n set('notes', value)} />\r\n \r\n\r\n
    \r\n \r\n\r\n \r\n
    \r\n \r\n );\r\n\r\n function combineAccidentTypes(): CatCodeAccidentType[] {\r\n return [\r\n ...form.homeownerAccidentTypes.content.map(at => ({\r\n Name: at,\r\n ProductLineId: ProductLine.Homeowner.key,\r\n })),\r\n ...form.commercialAccidentTypes.content.map(at => ({\r\n Name: at,\r\n ProductLineId: ProductLine.Commercial.key,\r\n })),\r\n ].sort((first: CatCodeAccidentType, second: CatCodeAccidentType) => first.Name.localeCompare(second.Name));\r\n }\r\n\r\n async function onSubmit() {\r\n try {\r\n validate();\r\n if (!valid() || !form.startDate.content || !form.endDate.content) return;\r\n\r\n setLoading(true);\r\n\r\n const request = new CatCode();\r\n request.Code = form.code.content;\r\n request.Name = form.name.content;\r\n request.StartDate = form.startDate.content.format(dateFormat);\r\n request.EndDate = form.endDate.content.format(dateFormat);\r\n request.States = form.states.content;\r\n request.AccidentTypes = combineAccidentTypes();\r\n request.Notes = form.notes.content;\r\n request.IsSuperCat = form.superCat.content;\r\n\r\n if (props.action === Action.Add) await ClaimsApi.addCatCode(request);\r\n else if (props.action === Action.Edit) await ClaimsApi.updateCatCode(request);\r\n\r\n props.onSubmit();\r\n } catch (e) {\r\n console.error(e);\r\n props.onError('An unexpected error has occurred while saving the CAT code. Please try again later.');\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n};\r\n","export class CatCode {\r\n Code: string;\r\n Name: string;\r\n StartDate: string;\r\n EndDate: string;\r\n States: string[];\r\n AccidentTypes: CatCodeAccidentType[];\r\n Notes: string;\r\n IsSuperCat: boolean;\r\n}\r\n\r\nexport class CatCodeAccidentType {\r\n Name: string;\r\n ProductLineId: number;\r\n}\r\n\r\nexport enum Action {\r\n Add,\r\n Edit,\r\n Delete,\r\n}\r\n\r\nexport type AccidentType = {\r\n ProductLineId: number;\r\n Name: string;\r\n};\r\n","import * as React from 'react';\r\nimport { debounce } from '@app/Common';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport { useFormReducer } from '@app/Hooks';\r\nimport { Text, Value } from '@swyfft/webkit';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n onChange: (value: string) => void;\r\n};\r\n\r\nexport const Search = (props: Props) => {\r\n const { form, set } = useFormReducer({\r\n search: new Value('search', ''),\r\n });\r\n\r\n return (\r\n
    \r\n \r\n\r\n \r\n
    \r\n );\r\n\r\n function onChange(search: string) {\r\n set('search', search);\r\n debounce('cat-code-search', () => {\r\n props.onChange(search);\r\n });\r\n }\r\n};\r\n","import * as React from 'react';\r\nimport { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport { getCatCodes } from '@app/Api/ClaimsApi';\r\nimport { TableFormGroup, TableParams } from '@app/Components/FormGroups/Table';\r\nimport { DeleteIcon, EditIcon, Tooltip } from '@swyfft/webkit';\r\nimport { dateFormat } from '@app/Constants';\r\nimport { Action, CatCode } from '../Models';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n search: string;\r\n onSelect: (code: CatCode, action: Action) => void;\r\n};\r\n\r\nexport type TableActions = {\r\n update: () => void;\r\n};\r\n\r\nexport const Table = forwardRef(({ search, onSelect }, ref) => {\r\n const tableRef = useRef | null>();\r\n\r\n useImperativeHandle(ref, () => ({\r\n update: () => tableRef.current?.update(),\r\n }));\r\n\r\n useEffect(() => {\r\n if (!tableRef.current || !search) return;\r\n\r\n tableRef.current.search(search);\r\n }, [search]);\r\n\r\n return (\r\n \r\n ref={r => {\r\n tableRef.current = r;\r\n }}\r\n get={get}\r\n row={row}\r\n headers={['Code', 'Name', 'Start Date', 'End Date', 'States', buildAccidentTypesHeader(), 'Notes', '']}\r\n pageSize={15}\r\n />\r\n );\r\n\r\n async function get(params: TableParams): Promise {\r\n return await getCatCodes({\r\n Start: params.start,\r\n Count: params.count,\r\n Search: params.search,\r\n });\r\n }\r\n\r\n function row(model: CatCode): JSX.Element {\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n function buildAccidentTypesHeader() {\r\n return (\r\n <>\r\n Accident Types\r\n \r\n \r\n Homeowner\r\n \r\n \r\n \r\n Commercial\r\n \r\n \r\n );\r\n }\r\n});\r\n","import * as React from 'react';\r\nimport { FC, useContext, useState } from 'react';\r\nimport { useSearchParams } from 'react-router-dom-v5-compat';\r\nimport { TableColumn } from 'react-data-table-component';\r\nimport Skeleton from 'react-loading-skeleton';\r\nimport * as dayjs from 'dayjs';\r\n\r\nimport { AutoComplete, Button, Value, KeyboardArrowRightIcon, SearchIcon, CloseIcon, Modal } from '@swyfft/webkit';\r\nimport { Table } from '@app/SinglePageApplication/Components/Table';\r\nimport TaskSearchForm, { TaskSearchParams } from '@app/SinglePageApplication/Views/ClaimsDashboard/TaskSearchForm';\r\nimport TaskForm from '@app/SinglePageApplication/Views/ClaimsDashboard/TaskForm';\r\nimport { NoData } from '@app/SinglePageApplication/Components/NoData';\r\nimport { getLocalData } from '@app/Storage';\r\nimport { getClaimTasks, getTaskTypes } from '@app/SinglePageApplication/Views/ClaimsDashboard/api';\r\nimport {\r\n ClaimsDashboardContext,\r\n TaskStatus,\r\n IClaimTask,\r\n IClaimTaskFilters,\r\n SAVED_TASK_SEARCH_STORAGE_KEY,\r\n} from '@app/SinglePageApplication/Views/ClaimsDashboard/models';\r\nimport { ToastContext, useAsyncEffect, useFormReducer } from '@app/Hooks';\r\nimport * as Common from '@app/Common';\r\nimport './style.scss';\r\n\r\nconst DATA_SET_SIZE = 25;\r\nconst FRISS_SCORE_WARNING_THRESHOLD = 65;\r\n\r\ntype SavedTaskSearch = {\r\n name: string;\r\n value: string;\r\n};\r\n\r\ntype Form = {\r\n savedSearch: Value;\r\n};\r\n\r\nexport const ClaimTasks: FC = () => {\r\n const [claimTasks, setClaimTasks] = useState([]);\r\n const [createdByList, setCreatedByList] = useState([]);\r\n const [assignedToList, setAssignedToList] = useState([]);\r\n const [taskTypeList, setTaskTypeList] = useState([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [searchFormOpen, setSearchFormOpen] = useState(false);\r\n const [taskFormOpen, setTaskFormOpen] = useState(false);\r\n const [actionMenuOpen, setActionMenuOpen] = useState(false);\r\n const [selectedTaskSearch, setSelectedTaskSearch] = useState({ name: '', value: '' });\r\n\r\n const [searchParams, setSearchParams] = useSearchParams();\r\n const toast = useContext(ToastContext);\r\n const state = useContext(ClaimsDashboardContext);\r\n const skeletonHeight = '25px';\r\n\r\n const { form, set } = useFormReducer({\r\n savedSearch: new Value('saved search', ''),\r\n });\r\n\r\n useAsyncEffect(async () => {\r\n const getData = async () => {\r\n try {\r\n setIsLoading(true);\r\n\r\n const filters: IClaimTaskFilters = {\r\n searchText: searchParams.get('searchText') || '',\r\n taskType: searchParams.get('taskType') || '',\r\n assignedTo: searchParams.get('assignedTo') || '',\r\n dueDate: searchParams.get('dueDate') || '',\r\n };\r\n const tasks = await getClaimTasks(0, DATA_SET_SIZE, filters);\r\n\r\n state.update(state => {\r\n state.taskCount = tasks.length;\r\n state.overdueTaskCount = tasks.filter(\r\n (item: IClaimTask) => item.Status === TaskStatus.Overdue,\r\n ).length;\r\n });\r\n\r\n setClaimTasks(tasks);\r\n } catch (error) {\r\n await toast.error(Common.getErrorMessage(error));\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n // We want this function to be called whenever the query string changes, both from the user selecting something and clicking Search and if they\r\n // search a few times and click the browser's Back button.\r\n await getData();\r\n }, [searchParams]);\r\n\r\n useAsyncEffect(async () => {\r\n // TODO: These lists will be populated from API calls\r\n setCreatedByList(['Everyone', 'Jane Smith', 'John Doe']);\r\n setAssignedToList([\r\n 'Everyone',\r\n 'Chris Tybur',\r\n 'John Doe',\r\n 'Julie Wilson',\r\n 'Michael Williams',\r\n 'Sam Jones',\r\n 'Sara Johnson',\r\n ]);\r\n setTaskTypeList(await getTaskTypes());\r\n }, []);\r\n\r\n const getSavedSearches = (value: string) => {\r\n const savedSearchesData = getLocalData(SAVED_TASK_SEARCH_STORAGE_KEY);\r\n let savedSearches: SavedTaskSearch[] = [];\r\n\r\n if (savedSearchesData) {\r\n try {\r\n const savedSearchesObj = JSON.parse(savedSearchesData);\r\n\r\n savedSearches = Object.keys(savedSearchesObj)\r\n .filter((key: string) => {\r\n return (\r\n value && value.trim() && key.trim().toLowerCase().indexOf(value.trim().toLowerCase()) > -1\r\n );\r\n })\r\n .map((item: string) => ({ name: item, value: savedSearchesObj[item] }));\r\n } catch {}\r\n }\r\n\r\n return Promise.resolve(savedSearches);\r\n };\r\n\r\n const handleSearch = (params: TaskSearchParams) => {\r\n if (params.searchText) {\r\n searchParams.set('searchText', params.searchText);\r\n } else {\r\n searchParams.delete('searchText');\r\n }\r\n\r\n if (params.taskType && params.taskType !== 'All Task Types') {\r\n searchParams.set('taskType', params.taskType);\r\n } else {\r\n searchParams.delete('taskType');\r\n }\r\n\r\n if (params.createdBy && params.createdBy !== 'Everyone') {\r\n searchParams.set('createdBy', params.createdBy);\r\n } else {\r\n searchParams.delete('createdBy');\r\n }\r\n\r\n if (params.assignedTo && params.assignedTo !== 'Everyone') {\r\n searchParams.set('assignedTo', params.assignedTo);\r\n } else {\r\n searchParams.delete('assignedTo');\r\n }\r\n\r\n if (params.dueDate) {\r\n searchParams.set('dueDate', params.dueDate);\r\n } else {\r\n searchParams.delete('dueDate');\r\n }\r\n\r\n setSearchParams(searchParams);\r\n setIsLoading(true);\r\n };\r\n\r\n const handleRunSavedSearch = () => {\r\n if (selectedTaskSearch.name) {\r\n setSearchParams(selectedTaskSearch.value);\r\n setIsLoading(true);\r\n }\r\n };\r\n\r\n const columns: TableColumn[] = [\r\n {\r\n name: '',\r\n cell: row =>\r\n row.Status && row.Status.toString() === TaskStatus.Overdue ?
    : null,\r\n width: '26px',\r\n style: {\r\n justifyContent: 'end',\r\n padding: 0,\r\n },\r\n },\r\n {\r\n name: 'Status',\r\n cell: row =>\r\n row.Status ?\r\n row.Status.toString()\r\n : ,\r\n },\r\n {\r\n name: 'Due Date',\r\n cell: row =>\r\n row.DueDate ?\r\n dayjs(row.DueDate, 'MM-DD-YYYY').format('M/D/YYYY')\r\n : ,\r\n width: '110px',\r\n style: {\r\n fontWeight: 'bold',\r\n },\r\n },\r\n {\r\n name: 'Assigned To / On',\r\n cell: row =>\r\n row.AssignedTo ?\r\n
    \r\n
    {row.AssignedTo}
    \r\n
    {row.AssignedOn}
    \r\n
    \r\n : ,\r\n },\r\n {\r\n name: 'Task Type',\r\n cell: row =>\r\n row.TaskType ?\r\n row.TaskType\r\n : ,\r\n style: {\r\n fontWeight: 'bold',\r\n },\r\n },\r\n {\r\n name: 'Claim / Policy',\r\n cell: row =>\r\n row.ClaimNumber ?\r\n
    \r\n
    {row.ClaimNumber}
    \r\n
    {row.PolicyNumber}
    \r\n
    \r\n : ,\r\n width: '170px',\r\n },\r\n {\r\n name: 'FRISS Score',\r\n cell: row =>\r\n row.FrissScore !== undefined ?\r\n = FRISS_SCORE_WARNING_THRESHOLD ? 'friss-score-warning' : undefined}`}\r\n >{`${row.FrissScore}%`}\r\n : ,\r\n width: '115px',\r\n style: {\r\n fontWeight: 'bold',\r\n },\r\n },\r\n {\r\n name: 'Created By / On',\r\n cell: row =>\r\n row.CreatedBy ?\r\n
    \r\n
    {row.CreatedBy}
    \r\n
    {row.CreatedOn}
    \r\n
    \r\n : ,\r\n },\r\n {\r\n name: 'Source',\r\n cell: row =>\r\n row.Source ? row.Source : ,\r\n width: '115px',\r\n },\r\n // TODO: Implement the action menu\r\n // {\r\n // name: '',\r\n // cell: row => row.ClaimNumber ? (\r\n // ) :\r\n // ,\r\n // width: '38px',\r\n // style: {\r\n // justifyContent: 'start',\r\n // padding: 0,\r\n //\r\n // button: {\r\n // border: 'none',\r\n // backgroundColor: 'transparent',\r\n // padding: 0\r\n // }\r\n // }\r\n // }\r\n ];\r\n\r\n const customStyles = {\r\n table: {\r\n style: {\r\n border: '1px solid #d9d9e9',\r\n },\r\n },\r\n headRow: {\r\n style: {\r\n '& .rdt_TableCol:first-child': {\r\n justifyContent: 'end',\r\n padding: 0,\r\n },\r\n },\r\n },\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n TASKS\r\n {/*
    */}\r\n {/* */}\r\n {/*
    */}\r\n
    \r\n\r\n {!searchFormOpen && (\r\n
    \r\n
    \r\n \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n \r\n id='claims-task-saved-search-input'\r\n name='saved-search'\r\n label=''\r\n value={form.savedSearch}\r\n suggestions={getSavedSearches}\r\n placeholder='Type to find a saved search'\r\n getItemId={item => item.name}\r\n getItemText={item => item.name}\r\n autoComplete={new Date().getTime().toString()}\r\n onTextChange={value => {\r\n set('savedSearch', value);\r\n\r\n if (value === '') {\r\n setSelectedTaskSearch({ name: '', value: '' });\r\n }\r\n }}\r\n onSelect={value => {\r\n set('savedSearch', value.name);\r\n setSelectedTaskSearch(value);\r\n }}\r\n />\r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n )}\r\n\r\n {searchFormOpen && (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n\r\n
    \r\n {searchFormOpen && (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n\r\n setTaskFormOpen(isOpen)}\r\n isDismissable={false}\r\n isKeyboardDismissable={false}\r\n >\r\n setTaskFormOpen(false)}\r\n assignedToList={assignedToList}\r\n taskTypeList={taskTypeList}\r\n />\r\n \r\n\r\n }\r\n loading={isLoading}\r\n hasMore={false}\r\n loadingMore={false}\r\n customStyles={customStyles}\r\n />\r\n
    \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { FC, useContext } from 'react';\r\n\r\nimport { Button, Rules, Text, Value } from '@swyfft/webkit';\r\nimport {\r\n SAVED_TASK_SEARCH_STORAGE_KEY,\r\n SavedTaskSearches,\r\n} from '@app/SinglePageApplication/Views/ClaimsDashboard/models';\r\nimport { ToastContext, useFormReducer } from '@app/Hooks';\r\nimport { getLocalData, saveLocalData } from '@app/Storage';\r\nimport './style.scss';\r\n\r\ntype Form = {\r\n savedSearchName: Value;\r\n};\r\n\r\ntype Props = {\r\n onClose: () => void;\r\n};\r\n\r\nconst SavedSearchForm: FC = props => {\r\n const toast = useContext(ToastContext);\r\n\r\n const { form, setWithoutValidation, validate } = useFormReducer({\r\n savedSearchName: new Value('savedSearchName', '', [\r\n Rules.required(true, 'Please enter a name for the saved search.'),\r\n Rules.maxLength(200),\r\n ]),\r\n });\r\n\r\n const handleSaveSearch = async () => {\r\n validate();\r\n form.savedSearchName.validate();\r\n\r\n if (form.savedSearchName.valid) {\r\n const savedSearchesData = getLocalData(SAVED_TASK_SEARCH_STORAGE_KEY);\r\n let savedSearches: SavedTaskSearches = {};\r\n\r\n if (savedSearchesData) {\r\n try {\r\n savedSearches = JSON.parse(savedSearchesData);\r\n } catch {}\r\n }\r\n\r\n savedSearches[form.savedSearchName.content.trim()] = window.location.search.substring(1);\r\n saveLocalData(SAVED_TASK_SEARCH_STORAGE_KEY, JSON.stringify(savedSearches));\r\n props.onClose();\r\n await toast.success('Search saved.', 3000);\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n setWithoutValidation('savedSearchName', value)}\r\n />\r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default SavedSearchForm;\r\n","import * as React from 'react';\r\nimport { FC, useContext, useState } from 'react';\r\nimport * as dayjs from 'dayjs';\r\n\r\nimport { Button, DatePicker, Rules, Select, MultiSelect, SelectItem, Text, Value } from '@swyfft/webkit';\r\nimport { ToastContext, useFormReducer } from '@app/Hooks';\r\nimport { IClaimTask, TaskStatus } from '@app/SinglePageApplication/Views/ClaimsDashboard/models';\r\nimport { addClaimTask } from '@app/SinglePageApplication/Views/ClaimsDashboard/api';\r\nimport { getAgentName } from '@app/Storage';\r\nimport * as Constants from '@app/Constants';\r\nimport * as Common from '@app/Common';\r\nimport './style.scss';\r\n\r\ntype Form = {\r\n claimNumber: Value;\r\n dueDate: Value;\r\n taskType: Value;\r\n assignedTo: Value;\r\n};\r\n\r\ntype Props = {\r\n onClose: () => void;\r\n assignedToList: string[];\r\n taskTypeList: string[];\r\n};\r\n\r\nconst TaskForm: FC = props => {\r\n const [isLoading, setIsLoading] = useState(false);\r\n const toast = useContext(ToastContext);\r\n\r\n const { form, set, setWithoutValidation, validate } = useFormReducer({\r\n claimNumber: new Value('claim number', '', [\r\n Rules.required(true, 'Please enter a claim or policy number.'),\r\n Rules.maxLength(50),\r\n ]),\r\n taskType: new Value('task type', '', [Rules.required(true, 'Please select a task type.')]),\r\n assignedTo: new Value('assigned to', [], [Rules.minLength(1, 'Please select an assignee.')]),\r\n dueDate: new Value('due date', null),\r\n });\r\n\r\n const createdBy = new Value('created by', `${getAgentName()} - ${dayjs().format('MM/DD/YYYY')}`);\r\n\r\n const resetForm = () => {\r\n form.claimNumber.reset();\r\n form.dueDate.reset();\r\n form.taskType.reset();\r\n form.assignedTo.reset();\r\n };\r\n\r\n const handleChangeDueDate = (dueDate: dayjs.Dayjs | null) => {\r\n form.dueDate.set(dueDate);\r\n form.dueDate.validate();\r\n\r\n set('dueDate', dueDate);\r\n };\r\n\r\n const handleSubmit = async () => {\r\n validate();\r\n form.claimNumber.validate();\r\n form.taskType.validate();\r\n\r\n if (form.claimNumber.valid && form.taskType.valid) {\r\n try {\r\n setIsLoading(true);\r\n\r\n const task: IClaimTask = {\r\n ClaimNumber: form.claimNumber.content,\r\n PolicyNumber: form.claimNumber.content,\r\n TaskType: form.taskType.content,\r\n Status: TaskStatus.All,\r\n DueDate: form.dueDate.content ? form.dueDate.content.format(Constants.dateFormatWithHyphens) : '',\r\n AssignedTo: '',\r\n CreatedBy: '',\r\n CreatedOn: '',\r\n AssignedOn: '',\r\n Source: '',\r\n };\r\n\r\n await addClaimTask(task);\r\n\r\n resetForm();\r\n props.onClose();\r\n await toast.success('Task successfully added.', 3000);\r\n } catch (error) {\r\n await toast.error(Common.getErrorMessage(error));\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n setWithoutValidation('claimNumber', value)}\r\n />\r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n set('taskType', option.toString())}\r\n >\r\n {props.taskTypeList.map((value: string) => (\r\n {value}\r\n ))}\r\n \r\n
    \r\n\r\n
    \r\n
    \r\n {}}\r\n />\r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n set('assignedTo', option)}\r\n >\r\n {props.assignedToList.map((value: string) => (\r\n {value}\r\n ))}\r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default TaskForm;\r\n","import * as React from 'react';\r\nimport { FC, useContext, useEffect, useState } from 'react';\r\nimport { useSearchParams } from 'react-router-dom-v5-compat';\r\nimport * as dayjs from 'dayjs';\r\n\r\nimport {\r\n Button,\r\n ContentCopyIcon,\r\n DatePicker,\r\n Modal,\r\n Rules,\r\n SaveIcon,\r\n Select,\r\n SelectItem,\r\n Text,\r\n Value,\r\n} from '@swyfft/webkit';\r\nimport SavedSearchForm from '@app/SinglePageApplication/Views/ClaimsDashboard/SavedSearchForm';\r\nimport { ToastContext, useFormReducer } from '@app/Hooks';\r\nimport { getAgentName } from '@app/Storage';\r\nimport * as Common from '@app/Common';\r\nimport * as Constants from '@app/Constants';\r\nimport '@app/Common/style.scss';\r\nimport './style.scss';\r\n\r\nexport type TaskSearchParams = {\r\n searchText: string;\r\n taskType: string;\r\n createdBy: string;\r\n assignedTo: string;\r\n dueDate: string;\r\n};\r\n\r\ntype Form = {\r\n searchText: Value;\r\n taskType: Value;\r\n createdBy: Value;\r\n assignedTo: Value;\r\n dueDate: Value;\r\n};\r\n\r\ntype TaskSearchFormProps = {\r\n createdByList: string[];\r\n assignedToList: string[];\r\n taskTypeList: string[];\r\n isLoading: boolean;\r\n onSubmit: (params: TaskSearchParams) => void;\r\n};\r\n\r\nconst TaskSearchForm: FC = props => {\r\n const [initialLoad, setInitialLoad] = useState(true);\r\n const [isSaveSearchFormVisible, setIsSaveSearchFormVisible] = useState(false);\r\n const [searchParams] = useSearchParams();\r\n const toast = useContext(ToastContext);\r\n\r\n const dueDateParam = searchParams.get('dueDate');\r\n let dueDate: dayjs.Dayjs | null = null;\r\n\r\n if (dueDateParam && dayjs(dueDateParam).isValid()) {\r\n dueDate = dayjs(dueDateParam);\r\n }\r\n\r\n const { form, set } = useFormReducer({\r\n searchText: new Value('searchText', searchParams.get('searchText') || ''),\r\n taskType: new Value('taskType', searchParams.get('taskType') || 'All Task Types'),\r\n createdBy: new Value('createdBy', searchParams.get('createdBy') || 'Everyone'),\r\n assignedTo: new Value('assignedTo', searchParams.get('assignedTo') || 'Everyone'),\r\n dueDate: new Value('dueDate', dueDate),\r\n });\r\n\r\n useEffect(() => {\r\n // If we aren't searching by a particular Assigned To value, try to set the given agent as the default value in that drop-down\r\n if (\r\n initialLoad &&\r\n props.createdByList.length > 0 &&\r\n props.assignedToList.length > 0 &&\r\n !searchParams.get('assignedTo')\r\n ) {\r\n const agentName = getAgentName() || '';\r\n\r\n if (props.assignedToList.includes(agentName)) {\r\n set('assignedTo', agentName);\r\n }\r\n\r\n setInitialLoad(false);\r\n }\r\n });\r\n\r\n const handleCopySearchParams = async () => {\r\n await Common.copyText(window.location.href);\r\n await toast.success('Link to search options copied to the clipboard.', 3000);\r\n };\r\n\r\n const handleChangeDueDate = (value: dayjs.Dayjs | null) => {\r\n form.dueDate.set(value);\r\n form.dueDate.validate();\r\n\r\n set('dueDate', value);\r\n };\r\n\r\n const handleSearch = async () => {\r\n const params = {\r\n searchText: form.searchText.content,\r\n taskType: form.taskType.content,\r\n createdBy: form.createdBy.content,\r\n assignedTo: form.assignedTo.content,\r\n dueDate: form.dueDate.content ? form.dueDate.content.format(Constants.dateFormatWithHyphens) : '',\r\n };\r\n\r\n props.onSubmit(params);\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n set('searchText', value)}\r\n />\r\n
    \r\n\r\n
    \r\n set('taskType', option)}\r\n >\r\n {props.taskTypeList.map((value: string) => (\r\n {value}\r\n ))}\r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n\r\n
    \r\n set('assignedTo', option)}\r\n >\r\n {props.assignedToList.map((item: string) => (\r\n {item}\r\n ))}\r\n \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n\r\n \r\n
    \r\n\r\n setIsSaveSearchFormVisible(isOpen)}\r\n >\r\n setIsSaveSearchFormVisible(false)} />\r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default TaskSearchForm;\r\n","import * as dayjs from 'dayjs';\r\n\r\nimport { IClaimTask, IClaimTaskFilters, TaskStatus } from '@app/SinglePageApplication/Views/ClaimsDashboard/models';\r\n// import { fetchAndLog } from '@app/Api/Fetch';\r\nimport { encodeQueryParam } from '@app/Common';\r\n\r\nasync function getMockClaimTasks(skip: number, take: number, filters: IClaimTaskFilters): Promise {\r\n let mockTasks = new Array();\r\n\r\n for (let i = 1; i <= 25; i++) {\r\n mockTasks.push({\r\n ClaimNumber: i % 2 === 0 ? `SWYSWPN0000${i}` : `SWYSWPN12${i}000`,\r\n PolicyNumber: i <= 7 ? `AL01-${i}00123-01` : `AL02-${i}00123-01`,\r\n TaskType: i <= 2 ? 'Claims - Initial Coverage Review' : 'Liability Consult/Referral',\r\n Status: i % 3 === 0 ? TaskStatus.Overdue : TaskStatus.Pending,\r\n CreatedBy: i <= 6 ? 'John Doe' : 'Jane Smith',\r\n CreatedOn: i % 3 ? '5/1/2024' : '5/17/2024',\r\n DueDate: dayjs(\r\n `${i.toString().padStart(2, '0')}-${(i + 2).toString().padStart(2, '0')}-2024`,\r\n 'MM-DD-YYYY',\r\n ).format('MM-DD-YYYY'),\r\n AssignedTo:\r\n i % 4 === 0 ?\r\n i % 8 === 0 ?\r\n 'Sara Johnson'\r\n : 'Julie Wilson'\r\n : 'Sam Jones',\r\n AssignedOn: i % 4 ? '10/1/2024' : '9/17/2024',\r\n Source: i % 5 ? 'IMS' : 'Symbility',\r\n FrissScore: i === 1 ? 65 : 0,\r\n });\r\n }\r\n\r\n if (\r\n filters.searchText ||\r\n (filters.taskType && filters.taskType !== 'All') ||\r\n (filters.assignedTo && filters.assignedTo !== 'Everyone') ||\r\n filters.dueDate\r\n ) {\r\n if (filters.searchText) {\r\n const claimNumberResults = mockTasks.filter((item: IClaimTask) => {\r\n return item.ClaimNumber.indexOf(filters.searchText || '') > -1;\r\n });\r\n\r\n const policyNumberResults = mockTasks.filter((item: IClaimTask) => {\r\n return item.PolicyNumber.indexOf(filters.searchText || '') > -1;\r\n });\r\n\r\n mockTasks.length = 0;\r\n mockTasks.push(...claimNumberResults);\r\n mockTasks.push(...policyNumberResults);\r\n } else if (filters.taskType && filters.taskType !== 'All') {\r\n mockTasks = mockTasks.filter((item: IClaimTask) => {\r\n return item.TaskType === filters.taskType;\r\n });\r\n } else if (filters.assignedTo && filters.assignedTo !== 'Everyone') {\r\n mockTasks = mockTasks.filter((item: IClaimTask) => {\r\n return item.AssignedTo === filters.assignedTo;\r\n });\r\n } else if (filters.dueDate) {\r\n mockTasks = mockTasks.filter((item: IClaimTask) => {\r\n if (filters.dueDate) {\r\n return item.DueDate === filters.dueDate;\r\n } else {\r\n return false;\r\n }\r\n });\r\n }\r\n }\r\n\r\n await new Promise(r => setTimeout(r, 2000));\r\n\r\n return mockTasks;\r\n}\r\n\r\nexport async function getClaimTasks(skip: number, take: number, filters: IClaimTaskFilters): Promise {\r\n let queryParams = `?skip=${skip}&take=${take}`;\r\n\r\n if (filters.searchText) {\r\n queryParams += `&${encodeQueryParam('searchText', filters.searchText)}`;\r\n }\r\n\r\n if (filters.taskType) {\r\n queryParams += `&${encodeQueryParam('taskType', filters.taskType)}`;\r\n }\r\n\r\n if (filters.dueDate) {\r\n queryParams += `&${encodeQueryParam('dueDate', filters.dueDate)}`;\r\n }\r\n\r\n return await getMockClaimTasks(skip, take, filters);\r\n\r\n // TODO: Uncomment when the actual API is available\r\n // return await fetchAndLog(`/api/claims/get-tasks${queryParams}`, 'get claim tasks');\r\n}\r\n\r\nexport async function addClaimTask(task: IClaimTask) {\r\n await new Promise(r => setTimeout(r, 2000));\r\n return;\r\n\r\n // TODO: Uncomment when the actual API is available\r\n // return await fetchAndLog('/api/claims/add-task', 'add claim task', {\r\n // method: 'POST',\r\n // body: JSON.stringify(task)\r\n // });\r\n}\r\n\r\nexport async function getTaskTypes() {\r\n return [\r\n 'Background Check Only, No SIU',\r\n 'Claims - Appraisal Request',\r\n 'Claims - Attorney Client Privilege',\r\n 'Claims - Authority Request',\r\n 'Claims - Coverage',\r\n 'Claims - Dispute & Litigation',\r\n 'Claims - Expense Payment',\r\n 'Claims - Initial Coverage Review',\r\n 'Claims - Liability',\r\n 'Claims - Liability 30-120-day Review',\r\n 'Claims - Litigation Payment',\r\n 'Claims - Manager Review',\r\n 'Claims - Property',\r\n 'Claims - Reserve Recommendations',\r\n 'Claims - Settlement',\r\n 'Claims - Task/Message',\r\n 'Friss Fraud Score Review by SIU',\r\n 'Immunity Documents Review',\r\n 'Immunity Request',\r\n 'Large Loss',\r\n 'Large Loss - Actions',\r\n 'Large Loss - Consult',\r\n 'Large Loss - Referral',\r\n 'Liability Consult/Referral',\r\n 'Phone Conversation',\r\n 'Salvage',\r\n 'SIU Closing Summary',\r\n 'SIU EUO update',\r\n 'SIU New EUO request',\r\n 'SIU New Liability Referral',\r\n 'SIU New Property Referral',\r\n 'SIU Re-open',\r\n 'SIU Suspicion of Fraud',\r\n 'SIU Update',\r\n 'Subrogation',\r\n 'Subrogation - Action Plan',\r\n 'Subrogation - Manager Review',\r\n 'Subrogation - New Referral',\r\n ];\r\n}\r\n","import * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Routes, Route, Navigate, useNavigate, useLocation } from 'react-router-dom-v5-compat';\r\n\r\nimport { Drawer } from '@swyfft/webkit';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { Sidebar } from '@app/SinglePageApplication/Components/Sidebar';\r\nimport { ClaimTasks } from '@app/SinglePageApplication/Views/ClaimsDashboard/ClaimTasks';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport Burger from '@app/Components/Menus/NavbarComponents/Burger';\r\nimport { useClaimsDashboardReducer } from '@app/SinglePageApplication/Views/ClaimsDashboard/reducer';\r\nimport { ClaimsDashboardContext } from '@app/SinglePageApplication/Views/ClaimsDashboard/models';\r\nimport { AccessRole } from '@app/Constants';\r\nimport './style.scss';\r\n\r\nexport const ClaimsDashboardComponent = () => {\r\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\r\n const reducer = useClaimsDashboardReducer();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n\r\n const sidebarNodes = [\r\n {\r\n title: 'Tasks',\r\n itemCountProperty: 'taskCount',\r\n itemSubCountProperty: 'overdueTaskCount',\r\n // TODO: Add logic here when we have more than one node for the sidebar\r\n onClick: () => {},\r\n icon: (\r\n \r\n ),\r\n },\r\n ];\r\n\r\n const handleOpenMobileMenu = () => {\r\n setMobileMenuOpen(true);\r\n };\r\n\r\n const handleCloseMobileMenu = () => {\r\n setMobileMenuOpen(false);\r\n };\r\n\r\n return (\r\n \r\n
    \r\n \r\n navigate('/')}\r\n />\r\n \r\n\r\n navigate('/')}\r\n />\r\n\r\n
    \r\n
    \r\n \r\n
    \r\n\r\n \r\n } />\r\n } />\r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport const ClaimsDashboard = {\r\n path: Path.ClaimsDashboard,\r\n auth: AccessRole.Agent,\r\n element: ,\r\n noTransition: true,\r\n hideNavbar: true,\r\n hideFooter: true,\r\n};\r\n","import { createContext } from 'react';\r\n\r\nimport { Mutable } from '@app/Models';\r\n\r\nexport const SAVED_TASK_SEARCH_STORAGE_KEY = 'claimTaskSavedSearches';\r\n\r\nexport enum TaskStatus {\r\n All = 'All Statuses',\r\n Pending = 'Pending',\r\n Assigned = 'Assigned',\r\n InProgress = 'In Progress',\r\n Overdue = 'Overdue',\r\n}\r\n\r\nexport interface IClaimTask {\r\n ClaimNumber: string;\r\n PolicyNumber: string;\r\n TaskType: string;\r\n Status: TaskStatus;\r\n CreatedBy: string;\r\n CreatedOn: string;\r\n DueDate: string;\r\n AssignedTo: string;\r\n AssignedOn: string;\r\n Source: string;\r\n Note?: string;\r\n FrissScore?: number;\r\n}\r\n\r\nexport interface IClaimTaskFilters {\r\n searchText?: string;\r\n taskType?: string;\r\n assignedTo?: string;\r\n dueDate?: string;\r\n}\r\n\r\nexport type SavedTaskSearches = Record;\r\n\r\n// These types define a context for sharing data between the various claims dashboard components and the sidebar\r\nexport type ClaimsDashboardState = {\r\n taskCount: number;\r\n overdueTaskCount: number;\r\n};\r\n\r\nexport const InitialState: ClaimsDashboardState = {\r\n taskCount: 0,\r\n overdueTaskCount: 0,\r\n};\r\n\r\nexport type MutableState = Mutable;\r\n\r\nexport enum ActionType {\r\n Update,\r\n Revert,\r\n}\r\nexport type Action = {\r\n type: ActionType;\r\n updater?: (state: MutableState) => void;\r\n};\r\n\r\nexport type ClaimsDashboardReducer = {\r\n state: ClaimsDashboardState;\r\n update: (updater: (state: MutableState) => void) => void;\r\n revert: () => void;\r\n};\r\n\r\nexport const ClaimsDashboardContext = createContext({} as ClaimsDashboardReducer);\r\n","import { useReducer } from 'react';\r\nimport { produce } from 'immer';\r\n\r\nimport {\r\n Action,\r\n ActionType,\r\n ClaimsDashboardReducer,\r\n ClaimsDashboardState,\r\n InitialState,\r\n MutableState,\r\n} from '@app/SinglePageApplication/Views/ClaimsDashboard/models';\r\n\r\nexport const useClaimsDashboardReducer = (): ClaimsDashboardReducer => {\r\n const initial = InitialState;\r\n const [state, dispatch] = useReducer(reducer, initial);\r\n\r\n return {\r\n state,\r\n update: (updater: (state: MutableState) => void) => dispatch({ type: ActionType.Update, updater }),\r\n revert: () => dispatch({ type: ActionType.Revert }),\r\n };\r\n\r\n function reducer(state: ClaimsDashboardState, action: Action): ClaimsDashboardState {\r\n const { type, updater } = action;\r\n\r\n switch (type) {\r\n case ActionType.Update:\r\n if (!updater) {\r\n return { ...state };\r\n }\r\n\r\n return produce(state, draft => {\r\n updater(draft);\r\n });\r\n case ActionType.Revert:\r\n return { ...initial };\r\n default:\r\n throw new Error(ActionType[action.type] + ' action not implemented.');\r\n }\r\n }\r\n};\r\n","import { getAddressMatches, getExistingCommercialQuotes } from '@app/Api/CommercialApi';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport * as Common from '@app/Common';\r\nimport { toAddress } from '@app/Common';\r\nimport { pages } from '@app/Constants';\r\nimport { useNavigateWithParams } from '@app/Hooks';\r\nimport { AppSettingsContext } from '@app/SinglePageApplication/State/Context';\r\nimport { getQuotePath } from '@app/SinglePageApplication/Views';\r\nimport { useContext } from 'react';\r\nimport { CommercialBuildingAddressInputProps, CommercialBuildingAddressResult } from './models';\r\n\r\nexport function useCommercialBuildingAddressInput(props: CommercialBuildingAddressInputProps) {\r\n const { reducer, onError } = props,\r\n { setWithoutValidation } = reducer,\r\n appSettings = useContext(AppSettingsContext),\r\n navigate = useNavigateWithParams();\r\n\r\n return {\r\n getSuggestions,\r\n onTextChange,\r\n onSelect,\r\n };\r\n\r\n async function getSuggestions(filter: string | undefined) {\r\n if (!filter) return [];\r\n\r\n try {\r\n const [existingQuotes, addresses] = await Promise.all([\r\n getExistingCommercialQuotes(filter),\r\n getAddressMatches(filter),\r\n ]),\r\n quoteResults = existingQuotes.map(q => ({ address: toAddress(q.Address), quoteId: q.QuoteId })),\r\n addressResults = addresses.map(a => ({ address: a.FullAddress, addressKey: a.AddressKey }));\r\n\r\n return [...quoteResults, ...addressResults];\r\n } catch (e) {\r\n await onError(e);\r\n return [];\r\n }\r\n }\r\n\r\n function onTextChange(value: string) {\r\n setWithoutValidation('buildingAddress', value);\r\n }\r\n\r\n function onSelect(result: CommercialBuildingAddressResult) {\r\n if (result.quoteId) {\r\n if (appSettings?.newCommercialQuotePageEnabled) {\r\n const path = getQuotePath(1);\r\n navigate(path, { product: ProductLine.Commercial.lowercaseName, quoteId: result.quoteId });\r\n } else {\r\n Common.navigate(pages.LegacyCommercialQuote(result.quoteId));\r\n }\r\n\r\n return;\r\n }\r\n\r\n setWithoutValidation('buildingAddress', result.address);\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { AutoComplete } from '@swyfft/webkit';\r\nimport { useCommercialBuildingAddressInput } from './hook';\r\nimport { CommercialBuildingAddressItem } from './item';\r\nimport { CommercialBuildingAddressInputProps, CommercialBuildingAddressResult } from './models';\r\n\r\nexport function CommercialBuildingAddressInput(props: CommercialBuildingAddressInputProps) {\r\n const { form } = props.reducer,\r\n { getSuggestions, onTextChange, onSelect } = useCommercialBuildingAddressInput(props);\r\n\r\n return (\r\n \r\n placeholder='Type your address'\r\n id='building-address-input'\r\n value={form.buildingAddress}\r\n suggestions={getSuggestions}\r\n getItemId={result => result.address}\r\n getItemText={result => result.address}\r\n getItemComponent={result => }\r\n onTextChange={onTextChange}\r\n onSelect={onSelect}\r\n autoComplete='off'\r\n autoFocus\r\n />\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport { pages } from '@app/Constants';\r\nimport { AppSettingsContext } from '@app/SinglePageApplication/State/Context';\r\nimport { getPath, Path } from '@app/SinglePageApplication/Views';\r\nimport { CheckIcon, Link } from '@swyfft/webkit';\r\nimport { CommercialBuildingAddressResult } from './models';\r\n\r\ntype Props = {\r\n result: CommercialBuildingAddressResult;\r\n};\r\n\r\nexport function CommercialBuildingAddressItem(props: Props) {\r\n const { address, quoteId } = props.result,\r\n appSettings = React.useContext(AppSettingsContext);\r\n\r\n return (\r\n
    \r\n
    \r\n {quoteId && }\r\n {address}\r\n
    \r\n\r\n {quoteId && (\r\n \r\n Edit Quote\r\n \r\n )}\r\n
    \r\n );\r\n\r\n function getQuoteUri() {\r\n if (!quoteId) throw new Error('Missing quote ID.');\r\n\r\n return appSettings?.newCommercialQuotePageEnabled ?\r\n getPath(Path.Customize, { product: ProductLine.Commercial.lowercaseName, quoteId }) :\r\n pages.LegacyCommercialQuote(quoteId);\r\n }\r\n}\r\n","import { getConstructionTypes } from '@app/Api/CommercialApi';\r\nimport { useMemo } from 'react';\r\nimport { SelectConstructionTypeOption, SelectConstructionTypeProps } from './models';\r\n\r\nexport function useSelectConstructionType(props: SelectConstructionTypeProps) {\r\n const { setWithoutValidation } = props.reducer,\r\n options = useMemo(async () => await getConstructionTypes(), []);\r\n\r\n return {\r\n getSuggestions,\r\n onTextChange,\r\n onSelect,\r\n };\r\n\r\n async function getSuggestions(filter: string | undefined) {\r\n return (await options)\r\n .map(option => ({ id: option, value: option }))\r\n .filter(option => option.value.toLowerCase().includes((filter ?? '').toLowerCase()));\r\n }\r\n\r\n function onTextChange(text: string) {\r\n setWithoutValidation('constructionType', text?.toString() || '');\r\n }\r\n\r\n function onSelect(result: SelectConstructionTypeOption) {\r\n setWithoutValidation('constructionType', result.value);\r\n }\r\n}\r\n","import { ComboBox } from '@swyfft/webkit';\r\nimport * as React from 'react';\r\nimport { useSelectConstructionType } from './hook';\r\nimport { SelectConstructionTypeOption, SelectConstructionTypeProps } from './models';\r\n\r\nexport function SelectConstructionType(props: SelectConstructionTypeProps) {\r\n const { form } = props.reducer,\r\n { getSuggestions, onTextChange, onSelect } = useSelectConstructionType(props);\r\n\r\n return (\r\n \r\n id='construction-type-input'\r\n placeholder='Construction Type'\r\n value={form.constructionType}\r\n suggestions={getSuggestions}\r\n getItemId={result => result.id}\r\n getItemText={result => result.value}\r\n onTextChange={onTextChange}\r\n onSelect={onSelect}\r\n />\r\n );\r\n}\r\n","import { ElementDisplayFormatTypes } from '@app/Constants';\r\nimport { ReducerType } from '@app/Hooks';\r\nimport { LandingFooter } from '@app/SinglePageApplication/Components/Landing/LandingFooter';\r\nimport { Button, Text } from '@swyfft/webkit';\r\nimport * as React from 'react';\r\nimport { CommercialLandingForm } from '../../models';\r\nimport { CommercialBuildingAddressInput } from '../BuildingAddressInput';\r\nimport { SelectConstructionType } from '../ConstructionType';\r\nimport { SelectGeneralLiability } from '../GeneralLiability';\r\nimport { SelectLessorsRisk } from '../LessorsRisk';\r\nimport { SelectOccupancyType } from '../OccupancyType';\r\nimport { SelectSwimmingPoolCount } from '../SwimmingPoolCount';\r\n\r\ntype Props = {\r\n reducer: ReducerType;\r\n onSubmit: (event: React.FormEvent) => Promise;\r\n onError: (error: any) => Promise;\r\n setIsUnitCountVisible: React.Dispatch>;\r\n isUnitCountVisible: boolean;\r\n formatNumber: (key: keyof CommercialLandingForm, formatType: string) => void;\r\n isLoading: boolean;\r\n};\r\n\r\nexport function CommercialLandingFormComponent(props: Props) {\r\n const { reducer, onSubmit, onError, setIsUnitCountVisible, isUnitCountVisible, formatNumber, isLoading } = props;\r\n\r\n return (\r\n \r\n {/* Begin row 1 */}\r\n
    \r\n
    \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n {/* End row 1 */}\r\n\r\n {/* Begin row 2 */}\r\n
    \r\n
    \r\n reducer.setWithoutValidation('yearBuilt', value)}\r\n type='number'\r\n maxLength={4}\r\n />\r\n
    \r\n\r\n
    \r\n reducer.setWithoutValidation('numberOfBuildings', value)}\r\n type='number'\r\n />\r\n
    \r\n\r\n
    \r\n reducer.setWithoutValidation('numberOfStories', value)}\r\n type='number'\r\n />\r\n
    \r\n\r\n {isUnitCountVisible && (\r\n
    \r\n reducer.setWithoutValidation('numberOfUnits', value)}\r\n type='number'\r\n />\r\n
    \r\n )}\r\n\r\n
    \r\n reducer.setWithoutValidation('squareFootage', value)}\r\n onBlur={() => formatNumber('squareFootage', ElementDisplayFormatTypes.Int)}\r\n />\r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n {/* End row 2 */}\r\n\r\n {/* Begin row 3 */}\r\n
    \r\n
    \r\n
    \r\n reducer.setWithoutValidation('buildingValue', value)}\r\n onBlur={() => formatNumber('buildingValue', ElementDisplayFormatTypes.Float)}\r\n withCurrencyPrefix\r\n />\r\n
    \r\n\r\n
    \r\n reducer.setWithoutValidation('businessPersonalPropertyLimit', value)}\r\n onBlur={() =>\r\n formatNumber('businessPersonalPropertyLimit', ElementDisplayFormatTypes.Float)\r\n }\r\n withCurrencyPrefix\r\n />\r\n
    \r\n\r\n
    \r\n reducer.setWithoutValidation('businessIncomeLimit', value)}\r\n onBlur={() => formatNumber('businessIncomeLimit', ElementDisplayFormatTypes.Float)}\r\n withCurrencyPrefix\r\n />\r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n reducer.setWithoutValidation('targetAnnualPremium', value)}\r\n onBlur={() => formatNumber('targetAnnualPremium', ElementDisplayFormatTypes.Float)}\r\n withCurrencyPrefix\r\n />\r\n
    \r\n
    \r\n {/* End row 3 */}\r\n\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n}\r\n","import { SelectGeneralLiabilityOption, selectGeneralLiabilityOptions, SelectGeneralLiabilityProps } from './models';\r\n\r\nexport function useSelectGeneralLiability(props: SelectGeneralLiabilityProps) {\r\n const { setWithoutValidation } = props.reducer;\r\n\r\n return {\r\n getSuggestions,\r\n onTextChange,\r\n onSelect,\r\n };\r\n\r\n function getSuggestions(filter: string | undefined) {\r\n return selectGeneralLiabilityOptions.filter(option =>\r\n option.value.toLowerCase().includes((filter ?? '').toLowerCase())\r\n );\r\n }\r\n\r\n function onTextChange(text: string) {\r\n setWithoutValidation('generalLiabilityCoverage', text?.toString() || '');\r\n }\r\n\r\n function onSelect(result: SelectGeneralLiabilityOption) {\r\n setWithoutValidation('generalLiabilityCoverage', result.value);\r\n }\r\n}\r\n","import { ComboBox } from '@swyfft/webkit';\r\nimport * as React from 'react';\r\nimport { useSelectGeneralLiability } from './hook';\r\nimport { SelectGeneralLiabilityOption, SelectGeneralLiabilityProps } from './models';\r\n\r\nexport function SelectGeneralLiability(props: SelectGeneralLiabilityProps) {\r\n const { form } = props.reducer,\r\n { getSuggestions, onTextChange, onSelect } = useSelectGeneralLiability(props);\r\n\r\n return (\r\n \r\n id='general-liability-input'\r\n placeholder='General Liability'\r\n value={form.generalLiabilityCoverage}\r\n suggestions={getSuggestions}\r\n getItemId={result => result.id}\r\n getItemText={result => result.value}\r\n onTextChange={onTextChange}\r\n onSelect={onSelect}\r\n />\r\n );\r\n}\r\n","import { commercialGeneralLiabilityTypes } from '@app/Constants';\r\nimport { ReducerType } from '@app/Hooks';\r\nimport { CommercialLandingForm } from '../../models';\r\n\r\nexport type SelectGeneralLiabilityProps = {\r\n reducer: ReducerType;\r\n};\r\n\r\nexport type SelectGeneralLiabilityOption = {\r\n id: string;\r\n value: string;\r\n};\r\n\r\nexport const selectGeneralLiabilityOptions: SelectGeneralLiabilityOption[] = Object.entries(\r\n commercialGeneralLiabilityTypes\r\n).map(([id, value]) => ({\r\n id,\r\n value,\r\n}));\r\n","import { SelectLessorsRiskOption, SelectLessorsRiskProps } from './models';\r\n\r\nexport function useLessorsRisk(props: SelectLessorsRiskProps) {\r\n const { reducer } = props,\r\n { form, setWithoutValidation } = reducer;\r\n\r\n return {\r\n form,\r\n getSuggestions,\r\n onTextChange,\r\n onSelect,\r\n };\r\n\r\n function getSuggestions(filter: string | undefined) {\r\n return ['Yes', 'No']\r\n .filter(option => !filter || option.toLowerCase().includes(filter.toLowerCase()))\r\n .map(option => ({ id: option === 'Yes', value: option }));\r\n }\r\n\r\n function onTextChange(text: string) {\r\n setWithoutValidation('lessorsRisk', text?.toString() || '');\r\n }\r\n\r\n function onSelect(result: SelectLessorsRiskOption) {\r\n setWithoutValidation('lessorsRisk', result.value);\r\n }\r\n}\r\n","import { ComboBox } from '@swyfft/webkit';\r\nimport * as React from 'react';\r\nimport { useLessorsRisk } from './hook';\r\nimport { SelectLessorsRiskOption, SelectLessorsRiskProps } from './models';\r\n\r\nexport function SelectLessorsRisk(props: SelectLessorsRiskProps) {\r\n const { form, getSuggestions, onTextChange, onSelect } = useLessorsRisk(props);\r\n\r\n return (\r\n \r\n id='lessors-risk'\r\n placeholder={`Lessor's Risk?`}\r\n value={form.lessorsRisk}\r\n suggestions={getSuggestions}\r\n getItemId={result => result.id.toString()}\r\n getItemText={result => result.value}\r\n onTextChange={onTextChange}\r\n onSelect={onSelect}\r\n />\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\n\r\ninterface ILoadingProps {\r\n visible: boolean;\r\n}\r\n\r\nconst Loading: React.FC = ({ visible }) => {\r\n const steps = [\r\n 'locating the property',\r\n 'analyzing property data',\r\n 'assessing risk factors',\r\n 'optimizing coverage',\r\n 'creating bindable quote',\r\n ];\r\n\r\n const stepDuration = 4000;\r\n const [step, setStep] = useState(0);\r\n let interval: number;\r\n\r\n useEffect(() => {\r\n if (visible) {\r\n start();\r\n } else {\r\n stop();\r\n }\r\n\r\n return () => {\r\n stop();\r\n };\r\n }, [visible]);\r\n\r\n const start = () => {\r\n setStep(0);\r\n interval = window.setInterval(() => {\r\n setStep(prevStep => {\r\n if (prevStep === steps.length - 1) {\r\n window.clearInterval(interval);\r\n return prevStep;\r\n }\r\n return prevStep + 1;\r\n });\r\n }, stepDuration);\r\n };\r\n\r\n const stop = () => {\r\n if (interval) window.clearInterval(interval);\r\n setStep(0);\r\n };\r\n\r\n return (\r\n
    \r\n {steps.map((stepText, i) => (\r\n \r\n {stepText}\r\n \r\n ))}\r\n
    \r\n );\r\n};\r\n\r\nconst LoadingStep: React.FC<{ highlighted: boolean; visible: boolean; children: any }> = ({\r\n highlighted,\r\n visible,\r\n children,\r\n}) => {\r\n return (\r\n \r\n {children}\r\n .\r\n .\r\n .\r\n
    \r\n );\r\n};\r\n\r\nexport default Loading;\r\n","import {\r\n occupancyTypeOptionsWithMultipleUnits,\r\n SelectOccupancyTypeOption,\r\n selectOccupancyTypeOptions,\r\n SelectOccupancyTypeProps,\r\n} from './models';\r\n\r\nexport function useSelectOccupancyType(props: SelectOccupancyTypeProps) {\r\n const { reducer, setUnitCountVisible } = props,\r\n { setWithoutValidation } = reducer;\r\n\r\n return {\r\n getSuggestions,\r\n onTextChange,\r\n onSelect,\r\n };\r\n\r\n function getSuggestions(filter: string | undefined) {\r\n return selectOccupancyTypeOptions.filter(option =>\r\n option.value.toLowerCase().includes((filter ?? '').toLowerCase())\r\n );\r\n }\r\n\r\n function onTextChange(text: string) {\r\n setWithoutValidation('occupancyType', text?.toString() || '');\r\n }\r\n\r\n function onSelect(result: SelectOccupancyTypeOption) {\r\n setWithoutValidation('occupancyType', result.value);\r\n setUnitCountVisible(occupancyTypeOptionsWithMultipleUnits.includes(result.value));\r\n }\r\n}\r\n","import { ComboBox } from '@swyfft/webkit';\r\nimport * as React from 'react';\r\nimport { useSelectOccupancyType } from './hook';\r\nimport { SelectOccupancyTypeOption, SelectOccupancyTypeProps } from './models';\r\n\r\nexport function SelectOccupancyType(props: SelectOccupancyTypeProps) {\r\n const { form } = props.reducer,\r\n { getSuggestions, onTextChange, onSelect } = useSelectOccupancyType(props);\r\n\r\n return (\r\n \r\n id='occupancy-type-input'\r\n placeholder='Occupancy Type'\r\n value={form.occupancyType}\r\n suggestions={getSuggestions}\r\n getItemId={result => result.id}\r\n getItemText={result => result.value}\r\n onTextChange={onTextChange}\r\n onSelect={onSelect}\r\n />\r\n );\r\n}\r\n","import { commercialSurplusBuildingTypeValues } from '@app/Constants';\r\nimport { ReducerType } from '@app/Hooks';\r\nimport { CommercialLandingForm } from '../../models';\r\n\r\nexport type SelectOccupancyTypeProps = {\r\n reducer: ReducerType;\r\n setUnitCountVisible: (isVisible: boolean) => void;\r\n};\r\n\r\nexport type SelectOccupancyTypeOption = {\r\n id: string;\r\n value: string;\r\n};\r\n\r\nexport const selectOccupancyTypeOptions: SelectOccupancyTypeOption[] = Object.entries(\r\n commercialSurplusBuildingTypeValues\r\n).map(([id, value]) => ({\r\n id,\r\n value,\r\n}));\r\n\r\nexport const occupancyTypeOptionsWithMultipleUnits = [\r\n commercialSurplusBuildingTypeValues.ApartmentNoRetail,\r\n commercialSurplusBuildingTypeValues.ApartmentYesRetail,\r\n commercialSurplusBuildingTypeValues.CondoNoRetail,\r\n commercialSurplusBuildingTypeValues.CondoYesRetail,\r\n];\r\n","import {\r\n SelectSwimmingPoolCountItemType,\r\n selectSwimmingPoolCountOptions,\r\n SelectSwimmingPoolCountProps,\r\n} from './models';\r\n\r\nexport function useSelectSwimmingPoolCount(props: SelectSwimmingPoolCountProps) {\r\n const { reducer } = props;\r\n\r\n return {\r\n getSuggestions,\r\n onTextChange,\r\n onSelect,\r\n };\r\n\r\n function getSuggestions(filter: string | undefined) {\r\n return selectSwimmingPoolCountOptions.filter(option =>\r\n option.value.toLowerCase().includes((filter ?? '').toLowerCase())\r\n );\r\n }\r\n\r\n function onTextChange(text: string) {\r\n reducer.setWithoutValidation('numberOfSwimmingPools', text?.toString() || '');\r\n }\r\n\r\n function onSelect(result: SelectSwimmingPoolCountItemType) {\r\n reducer.setWithoutValidation('numberOfSwimmingPools', result.value);\r\n }\r\n}\r\n","import { ComboBox } from '@swyfft/webkit';\r\nimport * as React from 'react';\r\nimport { useSelectSwimmingPoolCount } from './hook';\r\nimport { SelectSwimmingPoolCountItemType, SelectSwimmingPoolCountProps } from './models';\r\n\r\nexport function SelectSwimmingPoolCount(props: SelectSwimmingPoolCountProps) {\r\n const { form } = props.reducer,\r\n { getSuggestions, onTextChange, onSelect } = useSelectSwimmingPoolCount(props);\r\n\r\n return (\r\n \r\n id='swimming-pool-count-input'\r\n placeholder='# Swimming Pools'\r\n value={form.numberOfSwimmingPools}\r\n suggestions={getSuggestions}\r\n getItemId={result => result.id}\r\n getItemText={result => result.value}\r\n onTextChange={onTextChange}\r\n onSelect={onSelect}\r\n />\r\n );\r\n}\r\n","import { ReducerType } from '@app/Hooks';\r\nimport { CommercialLandingForm } from '../../models';\r\n\r\nexport type SelectSwimmingPoolCountProps = {\r\n reducer: ReducerType;\r\n};\r\n\r\nexport type SelectSwimmingPoolCountItemType = {\r\n id: string;\r\n value: string;\r\n};\r\n\r\nexport const selectSwimmingPoolCountOptions: SelectSwimmingPoolCountItemType[] = ['0', '1', '2', '3', '4'].map(\r\n (value, index) => ({\r\n id: index.toString(),\r\n value,\r\n })\r\n);\r\n","import { useContext, useMemo, useRef, useState } from 'react';\r\nimport { useBeforeUnload } from 'react-router-dom-v5-compat';\r\nimport {\r\n getAddressMatches,\r\n getOrCreateComparisonQuote,\r\n getOrCreateQuote,\r\n logQuoteRequestSafe,\r\n} from '@app/Api/CommercialApi';\r\nimport { ProductLine, RatingType } from '@app/Business/CommonSets';\r\nimport { showModalHandler } from '@app/Commercial/CommonHelpers';\r\nimport {\r\n addNumeralFormatting,\r\n normalizeError,\r\n stripCommas,\r\n stripCountryCodeFromAddress,\r\n stripNumeralFormatting,\r\n validateAgainstBuildingValue,\r\n} from '@app/Common';\r\nimport Alert from '@app/Components/Modals/Alert';\r\nimport { commercialErrorSeverityTypes, commercialValidationParameters, HttpStatusCodes, pages } from '@app/Constants';\r\nimport { useFormReducer, useNavigateWithParams } from '@app/Hooks';\r\nimport { CommercialQuoteCreateRequest, CommercialQuoteModel } from '@app/Models';\r\nimport { AppSettingsContext } from '@app/SinglePageApplication/State/Context';\r\nimport { setAddress, setQuoteId } from '@app/Storage';\r\nimport { buildYear } from '@business/Validation/buildYear';\r\nimport { Rules, Value } from '@swyfft/webkit';\r\nimport { getQuotePath } from '../';\r\nimport { CommercialLandingForm } from './models';\r\n\r\nexport function useCommercialLanding() {\r\n const navigate = useNavigateWithParams(),\r\n appSettings = useContext(AppSettingsContext),\r\n [isUnitCountVisible, setIsUnitCountVisible] = useState(false),\r\n [loading, setLoading] = useState(false),\r\n alertRef = useRef(),\r\n logNoQuoteAttempt = useRef(true),\r\n businessPersonalPropertyLimitRules = useMemo(getBusinessPersonalPropertyLimitRules, []),\r\n businessIncomeLimitRules = useMemo(getBusinessIncomeLimitRules, []);\r\n\r\n const reducer = useFormReducer({\r\n buildingAddress: new Value('building address', '', [Rules.required()]),\r\n occupancyType: new Value('occupancy', '', [Rules.required()]),\r\n lessorsRisk: new Value(\"lessor's risk\", '', [Rules.required()]),\r\n constructionType: new Value('construction type', '', [Rules.required()]),\r\n generalLiabilityCoverage: new Value('general liability', '', [Rules.required()]),\r\n buildingValue: new Value('building value', '', [Rules.required(), Rules.currency(), Rules.min(0)]),\r\n businessPersonalPropertyLimit: new Value(\r\n 'business personal property',\r\n '',\r\n businessPersonalPropertyLimitRules\r\n ),\r\n targetAnnualPremium: new Value('target premium', '', [Rules.min(0), Rules.currency()]),\r\n businessIncomeLimit: new Value('business income limit', '', businessIncomeLimitRules),\r\n yearBuilt: new Value('year built', '', [Rules.required(), buildYear()]),\r\n numberOfBuildings: new Value('number of buildings', '', [\r\n Rules.required(),\r\n Rules.min(0),\r\n Rules.integer(),\r\n ]),\r\n squareFootage: new Value('square footage', '', [\r\n Rules.required(),\r\n Rules.min(commercialValidationParameters.livingSpaceSurplusMin),\r\n Rules.integer(),\r\n ]),\r\n numberOfUnits: new Value('number of units', '', [Rules.required(), Rules.min(0), Rules.integer()]),\r\n numberOfStories: new Value('number of stories', '', [\r\n Rules.required(),\r\n Rules.range(1, 25),\r\n Rules.integer(),\r\n ]),\r\n numberOfSwimmingPools: new Value('number of swimming pools', '', [Rules.required()]),\r\n }),\r\n { form, validate, valid, setWithoutValidation } = reducer;\r\n\r\n useBeforeUnload(onBeforeUnload);\r\n\r\n return {\r\n reducer,\r\n setIsUnitCountVisible,\r\n isUnitCountVisible,\r\n isLoading: loading,\r\n alertRef,\r\n formatNumber,\r\n onSubmit,\r\n onError,\r\n };\r\n\r\n async function onError(error: any) {\r\n if (!alertRef.current) return;\r\n const normalized = normalizeError(error);\r\n if (normalized.code === HttpStatusCodes.aborted) return;\r\n\r\n // TODO DRC 2/10/25: The existing error parsing methods do not work with Responses a good portion of the time.\r\n // We need to refactor the error handling to be more consistent and reliable.\r\n let message: string = normalized.message;\r\n if (error instanceof Response) {\r\n const response = await error.json();\r\n message =\r\n response.ErrorMessage ||\r\n response.ExceptionMessage ||\r\n 'An unexpected error occurred. Please try again or contact support.';\r\n }\r\n await alertRef.current.error(message);\r\n }\r\n\r\n function getPertinentValidationKeys() {\r\n const formKeys = Object.keys(form).filter(key => {\r\n if (key === 'numberOfUnits') return isUnitCountVisible;\r\n return key !== 'targetAnnualPremium' && key !== 'excludeWindHail';\r\n });\r\n\r\n return formKeys as (keyof CommercialLandingForm)[];\r\n }\r\n\r\n function validateForm() {\r\n const validationKeys = getPertinentValidationKeys();\r\n validationKeys.forEach(key => validate(key));\r\n const activeElement = document.activeElement as any;\r\n if (activeElement?.blur) activeElement.blur();\r\n }\r\n\r\n function handleValidQuote(quoteInstance: CommercialQuoteModel) {\r\n setQuoteId(quoteInstance.QuoteId);\r\n setAddress(quoteInstance.BuildingAddress);\r\n navigate(pages.CommQuoteModify);\r\n }\r\n\r\n function handleInvalidQuote(quoteInstance: CommercialQuoteModel) {\r\n setLoading(false);\r\n return showModalHandler(\r\n quoteInstance.ErrorMessage,\r\n quoteInstance.Severity ? quoteInstance.Severity.m_levelName : commercialErrorSeverityTypes.Warning\r\n );\r\n }\r\n\r\n function onBeforeUnload() {\r\n if (!logNoQuoteAttempt.current) return;\r\n logQuoteRequestSafe({\r\n EventName: 'Commercial Page Closing With No Quote Attempt',\r\n Address: form.buildingAddress.content,\r\n });\r\n }\r\n\r\n async function onSubmit(event: React.FormEvent) {\r\n event.preventDefault();\r\n if (loading) return;\r\n\r\n validateForm();\r\n const validationKeys = getPertinentValidationKeys();\r\n if (!valid(validationKeys)) return;\r\n\r\n logNoQuoteAttempt.current = false;\r\n setLoading(true);\r\n\r\n try {\r\n const addressMatches = await getAddressMatches(form.buildingAddress.content),\r\n matchedAddress = addressMatches.find(a => {\r\n const match = stripCommas(a.FullAddress).toLowerCase(),\r\n search = stripCommas(form.buildingAddress.content).toLowerCase();\r\n return match.includes(search);\r\n });\r\n\r\n // If no address was entered and no addressKey is found, we display a message asking the user to create the address\r\n if (addressMatches.length === 0 || !matchedAddress) {\r\n await onError(\r\n 'This address does not exist in our system. Please use our Address Entry page to add it, then return here to create a new quote.'\r\n );\r\n setLoading(false);\r\n return;\r\n }\r\n\r\n const request: CommercialQuoteCreateRequest = {\r\n AddressKey: matchedAddress.AddressKey,\r\n BuildingAddress: stripCountryCodeFromAddress(matchedAddress.FullAddress),\r\n Street1: matchedAddress.Street1,\r\n Street2: matchedAddress.Street2,\r\n City: matchedAddress.City,\r\n StateCode: matchedAddress.StateCode,\r\n Zip: matchedAddress.Zip,\r\n BuildingType: form.occupancyType.content,\r\n ConstructionType: form.constructionType.content,\r\n BuildingValue: stripNumeralFormatting(form.buildingValue.content),\r\n BusinessPersonalPropertyLimit: stripNumeralFormatting(form.businessPersonalPropertyLimit.content),\r\n TargetAnnualPremium: stripNumeralFormatting(form.targetAnnualPremium.content),\r\n BusinessIncomeLimit: stripNumeralFormatting(form.businessIncomeLimit.content),\r\n YearBuilt: parseInt(form.yearBuilt.content),\r\n SquareFootage: stripNumeralFormatting(form.squareFootage.content),\r\n NumberOfUnits: parseInt(form.numberOfUnits.content) || 0,\r\n NumberOfStories: parseInt(form.numberOfStories.content) || 0,\r\n SwimmingPoolCount: parseInt(form.numberOfSwimmingPools.content),\r\n // Note that the wind exclusion control has been removed from the form, so this value is always false unless we re-introduce it later.\r\n WindExclusion: false,\r\n NumberOfBuildings: parseInt(form.numberOfBuildings.content) || 0,\r\n GeneralLiabilityCoverage: form.generalLiabilityCoverage.content,\r\n RatingType: RatingType.EAndS.value,\r\n IsLessorsRisk: form.lessorsRisk.content === 'Yes',\r\n };\r\n\r\n if (appSettings?.newCommercialQuotePageEnabled) {\r\n const comparisonQuotesModel = await getOrCreateComparisonQuote(request);\r\n const path = getQuotePath(comparisonQuotesModel.Quotes.length);\r\n navigate(path, {\r\n product: ProductLine.Commercial.lowercaseName,\r\n quoteId: comparisonQuotesModel.Quotes[0].QuoteId,\r\n });\r\n } else {\r\n const quoteInstance = await getOrCreateQuote(request);\r\n quoteInstance.IsOk ? handleValidQuote(quoteInstance) : handleInvalidQuote(quoteInstance);\r\n }\r\n } catch (error) {\r\n await onError(error);\r\n\r\n // The reason we don't stop loading in a finally block is to keep the loading animation\r\n // active as the page transitions on navigation, which will happen as long as no error is thrown.\r\n setLoading(false);\r\n }\r\n }\r\n\r\n function formatNumber(key: keyof CommercialLandingForm, formatType: string) {\r\n const value = form[key].content as string;\r\n setWithoutValidation(key, value ? addNumeralFormatting(value, formatType) : '');\r\n }\r\n\r\n function getBusinessPersonalPropertyLimitRules() {\r\n return [\r\n Rules.required(),\r\n Rules.min(0),\r\n Rules.currency(),\r\n {\r\n id: 'building-value',\r\n validator: (value: string) =>\r\n validateAgainstBuildingValue(\r\n stripNumeralFormatting(value),\r\n stripNumeralFormatting(form.buildingValue.content)\r\n ),\r\n error: () =>\r\n 'Please enter a valid Business Personal Property Limit value. The entered value must not exceed 75% of the entered Building Value.',\r\n },\r\n ];\r\n }\r\n\r\n function getBusinessIncomeLimitRules() {\r\n return [\r\n Rules.required(),\r\n Rules.min(0),\r\n Rules.currency(),\r\n {\r\n id: 'building-value',\r\n validator: (value: string) =>\r\n validateAgainstBuildingValue(\r\n stripNumeralFormatting(value),\r\n stripNumeralFormatting(form.buildingValue.content)\r\n ),\r\n error: () =>\r\n 'Please enter a valid Business Income Limit value. The entered value must not exceed 75% of the entered Building Value.',\r\n },\r\n ];\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport * as Common from '@app/Common';\r\nimport Alert from '@app/Components/Modals/Alert';\r\nimport Portal from '@app/Components/Portal';\r\nimport { AlertFooterType } from '@app/Constants';\r\nimport {\r\n HeroText,\r\n} from '@app/SinglePageApplication/Components/Landing/HeroText';\r\nimport {\r\n LandingContent,\r\n} from '@app/SinglePageApplication/Components/Landing/LandingContent';\r\nimport {\r\n LandingLayout,\r\n} from '@app/SinglePageApplication/Components/Landing/LandingLayout';\r\nimport {\r\n LandingViewWrapper,\r\n} from '@app/SinglePageApplication/Components/Landing/LandingViewWrapper';\r\nimport { Logo } from '@app/SinglePageApplication/Components/Landing/Logo';\r\nimport {\r\n LayoutWrapper,\r\n} from '@app/SinglePageApplication/Components/LayoutWrapper';\r\nimport {\r\n ProductHeader,\r\n} from '@app/SinglePageApplication/Components/ProductHeader';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport { DesignContext } from '@swyfft/webkit';\r\nimport { Path } from '../';\r\nimport { CommercialLandingFormComponent } from './Components/Form';\r\nimport Loading from './Components/Loading';\r\nimport { useCommercialLanding } from './hook';\r\nimport './style.scss';\r\n\r\nexport const CommercialLanding = {\r\n path: Path.CommercialLanding,\r\n element: ,\r\n auth: () => Common.isAtLeastAgent(),\r\n};\r\n\r\nexport function CommercialLandingComponent() {\r\n const { reducer, setIsUnitCountVisible, isUnitCountVisible, isLoading, alertRef, formatNumber, onSubmit, onError } =\r\n useCommercialLanding();\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n\r\n
    \r\n \r\n
    \r\n\r\n \r\n \r\n Using proprietary data and analytics, Swyfft can help you get{' '}\r\n \r\n E&S commercial package insurance in under a minute.\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","import { useContext, useMemo, useState } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport { useAsyncEffect } from '@app/Hooks';\r\nimport { loadComparisonQuotes } from '@app/SinglePageApplication/Api/ComparisonQuotes';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { UrlParams } from '../';\r\n\r\nexport function useCompareCustomize() {\r\n const params = useParams(),\r\n application = useContext(StateContext),\r\n [isLoading, setLoading] = useState(true);\r\n\r\n const { state, update } = useContext(StateContext),\r\n { comparisonModel, elementDescriptions } = state,\r\n productLine = ProductLine.parseOrDefault(params.product) || ProductLine.Homeowner,\r\n isPurchasedQuote = comparisonModel?.Quotes.some(quote => quote.IsPurchased) || false,\r\n isMaxLayoutRequired = useMemo(() => state.visibleQuoteIds.length > 2, [state.visibleQuoteIds]);\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n setLoading(true);\r\n await loadComparisonQuotes(application, params as UrlParams);\r\n } catch (error) {\r\n update(state => (state.error = error));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n return {\r\n isLoading,\r\n isPurchasedQuote,\r\n isMaxLayoutRequired,\r\n productLine,\r\n state,\r\n update,\r\n elementDescriptions,\r\n comparisonModel,\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { clsx } from 'clsx';\r\nimport { isAtLeastAgent, isLimitedAgentUser } from '@app/Common';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { ProductComparisonQuote } from '@app/ProductComparison/Quote';\r\nimport { QuoteOverviewSection } from '@app/SinglePageApplication/Components/OverviewSection';\r\nimport { RouteLoadingSpinner } from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { TileHeader } from '@app/SinglePageApplication/Components/TileHeader';\r\nimport { ViewWrapper } from '@app/SinglePageApplication/Components/ViewWrapper';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { DesignContext } from '@swyfft/webkit';\r\nimport { revalidateWhenQuoteIdChanges } from '../Revalidation';\r\nimport { SwyfftRouteObject } from '../routes';\r\nimport { useCompareCustomize } from './hook';\r\n\r\nexport const CompareCustomize: SwyfftRouteObject = {\r\n path: Path.CompareCustomize,\r\n auth: AccessRole.Agent,\r\n element: ,\r\n shouldRevalidate: revalidateWhenQuoteIdChanges,\r\n};\r\n\r\nexport function Component() {\r\n const {\r\n isLoading,\r\n isMaxLayoutRequired,\r\n isPurchasedQuote,\r\n productLine,\r\n state,\r\n update,\r\n elementDescriptions,\r\n comparisonModel,\r\n } = useCompareCustomize();\r\n\r\n return (\r\n \r\n \r\n {isLoading ?\r\n \r\n : \r\n update(state => (state.comparisonModel = comparisonModel))\r\n }\r\n tileHeader={quote => }\r\n overViewSection={tileIndex => }\r\n disableRatingTypeAlert={isPurchasedQuote}\r\n // Anonymous users or limited agent users cannot edit quotes\r\n disableElements={!isAtLeastAgent() || isLimitedAgentUser()}\r\n productLine={productLine}\r\n />\r\n }\r\n \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport {\r\n getComparisonElementByQuoteId,\r\n getComparisonQuoteOrDefault,\r\n getConfirmationElementValidationError,\r\n getElementDescriptionByCarrierCode,\r\n} from '@app/Common/ComparisonQuoteHelpers';\r\nimport { ComparisonElementsModel } from '@app/Models';\r\nimport { Element } from '@app/ProductComparison/Element';\r\nimport { IPatchQuoteHook } from '@app/ProductComparison/Hooks/UsePatchQuote';\r\nimport { TwoColumnLayout } from '@app/SinglePageApplication/Components/StepTile/TwoColumnLayout';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport './style.scss';\r\n\r\nexport interface ConfirmationElementProps {\r\n comparisonElements: ComparisonElementsModel;\r\n patchQuoteHook: IPatchQuoteHook;\r\n}\r\n\r\nexport function ConfirmationElement({ comparisonElements, patchQuoteHook }: ConfirmationElementProps) {\r\n const { state } = useContext(StateContext),\r\n { comparisonModel, quoteId, elementDescriptions } = state,\r\n { patch, patchFromRequest, patchClaims, patchLoading } = patchQuoteHook;\r\n\r\n if (!comparisonModel || !quoteId || !elementDescriptions) {\r\n return <>;\r\n }\r\n\r\n const quote = getComparisonQuoteOrDefault(comparisonModel, quoteId),\r\n comparisonElement = getComparisonElementByQuoteId(comparisonElements, quoteId);\r\n\r\n if (!quote || !comparisonElement) {\r\n return <>;\r\n }\r\n\r\n const quoteElementDescriptions = getElementDescriptionByCarrierCode(elementDescriptions, quote.CarrierCode || ''),\r\n elementDescriptionHtml =\r\n quoteElementDescriptions ? quoteElementDescriptions[comparisonElement.ElementName] || '' : '',\r\n emptyElementError = getConfirmationElementValidationError(comparisonElement, comparisonElements.ElementDisplay),\r\n elementErrorMessage = getComparisonElementErrorMessage();\r\n\r\n return (\r\n
    \r\n \r\n

    {comparisonElements.ElementDisplay}

    \r\n \r\n
    \r\n }\r\n second={\r\n <>\r\n \r\n\r\n
    \r\n {elementErrorMessage?.Message || ''}\r\n
    \r\n \r\n }\r\n excludeHeader\r\n />\r\n
    \r\n );\r\n\r\n /** Gets the error message from either a soft-decline associated to the element or from an element with an empty value. */\r\n function getComparisonElementErrorMessage() {\r\n if (!quote || !comparisonElement) {\r\n return undefined;\r\n }\r\n\r\n const premiumError = quote.QuotePremiumErrors.find(\r\n ({ ElementName }) => ElementName === comparisonElement.ElementName,\r\n );\r\n return premiumError || emptyElementError || undefined;\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { ComparisonQuoteImportantNotice } from '@app/Models';\r\nimport './style.scss';\r\n\r\nexport interface ImportantNoticesProps {\r\n importantNotices: ComparisonQuoteImportantNotice[];\r\n}\r\n\r\nexport function ImportantNotices({ importantNotices }: ImportantNoticesProps) {\r\n return (\r\n
    \r\n
    \r\n

    Important Notices

    \r\n\r\n
      {getImportantNotices()}
    \r\n
    \r\n
    \r\n );\r\n\r\n function getImportantNotices() {\r\n return importantNotices.map(notice => {\r\n switch (notice) {\r\n case ComparisonQuoteImportantNotice.TexasUseOfCreditInformationDisclosure:\r\n return (\r\n
  • \r\n \r\n View Texas Use of Credit Information Disclosure\r\n \r\n
  • \r\n );\r\n default:\r\n return <>;\r\n }\r\n });\r\n }\r\n}\r\n","import { FormEvent, useContext, useMemo, useRef, useState } from 'react';\r\nimport { useNavigate, useParams } from 'react-router-dom-v5-compat';\r\nimport { ProductLine, RatingType } from '@app/Business/CommonSets';\r\nimport * as Common from '@app/Common';\r\nimport { getMessageFromError, isAtLeastAgent, isLimitedAgentUser } from '@app/Common';\r\nimport { getComparisonElementsByConfirmationElementNames } from '@app/Common/ComparisonQuoteHelpers';\r\nimport { pages } from '@app/Constants';\r\nimport { ToastContext, useAsyncEffect } from '@app/Hooks';\r\nimport { ComparisonQuotesModel } from '@app/Models';\r\nimport { usePatchQuote } from '@app/ProductComparison/Hooks/UsePatchQuote';\r\nimport { loadComparisonQuotes } from '@app/SinglePageApplication/Api/ComparisonQuotes';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { TrackingEvent } from '@app/TrackingEvents';\r\nimport { getQuotePath, UrlParams } from '../';\r\n\r\nexport function useConfirmQuote() {\r\n const [isInitializing, setInitializing] = useState(true),\r\n application = useContext(StateContext),\r\n params = useParams(),\r\n navigate = useNavigate(),\r\n quoteId = params.quoteId as string,\r\n productLine = ProductLine.parse(params.product),\r\n stateHook = useContext(StateContext),\r\n { update } = stateHook,\r\n { state } = stateHook,\r\n toast = useContext(ToastContext),\r\n patchQuoteHook = usePatchQuote(toast.error, updateComparisonModel, productLine);\r\n\r\n const { comparisonModel } = state,\r\n quote = useMemo(\r\n () => comparisonModel?.Quotes.find(({ QuoteId }) => QuoteId === quoteId),\r\n [comparisonModel?.Quotes],\r\n ),\r\n ratingType = useMemo(() => RatingType.parseOrDefault(quote?.RatingType), [quote]),\r\n elementGroups = comparisonModel?.ElementGroups || [],\r\n confirmationElementNames = quote?.ConfirmationElementNames,\r\n requiredComparisonElements = getComparisonElementsByConfirmationElementNames(\r\n elementGroups,\r\n confirmationElementNames,\r\n quoteId,\r\n ),\r\n importantNoticesForQuote = state?.importantNotices.find(\r\n notice => notice.quoteId === state.quoteId,\r\n )?.importantNotices,\r\n totalRequiredConfirmations = (confirmationElementNames?.length || 0) + (importantNoticesForQuote?.length || 0);\r\n\r\n const tileContainerRef = useRef(null);\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n setInitializing(true);\r\n await loadComparisonQuotes(application, params as UrlParams);\r\n } catch (error) {\r\n application.update(state => (state.error = error));\r\n } finally {\r\n setInitializing(false);\r\n }\r\n }, []);\r\n\r\n return {\r\n isInitializing,\r\n isConfirmDisabled,\r\n application,\r\n comparisonModel,\r\n tileContainerRef,\r\n quote,\r\n getTitle,\r\n getDescription,\r\n totalRequiredConfirmations,\r\n importantNoticesForQuote,\r\n requiredComparisonElements,\r\n confirmationElementNames,\r\n ratingType,\r\n patchQuoteHook,\r\n onBack,\r\n submit,\r\n };\r\n\r\n async function submit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n try {\r\n // Track the transition to the legacy purchase page.\r\n const trackingStep = getQuotePath(application.state.comparisonModel?.Quotes.length);\r\n TrackingEvent.trackSinglePageApplication(trackingStep, 'bind quote');\r\n\r\n // Navigate to the legacy purchase page.\r\n Common.navigate(pages.PurchaseWithProduct(ProductLine.parse(params.product), params.quoteId as string));\r\n } catch (e) {\r\n toast.error(\r\n await getMessageFromError(\r\n e,\r\n 'An error has occurred while confirming your quote. Please try again later.',\r\n ),\r\n );\r\n }\r\n }\r\n\r\n function updateComparisonModel(comparisonModel: ComparisonQuotesModel) {\r\n update(state => {\r\n state.comparisonModel = comparisonModel;\r\n });\r\n }\r\n\r\n function onBack() {\r\n navigate(-1);\r\n }\r\n\r\n /** Returns true if there are any soft-declines or required elements with empty values. */\r\n function isConfirmDisabled() {\r\n if (!isAtLeastAgent() || isLimitedAgentUser() || !quote) return true;\r\n\r\n // Ensure the user cannot progress past the confirmation step if a long-running patch request is in progress.\r\n if (patchQuoteHook.patchLoading) return true;\r\n\r\n const { QuotePremiumErrors } = quote,\r\n hasSoftDeclines = QuotePremiumErrors.length > 0;\r\n\r\n // Quotes with soft declines cannot be bound, even if all elements have a value set.\r\n if (!requiredComparisonElements.length) return hasSoftDeclines;\r\n\r\n const hasEmptyRequiredElements = requiredComparisonElements.some(({ Elements }) => {\r\n const elementsForQuote = Elements.filter(({ QuoteId }) => QuoteId === quoteId);\r\n return elementsForQuote.some(({ Value }) => !Value);\r\n });\r\n\r\n // Quotes with either soft declines or one or more empty element values cannot be bound.\r\n return hasSoftDeclines || hasEmptyRequiredElements;\r\n }\r\n\r\n function getTitle() {\r\n if (totalRequiredConfirmations === 0) return 'All confirmations complete';\r\n if (totalRequiredConfirmations === 1) return 'One more thing...';\r\n return 'A few final things...';\r\n }\r\n\r\n function getDescription() {\r\n if (totalRequiredConfirmations === 0) return 'Click confirm to proceed to purchase';\r\n return 'Before you can purchase, please make sure the following are correct:';\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport { AccessRole, iconPaths } from '@app/Constants';\r\nimport { IPatchRequest } from '@app/ProductComparison/Interfaces';\r\nimport { PrimaryRouteButton, SecondaryBackButton, StepButtons } from '@app/SinglePageApplication/Components/Buttons';\r\nimport { LayoutWrapper } from '@app/SinglePageApplication/Components/LayoutWrapper';\r\nimport { QuoteStepTile } from '@app/SinglePageApplication/Components/QuoteStepTile';\r\nimport { RouteLoadingSpinner } from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { ViewWrapper } from '@app/SinglePageApplication/Components/ViewWrapper';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { ConfirmationElement } from '@app/SinglePageApplication/Views/ConfirmQuote/ConfirmationElement';\r\nimport { ImportantNotices } from '@app/SinglePageApplication/Views/ConfirmQuote/ImportantNotices';\r\nimport { CarrierCode } from '@business/CommonSets';\r\nimport { useConfirmQuote } from './hook';\r\n\r\nexport const ConfirmQuote = {\r\n path: Path.ConfirmQuote,\r\n shouldRevalidate: () => false,\r\n auth: AccessRole.Agent,\r\n element: ,\r\n};\r\n\r\nexport function Component() {\r\n const {\r\n isInitializing,\r\n isConfirmDisabled,\r\n comparisonModel,\r\n tileContainerRef,\r\n quote,\r\n getTitle,\r\n getDescription,\r\n totalRequiredConfirmations,\r\n importantNoticesForQuote,\r\n requiredComparisonElements,\r\n confirmationElementNames,\r\n patchQuoteHook,\r\n onBack,\r\n ratingType,\r\n submit,\r\n } = useConfirmQuote();\r\n\r\n return (\r\n \r\n {isInitializing ? (\r\n \r\n ) : (\r\n \r\n \r\n {/* If a user happens to change each element in the confirmation view (and there are no resulting soft declines), they will see no required\r\n elements in the view. To handle this, we change up the StepHeader title, description, and add an icon to indicate the completed state. */}\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import { FormEvent, useContext, useState } from 'react';\r\nimport { useNavigate } from 'react-router-dom-v5-compat';\r\nimport { getMessageFromError } from '@app/Common';\r\nimport { ToastContext, useCreateOrGetQuotes } from '@app/Hooks';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\n\r\nexport function useConfirmSingleFamilyResidence() {\r\n const navigate = useNavigate(),\r\n toast = useContext(ToastContext),\r\n application = useContext(StateContext),\r\n { createOrGetQuotes } = useCreateOrGetQuotes(),\r\n [isLoading, setLoading] = useState(false);\r\n\r\n return {\r\n isLoading,\r\n submit,\r\n navigate,\r\n };\r\n\r\n async function submit(e: FormEvent) {\r\n e.preventDefault();\r\n if (isLoading) return;\r\n\r\n setLoading(true);\r\n\r\n try {\r\n const quoteRequest = {\r\n ...application.state.quoteRequest,\r\n NonSingleFamilyResidenceConfirmed: true,\r\n };\r\n\r\n application.update(state => (state.quoteRequest = quoteRequest));\r\n await createOrGetQuotes(quoteRequest);\r\n } catch (e) {\r\n toast.error(await getMessageFromError(e));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { Button, Paragraph } from '@swyfft/webkit';\r\nimport { Path } from '../';\r\nimport { useConfirmSingleFamilyResidence } from './hook';\r\nimport './style.scss';\r\n\r\nexport const ConfirmSingleFamilyResidence = {\r\n path: Path.ConfirmSingleFamilyResidence,\r\n element: () => ,\r\n shouldRevalidate: () => false,\r\n};\r\n\r\nexport function SingleFamilyResidenceComponent() {\r\n const {\r\n isLoading,\r\n submit,\r\n navigate,\r\n } = useConfirmSingleFamilyResidence();\r\n\r\n return (\r\n \r\n
    \r\n \r\n\r\n
    \r\n \r\n Swyfft only insures residential homes. Please confirm that this is a single family residence (or\r\n if not in MA, a 50% or greater owner-occupied duplex is acceptable), permanently attached to a\r\n foundation.\r\n \r\n \r\n To continue with your quote, please confirm that the property refers to a single family\r\n residence.\r\n \r\n
    \r\n\r\n
    \r\n \r\n\r\n \r\n
    \r\n \r\n
    \r\n );\r\n}\r\n","import { fetchAndLog } from '@app/Api/Fetch';\r\nimport { ValidateCityStateZipModel } from '@app/Models';\r\n\r\nexport const validateZipCode = async (\r\n city: string,\r\n stateCode: string,\r\n zipCode: string,\r\n): Promise => {\r\n return await fetchAndLog(\r\n `/api/properties/validate-city-state-zip?city=${city}&stateCode=${stateCode}&zip=${zipCode}`,\r\n 'validate city state zip',\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { useContext, useEffect, useMemo, useState } from 'react';\r\nimport { useNavigate, useParams } from 'react-router-dom-v5-compat';\r\nimport { getProperties, putProperty } from '@app/Api/HOApi';\r\nimport { getMessageFromError, toKebabCase } from '@app/Common';\r\nimport { DropdownFormGroup } from '@app/Components/FormGroups/Dropdown';\r\nimport { TextFormGroup } from '@app/Components/FormGroups/Text';\r\nimport { statesByCode } from '@app/Constants';\r\nimport { DropdownItem } from '@app/FormFields';\r\nimport {\r\n ReducerType,\r\n ToastContext,\r\n useAsyncEffect,\r\n useCreateOrGetQuotes,\r\n usePersistentFormReducer,\r\n useQueryString,\r\n useRedirect,\r\n} from '@app/Hooks';\r\nimport { Address, PropertyData, QuoteCreateRequestModel } from '@app/Models';\r\nimport { createProperty, parseAddress } from '@app/SinglePageApplication/Api/Property';\r\nimport { PrimaryRouteButton, SecondaryBackButton, StepButtons } from '@app/SinglePageApplication/Components/Buttons';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRow } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { yearBuiltAndRoofAgeValidation, yearBuiltValidation } from '@app/SinglePageApplication/Validation';\r\nimport { Rule, Rules, Value } from '@swyfft/webkit';\r\nimport { Path } from '../';\r\nimport { validateZipCode } from './api';\r\nimport './style.scss';\r\n\r\nexport type FormType = {\r\n address: Value;\r\n city: Value;\r\n state: Value;\r\n zip: Value;\r\n livingSpace: Value;\r\n roofAge: Value;\r\n yearBuilt: Value;\r\n};\r\n\r\nexport type Context = 'CreateAddress' | 'CreateAddressNoQuote' | 'EditAddress';\r\n\r\ntype CreateAddressComponentProps = {\r\n stepDescription?: string;\r\n};\r\n\r\nexport function CreateAddressComponent({ stepDescription }: CreateAddressComponentProps) {\r\n const navigate = useNavigate(),\r\n { state, update } = useContext(StateContext),\r\n toast = useContext(ToastContext),\r\n [isInitializing, setInitializing] = useState(true),\r\n [isLoading, setLoading] = useState(false),\r\n params = useParams(),\r\n query = useQueryString<{ livingSpace: string }>(),\r\n redirect = useRedirect(),\r\n { createOrGetQuotes } = useCreateOrGetQuotes(),\r\n title = useMemo(\r\n () => (state.createAddress.context === 'EditAddress' ? 'Edit Address' : 'Create Address'),\r\n [state.createAddress.context],\r\n ),\r\n additionalRules: Rule[] = useMemo(\r\n () => (state.createAddress.context === 'CreateAddress' ? [Rules.required(), Rules.decimal()] : []),\r\n [state.createAddress.context],\r\n );\r\n\r\n const reducer = usePersistentFormReducer('create-address', {\r\n address: new Value('address', '', [Rules.required(), Rules.maxLength(50)]),\r\n city: new Value('city', '', [Rules.required(), Rules.maxLength(50)]),\r\n state: new Value('state code', '', [Rules.required(), Rules.minLength(2), Rules.maxLength(2)]),\r\n zip: new Value('zip code', '', [Rules.required(), Rules.zip()]),\r\n livingSpace: new Value('living space', '', [\r\n Rules.required(),\r\n Rules.decimal(),\r\n Rules.range(500, 1000000),\r\n ]),\r\n roofAge: new Value('roof age', '', additionalRules),\r\n yearBuilt: new Value('year built', '', additionalRules),\r\n });\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n setInitializing(true);\r\n\r\n const a = params.address ? await parseAddress(params.address.replace(/-/g, ' ')) : null,\r\n livingSpace = query.get('livingSpace');\r\n\r\n if (a && livingSpace) a.LivingSpace = parseInt(livingSpace);\r\n\r\n reducer.setWithoutValidation('address', a?.Street1 || '');\r\n reducer.setWithoutValidation('city', a?.City || '');\r\n reducer.setWithoutValidation('state', a?.StateCode ? a.StateCode.toLowerCase() : '');\r\n reducer.setWithoutValidation('zip', a?.Zip || '');\r\n reducer.setWithoutValidation(\r\n 'livingSpace',\r\n a?.LivingSpace && !isNaN(a?.LivingSpace) ? a?.LivingSpace.toString() : '',\r\n );\r\n reducer.setWithoutValidation('roofAge', '');\r\n reducer.setWithoutValidation('yearBuilt', '');\r\n } catch (e) {\r\n toast.error(await getMessageFromError(e));\r\n } finally {\r\n setInitializing(false);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (state.createAddress.context === 'CreateAddress') {\r\n yearBuiltValidation(reducer.form.yearBuilt);\r\n yearBuiltAndRoofAgeValidation(reducer.form.yearBuilt, reducer.form.roofAge);\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n
    \r\n \r\n\r\n }\r\n negative={ navigate(-1)} />}\r\n />\r\n \r\n
    \r\n );\r\n\r\n async function submit(e: React.FormEvent) {\r\n e.preventDefault();\r\n\r\n reducer.validate();\r\n if (!reducer.valid() || isLoading) return;\r\n\r\n try {\r\n setLoading(true);\r\n\r\n const addressKey = state.createAddress.addressKey;\r\n const address = {\r\n Street1: reducer.form.address.content,\r\n City: reducer.form.city.content,\r\n StateCode: reducer.form.state.content,\r\n Zip: reducer.form.zip.content,\r\n LivingSpace: parseInt(reducer.form.livingSpace.content),\r\n AddressKey: addressKey,\r\n } as Address;\r\n\r\n const quoteRequest = { ...(state.quoteRequest || {}) } as QuoteCreateRequestModel;\r\n // Ensure the flag saying this is a Flood quote created from the homeowner quote page is set to false.\r\n quoteRequest.FromHomeowner = false;\r\n\r\n let context = state.createAddress.context;\r\n if (context === 'CreateAddressNoQuote' && addressKey) {\r\n context = 'EditAddress';\r\n await update(state => (state.createAddress.context = context));\r\n }\r\n\r\n if (context === 'CreateAddress') {\r\n quoteRequest.LivingSpace = address.LivingSpace;\r\n quoteRequest.NonSingleFamilyResidenceConfirmed = true;\r\n quoteRequest.RoofAge = parseInt(reducer.form.roofAge.content || '');\r\n quoteRequest.YearBuilt = parseInt(reducer.form.yearBuilt.content || '');\r\n\r\n await update(state => (state.quoteRequest = quoteRequest));\r\n }\r\n\r\n await update(state => {\r\n state.address = address;\r\n state.createAddress.originalZipCode = address.Zip;\r\n });\r\n\r\n const zipCodeSuggestions = await validateZipCode(address.City, address.StateCode, address.Zip);\r\n if (!zipCodeSuggestions.Valid) {\r\n await update(state => {\r\n state.address = address;\r\n state.quoteRequest = quoteRequest;\r\n state.createAddress = {\r\n ...state.createAddress,\r\n zipCodeSuggestions,\r\n originalZipCode: address.Zip,\r\n };\r\n });\r\n\r\n const encodedAddress = encodeURIComponent(toKebabCase(Address.toString(address)));\r\n if (context === 'CreateAddress') {\r\n redirect(Path.ZipCodeSuggestions, {\r\n product: params['product'] || 'homeowner',\r\n address: encodedAddress,\r\n });\r\n } else {\r\n redirect(Path.ZipCodeSuggestionsNoQuote, {\r\n address: encodedAddress,\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n let propertyData: PropertyData;\r\n\r\n if (context === 'CreateAddress') {\r\n propertyData = await createProperty(address);\r\n\r\n // For some reason, using the spread operator at the top of this action function to create a quote request from the reducer state generates an\r\n // object whose properties are still read-only. Attempting to set any of them with new data throws an exception. So we manually built a new quote\r\n // request object and use that to update the state.\r\n const newQuoteRequest: QuoteCreateRequestModel = {\r\n AddressKey: propertyData.AddressKey,\r\n Address: propertyData.FullAddress,\r\n NonSingleFamilyResidenceConfirmed: quoteRequest.NonSingleFamilyResidenceConfirmed,\r\n LivingSpace: quoteRequest.LivingSpace,\r\n YearBuilt: quoteRequest.YearBuilt,\r\n RoofAge: quoteRequest.RoofAge,\r\n Source: quoteRequest.Source,\r\n QuotePurposeId: quoteRequest.QuotePurposeId,\r\n InsuredNameFirst: quoteRequest.InsuredNameFirst,\r\n InsuredNameMiddle: quoteRequest.InsuredNameMiddle,\r\n InsuredNameLast: quoteRequest.InsuredNameLast,\r\n RatingType: quoteRequest.RatingType,\r\n NewLandingPage: quoteRequest.NewLandingPage,\r\n RequestUuid: quoteRequest.RequestUuid,\r\n FromHomeowner: false,\r\n };\r\n\r\n await update(state => (state.quoteRequest = newQuoteRequest));\r\n\r\n return await createOrGetQuotes(newQuoteRequest);\r\n } else {\r\n propertyData = {\r\n Street1: address.Street1,\r\n City: address.City,\r\n StateCode: address.StateCode,\r\n Zip: address.Zip,\r\n LivingSpace: address.LivingSpace,\r\n FullAddress: Address.toString(address),\r\n IsSingleFamilyResidence: false,\r\n AddressKey: addressKey,\r\n };\r\n\r\n // If we know we are editing an address or the persistent form has an address key, we assume a record exists for the address so we call the\r\n // proper endpoint. Otherwise we do a check for an existing record and if one is found, we call the proper endpoint.\r\n if (context === 'EditAddress') {\r\n await putProperty(propertyData);\r\n } else {\r\n const addresses = await getProperties(Address.toString(address));\r\n\r\n if (addresses.length > 0) {\r\n propertyData.AddressKey = addresses[0].AddressKey;\r\n await putProperty(propertyData);\r\n } else {\r\n propertyData = await createProperty(address);\r\n await update(state => (state.createAddress.addressKey = propertyData.AddressKey));\r\n }\r\n }\r\n\r\n redirect(Path.PreciseLocationNoQuote, {\r\n address: encodeURIComponent(toKebabCase(propertyData.FullAddress, true)),\r\n });\r\n }\r\n } catch (e) {\r\n toast.error(\r\n await getMessageFromError(\r\n e,\r\n 'An unexpected error occurred while creating the address. Please try again later.',\r\n ),\r\n );\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n}\r\n\r\ntype FormProps = {\r\n loading: boolean;\r\n reducer: ReducerType;\r\n stepDescription?: string;\r\n};\r\n\r\nfunction Form({ loading, reducer, stepDescription }: FormProps) {\r\n const { form, set, validate } = reducer,\r\n { state } = useContext(StateContext),\r\n title = state.createAddress.context === 'EditAddress' ? 'Edit Address' : 'Create Address';\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n set('address', value)}\r\n />\r\n \r\n\r\n \r\n set('city', value)}\r\n />\r\n\r\n new DropdownItem(s, s.toUpperCase(), `state-${s.toLowerCase()}`),\r\n )}\r\n onChange={(item: DropdownItem) => set('state', item.value.toString().toUpperCase())}\r\n value={form.state}\r\n placeholder='Select a state'\r\n className='create-address-state'\r\n textInput={true}\r\n scrollable={true}\r\n loading={loading}\r\n />\r\n\r\n set('zip', value)}\r\n />\r\n \r\n\r\n \r\n set('livingSpace', value)}\r\n className={state.createAddress.context !== 'CreateAddress' ? 'living-space' : undefined}\r\n />\r\n\r\n {state.createAddress.context === 'CreateAddress' && (\r\n <>\r\n {\r\n set('roofAge', value);\r\n validate('yearBuilt');\r\n }}\r\n />\r\n\r\n {\r\n set('yearBuilt', value);\r\n validate('roofAge');\r\n }}\r\n />\r\n \r\n )}\r\n \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { CreateAddressComponent } from '@app/SinglePageApplication/Views/CreateAddress';\r\n\r\nexport const CreateAddress = {\r\n path: Path.CreateAddress,\r\n element: (\r\n \r\n ),\r\n shouldRevalidate: () => false,\r\n};\r\n\r\nexport const CreateAddressNoQuote = {\r\n path: Path.CreateAddressNoQuote,\r\n auth: AccessRole.Agent,\r\n element: ,\r\n};\r\n\r\nexport const EditAddress = {\r\n path: Path.EditAddress,\r\n auth: AccessRole.Agent,\r\n element: ,\r\n};\r\n","import { useContext, useMemo, useState } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport { useAsyncEffect } from '@app/Hooks';\r\nimport { loadComparisonQuotes } from '@app/SinglePageApplication/Api/ComparisonQuotes';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { UrlParams } from '../';\r\n\r\nexport function useCustomize() {\r\n const [isLoading, setLoading] = useState(true),\r\n application = useContext(StateContext),\r\n { state, update } = application,\r\n params = useParams(),\r\n { product } = useParams(),\r\n productLine = ProductLine.parseOrDefault(product) || ProductLine.Homeowner,\r\n isPurchasedQuote = useMemo(\r\n () => state.comparisonModel?.Quotes.some(quote => quote.IsPurchased) || false,\r\n [state.comparisonModel],\r\n );\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n setLoading(true);\r\n await loadComparisonQuotes(application, params as UrlParams, true);\r\n } catch (error) {\r\n update(state => (state.error = error));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n return {\r\n isLoading,\r\n isPurchasedQuote,\r\n state,\r\n update,\r\n productLine,\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { isAtLeastAgent, isLimitedAgentUser } from '@app/Common';\r\nimport { ProductComparisonQuote } from '@app/ProductComparison/Quote';\r\nimport { QuoteOverviewSection } from '@app/SinglePageApplication/Components/OverviewSection';\r\nimport { RouteLoadingSpinner } from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { TileHeader } from '@app/SinglePageApplication/Components/TileHeader';\r\nimport { ViewWrapper } from '@app/SinglePageApplication/Components/ViewWrapper';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { DesignContext } from '@swyfft/webkit';\r\nimport { revalidateWhenQuoteIdChanges } from '../Revalidation';\r\nimport { useCustomize } from './hook';\r\n\r\nexport const Customize = {\r\n path: Path.Customize,\r\n element: ,\r\n shouldRevalidate: revalidateWhenQuoteIdChanges,\r\n};\r\n\r\nexport function Component() {\r\n const { isLoading, isPurchasedQuote, state, update, productLine } = useCustomize(),\r\n { comparisonModel, elementDescriptions } = state;\r\n\r\n return (\r\n \r\n \r\n {isLoading ?\r\n \r\n : \r\n update(state => (state.comparisonModel = comparisonModel))\r\n }\r\n tileHeader={quote => }\r\n overViewSection={tileIndex => }\r\n disableRatingTypeAlert={isPurchasedQuote}\r\n isSingleQuote\r\n // Anonymous users or limited agent users cannot edit quotes\r\n disableElements={!isAtLeastAgent() || isLimitedAgentUser()}\r\n productLine={productLine}\r\n />\r\n }\r\n \r\n \r\n );\r\n}\r\n","import { useContext } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { parseAddress } from '@app/Api/HOApi';\r\nimport { fromKebabToTitleCase } from '@app/Common';\r\nimport { useAsyncEffect, useCreateOrGetQuotes, useQueryString, useRedirect } from '@app/Hooks';\r\nimport { QuoteCreateRequestModel } from '@app/Models';\r\nimport { InitialState, StateContext } from '@app/SinglePageApplication/State';\r\nimport { getPath, Path, UrlParams } from '../';\r\n\r\nexport function useDeepLinkQuote() {\r\n const params = useParams() as UrlParams & { address: string },\r\n query = useQueryString<{ firstName: string; lastName: string; middleName: string }>(),\r\n application = useContext(StateContext),\r\n { createOrGetQuotes } = useCreateOrGetQuotes(),\r\n redirect = useRedirect();\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n const product = params.product;\r\n if (!product) throw new Error('Product is required.');\r\n\r\n const address = params.address;\r\n if (!address) throw new Error('Address is required.');\r\n\r\n const parsedAddress = await parseAddress(address);\r\n if (!parsedAddress) throw new Error('Address is invalid.');\r\n\r\n const firstName = query.get('firstName');\r\n if (!firstName) throw new Error('First name is required.');\r\n\r\n const lastName = query.get('lastName');\r\n if (!lastName) throw new Error('Last name is required.');\r\n\r\n const quoteRequest = {\r\n Address: fromKebabToTitleCase(address),\r\n InsuredNameFirst: firstName,\r\n InsuredNameMiddle: query.get('middleName'),\r\n InsuredNameLast: lastName,\r\n NewLandingPage: true,\r\n // Ensure the flag saying this was a flood quote created from the homeowner page is set to false.\r\n FromHomeowner: false,\r\n } as QuoteCreateRequestModel;\r\n\r\n application.state = InitialState;\r\n application.update(state => (state.quoteRequest = quoteRequest));\r\n\r\n await createOrGetQuotes(quoteRequest);\r\n } catch (e) {\r\n redirect(getPath(Path.ProductLanding, { product: params.product || 'homeowner' }));\r\n }\r\n }, []);\r\n}\r\n","import * as React from 'react';\r\nimport { Params } from 'react-router-dom-v5-compat';\r\nimport { isAtLeastAgent } from '@app/Common';\r\nimport { RouteLoadingSpinner } from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { ViewWrapper } from '@app/SinglePageApplication/Components/ViewWrapper';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport { Path } from '../';\r\nimport { useDeepLinkQuote } from './hook';\r\n\r\nexport type RouteParams = {\r\n address: string;\r\n product: string;\r\n};\r\n\r\nexport const DeepLinkQuote = {\r\n path: Path.DeepLinkQuote,\r\n auth: (params?: Params) => {\r\n // Only users with at least agent access are allowed access to the landing view for flood.\r\n const productLine = ProductLine.parse(params?.product);\r\n return productLine === ProductLine.Flood ? isAtLeastAgent() : true;\r\n },\r\n element: ,\r\n};\r\n\r\nexport function DeepLinkQuoteComponent() {\r\n useDeepLinkQuote();\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import { TableParams } from '@app/Components/FormGroups/Table';\r\nimport { fetchAndLog } from '@app/Api/Fetch';\r\nimport { Job, Webhook } from './Models';\r\n\r\nexport async function getWebhooks(): Promise {\r\n return await fetchAndLog('/api/hover/webhooks', 'get hover webhooks');\r\n}\r\n\r\nexport async function deleteWebhook(webhook: Webhook) {\r\n return await fetchAndLog(`/api/hover/webhook?id=${webhook.id}`, 'delete hover webhook', {\r\n method: 'DELETE',\r\n });\r\n}\r\n\r\nexport async function createWebhook(uri: string) {\r\n return await fetchAndLog(`/api/hover/webhook?uri=${uri}`, 'create hover webhook', {\r\n method: 'POST',\r\n });\r\n}\r\n\r\nexport async function getJobs(params: TableParams): Promise {\r\n return await fetchAndLog(\r\n `/api/hover/jobs?Start=${params.start}&Count=${params.count}&Search=${params.search}`,\r\n 'get hover jobs',\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport { Tab, TabGroup } from '@app/Components/Tabs';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRow } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { AppSettingsContext } from '@app/SinglePageApplication/State/Context';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { SwyfftRouteObject } from '@app/SinglePageApplication/Views/routes';\r\nimport { Authorization } from '../Authorization';\r\nimport { Jobs } from '../Jobs';\r\nimport { Webhooks } from '../Webhooks';\r\nimport './style.scss';\r\n\r\nexport const Hover: SwyfftRouteObject = {\r\n path: Path.Hover,\r\n auth: AccessRole.Admin,\r\n element: ,\r\n shouldRevalidate: () => false,\r\n};\r\n\r\nfunction Component() {\r\n const appSettings = useContext(AppSettingsContext);\r\n\r\n return appSettings ?\r\n \r\n \r\n\r\n \r\n ),\r\n new Tab('Authorization', () => (\r\n \r\n )),\r\n new Tab('Webhooks', () => ),\r\n ]}\r\n />\r\n \r\n \r\n : <>;\r\n}\r\n","import * as React from 'react';\r\nimport { FunctionComponent } from 'react';\r\nimport { PrimaryGreenButton } from '@app/Components/FormGroups/Buttons';\r\n\r\ntype Props = {\r\n authorizationUri: string;\r\n clientId: string;\r\n redirectUri: string;\r\n};\r\n\r\nexport const Authorization: FunctionComponent = ({ authorizationUri, clientId, redirectUri }) => {\r\n return (\r\n
    \r\n

    Authorization

    \r\n

    \r\n The HOVER app requires manual authorization to be triggered from a real life person so that information\r\n can be shared between Swyfft and HOVER. Clicking the \"Authorize\" button below will initiate this\r\n process, then clicking \"Allow\" on the following page will update the authorization token for the HOVER\r\n integration, or insert it if it doesn't already exist.\r\n

    \r\n \r\n
    \r\n );\r\n\r\n function authorize() {\r\n window.open(`${authorizationUri}?client_id=${clientId}&response_type=code&redirect_uri=${redirectUri}`);\r\n }\r\n};\r\n","import * as React from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport { TableFormGroup } from '@app/Components/FormGroups/Table';\r\nimport { dateTimeFormat } from '@app/Constants';\r\nimport { getJobs } from '../Api';\r\nimport { Job } from '../Models';\r\n\r\nexport const Jobs = () => {\r\n return (\r\n
    \r\n

    Jobs

    \r\n\r\n \r\n
    \r\n );\r\n\r\n function buildRow(job: Job) {\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n};\r\n","import * as React from 'react';\r\nimport { FunctionComponent, useRef, useState } from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport * as utc from 'dayjs/plugin/utc';\r\nimport { TableFormGroup } from '@app/Components/FormGroups/Table';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport { Tooltip } from '@app/Components/Tooltip';\r\nimport Confirm from '@app/Components/Modals/Confirm';\r\nimport Modal, { ModalText, ModalTitle } from '@app/Components/Modals/StandardModal';\r\nimport { PrimaryBlackButton, PrimaryGreenButton } from '@app/Components/FormGroups/Buttons';\r\nimport { TextFormGroup } from '@app/Components/FormGroups/Text';\r\nimport { LabelFormGroup } from '@app/Components/FormGroups/Label';\r\nimport { useFormReducer, useToast } from '@app/Hooks';\r\nimport { simpleDateFormat } from '@app/Constants';\r\nimport { Rules, Value } from '@swyfft/webkit';\r\nimport { getWebhooks, deleteWebhook, createWebhook } from '../Api';\r\nimport { Webhook } from '../Models';\r\nimport './style.scss';\r\n\r\ndayjs.extend(utc);\r\n\r\ntype Props = {\r\n webhookEndpoint: string;\r\n};\r\n\r\nexport const Webhooks: FunctionComponent = ({ webhookEndpoint }) => {\r\n let tableRef = useRef | null>();\r\n\r\n const [remove, setRemove] = useState(null),\r\n [removing, setRemoving] = useState(false),\r\n [create, setCreate] = useState(false),\r\n [creating, setCreating] = useState(false),\r\n toast = useToast(),\r\n { form, set, validate, valid } = useFormReducer({\r\n domain: new Value('domain', window.location.origin, [Rules.required()]),\r\n });\r\n\r\n return (\r\n
    \r\n
    \r\n

    Webhooks

    \r\n setCreate(true)}\r\n />\r\n
    \r\n\r\n \r\n ref={c => {\r\n tableRef.current = c;\r\n }}\r\n headers={['URI', 'Create Date', '']}\r\n get={getWebhooks}\r\n row={buildRow}\r\n />\r\n\r\n setRemove(null)}\r\n />\r\n\r\n setCreate(false)}\r\n className='create-webhook-modal'\r\n disableClickOutside={true}\r\n >\r\n Create Webhook\r\n \r\n Creating a webhook here will generate a webhook entry with HOVER. The endpoint is hardcoded to match\r\n our API controller code and the domain is dependent on the environment from which the webhook is\r\n being created. The latter can be modified while the former is hardcoded.\r\n \r\n\r\n set('domain', text)}\r\n />\r\n\r\n \r\n\r\n
    \r\n setCreate(false)}\r\n />\r\n\r\n \r\n
    \r\n \r\n
    \r\n );\r\n\r\n function buildRow(webhook: Webhook): JSX.Element {\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n async function confirmDelete() {\r\n try {\r\n if (!remove) throw new Error('No webhook selected. Cannot delete.');\r\n\r\n setRemoving(true);\r\n\r\n await deleteWebhook(remove);\r\n\r\n tableRef.current?.update(true);\r\n toast.success('The webhook has been successfully deleted.');\r\n setRemove(null);\r\n } catch (error) {\r\n toast.error('An error has occurred while deleting the webhook. Please try again later.');\r\n console.error(error);\r\n } finally {\r\n setRemoving(false);\r\n }\r\n }\r\n\r\n async function saveWebhook() {\r\n try {\r\n if (!create) return;\r\n\r\n validate();\r\n if (!valid()) return;\r\n\r\n setCreating(true);\r\n\r\n await createWebhook(form.domain.content + webhookEndpoint);\r\n\r\n tableRef.current?.update(true);\r\n toast.success('The webhook has been created successfully.');\r\n setCreate(false);\r\n } catch (error) {\r\n console.error(error);\r\n toast.error('An error has occurred while creating the webhook. Please try again later.');\r\n } finally {\r\n setCreating(false);\r\n }\r\n }\r\n};\r\n","import { fetchAndLog } from '@app/Api/Fetch';\r\n\r\nexport interface IsoFormUiModel {\r\n Name: string;\r\n Number: string;\r\n Url: string;\r\n}\r\n\r\nexport async function getIsoForms(): Promise {\r\n return await fetchAndLog('/api/iso-forms/get-iso-forms', 'get list of ISO forms');\r\n}\r\n","import { useContext, useState } from 'react';\r\nimport { getMessageFromError } from '@app/Common';\r\nimport { ToastContext, useAsyncEffect } from '@app/Hooks';\r\nimport { getIsoForms, IsoFormUiModel } from './api';\r\n\r\nexport function useIsoForms() {\r\n const [forms, setForms] = useState([]),\r\n [isLoading, setLoading] = useState(true),\r\n toast = useContext(ToastContext);\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n setLoading(true);\r\n\r\n setForms(await getIsoForms());\r\n } catch (e) {\r\n toast.error(\r\n await getMessageFromError(\r\n e,\r\n 'An unexpected error occurred while retrieving the list of ISO forms. Please try again later.',\r\n ),\r\n );\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n return { isLoading, forms };\r\n}\r\n","import * as React from 'react';\r\nimport { Copyable } from '@app/Components/Copyable';\r\nimport Divider from '@app/Components/Divider';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { RouteLoadingSpinner } from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { IsoFormUiModel } from '@app/SinglePageApplication/Views/IsoForms/api';\r\nimport { SwyfftRouteObject } from '@app/SinglePageApplication/Views/routes';\r\nimport { Paragraph } from '@swyfft/webkit';\r\nimport { useIsoForms } from './hook';\r\nimport './style.scss';\r\n\r\nexport const IsoForms: SwyfftRouteObject = {\r\n path: Path.IsoForms,\r\n auth: AccessRole.Admin,\r\n element: ,\r\n shouldRevalidate: () => false,\r\n};\r\n\r\nexport function IsoFormsComponent() {\r\n const { isLoading, forms } = useIsoForms();\r\n\r\n return (\r\n <>\r\n \r\n
    \r\n

    ISO Forms

    \r\n\r\n \r\n The following ISO forms are available for download. The order is based on the newest form first.\r\n \r\n\r\n \r\n\r\n {isLoading ?\r\n \r\n : }\r\n
    \r\n
    \r\n \r\n );\r\n}\r\n\r\nfunction IsoFormList({ forms }: { forms: IsoFormUiModel[] }) {\r\n return (\r\n
    {model.Code}{model.Name}{dayjs(model.StartDate, 'MM-DD-YYYY').format(dateFormat)}{dayjs(model.EndDate, 'MM-DD-YYYY').format(dateFormat)}\r\n {model.States.map(s => (\r\n
    \r\n {s}\r\n
    \r\n ))}\r\n
    \r\n {model.AccidentTypes.map(at => (\r\n \r\n {at.Name}\r\n \r\n ))}\r\n {model.Notes}\r\n \r\n onSelect(model, Action.Edit)} />\r\n \r\n\r\n \r\n onSelect(model, Action.Delete)}\r\n />\r\n \r\n
    {job.externalHoverJobId}{job.claimNumber}{job.state.capitalize()}{dayjs.utc(job.createdOn).local().format(dateTimeFormat)}{dayjs.utc(job.modifiedOn).local().format(dateTimeFormat)}
    {webhook.url}{dayjs(webhook.created_at).local().format(simpleDateFormat)}\r\n \r\n setRemove(webhook)}\r\n />\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {forms.map(form => (\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n ))}\r\n \r\n
    NameNumberURL
    \r\n \r\n

    {form.Name}

    \r\n
    \r\n
    \r\n \r\n

    {form.Number}

    \r\n
    \r\n
    \r\n \r\n

    {form.Url}

    \r\n
    \r\n
    \r\n );\r\n}\r\n","import { CheckboxFormGroup } from '@app/Components/FormGroups/Checkbox';\r\nimport { pages } from '@app/Constants';\r\nimport { Value } from '@swyfft/webkit';\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n\r\ninterface Props {\r\n value: Value;\r\n setValue: (checked: boolean) => void;\r\n}\r\n\r\nexport function TermsCheckbox({ value, setValue: set }: Props) {\r\n const [isLinkHovered, setIsLinkHovered] = useState(false);\r\n\r\n return (\r\n }\r\n labelClassName='credit-score-label'\r\n checkboxClassName='credit-score-checkbox'\r\n value={value}\r\n onChange={setCheckbox}\r\n />\r\n );\r\n\r\n function setCheckbox(checked: boolean) {\r\n if (isLinkHovered) {\r\n return;\r\n }\r\n\r\n set(checked);\r\n }\r\n\r\n function CheckboxLabel() {\r\n return (\r\n \r\n By clicking the \"Get Quote\" button, you're agreeing to our and are authorizing us to\r\n retrieve a credit-based insurance score (in states where we're allowed).\r\n \r\n );\r\n }\r\n\r\n function TermsLink() {\r\n return (\r\n setIsLinkHovered(true)}\r\n onMouseLeave={() => setIsLinkHovered(false)}\r\n >\r\n terms\r\n \r\n );\r\n }\r\n}\r\n","import { useContext, useEffect, useRef, useState } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport { getMessageFromError, isLimitedAgentUser } from '@app/Common';\r\nimport { pages } from '@app/Constants';\r\nimport { ToastContext, useFormReducer } from '@app/Hooks';\r\nimport { useCreateOrGetQuotes } from '@app/Hooks/CreateOrGetQuotes';\r\nimport { clearForm } from '@app/Hooks/PersistentFormReducer';\r\nimport { useRedirect } from '@app/Hooks/Redirect';\r\nimport { QuoteCreateRequestModel } from '@app/Models';\r\nimport { Actions } from '@app/SinglePageApplication/Components/Landing/Address';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { Rules, Value } from '@swyfft/webkit';\r\nimport { Path, UrlParams } from '../';\r\n\r\ntype Form = {\r\n address: Value;\r\n firstName: Value;\r\n middleName: Value;\r\n lastName: Value;\r\n creditScore: Value;\r\n};\r\n\r\nexport function useLanding(path: Path) {\r\n const params = useParams(),\r\n redirect = useRedirect(),\r\n application = useContext(StateContext),\r\n toast = useContext(ToastContext),\r\n [addressKey, setAddressKey] = useState(null),\r\n [isLoading, setLoading] = useState(false),\r\n productLine = ProductLine.parseOrDefault(params.product) ?? ProductLine.Homeowner,\r\n addressRef = useRef(),\r\n nameFieldLengthRules = [Rules.rangeLength(2, 50)];\r\n\r\n const { form, set, setWithoutValidation, valid, validate } = useFormReducer
    ({\r\n address: new Value('address', '', [Rules.required()]),\r\n firstName: new Value('first name', '', [Rules.required(), ...nameFieldLengthRules]),\r\n middleName: new Value('middle name', '', [Rules.maxLength(50)]),\r\n lastName: new Value('last name', '', [Rules.required(), ...nameFieldLengthRules]),\r\n creditScore: new Value('credit score', true, [Rules.equals(true)]),\r\n });\r\n\r\n const { createOrGetQuotes } = useCreateOrGetQuotes();\r\n\r\n useEffect(() => {\r\n if (addressRef.current) addressRef.current.focus();\r\n\r\n if (isLimitedAgentUser()) {\r\n const productLine =\r\n path === Path.HomeownerLanding ? ProductLine.Homeowner : ProductLine.parse(params?.product);\r\n redirect(pages.History(productLine));\r\n }\r\n\r\n // Clear stored single page application state as we're starting a new quote from the landing page. The 1500 millisecond delay is needed to prevent flashes of no\r\n // content on views as they transition to the landing page. Previously this was set to 300 milliseconds but that was not enough time for the transition\r\n // to finish before the state was cleared and a weird empty UI would be shown (in particular on the quote page).\r\n setTimeout(clearForm, 1500);\r\n }, []);\r\n\r\n return {\r\n addressKey,\r\n addressRef,\r\n productLine,\r\n form,\r\n set,\r\n setWithoutValidation,\r\n submit,\r\n validateForm,\r\n setAddressKey,\r\n isLoading,\r\n };\r\n\r\n function validateForm() {\r\n getPertinentValidationKeys().forEach(key => validate(key as keyof Form));\r\n\r\n const activeElement = document.activeElement as any;\r\n if (activeElement?.blur) activeElement.blur();\r\n }\r\n\r\n async function submit(e: React.FormEvent) {\r\n e.preventDefault();\r\n\r\n // If we're in the middle of submitting the form, don't allow the user to submit it again. The loading button does not automatically prevent the user\r\n // from submitting when in a loading state, and adding a disabled state to it would change the button styling.\r\n if (isLoading || !valid(getPertinentValidationKeys())) return;\r\n\r\n try {\r\n setLoading(true);\r\n\r\n const quoteRequest = {\r\n Address: form.address.content,\r\n AddressKey: addressKey,\r\n InsuredNameFirst: form.firstName.content,\r\n InsuredNameMiddle: form.middleName.content,\r\n InsuredNameLast: form.lastName.content,\r\n NewLandingPage: true,\r\n // Ensure the flag saying this was a flood quote created from the homeowner page is set to false.\r\n FromHomeowner: false,\r\n } as QuoteCreateRequestModel;\r\n\r\n application.update(state => (state.quoteRequest = quoteRequest));\r\n await createOrGetQuotes(quoteRequest);\r\n } catch (e) {\r\n toast.error(await getMessageFromError(e));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n function getPertinentValidationKeys() {\r\n // If the middle name is filled out, check validation for all the fields before submitting. Otherwise, run validation for all the fields except the middle name.\r\n const formKeys = Object.keys(form),\r\n keysWithNoMiddleName = formKeys.filter(key => key !== 'middleName');\r\n return (!!form.middleName.content ? formKeys : keysWithNoMiddleName) as (keyof Form)[];\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Params } from 'react-router-dom-v5-compat';\r\nimport { isAtLeastAgent } from '@app/Common';\r\nimport { PrimaryGreenButton } from '@app/Components/FormGroups/Buttons';\r\nimport { AddressAutoComplete } from '@app/SinglePageApplication/Components/Landing/Address';\r\nimport { HeroText } from '@app/SinglePageApplication/Components/Landing/HeroText';\r\nimport { LandingContent } from '@app/SinglePageApplication/Components/Landing/LandingContent';\r\nimport { LandingFooter } from '@app/SinglePageApplication/Components/Landing/LandingFooter';\r\nimport { LandingLayout } from '@app/SinglePageApplication/Components/Landing/LandingLayout';\r\nimport { LandingViewWrapper } from '@app/SinglePageApplication/Components/Landing/LandingViewWrapper';\r\nimport { Logo } from '@app/SinglePageApplication/Components/Landing/Logo';\r\nimport { InsuredName } from '@app/SinglePageApplication/Components/Landing/Name';\r\nimport { LayoutWrapper } from '@app/SinglePageApplication/Components/LayoutWrapper';\r\nimport { ProductHeader } from '@app/SinglePageApplication/Components/ProductHeader';\r\nimport { ProductLine } from '@business/CommonSets';\r\nimport { DesignContext } from '@swyfft/webkit';\r\nimport { Path } from '../';\r\nimport { useLanding } from './hook';\r\nimport { TermsCheckbox } from './TermsCheckbox';\r\nimport './style.scss';\r\n\r\nexport const Landing = (path: Path) => ({\r\n path,\r\n auth: (params?: Params) => {\r\n // Only users with at least agent access are allowed access to the landing view for flood.\r\n const productLine = path === Path.HomeownerLanding ? ProductLine.Homeowner : ProductLine.parse(params?.product);\r\n return productLine.key === ProductLine.Flood.key ? isAtLeastAgent() : true;\r\n },\r\n element: ,\r\n});\r\n\r\nexport function Component({ path }: { path: Path }) {\r\n const {\r\n addressKey,\r\n addressRef,\r\n productLine,\r\n set,\r\n setWithoutValidation,\r\n form,\r\n submit,\r\n validateForm,\r\n setAddressKey,\r\n isLoading\r\n } = useLanding(path);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n\r\n
    \r\n \r\n
    \r\n\r\n \r\n Unlike other insurance brands with endless forms,\r\n Swyfft uses unique data sources and analytics\r\n \r\n to offer{' '}\r\n {`${productLine.lowercaseName} insurance in seconds.`}\r\n \r\n\r\n \r\n \r\n \r\n\r\n setWithoutValidation('address', address)}\r\n onSelect={property => setAddressKey(property.AddressKey)}\r\n />\r\n\r\n set(key, value)}\r\n />\r\n\r\n \r\n
    \r\n {productLine === ProductLine.Homeowner && (\r\n set('creditScore', checked)}\r\n />\r\n )}\r\n
    \r\n\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","import { fetchAndLogWithResponse } from '@app/Api/Fetch';\r\nimport { LoginDetails } from '@app/Models';\r\n\r\ntype LoginAsResponse = {\r\n token: string;\r\n roles: string[];\r\n details: LoginDetails;\r\n};\r\n\r\nexport async function loginAs(email: string): Promise {\r\n const response = await fetchAndLogWithResponse('/api/loginas', 'login-as', {\r\n method: 'POST',\r\n body: JSON.stringify({ email }),\r\n });\r\n\r\n if (!response.ok) {\r\n if (response.status === 400) throw new Error(await response.text());\r\n else throw response;\r\n }\r\n\r\n return await response.json();\r\n}\r\n","import * as React from 'react';\r\nimport { Path } from '..';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRow } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { useFormReducer } from '@app/Hooks/FormReducer';\r\nimport { useToast } from '@app/Hooks/Toast';\r\nimport { Rules, Value } from '@swyfft/webkit';\r\nimport { TextFormGroup } from '@app/Components/FormGroups/Text';\r\nimport { PrimaryGreenButton } from '@app/Components/FormGroups/Buttons';\r\nimport { setCookie, saveLocalData } from '@app/Storage';\r\nimport { loginAs } from './api';\r\nimport './style.scss';\r\n\r\nexport const LoginAs = {\r\n path: Path.LoginAs,\r\n element: () => ,\r\n shouldRevalidate: () => false,\r\n};\r\n\r\ntype Form = {\r\n email: Value;\r\n};\r\n\r\nfunction Component() {\r\n const [loading, setLoading] = React.useState(false),\r\n { error } = useToast();\r\n\r\n const { form, set, validate, valid } = useFormReducer
    ({\r\n email: new Value('email', '', [Rules.required(), Rules.email()]),\r\n });\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n set('email', text)}\r\n />\r\n\r\n validate()}\r\n />\r\n \r\n \r\n
    \r\n );\r\n\r\n async function loginAsSomeoneElse(e: React.FormEvent) {\r\n e.preventDefault();\r\n\r\n if (!valid()) return;\r\n\r\n try {\r\n setLoading(true);\r\n\r\n const response = await loginAs(form.email.content);\r\n setCookie('authorization', response.token, 0);\r\n saveLocalData('rememberMe', '');\r\n saveLocalData('roles', JSON.stringify(response.roles));\r\n saveLocalData('loginDetails', JSON.stringify(response.details));\r\n window.location.href = '/';\r\n } catch (e) {\r\n console.error(e);\r\n error((e as Error).message);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { FC } from 'react';\r\n\r\nimport { Svg } from '@app/Components/Svg';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n onSubmit: () => void;\r\n title: string;\r\n description: string;\r\n id?: string;\r\n alt?: string;\r\n};\r\n\r\nexport const PaymentAction: FC = (props: Props) => {\r\n return (\r\n
    \r\n
    \r\n
    {props.title}
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    {props.description}
    \r\n
    \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { FC, useState } from 'react';\r\nimport * as dayjs from 'dayjs';\r\n\r\nimport { RadioGroup, Rules, Text, Value } from '@swyfft/webkit';\r\nimport { PrimaryRouteButton, SecondaryBackButton } from '@app/SinglePageApplication/Components/Buttons';\r\nimport { useFormReducer } from '@app/Hooks';\r\nimport { PaymentTypes } from '@app/Constants';\r\nimport { AccountType, PaymentModel } from '@app/Models';\r\nimport * as AdminApi from '@app/Api/AdminApi';\r\nimport { routingNumber } from '@business/Validation/routingNumber';\r\nimport './style.scss';\r\nimport * as Common from '@app/Common';\r\n\r\ntype CreditCardForm = {\r\n paymentType: Value;\r\n firstName: Value;\r\n lastName: Value;\r\n creditCardNumber: Value;\r\n creditCardExpiration: Value;\r\n cvv: Value;\r\n};\r\n\r\ntype ECheckForm = {\r\n eCheckAccountType: Value;\r\n accountOwner: Value;\r\n accountNumber: Value;\r\n routingNumber: Value;\r\n};\r\n\r\ntype Props = {\r\n paymentType: PaymentTypes;\r\n firstName: string;\r\n lastName: string;\r\n amountDueCredit: string;\r\n amountDueNonCredit: string;\r\n creditCardNumber: string;\r\n eCheckAccountType: AccountType;\r\n accountOwner: string;\r\n accountNumber: string;\r\n routingNumber: string;\r\n onCancel: () => void;\r\n onSubmit: (data: PaymentModel) => void;\r\n feeNotice?: string;\r\n updatePaymentInfo?: boolean;\r\n};\r\n\r\nexport const PaymentForm: FC = (props: Props) => {\r\n const [submitButtonLabel, setSubmitButtonLabel] = useState(getSubmitButtonLabel(props.paymentType));\r\n\r\n const {\r\n form: formCredit,\r\n set,\r\n setWithoutValidation,\r\n valid,\r\n validate,\r\n } = useFormReducer({\r\n paymentType: new Value('payment type', props.paymentType),\r\n firstName: new Value('first name', props.firstName, [\r\n Rules.required(true, 'Please enter a value for the first name.'),\r\n ]),\r\n lastName: new Value('last name', props.lastName, [\r\n Rules.required(true, 'Please enter a value for the last name.'),\r\n ]),\r\n creditCardNumber: new Value('credit card number', props.creditCardNumber, [\r\n Rules.required(true, 'Please enter a value for the credit card number.'),\r\n Rules.creditCard('Please enter a valid credit card number.'),\r\n ]),\r\n creditCardExpiration: new Value('credit card expiration', '', [\r\n Rules.required(true, 'Please enter a value for the expiration date.'),\r\n Rules.maxLength(7),\r\n Rules.afterWithString(dayjs().startOf('month').add(-1, 'seconds')),\r\n ]),\r\n cvv: new Value('CVV', '', [\r\n Rules.required(true, 'Please enter a value for the CVV.'),\r\n Rules.regex(/^[0-9]{3,4}/),\r\n ]),\r\n });\r\n\r\n const {\r\n form: formECheck,\r\n setWithoutValidation: setWithoutValidationECheck,\r\n valid: validECheck,\r\n validate: validateECheck,\r\n } = useFormReducer({\r\n eCheckAccountType: new Value('echeck account type', props.eCheckAccountType),\r\n accountOwner: new Value('account owner', props.accountOwner, [\r\n Rules.required(true, 'Please enter a value for the account owner.'),\r\n ]),\r\n accountNumber: new Value('account number', props.accountNumber, [\r\n Rules.required(true, 'Please enter a value for the account number.'),\r\n Rules.regex(/^(?!XXXX).*/),\r\n ]),\r\n routingNumber: new Value('routing number', props.routingNumber, [\r\n Rules.required(true, 'Please enter a value for the routing number.'),\r\n routingNumber(),\r\n ]),\r\n });\r\n\r\n const echeckAccountTypeOptions = [\r\n { label: 'Checking', value: 'checking' },\r\n { label: 'Savings', value: 'savings' },\r\n ];\r\n\r\n function getSubmitButtonLabel(paymentType: PaymentTypes) {\r\n if (props.updatePaymentInfo) {\r\n return 'Update Method';\r\n } else {\r\n return `Pay ${Common.formatCurrencyUS(paymentType === PaymentTypes.CreditCard ? props.amountDueCredit : props.amountDueNonCredit, 2)}`;\r\n }\r\n }\r\n\r\n const handleChangePaymentType = (paymentType: PaymentTypes) => {\r\n set('paymentType', paymentType);\r\n setSubmitButtonLabel(getSubmitButtonLabel(paymentType));\r\n };\r\n\r\n const handleSubmit = async () => {\r\n if (formCredit.paymentType.content === PaymentTypes.CreditCard) {\r\n validate();\r\n\r\n if (!valid()) {\r\n return;\r\n }\r\n } else {\r\n validateECheck();\r\n\r\n if (!validECheck()) {\r\n return;\r\n }\r\n }\r\n\r\n const expirationDateParts = formCredit.creditCardExpiration.content.split('/');\r\n let bankName = '';\r\n\r\n if (formCredit.paymentType.content === PaymentTypes.ECheck) {\r\n try {\r\n bankName = await AdminApi.getBankName(formECheck.routingNumber.content);\r\n } catch (error) {\r\n // We do nothing here since not fetching the bank name isn't fatal when it comes to updating payment info\r\n }\r\n }\r\n\r\n props.onSubmit({\r\n PolicyNumber: '',\r\n PolicyZip: '',\r\n PaymentAmount: '',\r\n Authorization: '',\r\n AnnualNewBusiness: false,\r\n IsCard: formCredit.paymentType.content === PaymentTypes.CreditCard,\r\n AccountNumber: formECheck.accountNumber.content,\r\n RoutingNumber: formECheck.routingNumber.content,\r\n AccountName: formECheck.accountOwner.content,\r\n BankAccountType: formECheck.eCheckAccountType.content,\r\n BankName: bankName,\r\n CreditCard: String(formCredit.creditCardNumber.content).replace(/-|\\s/g, ''),\r\n Cvv: formCredit.cvv.content,\r\n ExpMonth: expirationDateParts[0],\r\n ExpYear: expirationDateParts[1],\r\n FirstName: formCredit.firstName.content,\r\n LastName: formCredit.lastName.content,\r\n });\r\n };\r\n\r\n return (\r\n
    \r\n
    Payment Method
    \r\n\r\n
    \r\n handleChangePaymentType(PaymentTypes.CreditCard)}\r\n >\r\n Credit Card\r\n
    \r\n handleChangePaymentType(PaymentTypes.ECheck)}\r\n >\r\n Echeck\r\n
    \r\n
    \r\n\r\n {props.feeNotice &&
    {props.feeNotice}
    }\r\n\r\n {formCredit.paymentType.content === PaymentTypes.CreditCard && (\r\n
    \r\n
    \r\n
    \r\n setWithoutValidation('firstName', value)}\r\n label='First Name'\r\n value={formCredit.firstName}\r\n name='first-name-card'\r\n />\r\n
    \r\n
    \r\n setWithoutValidation('lastName', value)}\r\n label='Last Name'\r\n value={formCredit.lastName}\r\n name='last-name-card'\r\n />\r\n
    \r\n
    \r\n\r\n
    \r\n setWithoutValidation('creditCardNumber', value)}\r\n label='Credit Card Number'\r\n value={formCredit.creditCardNumber}\r\n name='credit-card-number'\r\n />\r\n
    \r\n\r\n
    \r\n
    \r\n setWithoutValidation('creditCardExpiration', value)}\r\n label='Expiration Date'\r\n value={formCredit.creditCardExpiration}\r\n name='credit-card-expiration-date'\r\n placeholder='MM/YYYY'\r\n />\r\n
    \r\n
    \r\n setWithoutValidation('cvv', value)}\r\n label='CVV'\r\n value={formCredit.cvv}\r\n name='credit-card-cvv'\r\n />\r\n
    \r\n
    \r\n
    \r\n )}\r\n\r\n {formCredit.paymentType.content === PaymentTypes.ECheck && (\r\n
    \r\n
    \r\n \r\n setWithoutValidationECheck('eCheckAccountType', value as AccountType)\r\n }\r\n value={formECheck.eCheckAccountType}\r\n label='Echeck Account'\r\n options={echeckAccountTypeOptions}\r\n orientation='horizontal'\r\n />\r\n
    \r\n\r\n
    \r\n setWithoutValidationECheck('accountOwner', value)}\r\n label='Account Owner'\r\n value={formECheck.accountOwner}\r\n name='account-owner'\r\n />\r\n
    \r\n\r\n
    \r\n
    \r\n setWithoutValidationECheck('accountNumber', value)}\r\n label='Account Number'\r\n value={formECheck.accountNumber}\r\n name='account-number'\r\n />\r\n
    \r\n
    \r\n setWithoutValidationECheck('routingNumber', value)}\r\n label='Routing Number'\r\n value={formECheck.routingNumber}\r\n name='routing-number'\r\n />\r\n
    \r\n
    \r\n
    \r\n )}\r\n\r\n
    \r\n \r\n\r\n \r\n
    \r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { FC } from 'react';\r\nimport * as dayjs from 'dayjs';\r\n\r\nimport { Svg } from '@app/Components/Svg';\r\nimport { PolicyPaymentInvoice } from '@app/Models';\r\nimport { PaymentFrequency } from '@app/Purchase/Interfaces/Interfaces';\r\nimport { hideString } from '@app/Purchase/Components/PaymentConfirmation';\r\nimport { PaymentTypes } from '@app/Constants';\r\nimport { formatCurrencyUS } from '@app/Common';\r\nimport './style.scss';\r\n\r\ntype Props = {\r\n policyNumber: string;\r\n invoice: PolicyPaymentInvoice;\r\n};\r\n\r\nexport const PaymentSummary: FC = (props: Props) => {\r\n const { invoice } = props;\r\n const balanceDue = formatCurrencyUS(\r\n invoice.paymentProfile.PaymentType === PaymentTypes.CreditCard\r\n ? invoice.amountDueCredit\r\n : invoice.amountDueNonCredit,\r\n 2,\r\n true\r\n );\r\n const dueDate = `Due ${dayjs(invoice.dueDate).format('M/D/YY')}`;\r\n const paymentFrequency = invoice.paymentProfile.PremiumType as PaymentFrequency;\r\n\r\n return (\r\n
    \r\n
    Policy # {props.policyNumber}
    \r\n\r\n
    \r\n
    Current Balance Due
    \r\n\r\n
    \r\n
    \r\n \r\n\r\n \r\n {balanceDue}\r\n \r\n
    \r\n\r\n {balanceDue !== '0.00' && (\r\n
    \r\n \r\n\r\n \r\n {dueDate}\r\n \r\n
    \r\n )}\r\n
    \r\n
    \r\n\r\n
    \r\n
    Saved Payment Method
    \r\n\r\n
    \r\n {paymentFrequency.toLowerCase().startsWith('escrow') ? (\r\n Escrow Account\r\n ) : invoice.paymentProfile.PaymentType === 'creditcard' ? (\r\n \r\n Credit Card:\r\n \r\n   ••••-••••-••••-\r\n {(invoice.paymentProfile.CreditCardNumber || '').slice(-4)}\r\n \r\n \r\n ) : (\r\n \r\n \r\n {(invoice.paymentProfile.ECheckAccountType || 'checking') === 'checking'\r\n ? 'Checking Account:'\r\n : 'Savings Account:'}\r\n   \r\n \r\n {hideString(invoice.paymentProfile.ECheckAccountNumber || '', 4)}\r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { FC, ReactNode, useEffect, useState } from 'react';\r\nimport { useSearchParams } from 'react-router-dom-v5-compat';\r\nimport * as dayjs from 'dayjs';\r\nimport * as html2canvas from 'html2canvas';\r\n\r\nimport { Text, Rules, Value, Button, Modal } from '@swyfft/webkit';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRow } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { PrimaryRouteButton, SecondaryBackButton } from '@app/SinglePageApplication/Components/Buttons';\r\nimport { PaymentSummary } from '@app/SinglePageApplication/Views/MakeAPayment/PaymentSummary';\r\nimport { PaymentForm } from '@app/SinglePageApplication/Views/MakeAPayment/PaymentForm';\r\nimport { PaymentConfirmation, ICardSummary, ICheckSummary } from '@app/Purchase/Components/PaymentConfirmation';\r\nimport { useFormReducer, useKeyboardEvent } from '@app/Hooks';\r\nimport * as Constants from '@app/Constants';\r\nimport * as HOApi from '@app/Api/HOApi';\r\nimport * as AdminApi from '@app/Api/AdminApi';\r\nimport { PaymentModel, PolicyPaymentInvoice, AccountType } from '@app/Models';\r\nimport * as Common from '@app/Common';\r\nimport { PaymentAction } from '@app/SinglePageApplication/Views/MakeAPayment/PaymentAction';\r\nimport { PaymentFrequency } from '@app/Purchase/Interfaces/Interfaces';\r\nimport { ErrorCodes, PaymentTypes } from '@app/Constants';\r\nimport * as Models from '@app/Models';\r\nimport './style.scss';\r\n\r\nenum PaymentStep {\r\n Locate = 'locate',\r\n Verify = 'verify',\r\n OneTimePayment = 'one-time-payment',\r\n UpdatePaymentInfo = 'update-payment-info',\r\n ThankYou = 'thank-you',\r\n}\r\n\r\ntype Form = {\r\n policyNumber: Value;\r\n policyZipCode: Value;\r\n};\r\n\r\nexport const MakeAPaymentComponent: FC = () => {\r\n const [paymentStep, setPaymentStep] = useState(PaymentStep.Locate);\r\n const [invoice, setInvoice] = useState(getEmptyInvoice());\r\n const [amountDue, setAmountDue] = useState('');\r\n const [paymentInfo, setPaymentInfo] = useState(getEmptyPaymentModel());\r\n const [paymentFrequency, setPaymentFrequency] = useState();\r\n const [isPaymentConfirmationVisible, setIsPaymentConfirmationVisible] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [isProcessing, setIsProcessing] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n const [searchParams] = useSearchParams();\r\n\r\n useKeyboardEvent(handleKeyDown);\r\n\r\n function getEmptyInvoice(): PolicyPaymentInvoice {\r\n return {\r\n paymentProfile: {\r\n PremiumType: '',\r\n PaymentType: '',\r\n FirstName: null,\r\n LastName: null,\r\n NameOnPolicy: '',\r\n InsuranceCompanyName: '',\r\n BankName: '',\r\n BankLoanNumber: '',\r\n BankStreet1: '',\r\n BankStreet2: '',\r\n BankCity: '',\r\n BankStateCode: '',\r\n BankZip: '',\r\n BankFax: '',\r\n CreditCardNumber: null,\r\n CreditCardExpires: null,\r\n ECheckAccountType: null,\r\n ECheckAccountOwner: null,\r\n ECheckRoutingNumber: null,\r\n ECheckAccountNumber: null,\r\n },\r\n dueDate: '',\r\n amountDueCredit: '',\r\n amountDueNonCredit: '',\r\n quoteId: '',\r\n invoiceNumber: null,\r\n quoteStatus: '',\r\n };\r\n }\r\n\r\n function getEmptyPaymentModel(): PaymentModel {\r\n return {\r\n PolicyNumber: '',\r\n PolicyZip: '',\r\n PaymentAmount: '',\r\n Authorization: '',\r\n AnnualNewBusiness: false,\r\n IsCard: false,\r\n };\r\n }\r\n\r\n function handleKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Enter' && paymentStep === PaymentStep.Locate) {\r\n handleSubmit();\r\n }\r\n }\r\n\r\n const initialPolicyNumber = searchParams.get('policyNumber') || '';\r\n const initialZipCode = searchParams.get('zip') || '';\r\n\r\n const { form, setWithoutValidation, valid, validate } = useFormReducer
    ({\r\n policyNumber: new Value('policyNumber', initialPolicyNumber, [\r\n Rules.required(true, 'Please enter a value for the policy number'),\r\n ]),\r\n policyZipCode: new Value('policyZipCode', initialZipCode, [\r\n Rules.required(true, 'Please enter a value for the zip code'),\r\n ]),\r\n });\r\n\r\n useEffect(() => {\r\n const loadInvoice = async () => {\r\n await getInvoice(initialPolicyNumber, initialZipCode);\r\n };\r\n\r\n if (initialPolicyNumber && initialZipCode && !invoice.quoteId) {\r\n loadInvoice();\r\n }\r\n }, [initialPolicyNumber, initialZipCode]);\r\n\r\n const getStepDescription = () => {\r\n let desc: string;\r\n\r\n switch (paymentStep) {\r\n case PaymentStep.Locate:\r\n desc = 'Enter policy # and zip code to locate your policy.';\r\n break;\r\n case PaymentStep.Verify:\r\n desc = '';\r\n break;\r\n case PaymentStep.UpdatePaymentInfo:\r\n desc = 'Update or change your saved payment method.';\r\n break;\r\n case PaymentStep.OneTimePayment:\r\n desc = 'Choose a payment method and enter the details below. This payment method will not be saved.';\r\n break;\r\n default:\r\n desc = '';\r\n }\r\n\r\n return desc;\r\n };\r\n\r\n const getStepContent = () => {\r\n let content: ReactNode = '';\r\n\r\n switch (paymentStep) {\r\n case PaymentStep.Locate:\r\n content = (\r\n <>\r\n
    \r\n setWithoutValidation('policyNumber', value)}\r\n label='Policy Number'\r\n value={form.policyNumber}\r\n name='policy-number'\r\n />\r\n
    \r\n
    \r\n setWithoutValidation('policyZipCode', value)}\r\n label='Insured Zip Code'\r\n value={form.policyZipCode}\r\n name='policy-zip'\r\n />\r\n
    \r\n \r\n );\r\n\r\n break;\r\n case PaymentStep.Verify:\r\n const isEscrow = paymentFrequency?.toLowerCase().startsWith('escrow');\r\n\r\n content = (\r\n <>\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n {isEscrow && (\r\n \r\n Common.navigate(\r\n `${Constants.pages.EditBillableInterests}?policyNumber=${form.policyNumber.content}`,\r\n )\r\n }\r\n title='Edit Billable Interests'\r\n description='Update current mortgagee information on file'\r\n />\r\n )}\r\n\r\n {!isEscrow && (\r\n setPaymentStep(PaymentStep.UpdatePaymentInfo)}\r\n title='Update Saved Payment Method'\r\n description='Correct an out-of-date or invalid payment method'\r\n />\r\n )}\r\n\r\n {!isEscrow && amountDue !== '0.00' && (\r\n {\r\n setIsPaymentConfirmationVisible(true);\r\n setPaymentInfo(getPaymentInfoFromInvoice(invoice));\r\n }}\r\n title={`Pay ${Common.formatCurrencyUS(amountDue, 2)} with Saved Method`}\r\n description='Use saved method to pay (if valid)'\r\n />\r\n )}\r\n\r\n {amountDue !== '0.00' && (\r\n setPaymentStep(PaymentStep.OneTimePayment)}\r\n title={`Pay ${Common.formatCurrencyUS(amountDue, 2)}${!isEscrow ? ' with Other Method' : ''}`}\r\n description='Payment method will not be saved'\r\n />\r\n )}\r\n
    \r\n \r\n );\r\n\r\n break;\r\n case PaymentStep.UpdatePaymentInfo:\r\n case PaymentStep.OneTimePayment:\r\n let feeNotice: string | undefined;\r\n\r\n if (invoice.amountDueCredit !== invoice.amountDueNonCredit) {\r\n feeNotice = `Card payment includes ${Common.formatCurrencyUS(+invoice.amountDueCredit - +invoice.amountDueNonCredit, 2)} convenience fee`;\r\n }\r\n\r\n content = (\r\n <>\r\n setPaymentStep(PaymentStep.Verify)}\r\n onSubmit={handleSubmitPaymentForm}\r\n feeNotice={feeNotice}\r\n updatePaymentInfo={paymentStep === PaymentStep.UpdatePaymentInfo}\r\n />\r\n \r\n );\r\n\r\n break;\r\n case PaymentStep.ThankYou:\r\n content = (\r\n <>\r\n
    \r\n
    \r\n Payment Successful, Thank You!\r\n
    \r\n

    Thank You!

    \r\n

    \r\n Your payment was submitted successfully. We will send you an email receipt shortly.\r\n

    \r\n
    \r\n \r\n );\r\n }\r\n\r\n return content;\r\n };\r\n\r\n const getBackButtonLabel = () => {\r\n if (paymentStep !== PaymentStep.UpdatePaymentInfo) {\r\n return 'Back';\r\n } else {\r\n return 'Cancel';\r\n }\r\n };\r\n\r\n const getErrorContent = (message: string) => {\r\n if (!message) {\r\n return ;\r\n }\r\n\r\n const email = 'customersupport@swyfft.com';\r\n const messageParts = message.split(email);\r\n\r\n if (messageParts.length === 2) {\r\n return (\r\n
    \r\n {messageParts[0]}\r\n {email}\r\n {messageParts[1]}\r\n
    \r\n );\r\n }\r\n\r\n return
    {message}
    ;\r\n };\r\n\r\n const getPaymentInfoFromInvoice = (invoice: PolicyPaymentInvoice): PaymentModel => {\r\n const paymentInfo: PaymentModel = {\r\n PolicyNumber: form.policyNumber.content,\r\n PolicyZip: form.policyZipCode.content,\r\n PaymentAmount: '0',\r\n Authorization: '',\r\n AnnualNewBusiness: false,\r\n // The negative case is used here so we default to credit card if the payment type value is null. This could happen when making a one-time payment\r\n // for a quote that is paid via escrow.\r\n IsCard: invoice.paymentProfile.PaymentType !== PaymentTypes.ECheck,\r\n };\r\n\r\n if (paymentInfo.IsCard) {\r\n paymentInfo.CreditCard = invoice.paymentProfile.CreditCardNumber || '';\r\n paymentInfo.Cvv = '';\r\n paymentInfo.ExpMonth = '';\r\n paymentInfo.ExpYear = '';\r\n paymentInfo.FirstName = invoice.paymentProfile.FirstName || '';\r\n paymentInfo.LastName = invoice.paymentProfile.LastName || '';\r\n } else {\r\n paymentInfo.BankAccountType = invoice.paymentProfile.ECheckAccountType || 'checking';\r\n paymentInfo.AccountName = invoice.paymentProfile.ECheckAccountOwner || '';\r\n paymentInfo.AccountNumber = invoice.paymentProfile.ECheckAccountNumber || '';\r\n paymentInfo.RoutingNumber = invoice.paymentProfile.ECheckRoutingNumber || '';\r\n paymentInfo.BankName = '';\r\n }\r\n\r\n return paymentInfo;\r\n };\r\n\r\n const getInvoice = async (policyNumber: string, zipCode: string) => {\r\n let invoice: PolicyPaymentInvoice;\r\n\r\n setErrorMessage('');\r\n setIsLoading(true);\r\n\r\n try {\r\n invoice = await HOApi.getPolicyPaymentInvoice(policyNumber, zipCode);\r\n\r\n setErrorMessage('');\r\n setInvoice(invoice);\r\n setPaymentInfo(getPaymentInfoFromInvoice(invoice));\r\n setAmountDue(\r\n invoice.paymentProfile.PaymentType === Constants.PaymentTypes.CreditCard ?\r\n invoice.amountDueCredit\r\n : invoice.amountDueNonCredit,\r\n );\r\n setPaymentFrequency(invoice.paymentProfile.PremiumType as PaymentFrequency);\r\n setPaymentStep(PaymentStep.Verify);\r\n } catch (err) {\r\n const apiError = Common.getApiError(err);\r\n let message = apiError.message;\r\n\r\n if (err.subCode === ErrorCodes.PolicyBillingIssue) {\r\n message =\r\n 'Sorry, the policy you looked up has an issue with its billing information and cannot be updated online. Please contact customersupport@swyfft.com to make changes to your payment method.';\r\n }\r\n\r\n if (err.subCode === ErrorCodes.CouldNotLoadPolicy) {\r\n message =\r\n 'Sorry, we cannot load this policy for you at this time. Please contact customersupport@swyfft.com for assistance.';\r\n }\r\n\r\n if (err.subCode === ErrorCodes.PolicyNumberZipCodeMismatch) {\r\n message =\r\n \"Sorry, this policy # and zip don't match our records. Please update the information and try again or contact Swyfft customer support at customersupport@swyfft.com.\";\r\n }\r\n\r\n setErrorMessage(message);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const getAuthorizationScreen = async () => {\r\n const canvasOptions: {} = {\r\n scale: 1,\r\n windowWidth: 1024,\r\n width: 1024,\r\n height: 860,\r\n logging: false,\r\n };\r\n\r\n const toCanvas: any = html2canvas as any;\r\n\r\n // We grab the confirmation modal element (as opposed to the whole body) to avoid interference with site-wide elements such as the banner. This won't\r\n // work correctly with a React ref, which is why we use the document.getElementById method.\r\n const screen: any = await toCanvas(document.querySelector('#confirmation-modal'), canvasOptions);\r\n\r\n return screen.toDataURL();\r\n };\r\n\r\n const getPaymentInfo = async () => {\r\n const newPaymentInfo: Models.PaymentModel = {\r\n PolicyNumber: form.policyNumber.content,\r\n PolicyZip: form.policyZipCode.content,\r\n PaymentAmount: getPaymentAmount(),\r\n Authorization: await getAuthorizationScreen(),\r\n AnnualNewBusiness: ['escrow', 'annual'].includes(paymentFrequency || ''),\r\n IsCard: paymentInfo.IsCard,\r\n };\r\n\r\n if (paymentInfo.IsCard) {\r\n newPaymentInfo.CreditCard = paymentInfo.CreditCard;\r\n newPaymentInfo.Cvv = paymentInfo.Cvv;\r\n newPaymentInfo.ExpMonth = paymentInfo.ExpMonth;\r\n newPaymentInfo.ExpYear = paymentInfo.ExpYear;\r\n } else {\r\n newPaymentInfo.AccountName = paymentInfo.AccountName;\r\n newPaymentInfo.AccountNumber = paymentInfo.AccountNumber;\r\n newPaymentInfo.RoutingNumber = paymentInfo.RoutingNumber;\r\n newPaymentInfo.BankAccountType = paymentInfo.BankAccountType;\r\n }\r\n\r\n return newPaymentInfo;\r\n };\r\n\r\n const changePaymentInfo = async () => {\r\n let success = false;\r\n setIsProcessing(true);\r\n\r\n try {\r\n const paymentInfo = await getPaymentInfo();\r\n paymentInfo.Authorization = await getAuthorizationScreen();\r\n\r\n const response = await AdminApi.updatePaymentMethod(paymentInfo);\r\n\r\n if (response.status && response.status !== 200) {\r\n const details = await response.json();\r\n\r\n if (Common.isProblemDetail(details)) {\r\n throw [response, details];\r\n } else {\r\n details.Status = response.status;\r\n throw details;\r\n }\r\n }\r\n\r\n success = true;\r\n await getInvoice(form.policyNumber.content, form.policyZipCode.content);\r\n } catch (ex) {\r\n Common.handleGeneralError(ex);\r\n } finally {\r\n setIsProcessing(false);\r\n setIsPaymentConfirmationVisible(false);\r\n\r\n if (success) {\r\n setPaymentStep(PaymentStep.Verify);\r\n }\r\n }\r\n };\r\n\r\n const makePayment = async () => {\r\n let success = false;\r\n setIsProcessing(true);\r\n\r\n try {\r\n const response = await AdminApi.payFromExistingProfile(\r\n form.policyNumber.content,\r\n form.policyZipCode.content,\r\n amountDue,\r\n paymentInfo.IsCard ? 'Credit Card' : 'ECheck',\r\n (paymentInfo.IsCard ? paymentInfo.CreditCard : paymentInfo.AccountNumber) || '',\r\n );\r\n\r\n if (response.status && response.status !== 200) {\r\n const details = await response.json();\r\n\r\n if (Common.isProblemDetail(details)) {\r\n throw [response, details];\r\n } else {\r\n details.Status = response.status;\r\n throw details;\r\n }\r\n }\r\n\r\n success = true;\r\n } catch (ex) {\r\n Common.handleGeneralError(ex);\r\n } finally {\r\n setIsProcessing(false);\r\n setIsPaymentConfirmationVisible(false);\r\n\r\n if (success) {\r\n setPaymentStep(PaymentStep.ThankYou);\r\n }\r\n }\r\n };\r\n\r\n const makeOneTimePayment = async () => {\r\n let success = false;\r\n setIsProcessing(true);\r\n\r\n try {\r\n const paymentInfo = await getPaymentInfo();\r\n paymentInfo.Authorization = await getAuthorizationScreen();\r\n\r\n const response = await AdminApi.payOnce(paymentInfo);\r\n\r\n if (response.status && response.status !== 200) {\r\n const details = await response.json();\r\n\r\n if (Common.isProblemDetail(details)) {\r\n throw [response, details];\r\n } else {\r\n details.Status = response.status;\r\n throw details;\r\n }\r\n }\r\n\r\n success = true;\r\n } catch (ex) {\r\n Common.handleGeneralError(ex);\r\n } finally {\r\n setIsProcessing(false);\r\n setIsPaymentConfirmationVisible(false);\r\n\r\n if (success) {\r\n setPaymentStep(PaymentStep.ThankYou);\r\n }\r\n }\r\n };\r\n\r\n const handleSubmit = async () => {\r\n validate();\r\n\r\n if (!valid()) {\r\n return;\r\n }\r\n\r\n await getInvoice(form.policyNumber.content, form.policyZipCode.content);\r\n };\r\n\r\n const handleSubmitPaymentForm = (data: PaymentModel) => {\r\n setPaymentInfo({ ...data, PolicyNumber: form.policyNumber.content, PolicyZip: form.policyZipCode.content });\r\n setIsPaymentConfirmationVisible(true);\r\n };\r\n\r\n const handleGoBack = () => {\r\n switch (paymentStep) {\r\n case PaymentStep.Verify:\r\n setPaymentStep(PaymentStep.Locate);\r\n\r\n break;\r\n case PaymentStep.UpdatePaymentInfo:\r\n setPaymentStep(PaymentStep.Verify);\r\n\r\n break;\r\n }\r\n };\r\n\r\n // A one-time payment could have the credit card fee added or removed from the total.\r\n const getPaymentAmount = () => (paymentInfo.IsCard ? invoice.amountDueCredit : invoice.amountDueNonCredit);\r\n\r\n const updatePaymentInfo = paymentStep === PaymentStep.UpdatePaymentInfo;\r\n\r\n return (\r\n \r\n {paymentStep !== PaymentStep.ThankYou && (\r\n \r\n )}\r\n\r\n \r\n {getStepContent()}\r\n \r\n\r\n {errorMessage && {getErrorContent(errorMessage)}}\r\n\r\n \r\n {paymentStep !== PaymentStep.Locate && paymentStep !== PaymentStep.ThankYou && (\r\n \r\n )}\r\n\r\n {paymentStep !== PaymentStep.Verify && (\r\n \r\n )}\r\n \r\n\r\n setIsPaymentConfirmationVisible(false)}\r\n isDismissable={true}\r\n isKeyboardDismissable={true}\r\n size='large'\r\n showCloseButton={true}\r\n >\r\n
    \r\n
    \r\n {updatePaymentInfo ?\r\n

    \r\n By clicking the button below, I authorize Swyfft to update my saved payment method to:\r\n

    \r\n :

    \r\n You are making a payment of{' '}\r\n ${getPaymentAmount()} using the following\r\n payment method:\r\n

    \r\n }\r\n
    \r\n\r\n

    \r\n \r\n

    \r\n\r\n {paymentStep === PaymentStep.OneTimePayment &&\r\n !paymentFrequency?.toLowerCase().startsWith('escrow') && (\r\n
    \r\n

    \r\n {\r\n event.preventDefault();\r\n\r\n setPaymentStep(PaymentStep.UpdatePaymentInfo);\r\n setIsPaymentConfirmationVisible(false);\r\n }}\r\n >\r\n Click here\r\n {' '}\r\n to update your saved payment method now (this transaction will be cancelled).\r\n

    \r\n
    \r\n )}\r\n\r\n
    \r\n {\r\n switch (paymentStep) {\r\n case PaymentStep.UpdatePaymentInfo:\r\n changePaymentInfo();\r\n break;\r\n case PaymentStep.Verify:\r\n makePayment();\r\n break;\r\n case PaymentStep.OneTimePayment:\r\n makeOneTimePayment();\r\n break;\r\n }\r\n }}\r\n >\r\n Agree & Confirm\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nexport const MakeAPayment = {\r\n path: Path.MakeAPayment,\r\n element: ,\r\n};\r\n","import { useContext, useEffect, useState } from 'react';\r\nimport { useNavigate } from 'react-router-dom-v5-compat';\r\nimport { getMessageFromError } from '@app/Common';\r\nimport { ToastContext, usePersistentFormReducer } from '@app/Hooks';\r\nimport { useCreateOrGetQuotes } from '@app/Hooks/CreateOrGetQuotes';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { yearBuiltAndRoofAgeValidation, yearBuiltValidation } from '@app/SinglePageApplication/Validation';\r\nimport { Rules, Value } from '@swyfft/webkit';\r\n\r\ntype FormType = {\r\n addressKey: Value;\r\n livingSpace: Value;\r\n roofAge: Value;\r\n yearBuilt: Value;\r\n singleFamilyResidence: Value;\r\n};\r\n\r\nexport function useMissingPropertyData() {\r\n const navigate = useNavigate(),\r\n application = useContext(StateContext),\r\n missingPropertyData = application.state.missingPropertyData,\r\n toast = useContext(ToastContext),\r\n { createOrGetQuotes } = useCreateOrGetQuotes(),\r\n [isLoading, setLoading] = useState(false);\r\n\r\n const reducer = usePersistentFormReducer('missing-property-data', {\r\n addressKey: new Value('address key', ''),\r\n livingSpace: new Value(\r\n 'living space',\r\n '',\r\n missingPropertyData?.livingSpace ? [Rules.required(), Rules.decimal(), Rules.range(500, 10000)] : undefined,\r\n ),\r\n roofAge: new Value(\r\n 'roof age',\r\n '',\r\n missingPropertyData?.roofAge ? [Rules.required(), Rules.decimal()] : undefined,\r\n ),\r\n yearBuilt: new Value(\r\n 'year built',\r\n '',\r\n missingPropertyData?.yearBuilt ? [Rules.required(), Rules.decimal()] : undefined,\r\n ),\r\n singleFamilyResidence: new Value(\r\n 'single family residence',\r\n false,\r\n missingPropertyData?.singleFamilyResidence ?\r\n [Rules.equals(true, 'Please confirm that this property is a single family residence.')]\r\n : undefined,\r\n ),\r\n });\r\n\r\n useEffect(() => {\r\n if (missingPropertyData?.yearBuilt) yearBuiltValidation(reducer.form.yearBuilt);\r\n if (missingPropertyData?.yearBuilt && missingPropertyData?.roofAge)\r\n yearBuiltAndRoofAgeValidation(reducer.form.yearBuilt, reducer.form.roofAge);\r\n }, []);\r\n\r\n return {\r\n navigate,\r\n reducer,\r\n missingPropertyData,\r\n submit,\r\n isLoading,\r\n };\r\n\r\n async function submit(e: React.FormEvent) {\r\n try {\r\n e.preventDefault();\r\n\r\n reducer.validate();\r\n if (!reducer.valid() || isLoading) return;\r\n\r\n setLoading(true);\r\n\r\n const missingPropertyData = application.state.missingPropertyData,\r\n newQuoteRequest = { ...application.state.quoteRequest };\r\n\r\n if (missingPropertyData?.livingSpace)\r\n newQuoteRequest.LivingSpace = parseInt(reducer.form.livingSpace.content);\r\n if (missingPropertyData?.roofAge) newQuoteRequest.RoofAge = parseInt(reducer.form.roofAge.content);\r\n if (missingPropertyData?.yearBuilt) newQuoteRequest.YearBuilt = parseInt(reducer.form.yearBuilt.content);\r\n if (missingPropertyData?.singleFamilyResidence)\r\n newQuoteRequest.NonSingleFamilyResidenceConfirmed = reducer.form.singleFamilyResidence.content;\r\n\r\n application.update(state => (state.quoteRequest = newQuoteRequest));\r\n await createOrGetQuotes(newQuoteRequest);\r\n } catch (e) {\r\n toast.error(await getMessageFromError(e));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { PrimaryRouteButton, SecondaryBackButton, StepButtons } from '@app/SinglePageApplication/Components/Buttons';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRow } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { Checkbox, Paragraph, Text } from '@swyfft/webkit';\r\nimport { Path } from '../';\r\nimport { useMissingPropertyData } from './hook';\r\n\r\nexport const MissingPropertyData = {\r\n path: Path.MissingPropertyData,\r\n element: () => ,\r\n shouldRevalidate: () => false,\r\n};\r\n\r\nexport const Component = () => {\r\n const {\r\n navigate,\r\n reducer,\r\n submit,\r\n missingPropertyData,\r\n isLoading\r\n } = useMissingPropertyData();\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n {missingPropertyData?.livingSpace && (\r\n reducer.set('livingSpace', value)}\r\n />\r\n )}\r\n\r\n {missingPropertyData?.roofAge && (\r\n {\r\n reducer.set('roofAge', value);\r\n if (missingPropertyData?.yearBuilt) reducer.validate('yearBuilt');\r\n }}\r\n />\r\n )}\r\n\r\n {missingPropertyData?.yearBuilt && (\r\n {\r\n reducer.set('yearBuilt', value);\r\n if (missingPropertyData?.roofAge) reducer.validate('roofAge');\r\n }}\r\n />\r\n )}\r\n \r\n\r\n {missingPropertyData?.singleFamilyResidence && (\r\n \r\n
    \r\n reducer.set('singleFamilyResidence', checked)}\r\n >\r\n Single Family Residence\r\n \r\n\r\n
    \r\n Swyfft only insures residential homes. Please confirm that this is a single family residence, permanently attached to a foundation.\r\n
    \r\n
    \r\n
    \r\n )}\r\n\r\n \r\n }\r\n negative={ navigate(-1)} />}\r\n />\r\n \r\n
    \r\n );\r\n};\r\n","import { fetchAndLog } from '@app/Api/Fetch';\r\nimport { IPhysicalAddress, IPropertyModel } from '@app/Models';\r\n\r\nexport type Coordinates = {\r\n lat: number;\r\n lng: number;\r\n};\r\n\r\nexport const setPropertyLocation = async (addressKey: string | undefined, latitude: number, longitude: number) => {\r\n await fetchAndLog('/api/propertyLocation', 'set property location', {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n AddressKey: addressKey,\r\n Latitude: latitude,\r\n Longitude: longitude,\r\n }),\r\n });\r\n};\r\n\r\nexport const getStateBoundary = async (stateCode: string): Promise => {\r\n const result = await fetchAndLog<{ X: number; Y: number }[][]>(\r\n `/api/property/state-boundary?stateCode=${stateCode}`,\r\n 'get state boundary',\r\n );\r\n return result.map(outer => outer.map(inner => ({ lat: inner.Y, lng: inner.X })));\r\n};\r\n","import { FormEvent, useContext, useEffect, useRef, useState } from 'react';\r\nimport { useNavigate, useParams } from 'react-router-dom-v5-compat';\r\nimport { getMessageFromError, truncate } from '@app/Common';\r\nimport { ToastContext, useAsyncEffect, useCreateOrGetQuotes, usePersistentFormReducer, useRedirect } from '@app/Hooks';\r\nimport { Address } from '@app/Models';\r\nimport { getAddressKey, parseAddress } from '@app/SinglePageApplication/Api/Property';\r\nimport { AppSettingsContext, StateContext } from '@app/SinglePageApplication/State/Context';\r\nimport { Rule, Rules, Value } from '@swyfft/webkit';\r\nimport { Path } from '../';\r\nimport { Coordinates, getStateBoundary, setPropertyLocation } from './api';\r\nimport { MapActions } from './map';\r\n\r\nexport type FormType = {\r\n lat: Value;\r\n lng: Value;\r\n addressKey: Value;\r\n};\r\n\r\nexport function usePreciseLocation() {\r\n const navigate = useNavigate(),\r\n appSettings = useContext(AppSettingsContext),\r\n application = useContext(StateContext),\r\n toast = useContext(ToastContext),\r\n params = useParams(),\r\n [boundaries, setBoundaries] = useState([]),\r\n [isSelected, setSelected] = useState(null),\r\n [isDisabled, setDisabled] = useState(true),\r\n [isLoading, setLoading] = useState(false),\r\n map = useRef(null),\r\n redirect = useRedirect(),\r\n { createOrGetQuotes } = useCreateOrGetQuotes();\r\n\r\n const formReducer = usePersistentFormReducer('precise-location', {\r\n lat: new Value('latitude', '', [Rules.required(), Rules.decimal()]),\r\n lng: new Value('longitude', '', [Rules.required(), Rules.decimal()]),\r\n addressKey: new Value('address key', ''),\r\n });\r\n\r\n const lat = formReducer.form.lat.content,\r\n lng = formReducer.form.lng.content;\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n setLoading(true);\r\n\r\n const { quoteRequest, createAddress } = application.state,\r\n { context, latitude, longitude } = createAddress;\r\n\r\n let address: Address | null;\r\n let addressKey: string;\r\n\r\n if (!params.address) throw new Error('Missing address.');\r\n\r\n if (application.state.address) {\r\n address = { ...application.state.address };\r\n } else {\r\n address = await parseAddress(params.address.replace(/-/g, ' '));\r\n }\r\n\r\n if (!address) throw new Error(`Unable to parse address: ${params.address}`);\r\n\r\n if (context === 'CreateAddress') {\r\n addressKey = quoteRequest.AddressKey || (await getAddressKey(Address.toString(address)));\r\n } else {\r\n addressKey =\r\n application.state.createAddress.addressKey || (await getAddressKey(Address.toString(address)));\r\n }\r\n\r\n formReducer.set('addressKey', addressKey);\r\n formReducer.setWithoutValidation('lat', latitude?.toString() || '');\r\n formReducer.setWithoutValidation('lng', longitude?.toString() || '');\r\n\r\n setBoundaries(await getStateBoundary(address.StateCode));\r\n } catch (e) {\r\n application.update(state => (state.error = e));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!lat || !lng || isNaN(parseFloat(lat)) || isNaN(parseFloat(lng))) return;\r\n\r\n setSelected({ lat: parseFloat(lat), lng: parseFloat(lng) });\r\n setTimeout(() => setDisabled(!formReducer.valid()));\r\n }, [lat, lng]);\r\n\r\n useAsyncEffect(async () => {\r\n if (!map.current) {\r\n return;\r\n }\r\n\r\n await map.current.initialized;\r\n\r\n const invalidArea = {\r\n id: 'invalid-area',\r\n validator: () =>\r\n map.current?.containsLocation({\r\n lat: parseFloat(formReducer.form.lat.content),\r\n lng: parseFloat(formReducer.form.lng.content),\r\n }),\r\n error: () => 'The selected point is outside the valid area.',\r\n } as Rule;\r\n\r\n formReducer.form.lat.addRule(invalidArea);\r\n formReducer.form.lng.addRule(invalidArea);\r\n }, [map.current]);\r\n\r\n return {\r\n formReducer,\r\n googleMapsApiKey: appSettings?.googleMapsApiKey,\r\n map,\r\n boundaries,\r\n navigate,\r\n submit,\r\n isSelected,\r\n isDisabled,\r\n isLoading,\r\n setSelectedLocation,\r\n };\r\n\r\n async function submit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n formReducer.validate();\r\n if (!formReducer.valid() || isLoading) return;\r\n\r\n try {\r\n setLoading(true);\r\n\r\n await setPropertyLocation(\r\n formReducer.form.addressKey.content,\r\n parseFloat(formReducer.form.lat.content),\r\n parseFloat(formReducer.form.lng.content),\r\n );\r\n\r\n if (application.state.createAddress.context === 'CreateAddress') {\r\n await createOrGetQuotes(application.state.quoteRequest);\r\n } else {\r\n application.update(state => (state.createAddress.success = true));\r\n redirect(Path.AddressManagement, { showSuccess: 'true' });\r\n }\r\n } catch (e) {\r\n toast.error(await getMessageFromError(e));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n function setSelectedLocation(location: Coordinates) {\r\n const decimalPlaces = 8;\r\n location.lat = truncate(location.lat, decimalPlaces);\r\n location.lng = truncate(location.lng, decimalPlaces);\r\n formReducer.set('lat', location.lat.toString());\r\n formReducer.set('lng', location.lng.toString());\r\n setDisabled(!formReducer.valid());\r\n setSelected(location);\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { ReducerType } from '@app/Hooks/FormReducer';\r\nimport { PrimaryRouteButton, SecondaryBackButton, StepButtons } from '@app/SinglePageApplication/Components/Buttons';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRow } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { Text } from '@swyfft/webkit';\r\nimport { Coordinates } from './api';\r\nimport { FormType, usePreciseLocation } from './hook';\r\nimport { Map } from './map';\r\nimport './style.scss';\r\n\r\nexport const PreciseLocation = {\r\n path: Path.PreciseLocation,\r\n element: ,\r\n shouldRevalidate: () => false,\r\n};\r\n\r\nexport const PreciseLocationNoQuote = {\r\n path: Path.PreciseLocationNoQuote,\r\n auth: AccessRole.Agent,\r\n element: ,\r\n};\r\n\r\nexport function PreciseLocationComponent() {\r\n const {\r\n formReducer,\r\n googleMapsApiKey,\r\n map,\r\n boundaries,\r\n navigate,\r\n submit,\r\n isSelected,\r\n isDisabled,\r\n isLoading,\r\n setSelectedLocation,\r\n } = usePreciseLocation();\r\n\r\n return (\r\n \r\n \r\n\r\n
    \r\n \r\n\r\n {googleMapsApiKey && (\r\n setSelectedLocation(location)}\r\n selected={isSelected}\r\n boundaries={boundaries}\r\n googleMapsApiKey={googleMapsApiKey}\r\n />\r\n )}\r\n\r\n \r\n }\r\n negative={ navigate(-1)} />}\r\n />\r\n \r\n
    \r\n );\r\n}\r\n\r\ntype FormProps = {\r\n reducer: ReducerType;\r\n};\r\n\r\nexport function Form({ reducer }: FormProps) {\r\n const { form, set } = reducer;\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n set('lat', text.trim())}\r\n />\r\n\r\n set('lng', text.trim())}\r\n />\r\n \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\r\nimport { Spinner } from '@app/Components/Spinner';\r\nimport { GoogleMap, Marker, Polygon, useJsApiLoader } from '@react-google-maps/api';\r\nimport { Coordinates } from './api';\r\n\r\n// The coordinates of a polygon that covers the whole Earth. The valid area for showing where the\r\n// user can select a coordinate is a hole cut into this polygon.\r\nconst overlayCoordinates = [\r\n { lat: 85, lng: 180 },\r\n { lat: 85, lng: 90 },\r\n { lat: 85, lng: 0 },\r\n { lat: 85, lng: -90 },\r\n { lat: 85, lng: -180 },\r\n { lat: 0, lng: -180 },\r\n { lat: -85, lng: -180 },\r\n { lat: -85, lng: -90 },\r\n { lat: -85, lng: 0 },\r\n { lat: -85, lng: 90 },\r\n { lat: -85, lng: 180 },\r\n { lat: 0, lng: 180 },\r\n { lat: 85, lng: 180 },\r\n].reverse();\r\n\r\nconst polygonOptions = {\r\n strokeColor: 'black',\r\n strokeOpacity: 0.5,\r\n strokeWeight: 1,\r\n fillColor: 'black',\r\n fillOpacity: 0.25,\r\n};\r\n\r\ntype Props = {\r\n selectLocation: (location: Coordinates) => void;\r\n selected: Coordinates | null;\r\n boundaries: Coordinates[][];\r\n googleMapsApiKey: string;\r\n};\r\n\r\nexport type MapActions = {\r\n initialized: Promise;\r\n containsLocation: (location: Coordinates) => boolean;\r\n};\r\n\r\nexport const Map = forwardRef(({ selectLocation, selected, boundaries, googleMapsApiKey }, ref) => {\r\n const initialCenter = React.useRef({ lat: 39.833333, lng: -98.583333 }), // Geographical center of the contiguous US.\r\n { isLoaded } = useJsApiLoader({ googleMapsApiKey, version: 'quarterly' }),\r\n [map, setMap] = useState(null),\r\n polygon = useRef(null);\r\n\r\n useImperativeHandle(ref, () => ({\r\n initialized: new Promise(resolve => {\r\n const interval = setInterval(() => {\r\n if (isLoaded && polygon) {\r\n clearInterval(interval);\r\n resolve();\r\n }\r\n }, 100);\r\n }),\r\n containsLocation,\r\n }));\r\n\r\n useEffect(() => {\r\n if (!map || !boundaries?.length) return;\r\n\r\n const bounds = new google.maps.LatLngBounds();\r\n boundaries.forEach(outer => {\r\n outer.forEach(coordinate => bounds.extend(coordinate));\r\n });\r\n map.fitBounds(bounds, 25);\r\n }, [boundaries, map]);\r\n\r\n return isLoaded ?\r\n setMap(m)}\r\n onClick={onSelect}\r\n >\r\n {selected && }\r\n\r\n (polygon.current = p)}\r\n />\r\n \r\n :
    \r\n \r\n
    ;\r\n\r\n function onSelect(e: google.maps.MapMouseEvent) {\r\n if (!e.latLng) return;\r\n\r\n selectLocation({ lat: e.latLng.lat(), lng: e.latLng.lng() });\r\n }\r\n\r\n function containsLocation(location: Coordinates): boolean {\r\n // The polygon used to determine if a location is within the valid area is greyed out area. If it's not in that\r\n // polygon (which spans the entire world except for the area we want to allow), then it's not a valid location.\r\n return (polygon.current && !google.maps.geometry.poly.containsLocation(location, polygon.current)) || false;\r\n }\r\n});\r\n","import { useContext, useMemo } from 'react';\r\nimport { isAtLeastAgent, isLimitedAgentUser } from '@app/Common';\r\nimport { useBindQuoteRedirect } from '@app/SinglePageApplication/Hooks/BindQuoteRedirect';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { BindButtonProps } from './models';\r\n\r\n/** Logic for the quote list tile bind button. */\r\nexport function useBindButton(props: BindButtonProps) {\r\n const { quoteId } = props,\r\n application = useContext(StateContext),\r\n disabled = useMemo(isDisabled, []),\r\n { bindQuoteRedirect } = useBindQuoteRedirect();\r\n\r\n return {\r\n onClick,\r\n disabled,\r\n submit,\r\n };\r\n\r\n function onClick() {\r\n application.update(state => (state.quoteId = quoteId));\r\n }\r\n\r\n function isDisabled() {\r\n return !isAtLeastAgent() || isLimitedAgentUser();\r\n }\r\n\r\n function submit(e: React.FormEvent) {\r\n e.preventDefault();\r\n\r\n try {\r\n bindQuoteRedirect(quoteId);\r\n } catch (e) {\r\n application.update(state => (state.error = e));\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Button } from '@swyfft/webkit';\r\nimport { useBindButton } from './hook';\r\nimport { BindButtonProps } from './models';\r\n\r\n/** Button that navigates to the bind page for a quote from the quote list tile component. */\r\nexport function BindButton(props: BindButtonProps) {\r\n const { quoteId } = props,\r\n { onClick, disabled, submit } = useBindButton(props);\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { clsx } from 'clsx';\r\nimport { iconPaths } from '@app/Constants';\r\nimport { Paragraph } from '@swyfft/webkit';\r\nimport { QuoteListCarrierLogoProps } from './models';\r\n\r\n/** The carrier logo (and any accompanying partner logos or additional text as needed) displayed on each quote list tile. */\r\nexport function CarrierLogoLockup(props: QuoteListCarrierLogoProps) {\r\n const { carrierCode } = props;\r\n\r\n return (\r\n
    \r\n {/* The classes on this div ensure the logo lockups are always center-aligned to each other even if they are slightly different sizes. */}\r\n
    \r\n {props.carrierCode.switch({\r\n onVave: VaveLloydsCoverholder,\r\n onNfip: Default,\r\n onBrit: LloydsPartner,\r\n onHiscox: LloydsPartner,\r\n onBenchmark: Default,\r\n onBenchmarkSpecialty: Default,\r\n onClearBlue: Default,\r\n onClearBlueSpecialty: Default,\r\n onDorchester: Default,\r\n onTopa: Default,\r\n })}\r\n
    \r\n
    \r\n );\r\n\r\n /** The default carrier logo path is stored in the CarrierCode set. */\r\n function Default() {\r\n const defaultStyle = 'max-h-11';\r\n return (\r\n 'max-h-7 sm:max-h-11',\r\n onTopa: () => 'max-h-9',\r\n onVave: () => defaultStyle,\r\n onBrit: () => defaultStyle,\r\n onHiscox: () => defaultStyle,\r\n onBenchmark: () => defaultStyle,\r\n onBenchmarkSpecialty: () => defaultStyle,\r\n onClearBlue: () => defaultStyle,\r\n onClearBlueSpecialty: () => defaultStyle,\r\n onDorchester: () => defaultStyle,\r\n }),\r\n )}\r\n src={props.carrierCode.logoPath}\r\n />\r\n );\r\n }\r\n\r\n /** Lloyd's and Vave want us to show a more specific logo because Lloyd's covers Vave policies. */\r\n function VaveLloydsCoverholder() {\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n\r\n
    \r\n Underwritten by certain underwriters at Lloyd's\r\n
    \r\n
    \r\n );\r\n }\r\n\r\n /** Lloyd's wants us to show their logo along with non-Vave partner carriers (i.e. Hiscox, Brit). */\r\n function LloydsPartner() {\r\n const defaultStyle = 'max-h-10';\r\n\r\n return (\r\n
    \r\n `${defaultStyle} -mt-1`,\r\n onBrit: () => 'max-h-8 mt-[6px]',\r\n onBenchmark: () => defaultStyle,\r\n onBenchmarkSpecialty: () => defaultStyle,\r\n onClearBlue: () => defaultStyle,\r\n onClearBlueSpecialty: () => defaultStyle,\r\n onDorchester: () => defaultStyle,\r\n onTopa: () => defaultStyle,\r\n onVave: () => defaultStyle,\r\n onNfip: () => defaultStyle,\r\n })}\r\n src={props.carrierCode.logoPath}\r\n />\r\n \r\n
    \r\n );\r\n }\r\n}\r\n","import { useMemo } from 'react';\r\nimport { formatCurrencyUS } from '@app/Common';\r\nimport { getComparisonQuoteElementsByElementName } from '@app/Common/ComparisonQuoteHelpers';\r\nimport { CoveragePreviewProps } from './models';\r\n\r\n/** Logic for retrieving quote elements to display the coverage preview information with. */\r\nexport function useCoveragePreview(props: CoveragePreviewProps) {\r\n const { comparisonModel, quoteId, elementNames } = props,\r\n elements = useMemo(getElements, [comparisonModel, quoteId, elementNames]);\r\n\r\n return {\r\n elements,\r\n };\r\n\r\n function getElements() {\r\n return elementNames.map(elementName => {\r\n const matchingComparisonElements = getComparisonQuoteElementsByElementName(comparisonModel, elementName),\r\n displayName = matchingComparisonElements?.ElementDisplay,\r\n value = matchingComparisonElements?.Elements.find(element => element.QuoteId === quoteId)?.Value,\r\n displayValue = value ? formatCurrencyUS(value) : 'Unavailable';\r\n\r\n return {\r\n displayName,\r\n displayValue,\r\n };\r\n });\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { clsx } from 'clsx';\r\nimport { CarrierCode } from '@app/Business/CommonSets';\r\nimport { Paragraph } from '@swyfft/webkit';\r\nimport { useCoveragePreview } from './hook';\r\nimport { CoveragePreviewProps } from './models';\r\n\r\n/** A preview of coverage quote elements and values that is only displayed if a list of element names is provided. Displays each element display name and formatted value. */\r\nexport function CoveragePreview(props: CoveragePreviewProps) {\r\n const { elementNames, carrierCode } = props,\r\n { elements } = useCoveragePreview(props);\r\n\r\n // If there are no elements to display, return an empty fragment.\r\n if (elementNames.length === 0) return <>;\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n {elements.map(element => (\r\n
    \r\n
    \r\n {element.displayName}\r\n
    \r\n \r\n {element.displayValue}\r\n \r\n
    \r\n ))}\r\n
    \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { ErrorIcon, Paragraph } from '@swyfft/webkit';\r\n\r\n/** Static component that displays a message for when there are premium errors. */\r\nexport function PremiumErrorInfo() {\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Premium Unavailable\r\n \r\n
    \r\n Click review or select to compare for details.\r\n
    \r\n \r\n );\r\n}\r\n","import { useEffect, useMemo, useRef } from 'react';\r\nimport { useCountUp } from 'react-countup';\r\nimport * as dayjs from 'dayjs';\r\nimport { simpleDateFormat } from '@app/Constants';\r\nimport { QuoteListTilePremiumInfoProps } from './models';\r\n\r\n/** Logic for formatting and displaying the premium and related information. */\r\nexport function usePremiumInfo(props: QuoteListTilePremiumInfoProps) {\r\n const { grossAnnualPayment, expiresOn } = props,\r\n premiumRef = useRef(null),\r\n { update } = useCountUp({\r\n ref: premiumRef,\r\n start: 0,\r\n end: grossAnnualPayment,\r\n duration: 1,\r\n prefix: '$',\r\n separator: ',',\r\n useEasing: true,\r\n easingFn: easeCountup,\r\n }),\r\n guaranteedUntilDate = useMemo(getQuoteGuaranteedUntilDate, [expiresOn]);\r\n\r\n useEffect(() => update(grossAnnualPayment), [grossAnnualPayment]);\r\n\r\n return {\r\n guaranteedUntilDate,\r\n premiumRef,\r\n };\r\n\r\n /** Business wants the guaranteed until date to be one day before the expiration date. */\r\n function getQuoteGuaranteedUntilDate() {\r\n return dayjs(expiresOn).subtract(1, 'day').format(simpleDateFormat);\r\n }\r\n\r\n function easeCountup(t: number, b: number, c: number, d: number) {\r\n return c * ((t = t / d - 1) * t * t + 1) + b;\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Paragraph, Title } from '@swyfft/webkit';\r\nimport { usePremiumInfo } from './hook';\r\nimport { QuoteListTilePremiumInfoProps } from './models';\r\n\r\n/** The premium and related info about purchasing a quote. */\r\nexport function PremiumInfo(props: QuoteListTilePremiumInfoProps) {\r\n const { premiumRef, guaranteedUntilDate } = usePremiumInfo(props);\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n \r\n {/* Premium is wrapped in a \"count-up\" animation which assigns the value via the element ref. */}\r\n <span ref={premiumRef} />\r\n <span className='text-sm'>/yr</span>\r\n \r\n
    \r\n Includes Taxes & Fees\r\n \r\n Guaranteed until {guaranteedUntilDate}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { EmailButton } from '@app/SinglePageApplication/Components/TileHeader/EmailButton';\r\nimport { PrintButton } from '@app/SinglePageApplication/Components/TileHeader/PrintButton';\r\nimport { ViewButton } from '@app/SinglePageApplication/Components/TileHeader/ViewButton';\r\nimport { QuoteActionLinksProps } from './models';\r\n\r\n/** Secondary actions for quotes, such as printing and emailing, displayed on the quote list tile. */\r\nexport function QuoteActionLinks(props: QuoteActionLinksProps) {\r\n const { quote, productLine, hasPremiumErrors } = props;\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import { useNavigateWithParams } from '@app/Hooks';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { ReviewButtonProps } from './models';\r\n\r\n/** Logic for using the review button to navigate to a single quote view. */\r\nexport function useReviewButton(props: ReviewButtonProps) {\r\n const { quoteId, productLine } = props,\r\n navigate = useNavigateWithParams();\r\n\r\n return {\r\n onClick,\r\n };\r\n\r\n function onClick() {\r\n navigate(Path.Customize, { quoteId: quoteId, product: productLine.lowercaseName });\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Button } from '@swyfft/webkit';\r\nimport { useReviewButton } from './hook';\r\nimport { ReviewButtonProps } from './models';\r\n\r\n/** Button that links to view the quote separately. Intended for when there are premium errors preventing bind. */\r\nexport function ReviewButton(props: ReviewButtonProps) {\r\n const { quoteId } = props,\r\n { onClick } = useReviewButton(props);\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { getRatingTypeColor } from '@app/ProductComparison/ColorScheme';\r\nimport { QuoteListTileWrapperProps } from './models';\r\n\r\n/** The quote information container with a top border color-coded to the rating type. */\r\nexport function TileWrapper(props: QuoteListTileWrapperProps) {\r\n const { id, ratingType } = props;\r\n\r\n return (\r\n
    \r\n \r\n \r\n {ratingType.displayValue}\r\n \r\n
    \r\n\r\n {props.children}\r\n \r\n );\r\n}\r\n","import { useMemo } from 'react';\r\nimport { CarrierCode, ProductLine, RatingType } from '@app/Business/CommonSets';\r\nimport { ElementNames } from '@app/Constants';\r\nimport { QuoteListTileProps } from './models';\r\n\r\n/** Logic and parameters used for the quote list tile component. */\r\nexport function useQuoteListTile(props: QuoteListTileProps) {\r\n const { quote } = props,\r\n ratingType = RatingType.parse(quote.RatingType),\r\n carrierCode = CarrierCode.parse(quote.CarrierCode),\r\n productLine = ProductLine.parse(quote.ProductLineId),\r\n hasPremiumErrors = quote.QuotePremiumErrors.length > 0,\r\n coveragePreviewElementNames = useMemo(getCoveragePreviewElementNames, []);\r\n\r\n return {\r\n ratingType,\r\n carrierCode,\r\n productLine,\r\n hasPremiumErrors,\r\n coveragePreviewElementNames,\r\n };\r\n\r\n /** Returns a list of quote element names to use for the coverage preview by product. */\r\n function getCoveragePreviewElementNames() {\r\n return productLine.switch({\r\n onHomeowner: () => [],\r\n onCommercial: () => [],\r\n // Business wants to display a preview of building property and personal property limits only for Flood\r\n onFlood: () => [ElementNames.BuildingPropertyLimit, ElementNames.coverageCLimit],\r\n });\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Checkbox } from '@swyfft/webkit';\r\nimport { BindButton } from './BindButton';\r\nimport { CarrierLogoLockup } from './CarrierLogo';\r\nimport { CoveragePreview } from './CoveragePreview';\r\nimport { useQuoteListTile } from './hook';\r\nimport { QuoteListTileProps } from './models';\r\nimport { PremiumErrorInfo } from './PremiumErrorInfo';\r\nimport { PremiumInfo } from './PremiumInfo';\r\nimport { QuoteActionLinks } from './QuoteActionLinks';\r\nimport { ReviewButton } from './ReviewButton';\r\nimport { TileWrapper } from './TileWrapper';\r\n\r\n/** The tile that displays quote information and actions, including selecting a quote to compare, for the quote list view shown when there are more than two quotes available. */\r\nexport function QuoteListTile(props: QuoteListTileProps) {\r\n const { comparisonModel, quote, isToggled, onQuoteToggle } = props,\r\n { ratingType, carrierCode, productLine, hasPremiumErrors, coveragePreviewElementNames } =\r\n useQuoteListTile(props);\r\n\r\n return (\r\n \r\n
    \r\n onQuoteToggle(quote.QuoteId, checked)}\r\n >\r\n Compare Quote\r\n \r\n
    \r\n\r\n \r\n\r\n \r\n\r\n {hasPremiumErrors ?\r\n <>\r\n \r\n \r\n \r\n : <>\r\n \r\n \r\n \r\n }\r\n\r\n \r\n
    \r\n );\r\n}\r\n","import { useContext, useEffect, useMemo, useState } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { CarrierCode, ProductLine } from '@app/Business/CommonSets';\r\nimport { useAsyncEffect, useNavigateWithParams } from '@app/Hooks';\r\nimport { loadComparisonQuotes } from '@app/SinglePageApplication/Api/ComparisonQuotes';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { Value } from '@swyfft/webkit';\r\nimport { Path, UrlParams } from '../';\r\n\r\nexport function useQuoteList() {\r\n const application = useContext(StateContext),\r\n [isLoading, setLoading] = useState(false),\r\n params = useParams(),\r\n { product, quoteId } = params,\r\n [quoteValues, setQuoteValues] = useState<{ [key: string]: Value }>({}),\r\n [error, setError] = useState(null),\r\n selectedQuotes = useMemo(() => Object.keys(quoteValues).filter(key => quoteValues[key].content), [quoteValues]),\r\n navigate = useNavigateWithParams();\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n setLoading(true);\r\n await loadComparisonQuotes(application, params as UrlParams);\r\n } catch (error) {\r\n application.update(state => (state.error = error));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n const productLine = ProductLine.parseOrDefault(product);\r\n\r\n if (productLine && quoteId && application.state.comparisonModel) {\r\n setQuoteValues(\r\n application.state.comparisonModel.Quotes.reduce(\r\n (acc, quote) => {\r\n acc[quote.QuoteId] = new Value(quote.QuoteId, false);\r\n return acc;\r\n },\r\n {} as { [key: string]: Value },\r\n ),\r\n );\r\n }\r\n }, [product, quoteId, application.state.comparisonModel]);\r\n\r\n return {\r\n model: application.state.comparisonModel,\r\n quoteValues,\r\n toggleQuote,\r\n selectedQuotes,\r\n error,\r\n isLoading,\r\n onCompareQuotes,\r\n };\r\n\r\n function onCompareQuotes() {\r\n if (!product || !quoteId) {\r\n throw new Error('Product and quote ID are required to compare quotes.');\r\n }\r\n\r\n if (selectedQuotes.length !== 2) {\r\n setError('Please select two quotes to compare.');\r\n return;\r\n }\r\n\r\n const carriers = selectedQuotes.map(quoteId => {\r\n const carrierCode = application.state.comparisonModel?.Quotes.find(q => q.QuoteId === quoteId)?.CarrierCode;\r\n return CarrierCode.parse(carrierCode).abbreviation;\r\n });\r\n\r\n navigate(Path.CompareCustomize, { product, quoteId, carriers: carriers.join(',') });\r\n }\r\n\r\n function toggleQuote(quoteId: string, checked: boolean) {\r\n const qv = { ...quoteValues };\r\n qv[quoteId].set(checked);\r\n setQuoteValues({ ...qv });\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { clsx } from 'clsx';\r\nimport { SidebarHeader } from '@app/ProductComparison/SidebarHeader';\r\nimport { LayoutWrapper } from '@app/SinglePageApplication/Components/LayoutWrapper';\r\nimport { RouteLoadingSpinner } from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { ViewWrapper } from '@app/SinglePageApplication/Components/ViewWrapper';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { Button, Paragraph } from '@swyfft/webkit';\r\nimport { useQuoteList } from './hook';\r\nimport { QuoteListTile } from './Tile';\r\nimport './style.scss';\r\n\r\nexport const QuoteList = {\r\n path: Path.QuoteList,\r\n element: ,\r\n shouldRevalidate: () => false,\r\n};\r\n\r\nexport function Component() {\r\n const {\r\n model,\r\n quoteValues,\r\n toggleQuote,\r\n error,\r\n isLoading,\r\n onCompareQuotes,\r\n } = useQuoteList();\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {isLoading ?\r\n \r\n : \r\n
    \r\n \r\n\r\n {model && (\r\n
    \r\n \r\n\r\n \r\n \r\n {error}\r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n\r\n {Object.keys(quoteValues).length > 0 && (\r\n
    \r\n {model?.Quotes.map(quote => (\r\n \r\n ))}\r\n
    \r\n )}\r\n \r\n }\r\n \r\n
    \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { navigate } from '@app/Common';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { RouteLoadingSpinner } from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { ViewWrapper } from '@app/SinglePageApplication/Components/ViewWrapper';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { SwyfftRouteObject } from '@app/SinglePageApplication/Views/routes';\r\n\r\nexport const Redirect = (from: Path, to: string, accessRole?: AccessRole) =>\r\n ({\r\n path: from,\r\n shouldRevalidate: () => false,\r\n auth: accessRole,\r\n element: ,\r\n }) as SwyfftRouteObject;\r\n\r\nexport function RedirectComponent({ to }: { to: string }) {\r\n useEffect(() => {\r\n navigate(to);\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import { useParams } from 'react-router-dom-v5-compat';\r\nimport { getEAndSFromAdmittedNonRenewal } from '@app/Api/HOApi';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport { useAsyncEffect, useRedirect } from '@app/Hooks';\r\nimport { getQuotePath } from '../';\r\n\r\nexport function useRenewalEAndSOffer() {\r\n const params = useParams(),\r\n redirect = useRedirect();\r\n\r\n useAsyncEffect(async () => {\r\n const comparisonModel = await getEAndSFromAdmittedNonRenewal(params.quoteId || ''),\r\n offerQuoteId = comparisonModel.Quotes[0].QuoteId,\r\n path = getQuotePath(comparisonModel.Quotes.length);\r\n\r\n redirect(path, { product: ProductLine.parse(params.product).lowercaseName, quoteId: offerQuoteId });\r\n }, []);\r\n}\r\n","import * as React from 'react';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { RouteLoadingSpinner } from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { ViewWrapper } from '@app/SinglePageApplication/Components/ViewWrapper';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { SwyfftRouteObject } from '@app/SinglePageApplication/Views/routes';\r\nimport { useRenewalEAndSOffer } from './hook';\r\n\r\nexport const RenewalEAndSOffer = {\r\n path: Path.RenewalEAndSOffer,\r\n shouldRevalidate: () => false,\r\n auth: AccessRole.Agent,\r\n element: ,\r\n} as SwyfftRouteObject;\r\n\r\nexport function Component() {\r\n useRenewalEAndSOffer();\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import { useContext } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { createEAndSFromAdmittedAgentRequest } from '@app/Api/HOApi';\r\nimport { useAsyncEffect, useRedirect } from '@app/Hooks';\r\nimport { Mutable } from '@app/Models';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { Severity } from '@app/SinglePageApplication/State/Models';\r\nimport { getQuotePath, UrlParams } from '@app/SinglePageApplication/Views';\r\nimport { ProductLine } from '@business/CommonSets';\r\n\r\nexport function useRequestEAndSQuote() {\r\n const params = useParams() as UrlParams,\r\n application = useContext(StateContext),\r\n redirect = useRedirect();\r\n\r\n useAsyncEffect(async () => {\r\n if (ProductLine.parse(params.product) !== ProductLine.Homeowner) {\r\n application.update(\r\n state =>\r\n (state.error = {\r\n exception: new Error('Product is not supported.') as Mutable,\r\n severity: Severity.error,\r\n }),\r\n );\r\n return;\r\n }\r\n\r\n const comparisonModel = await createEAndSFromAdmittedAgentRequest(params.quoteId),\r\n eAndSQuoteId = comparisonModel.Quotes[0].QuoteId,\r\n path = getQuotePath(comparisonModel.Quotes.length);\r\n\r\n application.update(state => (state.quoteId = eAndSQuoteId));\r\n\r\n redirect(path, { product: params.product, quoteId: eAndSQuoteId });\r\n }, []);\r\n}\r\n","import * as React from 'react';\r\nimport { isAtLeastAgent } from '@app/Common';\r\nimport { RouteLoadingSpinner } from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { ViewWrapper } from '@app/SinglePageApplication/Components/ViewWrapper';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { useRequestEAndSQuote } from './hook';\r\n\r\nexport const RequestEAndSQuote = {\r\n path: Path.RequestEAndSQuote,\r\n auth: () => isAtLeastAgent(),\r\n element: ,\r\n};\r\n\r\nfunction RequestEAndSQuoteComponent() {\r\n useRequestEAndSQuote();\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import { ShouldRevalidateFunction, ShouldRevalidateFunctionArgs } from 'react-router-dom-v5-compat';\r\nimport { UrlParams } from '..';\r\n\r\nexport const revalidateWhenQuoteIdChanges: ShouldRevalidateFunction = (args: ShouldRevalidateFunctionArgs) => {\r\n const currentParams = args.currentParams as UrlParams,\r\n nextParams = args.nextParams as UrlParams;\r\n return currentParams.quoteId !== nextParams.quoteId;\r\n};\r\n","import { FormEvent, useContext, useState } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport { useAsyncEffect, useFormReducer, useRedirect } from '@app/Hooks';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { Rules, Value } from '@swyfft/webkit';\r\nimport { Path } from '../../';\r\nimport { useOnboardingData } from '../hook';\r\nimport { SignUpPaths } from '../models';\r\n\r\nexport function useAgencyInformation() {\r\n const [isInitializing, setInitializing] = useState(false),\r\n { update } = useContext(StateContext),\r\n { product } = useParams(),\r\n productLine = ProductLine.parse(product),\r\n redirect = useRedirect(),\r\n onboarding = useOnboardingData();\r\n\r\n const formReducer = useFormReducer({\r\n legalName: new Value('agency legal name', '', [Rules.required()]),\r\n npn: new Value('agency NPN', '', [\r\n Rules.required(),\r\n Rules.integer(),\r\n Rules.minLength(4),\r\n Rules.maxLength(9),\r\n ]),\r\n email: new Value('agency email address', '', [Rules.required(), Rules.email()]),\r\n phone: new Value('agency phone number', '', [Rules.required(), Rules.phone()]),\r\n streetAddress: new Value('agency street address', '', [Rules.required()]),\r\n city: new Value('agency city', '', [Rules.required()]),\r\n stateCode: new Value('agency state', '', [Rules.required()]),\r\n zip: new Value('agency zip code', '', [Rules.required(), Rules.zip()]),\r\n });\r\n\r\n const { form, set, valid, validate } = formReducer;\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n setInitializing(true);\r\n\r\n await onboarding.load();\r\n\r\n set('email', onboarding.data?.agencyEmail || '');\r\n set('phone', onboarding.data?.agencyPhone || '');\r\n set('streetAddress', onboarding.data?.agencyAddress || '');\r\n set('city', onboarding.data?.agencyCity || '');\r\n set('stateCode', onboarding.data?.agencyState || '');\r\n set('zip', onboarding.data?.agencyZip || '');\r\n } catch (error) {\r\n update(state => (state.error = error));\r\n } finally {\r\n setInitializing(false);\r\n }\r\n }, []);\r\n\r\n return {\r\n isInitializing,\r\n formReducer,\r\n submit,\r\n cancel,\r\n };\r\n\r\n async function submit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n validate();\r\n if (!valid()) return;\r\n\r\n onboarding.set({\r\n agencyName: form.legalName.content,\r\n agencyNpn: form.npn.content,\r\n agencyEmail: form.email.content,\r\n agencyPhone: form.phone.content,\r\n agencyAddress: form.streetAddress.content,\r\n agencyCity: form.city.content,\r\n agencyState: form.stateCode.content,\r\n agencyZip: form.zip.content,\r\n });\r\n\r\n redirect(SignUpPaths.AgentInformation, { product: product as string });\r\n }\r\n\r\n function cancel() {\r\n redirect(Path.ProductLanding, { product: product || 'homeowner' });\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { StateCode } from '@app/Business/CommonSets';\r\nimport {\r\n RouteLoadingSpinner,\r\n} from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTile } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { Button, Select, SelectItem, Text } from '@swyfft/webkit';\r\nimport { useAgencyInformation } from './hook';\r\n\r\nexport function AgencyInformation() {\r\n const {\r\n isInitializing,\r\n formReducer,\r\n submit,\r\n cancel,\r\n } = useAgencyInformation();\r\n\r\n const { form, set } = formReducer;\r\n\r\n return isInitializing ? : \r\n \r\n\r\n
    \r\n
    \r\n\r\n Contact Information\r\n\r\n
    \r\n
    \r\n set('legalName', text)}\r\n />\r\n
    \r\n\r\n set('npn', text)}\r\n />\r\n
    \r\n\r\n
    \r\n set('email', text)}\r\n />\r\n\r\n set('phone', text)}\r\n />\r\n
    \r\n\r\n
    \r\n\r\n Location\r\n\r\n
    \r\n set('streetAddress', text)}\r\n />\r\n
    \r\n\r\n
    \r\n
    \r\n set('city', text)}\r\n />\r\n
    \r\n\r\n set('stateCode', state)}\r\n >\r\n {StateCode.all().map(state => {state.name})}\r\n \r\n\r\n set('zip', text)}\r\n />\r\n
    \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    ;\r\n}","import { FormEvent } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { useFormReducer, useRedirect } from '@app/Hooks';\r\nimport { Rules, Value } from '@swyfft/webkit';\r\nimport { Path } from '../../';\r\nimport { useOnboardingData } from '../hook';\r\n\r\nexport function useAgentInformation() {\r\n const redirect = useRedirect(),\r\n params = useParams(),\r\n product = params.product,\r\n onboarding = useOnboardingData();\r\n\r\n const formReducer = useFormReducer({\r\n firstName: new Value('first name', onboarding.data?.agentFirstName || '', [Rules.required()]),\r\n lastName: new Value('last name', onboarding.data?.agentLastName || '', [Rules.required()]),\r\n email: new Value('email', onboarding.data?.agentEmail || '', [Rules.required(), Rules.email()]),\r\n phone: new Value('phone', onboarding.data?.agentPhone || '', [Rules.required(), Rules.phone()]),\r\n npn: new Value('npn', onboarding.data?.agentNpn || '', [\r\n Rules.required(),\r\n Rules.minLength(4),\r\n Rules.maxLength(9),\r\n ]),\r\n title: new Value('title', onboarding.data?.agentTitle || '', [Rules.required()]),\r\n role: new Value('role', onboarding.data?.agentRole || 'Principal', [Rules.required()]),\r\n isClusterAgency: new Value(\r\n 'cluster agency',\r\n onboarding.data?.isClusterAgency?.toString() || '',\r\n [Rules.required()]\r\n ),\r\n });\r\n\r\n return {\r\n formReducer,\r\n submit,\r\n cancel,\r\n };\r\n\r\n async function submit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n formReducer.validate();\r\n if (!formReducer.valid()) return;\r\n\r\n onboarding.set({\r\n agentFirstName: formReducer.form.firstName.content,\r\n agentLastName: formReducer.form.lastName.content,\r\n agentEmail: formReducer.form.email.content,\r\n agentPhone: formReducer.form.phone.content,\r\n agentNpn: formReducer.form.npn.content,\r\n agentTitle: formReducer.form.title.content,\r\n agentRole: formReducer.form.role.content,\r\n isClusterAgency: formReducer.form.isClusterAgency.content === 'true',\r\n });\r\n\r\n // TODO: Redirect to either the taxes and accounting page or the unable to sign up page.\r\n }\r\n\r\n function cancel() {\r\n redirect(Path.ProductLanding, { product: product || 'homeowner' });\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTile } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { Button, RadioGroup, Select, SelectItem, Text } from '@swyfft/webkit';\r\nimport { useAgentInformation } from './hook';\r\n\r\nexport function AgentInformation() {\r\n const {\r\n formReducer,\r\n submit,\r\n cancel,\r\n } = useAgentInformation();\r\n\r\n const { form, set } = formReducer;\r\n\r\n return \r\n \r\n\r\n
    \r\n
    \r\n set('firstName', text)}\r\n />\r\n\r\n set('lastName', text)}\r\n />\r\n
    \r\n\r\n
    \r\n
    \r\n set('email', text)}\r\n />\r\n
    \r\n\r\n set('phone', text)}\r\n />\r\n\r\n set('npn', text)}\r\n />\r\n
    \r\n\r\n
    \r\n set('title', text)}\r\n />\r\n\r\n set('role', item)}\r\n >\r\n {[\r\n 'Account Manager',\r\n 'Accounting',\r\n 'Broker',\r\n 'Claims',\r\n 'CSR',\r\n 'IT',\r\n 'Management',\r\n 'Marketing',\r\n 'Policy Issuance',\r\n 'President',\r\n 'Principal',\r\n 'Producer',\r\n ].map(role => {role})}\r\n \r\n
    \r\n\r\n
    \r\n Are you part of a cluster, aggregate or agency network?}\r\n orientation='horizontal'\r\n onChange={(value: string | null) => set('isClusterAgency', value)}\r\n options={[\r\n { label: 'Yes', value: 'true' },\r\n { label: 'No', value: 'false' },\r\n ]}\r\n />\r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    ;\r\n}","import * as React from 'react';\r\nimport { Outlet, useParams } from 'react-router-dom-v5-compat';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport {\r\n LayoutWrapper,\r\n} from '@app/SinglePageApplication/Components/LayoutWrapper';\r\nimport {\r\n ProductHeader,\r\n} from '@app/SinglePageApplication/Components/ProductHeader';\r\nimport { ViewWrapper } from '@app/SinglePageApplication/Components/ViewWrapper';\r\nimport { Path } from '../../';\r\nimport { AgencyInformation } from '../AgencyInformation';\r\nimport { AgentInformation } from '../AgentInformation';\r\nimport { SignUpPaths } from '../models';\r\nimport { OnboardingViewProgressTracker } from '../Tracker';\r\n\r\nexport const SignUp = {\r\n path: Path.SignUp,\r\n shouldRevalidate: () => false,\r\n element: ,\r\n noTransition: true,\r\n children: [\r\n {\r\n path: SignUpPaths.AgencyInformation,\r\n element: ,\r\n },\r\n {\r\n path: SignUpPaths.AgentInformation,\r\n element: \r\n }\r\n ].map(r => ({\r\n ...r,\r\n hideNavbar: true,\r\n hideFooter: true,\r\n }))\r\n};\r\n\r\nexport function SignUpComponent() {\r\n const params = useParams(),\r\n product = ProductLine.parse(params.product);\r\n\r\n return
    \r\n \r\n \r\n
    \r\n
    Agency Registrations
    \r\n\r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n\r\n \r\n
    \r\n
    \r\n
    \r\n
    ;\r\n}","import { FormEvent, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport { useFormReducer, useRedirect } from '@app/Hooks';\r\nimport { Rules, Value } from '@swyfft/webkit';\r\nimport { useOnboardingData } from '../hook';\r\nimport { SignUpPaths } from '../models';\r\n\r\nexport type AgencyType = 'individual' | 'group';\r\n\r\nexport function useSignUp() {\r\n const params = useParams(),\r\n productLine = ProductLine.parse(params.product),\r\n redirect = useRedirect(),\r\n onboarding = useOnboardingData();\r\n\r\n const formReducer = useFormReducer({\r\n firstName: new Value('first name', '', [Rules.required()]),\r\n lastName: new Value('last name', '', [Rules.required()]),\r\n agentNpn: new Value('agent NPN', '', [\r\n Rules.required(),\r\n Rules.integer(),\r\n Rules.minLength(4),\r\n Rules.maxLength(9),\r\n ]),\r\n agencyType: new Value('agency type', null, [Rules.required()]),\r\n agencyName: new Value('agency name', ''),\r\n agencyNpn: new Value('agency NPN', '', []),\r\n terms: new Value('terms and conditions', false, [\r\n Rules.equals(true, 'Please accept the terms and conditions.'),\r\n ]),\r\n });\r\n\r\n useEffect(() => {\r\n if (formReducer.form.agencyType.content === 'group') {\r\n formReducer.form.agencyName.setRules([Rules.required()]);\r\n formReducer.form.agencyNpn.setRules([\r\n Rules.required(),\r\n Rules.integer(),\r\n Rules.minLength(4),\r\n Rules.maxLength(9),\r\n ]);\r\n } else {\r\n formReducer.form.agencyName.setRules([]);\r\n formReducer.form.agencyNpn.setRules([]);\r\n }\r\n }, [formReducer.form.agencyType.content]);\r\n\r\n return {\r\n productLine,\r\n formReducer,\r\n submit,\r\n };\r\n\r\n async function submit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n formReducer.validate();\r\n if (!formReducer.valid()) return;\r\n\r\n onboarding.set({\r\n agentFirstName: formReducer.form.firstName.content,\r\n agentLastName: formReducer.form.lastName.content,\r\n agentNpn: formReducer.form.agentNpn.content,\r\n agencyName: formReducer.form.agencyName.content,\r\n agencyNpn: formReducer.form.agencyNpn.content,\r\n isAgencyNpnRequired: formReducer.form.agencyType.content === 'group',\r\n });\r\n\r\n redirect(SignUpPaths.AgencyInformation, { product: productLine.lowercaseName });\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { tv } from 'tailwind-variants';\r\nimport {\r\n HeroText,\r\n} from '@app/SinglePageApplication/Components/Landing/HeroText';\r\nimport {\r\n LandingContent,\r\n} from '@app/SinglePageApplication/Components/Landing/LandingContent';\r\nimport {\r\n LandingViewWrapper,\r\n} from '@app/SinglePageApplication/Components/Landing/LandingViewWrapper';\r\nimport { Logo } from '@app/SinglePageApplication/Components/Landing/Logo';\r\nimport {\r\n LayoutWrapper,\r\n} from '@app/SinglePageApplication/Components/LayoutWrapper';\r\nimport {\r\n ProductHeader,\r\n} from '@app/SinglePageApplication/Components/ProductHeader';\r\nimport {\r\n Button,\r\n Checkbox,\r\n DesignContext,\r\n RadioGroup,\r\n Text,\r\n} from '@swyfft/webkit';\r\nimport { Path } from '../../';\r\nimport { AgencyType, useSignUp } from './hook';\r\n\r\nconst styles = {\r\n agencyInformation: tv({\r\n base: 'agency-information transition-[height,opacity] duration-500 ease-in-out overflow-hidden',\r\n variants: {\r\n isOpen: {\r\n true: 'h-auto opacity-100',\r\n false: 'h-0 opacity-0'\r\n }\r\n }\r\n })\r\n}\r\n\r\nexport const SignUpEntry = {\r\n path: Path.SignUpEntry,\r\n element: ,\r\n shouldRevalidate: () => false,\r\n};\r\n\r\nexport function SignUpComponent() {\r\n const {\r\n productLine,\r\n formReducer,\r\n submit,\r\n } = useSignUp();\r\n\r\n const {\r\n form,\r\n set,\r\n setWithoutValidation,\r\n } = formReducer;\r\n\r\n return \r\n \r\n \r\n
    \r\n \r\n\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n Become a Swyfft agent today.\r\n Offer {`${productLine.lowercaseName} insurance in seconds.`}\r\n \r\n
    \r\n\r\n
    \r\n
      \r\n
    • Available in all 50 states
    • \r\n
    • Multiple quotes in seconds
    • \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n set('firstName', value)}\r\n />\r\n\r\n set('lastName', value)}\r\n />\r\n\r\n set('agentNpn', value)}\r\n />\r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n set('agencyName', value)}\r\n />\r\n
    \r\n\r\n set('agencyNpn', value)}\r\n />\r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n I am only licensed under my individual name.}\r\n orientation='horizontal'\r\n onChange={(value: string | null) => set('agencyType', value as AgencyType)}\r\n options={[\r\n { label: 'Yes', value: 'individual' },\r\n { label: 'No', value: 'group' },\r\n ]}\r\n />\r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n setWithoutValidation('terms', value)}\r\n size='large'\r\n >\r\n By clicking the \"Sign Up\" button, you're agreeing to our\r\n {' '}terms\r\n {' '}and are authorizing Swyfft to retrieve all information available through NIPR.\r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n Here's what you'll need:\r\n \r\n\r\n \r\n {'Existing Swyfft Agent Login >'}\r\n \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n
      \r\n
    • Legal Agency Name and Contact Information
    • \r\n
    • Agent Profile Information
    • \r\n
    • Cluster and Network Affiliations
    • \r\n\r\n
    \r\n\r\n
      \r\n
    • IVANS Account Information
    • \r\n
    • Tax Information (FEIN), W9
    • \r\n
    • E&O Dec
    • \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n ;\r\n}","import { useLocation, useParams } from 'react-router-dom-v5-compat';\r\n\r\nexport function useOnboardingViewProgressTracker() {\r\n const { product } = useParams(),\r\n location = useLocation();\r\n\r\n return {\r\n product: product || '',\r\n location,\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { transitionDuration } from '@app/SinglePageApplication/Constants';\r\nimport {\r\n ClipboardIcon,\r\n EditIcon,\r\n FolderIcon,\r\n PersonIcon,\r\n StoreIcon,\r\n ViewProgressItem,\r\n ViewProgressTracker,\r\n} from '@swyfft/webkit';\r\nimport { getPath, Path } from '../../';\r\nimport { SignUpPaths } from '../models';\r\nimport { useOnboardingViewProgressTracker } from './hook';\r\n\r\nexport function OnboardingViewProgressTracker() {\r\n const { location, product } = useOnboardingViewProgressTracker();\r\n\r\n return
    \r\n \r\n }\r\n >\r\n Agency Information\r\n \r\n\r\n }\r\n >\r\n Agent Information\r\n \r\n\r\n }\r\n >\r\n Taxes & Accounting\r\n \r\n\r\n }\r\n >\r\n Documentation\r\n \r\n\r\n }\r\n >\r\n Agree & Sign\r\n \r\n \r\n
    \r\n}","import { fetchAndLog } from '@app/Api/Fetch';\r\nimport { AgencyOnboardingData, AgencyOnboardingSignUpRequest } from './models';\r\n\r\nexport async function getAgencyData(agencyData: AgencyOnboardingSignUpRequest): Promise {\r\n return await fetchAndLog('/api/agency-onboarding/verifynpn', 'verify-npn', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(agencyData),\r\n });\r\n}\r\n","import { useContext, useState } from 'react';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { getAgencyData } from './api';\r\nimport { AGENCY_DATA, AgencyOnboardingData, AgencyOnboardingSignUpRequest } from './models';\r\n\r\n/**\r\n * Manages underlying data for the agency onboarding process.\r\n */\r\nexport function useOnboardingData() {\r\n const { update } = useContext(StateContext),\r\n [data, setData] = useState(null);\r\n\r\n return { data, set, load };\r\n\r\n /**\r\n * Loads data from the initial onboarding API using either the provided request or the current stored data.\r\n */\r\n async function load(request?: AgencyOnboardingSignUpRequest): Promise {\r\n try {\r\n set(await getAgencyData(request || get()));\r\n } catch (e) {\r\n update(state => (state.error = e));\r\n }\r\n }\r\n\r\n /**\r\n * Updates the internal data object using the provided data. Any data that exists internally will be overwritten,\r\n * but any data that is not provided will be left as is.\r\n */\r\n function set(newData: AgencyOnboardingData) {\r\n setData({ ...data, ...newData });\r\n sessionStorage.setItem(AGENCY_DATA, JSON.stringify(newData));\r\n }\r\n\r\n /**\r\n * Returns the current onboarding data. If the data has not been loaded, it will be fetched from session storage.\r\n */\r\n function get(): AgencyOnboardingData {\r\n if (data) return data;\r\n\r\n const raw = sessionStorage.getItem(AGENCY_DATA);\r\n if (!raw) throw new Error('Onboarding data is missing.');\r\n\r\n const parsed = JSON.parse(raw) as AgencyOnboardingData;\r\n setData(parsed);\r\n return parsed;\r\n }\r\n}\r\n","export const AGENCY_DATA: string = 'onboarding-agency-data';\r\n\r\nexport enum SignUpPaths {\r\n AgencyInformation = 'agency-information',\r\n AgentInformation = 'agent-information',\r\n}\r\n\r\nexport type AgencyOnboardingSignUpRequest = {\r\n agentFirstName?: string;\r\n agentLastName?: string;\r\n agentNpn?: string;\r\n agencyName?: string;\r\n agencyNpn?: string;\r\n isAgencyNpnRequired?: boolean;\r\n};\r\n\r\nexport type AgencyOnboardingData = AgencyOnboardingSignUpRequest & {\r\n agencyEmail?: string;\r\n agencyPhone?: string;\r\n agencyAddress?: string;\r\n agencyCity?: string;\r\n agencyState?: string;\r\n agencyZip?: string;\r\n agencyFein?: string;\r\n isAgencyNetwork?: boolean;\r\n isClusterAgency?: boolean;\r\n\r\n agentEmail?: string;\r\n agentPhone?: string;\r\n agentTitle?: string;\r\n agentRole?: string;\r\n\r\n businessTypeId?: string;\r\n ivansUserId?: string;\r\n ivansAccountNumber?: string;\r\n};\r\n","import { FormEvent, useContext, useRef, useState } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { ProductLine, RatingType } from '@app/Business/CommonSets';\r\nimport * as Common from '@app/Common';\r\nimport { getMessageFromError } from '@app/Common';\r\nimport { pages } from '@app/Constants';\r\nimport { ToastContext, useAsyncEffect, useRedirect } from '@app/Hooks';\r\nimport { loadComparisonQuotes } from '@app/SinglePageApplication/Api/ComparisonQuotes';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { setQuoteId } from '@app/Storage';\r\nimport { TrackingEvent } from '@app/TrackingEvents';\r\nimport { getQuotePath, Path, UrlParams } from '../';\r\n\r\nexport function useUnderwritingGuidelines() {\r\n const application = useContext(StateContext),\r\n [isInitializing, setInitializing] = useState(true),\r\n toast = useContext(ToastContext),\r\n redirect = useRedirect(),\r\n params = useParams(),\r\n quoteId = params.quoteId as string,\r\n quote = application.state.comparisonModel?.Quotes.find(quote => quote.QuoteId === quoteId),\r\n ratingType = RatingType.parseOrDefault(quote?.RatingType),\r\n tileContainerRef = useRef(null);\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n setInitializing(true);\r\n await loadComparisonQuotes(application, params as UrlParams);\r\n } catch (error) {\r\n application.update(state => (state.error = error));\r\n } finally {\r\n setInitializing(false);\r\n }\r\n }, []);\r\n\r\n return {\r\n isInitializing,\r\n submit,\r\n tileContainerRef,\r\n quote,\r\n application,\r\n ratingType,\r\n };\r\n\r\n async function submit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n try {\r\n const { quoteId, importantNotices } = application.state;\r\n if (!quoteId) return;\r\n\r\n // Track the transition to the legacy purchase page.\r\n TrackingEvent.trackSinglePageApplication(\r\n getQuotePath(application.state.comparisonModel?.Quotes.length),\r\n 'bind',\r\n );\r\n\r\n // If there are no required elements or important notices for this quote, skip the confirmation view and go straight to purchase.\r\n // Note that we use the quote.Required elements instead of the state.staticRequired elements in case we can skip the confirmation view if all the\r\n // required elements have already been changed.\r\n const quote = application.state.comparisonModel?.Quotes.find(quote => quote.QuoteId === quoteId),\r\n confirmationElementNames = quote?.ConfirmationElementNames,\r\n importantNoticesForQuote = importantNotices.find(notice => notice.quoteId === quoteId);\r\n\r\n if (!confirmationElementNames?.length && !importantNoticesForQuote?.importantNotices.length) {\r\n // Set the quoteId for the legacy purchase page to use.\r\n setQuoteId(quoteId);\r\n\r\n // Navigate to the legacy purchase page.\r\n Common.navigate(pages.PurchaseWithProduct(ProductLine.parse(params.product), quoteId));\r\n return;\r\n }\r\n\r\n // Otherwise navigate to the confirmation view.\r\n redirect(Path.ConfirmQuote, { quoteId, product: params.product as string });\r\n } catch (e) {\r\n toast.error(await getMessageFromError(e));\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Svg } from '@app/Components/Svg';\r\nimport { iconPaths, VaveUnderwritingGuidelines } from '@app/Constants';\r\nimport { PrimaryRouteButton, SecondaryBackButton, StepButtons } from '@app/SinglePageApplication/Components/Buttons';\r\nimport { SubHeader } from '@app/SinglePageApplication/Components/Header';\r\nimport { LayoutWrapper } from '@app/SinglePageApplication/Components/LayoutWrapper';\r\nimport { QuoteStepTile } from '@app/SinglePageApplication/Components/QuoteStepTile';\r\nimport { RouteLoadingSpinner } from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { ViewWrapper } from '@app/SinglePageApplication/Components/ViewWrapper';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { useUnderwritingGuidelines } from './hook';\r\nimport './style.scss';\r\n\r\nenum GuidelineType {\r\n Required = 'required',\r\n Prohibited = 'prohibited',\r\n}\r\n\r\nexport const UnderwritingGuidelines = {\r\n path: Path.UnderwritingGuidelines,\r\n shouldRevalidate: () => false,\r\n element: ,\r\n};\r\n\r\nexport function UnderwritingGuidelinesComponent() {\r\n const { isInitializing, submit, tileContainerRef, quote, application, ratingType } = useUnderwritingGuidelines();\r\n\r\n const { state } = application;\r\n\r\n return (\r\n \r\n {isInitializing ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n }\r\n negative={}\r\n />\r\n \r\n
    \r\n )}\r\n
    \r\n );\r\n}\r\n\r\ninterface RiskListProps {\r\n guidelines: string[];\r\n type: GuidelineType;\r\n}\r\n\r\nfunction RiskList({ guidelines, type }: RiskListProps) {\r\n return (\r\n
    \r\n \r\n {type === GuidelineType.Required ? 'Risk must/does contain:' : 'Risk is/does not have:'}\r\n \r\n\r\n {guidelines.map((guideline: string, index: number) => (\r\n
    \r\n \r\n {guideline}\r\n
    \r\n ))}\r\n
    \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport { parseLocation } from 'parse-address';\r\nimport { StateCode } from '@app/Business/CommonSets';\r\nimport { navigate as rootNavigate, toPhoneNumber } from '@app/Common';\r\nimport { pages } from '@app/Constants';\r\nimport { useNavigateWithParams } from '@app/Hooks/Navigation';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { AppSettingsContext } from '@app/SinglePageApplication/State/Context';\r\nimport { Button, Link, Paragraph } from '@swyfft/webkit';\r\nimport { Path } from '../';\r\nimport './style.scss';\r\n\r\nexport const UnsupportedProperty = {\r\n path: Path.UnsupportedProperty,\r\n element: () => ,\r\n};\r\n\r\nexport const Component = () => {\r\n const { state } = useContext(StateContext),\r\n appSettings = useContext(AppSettingsContext),\r\n navigate = useNavigateWithParams(),\r\n params = useParams<{ product: string }>(),\r\n address = React.useMemo(() => parseLocation(state.quoteRequest?.Address || ''), [state.quoteRequest?.Address]),\r\n supportPhone = toPhoneNumber(appSettings?.customerSupportPhoneNumber || '');\r\n\r\n return (\r\n \r\n \r\n \r\n Unfortunately, we're not able to quote this property.\r\n \r\n \r\n }\r\n />\r\n\r\n
    \r\n {address?.state === StateCode.TX.code && (\r\n \r\n View Texas Use of Credit Information Disclosure\r\n \r\n )}\r\n\r\n
    \r\n \r\n\r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n See options to contact us or call us at{' '}\r\n {supportPhone}.\r\n \r\n
    \r\n
    \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { getRenewalTermFromPolicyNumber, getUpcomingRenewalEffectiveDateRange } from '@app/Common';\r\nimport { useClassName } from '@app/Hooks';\r\nimport { ComparisonQuoteModel } from '@app/Models';\r\nimport { Row } from '@app/ProductComparison/Row';\r\nimport { TileCell } from '@app/ProductComparison/TileCell';\r\nimport './style.scss';\r\n\r\nexport type UrqOverviewProps = {\r\n quote: ComparisonQuoteModel;\r\n lastDayToChange: string;\r\n isAfterLastDayToChange: boolean;\r\n};\r\n\r\nexport function UrqOverview({ quote, lastDayToChange, isAfterLastDayToChange }: UrqOverviewProps) {\r\n const { UpcomingRenewalImsPolicyNumber, EffectiveDate } = quote,\r\n urqPolicyTerm =\r\n UpcomingRenewalImsPolicyNumber ? getRenewalTermFromPolicyNumber(UpcomingRenewalImsPolicyNumber) : '-',\r\n urqEffectiveDateRange = EffectiveDate ? getUpcomingRenewalEffectiveDateRange(new Date(EffectiveDate)) : '-';\r\n\r\n const lastDayClassName = useClassName('last-day-to-change', [isAfterLastDayToChange ? 'warning' : '']);\r\n\r\n return (\r\n <>\r\n \r\n \r\n {urqPolicyTerm}\r\n \r\n \r\n \r\n \r\n {UpcomingRenewalImsPolicyNumber || '-'}\r\n \r\n \r\n \r\n \r\n {urqEffectiveDateRange}\r\n \r\n \r\n \r\n \r\n
    {lastDayToChange}
    \r\n
    \r\n
    \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { CarrierCode } from '@business/CommonSets';\r\nimport { ComparisonQuoteModel } from '@app/Models';\r\nimport { Logo } from '@app/ProductComparison/Logo';\r\nimport { Price } from '@app/ProductComparison/Price';\r\nimport './style.scss';\r\n\r\nexport type UrqTileHeaderProps = {\r\n quote: ComparisonQuoteModel;\r\n};\r\n\r\nexport function UrqTileHeader({ quote }: UrqTileHeaderProps) {\r\n const { GrossAnnualPayment } = quote,\r\n carrierCode = CarrierCode.parse(quote.CarrierCode);\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n Warning: This Upcoming Renewal Quote is for internal use only and used to track\r\n property and/or policy changes for renewal. This quote is not to be shared with external parties, as\r\n rates may fluctuate prior to issuance.\r\n
    \r\n \r\n );\r\n}\r\n","import { useContext, useState } from 'react';\r\nimport { useParams } from 'react-router-dom-v5-compat';\r\nimport * as dayjs from 'dayjs';\r\nimport { ProductLine } from '@app/Business/CommonSets';\r\nimport { simpleDateFormat } from '@app/Constants';\r\nimport { useAsyncEffect } from '@app/Hooks';\r\nimport { ComparisonQuotesModel } from '@app/Models';\r\nimport { loadComparisonQuotes } from '@app/SinglePageApplication/Api/ComparisonQuotes';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { UrlParams } from '../';\r\n\r\nexport function useUpcomingRenewalQuote() {\r\n const [isInitializing, setInitializing] = useState(true),\r\n application = useContext(StateContext),\r\n params = useParams(),\r\n { quoteId, product } = params,\r\n productLine = ProductLine.parse(product),\r\n { comparisonModel, elementDescriptions } = application.state,\r\n urqQuote = comparisonModel?.Quotes.find(quote => quote.QuoteId === quoteId),\r\n urqLastDayToChange = urqQuote?.UpcomingRenewalLastDayToMakeChanges || '',\r\n isAfterLastDayToChange = urqQuote?.IsAfterUpcomingRenewalLastDayToMakeChanges || false;\r\n\r\n const lastDayToChange = dayjs(urqLastDayToChange).utc(),\r\n formattedLastDayToChange = lastDayToChange.format(simpleDateFormat),\r\n quote = comparisonModel?.Quotes.find(({ QuoteId }) => QuoteId === quoteId);\r\n\r\n useAsyncEffect(async () => {\r\n try {\r\n setInitializing(true);\r\n await loadComparisonQuotes(application, params as UrlParams);\r\n } catch (error) {\r\n application.update(state => (state.error = error));\r\n } finally {\r\n setInitializing(false);\r\n }\r\n }, []);\r\n\r\n return {\r\n isInitializing,\r\n application,\r\n comparisonModel,\r\n elementDescriptions,\r\n formattedLastDayToChange,\r\n isAfterLastDayToChange,\r\n productLine,\r\n updateComparisonModel,\r\n quote,\r\n };\r\n\r\n function updateComparisonModel(comparisonModel: ComparisonQuotesModel) {\r\n application.update(state => {\r\n state.comparisonModel = comparisonModel;\r\n });\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport * as dayjs from 'dayjs';\r\nimport * as utc from 'dayjs/plugin/utc';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { ColorScheme } from '@app/ProductComparison/ColorScheme';\r\nimport { ProductComparisonQuote } from '@app/ProductComparison/Quote';\r\nimport { RouteLoadingSpinner } from '@app/SinglePageApplication/Components/RouteLoadingSpinner';\r\nimport { ViewWrapper } from '@app/SinglePageApplication/Components/ViewWrapper';\r\nimport { Path } from '@app/SinglePageApplication/Views';\r\nimport { UrqOverview } from '@app/SinglePageApplication/Views/UpcomingRenewalQuote/UrqOverview';\r\nimport { UrqTileHeader } from '@app/SinglePageApplication/Views/UpcomingRenewalQuote/UrqTileHeader';\r\nimport { useUpcomingRenewalQuote } from './hook';\r\nimport './style.scss';\r\n\r\ndayjs.extend(utc);\r\n\r\nexport const UpcomingRenewalQuote = {\r\n path: Path.UpcomingRenewalQuote,\r\n auth: AccessRole.Admin,\r\n element: ,\r\n};\r\n\r\nexport function Component() {\r\n const {\r\n isInitializing,\r\n application,\r\n comparisonModel,\r\n elementDescriptions,\r\n formattedLastDayToChange,\r\n isAfterLastDayToChange,\r\n productLine,\r\n updateComparisonModel,\r\n quote,\r\n } = useUpcomingRenewalQuote();\r\n\r\n const { state } = application;\r\n\r\n return (\r\n
    \r\n \r\n {isInitializing ?\r\n \r\n : }\r\n disableRatingTypeAlert\r\n overViewSection={getOverviewSection}\r\n disableElements={isAfterLastDayToChange}\r\n hideResetQuotes={isAfterLastDayToChange}\r\n isUrq\r\n isSingleQuote\r\n productLine={productLine}\r\n />\r\n }\r\n \r\n
    \r\n );\r\n\r\n function getOverviewSection() {\r\n if (!quote) {\r\n return <>;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n","import { FormEvent, useContext, useState } from 'react';\r\nimport { useNavigate, useParams } from 'react-router-dom-v5-compat';\r\nimport { putProperty } from '@app/Api/HOApi';\r\nimport { getMessageFromError, toKebabCase } from '@app/Common';\r\nimport { ToastContext, useAsyncEffect, useCreateOrGetQuotes, usePersistentFormReducer, useRedirect } from '@app/Hooks';\r\nimport { Address, PropertyData, QuoteCreateRequestModel } from '@app/Models';\r\nimport { createProperty } from '@app/SinglePageApplication/Api/Property';\r\nimport { StateContext } from '@app/SinglePageApplication/State';\r\nimport { Rules, Value } from '@swyfft/webkit';\r\nimport { Path, UrlParams } from '../';\r\n\r\ntype FormType = {\r\n zip: Value;\r\n};\r\n\r\nexport function useZipCodeSuggestions() {\r\n const application = useContext(StateContext),\r\n params = useParams() as UrlParams,\r\n redirect = useRedirect(),\r\n navigate = useNavigate(),\r\n toast = useContext(ToastContext),\r\n { createOrGetQuotes } = useCreateOrGetQuotes(),\r\n [isLoading, setLoading] = useState(false),\r\n address = application.state.address,\r\n suggestions = application.state.createAddress.zipCodeSuggestions;\r\n\r\n const formReducer = usePersistentFormReducer('zip-code-suggestions', {\r\n zip: new Value('zip code', '', [Rules.required()]),\r\n });\r\n\r\n useAsyncEffect(() => {\r\n if (application.state.address && application.state.createAddress.zipCodeSuggestions) return;\r\n\r\n if (params.product) redirect(Path.ProductLanding, { product: params.product || 'homeowner' });\r\n else redirect(Path.AddressManagement);\r\n }, []);\r\n\r\n return {\r\n isLoading,\r\n formReducer,\r\n submit,\r\n state: application.state,\r\n address,\r\n suggestions,\r\n navigate,\r\n };\r\n\r\n async function submit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n if (isLoading) return;\r\n\r\n try {\r\n setLoading(true);\r\n\r\n const address = { ...application.state.address } as Address,\r\n context = application.state.createAddress.context,\r\n addressKey = application.state.createAddress.addressKey;\r\n\r\n if (!address) throw new Error('Address is null.');\r\n\r\n address.Zip = formReducer.form.zip.content;\r\n\r\n let propertyData: PropertyData;\r\n if (context === 'CreateAddress') {\r\n propertyData = await createProperty(address);\r\n\r\n const quoteRequest = { ...(application.state.quoteRequest || {}) } as QuoteCreateRequestModel;\r\n quoteRequest.AddressKey = propertyData.AddressKey;\r\n quoteRequest.Address = propertyData.FullAddress;\r\n // Ensure the flag saying this was a flood quote created from the homeowner page is set to false.\r\n quoteRequest.FromHomeowner = false;\r\n\r\n await createOrGetQuotes(quoteRequest);\r\n\r\n await application.update(state => {\r\n state.quoteRequest = quoteRequest;\r\n state.address = address;\r\n });\r\n } else {\r\n if (context === 'EditAddress') {\r\n propertyData = {\r\n Street1: address.Street1,\r\n City: address.City,\r\n StateCode: address.StateCode,\r\n Zip: address.Zip,\r\n LivingSpace: address.LivingSpace,\r\n FullAddress: Address.toString(address),\r\n IsSingleFamilyResidence: false,\r\n AddressKey: addressKey,\r\n };\r\n\r\n await putProperty(propertyData);\r\n } else {\r\n propertyData = await createProperty(address);\r\n\r\n await application.update(state => {\r\n state.createAddress.addressKey = propertyData.AddressKey;\r\n state.address = address;\r\n });\r\n }\r\n\r\n redirect(Path.PreciseLocationNoQuote, {\r\n address: encodeURIComponent(toKebabCase(propertyData.FullAddress, true)),\r\n });\r\n }\r\n } catch (e) {\r\n toast.error(await getMessageFromError(e));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { AccessRole } from '@app/Constants';\r\nimport { PrimaryRouteButton, SecondaryBackButton, StepButtons } from '@app/SinglePageApplication/Components/Buttons';\r\nimport { Step } from '@app/SinglePageApplication/Components/Step';\r\nimport { StepHeader } from '@app/SinglePageApplication/Components/StepHeader';\r\nimport { StepTileRow, StepTileRowSeparator, StepTileText } from '@app/SinglePageApplication/Components/StepTile';\r\nimport { Path } from '../';\r\nimport { useZipCodeSuggestions } from './hook';\r\nimport './style.scss';\r\n\r\nexport const ZipCodeSuggestions = {\r\n path: Path.ZipCodeSuggestions,\r\n element: ,\r\n shouldRevalidate: () => false,\r\n};\r\n\r\nexport const ZipCodeSuggestionsNoQuote = {\r\n path: Path.ZipCodeSuggestionsNoQuote,\r\n auth: AccessRole.Agent,\r\n element: ,\r\n};\r\n\r\nexport function ZipCodeSuggestionsComponent() {\r\n const { isLoading, formReducer, submit, state, address, suggestions, navigate } = useZipCodeSuggestions();\r\n\r\n const { form, set, valid } = formReducer;\r\n\r\n return (\r\n \r\n
    \r\n \r\n\r\n \r\n\r\n \r\n \r\n Our records indicate the provided zip code is outside {address?.City}, {address?.StateCode}. A\r\n quote against this property may still be bound, but any resulting policy will be subject to\r\n review.\r\n \r\n \r\n\r\n \r\n \r\n The zip codes below match {address?.City}, {address?.StateCode}. Please select one or continue\r\n with your original zip code.\r\n \r\n \r\n\r\n \r\n
    \r\n set('zip', zip)}\r\n />\r\n
    \r\n
    \r\n\r\n \r\n\r\n \r\n
    \r\n {(suggestions?.SuggestedZips || []).map(zip => (\r\n set('zip', zip)}\r\n />\r\n ))}\r\n
    \r\n
    \r\n\r\n \r\n\r\n \r\n }\r\n negative={ navigate(-1)} />}\r\n />\r\n \r\n
    \r\n );\r\n}\r\n\r\nconst Zip = ({ zip, isSelected, onSelect }: { zip: string; isSelected: boolean; onSelect: (zip: string) => void }) => (\r\n onSelect(zip)}>\r\n {zip}\r\n \r\n);\r\n","import * as React from 'react';\r\nimport { ReactElement } from 'react';\r\nimport {\r\n ActionFunction,\r\n LoaderFunction,\r\n ShouldRevalidateFunction,\r\n} from 'react-router-dom-v5-compat';\r\nimport { AuthorizeRedirectType } from '@app/Hooks/AuthorizeRedirect';\r\nimport { ToastActions } from '@app/Hooks/Toast';\r\nimport {\r\n AddressManagement,\r\n} from '@app/SinglePageApplication/Views/AddressManagement';\r\nimport {\r\n AdjusterQueueManagement,\r\n} from '@app/SinglePageApplication/Views/AdjusterQueueManagement';\r\nimport {\r\n AgencyDashboard,\r\n} from '@app/SinglePageApplication/Views/AgencyDashboard';\r\nimport {\r\n BindingRequirements,\r\n} from '@app/SinglePageApplication/Views/BindingRequirements';\r\nimport { CatCodes } from '@app/SinglePageApplication/Views/CatCodes/App';\r\nimport {\r\n ClaimsDashboard,\r\n} from '@app/SinglePageApplication/Views/ClaimsDashboard';\r\nimport {\r\n CommercialLanding,\r\n} from '@app/SinglePageApplication/Views/CommercialLanding';\r\nimport {\r\n CreateAddress,\r\n CreateAddressNoQuote,\r\n EditAddress,\r\n} from '@app/SinglePageApplication/Views/CreateAddress/routeConfig';\r\nimport { Hover } from '@app/SinglePageApplication/Views/Hover/App';\r\nimport { IsoForms } from '@app/SinglePageApplication/Views/IsoForms';\r\nimport { MakeAPayment } from '@app/SinglePageApplication/Views/MakeAPayment';\r\nimport {\r\n RenewalEAndSOffer,\r\n} from '@app/SinglePageApplication/Views/RenewalEAndSOffer';\r\nimport {\r\n RequestEAndSQuote,\r\n} from '@app/SinglePageApplication/Views/RequestEAndSQuote';\r\nimport {\r\n UnderwritingGuidelines,\r\n} from '@app/SinglePageApplication/Views/UnderwritingGuidelines';\r\nimport { AppSettings } from '../Models';\r\nimport { ApplicationState } from '../State';\r\nimport { Path } from './';\r\nimport { CompareCustomize } from './CompareCustomize';\r\nimport { ConfirmQuote } from './ConfirmQuote';\r\nimport { ConfirmSingleFamilyResidence } from './ConfirmSingleFamilyResidence';\r\nimport { Customize } from './Customize';\r\nimport { DeepLinkQuote } from './DeepLinkQuote';\r\nimport { Landing } from './Landing';\r\nimport { LoginAs } from './LoginAs';\r\nimport { MissingPropertyData } from './MissingPropertyData';\r\nimport { PreciseLocation, PreciseLocationNoQuote } from './PreciseLocation';\r\nimport { QuoteList } from './QuoteList';\r\nimport { Redirect } from './Redirect';\r\nimport { SignUp } from './SignUp/Base';\r\nimport { SignUpEntry } from './SignUp/Entry';\r\nimport { UnsupportedProperty } from './UnsupportedProperty';\r\nimport { UpcomingRenewalQuote } from './UpcomingRenewalQuote';\r\nimport {\r\n ZipCodeSuggestions,\r\n ZipCodeSuggestionsNoQuote,\r\n} from './ZipCodeSuggestions';\r\n\r\nexport type SwyfftRouteLoaderFunction = (\r\n application: ApplicationState,\r\n toast: ToastActions,\r\n appSettings: AppSettings | null,\r\n) => LoaderFunction;\r\n\r\nexport type SwyfftRouteActionFunction = (\r\n application: ApplicationState,\r\n toast: ToastActions,\r\n appSettings: AppSettings | null,\r\n) => ActionFunction;\r\n\r\nexport type SwyfftRouteObject = {\r\n // Required. The string used to generate a routable path. Can include parameters like \":product\" as placeholders.\r\n path: string;\r\n\r\n // Required. The element to render when this route is matched.\r\n element: ReactElement | (() => ReactElement);\r\n\r\n // Optional. An authorization method that returns true when the current user is allowed to view the element rendered by this route.\r\n auth?: AuthorizeRedirectType;\r\n\r\n // Optional. A function to call before rerunning a loader after an action has been performed. Return false to prevent calling loader again.\r\n shouldRevalidate?: ShouldRevalidateFunction;\r\n\r\n // Optional: Flag to indicate no transition wrapper should be used when rendering the element.\r\n noTransition?: boolean;\r\n\r\n // Optional: Flag to hide the site navbar.\r\n hideNavbar?: boolean;\r\n\r\n // Optional: Flag to hide the site footer.\r\n hideFooter?: boolean;\r\n\r\n // Optional. A list of child elements to render within the current route components ``.\r\n children?: SwyfftRouteObject[];\r\n};\r\n\r\nexport const routes: SwyfftRouteObject[] = [\r\n AddressManagement,\r\n AdjusterQueueManagement,\r\n AgencyDashboard,\r\n BindingRequirements,\r\n CatCodes,\r\n ClaimsDashboard,\r\n CommercialLanding,\r\n CompareCustomize,\r\n ConfirmQuote,\r\n ConfirmSingleFamilyResidence,\r\n Customize,\r\n CreateAddress,\r\n CreateAddressNoQuote,\r\n DeepLinkQuote,\r\n EditAddress,\r\n Hover,\r\n IsoForms,\r\n Landing(Path.HomeownerLanding),\r\n Landing(Path.ProductLanding),\r\n LoginAs,\r\n MakeAPayment,\r\n MissingPropertyData,\r\n PreciseLocation,\r\n PreciseLocationNoQuote,\r\n QuoteList,\r\n RenewalEAndSOffer,\r\n Redirect(Path.Shop, 'https://swyfft.axomo.com/'),\r\n RequestEAndSQuote,\r\n SignUp,\r\n SignUpEntry,\r\n UnderwritingGuidelines,\r\n UnsupportedProperty,\r\n UpcomingRenewalQuote,\r\n ZipCodeSuggestions,\r\n ZipCodeSuggestionsNoQuote,\r\n\r\n {\r\n path: '*',\r\n element:
    No route found.
    ,\r\n },\r\n];\r\n","module.exports = React;","module.exports = ReactDOM;","module.exports = numeral;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 4552;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t4552: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkswyfft_web\"] = self[\"webpackChunkswyfft_web\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [2076,4121], function() { return __webpack_require__(33128); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","productLine","carrierCode","purchasedOn","fetchAndLog","response","fetchAndLogWithResponse","ok","text","length","handleAuthorizeRedirect","type","params","isAuthorized","navigate","pages","LoginWithReturnUrl","undefined","AccessRole","Admin","isAdmin","Agent","IndependentAgent","CaptiveAgent","AgencyAdmin","AgencyLocationAdmin","isAtLeastAgent","LimitedAgent","isLimitedAgentUser","AnonymousUser","Error","useAuthorizeRedirect","useParams","useEffect","Event","event","index","id","className","dayjs","CreatedOn","format","dateTimeFormat","ModalRow","CardInlineData","label","href","AnnualPremium","formatCurrencyUS","IpAddress","Notes","QuoteHistoryModal","visible","quoteId","address","onClose","details","setDetails","useState","events","setEvents","filter","setFilter","toast","useToast","canViewAdminEvents","getQuoteDetails","QuoteEvents","e","console","error","f","toLowerCase","includes","toString","Location","show","hideFn","ModalTitle","CreateDate","ModifiedOn","ModalSeparator","placeholder","value","onChange","target","IsAdminEvent","map","key","application","isSingleQuote","isUrq","update","product","ProductLine","parse","carriers","split","carrier","CarrierCode","comparisonQuoteData","comparisonModel","elementDescriptions","state","comparisonModelQuoteOrder","Quotes","quote","QuoteId","importantNotices","getComparisonImportantNotices","visibleQuoteIds","warning","setData","getComparisonQuotesByProduct","find","IsUpcomingRenewalQuote","ApiError","handleNonUrqQuote","getComparisonElementDescriptions","load","getAddressKey","json","parseAddress","encodeURIComponent","createProperty","method","headers","body","JSON","stringify","authorizeRedirect","hideNavbar","hideFooter","children","appSettings","useContext","AppSettingsContext","Auth","check","Navbar","Footer","customerSupportPhoneNumber","App","reducer","useApplicationState","reducerRef","useRef","setAppSettings","window","useAsyncEffect","on","HubChannel","AppSettings","router","useMemo","createBrowserRouter","path","element","Outlet","errorElement","Route","ErrorElement","routes","routeMapper","current","history","scrollRestoration","Provider","StateContext","ToastContext","AppUpdatePrompt","RouterProvider","route","auth","noTransition","Function","Transition","location","useLocation","duration","transitionDuration","scrollTo","pathname","SwitchTransition","timeout","onEntering","node","classList","toggle","set","autoAlpha","y","timeline","paused","to","play","then","onComplete","onExiting","clearProps","setVisible","AppVersion","checkAppVersionAndPromptIfNeeded","useBeforeUnload","clearStoredAppVersion","onClick","refresh","appVersion","localStoredVersion","getLocalData","APP_VERSION_STORAGE_KEY","isEmpty","saveLocalData","useAppUpdatePrompt","updatePromptStyle","BrowserUpdatedIcon","fontSize","Paragraph","bold","Button","isSecondary","size","tv","base","variants","true","false","StepButtons","positive","negative","PrimaryRouteButton","props","useNavigate","PrimaryButton","Svg","iconPaths","chevronDown","alt","disabled","SecondaryBackButton","SecondaryButton","Header","SubHeader","debounce","AddressAutoComplete","forwardRef","ref","AutoComplete","name","suggestions","Promise","resolve","clearTimeout","setTimeout","searchHomeownerAddresses","search","getItemId","property","AddressKey","getItemText","FullAddress","autoComplete","Date","getTime","autoFocus","onTextChange","onSelect","HeroText","backgroundImage","React","switch","onHomeowner","onCommercial","onFlood","onGrc","style","padding","Logo","swyfftShieldLogo","unstyled","InsuredName","Text","firstName","middleName","lastName","LayoutWrapper","withCover","fullWidth","useClassName","onVave","src","lloydsCoverholderLogo","displayName","onHiscox","LloydsLogo","onBrit","onBenchmark","CarrierName","onBenchmarkSpecialty","onClearBlue","onClearBlueSpecialty","onDorchester","onNfip","onTopa","lloydsLogo","getRef","visibleQuoteCount","tileIndex","rendered","useConditionalRender","tileCellRef","createRef","financialRating","getFinancialRating","TileCell","imagePath","info","TrackingEvent","trackSinglePageApplication","getQuotePath","ToolTip","trigger","title","comparisonQuotes","visibleQuotes","useScrollTo","_","getGuaranteedUntilDate","expiresOn","subtract","simpleDateFormat","extend","localizedFormat","useQuoteOverviewSection","Row","sidebar","CarrierOverview","FinancialRating","RatingType","displayValue","ExpiresOn","icon","tileWidth","setTileWidth","updateTileWidth","tileContainerRef","useResize","offsetWidth","quoteProperty","useQuoteStepTile","StepTile","SelectedQuoteHeader","Spinner","ratingType","headerRef","width","useSelectedQuoteHeader","TwoColumnLayout","first","logoPath","ProductName","Street1","City","StateCode","Zip","second","Price","amount","GrossAnnualPayment","subtext","Sidebar","context","stateContext","agentName","getAgentName","agentNameParts","pageTitle","includeCloseButton","onCloseClick","CloseIcon","onLogoClick","nodes","itemCountProperty","itemSubCountProperty","IconButton","n","join","Constants","user","agentTitle","Common","logout","Root","titleElement","description","clsx","getRatingTypeColor","getTitleLockup","dangerouslySetInnerHTML","__html","excludeHeader","StepTileRow","StepTileRowSeparator","StepTileText","loading","Step","isLoading","ViewWrapper","initialData","data","useAsyncValue","noData","emptyLoaderData","createEmptyModels","lightGray2","customStyles","headCells","backgroundColor","fontWeight","rows","noDataElement","columns","responsive","striped","conditionalRowStyles","noTableHead","loadingMore","hideResultMessage","ResultCountMessage","hasMore","arrowDown","checkMark","isDisabled","QuotePremiumErrors","IsPurchased","IsReadOnly","ImsPolicyNumber","matches","ProductLineId","Flood","bindQuoteRedirect","useBindQuoteRedirect","submit","preventDefault","useBindButton","GetUrqButton","onSubmit","quoteCount","triggerRef","emailQuote","useEmailQuote","useEmailButton","IconLink","iconPath","envelope","iconAlt","EmailQuoteForm","calendar","iconLink","print","printLoading","usePrintQuote","isAgent","isLimitedAgent","hasOnlyMoratoriaError","some","QuotePremiumErrorHeaders","PurchaseMoratorium","printDisabled","stateCode","qrgLink","getQrgLink","QrgLinks","document","navigateOnNewTab","useNavigateWithParams","viewQuote","trackingStep","Path","Customize","lowercaseName","totalTiles","QuoteProperty","columnClassName","BindButton","PrintButton","ViewButton","EmailButton","QRGButton","HistoryButton","setLoading","form","valid","revert","useFormReducer","email","Value","Rules","required","phone","message","maxLength","onCancel","Email","content","Phone","Message","success","fetcher","useFetcher","DesignContext","Modal","isOpen","onOpenChange","Form","redirect","useRedirect","Commercial","setQuoteId","CommBindQuote","Homeowner","Vave","UnderwritingGuidelines","importantNoticesForQuote","notice","ConfirmationElementNames","ConfirmQuote","PurchaseWithProduct","init","renderComponent","handleGeneralError","quotes","PrintQuoteContext","coverPageGroups","ElementGroupNames","Deductibles","PropertyCoverages","AdditionalCoverages","push","ConstructionRiskCharacteristics","group","Group","mapElementGroupToPrintedQuote","mepDisclaimer","quoteValidUntilDate","borderTop","Colors","FontSizes","small1","margin","onAdmitted","onEAndS","SubText","color","mediumPurple1","Table","Heading2","medium2","TableRow","fontSizeOverride","small3","labelFontSize","minWidth","dataMinWidth","display","alignItems","height","groupName","elementGroupName","ElementGroupName","elementGroup","getElementGroupByName","adjustElementsForPrintedQuote","comparisonElements","comparisonElementModel","Elements","el","formattedLabel","stripExtraQuoteElementLabelParts","ElementDisplay","formattedValue","ElementType","ElementTemplateTypes","Choice","Choices","choice","Name","ElementName","ElementNames","numLosses","PriorClaims","Claims","coverageDLimit","lossOfUse","getComparisonElementFromComparisonModel","GroupRow","formatElementValue","Column","inline","productName","LogoBlock","Heading1","large2","small2","currentPage","pageCount","timestamp","dateTimeLocalizedFormat","Page","totalPages","PageContent","PageHeader","PageSidebar","agentDetails","getLoginDetails","baseUrl","getStringAppSetting","AppSetting","BaseUrl","quoteUrl","slice","getPath","createdOnDate","validUntilDate","producerLocationName","ProducerLocationName","replace","Premium","border","SidebarLockup","agentPhoneNumber","parsePhoneNumber","emailLength","userName","getEmailFontSize","wordBreak","InsuredNameFirst","InsuredNameLast","getInsuredFullName","IconLockup","imgPath","imgAlt","rel","textDecoration","medium1","brandGreen","Disclaimers","formatGrossAnnualPayment","TextLockup","FontWeights","mepMaxPercentage","quoteFees","QuoteFees","QuoteFeeTypes","MonthlyInstallment","CreditCardFee","sort","OrderNumber","a","b","ratingTYpe","quoteFee","FeeLabel","DisplayName","emphasis","isFullyEarnedFee","feeNameNoCase","createContext","Pages","page","adjustedElements","ComparisonElements","hasStubOrAdminElement","onPropertyCoverages","onTopaAndBenchmarkSpecialty","onFl","addRspsElement","onLa","onTx","onAl","addRmpsElement","onMa","onDefault","doNothing","createHardCodedElement","onMs","onAdditionalCoverages","onDeductibles","lossAssessmentEarthquakeCoverage","LossAssessmentEarthquake","toBoolean","addDefaultFloodCoverageElements","hasElementWithName","replacementCost","throwNotImplementedError","comparisonElement","elementDisplay","isStubElement","isAdminElement","ElementDisplayNames","AdditionalReplacementCost","PageLayout","TaxesAndFeesGroup","CoverPageGroups","utc","RiskCharacteristicsGroup","Cover","RiskCharacteristics","onError","getQuote","printHomeownerQuote","fileName","insuredName","getFileName","all","getMepMaxPercentage","PurchasedOn","getMepDisclaimer","useReactToPdf","component","PrintedQuote","unformattedFileName","Document","yearBuilt","addRule","validator","parseInt","year","roofAge","invalidRoofAgeOrYearBuilt","AddressManagementComponent","componentState","componentUpdate","useImmutableState","addresses","focus","searchText","inputRef","createAddress","clearForm","addressKey","latitude","longitude","useImperativeHandle","useDocumentClick","exceptionClassNames","generateUniqueClassName","StepHeader","handleChangeAddress","partialAddress","getProperties","onFocus","onBlur","InlineError","handleSelectAddress","url","EditAddress","toKebabCase","LivingSpace","Latitude","Longitude","onMouseEnter","CreateAddressNoQuote","AddressManagement","queues","queue","setIsLoading","reporterTypes","Object","keys","ContactType","isNaN","localeCompare","reporterTypeGroups","reduce","result","array","reporterTypeOptions","typeName","selected","ReporterTypes","item","setWithoutValidation","validate","Label","IsHomeowner","IsCommercial","queueType","IsLiability","AdjusterQueueType","Liability","IsProperty","Property","ALL_STATES_KEY","catCode","IsCatCode","allReporterTypes","minSelected","adjuster","adjusters","Adjusters","minLength","getCurrentNewQueue","selectedReporterTypes","Id","setReporterTypeRules","reporterTypeKeys","forEach","setRules","equals","duplicateQueues","newQueue","q","isDuplicateQueue","getUsers","results","MembershipApi","handleChangeQueueType","handleChangeAllReporterTypes","isSelected","typesSelected","newReporterTypes","setAllReporterTypes","handleChangeReporterType","handleAddAdjuster","indexOf","validateEmail","newAdjusters","handleSubmit","saveQueue","handleApiError","AdjusterQueueForm","useAdjusterQueueForm","cell","row","splice","tooltipMessage","iconButton","DeleteIcon","RadioGroup","options","orientation","Checkbox","Select","onSelectionChange","option","SelectItem","code","toUpperCase","FormLabel","Tooltip","PriorityHighIcon","noTooltip","duplicate","EmailAddress","NoData","SKELETON_HEIGHT","table","headRow","AdjusterQueueManagementComponent","setQueues","filteredQueues","setFilteredQueues","queueToEdit","setQueueToEdit","isQueueFormVisible","setIsQueueFormVisible","reloadToggle","setReloadToggle","containerClassName","selectedQueue","handleEditQueue","EditIcon","getQueues","getData","newFilteredQueues","isDismissable","isKeyboardDismissable","showCloseButton","reload","AdjusterQueueManagement","locationId","integer","TextFormGroup","activateProducerLocation","ErrorMessage","request","trim","AgencyDashboardContext","AgencyDashboard","searchOutput","useProducerSearch","producers","Routes","SearchBar","setSearch","producer","Producer","ProducerGuid","ActivateLocationComponent","contact","ProducerContactGuid","InlineHeader","EditUrl","toPhoneNumber","ProducerLocationGuid","BoxedList","Contacts","ProducerContact","searchTerm","setProducers","responseTime","setResponseTime","abortController","AbortController","abort","lastSearch","useTimeout","start","searchProducers","signal","end","diff","searchDebounceMs","ProducerName","Locations","acc","ProducerLocation","SearchInfo","responseTimeRef","requirementsContext","usePolicyBindingRequirements","ManageBindingRequirementsLoadingSkeleton","BindingRequirementsContext","BindingRequirementsDueDate","BindingRequirementsPolicyInfo","BindingRequirementsFileManager","policyNumber","PolicyNumber","useBindingRequirementsContext","exception","severity","Severity","BindingRequirements","PolicyBindingRequirementsComponent","ElementSkeleton","BindingRequirementsPolicyInfoSkeleton","BindingRequirementsFileManagerSkeleton","Component","action","setAction","setCode","deleting","setDeleting","tableRef","Search","Action","Add","homeownerAccidentTypes","at","commercialAccidentTypes","Confirm","Delete","Code","confirmButtonId","onConfirm","deleteCatCode","CatCodes","shouldRevalidate","CatCodeModal","states","s","reset","startDate","endDate","superCat","notes","Edit","StartDate","EndDate","States","AccidentTypes","IsSuperCat","open","LabelFormGroup","placement","HelpIcon","DatePicker","date","maxDate","minDate","checked","MultiSelect","items","accidentType","CatCode","dateFormat","ClaimsApi","addCatCode","updateCatCode","TableFormGroup","r","get","getCatCodes","Start","Count","count","model","pageSize","ClaimTasks","claimTasks","setClaimTasks","createdByList","setCreatedByList","assignedToList","setAssignedToList","taskTypeList","setTaskTypeList","searchFormOpen","setSearchFormOpen","taskFormOpen","setTaskFormOpen","actionMenuOpen","setActionMenuOpen","selectedTaskSearch","setSelectedTaskSearch","searchParams","setSearchParams","useSearchParams","ClaimsDashboardContext","skeletonHeight","savedSearch","filters","taskType","assignedTo","dueDate","tasks","getClaimTasks","taskCount","overdueTaskCount","Status","TaskStatus","Overdue","getErrorMessage","getTaskTypes","justifyContent","DueDate","AssignedTo","AssignedOn","TaskType","ClaimNumber","FrissScore","CreatedBy","Source","SearchIcon","savedSearchesData","SAVED_TASK_SEARCH_STORAGE_KEY","savedSearches","savedSearchesObj","KeyboardArrowRightIcon","delete","createdBy","savedSearchName","substring","claimNumber","task","All","dateFormatWithHyphens","addClaimTask","initialLoad","setInitialLoad","isSaveSearchFormVisible","setIsSaveSearchFormVisible","dueDateParam","isValid","copyText","ContentCopyIcon","SaveIcon","skip","take","queryParams","encodeQueryParam","mockTasks","Array","i","Pending","padStart","claimNumberResults","policyNumberResults","getMockClaimTasks","ClaimsDashboardComponent","mobileMenuOpen","setMobileMenuOpen","useClaimsDashboardReducer","sidebarNodes","endsWith","handleCloseMobileMenu","Drawer","anchor","clickFn","morphIcon","Navigate","ClaimsDashboard","ActionType","InitialState","initial","dispatch","useReducer","updater","Update","produce","draft","Revert","getSuggestions","existingQuotes","getExistingCommercialQuotes","getAddressMatches","quoteResults","toAddress","Address","addressResults","newCommercialQuotePageEnabled","LegacyCommercialQuote","useCommercialBuildingAddressInput","buildingAddress","getItemComponent","CommercialBuildingAddressItem","CheckIcon","Link","getQuoteUri","getConstructionTypes","useSelectConstructionType","ComboBox","constructionType","setIsUnitCountVisible","isUnitCountVisible","formatNumber","CommercialBuildingAddressInput","SelectOccupancyType","setUnitCountVisible","SelectLessorsRisk","SelectConstructionType","numberOfBuildings","numberOfStories","numberOfUnits","squareFootage","ElementDisplayFormatTypes","Int","SelectSwimmingPoolCount","buildingValue","Float","withCurrencyPrefix","businessPersonalPropertyLimit","businessIncomeLimit","SelectGeneralLiability","targetAnnualPremium","LandingFooter","selectGeneralLiabilityOptions","useSelectGeneralLiability","generalLiabilityCoverage","entries","commercialGeneralLiabilityTypes","useLessorsRisk","lessorsRisk","LoadingStep","highlighted","steps","step","setStep","interval","stop","setInterval","prevStep","clearInterval","stepText","selectOccupancyTypeOptions","occupancyTypeOptionsWithMultipleUnits","useSelectOccupancyType","occupancyType","commercialSurplusBuildingTypeValues","ApartmentNoRetail","ApartmentYesRetail","CondoNoRetail","CondoYesRetail","selectSwimmingPoolCountOptions","useSelectSwimmingPoolCount","numberOfSwimmingPools","alertRef","logNoQuoteAttempt","businessPersonalPropertyLimitRules","min","currency","validateAgainstBuildingValue","stripNumeralFormatting","businessIncomeLimitRules","buildYear","commercialValidationParameters","livingSpaceSurplusMin","range","logQuoteRequestSafe","EventName","formatType","addNumeralFormatting","getPertinentValidationKeys","activeElement","blur","validateForm","validationKeys","addressMatches","matchedAddress","match","stripCommas","BuildingAddress","stripCountryCodeFromAddress","Street2","BuildingType","ConstructionType","BuildingValue","BusinessPersonalPropertyLimit","TargetAnnualPremium","BusinessIncomeLimit","YearBuilt","SquareFootage","NumberOfUnits","NumberOfStories","SwimmingPoolCount","WindExclusion","NumberOfBuildings","GeneralLiabilityCoverage","EAndS","IsLessorsRisk","comparisonQuotesModel","getOrCreateComparisonQuote","quoteInstance","getOrCreateQuote","IsOk","setAddress","CommQuoteModify","handleValidQuote","showModalHandler","m_levelName","commercialErrorSeverityTypes","Warning","handleInvalidQuote","normalized","normalizeError","HttpStatusCodes","aborted","Response","ExceptionMessage","CommercialLandingComponent","useCommercialLanding","LandingViewWrapper","LandingLayout","ProductHeader","LandingContent","CommercialLandingFormComponent","footerType","AlertFooterType","CommercialLanding","parseOrDefault","isPurchasedQuote","isMaxLayoutRequired","loadComparisonQuotes","useCompareCustomize","includeTopBuffer","RouteLoadingSpinner","ProductComparisonQuote","updateComparisonModel","tileHeader","TileHeader","overViewSection","QuoteOverviewSection","disableRatingTypeAlert","disableElements","CompareCustomize","revalidateWhenQuoteIdChanges","patchQuoteHook","patch","patchFromRequest","patchClaims","patchLoading","getComparisonQuoteOrDefault","getComparisonElementByQuoteId","quoteElementDescriptions","getElementDescriptionByCarrierCode","elementDescriptionHtml","emptyElementError","getConfirmationElementValidationError","elementErrorMessage","getComparisonElementErrorMessage","Element","descriptions","validationError","hideTips","tileEntryClassName","ComparisonQuoteImportantNotice","TexasUseOfCreditInformationDisclosure","isInitializing","setInitializing","stateHook","usePatchQuote","elementGroups","ElementGroups","confirmationElementNames","requiredComparisonElements","getComparisonElementsByConfirmationElementNames","totalRequiredConfirmations","isConfirmDisabled","hasSoftDeclines","hasEmptyRequiredElements","getTitle","getDescription","onBack","getMessageFromError","useConfirmQuote","QuoteStepTile","badge","ImportantNotices","ConfirmationElement","requests","createOrGetQuotes","useCreateOrGetQuotes","quoteRequest","NonSingleFamilyResidenceConfirmed","SingleFamilyResidenceComponent","useConfirmSingleFamilyResidence","ConfirmSingleFamilyResidence","validateZipCode","city","zipCode","stepDescription","query","useQueryString","additionalRules","decimal","usePersistentFormReducer","zip","livingSpace","yearBuiltValidation","yearBuiltAndRoofAgeValidation","FromHomeowner","RoofAge","originalZipCode","zipCodeSuggestions","Valid","encodedAddress","ZipCodeSuggestions","ZipCodeSuggestionsNoQuote","propertyData","newQuoteRequest","QuotePurposeId","InsuredNameMiddle","NewLandingPage","RequestUuid","IsSingleFamilyResidence","putProperty","PreciseLocationNoQuote","DropdownFormGroup","statesByCode","DropdownItem","textInput","scrollable","CreateAddress","CreateAddressComponent","useCustomize","fromKebabToTitleCase","ProductLanding","DeepLinkQuoteComponent","useDeepLinkQuote","DeepLinkQuote","webhook","uri","Hover","hoverApiBaseUri","TabGroup","tabs","Tab","Jobs","Authorization","authorizationUri","hoverAuthorizationUri","clientId","hoverClientId","redirectUri","hoverRedirectUri","Webhooks","webhookEndpoint","hoverWebhookEndpoint","PrimaryGreenButton","getJobs","job","externalHoverJobId","capitalize","createdOn","local","modifiedOn","searchPlaceholder","remove","setRemove","removing","setRemoving","create","setCreate","creating","setCreating","domain","origin","c","getWebhooks","created_at","disclaimer","onConfirmed","deleteWebhook","onCancelled","disableClickOutside","ModalText","PrimaryBlackButton","createWebhook","forms","setForms","getIsoForms","IsoFormsComponent","useIsoForms","IsoFormList","Number","Copyable","Url","IsoForms","setValue","isLinkHovered","setIsLinkHovered","CheckboxFormGroup","TermsLink","labelClassName","checkboxClassName","Privacy","onMouseLeave","setAddressKey","addressRef","nameFieldLengthRules","rangeLength","creditScore","HomeownerLanding","History","formKeys","keysWithNoMiddleName","useLanding","TermsCheckbox","Landing","status","loginAs","setCookie","token","roles","LoginAs","PaymentAction","PaymentForm","submitButtonLabel","setSubmitButtonLabel","getSubmitButtonLabel","paymentType","formCredit","creditCardNumber","creditCard","creditCardExpiration","afterWithString","startOf","add","cvv","regex","formECheck","setWithoutValidationECheck","validECheck","validateECheck","eCheckAccountType","accountOwner","accountNumber","routingNumber","updatePaymentInfo","PaymentTypes","CreditCard","amountDueCredit","amountDueNonCredit","handleChangePaymentType","ECheck","feeNotice","expirationDateParts","bankName","AdminApi","getBankName","PolicyZip","PaymentAmount","AnnualNewBusiness","IsCard","AccountNumber","RoutingNumber","AccountName","BankAccountType","BankName","String","Cvv","ExpMonth","ExpYear","FirstName","LastName","PaymentSummary","invoice","balanceDue","paymentProfile","PaymentType","paymentFrequency","PremiumType","startsWith","CreditCardNumber","ECheckAccountType","hideString","ECheckAccountNumber","PaymentStep","MakeAPaymentComponent","paymentStep","setPaymentStep","Locate","setInvoice","NameOnPolicy","InsuranceCompanyName","BankLoanNumber","BankStreet1","BankStreet2","BankCity","BankStateCode","BankZip","BankFax","CreditCardExpires","ECheckAccountOwner","ECheckRoutingNumber","invoiceNumber","quoteStatus","amountDue","setAmountDue","paymentInfo","setPaymentInfo","setPaymentFrequency","isPaymentConfirmationVisible","setIsPaymentConfirmationVisible","isProcessing","setIsProcessing","errorMessage","setErrorMessage","useKeyboardEvent","initialPolicyNumber","initialZipCode","policyZipCode","getInvoice","getPaymentInfoFromInvoice","HOApi","getPolicyPaymentInvoice","Verify","err","getApiError","subCode","ErrorCodes","PolicyBillingIssue","CouldNotLoadPolicy","PolicyNumberZipCodeMismatch","getAuthorizationScreen","toCanvas","html2canvas","querySelector","scale","windowWidth","logging","toDataURL","getPaymentInfo","newPaymentInfo","getPaymentAmount","handleSubmitPaymentForm","UpdatePaymentInfo","ThankYou","desc","OneTimePayment","getStepDescription","isEscrow","EditBillableInterests","getStepContent","Fragment","messageParts","getErrorContent","PaymentConfirmation","heading","payInfo","payType","accountType","payFreq","downPayment","monthlyPayment","parseFloat","yearlyPayment","pageStep","customerName","updatePaymentMethod","isProblemDetail","ex","payFromExistingProfile","payOnce","MakeAPayment","missingPropertyData","singleFamilyResidence","MissingPropertyData","useMissingPropertyData","setPropertyLocation","getStateBoundary","outer","inner","lat","Y","lng","X","boundaries","setBoundaries","setSelected","setDisabled","formReducer","initialized","invalidArea","containsLocation","googleMapsApiKey","showSuccess","setSelectedLocation","truncate","PreciseLocationComponent","usePreciseLocation","Map","selectLocation","PreciseLocation","overlayCoordinates","reverse","polygonOptions","strokeColor","strokeOpacity","strokeWeight","fillColor","fillOpacity","initialCenter","isLoaded","useJsApiLoader","version","setMap","polygon","bounds","google","maps","LatLngBounds","coordinate","fitBounds","GoogleMap","mapContainerClassName","center","zoom","clickableIcons","fullscreenControl","streetViewControl","mapTypeControl","onLoad","m","latLng","Marker","position","Polygon","paths","p","geometry","poly","Default","LloydsPartner","defaultStyle","elementNames","elements","elementName","matchingComparisonElements","getComparisonQuoteElementsByElementName","useCoveragePreview","ErrorIcon","grossAnnualPayment","premiumRef","useCountUp","prefix","separator","useEasing","easingFn","t","d","guaranteedUntilDate","usePremiumInfo","Title","hasPremiumErrors","useReviewButton","coveragePreviewElementNames","BuildingPropertyLimit","coverageCLimit","isToggled","onQuoteToggle","useQuoteListTile","TileWrapper","CarrierLogoLockup","CoveragePreview","PremiumErrorInfo","ReviewButton","PremiumInfo","QuoteActionLinks","quoteValues","setQuoteValues","setError","selectedQuotes","toggleQuote","qv","onCompareQuotes","abbreviation","useQuoteList","SidebarHeader","QuoteListTile","QuoteList","RedirectComponent","Redirect","from","accessRole","getEAndSFromAdmittedNonRenewal","offerQuoteId","useRenewalEAndSOffer","RenewalEAndSOffer","createEAndSFromAdmittedAgentRequest","eAndSQuoteId","RequestEAndSQuote","useRequestEAndSQuote","args","currentParams","nextParams","onboarding","useOnboardingData","legalName","npn","streetAddress","agencyEmail","agencyPhone","agencyAddress","agencyCity","agencyState","agencyZip","agencyName","agencyNpn","SignUpPaths","AgentInformation","cancel","useAgencyInformation","agentFirstName","agentLastName","agentEmail","agentPhone","agentNpn","role","agentRole","isClusterAgency","useAgentInformation","SignUpComponent","OnboardingViewProgressTracker","SignUp","AgencyInformation","agencyType","terms","isAgencyNpnRequired","styles","agencyInformation","useSignUp","SignUpEntry","useOnboardingViewProgressTracker","ViewProgressTracker","delay","ViewProgressItem","StoreIcon","PersonIcon","ClipboardIcon","FolderIcon","agencyData","getAgencyData","raw","sessionStorage","getItem","AGENCY_DATA","parsed","newData","setItem","GuidelineType","UnderwritingGuidelinesComponent","useUnderwritingGuidelines","RiskList","guidelines","VaveUnderwritingGuidelines","Required","Prohibited","guideline","close","UnsupportedProperty","parseLocation","supportPhone","quoteError","TX","ContactUs","lastDayToChange","isAfterLastDayToChange","UpcomingRenewalImsPolicyNumber","EffectiveDate","urqPolicyTerm","getRenewalTermFromPolicyNumber","urqEffectiveDateRange","getUpcomingRenewalEffectiveDateRange","lastDayClassName","urqQuote","urqLastDayToChange","UpcomingRenewalLastDayToMakeChanges","IsAfterUpcomingRenewalLastDayToMakeChanges","formattedLastDayToChange","useUpcomingRenewalQuote","colorScheme","ColorScheme","Urq","UrqTileHeader","UrqOverview","hideResetQuotes","UpcomingRenewalQuote","ZipCodeSuggestionsComponent","useZipCodeSuggestions","SuggestedZips","Shop","module","exports","ReactDOM","numeral","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","call","amdO","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","getter","__esModule","getPrototypeOf","obj","__proto__","mode","this","ns","def","getOwnPropertyNames","definition","o","defineProperty","enumerable","g","globalThis","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","bind","nc","__webpack_exports__"],"sourceRoot":""}