{"version":3,"sources":["api/ApiUtils.ts","api/SalesforceApi.ts","api/UserApi.ts","state/user-context.ts","components/UserContextProvider.tsx","lib/auth-config.ts","lib/models/color-mode-colors.ts","components/common-quote/FormLoadingOverlay.tsx","views/LoginSSOView.tsx","components/OktaSignInWidget.tsx","logo.svg","views/LoginView.tsx","components/icons/MenuIcon.tsx","api/QuoteApi.ts","hooks/useUser.tsx","logo-white.svg","components/icons/CollectionIcon.tsx","components/icons/FolderIcon.tsx","components/icons/UserGroupIcon.tsx","lib/UserPermissions.ts","services/navbar.service.ts","components/icons/LogoutIcon.tsx","components/icons/PencilAlt.tsx","components/ModalWrapper.tsx","components/pinned-items/PinnedItemsModal.tsx","components/pinned-items/PinnedItems.tsx","hooks/useGetUserRole.tsx","components/ShowForRole.tsx","components/Sidebar.tsx","views/_AuthenticatedLayout.tsx","routes/GuardedRoute.tsx","components/form-fields/ComboBox/OptionInput.tsx","hooks/useDebounce.tsx","components/form-fields/ComboBox/OptionListItem.tsx","components/form-fields/ComboBox/OptionList.tsx","components/form-fields/ComboBox/useAsyncSearch.tsx","components/form-fields/ComboBox/index.tsx","lib/number-transforms.ts","components/quotes/QuotesTableColumns.tsx","components/quotes/AddQuoteMenu.tsx","components/quotes/EmptyQuotesTable.tsx","components/icons/DeleteIcon.tsx","components/icons/EditIcon.tsx","components/DataTable.tsx","components/DeleteQuoteDialog.tsx","components/quotes/QuotesTableToolbar.tsx","components/quotes/QuotesTable.tsx","components/QuoteTableContainer.tsx","lib/models/enums.ts","lib/models/rental/rental.model.ts","lib/models/short-term/short-term.model.ts","lib/quote-utils.ts","views/QuotesView.tsx","state/comments-context.ts","components/CommentsContextProvider.tsx","components/common-quote/FormSkeletonLoader.tsx","lib/models/short-term/short-term-form.model.ts","lib/models/rental/rental-form-selects.model.ts","lib/models/rental/rental-form.model.ts","components/WarningDialog.tsx","components/common-quote/FormStaleQuoteDialog.tsx","lib/models/quote.model.ts","api/CalculationApi.ts","lib/BaseQuoteHandler.ts","lib/RentalQuoteHandler.ts","lib/RentalPremierQuoteHandler.ts","lib/ShortTermQuoteHandler.ts","lib/QuoteHandlerFactory.ts","services/quote.service.ts","state/quote-context.ts","state/quote-reducer.ts","state/quote-state.ts","components/common-quote/QuoteContextProvider.tsx","hooks/useComments.ts","hooks/useQuote.tsx","hooks/useGetFormTabs.tsx","fonts/roboto-700.ttf","fonts/Roboto-Italic.ttf","fonts/roboto.ttf","lib/flattenObject.js","lib/models/override-label-map.ts","lib/utils.ts","lib/models/rental/rental-term-sheet-map.ts","limaone_logo.png","components/quote-pdfs/styles.ts","components/quote-pdfs/RentalTableSection.tsx","components/quote-pdfs/rental-term-sheet-pdf/RentalCalculationSheet.tsx","components/quote-pdfs/rental-term-sheet-pdf/RentalDisclosureSheet.tsx","components/quote-pdfs/FixAndFlipTableSection.tsx","components/quote-pdfs/InternalDiscussionSection.tsx","components/quote-pdfs/InternalSelectionSection.tsx","components/quote-pdfs/rental-term-sheet-pdf/RentalInternalSelectionSheet.tsx","lib/models/rental/rental-summary-term-sheet-map.ts","components/quote-pdfs/rental-term-sheet-pdf/RentalSummarySheet.tsx","components/quote-pdfs/rental-term-sheet-pdf/index.tsx","lib/models/rental/rental-premier-term-sheet-map.ts","components/quote-pdfs/RentalPremierTermSheet.tsx","lib/models/short-term/short-term-term-sheet-map.js","lib/stf-pdf-utils.ts","components/quote-pdfs/RepInfoTableSection.tsx","components/quote-pdfs/stf-term-sheet-pdf/STFCalculationSheet.tsx","components/quote-pdfs/stf-term-sheet-pdf/STFInternalSelectionSheet.tsx","components/quote-pdfs/stf-term-sheet-pdf/index.tsx","lib/pdf-generator.js","hooks/useConfirmation.ts","components/icons/AnnotationIcon.tsx","components/icons/ClockIcon.tsx.tsx","components/icons/DotsHorizontalIcon.tsx","components/icons/ExclamationTriangleIcon.tsx","components/icons/UserIcon.tsx","components/common-quote/FormRateLockStatus.tsx","components/common-quote/FormSubmittedStatus.tsx","components/common-quote/FormQuoteSummary.tsx","components/icons/BriefcaseIcon.tsx","components/icons/BuildingIcon.tsx","components/common-quote/FormSfAccountDealSelector.tsx","components/icons/DotsVerticalIcon.tsx","components/common-quote/FormSubmitButton.tsx","components/common-quote/FormSfActions.tsx","components/icons/InfoCircleOutline.tsx","components/icons/TimesCircleOutline.tsx","components/icons/WarningTriangleOutline.tsx","hooks/useFormCalculationWarnings.ts","lib/models/form-status-colors.ts","components/common-quote/FormCalcStatusList.tsx","components/common-quote/FormCalcSummary.tsx","components/quote/QuoteSummaryBar.tsx","components/common-quote/SaveAsQuoteDialog.tsx","components/MobileTopButton.tsx","components/quote/QuoteBoxBottom.tsx","components/icons/Calculator.tsx","components/icons/DocumentReportIcon.tsx","components/common-quote/FormHeading.tsx","components/TabSwitcher.tsx","components/quote/QuoteFormHeading.tsx","components/common-quote/FormQuoteActions.tsx","components/quote/QuoteBoxTop.tsx","lib/models/rental/rental-premier-form-selects.model.ts","lib/models/short-term/short-term-form-selects.model.ts","components/common-quote/FormSectionHeader.tsx","hooks/useFieldFast.jsx","hooks/useInProgressDisable.ts","components/form-fields/CheckboxField.tsx","components/form-fields/SelectField.tsx","components/form-fields/TextInputField.tsx","components/rental-quote/RentalBorrowerInformationForm.tsx","components/icons/ArrowDownIcon.tsx","components/icons/ArrowUpIcon.tsx","components/common-quote/BuyUpDownTable.tsx","components/form-fields/SliderField.tsx","components/rental-quote/RentalPricingForm.tsx","components/common-quote/FormCalculationErrors.tsx","components/rental-quote/RentalPropertySummary.tsx","components/stf-quote/FixAndFlipTierTable.tsx","components/form-fields/BorrowerTierSlider.tsx","components/stf-quote/BorrowerInformationForm.tsx","components/stf-quote/DealTermsForm.tsx","components/stf-quote/LoanSummaryForm.tsx","components/stf-quote/LoanTermsForm.tsx","hooks/useScrollSpy.ts","hooks/useSectionValidation.ts","components/icons/CheckCircle.tsx","components/icons/TimesCircle.tsx","components/common-quote/FormNavigation.tsx","components/common-quote/FormTabsContainer.tsx","components/common-quote/Discussion.tsx","components/common-quote/QuoteOwnerOverride.tsx","components/common-quote/ExceptionSubmitButton.tsx","components/common-quote/AutoException.tsx","components/common-quote/ExceptionOptions.tsx","components/common-quote/RateOverride.tsx","components/common-quote/ManualException.tsx","components/common-quote/OverrideForm.tsx","components/quote/QuoteOverrideContent.tsx","lib/models/short-term/short-term-loan-calculations-map.ts","components/stf-quote/LoanCalculationsAndTerms.tsx","components/form-fields/RadioField.tsx","components/form-fields/SwitchField.tsx","components/rental-quote/RentalScenarioTableInput.tsx","components/rental-quote/RentalScenarioTableNumber.tsx","components/rental-quote/RentalScenarios.tsx","components/quote/QuoteCalcInfo.tsx","components/quote/QuoteFormTabs.tsx","components/quote/FixAndFlipQuoteForm.tsx","components/quote/RentalQuoteForm.tsx","components/RouteLeavingGuard.tsx","hooks/useQuery.tsx","views/QuoteView.tsx","views/QuotesByBorrowerView.tsx","routes/index.ts","views/MyQuotesView.tsx","views/QuotesByUserView.tsx","views/BrokerQuotesView.tsx","views/QuotesByBrokerView.tsx","views/LogoutView.tsx","routes/AppRoutes.tsx","theme/theme-config.ts","App.tsx","reportWebVitals.ts","serviceWorker.ts","index.tsx"],"names":["ApiUtils","process","SalesforceApi","email","axios","get","this","_baseUrl","toLowerCase","_baseSearchUrl","accountId","query","encodeURIComponent","getBaseSalesforceApiUrl","getBaseSalesforceSearchApiUrl","UserApi","username","request","put","id","preferences","post","reduction","getBaseApiUrl","UserContext","React","createContext","undefined","UserContextProvider","children","useOktaAuth","authState","oktaAuth","useState","userInfo","setUserInfo","sfUserInfo","setSfUserInfo","sfAccounts","setSfAccounts","setPreferences","userRole","setUserRole","isEmployee","role","fetchUserInfo","useCallback","oktaInfoPromise","getUser","userInfoPromise","then","info","a","getUserProfile","Promise","all","sfProfileData","data","brokers","sort","b","name","getUserPreferences","res","userPrefs","JSON","parse","fetchSalesforceAccounts","getAccounts","catch","err","console","error","savePreferencesHelper","incoming","updateUserPreferences","saveUserPreferences","fetchUserPreferences","prefResponse","updatedPreferences","successful","useEffect","isAuthenticated","Provider","value","user","sfProfile","exceptionBalance","userPreferences","oktaInternalAuthConfig","baseUrl","issuer","clientId","redirectUri","window","location","origin","scopes","authParams","oktaExternalAuthConfig","lightMode","darkMode","sidebar","FormLoadingOverlay","label","loadingOverlayBg","useColorModeValue","opacity","position","top","left","height","width","zIndex","backgroundColor","maxHeight","justifyContent","alignItems","flexDirection","thickness","speed","emptyColor","color","size","as","marginTop","fontWeight","LoginSSOView","history","useHistory","loginWithSingleSignOn","isLoginRedirect","handleLoginRedirect","signInWithRedirect","push","localStorage","removeItem","x","maxW","minHeight","padding","boxShadow","maxWidth","w","OktaSignInWidget","config","onSuccess","onError","oktaConfig","setConfig","input","setInput","widgetRef","useRef","current","widget","OktaSignIn","showSignInToGetTokens","el","on","context","document","getElementById","addEventListener","e","target","remove","isInternal","split","getLoginConfig","SignInWidgetWrapper","ref","styled","div","LoginView","overflowY","flexDir","paddingX","paddingY","src","logo","alt","fontSize","textAlign","style","tokens","MenuIcon","props","xmlns","viewBox","fill","className","stroke","strokeLinecap","strokeLinejoin","strokeWidth","d","QuoteApi","quote","allquotes","params","delete","text","quoteId","commentId","status","fee","rate","productType","loanProduct","useUser","useContext","Error","CollectionIcon","FolderIcon","UserGroupIcon","elevatedUsers","externalUsers","internalUsers","autoExceptionUsers","brokerRetailUsers","isElevatedUser","includes","isInternalUser","isQuoteOwner","quoteOwner","activeUser","oktaEmail","defaultCheck","toLocaleLowerCase","brokerEmails","map","broker","NavigationLinkService","numberOfBrokers","links","sidebarLinks","icon","path","badge","LogoutIcon","PencilAltSolid","fillRule","clipRule","ModalWrapper","footer","isOpen","onClose","title","isCentered","PinnedItemsModal","items","selectedItemValues","open","handleOpen","handleSave","isLoading","selected","setSelected","handleChange","onSelect","itemId","newSelected","filter","spacing","onClick","loadingText","variant","defaultValue","listStyleType","margin","maxH","overflow","item","marginLeft","onChange","toString","PinnedItems","savePreferencesKey","pathValue","useLocation","pinnedItemIds","setPinnedItemIds","pinnedItems","setPinnedItems","isModalOpen","setIsModalOpen","setIsLoading","handleModalVisibility","onSaveClick","selectedItems","newPreferences","length","marginRight","marginBottom","textTransform","letterSpacing","minW","Link","to","pathname","transition","useGetUserRole","ShowForRole","roles","hideForAdmin","SidebarInnerWrapper","SidebarLogoAndLinks","SidebarProfile","StyledSidebarBackdrop","StyledSidebar","sidebarBg","colorMode","Sidebar","useColorMode","toggleColorMode","userContext","setSidebarLinks","pathWithQuery","setPathWithQuery","onToggle","userAccounts","setUserAccounts","search","getSideBarLinksByRole","fetchUsers","getQuoteUsers","salesRepItems","useMemo","firstName","lastName","userID","brokerAccountItems","accountid","borrowerAccountItems","display","paddingTop","_focus","link","createElement","alignSelf","pinnedBrokerAccountIds","pinnedUserIds","pinnedBorrowerIds","trigger","cursor","Moon","marginY","h","Sun","_hover","AuthenticatedLayout","useMediaQuery","isLargerThan1280","setIsOpen","currentPath","setCurrentPath","defaults","headers","common","getAccessToken","bgColor","headerBgColor","headerBorderColor","interceptors","use","Limakey","Cancel","base","xl","background","borderBottom","borderBottomStyle","borderBottomColor","logoWhite","borderRadius","MainContainer","isDesktop","bg","LayoutWrapper","md","main","GuardedRoute","Component","component","exact","key","fallback","rolesNeededtoActivateRoute","setStatus","minH","render","OptionInput","selectedItem","inputRef","showClearButton","handleInputClick","handleInputBlur","handleClearSelection","handleInputChange","placeholder","isDisabled","inputValue","setInputValue","debouncedInput","delay","debouncedValue","setDebouncedValue","handler","setTimeout","clearTimeout","useDebounce","onFocus","focus","onBlur","type","Close","memo","ListItem","li","OptionListItem","index","hasFocus","isSelected","itemRef","tabIndex","onMouseDown","OptionList","handleItemClick","handleClick","list","querySelector","scrollTop","listStyle","i","useAsyncSearch","searchFn","initialItems","setItems","isMounted","loadOptions","callback","loader","filterItems","indexOf","options","filteredItems","ComboBox","itemSelected","onSearch","setSelectedItem","setCursor","searchItems","setOptions","createRef","onSelectedItem","onKeyDown","stopPropagation","onItemSelect","preventDefault","borderWidth","toFixed","fractionDigits","normalized","formatMoney","fixedNunber","replace","formatDateLocal","date","newDate","Date","timezoneOffsetMins","getTimezoneOffset","local","getTime","format","formatDateTime","formatTimestampWithoutTimeZone","allTableColumns","Header","accessor","sortType","valueA","values","valueB","Cell","cell","isTruncated","sortDescFirst","formatDistanceToNow","formatDateForSummary","substring","addSuffix","AddQuoteMenu","menuItemClickHandler","action","placement","Button","leftIcon","Add","boxSize","EmptyTableInnerFlexContainer","EmptyQuotesTable","showAddQuoteMenu","borderStyle","DeleteIcon","EditIcon","DataTable","columns","globalFilter","handleAction","loading","tableData","Array","tableColumns","column","useTable","useGlobalFilter","useSortBy","usePagination","getTableProps","getTableBodyProps","headerGroups","page","prepareRow","setGlobalFilter","canNextPage","canPreviousPage","nextPage","previousPage","rows","state","pageIndex","pageSize","container","whiteSpace","borderCollapse","borderSpacing","headerGroup","getHeaderGroupProps","getHeaderProps","getSortByToggleProps","span","pl","mb","isSorted","isSortedDesc","TriangleDown","TriangleUp","ArrowUpDown","row","getRowProps","cells","getCellProps","isNumeric","original","userId","quoteType","lastLocation","marginX","sm","flex","disabled","DeleteQuoteDialog","onCloseHandler","onConfirmHandler","isQuoteDeleting","cancelRef","handleClose","leastDestructiveRef","colorScheme","ml","QuotesTableToolbar","tableTitle","flexWrap","gridGap","pointerEvents","Search","QuotesTable","quotes","refetchQuotes","toast","useToast","isDeleteDialogOpen","setDeleteDialogOpen","quoteToDelete","setQuoteToDelete","setIsQuoteDeleting","toastVariant","deactivateQuote","description","isClosable","finally","newQuoteHandler","QuoteTableContainer","YesNo","QuoteTypeEnum","RentalProduct","RentalPremierProduct","FixAndFlipProduct","emptyTableLabel","in","offsetY","RentalOverrideOptions","entity","finalOrigFeeOverride","rateReductionOverride","finalRateOverride","exceptionType","autoRate","autoFee","commissionReduction","processingFeeOverride","splitProcessingFee","achRequired","Yes","achExempt","forEach","prop","RentalUnderwriterFields","legalFee","taxImpound","insuranceImpound","RentalLolaFields","interestRateAddOn","originationPointsAddOn","applicationFee","documentFee","processingFee","lenderFinanceAppraisalFee","rpolt6","rpogt6","purchase","LoanCostOverride","iREscrowOverrideInt","iREscrowOverrideMoneyAmt","taxEscrowAmount","insEscrowAmount","LoanSummary","loanPurpose","propertyAddress","city","zip","propertyType","formattedAddress","LoanTerm","channel","referralFee","No","brokerFee","loanTerm","guaranty","appraisalFee","brokerProcessingFee","projectInspectionFee","internalRefinance","exitFeeCheck","deferredOrigPercent","DealTerms","targetCloseDate","timeCloseToPayoff","lesserOfLotOrPurchase","rehabConBudget","totalPurchasePrice","afterCompletedVal","refinance","existingDebtStatus","cashOut","heavyRehab","originalPurchaseDate","payoff","buyUpPercentage","buyDownPercentage","isZeroOrigFee","numOfProperties","submittedDate","BorrowerInfo","primaryGuarantor","secondaryGuarantor","borrowerIsReferral","borrowingEntity","fnfCompletedInThreeYears","buildsCompletedInThreeYears","completedTransactions","qualifyingFICO","combinedLiquidity","usCitizen","borrowerTier","altTier","completedExits","FixAndFlipOverrideOptions","blendedLTCOverride","purchaseLTCOverride","arvOverride","ShortTermUnderwriterFields","ShortTermLolaFields","ShortTermAdjustmentOptions","adjustedARV","adjustedPurchaseLTC","adjustedBlendedLTC","LoanCostOverrideSTF","QuoteUtils","overrides","normalizedValues","Object","entries","val","formData","getKeyValue","obj","underwriterFields","lenderFinance","leverage","exceptionPricingOverride","loanSummary","dealTerms","borrowerInfo","loanCostOverride","objects","keys","prototype","hasOwnProperty","call","quoteName","overrideMaster","sfaccountid","sfdealid","campaignId","campaignName","campaignExpirationDate","campaignIncentive","campaignCode","normalizeOverrideValues","appraisedVal1","creditScore","submissionType","annualTaxes","propertiesNY","annualInsurance","refiL1cFixNFlip","buyUpDownOption","annualFloodInsurance","mortgagePayoffs","appraisedVal3","totalCosts1","monthlyRent","sreoPropertyNumber","purchasePrice","prepaymentPenalty","borrowerNetWorth","yieldSpread","parseFloat","annualHOA","condo","fixToRent","propertyVal","buyUpDownPercentage","isTier5Borrower","premier","collateral","collateralCondos","openPrepayOption","propertyManagementFee","seasonalRental","fiveNineUnit","twoFourUnit","vacantProperty","scenarioId","included","preferred","ltvPercentage","QuotesView","setQuotes","accounts","setAccounts","setLoading","selectedAccount","setSelectedAccount","accountItems","account","activeUsers","fetchAllQuotes","getQuotes","activeQuotes","quoteTypeLabel","PrettyPrintQuoteType","createdBy","firstname","lastname","fetchQuotes","getQuotesById","CommentsContext","CommentsContextProvider","comments","setComments","commentsLoading","setCommentsLoading","fetchComments","getQuoteComments","submitComment","comment","createQuoteComment","newComment","deleteComment","deactivateComment","FormSkeletonLoader","FixAndFlipForm","enabled","tier","rentalUnitsOwned","baseYupObject","yup","min","when","is","schema","otherwise","required","max","matches","externalYupObject","FixAndFlipFormSchema","ExternalFixAndFlipFormSchema","selectRentalProduct","selectBuyUpBuyDown","selectPrepayPenalty","RentalForm","underwriterStatus","mortagePayoffs","yieldSpendPremium","RentalPremierForm","RentalFormSchema","ExternalRentalFormSchema","RentalPricing","referral","WarningDialog","contentText","titleText","confirmText","danger","closeOnOverlayClick","FormStaleQuoteDialog","metadata","calculateHandler","isStaleDialogOpen","setStateDialogOpen","checkStaleQuote","createdDate","updatedDate","pricingLastUpdated","rateLock","rateLockActive","calculateQuote","formValues","RentalFormToQuote","quoteTransform","scenario","GenerateRentalQuoteScenarios","RentalFormToPremierQuote","FixAndFlipFormToQuote","quoteToCalculate","FixAndFlipQuoteDetail","calculation","out","RentalQuoteDetail","CalculationApi","getBaseCalcUrl","BaseQuoteHandler","getQuoteById","result","resultData","response","getCalculation","quoteToSave","createQuote","quoteToCopy","quoteToUpdate","updateQuote","quoteToSubmit","submitQuoteToSalesforce","submitQuoteForReview","submitQuoteExceptions","created_on","updated_at","valid","submittedToSalesforce","exceptionStatus","ownerRole","ownerBalance","milestone","milestoneUpdatedAt","RentalQuoteHandler","warnings","getWarningsFromCalculation","saveMetric","formatQuoteForAction","newQuoteId","hasQuoteBeenSubmitted","hasExceptionSubmitted","updatedQuote","isCopy","hasSubmittedQuote","metric","preferredScenarioId","find","metricOptions","env","producttype","quoteproducttype","quotetype","quoteid","quoteloanamount","scenarios","loanAmt","calc","validationErrors","errors","rateLLPAsFactored","rateLLPAs","feeLLPAsFactored","feeLLPAs","overridePricing","calcStatus","RentalPremierQuoteHandler","ShortTermQuoteHandler","updatedQuoteId","LTCCalcOnPurchaseRehab","QuoteHandlerFactory","QuoteService","getQuoteInstance","load","calculate","copy","update","save","submitForReview","submit","QuoteContext","quoteReducer","payload","isDirty","hasCalculated","fixAndFlipCalc","quoteCalculation","quoteMetadata","isNewQuote","sfIntegration","originalsfcampaignid","originalsfaccountid","originalsfdealid","requiresQuoteResubmission","rentalQuote","rentalOverrides","rentalQuoteScenarios","hasErrors","hasFormErrors","incomingSfAccount","incomingSfDeal","incomingSfCampaign","incomingCampaignName","incomingCampaignExpirationDate","incomingCampaignIncentive","incomingCampaignCode","originalAccountId","originalDealId","originalCampaignId","quoteFromState","hasSfCampaignChanged","requiresRecalculation","salesforceIntegration","isCalculating","isSubmitting","submittedQuote","hasCalculationErrors","calcQuote","fixNFlipCalc","stfQuote","LoanCosts","calculationWarnings","splice","areRentalScenariosEqual","every","initialQuoteState","isSaving","quoteFormErrors","QuoteContextProvider","useReducer","dispatch","sendToast","fetchQuote","loadQuoteByType","loadedQuote","saveQuoteMetrics","saveMetricByType","saveQuoteHelper","saveQuoteByType","submitQuoteHandler","submitQuoteByType","calculateQuoteByType","calculatedQuote","log","deleteQuote","isOwned","useComments","useQuote","useGetFormTabs","calculationExists","isRestrictedZip","getTabs","getTabsWithoutOverrides","flattenObject","flattened","assign","overrideLabelMap","bulletListToArray","trim","checkIfDecimal","Math","floor","rentalSummary","transformer","payoffsLoanCosts","labelIsAccessor","impounds","labelAlt","showLabelAltOnCondition","superscript","totalRow","rates","payments5IO25ARM","payments","rentalIncome","rateFeatures","labelOnly","additionalCashRequirements","internalRentalLoanItems","internalRentalPropertyItems","styles","StyleSheet","create","body","paddingHorizontal","twoColumnGrid","marginHorizontal","header","paddingBottom","headerImageTitleContainer","headerImage","bottom","right","addressText","blackText","grayText","blueText","whiteText","redText","greenText","fontFamily","lineHeight","textSmMd","textMd","textLg","textSm","textSmBlock","table","tableRow","paddingVertical","tableRowNoBorder","tableCell","flexGrow","tableCell2","tableCell3","tableStripe","textAlignRight","textAlignCenter","nameHeader","infoMedium","promotionText","RentalTableSection","section","valueMap","rowStyling","renderRowLabel","wrap","RentalCalculationSheet","rentalScenarios","quoteDate","payoffsLoanCostsValues","campaignFeeIncentive","campaignFeeIncentiveIndex","findIndex","originationFeeIndex","getPayoffsLoanCostsByChannel","formattedImpounds","getImpounds","pdfLogo","borderTop","fixed","pageNumber","totalPages","RentalDisclosureSheet","armLoanFeatureListItems","interestRateTerm","getArmLoanFeatureListItems","Fixed","achFee","join","FixAndFlipTableSection","InternalDiscussionSection","discussionArray","marginVertical","created","InternalSelectionSection","selectionArray","textColor","RentalInternalSelectionSheet","eligibilityArray","overrideArray","feeLLPAsArray","rateLLPAsArray","warningsArray","preferredScenario","borrowerSummary","propertySummary","summaryTerms","splitText","abs","getSummaryTerms","closingCashToBorrower","summaryTermValues","cashToBorrowerIndex","cashDueAtClosingIndex","RentalSummarySheet","userProfile","borrowerSummaryValues","flattenedRentalQuote","sheetTitle","eocTitle","lineHeightNormal","lg","bold","uppercase","blue","summaryInfoWrapper","borrowerSummaryContainer","white","summaryColLabel","propertySummaryContainer","col","alignRight","alignCenter","fontStyle","xs","calculationTable","summaryRow","summaryCol","centerStripe","signatureContainer","fullName","phone","paddingLeft","paddingRight","borderTopWidth","borderColor","disclosureContainer","xxs","darkBlue","Font","register","family","fonts","roboto","robotoBold","robotoItalic","RentalTermSheet","prepaymentPenaltySelected","stringWarnings","unshift","toLocaleDateString","pricingUpdateTimestamp","arr","calcScenarios","ltvEligibility","spread","internalListItems","RentalPremierTermSheet","interestRateValue","openPrepayOptionSelected","amortizationPeriod","interestRateName","openPrepay","indexRate","dateRate","propertyDetails","loanTermsSummary","borrowerInformation","loanStructureSummary","estimatedCashToClose","loanCostsPaidAtClosing","totalLoanCostsAtClosing","loanCostsPaidOutsideClosing","leverageCalculations","internalBuyerItems","internalStfPropertyItems","internalStfLoanItems","getLoanStructureSummaryLabels","interestReserve","loanStructureSummaryValues","shift","interestReserveIndex","RepInfoTableSection","STFCalculationSheet","flattenedQuoteCalculation","loanCostsPaidAtClosingSection","flattenedCalculation","loanCostsPaidAtClosingValues","getLoanCostsPaidAtClosing","loanTermsSummarySection","bridgePlusValues","pop","deferredOriginationFee","getLoanTermsSummaryByProductType","loanStructureSummarySection","leverageCalculationsSection","leverageCalculationsValues","currentProjectedLTVLTARVlabel","maxLTVRatioLabel","getLeverageCalculationsLabels","loanCostsPaidOutsideClosingSection","loanCostsPaidOutsideClosingValues","drawFeeAmount","exitFee","getLoanCostsPaidOutsideClosingByProductType","termSheetTitle","BridgePlus","STFInternalSelectionSheet","internalBuyerItemsSection","internalBuyerValues","altTierIndex","completedExitsIndex","getInternalBuyerItemsByProductType","internalStfPropertyItemsSection","internalStfPropertyValues","getInternalStfPropertyItemsByProductType","internalStfLoanItemsSection","hybridAppraisal","internalStfLoanItemValues","hybridAppraisalIndex","getInternalStfLoanItems","FixAndFlipTermSheet","getFileName","filename","filenameArr","replaceAll","generateRentalPdf","documentData","generateRentalTermPdf","generateRentalPremierTermPdf","pdf","toBlob","blob","saveAs","generateShortTermFinancePdf","useConfirmation","toPromise","resolve","dialogOpen","toggleOpen","performAction","AnnotationIcon","ClockIcon","DotsHorizontalIcon","ExclamationTriangleIcon","UserIcon","FormRateLockStatus","mr","startDate","customerEndDate","FormSubmittedStatus","requiresResubmission","hasBeenSubmitted","FormQuoteSummary","quoteContext","useFormikContext","isValid","dirty","quoteHandler","moment","commonDisable","IconButton","rightIcon","ChevronUp","ChevronDown","BriefcaseIcon","BuildingIcon","findAccountById","getAccountById","searchAccountsByQuery","getAccountsByQuery","FormSfAccountDealSelector","onAccountDealUpdate","dealId","hasSubmitted","dealsLoading","setDealsLoading","hasSelected","setHasSelected","_isMounted","useDisclosure","isAccountPopoverOpen","onAccountPopoverClose","onAccountPopoverOpen","onOpen","isDealPopoverOpen","onDealPopoverClose","onDealPopoverOpen","isChangedSfDialogOpen","setIsChangedSfDialogOpen","hasDialogBeenShown","setHasDialogBeenShown","sfDeals","setSfDeals","sfAccountsItems","sfDealsItems","deal","dealname","dealid","sfCampaignItems","selectedSfAccount","setSelectedSfAccount","selectedSfDeal","setSelectedSfDeal","selectedSfCampaign","setSelectedSfCampaign","fetchDeals","getDeals","deals","handleAccountSelect","haveSfValuesChanged","incomingAccountId","incomingDealId","incomingCampaignId","selectedDeal","selectedCampaign","selectedSfDealValues","accountFromCache","sfDeal","textOverflow","p","campaign","DotsVerticalIcon","FormSubmitButton","isSubmitDialogOpen","setIsSubmitDialogOpen","canSubmitQuote","disableSubmit","handleSubmitSalesFinalized","submitSalesFinalized","isAttached","borderLeft","borderLeftColor","FormSfActions","handleAccountDealUpdate","InfoCircleOutline","TimesCircleOutline","WarningTriangleOutline","useFormCalculationWarnings","validationWarnings","setState","warning","FormStatusColorMap","red","yellow","brand","redDark","yellowDark","brandDark","FormCalcStatusList","infoList","colors","WarningContent","animateOpacity","ul","FormCalcSummary","isLargerThan1000","hasWarnings","pricingInfo","QuoteSummaryBar","formActionHandler","SaveAsQuoteDialog","initialName","newQuoteName","setNewQuoteName","pb","copyOfValues","MobileTopButton","forwardRef","mainContainer","scrollTo","behavior","scrollToTop","ArrowUp","_active","QuoteBoxBottom","Calculator","DocumentReportIcon","FormHeading","calculating","generatingPdf","exportHandler","touched","setFieldValue","touchedLength","setTouchedLength","numberOfTouchedFields","resetCalculationStatus","updateFormStatus","handleGeneratePdfClick","disablePdf","some","borderTopRadius","borderBottomRadius","minWidth","CheckCircle","TabSwitcher","tabItems","onTabClick","activeIndex","setTabIndex","textDecor","handleButtonClick","QuoteFormHeading","formExportHandler","quoteTabs","QuoteActionButtonStyle","iconSpacing","FormQuoteActions","buttonText","Repeat","Copy","Delete","textDecoration","QuoteBoxTop","loadingPdf","selectRentalPremierProduct","selectOpenPrepay","selectRentalPremierPrepayment","selectRentalPremierPrepaymentFixed","selectLoanPurpose","selectLoanProduct","selectPropertyType","selectChannel","brokerRetailSelectChannel","selectLoanTerm","selectFixAndFlipLoanTerm","selectGuaranty","selectDebtStatus","selectDeferredOrig","selectStates","FormSectionHeader","isIconVisible","setIconVisible","href","scrollMarginTop","onMouseEnter","onMouseLeave","useFieldFast","useField","field","meta","helpers","latestRef","setValue","setTouched","setError","useInProgressDisable","CheckboxField","isChecked","checked","SelectField","helperText","selectedValue","isInvalid","option","at","renderHelperText","TextInputField","isReadOnly","formatNumber","formatOptions","fieldProps","select","NumberFormat","isNumericString","thousandSeparator","onValueChange","vals","css","RentalBorrowerInformationForm","setFieldTouched","initialValues","loanProducts","setLoanProducts","hasIntialValue","setHasInitialValue","templateColumns","gap","colSpan","getChannelSelectByRole","ArrowDownIcon","ArrowUpIcon","BuyUpDownTable","buyUpDownRatio","SliderField","step","precision","sliderThumbBg","focusThumbOnChange","onChangeEnd","handleChangeEnd","border","RentalPricingForm","validateForm","prepayOptions","product","float","CalculationErrors","calculationErrors","WarningIcon","RentalPropertySummaryForm","isSectionValid","setIsSectionValid","sectionWarnings","SetSectionWarnings","propertyScenarioKeys","validatePropertyScenarios","setFormWarnings","InfoOutline","initialScale","allowLeadingZeros","FixAndFlipTierTable","constructionTable","BorrowerTierSlider","altLabel","setMin","disableAltTier","isNewConstructionTier","hasCalcTier","setFieldFastValue","BorrowerInformationForm","justify","DealTermsForm","lesserOfLotOrPurchaseLabel","setLesserOfLotOrPurchaseLabel","initialLoanPurpose","Number","LoanSummaryForm","slice","LoanTermsForm","setChannel","useScrollSpy","selectors","offset","elementId","activeId","setActiveId","setScrollTop","element","elements","selector","debouncedScroll","debounce","scrollPosition","scrollHeight","containerHeight","clientHeight","isAtEnd","round","inViewElements","offsetTop","cancel","removeEventListener","useSectionValidation","sections","touchedFields","formErrors","validatedSections","setValidatedSections","validateSection","errorCount","touchCount","fields","numberOfOptionalFields","validateSections","validated","touchedKeys","errorKeys","TimesCircle","FormNavigation","getStatusColor","FormTabsContainer","formStatusSections","overrideContent","calcInfo","discussionContent","isFnf","initialQuoteType","Discussion","scrollRef","setComment","usernameText","commentText","updateComments","submitHelper","scrollIntoView","deleteHelper","mt","px","py","justifySelf","shiftKey","resize","QuoteOwnerOverride","brokerItems","reduce","filtered","brokerItem","handleOwnerOverride","ExceptionSubmitButton","loanAmount","noException","handleConfirm","statusDisable","AutoException","disableInputs","firstUpdate","formatNumberWithCommas","fetchAutoCommission","getAutoCommission","formattedCommissionReduction","commission_reduction","isLoanAmountUnderMin","isBalanceUnderLoanAmt","selectRate","rounded","direction","hasArrow","WarningTwo","ExceptionOptions","setSelectedValue","selectExceptionStatus","selectExceptionType","RateOverride","maxRate","rateReduction","currRate","handleScenarioPercentages","isReduction","setIsReduction","initFixedInterestRate","ManualException","findScenarioPercentages","stfCalc","rentalCalc","showCommission","disableCommission","RateFeeLLPA","finalOrigFee","originationFeePercent","BlendedLTCCalc","maxBlendedLTCRatio","maxLTCOnPurchase","LTVARVCalc","maxLTVRatio","selectACH","finalRate","OverrideForm","totalLoanAmt","formHandler","isManualException","setIsManualException","OverrideOptions","clearHandler","submitExceptionHandler","overrideInputs","inputs","displayOverrides","allowAutoException","baseRate","override","QuoteOverrideContent","preferredLoanAmt","blendedLTCCalc","ltcCalcOnPurchaseRehab","ltvARVCalc","cashToClose","loanCosts","rateFeesLLPA","canOverride","finalLoanAmount","LoanCalculationsSection","labelColor","CalculationSection","LoanCalculationsAndTerms","checkTotal","checkAmount","updatedLoanCosts","CashToClose","Payments","RadioField","radioProps","htmlFor","SwitchField","changeHandler","switchProps","setChecked","RentalScenarioTableInput","isEditing","setIsEditing","initialValue","Check","Edit","RentalScenarioTableNumber","symbol","ScenarioTable","headerTextColor","headerBg","primaryScenarioColor","RentalScenarios","setPreferredLoanAmt","selectedLtvValue","setSelectedLtvValue","updateScenario","updateFields","onPreferredScenarioToggle","preferredScenarioLoanAmt","includedInQuote","onScenarioQuoteToggle","originationFee","buyUpDownFee","rentDebtRatio","QuoteCalcInfo","QuoteFormTabs","FixAndFlipQuoteForm","submitHandler","saveHandler","deleteHandler","form","isPdfLoading","setPdfLoading","sfValues","fixAndFlipQuote","generatePdf","validateOnBlur","validateOnChange","validateOnMount","onSubmit","onReset","validationSchema","flexShrink","RentalQuoteForm","setInitialRentalForm","setLoadingPdf","savePdf","normalizeQuoteForType","hasScenarios","rental","premierForm","enableReinitialize","RouteLeavingGuard","navigate","shouldBlockNavigation","modalVisible","setModalVisible","setLastLocation","confirmedNavigation","setConfirmedNavigation","message","_","nextLocation","useQuery","URLSearchParams","QuoteConsumer","goBack","ArrowBack","currentPathname","QuoteView","useParams","setQuoteType","quoteParams","stf","BorrowerByIdQuotesView","routes","secured","ownerName","setOwnerName","activeBroker","setActiveBroker","selectedBrokerItem","setSelectedBrokerItem","getQuotesForReviewById","selectBroker","setBroker","getBrokerQuoteById","borrower","setBorrower","getBorrowerQuoteById","tokenManager","clear","logout","AppRoutes","onAuthResume","isLoggedIn","breakpoints","createBreakpoints","theme","extendTheme","initialColorMode","useSystemColorMode","heading","components","baseStyle","variants","_disabled","Table","th","FormLabel","FormError","Form","Input","outline","_autofill","textFillColor","Checkbox","control","Select","OktaAuth","isDevUrl","App","restoreOriginalUri","_oktaAuth","originalUri","toRelativeUrl","onAuthRequired","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","Boolean","hostname","match","ReactDOM","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.023c4b6c.chunk.js","sourcesContent":["export class ApiUtils {\n public static getBaseApiUrl(): string | undefined {\n return process.env.REACT_APP_BASE_API_URL;\n }\n\n public static getBaseCalcUrl(): string | undefined {\n return process.env.REACT_APP_CALC_API_URL;\n }\n\n public static getBaseSalesforceApiUrl(): string | undefined {\n return process.env.REACT_APP_BASE_SF_API_URL;\n }\n\n public static getBaseSalesforceSearchApiUrl(): string | undefined {\n return process.env.REACT_APP_BASE_SF_SEARCH_API_URL;\n }\n\n public static getBaseMetricApiUrl(): string | undefined {\n return process.env.REACT_APP_BASE_METRIC_API_URL;\n }\n}\n","import axios, { AxiosResponse } from \"axios\";\nimport { SFAccount } from \"../lib/models/sf-account.model\";\nimport { SFDeal } from \"../lib/models/sf-deal.model\";\nimport { SFUserProfile } from \"../lib/models/sf-user-profile.model\";\nimport { ApiUtils } from \"./ApiUtils\";\n\nexport class SalesforceApi {\n private static readonly _baseUrl = ApiUtils.getBaseSalesforceApiUrl();\n\n private static readonly _baseSearchUrl =\n ApiUtils.getBaseSalesforceSearchApiUrl();\n\n public static getUserProfile(\n email: string\n ): Promise> {\n return axios.get(\n `${this._baseUrl}/userProfile?email=${email.toLowerCase()}`\n );\n }\n\n public static getAccounts(\n email: string\n ): Promise> {\n return axios.get(\n `${this._baseSearchUrl}/accounts?username=${email.toLowerCase()}`\n );\n }\n\n public static getDeals(accountId: number): Promise> {\n return axios.get(\n `${this._baseSearchUrl}/deals?accountid=${accountId}`\n );\n }\n\n public static getAccountById(\n accountId: string\n ): Promise> {\n return axios.get(`${this._baseSearchUrl}/accounts/${accountId}`);\n }\n\n public static getAccountsByQuery(\n query: string\n ): Promise> {\n return axios.get(\n `${this._baseSearchUrl}/search?type=account&query=${encodeURIComponent(\n query\n )}`\n );\n }\n}\n","import axios, { AxiosResponse } from \"axios\";\nimport { Preferences, UserPreference } from \"../lib/types/UserPreference\";\nimport { ApiUtils } from \"./ApiUtils\";\n\nexport type UserPreferencesRequest = {\n username: string;\n preferences: UserPreference;\n};\n\nexport class UserApi {\n private static readonly _baseUrl = ApiUtils.getBaseApiUrl();\n\n public static getUserPreferences(\n username: string\n ): Promise> {\n return axios.get(\n `${this._baseUrl}/userPreferences?email=${username.toLowerCase()}`\n );\n }\n\n public static updateUserPreferences(\n request: any\n ): Promise> {\n return axios.put(`${this._baseUrl}/userPreferences/${request.id}`, request);\n }\n\n public static saveUserPreferences(\n username: string,\n preferences: Preferences\n ) {\n const request = {\n username,\n preferences,\n };\n\n return axios.post(`${this._baseUrl}/userPreferences`, request);\n }\n\n public static getUserBalance(\n username: string | undefined\n ): Promise> {\n return axios.get(\n `${this._baseUrl}/userbalance?email=${username?.toLowerCase()}`\n );\n }\n\n public static updateUserBalance(\n username: string | undefined,\n reduction: string\n ): Promise> {\n return axios.put(\n `${this._baseUrl}/userbalance?email=${username?.toLowerCase()}`,\n { reduction }\n );\n }\n}\n","import { UserClaims } from \"@okta/okta-auth-js\";\nimport React from \"react\";\nimport { UserRole } from \"../lib/models/enums\";\nimport { SFAccount } from \"../lib/models/sf-account.model\";\nimport { SFUserProfile } from \"../lib/models/sf-user-profile.model\";\nimport { UserPreference } from \"../lib/types/UserPreference\";\n\nexport interface IUserContext {\n user: UserClaims | null;\n sfProfile: SFUserProfile | null;\n sfAccounts: Array;\n exceptionBalance: number | null;\n role: UserRole | null;\n isEmployee: boolean;\n userPreferences: UserPreference | null;\n savePreferencesHelper: (preferences: { [key: string]: any }) => Promise;\n}\n\nexport const UserContext = React.createContext(\n undefined\n);\n","import { UserClaims } from \"@okta/okta-auth-js\";\nimport { useOktaAuth } from \"@okta/okta-react\";\nimport React, { useState } from \"react\";\nimport { SalesforceApi } from \"../api/SalesforceApi\";\nimport { UserApi } from \"../api/UserApi\";\nimport { UserRole } from \"../lib/models/enums\";\nimport { SFAccount } from \"../lib/models/sf-account.model\";\nimport { Broker, SFUserProfile } from \"../lib/models/sf-user-profile.model\";\nimport { Preferences, UserPreference } from \"../lib/types/UserPreference\";\nimport { UserContext } from \"../state/user-context\";\n\nfunction UserContextProvider({ children }: { children: any }) {\n const { authState, oktaAuth } = useOktaAuth();\n const [userInfo, setUserInfo] = useState(null);\n const [sfUserInfo, setSfUserInfo] = useState(null);\n const [sfAccounts, setSfAccounts] = useState>([]);\n const [preferences, setPreferences] = useState(null);\n const [userRole, setUserRole] = useState(null);\n\n const isEmployee = (sfUserInfo && sfUserInfo.role !== \"External\") ?? false;\n\n const fetchUserInfo = React.useCallback(() => {\n if (userInfo === null) {\n const oktaInfoPromise = oktaAuth.getUser();\n\n const userInfoPromise = oktaInfoPromise.then(async (info: UserClaims) => {\n if (info.email) {\n return SalesforceApi.getUserProfile(info.email);\n }\n });\n\n Promise.all([oktaInfoPromise, userInfoPromise]).then(\n ([userInfo, sfProfileData]) => {\n setUserInfo(userInfo);\n\n if (!sfProfileData?.data) {\n setUserRole(\"External\");\n return;\n }\n\n setUserRole(sfProfileData.data.role);\n\n if (sfProfileData?.data.brokers) {\n sfProfileData.data.brokers = sfProfileData?.data.brokers.sort(\n (a: Broker, b: Broker) => {\n if (a.name < b.name) return -1;\n if (b.name < a.name) return 1;\n return 0;\n }\n );\n setSfUserInfo(sfProfileData.data);\n }\n\n if (userInfo.email) {\n UserApi.getUserPreferences(userInfo.email).then((res) => {\n const userPrefs = res.data;\n userPrefs &&\n setPreferences({\n id: userPrefs.id,\n preferences: JSON.parse(userPrefs.preferences as string),\n });\n });\n }\n }\n );\n }\n }, [userInfo, oktaAuth]);\n\n const fetchSalesforceAccounts = React.useCallback((email: string) => {\n if (!email) return;\n\n SalesforceApi.getAccounts(email)\n .then(({ data }) => {\n data && setSfAccounts(data);\n })\n .catch((err) => {\n console.error(\"Could not load accounts from Salesforce!\");\n });\n }, []);\n\n const savePreferencesHelper = async (incoming: Preferences) => {\n if (preferences?.id) {\n await updateUserPreferences(incoming);\n return;\n }\n\n await saveUserPreferences(incoming);\n };\n\n const fetchUserPreferences = async () => {\n if (!userInfo?.email) return;\n\n const prefResponse = await UserApi.getUserPreferences(userInfo.email);\n const { preferences, id } = prefResponse.data;\n\n preferences &&\n setPreferences({\n id,\n preferences: JSON.parse(preferences as string),\n });\n };\n\n const updateUserPreferences = async (incoming: Preferences) => {\n if (!userInfo || !userInfo.email || !preferences) return;\n\n let updatedPreferences: Preferences = {};\n\n if (preferences?.preferences) {\n updatedPreferences = { ...preferences.preferences };\n }\n\n updatedPreferences = { ...updatedPreferences, ...incoming };\n\n const res = await UserApi.updateUserPreferences({\n id: preferences.id,\n username: userInfo.email,\n preferences: updatedPreferences,\n });\n\n if (res.data.successful) {\n await fetchUserPreferences();\n }\n };\n\n const saveUserPreferences = async (incoming: Preferences) => {\n if (!userInfo || !userInfo.email) {\n return;\n }\n\n try {\n const res = await UserApi.saveUserPreferences(\n userInfo.email,\n incoming ?? {}\n );\n\n if (res.data.successful) {\n await fetchUserPreferences();\n }\n } catch (err) {\n console.error(\"Could not save user preferences!\");\n }\n };\n\n React.useEffect(() => {\n if (!authState || !authState.isAuthenticated) {\n setUserInfo(null);\n } else {\n fetchUserInfo();\n }\n }, [authState, setUserInfo, fetchUserInfo]);\n\n React.useEffect(() => {\n fetchSalesforceAccounts(sfUserInfo?.email ?? \"\");\n }, [sfUserInfo, fetchSalesforceAccounts]);\n\n return (\n \n {children}\n \n );\n}\n\nexport default UserContextProvider;\n","const oktaInternalAuthConfig = {\n baseUrl: `https://${process.env.REACT_APP_OKTA_DOMAIN}`,\n issuer: `https://${process.env.REACT_APP_OKTA_DOMAIN}`,\n clientId: process.env.REACT_APP_OKTA_CLIENT_ID,\n redirectUri: window.location.origin + \"/login/callback\",\n scopes: [\"openid\", \"profile\", \"email\"],\n authParams: {\n issuer: `https://${process.env.REACT_APP_OKTA_DOMAIN}`,\n },\n};\n\nconst oktaExternalAuthConfig = {\n baseUrl: `https://${process.env.REACT_APP_OKTA_DOMAIN_EXTERNAL}`,\n issuer: `https://${process.env.REACT_APP_OKTA_DOMAIN_EXTERNAL}`,\n clientId: process.env.REACT_APP_OKTA_CLIENT_ID_EXTERNAL,\n redirectUri: window.location.origin + \"/login/callback\",\n scopes: [\"openid\", \"profile\", \"email\"],\n authParams: {\n issuer: `https://${process.env.REACT_APP_OKTA_DOMAIN_EXTERNAL}`,\n },\n};\n\nexport { oktaInternalAuthConfig, oktaExternalAuthConfig };\n","export const lightMode = {\n 100: \"#FFFFFF\",\n 200: \"#EDF2F7\",\n 300: \"#eeeff2\",\n};\n\nexport const darkMode = {\n 100: \"#0F3457\",\n 200: \"#1E293B\",\n 300: \"#0F172A\",\n};\n\nexport const sidebar = {\n light: \"#084678\",\n dark: darkMode[300],\n};\n","import { Box, Flex, Heading } from \"@chakra-ui/layout\";\nimport { Spinner } from \"@chakra-ui/spinner\";\nimport React from \"react\";\nimport { useColorModeValue } from \"@chakra-ui/react\";\nimport { lightMode, darkMode } from \"../../lib/models/color-mode-colors\";\n\nfunction FormLoadingOverlay({ label }: { label: string }) {\n const loadingOverlayBg = useColorModeValue(lightMode[300], darkMode[300]);\n return (\n \n \n \n \n {label}\n \n \n \n );\n}\n\nexport default FormLoadingOverlay;\n","import { Box, Container, Flex } from \"@chakra-ui/layout\";\nimport { useOktaAuth } from \"@okta/okta-react\";\nimport React, { useEffect } from \"react\";\nimport { useHistory } from \"react-router\";\nimport FormLoadingOverlay from \"../components/common-quote/FormLoadingOverlay\";\n\nconst OKTA_TOKEN_STORAGE_KEY = \"okta-token-storage\";\nconst OKTA_CACHE_STORAGE_KEY = \"okta-cache-storage\";\n\n/**\n * The reason this view exists is to provide a SSO experience\n * for users entering the app from the Okta dashboard.\n * We don't want them to have to login twice so we set up /login/sso route\n * which corresponds to this view.\n *\n * See GH issue for solution: https://github.com/okta/okta-react/issues/84\n * See Here for implementation: https://github.com/okta/okta-auth-js#signinwithredirectoptions\n */\nfunction LoginSSOView() {\n const { oktaAuth } = useOktaAuth();\n const history = useHistory();\n\n const loginWithSingleSignOn = React.useCallback(async () => {\n if (oktaAuth.isLoginRedirect()) {\n await oktaAuth.handleLoginRedirect();\n } else if (!(await oktaAuth.isAuthenticated())) {\n // Start the browser based oidc flow, then parse tokens from the redirect callback url\n oktaAuth.signInWithRedirect();\n } else {\n history.push(\"/\");\n }\n }, [oktaAuth, history]);\n\n useEffect(() => {\n localStorage.removeItem(OKTA_TOKEN_STORAGE_KEY);\n localStorage.removeItem(OKTA_CACHE_STORAGE_KEY);\n loginWithSingleSignOn().then((x) => x);\n }, [loginWithSingleSignOn]);\n\n return (\n \n \n \n \n \n \n \n );\n}\n\nexport default LoginSSOView;\n","import styled from \"@emotion/styled\";\nimport OktaSignIn from \"@okta/okta-signin-widget\";\nimport React, { useEffect, useRef } from \"react\";\nimport {\n oktaExternalAuthConfig,\n oktaInternalAuthConfig,\n} from \"../lib/auth-config\";\n\nconst isInternalEmail = (email: string) => {\n const split = email.split(\"@\");\n const domain = split[1];\n\n return domain === \"limaonecapital.com\";\n};\n\nconst getLoginConfig = (isInternal: Boolean) => {\n return isInternal ? oktaInternalAuthConfig : oktaExternalAuthConfig;\n};\n\nfunction OktaSignInWidget({ config, onSuccess, onError }: any) {\n const [oktaConfig, setConfig] = React.useState(config);\n const [input, setInput] = React.useState(\"\");\n\n const widgetRef = useRef();\n\n useEffect(() => {\n if (!widgetRef.current) return;\n\n const widget = new OktaSignIn(oktaConfig);\n\n widget\n .showSignInToGetTokens({\n el: widgetRef.current,\n })\n .then(onSuccess)\n .catch(onError);\n\n widget.on(\"ready\", (context: any) => {\n const username = document.getElementById(\n \"okta-signin-username\"\n ) as HTMLInputElement;\n\n if (!username) {\n return;\n }\n\n username.addEventListener(\"change\", (e: any) => {\n setInput(e.target.value);\n });\n });\n\n return () => widget.remove();\n }, [oktaConfig, onSuccess, onError]);\n\n useEffect(() => {\n if (!input) return;\n\n const isInternal = isInternalEmail(input);\n setConfig(getLoginConfig(isInternal));\n }, [input]);\n\n return (\n \n
\n \n );\n}\n\nexport default OktaSignInWidget;\n\nconst SignInWidgetWrapper = styled.div`\n width: 100%;\n\n #okta-sign-in {\n .focused-input {\n box-shadow: none;\n }\n\n .o-form-theme {\n padding: 0;\n }\n\n .auth-footer {\n .link {\n color: var(--chakra-colors-brand-400);\n font-weight: 500;\n\n &:hover {\n color: var(--chakra-colors-brand-400);\n }\n\n &:active {\n color: var(--chakra-colors-brand-300);\n }\n\n &:focus {\n box-shadow: none;\n }\n }\n }\n\n &.auth-container {\n &.main-container {\n background-color: white;\n border: none;\n padding: var(--chakra-sizes-8) var(--chakra-sizes-4);\n margin-top: var(--chakra-sizes-8);\n font-family: \"Roboto\";\n box-shadow: var(--chakra-shadows-sm);\n border: 1px solid var(--chakra-colors-gray-200);\n color: var(--chakra-colors-gray-700);\n max-width: 500px;\n width: 100%;\n border-radius: var(--chakra-radii-md);\n\n .okta-sign-in-header {\n &.auth-header {\n display: none;\n }\n }\n }\n\n input[type=\"submit\"] {\n font-family: \"Roboto\", sans-serif;\n background: var(--chakra-colors-brand-500);\n font-size: var(--chakra-fontSizes-md);\n border-radius: var(--chakra-radii-md);\n font-weight: 500;\n padding-inline-start: var(--chakra-space-4);\n padding-inline-end: var(--chakra-space-4);\n height: var(--chakra-sizes-12);\n letter-spacing: 0.5px;\n\n &:hover {\n background: var(--chakra-colors-brand-400);\n }\n\n &:active {\n background: var(--chakra-colors-brand-300);\n }\n\n &:focus {\n box-shadow: none;\n border-color: unset;\n }\n }\n\n .o-form-head {\n display: none;\n }\n\n .o-form-label {\n letter-spacing: 0.25px;\n\n label {\n font-size: var(--chakra-fontSizes-sm);\n color: var(--chakra-colors-gray-600);\n font-weight: 500;\n }\n }\n\n .o-form-fieldset {\n margin-bottom: var(--chakra-sizes-6);\n }\n\n .o-form-input-error {\n font-size: var(--chakra-fontSizes-xs);\n letter-spacing: 0.25px;\n padding-left: 0;\n\n .icon-16 {\n display: none;\n }\n }\n\n .okta-form-input-field {\n border-color: var(--chakra-colors-gray-300);\n border-radius: var(--chakra-radii-md);\n height: var(--chakra-sizes-10);\n\n input {\n font-family: \"Roboto\", \"sans-serif\";\n border-radius: var(--chakra-radii-md);\n padding-inline-start: var(--chakra-space-4);\n padding-inline-end: var(--chakra-space-4);\n\n &:hover {\n border-color: var(--chakra-colors-gray-400);\n }\n\n &:focus {\n z-index: 1;\n border-color: rgb(49, 130, 206);\n box-shadow: rgb(49 130 206) 0px 0px 0px 1px;\n }\n }\n }\n }\n }\n`;\n","export default __webpack_public_path__ + \"static/media/logo.10b6f153.svg\";","import { Flex, Text } from \"@chakra-ui/layout\";\nimport { useOktaAuth } from \"@okta/okta-react\";\nimport \"@okta/okta-signin-widget/dist/css/okta-sign-in.min.css\";\nimport React from \"react\";\nimport OktaSignInWidget from \"../components/OktaSignInWidget\";\nimport logo from \"../logo.svg\";\n\nfunction LoginView({ config }: any) {\n const { oktaAuth } = useOktaAuth();\n\n const onSuccess = (tokens: any) => {\n oktaAuth.handleLoginRedirect(tokens);\n };\n\n const onError = (err: any) => {\n console.error(\"Error: Cannot Login\", err);\n };\n\n return (\n \n \"Lima\n\n \n Sign in to your account\n \n\n \n Create and edit quotes with the{\" \"}\n \n Pricing Engine\n \n \n\n \n \n For access to the Pricing Engine, please reach out to your Lima One\n representative for assistance\n \n \n );\n}\n\nexport default LoginView;\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function MenuIcon(props: IconProps) {\n return (\n \n \n \n \n \n );\n}\n","import axios, { AxiosResponse } from \"axios\";\nimport { QuoteTypeEnum, UserRole } from \"../lib/models/enums\";\nimport { QuoteResponse } from \"../lib/models/quote-response.model\";\nimport { Quote } from \"../lib/models/quote.model\";\nimport { GetQuotesRequest } from \"../lib/requests/quote-requests\";\nimport { Comment } from \"../lib/types/CommentType\";\nimport { MetricType } from \"../lib/types/MetricType\";\nimport { QuoteType } from \"../lib/types/QuoteType\";\nimport { UserAccount } from \"../lib/types/UserAccountType\";\nimport { ApiUtils } from \"./ApiUtils\";\n\nexport type MetricRequest = {\n env: string;\n username: string;\n producttype: QuoteType;\n quotetype: MetricType;\n quoteid: number | undefined;\n quoteloanamount: string;\n};\n\nexport class QuoteApi {\n private static readonly _baseUrl = ApiUtils.getBaseApiUrl();\n\n public static createQuote(quote: any): Promise> {\n return axios.post(`${this._baseUrl}/quotes`, quote);\n }\n\n public static getQuotes(\n request: GetQuotesRequest\n ): Promise> {\n return axios.get(\n `${this._baseUrl}/quoteSummaries?username=${request.username}&allquotes=${request.allquotes}`\n );\n }\n\n public static getQuotesById(id: string): Promise> {\n return axios.get(`${this._baseUrl}/quotes/users/${id}`);\n }\n\n public static getQuoteUsers(): Promise> {\n return axios.get(`${this._baseUrl}/users`);\n }\n\n public static getQuotesForReview(\n id: string\n ): Promise> {\n return axios.get(`${this._baseUrl}/quotes/brokers`, {\n params: {\n id,\n },\n });\n }\n\n public static getQuotesForReviewById(\n id: string\n ): Promise> {\n return axios.get(`${this._baseUrl}/quotes/brokers/${id}`, {\n params: {\n id,\n },\n });\n }\n\n public static getQuoteById(\n id: number\n ): Promise> {\n return axios.get(`${this._baseUrl}/quotes/${id}`);\n }\n\n public static getBrokerQuoteById(\n id: string\n ): Promise> {\n return axios.get(`${this._baseUrl}/quotes/brokers/${id}`);\n }\n\n public static getBorrowerQuoteById(\n id: string\n ): Promise> {\n return axios.get(`${this._baseUrl}/quotes/borrowers/${id}`);\n }\n\n public static updateQuote(\n id: number,\n quote: any\n ): Promise> {\n return axios.put(`${this._baseUrl}/quotes/${id}`, quote);\n }\n\n public static deactivateQuote(id: number) {\n return axios.delete(`${this._baseUrl}/quotes/${id}`);\n }\n\n public static createQuoteComment(\n id: number,\n text: string,\n username: string\n ): Promise> {\n return axios.post(`${this._baseUrl}/quotes/${id}/comments`, {\n text,\n username,\n });\n }\n\n public static deactivateComment(quoteId: number, commentId: number) {\n return axios.delete(\n `${this._baseUrl}/quotes/${quoteId}/comments/${commentId}`\n );\n }\n\n public static getQuoteComments(\n id: number\n ): Promise> {\n return axios.get(`${this._baseUrl}/quotes/${id}/comments`);\n }\n\n public static submitQuoteToSalesforce(quote: any) {\n return axios.post(`${this._baseUrl}/submitquote`, quote);\n }\n\n public static submitQuoteForReview(quote: any) {\n return axios.post(`${this._baseUrl}/submitquoteforreview`, quote);\n }\n\n public static submitQuoteExceptions(\n id: number,\n status: string | undefined,\n reduction?: number | undefined\n ) {\n return axios.post(`${this._baseUrl}/quotes/${id}/exceptions`, {\n status,\n reduction,\n });\n }\n\n public static submitQuoteChoices(id: number) {\n return axios.put(`${this._baseUrl}/quotes/${id}/finalize`, {});\n }\n\n public static getAutoCommission(\n role: UserRole,\n fee: number,\n rate: number,\n productType: QuoteTypeEnum,\n loanProduct: string\n ) {\n return axios.get(\n `${this._baseUrl}/commission?role=${role}"etype=${productType}&rate=${rate}&fee=${fee}&product=${loanProduct}`\n );\n }\n\n public static saveMetric(request: MetricRequest): Promise {\n return axios.post(`${this._baseUrl}/Metrics`, request);\n }\n\n public static submitSalesFinalized(id: number) {\n return axios.put(`${this._baseUrl}/quotes/${id}/finalize`);\n }\n}\n","import React from \"react\";\nimport { UserContext } from \"../state/user-context\";\n\nexport default function useUser() {\n const context = React.useContext(UserContext);\n\n if (context === undefined) {\n throw new Error(\"useUser must be used within a UserContextProvider\");\n }\n\n return context;\n}\n","export default __webpack_public_path__ + \"static/media/logo-white.638133ce.svg\";","import React from \"react\";\nimport { Icon, IconProps } from \"@chakra-ui/icons\";\n\nfunction CollectionIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport default CollectionIcon;\n","import React from \"react\";\nimport { Icon, IconProps } from \"@chakra-ui/icons\";\n\nfunction FolderIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport default FolderIcon;\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function UserGroupIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n","import { UserRole } from \"./models/enums\";\nimport { SFUserProfile } from \"./models/sf-user-profile.model\";\n\nexport const elevatedUsers: UserRole[] = [\n \"Business Development Manager\",\n \"POD Manager\",\n \"Capital Markets\",\n \"Inside Sales Manager\",\n \"Broker Manager\",\n \"Lender Finance Manager\",\n \"Wholesale Manager\",\n \"Production Coordinator\",\n \"Operations Analyst\",\n \"Administrator\",\n];\n\nexport const externalUsers: UserRole[] = [\"External\"];\n\nexport const internalUsers: UserRole[] = [\n \"Sales\",\n \"Broker\",\n \"Broker Manager\",\n \"Lender Finance\",\n \"Lender Finance Manager\",\n \"Inside Sales\",\n \"Inside Sales Manager\",\n \"Capital Markets\",\n \"Wholesale\",\n \"Wholesale Manager\",\n \"POD\",\n \"POD Manager\",\n \"Business Development\",\n \"Business Development Manager\",\n \"Production Coordinator\",\n \"Operations Analyst\",\n \"Sales Assistant\",\n \"Administrator\",\n];\n\nexport const autoExceptionUsers: UserRole[] = [\n \"Inside Sales\",\n \"Inside Sales Manager\",\n \"Broker\",\n \"Broker Manager\",\n \"Lender Finance\",\n \"Lender Finance Manager\",\n \"Business Development\",\n \"Business Development Manager\",\n \"POD\",\n \"POD Manager\",\n \"Wholesale\",\n \"Wholesale Manager\",\n \"Operations Analyst\",\n];\n\nexport const brokerRetailUsers = [\n \"Administrator\",\n \"Wholesale\",\n \"Wholesale Manager\",\n \"POD\",\n \"POD Manager\",\n \"Business Development\",\n \"Business Development Manager\",\n];\n\nexport const isElevatedUser = (userRole: UserRole | null) => {\n if (!userRole) {\n return false;\n }\n\n return elevatedUsers.includes(userRole);\n};\n\nexport const isInternalUser = (userRole: UserRole | null) => {\n if (!userRole) {\n return false;\n }\n\n return !externalUsers.includes(userRole);\n};\n\nexport const isQuoteOwner = (\n quoteOwner: string | undefined,\n activeUser: SFUserProfile | null,\n oktaEmail: string | undefined\n) => {\n if (!quoteOwner || !oktaEmail) {\n return false;\n }\n\n const defaultCheck =\n quoteOwner.toLocaleLowerCase() === oktaEmail.toLocaleLowerCase();\n\n if (!activeUser?.brokers) {\n return defaultCheck;\n }\n\n const brokerEmails = activeUser.brokers.map((broker) => {\n if (!broker.username) {\n return \"No Email Provided\";\n }\n return broker.username.toLocaleLowerCase();\n });\n\n return defaultCheck || brokerEmails.includes(quoteOwner.toLocaleLowerCase());\n};\n\nexport const isAutoExceptionUser = (userRole: UserRole | undefined) => {\n if (!userRole) {\n return false;\n }\n return autoExceptionUsers.includes(userRole);\n};\n","import CollectionIcon from \"../components/icons/CollectionIcon\";\nimport FolderIcon from \"../components/icons/FolderIcon\";\nimport { UserGroupIcon } from \"../components/icons/UserGroupIcon\";\nimport { UserRole } from \"../lib/models/enums\";\nimport { SidebarLink } from \"../lib/types/SidebarLink\";\nimport { isElevatedUser } from \"../lib/UserPermissions\";\n\nexport class NavigationLinkService {\n public static readonly sidebarLinks: SidebarLink[] = [\n {\n label: \"My Quotes\",\n icon: FolderIcon,\n path: \"/quotes/my-quotes\",\n },\n ];\n\n public static getSideBarLinksByRole(\n role: UserRole,\n numberOfBrokers: number\n ): SidebarLink[] {\n const links = [...this.sidebarLinks];\n\n if (isElevatedUser(role)) {\n links.push({\n label: \"All Quotes\",\n icon: CollectionIcon,\n path: \"/quotes\",\n });\n }\n\n if (numberOfBrokers > 0) {\n links.push({\n label: \"Brokers\",\n icon: UserGroupIcon,\n path: \"/quotes/broker-quotes\",\n badge: numberOfBrokers,\n });\n }\n\n return links;\n }\n}\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function LogoutIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function PencilAltSolid(props: IconProps) {\n return (\n \n \n \n \n );\n}\n","import {\n Modal,\n ModalBody,\n ModalCloseButton,\n ModalContent,\n ModalHeader,\n ModalFooter,\n ModalOverlay,\n ThemingProps,\n} from \"@chakra-ui/react\";\nimport React from \"react\";\n\nexport interface ModalWrapperProps {\n title?: string;\n children: React.ReactNode;\n footer: React.ReactNode;\n isOpen: boolean;\n onClose: () => void;\n size: ThemingProps<\"Modal\">[\"size\"];\n}\n\nfunction ModalWrapper(props: ModalWrapperProps) {\n const { children, footer, isOpen, onClose, title, size } = props;\n\n return (\n \n \n \n {title && (\n {title}\n )}\n \n {children}\n {footer}\n \n \n );\n}\n\nexport default ModalWrapper;\n","import {\n Button,\n Checkbox,\n CheckboxGroup,\n HStack,\n ListItem,\n UnorderedList,\n} from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { SelectItem } from \"../../lib/types/SelectItem\";\nimport ModalWrapper from \"../ModalWrapper\";\n\nexport interface PinnedItemsModalProps {\n items: SelectItem[];\n selectedItemValues: string[];\n open: boolean;\n handleOpen: (open: boolean) => void;\n handleSave: (selectedItems: any[]) => void;\n isLoading: boolean;\n label: string;\n}\n\nexport function PinnedItemsModal({\n items,\n selectedItemValues,\n open,\n handleOpen,\n handleSave,\n isLoading,\n label,\n}: PinnedItemsModalProps) {\n const [selected, setSelected] = React.useState>([]);\n\n React.useEffect(() => {\n setSelected(selectedItemValues);\n }, [selectedItemValues]);\n\n const handleChange = (e: any) => {\n const value = e.target.value;\n onSelect(value);\n };\n\n const onSelect = (itemId: string) => {\n const newSelected = selected.includes(itemId)\n ? selected.filter((x: string) => x !== itemId)\n : [...selected, itemId];\n setSelected(newSelected);\n };\n\n const onSaveClick = () => {\n handleSave(selected);\n };\n\n return (\n handleOpen(!open)}\n title={`Select ${label}`}\n size=\"lg\"\n footer={\n \n \n \n Save Changes\n \n \n }\n >\n \n \n {items.map((item: SelectItem) => (\n \n \n {`${item.label}`}\n \n \n ))}\n \n \n \n );\n}\n","import {\n Box,\n Flex,\n IconButton,\n Link as ChakraLink,\n ListItem,\n Text,\n UnorderedList,\n} from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport useUser from \"../../hooks/useUser\";\nimport { SelectItem } from \"../../lib/types/SelectItem\";\nimport { Preferences } from \"../../lib/types/UserPreference\";\nimport { PencilAltSolid } from \"../icons/PencilAlt\";\nimport { PinnedItemsModal } from \"./PinnedItemsModal\";\n\nexport interface PinnedItemsProps {\n items: SelectItem[];\n selectedItemValues: Array;\n label: string;\n savePreferencesKey: keyof Preferences;\n pathValue: string;\n}\n\nexport function PinnedItems({\n items,\n selectedItemValues,\n label,\n savePreferencesKey,\n pathValue,\n}: PinnedItemsProps) {\n const user = useUser();\n const location = useLocation();\n const { userPreferences, savePreferencesHelper } = user;\n const [pinnedItemIds, setPinnedItemIds] = React.useState>([]);\n const [pinnedItems, setPinnedItems] = React.useState>([]);\n\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const [isLoading, setIsLoading] = React.useState(false);\n\n React.useEffect(() => {\n const pinnedItems = items.filter((item: any) => {\n return pinnedItemIds.includes(item.value);\n });\n setPinnedItems(pinnedItems);\n }, [items, pinnedItemIds, setPinnedItems]);\n\n const handleModalVisibility = (open: boolean) => {\n setIsModalOpen(open);\n };\n\n const onSaveClick = async (selectedItems: string[]) => {\n setIsLoading(true);\n let newPreferences: Preferences = {};\n newPreferences[savePreferencesKey] = selectedItems;\n try {\n await savePreferencesHelper(newPreferences);\n } catch (error) {\n console.error(error);\n } finally {\n setIsLoading(false);\n handleModalVisibility(false);\n }\n };\n\n React.useEffect(() => {\n setPinnedItemIds(selectedItemValues ?? []);\n }, [selectedItemValues]);\n\n return (\n <>\n {items.length > 0 && (\n \n \n \n {`Pinned ${label}`}\n \n\n handleModalVisibility(true)}\n variant=\"unstyled\"\n minW=\"auto\"\n height=\"auto\"\n padding={0}\n title={`Edit Pinned ${label}`}\n aria-label={`Edit Pinned ${label}`}\n icon={}\n >\n \n\n {isLoading || !userPreferences ? (\n \n {`Loading ${label}...`}\n \n ) : (\n <>\n {pinnedItems && pinnedItems.length > 0 ? (\n \n {pinnedItems.map((item) => (\n \n \n {`${item.label}`}\n \n \n ))}\n \n ) : (\n \n {`No ${label} Pinned`}\n \n )}\n \n )}\n \n )}\n \n \n );\n}\n","import React from \"react\";\nimport { UserRole } from \"../lib/models/enums\";\nimport { UserContext } from \"../state/user-context\";\n\nexport default function useGetUserRole(): UserRole {\n const context = React.useContext(UserContext);\n\n if (context === undefined) {\n throw new Error(\"useGetUserRole must be used within a UserContextProvider\");\n }\n\n if (context.role) {\n return context.role;\n } else return \"External\";\n}\n","import useGetUserRole from \"../hooks/useGetUserRole\";\nimport { UserRole } from \"../lib/models/enums\";\n\nexport interface ShowForRoleProps {\n roles: UserRole[];\n children: JSX.Element;\n hideForAdmin?: boolean;\n}\n\nfunction ShowForRole({ children, roles, hideForAdmin }: ShowForRoleProps) {\n const userRole = useGetUserRole();\n\n if (userRole === \"Administrator\" && !hideForAdmin) return children;\n\n for (const role of roles) {\n if (role === userRole) {\n return children;\n }\n }\n\n return null;\n}\n\nexport default ShowForRole;\n","import { MoonIcon, SunIcon } from \"@chakra-ui/icons\";\nimport { Badge, Box, Link as ChakraLink } from \"@chakra-ui/layout\";\nimport {\n Avatar,\n Button,\n Popover,\n PopoverArrow,\n PopoverContent,\n PopoverTrigger,\n useColorMode,\n useColorModeValue,\n} from \"@chakra-ui/react\";\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { QuoteApi } from \"../api/QuoteApi\";\nimport useUser from \"../hooks/useUser\";\nimport { darkMode, sidebar } from \"../lib/models/color-mode-colors\";\nimport { SelectItem } from \"../lib/types/SelectItem\";\nimport { SidebarLink } from \"../lib/types/SidebarLink\";\nimport { UserAccount } from \"../lib/types/UserAccountType\";\nimport logo from \"../logo-white.svg\";\nimport { NavigationLinkService } from \"../services/navbar.service\";\nimport { LogoutIcon } from \"./icons/LogoutIcon\";\nimport { PinnedItems } from \"./pinned-items\";\nimport ShowForRole from \"./ShowForRole\";\n\nexport interface SidebarProps {\n isOpen: boolean;\n onToggle: () => void;\n}\n\nfunction Sidebar(props: SidebarProps) {\n const { colorMode, toggleColorMode } = useColorMode();\n const { user, userPreferences, sfProfile, role } = useUser();\n const userContext = useUser();\n const [sidebarLinks, setSidebarLinks] = React.useState([]);\n const [pathWithQuery, setPathWithQuery] = React.useState(\"\");\n const { isOpen, onToggle } = props;\n const location = useLocation();\n const [userAccounts, setUserAccounts] = React.useState([]);\n const sidebarBg = useColorModeValue(sidebar.light, darkMode[300]);\n\n React.useEffect(() => {\n const { pathname, search } = location;\n setPathWithQuery(`${pathname}${search}`);\n }, [location]);\n\n React.useEffect(() => {\n if (!role) return;\n\n let brokers = [];\n\n if (sfProfile?.brokers) {\n brokers.push(...sfProfile.brokers);\n }\n\n const links = NavigationLinkService.getSideBarLinksByRole(\n role,\n brokers.length\n );\n\n setSidebarLinks(links);\n }, [role, sfProfile]);\n\n const fetchUsers = React.useCallback(() => {\n QuoteApi.getQuoteUsers()\n .then((res) => {\n setUserAccounts(\n res.data.map((x) => {\n return x;\n })\n );\n })\n .catch((err) => {});\n }, []);\n\n React.useEffect(() => {\n fetchUsers();\n }, [fetchUsers]);\n\n const salesRepItems: SelectItem[] = React.useMemo(() => {\n if (!userAccounts) {\n return [];\n }\n return userAccounts.map((item) => ({\n label: `${item.firstName} ${item.lastName}`,\n value: item.userID.toString(),\n }));\n }, [userAccounts]);\n\n const brokerAccountItems: SelectItem[] = React.useMemo(() => {\n if (!sfProfile?.brokers) {\n return [];\n }\n return sfProfile.brokers.map((item) => ({\n label: item.name,\n value: item.accountid,\n }));\n }, [sfProfile?.brokers]);\n\n const borrowerAccountItems: SelectItem[] = React.useMemo(() => {\n return userContext.sfAccounts.map((item) => ({\n label: item.name,\n value: item.accountid,\n }));\n }, [userContext.sfAccounts]);\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n\n {user && (\n \n
\n \n \n \n \n \n \n \n \n \n
\n {user.name}\n {role}\n
\n
\n\n \n \n \n
\n )}\n
\n \n {isOpen && (\n \n )}\n \n );\n}\n\nconst SidebarInnerWrapper = styled.div`\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n overflow-y: auto;\n`;\n\nconst SidebarLogoAndLinks = styled.div``;\n\nconst SidebarProfile = styled.div`\n display: flex;\n align-items: center;\n border-top: 1px solid #0f3457;\n padding: 1.25rem 0.75rem;\n justify-content: space-between;\n\n .avatar-username-container {\n display: flex;\n align-items: center;\n }\n\n .username-container {\n display: flex;\n flex-direction: column;\n margin-left: 1rem;\n\n .username {\n font-size: 1rem;\n color: #c8e6fe;\n }\n\n .role {\n font-size: 0.9rem;\n color: #7abef5;\n }\n }\n`;\n\nconst StyledSidebarBackdrop = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.25);\n z-index: 300;\n display: none;\n\n @media (max-width: 1280px) {\n display: block;\n }\n`;\n\nconst StyledSidebar = styled.div<{ sidebarBg: string; colorMode: string }>`\n background: ${(props) => props.sidebarBg};\n border-right: ${(props) =>\n props.colorMode === \"light\" ? \"none\" : \"1px solid #0F3457\"};\n position: fixed;\n top: 0;\n left: 0;\n height: 100vh;\n width: 275px;\n z-index: 301;\n\n @media (max-width: 1280px) {\n display: none;\n\n &.sidenav-open {\n display: block;\n width: 275px;\n }\n }\n\n nav {\n padding: 2.5rem 0 2.5rem 1rem;\n }\n\n ul {\n list-style: none;\n margin: 0;\n }\n\n .sidenav-item {\n display: flex;\n align-items: center;\n color: #7abef5;\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n padding-left: 1rem;\n margin-right: 1rem;\n margin-bottom: 0.25rem;\n transition: color 0.2s ease-in-out;\n\n &.active {\n color: #c8e6fe;\n border-radius: 6px;\n background: ${(props) =>\n props.colorMode === \"light\"\n ? \"hsla(208, 71%, 35%, 0.6)\"\n : \"hsla(208, 71%, 35%, 0.2)\"};\n }\n\n &:hover {\n border-radius: 6px;\n background: ${(props) =>\n props.colorMode === \"light\"\n ? \"hsla(208, 71%, 35%, 0.2)\"\n : \"hsla(208, 71%, 35%, 0.05)\"};\n }\n\n .sidenav-link {\n flex: 1;\n }\n\n .sidenav-icon {\n height: 1.25rem;\n width: 1.25rem;\n margin-right: 1rem;\n }\n }\n`;\n\nexport default Sidebar;\n","import { Container, Flex, Link as ChakraLink } from \"@chakra-ui/layout\";\nimport {\n IconButton,\n useColorMode,\n useColorModeValue,\n useMediaQuery,\n} from \"@chakra-ui/react\";\nimport styled from \"@emotion/styled\";\nimport { useOktaAuth } from \"@okta/okta-react\";\nimport axios from \"axios\";\nimport React from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { MenuIcon } from \"../components/icons/MenuIcon\";\nimport Sidebar from \"../components/Sidebar\";\nimport { darkMode, lightMode } from \"../lib/models/color-mode-colors\";\nimport logoWhite from \"../logo-white.svg\";\nimport logo from \"../logo.svg\";\n\nfunction AuthenticatedLayout(props: any) {\n const location = useLocation();\n const { oktaAuth } = useOktaAuth();\n const [isLargerThan1280] = useMediaQuery(\"(min-width: 1281px)\");\n const [isOpen, setIsOpen] = React.useState(false);\n const [currentPath, setCurrentPath] = React.useState(location.pathname);\n axios.defaults.headers.common[\"Limakey\"] = oktaAuth.getAccessToken();\n\n const { colorMode } = useColorMode();\n const bgColor = useColorModeValue(lightMode[300], darkMode[300]);\n const headerBgColor = useColorModeValue(lightMode[100], darkMode[300]);\n const headerBorderColor = useColorModeValue(lightMode[200], darkMode[100]);\n\n axios.interceptors.request.use(function (config) {\n if (config.headers.common.Limakey === undefined) {\n throw new axios.Cancel(\n \"Please log in to continue using the Pricing Engine\"\n );\n }\n return config;\n });\n\n React.useEffect(() => {\n if (currentPath !== location.pathname) {\n setIsOpen(false);\n setCurrentPath(location.pathname);\n }\n }, [location, currentPath]);\n\n const handleSidebarToggle = () => {\n setIsOpen(!isOpen);\n };\n\n return (\n <>\n \n \n \n \n\n setIsOpen(!isOpen)}\n icon={}\n zIndex={299}\n borderRadius=\"full\"\n />\n \n\n \n \n \n \n {props.children}\n \n \n \n \n );\n}\n\nexport default AuthenticatedLayout;\n\nconst LayoutWrapper = styled.div`\n display: flex;\n position: relative;\n width: 100%;\n`;\n\nconst MainContainer = styled.main<{ isDesktop: boolean; bg: string }>`\n display: flex;\n flex: 1 1 auto;\n height: ${(props) => (props.isDesktop ? \"100vh\" : \"calc(100vh - 80px)\")};\n overflow: auto;\n scroll-behavior: smooth;\n margin-left: 275px;\n background: ${(props) => props.bg} !important;\n\n @media (max-width: 1280px) {\n margin-left: 0;\n }\n`;\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport { SecureRoute } from \"@okta/okta-react\";\nimport React, { useState } from \"react\";\nimport { Redirect } from \"react-router-dom\";\nimport FormLoadingOverlay from \"../components/common-quote/FormLoadingOverlay\";\nimport useUser from \"../hooks/useUser\";\nimport { UserRole } from \"../lib/models/enums\";\nexport interface GuardedRouteProps {\n component: React.ComponentType;\n fallback: string;\n exact: any;\n path: any;\n key: any;\n rolesNeededtoActivateRoute: Array;\n}\nfunction GuardedRoute(props: GuardedRouteProps) {\n const {\n component: Component,\n exact,\n path,\n key,\n fallback,\n rolesNeededtoActivateRoute,\n } = props;\n\n const user = useUser();\n\n const { role } = user;\n\n const [status, setStatus] = useState<\"loading\" | \"canActivate\" | \"redirect\">(\n \"loading\"\n );\n\n React.useEffect(() => {\n if (!role) {\n return;\n }\n\n if (rolesNeededtoActivateRoute.length < 1) {\n setStatus(\"canActivate\");\n return;\n }\n\n if (rolesNeededtoActivateRoute.includes(role)) {\n setStatus(\"canActivate\");\n return;\n }\n }, [role, rolesNeededtoActivateRoute, status, setStatus]);\n\n if (status === \"loading\") {\n return (\n \n \n \n \n \n );\n }\n\n return status === \"canActivate\" ? (\n }\n />\n ) : (\n \n );\n}\nexport default GuardedRoute;\n","import { CloseIcon } from \"@chakra-ui/icons\";\nimport {\n FormControl,\n FormLabel,\n IconButton,\n Input,\n InputGroup,\n InputRightElement,\n useColorModeValue,\n} from \"@chakra-ui/react\";\nimport React, { memo, useEffect } from \"react\";\nimport { useDebounce } from \"../../../hooks/useDebounce\";\nimport { darkMode, lightMode } from \"../../../lib/models/color-mode-colors\";\nimport { SelectItem } from \"../../../lib/types/SelectItem\";\n\nexport interface OptionInputProps {\n label: string;\n selectedItem: SelectItem | null;\n inputRef: React.RefObject;\n showClearButton: Boolean;\n handleInputClick: () => void;\n handleInputBlur: () => void;\n handleClearSelection: () => void;\n handleInputChange: (query: string) => void;\n placeholder?: string;\n isDisabled?: boolean;\n}\n\nfunction OptionInput(props: OptionInputProps) {\n const {\n label,\n selectedItem,\n inputRef,\n showClearButton,\n handleInputClick,\n handleInputBlur,\n handleClearSelection,\n handleInputChange,\n placeholder = \"Select...\",\n isDisabled = false,\n } = props;\n\n const [inputValue, setInputValue] = React.useState(\"\");\n\n const debouncedInput = useDebounce(inputValue, 500);\n\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n\n const handleFocus = () => {\n if (inputRef.current) {\n inputRef.current.focus();\n }\n };\n\n useEffect(() => {\n handleInputChange(debouncedInput);\n }, [debouncedInput, handleInputChange]);\n\n return (\n \n {label}\n \n setInputValue(e.target.value)}\n background={bgColor}\n />\n {selectedItem && (\n \n {showClearButton && (\n }\n />\n )}\n \n )}\n \n \n );\n}\n\nexport default memo(OptionInput);\n","import { useEffect, useState } from \"react\";\n\n// https://usehooks.com/useDebounce/\n\nexport function useDebounce(value: T, delay: number): T {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(\n () => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay] // Only re-call effect if value or delay changes\n );\n return debouncedValue;\n}\n","import styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { SelectItem } from \"../../../lib/types/SelectItem\";\nimport { useColorMode } from \"@chakra-ui/react\";\n\nconst OptionListItem = (props: {\n item: SelectItem;\n index: number;\n onClick: (e: any, index: number) => void;\n hasFocus: boolean;\n isSelected: boolean;\n}) => {\n const { item, index, hasFocus, isSelected, onClick } = props;\n\n const itemRef = React.useRef(null);\n\n const { colorMode } = useColorMode();\n\n return (\n onClick(e, index)}\n colorMode={colorMode}\n >\n {item.label}\n \n );\n};\n\nconst ListItem = styled.li<{ colorMode: string }>`\n padding: 0.5rem;\n cursor: pointer;\n\n &:hover {\n background: ${(props) =>\n props.colorMode === \"light\"\n ? \"var(--chakra-colors-gray-50)\"\n : \"var(--chakra-colors-gray-600)\"};\n }\n\n &.selected {\n background: var(--chakra-colors-blue-50);\n background: ${(props) =>\n props.colorMode === \"light\"\n ? \"var(--chakra-colors-blue-50)\"\n : \"var(--chakra-colors-blue-500)\"};\n }\n\n &.active {\n background: ${(props) =>\n props.colorMode === \"light\"\n ? \"var(--chakra-colors-gray-100)\"\n : \"var(--chakra-colors-gray-600)\"};\n }\n`;\n\nexport default OptionListItem;\n","import { Text, useColorModeValue } from \"@chakra-ui/react\";\nimport React, { useEffect } from \"react\";\nimport { darkMode, lightMode } from \"../../../lib/models/color-mode-colors\";\nimport { SelectItem } from \"../../../lib/types/SelectItem\";\nimport OptionListItem from \"./OptionListItem\";\n\nexport interface OptionListProps {\n items: SelectItem[];\n selectedItem: SelectItem | null;\n cursor: number;\n handleItemClick: (item: SelectItem | null) => void;\n isLoading: boolean;\n}\n\nfunction OptionList(props: OptionListProps) {\n const {\n items,\n selectedItem,\n handleItemClick,\n cursor,\n isLoading = false,\n } = props;\n\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n\n const handleClick = (e: any, index: number) => {\n if (index === -1) return;\n\n const item = items[index];\n\n if (item) handleItemClick(item);\n };\n\n useEffect(() => {\n const itemHeight = 40;\n const list = document.querySelector(\".list\");\n if (list) list.scrollTop = cursor * itemHeight;\n }, [cursor]);\n\n if (isLoading) {\n return (\n \n Loading...\n \n );\n }\n\n return items.length > 0 ? (\n <>\n \n {items.map((item, i) => (\n \n ))}\n \n \n ) : (\n \n No options\n \n );\n}\n\nexport default OptionList;\n","import React, { useCallback, useEffect } from \"react\";\n\nfunction useAsyncSearch(\n query: string,\n searchFn?: (query: string, callback: (options?: any) => void) => any,\n initialItems: any[] = []\n): [boolean, Array] {\n const [items, setItems] = React.useState(initialItems);\n const [isLoading, setIsLoading] = React.useState(false);\n const isMounted = React.useRef(true);\n\n const loadOptions = useCallback(\n (inputValue: string, callback: (options?: any) => void) => {\n if (!inputValue) return;\n\n if (!searchFn) return callback();\n\n const loader = searchFn(inputValue, callback);\n\n if (loader && typeof loader.then === \"function\") {\n loader.then(callback, () => callback());\n }\n },\n [searchFn]\n );\n\n const filterItems = (query: string) => {\n if (query === \"\") return initialItems;\n\n return initialItems.filter((item: any) => {\n return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;\n });\n };\n\n useEffect(() => {\n if (!query) {\n setItems(initialItems);\n return;\n }\n\n if (searchFn !== undefined) {\n setIsLoading(true);\n loadOptions(query, (options) => {\n if (isMounted.current) {\n setItems(options);\n setIsLoading(false);\n }\n });\n } else {\n const filteredItems = filterItems(query);\n setItems(filteredItems);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query, initialItems, searchFn, loadOptions]);\n\n return [isLoading, items];\n}\n\nexport default useAsyncSearch;\n","import { Box, useColorModeValue } from \"@chakra-ui/react\";\nimport React, { KeyboardEvent, useEffect } from \"react\";\nimport { darkMode, lightMode } from \"../../../lib/models/color-mode-colors\";\nimport { SelectItem } from \"../../../lib/types/SelectItem\";\nimport OptionInput from \"./OptionInput\";\nimport OptionList from \"./OptionList\";\nimport useAsyncSearch from \"./useAsyncSearch\";\n\nexport interface ComboBoxProps {\n label: string;\n items: SelectItem[];\n itemSelected?: SelectItem | null;\n showClearButton?: Boolean;\n onSelect: (item: SelectItem | null) => void;\n onSearch?: (query: string, callback: (options?: any) => void) => any;\n placeholder?: string;\n isDisabled?: boolean;\n}\n\nfunction ComboBox(props: ComboBoxProps) {\n const {\n label,\n items,\n itemSelected = null,\n showClearButton = true,\n onSelect,\n onSearch,\n placeholder,\n isDisabled,\n } = props;\n\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n const [selectedItem, setSelectedItem] = React.useState(\n itemSelected ?? null\n );\n const [cursor, setCursor] = React.useState(0);\n const [inputValue, setInputValue] = React.useState(\"\");\n const [isOpen, setIsOpen] = React.useState(false);\n const [isLoading, searchItems] = useAsyncSearch(\n inputValue,\n onSearch,\n items\n );\n const [options, setOptions] = React.useState(items);\n\n const inputRef = React.createRef();\n\n useEffect(() => {\n if (searchItems.length <= 1 && !inputValue) {\n setOptions(items);\n } else {\n setOptions(searchItems);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [inputValue, searchItems]);\n\n useEffect(() => {\n setCursor(0);\n }, [searchItems]);\n\n const onItemSelect = (index: number) => {\n if (index === -1) return;\n\n const item = searchItems[index];\n\n if (item) {\n setSelectedItem(item);\n setInputValue(item.label);\n setIsOpen(false);\n onSelect(item);\n }\n };\n\n const onSelectedItem = (item: SelectItem | null) => {\n setSelectedItem(item);\n setInputValue(item?.label ?? \"\");\n setIsOpen(false);\n onSelect(item);\n };\n\n const clearSelectedItem = () => {\n setInputValue(\"\");\n onSelectedItem(null);\n inputRef.current && inputRef.current.focus();\n };\n\n const handleClose = () => {\n if (!inputValue) {\n setIsOpen(false);\n return;\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n e.stopPropagation();\n\n const keyPressed = e.key;\n\n switch (keyPressed) {\n case \"ArrowDown\":\n if (!isOpen) {\n setIsOpen(true);\n break;\n }\n if (cursor + 1 > items.length - 1) setCursor(0);\n else setCursor(cursor + 1);\n break;\n\n case \"ArrowUp\":\n if (cursor - 1 < 0) setCursor(items.length - 1);\n else setCursor(cursor - 1);\n break;\n\n case \"Enter\":\n isOpen && onItemSelect(cursor);\n e.preventDefault();\n break;\n\n default:\n if (!isOpen) setIsOpen(true);\n break;\n }\n };\n\n React.useEffect(() => {\n if (!isOpen && selectedItem) {\n setInputValue(selectedItem.label);\n }\n\n if (isOpen && selectedItem) {\n setInputValue(\"\");\n }\n }, [isOpen, selectedItem]);\n\n React.useEffect(() => {\n if (!itemSelected) {\n setInputValue(\"\");\n setSelectedItem(null);\n return;\n } else {\n setSelectedItem(itemSelected);\n setInputValue(itemSelected.label);\n }\n }, [itemSelected, items]);\n\n const handleInput = (query: string) => {\n setInputValue(query);\n };\n\n return (\n \n setIsOpen(true)}\n handleInputChange={handleInput}\n placeholder={placeholder}\n isDisabled={isDisabled}\n />\n\n {isOpen && (\n {\n e.preventDefault();\n }}\n >\n \n \n )}\n \n );\n}\n\nexport default ComboBox;\n","import format from \"date-fns/format\";\n\nexport function toFixed(\n value: number | string,\n fractionDigits: number = 2\n): string {\n const normalized = +value;\n return normalized.toFixed(fractionDigits);\n}\n\nexport function formatMoney(\n value: number | string,\n fractionDigits: number = 2\n): string {\n const normalized = +value;\n const fixedNunber = normalized.toFixed(fractionDigits);\n\n return fixedNunber.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n\nexport function formatDate(val: string): string {\n const newDate = timeZoneFormat(val);\n return newDate.toLocaleDateString();\n}\n\nexport function formatDateMDY(date: string) {\n return format(new Date(date), \"MMMM dd, yyyy\");\n}\n\nexport function formatDateLocal(date: string) {\n const newDate = new Date(date);\n const timezoneOffset = newDate.getTimezoneOffset();\n const timezoneOffsetMins = timezoneOffset * 60 * 1000;\n const local = newDate.getTime() - timezoneOffsetMins;\n return format(new Date(local), \"MM/dd/yy\");\n}\n\nexport function formatDateTime(date: string) {\n const newDate = new Date(date);\n const timezoneOffset = newDate.getTimezoneOffset();\n const timezoneOffsetMins = timezoneOffset * 60 * 1000;\n const local = newDate.getTime() - timezoneOffsetMins;\n return format(new Date(local), \"MM/dd/yy h:mm a\");\n}\n\nexport function formatDateForSummary(date: string) {\n const newDate = new Date(date);\n const timezoneOffset = newDate.getTimezoneOffset();\n const timezoneOffsetMins = timezoneOffset * 60 * 1000;\n const local = newDate.getTime() - timezoneOffsetMins;\n return new Date(local);\n}\n\nexport function timeZoneFormat(val: any) {\n const date = new Date(val);\n const timezoneOffset = date.getTimezoneOffset();\n const timezoneOffsetMins = timezoneOffset * 60 * 1000;\n const utc = date.getTime() + timezoneOffsetMins;\n return new Date(utc);\n}\n\nexport function formatTimestampWithoutTimeZone(date: string) {\n const newDate = new Date(date);\n return format(newDate, \"MM/dd/yy\");\n}\n","import { Text } from \"@chakra-ui/react\";\nimport { formatDistanceToNow } from \"date-fns\";\nimport React from \"react\";\nimport { Column } from \"react-table\";\nimport {\n formatDateForSummary,\n formatDateMDY,\n} from \"../../lib/number-transforms\";\n\nexport const allTableColumns: Column[] = [\n {\n Header: \"Name\",\n accessor: \"name\",\n width: \"30%\",\n sortType: (a, b, id) => {\n const valueA = a.values[id].toLowerCase();\n const valueB = b.values[id].toLowerCase();\n return valueB > valueA ? 1 : valueB < valueA ? -1 : 0;\n },\n Cell: ({ cell }) => {\n return (\n \n {cell.value}\n \n );\n },\n },\n {\n Header: \"Quote Type\",\n accessor: \"quoteTypeLabel\",\n width: \"15%\",\n },\n {\n Header: \"Product\",\n accessor: \"productType\",\n width: \"15%\",\n },\n // {\n // Header: \"Underwriter\",\n // accessor: \"underwriterStatus\",\n // width: \"15%\",\n // },\n {\n Header: \"Created On\",\n accessor: \"createdOn\",\n sortDescFirst: true,\n Cell: ({ cell }) => {\n return formatDateMDY(cell.value);\n },\n width: \"15%\",\n },\n {\n Header: \"Owned By\",\n accessor: \"createdBy\",\n width: \"15%\",\n },\n {\n Header: \"Last Updated\",\n accessor: \"modifiedOn\",\n sortDescFirst: true,\n Cell: ({ cell }) => {\n return formatDistanceToNow(\n new Date(\n formatDateForSummary(cell.value.substring(0, cell.value.length - 1))\n ),\n {\n addSuffix: true,\n }\n );\n },\n width: \"15%\",\n },\n];\n","import { AddIcon } from \"@chakra-ui/icons\";\nimport { Button, Menu, MenuButton, MenuItem, MenuList } from \"@chakra-ui/react\";\nimport React from \"react\";\n\nexport type AddQuoteMenuProps = {\n menuItemClickHandler?: (action: AddQuoteMenuActions) => void;\n};\n\nexport type AddQuoteMenuActions = \"RENTAL\" | \"STF\";\n\nfunction AddQuoteMenu({ menuItemClickHandler }: AddQuoteMenuProps) {\n const handleClick = (action: AddQuoteMenuActions) => {\n if (menuItemClickHandler) {\n menuItemClickHandler(action);\n }\n };\n\n return (\n \n }\n >\n New Quote\n \n \n handleClick(\"STF\")}>Short Term Quote\n handleClick(\"RENTAL\")}>Rental Quote\n \n \n );\n}\n\nexport default AddQuoteMenu;\n","import { Box, Heading, Text } from \"@chakra-ui/react\";\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { useHistory } from \"react-router\";\nimport AddQuoteMenu, { AddQuoteMenuActions } from \"./AddQuoteMenu\";\n\nconst EmptyTableInnerFlexContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n`;\n\nexport interface EmptyQuotesTableProps {\n label?: string;\n showAddQuoteMenu?: boolean;\n}\n\nfunction EmptyQuotesTable(props: EmptyQuotesTableProps) {\n const {\n label = \"Get started by creating a new quote\",\n showAddQuoteMenu = true,\n } = props;\n\n const history = useHistory();\n\n const addQuoteHandler = (action: AddQuoteMenuActions) => {\n history.push(`/quotes/new?type=${action.toLowerCase()}`);\n };\n\n return (\n \n \n \n No Quotes\n \n {label}\n \n {showAddQuoteMenu && (\n \n )}\n \n \n \n );\n}\n\nexport default EmptyQuotesTable;\n","import { Icon } from \"@chakra-ui/react\";\nimport React from \"react\";\n\nfunction DeleteIcon() {\n return (\n \n \n \n );\n}\n\nexport default DeleteIcon;\n","import { Icon } from \"@chakra-ui/react\";\nimport React from \"react\";\n\nfunction EditIcon() {\n return (\n \n \n \n );\n}\n\nexport default EditIcon;\n","import {\n ArrowUpDownIcon,\n TriangleDownIcon,\n TriangleUpIcon,\n} from \"@chakra-ui/icons\";\nimport {\n Box,\n Button,\n ButtonGroup,\n chakra,\n Flex,\n Skeleton,\n Table,\n Tbody,\n Td,\n Text,\n Th,\n Thead,\n Tr,\n} from \"@chakra-ui/react\";\nimport * as React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n Column,\n useGlobalFilter,\n usePagination,\n useSortBy,\n useTable,\n} from \"react-table\";\nimport DeleteIcon from \"./icons/DeleteIcon\";\nimport EditIcon from \"./icons/EditIcon\";\n\nexport type DataTableProps = {\n data: any[];\n columns: Column[];\n globalFilter?: string;\n handleAction: (data: any, action: DataTableAction) => void;\n loading?: boolean;\n};\n\nexport type DataTableAction = \"EDIT\" | \"DELETE\";\n\nexport function DataTable({\n data,\n columns,\n globalFilter,\n handleAction,\n loading,\n}: DataTableProps) {\n const tableData = React.useMemo(\n () => (loading ? Array(5).fill({}) : data),\n [loading, data]\n );\n\n const tableColumns = React.useMemo(\n () =>\n loading\n ? columns.map((column) => ({\n ...column,\n Cell: ,\n }))\n : columns,\n [loading, columns]\n );\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n page,\n prepareRow,\n setGlobalFilter,\n canNextPage,\n canPreviousPage,\n nextPage,\n previousPage,\n rows,\n state: { pageIndex, pageSize },\n } = useTable(\n { columns: tableColumns, data: tableData },\n useGlobalFilter,\n useSortBy,\n usePagination\n );\n\n const container = React.useRef(null);\n\n React.useEffect(() => {\n setGlobalFilter(globalFilter);\n }, [globalFilter, setGlobalFilter]);\n\n return (\n <>\n \n \n \n {headerGroups.map((headerGroup) => (\n \n {headerGroup.headers.map((column) => (\n \n \n {column.render(\"Header\")}\n \n {column.isSorted ? (\n column.isSortedDesc ? (\n \n ) : (\n \n )\n ) : (\n \n )}\n \n \n \n ))}\n \n \n ))}\n \n\n \n {page.map((row: any) => {\n prepareRow(row);\n return (\n \n {row.cells.map((cell: any) => (\n \n {cell.column.Header === \"Owned By\" ? (\n \n {cell.render(\"Cell\")}\n \n ) : (\n cell.column.Header !== \"Name\" && cell.render(\"Cell\")\n )}\n\n {cell.column.Header === \"Name\" && (\n \n {cell.render(\"Cell\")}\n \n )}\n \n ))}\n\n \n \n }\n variant=\"link\"\n >\n Edit\n \n }\n onClick={() => handleAction(row.original, \"DELETE\")}\n variant=\"link\"\n >\n Delete\n \n \n \n \n );\n })}\n \n \n \n \n \n \n {rows.length > 0 ? (\n \n Showing\n \n  {pageIndex * pageSize + 1} \n \n to\n \n  \n {pageIndex * pageSize + 1 + pageSize > rows.length\n ? rows.length\n : pageIndex * pageSize + pageSize}\n  \n \n of\n \n  {rows.length ?? tableData.length} \n \n results\n \n ) : (\n \n Showing\n \n  0 \n \n Results\n \n )}\n \n \n previousPage()}\n variant=\"outline\"\n size=\"sm\"\n marginBottom={{ base: 4, md: 0 }}\n >\n Previous Page\n \n nextPage()}\n variant=\"outline\"\n size=\"sm\"\n >\n Next Page\n \n \n \n \n \n );\n}\n","import { Button } from \"@chakra-ui/button\";\nimport {\n AlertDialog,\n AlertDialogBody,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogOverlay,\n AlertDialogContent,\n} from \"@chakra-ui/modal\";\nimport React from \"react\";\nimport { Quote } from \"../lib/models/quote.model\";\n\nexport interface DeleteQuoteDialogProps {\n isOpen: boolean;\n isQuoteDeleting: boolean;\n quoteToDelete: Quote | null;\n onCloseHandler?: () => void;\n onConfirmHandler?: () => void;\n}\n\nfunction DeleteQuoteDialog(props: DeleteQuoteDialogProps) {\n const { onCloseHandler, onConfirmHandler, isQuoteDeleting } = props;\n const [isOpen, setIsOpen] = React.useState(props.isOpen ?? false);\n const cancelRef = React.useRef(null);\n\n React.useEffect(() => {\n setIsOpen(props.isOpen);\n }, [props.isOpen]);\n\n const handleClose = () => {\n setIsOpen(!isOpen);\n onCloseHandler && onCloseHandler();\n };\n\n const handleConfirm = () => {\n setIsOpen(!isOpen);\n onConfirmHandler && onConfirmHandler();\n };\n\n return (\n \n \n \n \n Delete Quote\n \n\n \n Are you sure you want to delete? This action can not be reversed.\n \n\n \n \n Cancel\n \n \n \n \n \n \n );\n}\n\nexport default DeleteQuoteDialog;\n","import { SearchIcon } from \"@chakra-ui/icons\";\nimport { Input, InputGroup, InputLeftElement } from \"@chakra-ui/input\";\nimport { Box, Flex, Heading } from \"@chakra-ui/layout\";\nimport React, { SetStateAction } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport AddQuoteMenu, { AddQuoteMenuActions } from \"./AddQuoteMenu\";\n\ntype QuotesTableToolbarProps = {\n setGlobalFilter: React.Dispatch>;\n newQuoteHandler: () => void;\n tableTitle: string;\n};\n\nfunction QuotesTableToolbar({\n setGlobalFilter,\n tableTitle,\n}: QuotesTableToolbarProps) {\n const history = useHistory();\n\n const handleChange = (e: any) => {\n setGlobalFilter(e.target.value);\n };\n\n const addQuoteHandler = (action: AddQuoteMenuActions) => {\n history.push(`/quotes/new?type=${action.toLowerCase()}`);\n };\n\n return (\n \n {tableTitle}\n\n \n \n }\n />\n \n \n \n \n \n \n \n );\n}\n\nexport default QuotesTableToolbar;\n","import { Box, useToast, useColorModeValue } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Column } from \"react-table\";\nimport { QuoteApi } from \"../../api/QuoteApi\";\nimport { Quote } from \"../../lib/models/quote.model\";\nimport { DataTable, DataTableAction } from \"../DataTable\";\nimport DeleteQuoteDialog from \"../DeleteQuoteDialog\";\nimport QuotesTableToolbar from \"./QuotesTableToolbar\";\n\nexport interface QuotesTableProps {\n quotes: Quote[];\n loading: boolean;\n refetchQuotes: () => void;\n title: string;\n columns: Array;\n}\n\nfunction QuotesTable({\n quotes,\n loading,\n refetchQuotes,\n title,\n columns,\n}: QuotesTableProps) {\n const toast = useToast();\n const history = useHistory();\n const [globalFilter, setGlobalFilter] = React.useState(\"\");\n const [isDeleteDialogOpen, setDeleteDialogOpen] =\n React.useState(false);\n const [quoteToDelete, setQuoteToDelete] = React.useState(null);\n const [isQuoteDeleting, setIsQuoteDeleting] = React.useState(false);\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n\n const newQuoteHandler = () => {\n history.push(\"/quotes/new\");\n };\n\n const handleTableAction = (quote: Quote, action: DataTableAction) => {\n if (action === \"EDIT\") {\n history.push(\n `/quotes/${quote.id}/edit?type=${quote.quoteType.toLowerCase()}`,\n { lastLocation: window.location.pathname }\n );\n }\n if (action === \"DELETE\") {\n setDeleteDialogOpen(true);\n setQuoteToDelete(quote);\n }\n };\n const onDeleteDialogConfirm = () => {\n if (!quoteToDelete) return;\n\n const id = quoteToDelete.id;\n\n setIsQuoteDeleting(true);\n\n QuoteApi.deactivateQuote(id)\n .then((res) => {\n toast({\n status: \"success\",\n position: \"top-right\",\n title: \"Quote Deleted\",\n description: \"The quote has been successfully deleted\",\n isClosable: true,\n variant: toastVariant,\n });\n })\n .catch((err) => {\n toast({\n status: \"success\",\n position: \"top-right\",\n title: \"Unable to Delete Quote\",\n description: \"The quote could not be deleted\",\n isClosable: true,\n variant: toastVariant,\n });\n })\n .finally(() => {\n setIsQuoteDeleting(false);\n setDeleteDialogOpen(false);\n refetchQuotes();\n });\n };\n\n const onDeleteDialogClose = () => {\n setDeleteDialogOpen(false);\n };\n\n return (\n <>\n \n \n \n \n \n \n );\n}\n\nexport default QuotesTable;\n","import { Box, Flex, SlideFade, useColorModeValue } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { Column } from \"react-table\";\nimport { darkMode, lightMode } from \"../lib/models/color-mode-colors\";\nimport { Quote } from \"../lib/models/quote.model\";\nimport FormLoadingOverlay from \"./common-quote/FormLoadingOverlay\";\nimport EmptyQuotesTable from \"./quotes/EmptyQuotesTable\";\nimport QuotesTable from \"./quotes/QuotesTable\";\nimport { allTableColumns } from \"./quotes/QuotesTableColumns\";\n\nexport interface QuoteTableContainerProps {\n refetchQuotes: () => void;\n loading: boolean;\n title: string;\n quotes: Quote[];\n children?: any;\n columns?: Array;\n emptyTableLabel?: string;\n showAddQuoteMenu?: boolean;\n}\n\nfunction QuoteTableContainer({\n refetchQuotes,\n loading,\n title,\n quotes,\n children,\n columns,\n emptyTableLabel,\n showAddQuoteMenu,\n}: QuoteTableContainerProps) {\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n return (\n \n {children && [children]}\n \n \n {loading ? (\n \n \n \n ) : (\n \n {quotes.length < 1 ? (\n \n ) : (\n <>\n column.Header !== \"Owned By\"\n )\n }\n refetchQuotes={refetchQuotes}\n loading={loading}\n quotes={quotes}\n title={title}\n />\n \n )}\n \n )}\n \n \n \n );\n}\n\nexport default QuoteTableContainer;\n","export enum YesNo {\n \"No\" = \"No\",\n \"Yes\" = \"Yes\",\n}\n\nexport enum QuoteTypeEnum {\n \"stf\" = \"stf\",\n \"rental\" = \"rental\",\n \"premier\" = \"premier\",\n}\n\nexport enum RentalProduct {\n \"5/1 ARM\" = \"5/1 ARM\",\n \"10/1 ARM\" = \"10/1 ARM\",\n \"5 IO 25 ARM\" = \"5 IO 25 ARM\",\n \"Fixed\" = \"Fixed\",\n \"Rental Bridge\" = \"Rental Bridge\",\n}\n\nexport enum RentalPremierProduct {\n \"Premier - 5 Year, 30 Am\" = \"Premier - 5 Year, 30 Am\",\n \"Premier - 10 Year, 30 Am\" = \"Premier - 10 Year, 30 Am\",\n \"Premier - 5 Year Balloon\" = \"Premier - 5 Year Balloon\",\n \"Premier - 10 Year Balloon\" = \"Premier - 10 Year Balloon\",\n \"Premier - 5/1 ARM\" = \"Premier - 5/1 ARM\",\n \"Premier - 30 Year Fixed\" = \"Premier - 30 Year Fixed\",\n}\n\nexport enum FixAndFlipProduct {\n \"FixNFlip\" = \"FixNFlip\",\n \"BridgePlus\" = \"BridgePlus\",\n \"New Construction\" = \"New Construction\",\n \"Fix2Rent\" = \"Fix2Rent\",\n}\n\nexport type UserRole =\n | \"External\"\n | \"Sales\"\n | \"Broker\"\n | \"Broker Manager\"\n | \"Lender Finance\"\n | \"Lender Finance Manager\"\n | \"Wholesale\"\n | \"Wholesale Manager\"\n | \"Inside Sales\"\n | \"Inside Sales Manager\"\n | \"Capital Markets\"\n | \"POD\"\n | \"POD Manager\"\n | \"Business Development\"\n | \"Business Development Manager\"\n | \"Production Coordinator\"\n | \"Operations Analyst\"\n | \"Sales Assistant\"\n | \"Administrator\";\n","import { QuoteType } from \"../../types/QuoteType\";\nimport { YesNo } from \"../enums\";\n\nexport interface RentalQuote {\n quoteName: string;\n quoteId?: number | null;\n brokerFee: number;\n borrowerIsReferral: YesNo;\n appraisedVal1: number;\n creditScore: number;\n submissionType: string;\n annualTaxes: number;\n propertiesNY?: YesNo;\n annualInsurance: number;\n refiL1cFixNFlip: YesNo;\n buyUpDownOption: string;\n username: string;\n numOfProperties: number;\n overrideMaster: boolean;\n exceptionPricingOverride?: RentalOverrideOptions;\n annualFloodInsurance: number;\n borrowingEntity: string;\n scenario?: Scenario[];\n mortgagePayoffs: number;\n quoteType: QuoteType;\n appraisedVal3: number;\n totalCosts1: number;\n monthlyRent: number;\n sreoPropertyNumber: number;\n productType: string;\n purchasePrice: number;\n prepaymentPenalty: string;\n borrowerNetWorth: number;\n yieldSpread: number;\n annualHOA: number;\n base: Base;\n buyUpDownPercentage: number;\n brokerProcessingFee: number;\n appraisalFee: number;\n usCitizen: YesNo;\n isTier5Borrower: YesNo;\n sfaccountid?: string;\n sfdealid?: string;\n campaignId?: string;\n campaignName?: string;\n campaignExpirationDate?: string;\n campaignIncentive?: string;\n campaignCode?: string;\n hasSubmittedQuote?: boolean;\n isZeroOrigFee?: YesNo;\n underwriterStatus?: string;\n underwriterFields?: RentalUnderwriterFields;\n seasonalRental?: YesNo;\n fiveNineUnit?: YesNo;\n state?: string;\n propertyAddress?: string;\n city?: string;\n zip?: string;\n formattedAddress?: string;\n lenderFinance?: RentalLolaFields;\n submittedDate?: string;\n loanCostOverride?: LoanCostOverride;\n vacantProperty?: YesNo;\n twoFourUnit?: YesNo;\n}\n\nexport interface RentalPremierQuote extends RentalQuote {\n premier?: RentalPremierOptions;\n}\n\nexport class RentalPremierOptions {\n propertyManagementFee: number = 0;\n collateralCondos: YesNo = YesNo.No;\n collateral: YesNo = YesNo.No;\n index: string = \"5yr I/R Swap\";\n openPrepayOption: string = \"Open Prepayment Allowance: 0% UPB/Year\";\n}\n\nexport class Scenario {\n scenarioId: number = 1;\n ltvPercentage: number = 75;\n included: YesNo = YesNo.Yes;\n preferred: YesNo = YesNo.No;\n}\n\nexport class Base {\n condo: YesNo = YesNo.No;\n fixToRent: YesNo = YesNo.No;\n propertyVal: YesNo = YesNo.No;\n}\n\nexport class RentalOverrideOptions {\n finalOrigFeeOverride?: number | string = \"\";\n rateReductionOverride?: number | string = \"0\";\n finalRateOverride?: number | string = \"\";\n exceptionType?: string = \"\";\n autoRate?: number | string = \"0\";\n autoFee?: number | string = \"0\";\n commissionReduction?: number | string = \"0\";\n processingFeeOverride?: number | string = \"\";\n splitProcessingFee?: string = \"\";\n achRequired?: string = YesNo.Yes;\n achExempt?: string = \"Non-exempt\";\n\n constructor(entity: any) {\n if (!entity) return;\n\n [\n \"rateReductionOverride\",\n \"finalOrigFeeOverride\",\n \"commissionReduction\",\n \"finalRateOverride\",\n \"exceptionType\",\n \"autoRate\",\n \"autoFee\",\n \"processingFeeOverride\",\n \"splitProcessingFee\",\n \"achRequired\",\n \"achExempt\",\n ].forEach((prop: string) => {\n const key = prop as keyof RentalOverrideOptions;\n this[key] = entity[prop];\n });\n }\n}\n\nexport class RentalUnderwriterFields {\n legalFee?: number | string = \"\";\n taxImpound?: number | string = \"\";\n insuranceImpound?: number | string = \"\";\n\n constructor(entity: any) {\n if (!entity) return;\n\n [\"legalFee\", \"taxImpound\", \"insuranceImpound\"].forEach((prop: string) => {\n const key = prop as keyof RentalUnderwriterFields;\n this[key] = entity[prop];\n });\n }\n}\n\nexport class RentalLolaFields {\n interestRateAddOn?: number | string;\n originationPointsAddOn?: number | string;\n applicationFee?: number | string;\n documentFee?: number | string;\n processingFee?: number | string;\n lenderFinanceAppraisalFee?: number | string;\n rpolt6?: boolean;\n rpogt6?: boolean;\n purchase?: boolean;\n\n constructor(entity: any) {\n if (!entity) return;\n\n [\n \"interestRateAddOn\",\n \"originationPointsAddOn\",\n \"applicationFee\",\n \"documentFee\",\n \"processingFee\",\n \"lenderFinanceAppraisalFee\",\n \"rpolt6\",\n \"rpogt6\",\n \"purchase\",\n ].forEach((prop: string) => {\n const key = prop as keyof RentalLolaFields;\n this[key] = entity[prop];\n });\n }\n}\n\nexport class LoanCostOverride {\n iREscrowOverrideInt?: number;\n iREscrowOverrideMoneyAmt?: number;\n taxEscrowAmount?: number;\n insEscrowAmount?: number;\n\n constructor(entity: any) {\n if (!entity) return;\n\n [\n \"iREscrowOverrideInt\",\n \"iREscrowOverrideMoneyAmt\",\n \"taxEscrowAmount\",\n \"insEscrowAmount\",\n ].forEach((prop: string) => {\n const key = prop as keyof LoanCostOverride;\n this[key] = entity[prop];\n });\n }\n}\n","import { QuoteType } from \"../../types/QuoteType\";\nimport { YesNo } from \"../enums\";\n\nexport interface FixAndFlipQuote {\n quoteName?: string;\n quoteId?: number | null;\n quoteType: QuoteType;\n overrideMaster?: boolean;\n exceptionPricingOverride?: FixAndFlipOverrideOptions;\n leverage?: ShortTermAdjustmentOptions;\n loanSummary?: LoanSummary;\n loanTerm?: LoanTerm;\n dealTerms?: DealTerms;\n borrowerInfo?: BorrowerInfo;\n username: string;\n sfaccountid?: string;\n sfdealid?: string;\n campaignId?: string;\n campaignCode?: string;\n campaignExpirationDate?: string;\n campaignIncentive?: string;\n campaignName?: string;\n hasSubmittedQuote?: boolean;\n underwriterFields?: ShortTermUnderwriterFields;\n underwriterStatus?: string;\n lenderFinance?: ShortTermLolaFields;\n loanCostOverride?: LoanCostOverrideSTF;\n}\n\nexport class LoanSummary {\n loanPurpose?: string = \"\";\n loanProduct?: string = \"\";\n propertyAddress?: string = \"\";\n city?: string = \"\";\n state?: string = \"\";\n zip?: string = \"\";\n propertyType?: string = \"\";\n formattedAddress?: string = \"\";\n}\n\nexport class LoanTerm {\n channel?: string = \"\";\n referralFee?: YesNo = YesNo.No;\n brokerFee?: number = 0;\n loanTerm?: string = \"\";\n guaranty?: string = \"\";\n appraisalFee?: number = 0;\n brokerProcessingFee?: number = 0;\n projectInspectionFee?: number = 0;\n internalRefinance?: YesNo = YesNo.No;\n exitFeeCheck?: YesNo = YesNo.No;\n deferredOrigPercent?: number = 0;\n}\n\nexport class DealTerms {\n targetCloseDate?: string = \"\";\n timeCloseToPayoff?: number = 0;\n lesserOfLotOrPurchase?: number = 0;\n rehabConBudget?: number = 0;\n totalPurchasePrice?: number = 0;\n afterCompletedVal?: number = 0;\n refinance?: YesNo = YesNo.No;\n existingDebtStatus?: string = \"\";\n cashOut?: YesNo = YesNo.Yes;\n heavyRehab?: YesNo = YesNo.No;\n originalPurchaseDate?: string = \"\";\n payoff?: number = 0;\n buyUpPercentage: number = 0;\n buyDownPercentage: number = 0;\n isZeroOrigFee: YesNo = YesNo.No;\n numOfProperties?: number = 1;\n submittedDate?: string = \"\";\n}\n\nexport class BorrowerInfo {\n primaryGuarantor?: string = \"\";\n secondaryGuarantor?: string = \"\";\n borrowerIsReferral: YesNo = YesNo.No;\n borrowingEntity?: string = \"\";\n fnfCompletedInThreeYears?: number = 0;\n buildsCompletedInThreeYears?: number = 0;\n completedTransactions?: number = 0;\n qualifyingFICO?: number = 0;\n combinedLiquidity?: number = 0;\n usCitizen?: YesNo = YesNo.No;\n borrowerTier: string = \"\";\n altTier?: YesNo = YesNo.No;\n completedExits?: number = 0;\n}\n\nexport class FixAndFlipOverrideOptions {\n finalRateOverride?: number | string = \"\";\n finalOrigFeeOverride?: number | string = \"\";\n blendedLTCOverride?: number | string = \"\";\n purchaseLTCOverride?: number | string = \"\";\n rateReductionOverride?: number | string = 0;\n exceptionType?: string = \"\";\n arvOverride?: number | string = \"\";\n commissionReduction?: number | string = 0;\n autoRate?: number | string = 0;\n autoFee?: number | string = 0;\n processingFeeOverride?: number | string = \"\";\n achRequired?: string = YesNo.Yes;\n achExempt?: string = \"Non-exempt\";\n\n constructor(entity: any) {\n if (!entity) return;\n\n [\n \"finalRateOverride\",\n \"finalOrigFeeOverride\",\n \"blendedLTCOverride\",\n \"purchaseLTCOverride\",\n \"rateReductionOverride\",\n \"exceptionType\",\n \"commissionReduction\",\n \"arvOverride\",\n \"autoRate\",\n \"autoFee\",\n \"processingFeeOverride\",\n \"achRequired\",\n \"achExempt\",\n ].forEach((prop: string) => {\n const key = prop as keyof FixAndFlipOverrideOptions;\n this[key] = entity[prop];\n });\n }\n}\n\nexport class ShortTermUnderwriterFields {\n legalFee?: number | string = \"\";\n\n constructor(entity: any) {\n if (!entity) return;\n\n [\"legalFee\"].forEach((prop: string) => {\n const key = prop as keyof ShortTermUnderwriterFields;\n this[key] = entity[prop];\n });\n }\n}\n\nexport class ShortTermLolaFields {\n interestRateAddOn?: number | string;\n originationPointsAddOn?: number | string;\n applicationFee?: number | string;\n documentFee?: number | string;\n processingFee?: number | string;\n lenderFinanceAppraisalFee?: number | string;\n rpolt6?: boolean;\n rpogt6?: boolean;\n purchase?: boolean;\n\n constructor(entity: any) {\n if (!entity) return;\n\n [\n \"interestRateAddOn\",\n \"originationPointsAddOn\",\n \"applicationFee\",\n \"documentFee\",\n \"processingFee\",\n \"lenderFinanceAppraisalFee\",\n \"rpolt6\",\n \"rpogt6\",\n \"purchase\",\n ].forEach((prop: string) => {\n const key = prop as keyof ShortTermLolaFields;\n this[key] = entity[prop];\n });\n }\n}\n\nexport class ShortTermAdjustmentOptions {\n adjustedARV?: number | string = \"\";\n adjustedPurchaseLTC?: number | string = \"\";\n adjustedBlendedLTC?: number | string = \"\";\n\n constructor(entity: any) {\n if (!entity) return;\n\n [\"adjustedARV\", \"adjustedPurchaseLTC\", \"adjustedBlendedLTC\"].forEach(\n (prop: string) => {\n const key = prop as keyof ShortTermAdjustmentOptions;\n this[key] = entity[prop];\n }\n );\n }\n}\n\nexport class LoanCostOverrideSTF {\n iREscrowOverrideInt?: number;\n iREscrowOverrideMoneyAmt?: number;\n\n constructor(entity: any) {\n if (!entity) return;\n\n [\"iREscrowOverrideInt\", \"iREscrowOverrideMoneyAmt\"].forEach(\n (prop: string) => {\n const key = prop as keyof LoanCostOverrideSTF;\n this[key] = entity[prop];\n }\n );\n }\n}\n","import { YesNo } from \"./models/enums\";\nimport {\n RentalForm,\n RentalPremierForm,\n} from \"./models/rental/rental-form.model\";\nimport {\n LoanCostOverride,\n RentalLolaFields,\n RentalOverrideOptions,\n RentalPremierQuote,\n RentalQuote,\n RentalUnderwriterFields,\n Scenario,\n} from \"./models/rental/rental.model\";\nimport { FixAndFlipForm } from \"./models/short-term/short-term-form.model\";\nimport {\n BorrowerInfo,\n DealTerms,\n FixAndFlipOverrideOptions,\n FixAndFlipQuote,\n LoanCostOverrideSTF,\n LoanSummary,\n LoanTerm,\n ShortTermAdjustmentOptions,\n ShortTermLolaFields,\n ShortTermUnderwriterFields,\n} from \"./models/short-term/short-term.model\";\nimport { QuoteType } from \"./types/QuoteType\";\n\nexport class QuoteUtils {\n public static normalizeOverrideValues(overrides: T) {\n const normalizedValues: { [key: string]: any } = {};\n for (const [key, value] of Object.entries(overrides)) {\n if (value !== undefined && value !== \"\") {\n const val = key === \"rateReductionOverride\" ? +value : value;\n normalizedValues[key] = val;\n }\n }\n\n if (normalizedValues.rateReductionOverride === 0) {\n normalizedValues.rateReductionOverride = undefined;\n }\n\n return normalizedValues;\n }\n\n public static PrettyPrintQuoteType(quoteType: QuoteType): string {\n if (quoteType === \"STF\") {\n return \"Short Term Finance\";\n } else return quoteType;\n }\n\n public static FixAndFlipFormToQuote(\n formData: FixAndFlipForm\n ): Promise {\n const getKeyValue =\n (key: U) =>\n (obj: T) =>\n obj[key];\n\n return new Promise((res) => {\n const underwriterFields: ShortTermUnderwriterFields =\n new ShortTermUnderwriterFields(null);\n const lenderFinance: ShortTermLolaFields = new ShortTermLolaFields(null);\n const leverage: ShortTermAdjustmentOptions =\n new ShortTermAdjustmentOptions(null);\n const exceptionPricingOverride: FixAndFlipOverrideOptions =\n new FixAndFlipOverrideOptions(null);\n const loanSummary: LoanSummary = new LoanSummary();\n const loanTerm: LoanTerm = new LoanTerm();\n const dealTerms: DealTerms = new DealTerms();\n const borrowerInfo: BorrowerInfo = new BorrowerInfo();\n const loanCostOverride: LoanCostOverrideSTF = new LoanCostOverrideSTF(\n null\n );\n\n const objects = [\n underwriterFields,\n lenderFinance,\n exceptionPricingOverride,\n leverage,\n loanSummary,\n loanTerm,\n dealTerms,\n borrowerInfo,\n loanCostOverride,\n ];\n\n Object.keys(formData).forEach((key: any) => {\n for (let i = 0; i <= objects.length - 1; i++) {\n if (Object.prototype.hasOwnProperty.call(objects[i], key)) {\n const value = getKeyValue(\n key\n )(formData);\n const object = objects[i] as any;\n\n object[key] = value;\n }\n }\n });\n\n const fixAndFlipQuote: FixAndFlipQuote = {\n username: formData.username ?? \"\",\n quoteName: formData.quoteName,\n quoteType: formData.quoteType,\n overrideMaster: formData.overrideMaster,\n sfaccountid: formData.sfaccountid,\n sfdealid: formData.sfdealid,\n campaignId: formData.campaignId,\n campaignName: formData.campaignName,\n campaignExpirationDate: formData.campaignExpirationDate,\n campaignIncentive: formData.campaignIncentive,\n campaignCode: formData.campaignCode,\n lenderFinance,\n underwriterFields,\n leverage,\n borrowerInfo,\n dealTerms,\n exceptionPricingOverride:\n QuoteUtils.normalizeOverrideValues(\n exceptionPricingOverride\n ),\n loanSummary,\n loanTerm,\n loanCostOverride,\n };\n\n res(fixAndFlipQuote);\n });\n }\n\n public static RentalFormToPremierQuote(\n formData: RentalPremierForm\n ): Promise {\n return new Promise((res) => {\n const rentalPremierQuote: RentalPremierQuote = {\n quoteName: formData.quoteName,\n brokerFee: formData.brokerFee,\n borrowerIsReferral: formData.borrowerIsReferral,\n appraisedVal1: formData.appraisedVal1,\n creditScore: formData.creditScore,\n submissionType: formData.submissionType,\n annualTaxes: formData.annualTaxes,\n propertiesNY: formData.propertiesNY,\n annualInsurance: formData.annualInsurance,\n refiL1cFixNFlip: formData.refiL1cFixNFlip,\n buyUpDownOption: formData.buyUpDownOption,\n username: formData.username,\n sfaccountid: formData.sfaccountid,\n sfdealid: formData.sfdealid,\n numOfProperties: formData.numOfProperties,\n overrideMaster: formData.overrideMaster,\n annualFloodInsurance: formData.annualFloodInsurance,\n borrowingEntity: formData.borrowingEntity,\n mortgagePayoffs: formData.mortgagePayoffs,\n quoteType: \"Premier\",\n appraisedVal3: formData.appraisedVal3,\n totalCosts1: formData.totalCosts1,\n monthlyRent: formData.monthlyRent,\n sreoPropertyNumber: formData.sreoPropertyNumber,\n productType: formData.productType,\n purchasePrice: formData.purchasePrice,\n prepaymentPenalty: formData.prepaymentPenalty,\n borrowerNetWorth: formData.borrowerNetWorth,\n yieldSpread: parseFloat(formData.yieldSpread?.toString()),\n annualHOA: formData.annualHOA,\n base: {\n condo: formData.condo,\n fixToRent: formData.fixToRent,\n propertyVal: formData.propertyVal,\n },\n buyUpDownPercentage: formData.buyUpDownPercentage,\n brokerProcessingFee: formData.brokerProcessingFee,\n appraisalFee: formData.appraisalFee,\n usCitizen: formData.usCitizen,\n isTier5Borrower: formData.isTier5Borrower,\n premier: {\n collateral: formData.collateral,\n collateralCondos: formData.collateralCondos,\n index: formData.index,\n openPrepayOption: formData.openPrepayOption,\n propertyManagementFee: formData.propertyManagementFee,\n },\n };\n\n res(rentalPremierQuote);\n });\n }\n\n public static RentalFormToQuote(formData: RentalForm): Promise {\n return new Promise((res) => {\n const exceptionPricingOverride: RentalOverrideOptions =\n new RentalOverrideOptions(formData);\n const underwriterFields: RentalUnderwriterFields =\n new RentalUnderwriterFields(formData);\n const lenderFinance: RentalLolaFields = new RentalLolaFields(formData);\n const loanCostOverride: LoanCostOverride = new LoanCostOverride(formData);\n const rentalQuote: RentalQuote = {\n quoteName: formData.quoteName,\n brokerFee: formData.brokerFee,\n borrowerIsReferral: formData.borrowerIsReferral,\n appraisedVal1: formData.appraisedVal1,\n creditScore: formData.creditScore,\n submissionType: formData.submissionType,\n annualTaxes: formData.annualTaxes,\n propertiesNY: formData.propertiesNY,\n state: formData.state,\n annualInsurance: formData.annualInsurance,\n refiL1cFixNFlip: formData.refiL1cFixNFlip,\n buyUpDownOption: formData.buyUpDownOption,\n username: formData.username,\n numOfProperties: formData.numOfProperties,\n overrideMaster: formData.overrideMaster,\n annualFloodInsurance: formData.annualFloodInsurance,\n borrowingEntity: formData.borrowingEntity,\n mortgagePayoffs: formData.mortgagePayoffs,\n quoteType: \"Rental\",\n appraisedVal3: formData.appraisedVal3,\n totalCosts1: formData.totalCosts1,\n monthlyRent: formData.monthlyRent,\n sreoPropertyNumber: formData.sreoPropertyNumber,\n productType: formData.productType,\n purchasePrice: formData.purchasePrice,\n prepaymentPenalty: formData.prepaymentPenalty,\n borrowerNetWorth: formData.borrowerNetWorth,\n yieldSpread: parseFloat(formData.yieldSpread?.toString()),\n annualHOA: formData.annualHOA,\n base: {\n condo: formData.condo,\n fixToRent: formData.fixToRent,\n propertyVal: formData.propertyVal,\n },\n buyUpDownPercentage: formData.buyUpDownPercentage,\n brokerProcessingFee: formData.brokerProcessingFee,\n appraisalFee: formData.appraisalFee,\n usCitizen: formData.usCitizen,\n isTier5Borrower: formData.isTier5Borrower,\n sfaccountid: formData.sfaccountid,\n sfdealid: formData.sfdealid,\n campaignId: formData.campaignId,\n campaignCode: formData.campaignCode,\n campaignExpirationDate: formData.campaignExpirationDate,\n campaignIncentive: formData.campaignIncentive,\n campaignName: formData.campaignName,\n isZeroOrigFee: formData.isZeroOrigFee,\n seasonalRental: formData.seasonalRental,\n fiveNineUnit: formData.fiveNineUnit,\n twoFourUnit: formData.twoFourUnit,\n vacantProperty: formData.vacantProperty,\n zip: formData.zip,\n propertyAddress: formData.propertyAddress,\n submittedDate: formData.submittedDate,\n city: formData.city,\n exceptionPricingOverride:\n QuoteUtils.normalizeOverrideValues(\n exceptionPricingOverride\n ),\n underwriterFields,\n lenderFinance,\n loanCostOverride,\n };\n\n res(rentalQuote);\n });\n }\n\n public static GenerateRentalQuoteScenarios(): Scenario[] {\n return [\n {\n scenarioId: 1,\n included: YesNo.Yes,\n preferred: YesNo.Yes,\n ltvPercentage: 75,\n },\n {\n scenarioId: 2,\n included: YesNo.Yes,\n preferred: YesNo.No,\n ltvPercentage: 70,\n },\n {\n scenarioId: 3,\n included: YesNo.Yes,\n preferred: YesNo.No,\n ltvPercentage: 65,\n },\n ];\n }\n}\n","import { Box, useColorModeValue, useToast } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { QuoteApi } from \"../api/QuoteApi\";\nimport ComboBox from \"../components/form-fields/ComboBox\";\nimport { allTableColumns } from \"../components/quotes/QuotesTableColumns\";\nimport QuoteTableContainer from \"../components/QuoteTableContainer\";\nimport useUser from \"../hooks/useUser\";\nimport { Quote } from \"../lib/models/quote.model\";\nimport { QuoteUtils } from \"../lib/quote-utils\";\nimport { SelectItem } from \"../lib/types/SelectItem\";\nimport { UserAccount } from \"../lib/types/UserAccountType\";\n\nfunction QuotesView() {\n const [quotes, setQuotes] = React.useState([]);\n const [accounts, setAccounts] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const { user } = useUser();\n const toast = useToast();\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n const [selectedAccount, setSelectedAccount] =\n React.useState(null);\n\n const accountItems: SelectItem[] = React.useMemo(() => {\n return accounts.map((account) => {\n return {\n label: `${account.firstName} ${account.lastName}`,\n value: account.userID,\n };\n });\n }, [accounts]);\n\n const fetchUsers = React.useCallback(() => {\n if (!user) return;\n setLoading(true);\n\n QuoteApi.getQuoteUsers()\n .then((res) => {\n const activeUsers = res.data.map((x) => {\n return x;\n });\n setAccounts(activeUsers);\n })\n .catch((err) => {});\n }, [user]);\n\n const fetchAllQuotes = React.useCallback(() => {\n setLoading(true);\n\n if (!user?.email) {\n return;\n }\n\n QuoteApi.getQuotes({ username: user.email, allquotes: true })\n .then((res) => {\n const activeQuotes = res.data.map((x) => {\n x.quoteTypeLabel = QuoteUtils.PrettyPrintQuoteType(x.quoteType);\n x.createdBy = `${x.firstname} ${x.lastname}`;\n return x;\n });\n\n setQuotes(activeQuotes);\n })\n .catch((err) => {\n toast({\n title: \"Unable to Load Quotes\",\n description: \"An error has occurred when attempting to fetch quotes\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .finally(() => setLoading(false));\n }, [setQuotes, user, toast, toastVariant]);\n\n const fetchQuotes = React.useCallback(() => {\n setLoading(true);\n\n QuoteApi.getQuotesById(selectedAccount?.value)\n .then((res) => {\n const activeQuotes = res.data.map((x) => {\n x.quoteTypeLabel = QuoteUtils.PrettyPrintQuoteType(x.quoteType);\n x.createdBy = `${x.firstname} ${x.lastname}`;\n return x;\n });\n\n setQuotes(activeQuotes);\n })\n .catch((err) => {\n toast({\n title: \"Unable to Load Quotes\",\n description: \"An error has occurred when attempting to fetch quotes\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .finally(() => {\n setLoading(false);\n });\n }, [setQuotes, selectedAccount, toast, toastVariant]);\n\n React.useEffect(() => {\n if (!selectedAccount) {\n fetchAllQuotes();\n fetchUsers();\n return;\n }\n fetchQuotes();\n }, [selectedAccount, fetchQuotes, fetchAllQuotes, fetchUsers]);\n\n return (\n column.Header !== \"Owned By\")\n : allTableColumns\n }\n >\n \n \n \n \n );\n}\n\nexport default QuotesView;\n","import React from \"react\";\nimport { Comment } from \"../lib/types/CommentType\";\n\nexport interface ICommentsContext {\n comments: Comment[];\n deleteComment: (commentId: number) => void;\n submitComment: (comment: string, email: string) => void;\n fetchComments: () => void;\n commentsLoading: boolean;\n}\n\nexport const CommentsContext = React.createContext<\n ICommentsContext | undefined\n>(undefined);\n","import { useColorModeValue, useToast } from \"@chakra-ui/react\";\nimport React, { useCallback, useState } from \"react\";\nimport { QuoteApi } from \"../api/QuoteApi\";\nimport { Comment } from \"../lib/types/CommentType\";\nimport { CommentsContext } from \"../state/comments-context\";\n\nexport interface CommentsProviderProps {\n children: any;\n id: number;\n}\nfunction CommentsContextProvider({ children, id }: CommentsProviderProps) {\n const toast = useToast();\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n const [comments, setComments] = useState([]);\n const [commentsLoading, setCommentsLoading] = useState(false);\n\n const fetchComments = useCallback(() => {\n if (!id) return;\n setCommentsLoading(true);\n\n QuoteApi.getQuoteComments(+id)\n .then((res) => {\n setComments(res.data);\n })\n .catch((err) => {\n toast({\n title: \"Unable to Load Comments\",\n description:\n \"An error has occurred when attempting to fetch comments\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .finally(() => setCommentsLoading(false));\n }, [id, toast, setComments, toastVariant]);\n\n const submitComment = useCallback(\n (comment: string, email: string) => {\n if (!email) return;\n setCommentsLoading(true);\n\n QuoteApi.createQuoteComment(+id, comment, email)\n .then((res) => {\n const newComment = res.data;\n comments.push(newComment);\n toast({\n title: \"Comment Saved\",\n description: \"The comment has been saved\",\n status: \"success\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .catch((err) => {\n toast({\n title: \"Unable to Save your comment\",\n description:\n \"An error has occurred when attempting to submit a comment\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .finally(() => setCommentsLoading(false));\n },\n [comments, id, toast, toastVariant]\n );\n\n const deleteComment = useCallback(\n (commentId: number) => {\n if (!commentId) return;\n setCommentsLoading(true);\n\n QuoteApi.deactivateComment(+id, commentId)\n .then((res) => {\n setComments(\n comments.filter((comment: Comment) => {\n return comment.commentId !== commentId;\n })\n );\n toast({\n title: \"Comment Deleted\",\n description: \"The comment has been deleted\",\n status: \"success\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .catch((err) => {\n toast({\n title: \"Unable to delete your comment\",\n description:\n \"An error has occurred when attempting to delete a comment\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .finally(() => setCommentsLoading(false));\n },\n [id, comments, toast, toastVariant]\n );\n\n React.useEffect(() => {\n fetchComments();\n }, [fetchComments]);\n\n return (\n \n {children}\n \n );\n}\n\nexport default CommentsContextProvider;\n","import { Box, Flex } from \"@chakra-ui/layout\";\nimport { useColorModeValue } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport FormLoadingOverlay from \"./FormLoadingOverlay\";\nimport { lightMode, darkMode } from \"../../lib/models/color-mode-colors\";\n\nfunction FormSkeletonLoader() {\n const loadingOverlayBg = useColorModeValue(lightMode[100], darkMode[200]);\n return (\n \n \n \n \n \n );\n}\n\nexport default FormSkeletonLoader;\n","import * as yup from \"yup\";\nimport { QuoteType } from \"../../types/QuoteType\";\nimport { YesNo } from \"../enums\";\nimport {\n BorrowerInfo,\n DealTerms,\n FixAndFlipOverrideOptions,\n LoanSummary,\n LoanTerm,\n ShortTermUnderwriterFields,\n} from \"./short-term.model\";\nexport class FixAndFlipForm\n implements\n ShortTermUnderwriterFields,\n FixAndFlipOverrideOptions,\n LoanSummary,\n LoanTerm,\n DealTerms,\n BorrowerInfo\n{\n afterCompletedVal: number = 0;\n appraisalFee: number = 0;\n borrowingEntity: string = \"\";\n borrowerIsReferral: YesNo = YesNo.No;\n brokerFee: number = 0;\n brokerProcessingFee: number = 0;\n buildsCompletedInThreeYears: number = 0;\n cashOut: YesNo = YesNo.Yes;\n channel: string = \"\";\n city: string = \"\";\n combinedLiquidity: number = 0;\n enabled: boolean = false;\n existingDebtStatus: string = \"\";\n fnfCompletedInThreeYears: number = 0;\n guaranty: string = \"Full Recourse\";\n heavyRehab: YesNo = YesNo.No;\n lesserOfLotOrPurchase: number = 0;\n loanProduct: string = \"\";\n loanPurpose: string = \"\";\n loanTerm: string = \"\";\n overrideMaster: boolean = false;\n primaryGuarantor: string = \"\";\n projectInspectionFee: number = 0;\n propertyAddress: string = \"\";\n propertyType: string = \"\";\n qualifyingFICO: number = 0;\n quoteName: string = \"New Short Term Finance Quote\";\n quoteType: QuoteType = \"STF\";\n referralFee: YesNo = YesNo.No;\n internalRefinance: YesNo = YesNo.No;\n exitFeeCheck: YesNo = YesNo.No;\n refinance: YesNo = YesNo.No;\n rehabConBudget: number = 0;\n totalPurchasePrice: number = 0;\n completedTransactions: number = 0;\n secondaryGuarantor: string = \"\";\n state: string = \"\";\n targetCloseDate: string = \"\";\n tier: string = \"1\";\n timeCloseToPayoff: number = 0;\n usCitizen: YesNo = YesNo.Yes;\n zip: string = \"\";\n originalPurchaseDate: string = \"\";\n payoff: number = 0;\n username?: string = \"\";\n borrowerTier: string = \"1\";\n altTier?: YesNo = YesNo.No;\n buyDownPercentage: number = 0;\n buyUpPercentage: number = 0;\n blendedLTCOverride?: number | string = \"\";\n purchaseLTCOverride?: number | string = \"\";\n arvOverride?: number | string = \"\";\n exceptionType?: string = \"\";\n rateReductionOverride?: number = 0;\n finalRateOverride?: number | string = \"\";\n finalOrigFeeOverride?: number | string = \"\";\n autoRate?: number | string = 0;\n autoFee?: number | string = 0;\n commissionReduction?: number | string = 0;\n isZeroOrigFee: YesNo = YesNo.No;\n numOfProperties: number = 1;\n legalFee: number | string = \"\";\n interestRateAddOn?: number | string = \"\";\n originationPointsAddOn?: number | string = \"\";\n applicationFee?: number | string = \"\";\n documentFee?: number | string = \"\";\n processingFee?: number | string = \"\";\n lenderFinanceAppraisalFee?: number | string = \"\";\n rpolt6?: boolean;\n rpogt6?: boolean;\n purchase?: boolean;\n adjustedARV?: number | string = \"\";\n adjustedPurchaseLTC?: number | string = \"\";\n adjustedBlendedLTC?: number | string = \"\";\n submittedDate?: string = \"\";\n deferredOrigPercent?: number = 0;\n iREscrowOverrideInt?: number;\n iREscrowOverrideMoneyAmt?: number;\n processingFeeOverride?: number;\n achExempt?: string = \"Non-exempt\";\n achRequired?: string = YesNo.Yes;\n completedExits?: number = 0;\n\n sfaccountid?: string = \"\";\n sfdealid?: string = \"\";\n campaignId?: string = \"\";\n campaignCode?: string = \"\";\n campaignExpirationDate?: string = \"\";\n campaignIncentive?: string = \"\";\n campaignName?: string = \"\";\n\n constructor(entity: any) {\n if (!entity) return;\n\n this.afterCompletedVal = entity.dealTerms.afterCompletedVal;\n this.appraisalFee = entity.loanTerm.appraisalFee;\n this.borrowingEntity = entity.borrowerInfo.borrowingEntity;\n this.borrowerIsReferral = entity.borrowerInfo.borrowerIsReferral ?? \"No\";\n this.brokerFee = entity.loanTerm.brokerFee;\n this.brokerProcessingFee = entity.loanTerm.brokerProcessingFee;\n this.buildsCompletedInThreeYears =\n entity.borrowerInfo.buildsCompletedInThreeYears;\n this.cashOut = entity.dealTerms.cashOut;\n this.channel = entity.loanTerm.channel ?? \"Standard Retail\";\n this.city = entity.loanSummary.city;\n this.combinedLiquidity = entity.borrowerInfo.combinedLiquidity;\n this.existingDebtStatus = entity.dealTerms.existingDebtStatus;\n this.fnfCompletedInThreeYears =\n entity.borrowerInfo.fnfCompletedInThreeYears;\n this.guaranty = entity.loanTerm.guaranty;\n this.heavyRehab = entity.dealTerms.heavyRehab;\n this.lesserOfLotOrPurchase = entity.dealTerms.lesserOfLotOrPurchase;\n this.loanProduct = entity.loanSummary.loanProduct;\n this.loanPurpose = entity.loanSummary.loanPurpose;\n this.loanTerm = entity.loanTerm.loanTerm;\n this.overrideMaster = entity.overrideMaster;\n this.primaryGuarantor = entity.borrowerInfo.primaryGuarantor;\n this.projectInspectionFee = entity.loanTerm?.projectInspectionFee ?? 0;\n this.propertyAddress = entity.loanSummary.propertyAddress;\n this.propertyType = entity.loanSummary.propertyType;\n this.qualifyingFICO = entity.borrowerInfo.qualifyingFICO;\n this.quoteName = entity.quoteName;\n this.quoteType = entity.quoteType;\n this.referralFee = entity.loanTerm.referralFee;\n this.internalRefinance = entity.loanTerm.internalRefinance ?? \"No\";\n this.exitFeeCheck = entity.loanTerm.exitFeeCheck ?? \"No\";\n this.refinance = entity.dealTerms.refinance;\n this.rehabConBudget = entity.dealTerms.rehabConBudget;\n this.totalPurchasePrice = entity.dealTerms.totalPurchasePrice;\n this.completedTransactions =\n entity.borrowerInfo?.completedTransactions ??\n entity.borrowerInfo.rentalUnitsOwned;\n this.secondaryGuarantor = entity.borrowerInfo.secondaryGuarantor;\n this.state = entity.loanSummary.state;\n this.targetCloseDate = entity.dealTerms.targetCloseDate;\n this.timeCloseToPayoff = entity.dealTerms.timeCloseToPayoff;\n this.usCitizen = entity.borrowerInfo.usCitizen;\n this.zip = entity.loanSummary.zip;\n this.originalPurchaseDate = entity.dealTerms.originalPurchaseDate;\n this.payoff = entity.dealTerms.payoff;\n this.username = entity?.username ?? \"\";\n this.borrowerTier = entity?.borrowerInfo.borrowerTier ?? \"1\";\n this.altTier = entity?.borrowerInfo.altTier ?? \"No\";\n this.buyUpPercentage = entity.dealTerms.buyUpPercentage ?? 0;\n this.buyDownPercentage = entity.dealTerms.buyDownPercentage ?? 0;\n this.sfaccountid = entity?.sfaccountid ?? \"\";\n this.sfdealid = entity?.sfdealid ?? \"\";\n this.campaignId = entity?.campaignId ?? \"\";\n this.campaignCode = entity?.campaignCode ?? \"\";\n this.campaignExpirationDate = entity?.campaignExpirationDate ?? \"\";\n this.campaignIncentive = entity?.campaignIncentive ?? \"\";\n this.campaignName = entity?.campaignName ?? \"\";\n this.blendedLTCOverride =\n entity.exceptionPricingOverride.blendedLTCOverride ?? \"\";\n this.purchaseLTCOverride =\n entity.exceptionPricingOverride.purchaseLTCOverride ?? \"\";\n this.arvOverride = entity.exceptionPricingOverride.arvOverride ?? \"\";\n this.commissionReduction =\n entity.exceptionPricingOverride.commissionReduction ?? 0;\n this.autoFee = entity?.exceptionPricingOverride.autoFee ?? 0;\n this.autoRate = entity?.exceptionPricingOverride.autoRate ?? 0;\n this.finalRateOverride =\n entity.exceptionPricingOverride.finalRateOverride ?? \"\";\n this.finalOrigFeeOverride =\n entity.exceptionPricingOverride.finalOrigFeeOverride ?? \"\";\n this.isZeroOrigFee = entity.dealTerms.isZeroOrigFee ?? \"No\";\n this.rateReductionOverride =\n entity?.exceptionPricingOverride.rateReductionOverride ??\n this.rateReductionOverride;\n this.exceptionType =\n entity?.exceptionPricingOverride.exceptionType ?? this.exceptionType;\n this.achExempt = entity?.exceptionPricingOverride.achExempt ?? \"Non-exempt\";\n this.achRequired =\n entity?.exceptionPricingOverride.achRequired ?? YesNo.Yes;\n this.numOfProperties =\n entity.dealTerms?.numOfProperties ?? this.numOfProperties;\n this.legalFee = entity?.underwriterFields?.legalFee ?? this.legalFee;\n this.interestRateAddOn =\n entity?.lenderFinance?.interestRateAddOn ?? this.interestRateAddOn;\n this.originationPointsAddOn =\n entity?.lenderFinance?.originationPointsAddOn ??\n this.originationPointsAddOn;\n this.applicationFee =\n entity?.lenderFinance?.applicationFee ?? this.applicationFee;\n this.documentFee = entity?.lenderFinance?.documentFee ?? this.documentFee;\n this.lenderFinanceAppraisalFee =\n entity?.lenderFinance?.lenderFinanceAppraisalFee ??\n this.lenderFinanceAppraisalFee;\n this.processingFee =\n entity?.lenderFinance?.processingFee ?? this.processingFee;\n this.rpolt6 = entity?.lenderFinance?.rpolt6 ?? this.rpolt6;\n this.rpogt6 = entity?.lenderFinance?.rpogt6 ?? this.rpogt6;\n this.purchase = entity?.lenderFinance?.purchase ?? this.purchase;\n this.adjustedBlendedLTC =\n entity?.leverage?.adjustedBlendedLTC ?? this.adjustedBlendedLTC;\n this.adjustedPurchaseLTC =\n entity?.leverage?.adjustedPurchaseLTC ?? this.adjustedPurchaseLTC;\n this.adjustedARV = entity?.leverage?.adjustedARV ?? this.adjustedARV;\n this.submittedDate = entity?.dealTerms?.submittedDate ?? this.submittedDate;\n this.deferredOrigPercent = entity?.loanTerm.deferredOrigPercent ?? 0;\n this.iREscrowOverrideInt = entity?.loanCostOverride?.iREscrowOverrideInt;\n this.iREscrowOverrideMoneyAmt =\n entity?.loanCostOverride?.iREscrowOverrideMoneyAmt;\n this.processingFeeOverride =\n entity?.exceptionPricingOverride?.processingFeeOverride;\n this.completedExits = entity?.borrowerInfo?.completedExits;\n }\n}\n\nconst baseYupObject = {\n afterCompletedVal: yup\n .number()\n .min(1, \"Value must be greater than 0\")\n .when(\"loanProduct\", {\n is: \"BridgePlus\",\n then: (schema) => schema.min(0),\n otherwise: (schema) => schema,\n })\n .required(\"Value After Completion is required\"),\n appraisalFee: yup.number().required(\"Valuation Fee is required\"),\n borrowingEntity: yup.string().required(\"Borrowing Entity is required\"),\n borrowerIsReferral: yup.string(),\n brokerFee: yup\n .number()\n .min(0, \"Negative values are not permitted for this selection\")\n .required(\"Broker Fee is required\"),\n brokerProcessingFee: yup\n .number()\n .required(\"Broker Processing Fee is required\"),\n buildsCompletedInThreeYears: yup\n .number()\n .required(\"Builds Completed & Sold is required\"),\n cashOut: yup.string().required(),\n channel: yup.string().required(\"Loan Channel is required\"),\n city: yup.string().required(\"City is required\"),\n combinedLiquidity: yup.number().required(\"Combined Liquidity is required\"),\n enabled: yup.boolean().required(),\n existingDebtStatus: yup.string().required(\"Existing Debt Status is required\"),\n fnfCompletedInThreeYears: yup\n .number()\n .required(\"Fix & Flips Completed & Sold is required\"),\n guaranty: yup.string().required(\"Guaranty is required\"),\n heavyRehab: yup.string().required(),\n lesserOfLotOrPurchase: yup\n .number()\n .min(1, \"Value must be greater than 0\")\n .required(\"Lot Value or Purchase Price is required\"),\n loanProduct: yup.string().required(\"Loan Product is required\"),\n loanPurpose: yup.string().required(\"Loan Purpose is required\"),\n loanTerm: yup.string().required(\"Loan Term is required\"),\n overrideMaster: yup.string().required(),\n primaryGuarantor: yup.string().required(\"Primary Guarantor is required\"),\n propertyAddress: yup.string().required(\"Street is required\"),\n propertyType: yup.string().required(\"Property Type is required\"),\n qualifyingFICO: yup\n .number()\n .required(\"Credit Score is required\")\n .max(850, \"Credit Score must be less than or equal to 850\"),\n quoteName: yup.string().required(\"Quote Name is required\"),\n quoteType: yup.string().required(\"Quote Type is required\"),\n referralFee: yup.string().required(),\n internalRefinance: yup.string(),\n exitFeeCheck: yup.string(),\n refinance: yup.string().required(),\n rehabConBudget: yup\n .number()\n .required(\"Rehab/Construction Budget is required\"),\n totalPurchasePrice: yup.number(),\n completedTransactions: yup\n .number()\n .required(\"Completed Transactions is required\"),\n secondaryGuarantor: yup.string(),\n state: yup.string().required(\"State is required\"),\n targetCloseDate: yup.string().required(\"Target Close Date is required\"),\n tier: yup.string(),\n timeCloseToPayoff: yup.number().required(\"Months to Payoff is required\"),\n usCitizen: yup.string().required(),\n zip: yup\n .string()\n .matches(/(^\\d{5}$)|(^\\d{5}-\\d{4}$)/, \"Invalid Zip Code\")\n .required(\"Zip is required\"),\n originalPurchaseDate: yup\n .string()\n .required(\"Original Purchase Date is required\"),\n payoff: yup.number().required(),\n username: yup.string(),\n altTier: yup.string(),\n borrowerTier: yup.string().required(\"Borrower Tier is required\"),\n buyUpPercentage: yup\n .number()\n .min(0, \"Negative values are not permitted for this selection\")\n .required(\"Buy Up Percentage is required\"),\n buyDownPercentage: yup.number().required(\"Buy Down Percentage is required\"),\n blendedLTCOverride: yup.number(),\n purchaseLTCOverride: yup.number(),\n arvOverride: yup.number(),\n commissionReduction: yup.number(),\n autoRate: yup.number(),\n autoFee: yup.number(),\n finalOrigFeeOverride: yup.number(),\n rateReductionOverride: yup.number(),\n finalRateOverride: yup.number(),\n isZeroOrigFee: yup.string(),\n exceptionType: yup.string(),\n numOfProperties: yup.number(),\n deferredOrigPercent: yup.number(),\n achExempt: yup.string(),\n achRequired: yup.string(),\n completedExits: yup.number(),\n};\n\nconst externalYupObject = {\n ...baseYupObject,\n brokerFee: yup\n .number()\n .min(0, \"Negative values are not permitted for this selection\")\n .max(3, \"Fee percentage must be less than 3\")\n .required(\"Broker Fee is required\"),\n};\n\nexport const FixAndFlipFormSchema = yup.object(baseYupObject);\n\nexport const ExternalFixAndFlipFormSchema = yup.object(externalYupObject);\n","import { SelectItem } from \"../../types/SelectItem\";\nimport { RentalProduct } from \"../enums\";\n\nexport function getPrepayPenaltySelects(product: string) {\n if (\n product === RentalProduct[\"10/1 ARM\"] ||\n product === RentalProduct.Fixed\n ) {\n return selectPrepayPenaltyFixed;\n }\n return selectPrepayPenalty;\n}\n\nexport const selectRentalProduct: SelectItem[] = [\n { label: \"5/1 ARM\", value: \"5/1 ARM\" },\n { label: \"10/1 ARM\", value: \"10/1 ARM\" },\n { label: \"5 IO 25 ARM\", value: \"5 IO 25 ARM\" },\n { label: \"Fixed\", value: \"Fixed\" },\n];\n\nexport const selectBuyUpBuyDown: SelectItem[] = [\n { label: \"Rate Buy Up\", value: \"Rate Buy Up\" },\n { label: \"Rate Buy Down\", value: \"Rate Buy Down\" },\n { label: \"No Buy Up/Buy Down\", value: \"No Buy Up/Buy Down\" },\n];\n\nexport const selectPrepayPenalty: SelectItem[] = [\n {\n label: \"3 Year Prepayment Penalty: 3, 2, 1\",\n value: \"3 Year Prepayment Penalty: 3, 2, 1\",\n },\n {\n label: \"5 Year Prepayment Penalty: 5, 4, 3, 2, 1\",\n value: \"5 Year Prepayment Penalty: 5, 4, 3, 2, 1\",\n },\n {\n label: \"7 Year Prepayment Penalty: 5, 5, 4, 4, 3, 2, 1\",\n value: \"7 Year Prepayment Penalty: 5, 5, 4, 4, 3, 2, 1\",\n },\n {\n label: \"No Prepayment\",\n value: \"No Prepayment\",\n },\n];\n\nexport const selectPrepayPenaltyFixed: SelectItem[] = [\n {\n label: \"3 Year Prepayment Penalty: 3, 2, 1\",\n value: \"3 Year Prepayment Penalty: 3, 2, 1\",\n },\n {\n label: \"5 Year Prepayment Penalty: 5, 4, 3, 2, 1\",\n value: \"5 Year Prepayment Penalty: 5, 4, 3, 2, 1\",\n },\n {\n label: \"7 Year Prepayment Penalty: 5, 5, 4, 4, 3, 2, 1\",\n value: \"7 Year Prepayment Penalty: 5, 5, 4, 4, 3, 2, 1\",\n },\n {\n label: \"No Prepayment\",\n value: \"No Prepayment\",\n },\n];\n\nexport const selectPrepayPenaltyBridge: SelectItem[] = [\n {\n label: \"No Prepayment\",\n value: \"No Prepayment\",\n },\n];\n","import * as yup from \"yup\";\nimport { Flatten } from \"../../types/FlattenType\";\nimport { QuoteType } from \"../../types/QuoteType\";\nimport { YesNo } from \"../enums\";\nimport { selectBuyUpBuyDown } from \"./rental-form-selects.model\";\nimport { RentalQuote, Scenario } from \"./rental.model\";\n\nexport class RentalForm implements Flatten {\n quoteName: string = \"New Rental Quote\";\n brokerFee: number = 0;\n borrowerIsReferral: YesNo = YesNo.No;\n appraisedVal1: number = 0;\n creditScore: number = 0;\n submissionType: string = \"\";\n annualTaxes: number = 0;\n propertiesNY?: YesNo = YesNo.No;\n annualInsurance: number = 0;\n refiL1cFixNFlip: YesNo = YesNo.No;\n buyUpDownOption: string = \"No Buy Up/Buy Down\";\n username: string = \"\";\n numOfProperties: number = 1;\n overrideMaster: boolean = false;\n annualFloodInsurance: number = 0;\n borrowingEntity: string = \"\";\n mortgagePayoffs: number = 0;\n quoteType: QuoteType = \"Rental\";\n appraisedVal3: number = 0;\n totalCosts1: number = 0;\n monthlyRent: number = 0;\n sreoPropertyNumber: number = 0;\n productType: string = \"\";\n purchasePrice: number = 0;\n prepaymentPenalty: string = \"\";\n borrowerNetWorth: number = 0;\n yieldSpread: number = 0;\n annualHOA: number = 0;\n buyUpDownPercentage: number = 0;\n brokerProcessingFee: number = 0;\n appraisalFee: number = 0;\n condo: YesNo = YesNo.No;\n twoFourUnit: YesNo = YesNo.No;\n vacantProperty: YesNo = YesNo.No;\n fixToRent: YesNo = YesNo.No;\n propertyVal: YesNo = YesNo.No;\n usCitizen: YesNo = YesNo.Yes;\n isTier5Borrower: YesNo = YesNo.No;\n finalOrigFeeOverride?: number | string = \"\";\n finalRateOverride?: number | string = \"\";\n rateReductionOverride?: number = 0;\n exceptionType?: string = \"\";\n autoRate?: number | string = 0;\n autoFee?: number | string = 0;\n commissionReduction?: number | string = 0;\n isZeroOrigFee?: YesNo = YesNo.No;\n underwriterStatus?: string = \"\";\n seasonalRental?: YesNo = YesNo.No;\n fiveNineUnit?: YesNo = YesNo.No;\n state?: string = \"\";\n legalFee?: number | string = \"\";\n taxImpound?: number | string = \"\";\n insuranceImpound?: number | string = \"\";\n propertyAddress?: string = \"\";\n city?: string = \"\";\n zip?: string = \"\";\n propertyType?: string = \"\";\n formattedAddress?: string = \"\";\n interestRateAddOn?: number | string = \"\";\n originationPointsAddOn?: number | string = \"\";\n applicationFee?: number | string = \"\";\n documentFee?: number | string = \"\";\n processingFee?: number | string = \"\";\n lenderFinanceAppraisalFee?: number | string = \"\";\n rpolt6?: boolean;\n rpogt6?: boolean;\n purchase?: boolean;\n submittedDate?: string = \"\";\n iREscrowOverrideInt?: number;\n iREscrowOverrideMoneyAmt?: number;\n processingFeeOverride?: number;\n taxEscrowAmount?: number;\n insEscrowAmount?: number;\n achExempt?: string = \"Non-exempt\";\n achRequired?: string = YesNo.Yes;\n splitProcessingFee?: string;\n\n propertyManagementFee: number = 0;\n collateralCondos: YesNo = YesNo.No;\n collateral: YesNo = YesNo.No;\n index: string = \"5yr I/R Swap\";\n openPrepayOption: string = \"Open Prepayment Allowance: 0% UPB/Year\";\n\n sfaccountid?: string = \"\";\n sfdealid?: string = \"\";\n campaignId?: string = \"\";\n campaignName?: string = \"\";\n campaignExpirationDate?: string = \"\";\n campaignIncentive?: string = \"\";\n campaignCode?: string = \"\";\n\n constructor(entity: any) {\n if (!entity) return;\n\n this.quoteName = entity.quoteName ?? \"New Rental Quote\";\n this.brokerFee = entity.brokerFee;\n this.borrowerIsReferral = entity.borrowerIsReferral;\n this.appraisedVal1 = entity.appraisedVal1;\n this.creditScore = entity.creditScore;\n this.submissionType = entity.submissionType ?? \"Standard Retail\";\n this.annualTaxes = entity.annualTaxes;\n this.propertiesNY = entity?.propertiesNY;\n this.annualInsurance = entity.annualInsurance;\n this.refiL1cFixNFlip = entity.refiL1cFixNFlip;\n this.buyUpDownOption = entity.buyUpDownOption;\n this.username = entity.username;\n this.numOfProperties = entity.numOfProperties;\n this.overrideMaster = entity.overrideMaster;\n this.annualFloodInsurance = entity.annualFloodInsurance;\n this.borrowingEntity = entity.borrowingEntity;\n this.mortgagePayoffs = entity.mortagePayoffs ?? entity.mortgagePayoffs;\n this.quoteType = entity.quoteType;\n this.appraisedVal3 = entity.appraisedVal3;\n this.totalCosts1 = entity.totalCosts1;\n this.monthlyRent = entity.monthlyRent;\n this.sreoPropertyNumber = entity.sreoPropertyNumber;\n this.productType = entity.productType;\n this.purchasePrice = entity.purchasePrice;\n this.prepaymentPenalty = entity.prepaymentPenalty;\n this.borrowerNetWorth = entity.borrowerNetWorth;\n this.yieldSpread = entity.yieldSpread ?? entity.yieldSpendPremium;\n this.annualHOA = entity.annualHOA;\n this.buyUpDownPercentage = entity.buyUpDownPercentage;\n this.brokerProcessingFee = entity.brokerProcessingFee;\n this.appraisalFee = entity.appraisalFee;\n this.condo = entity.base.condo;\n this.vacantProperty = entity.vacantProperty;\n this.twoFourUnit = entity.twoFourUnit;\n this.fixToRent = entity.base.fixToRent;\n this.propertyVal = entity.base.propertyVal;\n this.usCitizen = entity.usCitizen ?? YesNo.Yes;\n this.isTier5Borrower = entity.isTier5Borrower ?? YesNo.No;\n this.finalRateOverride =\n entity.exceptionPricingOverride.finalRateOverride ?? \"\";\n this.finalOrigFeeOverride =\n entity?.exceptionPricingOverride.finalOrigFeeOverride ??\n this.finalOrigFeeOverride;\n this.rateReductionOverride =\n entity?.exceptionPricingOverride.rateReductionOverride ??\n this.rateReductionOverride;\n this.autoFee = entity?.exceptionPricingOverride.autoFee ?? 0;\n this.autoRate = entity?.exceptionPricingOverride.autoRate ?? 0;\n this.commissionReduction =\n entity.exceptionPricingOverride.commissionReduction ?? 0;\n this.achRequired = entity.exceptionPricingOverride.achRequired ?? YesNo.Yes;\n this.achExempt = entity.exceptionPricingOverride.achExempt ?? \"Non-exempt\";\n this.splitProcessingFee =\n entity.exceptionPricingOverride.splitProcessingFee ?? 0;\n\n this.isZeroOrigFee = entity?.isZeroOrigFee ?? YesNo.No;\n this.exceptionType =\n entity?.exceptionPricingOverride.exceptionType ?? this.exceptionType;\n this.seasonalRental = entity?.seasonalRental ?? YesNo.No;\n this.fiveNineUnit = entity?.fiveNineUnit ?? YesNo.No;\n this.state = entity?.state ?? entity?.state;\n this.legalFee = entity?.underwriterFields?.legalFee ?? this.legalFee;\n this.taxImpound = entity?.underwriterFields?.taxImpound ?? this.taxImpound;\n this.insuranceImpound =\n entity?.underwriterFields?.insuranceImpound ?? this.insuranceImpound;\n this.submittedDate = entity?.submittedDate ?? \"\";\n\n this.interestRateAddOn =\n entity?.lenderFinance?.interestRateAddOn ?? this.interestRateAddOn;\n this.originationPointsAddOn =\n entity?.lenderFinance?.originationPointsAddOn ??\n this.originationPointsAddOn;\n this.applicationFee =\n entity?.lenderFinance?.applicationFee ?? this.applicationFee;\n this.documentFee = entity?.lenderFinance?.documentFee ?? this.documentFee;\n this.lenderFinanceAppraisalFee =\n entity?.lenderFinance?.lenderFinanceAppraisalFee ??\n this.lenderFinanceAppraisalFee;\n this.processingFee =\n entity?.lenderFinance?.processingFee ?? this.processingFee;\n this.rpolt6 = entity?.lenderFinance?.rpolt6 ?? this.rpolt6;\n this.rpogt6 = entity?.lenderFinance?.rpogt6 ?? this.rpogt6;\n this.purchase = entity?.lenderFinance?.purchase ?? this.purchase;\n\n this.iREscrowOverrideInt = entity.loanCostOverride?.iREscrowOverrideInt;\n this.iREscrowOverrideMoneyAmt =\n entity.loanCostOverride?.iREscrowOverrideMoneyAmt;\n this.processingFeeOverride =\n entity.exceptionPricingOverride?.processingFeeOverride;\n this.taxEscrowAmount = entity.loanCostOverride?.taxEscrowAmount;\n this.insEscrowAmount = entity.loanCostOverride?.insEscrowAmount;\n\n this.propertyManagementFee =\n entity?.propertyManagementFee ?? this.propertyManagementFee;\n this.collateralCondos = entity?.collateralCondos ?? this.collateralCondos;\n this.collateral = entity?.collateral ?? this.collateral;\n this.index = entity?.index ?? this.index;\n this.openPrepayOption = entity?.openPrepayOption ?? this.openPrepayOption;\n\n this.sfaccountid = entity?.sfaccountid ?? \"\";\n this.sfdealid = entity?.sfdealid ?? \"\";\n this.campaignId = entity?.campaignId ?? \"\";\n this.campaignCode = entity?.campaignCode ?? \"\";\n this.campaignExpirationDate = entity?.campaignExpirationDate ?? \"\";\n this.campaignIncentive = entity?.campaignIncentive ?? \"\";\n this.campaignName = entity?.campaignName ?? \"\";\n this.propertyAddress = entity?.propertyAddress ?? \"\";\n this.city = entity?.city ?? \"\";\n this.zip = entity?.zip ?? \"\";\n }\n}\n\nexport class RentalPremierForm extends RentalForm {\n constructor(entity: any) {\n super(entity);\n\n this.quoteType = \"Premier\";\n this.quoteName = entity?.quoteName ?? \"New Rental Premier Quote\";\n this.propertyManagementFee =\n entity?.propertyManagementFee ?? this.propertyManagementFee;\n this.collateralCondos = entity?.collateralCondos ?? this.collateralCondos;\n this.collateral = entity?.collateral ?? this.collateral;\n this.index = entity?.index ?? this.index;\n this.openPrepayOption = entity?.openPrepayOption ?? this.openPrepayOption;\n }\n}\n\nexport class RentalScenarios implements Scenario {\n scenarioId: number = 1;\n ltvPercentage: number = 75;\n included: YesNo = YesNo.Yes;\n preferred: YesNo = YesNo.No;\n\n constructor(entity: any) {\n if (!entity) return;\n\n this.scenarioId = entity.scenarioId;\n this.ltvPercentage = entity.ltvPercentage;\n this.included = entity.included;\n this.preferred = entity.preferred;\n }\n}\n\n// For the side navigation\n// Break the rental form schema up into it's\n// sections.\n\n// Final object will be a spread of each section\n\n// As the form navigation active id === form section\n// then we determine whether or not the values match the\n// schema. thus giving the validation feedback.\n\nconst baseYupObject = {\n quoteName: yup.string().required(\"Quote Name is required\"),\n brokerFee: yup\n .number()\n .min(0, \"Negative values are not permitted for this selection\")\n .required(\"Broker Fee is required\"),\n borrowerIsReferral: yup.string().required(),\n appraisedVal1: yup.number().required(\"Appraised Value is required\"),\n creditScore: yup\n .number()\n .required(\"Credit Score is required\")\n .min(0, \"Credit Score must be 0 or greater than or equal to 300\")\n .max(850, \"Credit Score must be less than or equal to 850\"),\n submissionType: yup.string().required(\"Submission Type is required\"),\n annualTaxes: yup.number().required(\"Annual Taxes is required\"),\n propertiesNY: yup.string(),\n annualInsurance: yup.number().required(\"Annual Insurance is required\"),\n refiL1cFixNFlip: yup.string().required(),\n buyUpDownOption: yup\n .string()\n .required(\"Buy Up / Buy Down Option is required\"),\n username: yup.string(),\n numOfProperties: yup.number().required(\"Number of Properties is required\"),\n overrideMaster: yup.boolean().required(),\n annualFloodInsurance: yup\n .number()\n .required(\"Annual Flood Insurance is required\"),\n borrowingEntity: yup.string().required(\"Borrowing Entity is required\"),\n mortgagePayoffs: yup.number().required(\"Mortgage Payoff is required\"),\n quoteType: yup.string().required(\"Quote Type is required\"),\n appraisedVal3: yup.number().required(\"Appraised Value is required\"),\n totalCosts1: yup.number().required(\"Total Costs is required\"),\n monthlyRent: yup\n .number()\n .min(1, \"Value must be greater than 0\")\n .required(\"Monthly Rent is required\"),\n sreoPropertyNumber: yup.number().required(\"SREO Property Number is required\"),\n productType: yup.string().required(\"Product Type is required\"),\n purchasePrice: yup.number().required(\"Purchase Price is required\"),\n prepaymentPenalty: yup.string().required(\"Prepayment Penalty is required\"),\n borrowerNetWorth: yup.number().required(\"Borrower Net Worth is required\"),\n yieldSpread: yup.number().required(\"Yield Spend Premium is required\"),\n annualHOA: yup.number().required(\"Annual HOA is required\"),\n buyUpDownPercentage: yup\n .number()\n .min(0, \"Negative values are not permitted for this selection\")\n .when(\"buyUpDownOption\", {\n is: selectBuyUpBuyDown[0].value,\n then: (schema) => schema.max(2, \"Buy Up Percentage must be less than 2%\"),\n otherwise: (schema) => schema,\n })\n .required(\"Buy Up / Buy Down Percentage is required\"),\n brokerProcessingFee: yup\n .number()\n .required(\"Broker Processing Fee is required\"),\n appraisalFee: yup.number().required(\"Valuation Fee is required\"),\n condo: yup.string().required(),\n fixToRent: yup.string().required(),\n propertyVal: yup.string().required(),\n usCitizen: yup.string().required(),\n isTier5Borrower: yup.string().required(),\n finalOrigFeeOverride: yup.number(),\n commissionReduction: yup.number(),\n rateReductionOverride: yup.number(),\n finalRateOverride: yup.number(),\n isZeroOrigFee: yup.string(),\n exceptionType: yup.string(),\n seasonalRental: yup.string(),\n fiveNineUnit: yup.string(),\n autoRate: yup.number(),\n autoFee: yup.number(),\n achExempt: yup.string(),\n achRequired: yup.string(),\n splitProcessingFee: yup.string(),\n state: yup.string().required(\"Property State is Required\"),\n propertyAddress: yup.string().required(\"Street is required\"),\n city: yup.string().required(\"City is required\"),\n zip: yup\n .string()\n .matches(/(^\\d{5}$)|(^\\d{5}-\\d{4}$)/, \"Invalid Zip Code\")\n .required(\"Zip is required\"),\n};\n\nconst externalYupObject = {\n ...baseYupObject,\n brokerFee: yup\n .number()\n .min(0, \"Negative values are not permitted for this selection\")\n .max(3, \"Fee percentage must be less than 3\")\n .required(\"Broker Fee is required\"),\n};\n\nexport const RentalFormSchema = yup.object(baseYupObject);\n\nexport const ExternalRentalFormSchema = yup.object(externalYupObject);\n\nexport class RentalBorrowerInformation {\n quoteName: string = \"\";\n numOfProperties: number = 0;\n productType: string = \"\";\n submissionType: string = \"\";\n borrowingEntity: string = \"\";\n borrowerNetWorth: number = 0;\n creditScore: number = 0;\n sreoPropertyNumber: number = 0;\n usCitizen: YesNo = YesNo.No;\n isTier5Borrower: YesNo = YesNo.No;\n}\n\nexport class RentalPropertySummary {\n appraisedVal1: number = 0;\n totalCosts1: number = 0;\n appraisedVal3: number = 0;\n purchasePrice: number = 0;\n mortgagePayoffs: number = 0;\n monthlyRent: number = 0;\n annualInsurance: number = 0;\n annualFloodInsurance: number = 0;\n annualTaxes: number = 0;\n annualHOA: number = 0;\n propertyManagementFee: number = 0;\n state?: string = \"\";\n propertyAddress?: string = \"\";\n city?: string = \"\";\n zip?: string = \"\";\n propertyType?: string = \"\";\n formattedAddress?: string = \"\";\n}\n\nexport class RentalPricing {\n yieldSpread: number = 0;\n brokerFee: number = 0;\n brokerProcessingFee: number = 0;\n buyUpDownOption: number = 0;\n buyUpDownPercentage: number = 0;\n prepaymentPenalty: number = 0;\n appraisalFee: number = 0;\n refiL1cFixNFlip: YesNo = YesNo.No;\n propertiesNY?: YesNo = YesNo.No;\n propertyVal: YesNo = YesNo.No;\n referral: YesNo = YesNo.No;\n condo: YesNo = YesNo.No;\n isZeroOrigFee?: YesNo = YesNo.No;\n seasonalRental?: YesNo = YesNo.No;\n fiveNineUnit?: YesNo = YesNo.No;\n}\n\nexport class RentalPremierPricing extends RentalPricing {\n openPrepayOption: string = \"\";\n collateral: YesNo = YesNo.No;\n referral: YesNo = YesNo.No;\n collateralCondos: YesNo = YesNo.No;\n}\n","import { Button } from \"@chakra-ui/button\";\nimport {\n AlertDialog,\n AlertDialogBody,\n AlertDialogContent,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogOverlay,\n} from \"@chakra-ui/modal\";\nimport React from \"react\";\n\nexport interface WarningDialogProps {\n isOpen: boolean;\n onCloseHandler?: () => void;\n onConfirmHandler?: () => void;\n titleText: string;\n contentText: string;\n confirmText: string;\n danger?: boolean;\n}\n\nfunction WarningDialog(props: WarningDialogProps) {\n const {\n onCloseHandler,\n onConfirmHandler,\n contentText,\n titleText,\n confirmText,\n danger = true,\n } = props;\n const [isOpen, setIsOpen] = React.useState(props.isOpen ?? false);\n const cancelRef = React.useRef(null);\n\n React.useEffect(() => {\n setIsOpen(props.isOpen);\n }, [props.isOpen]);\n\n const handleClose = () => {\n setIsOpen(!isOpen);\n if (onCloseHandler) {\n onCloseHandler();\n }\n };\n\n const handleConfirm = () => {\n setIsOpen(!isOpen);\n if (onConfirmHandler) {\n onConfirmHandler();\n }\n };\n\n return (\n \n \n \n \n {titleText}\n \n\n {contentText}\n\n \n \n Cancel\n \n \n {confirmText}\n \n \n \n \n \n );\n}\n\nexport default WarningDialog;\n","import React from \"react\";\nimport { FixAndFlipForm } from \"../../lib/models/short-term/short-term-form.model\";\nimport {\n RentalForm,\n RentalPremierForm,\n} from \"../../lib/models/rental/rental-form.model\";\nimport { QuoteUtils } from \"../../lib/quote-utils\";\nimport { QuoteMetadata } from \"../../lib/types/QuoteMetadata\";\nimport { QuotingType } from \"../../state/quote-reducer\";\nimport WarningDialog from \"../WarningDialog\";\n\nexport interface FormStaleQuoteDialogProps {\n quote: QuotingType;\n metadata: QuoteMetadata | undefined;\n calculateHandler: (quote: any) => void;\n}\n\nfunction FormStaleQuoteDialog(props: FormStaleQuoteDialogProps) {\n const { metadata, calculateHandler, quote } = props;\n const [isStaleDialogOpen, setStateDialogOpen] =\n React.useState(false);\n\n const checkStaleQuote = React.useCallback(\n (metadata: QuoteMetadata, quote: QuotingType) => {\n const { createdDate, updatedDate, pricingLastUpdated } = metadata;\n\n if (!createdDate) return;\n\n if (!pricingLastUpdated || !updatedDate) {\n setStateDialogOpen(true);\n return;\n }\n\n if (metadata?.rateLock?.rateLockActive) {\n return;\n }\n\n const dateLastUpdatedMilliseconds = Date.parse(updatedDate);\n const pricingLastUpdatedMilliseconds = Date.parse(\n pricingLastUpdated.toString()\n );\n\n if (dateLastUpdatedMilliseconds < pricingLastUpdatedMilliseconds) {\n setStateDialogOpen(true);\n }\n },\n []\n );\n\n const handleCalculation = () => {\n calculateQuote(quote).then((quoteToCalculate) => {\n calculateHandler(quoteToCalculate);\n });\n };\n\n const calculateQuote = async (quote: QuotingType) => {\n if (quote === null) return;\n\n if (quote.quoteType === \"Rental\") {\n const formValues = new RentalForm(quote);\n const quoteTransform = await QuoteUtils.RentalFormToQuote(formValues);\n quoteTransform.scenario = QuoteUtils.GenerateRentalQuoteScenarios();\n return quoteTransform;\n } else if (quote.quoteType === \"Premier\") {\n const formValues = new RentalPremierForm(quote);\n const quoteTransform = await QuoteUtils.RentalFormToPremierQuote(\n formValues\n );\n quoteTransform.scenario = QuoteUtils.GenerateRentalQuoteScenarios();\n\n return quoteTransform;\n } else if (quote.quoteType === \"STF\") {\n const formValues = new FixAndFlipForm(quote);\n const quoteTransform = await QuoteUtils.FixAndFlipFormToQuote(formValues);\n\n return quoteTransform;\n }\n };\n\n React.useEffect(() => {\n if (metadata) {\n checkStaleQuote(metadata, quote);\n }\n }, [metadata, checkStaleQuote, quote]);\n\n return (\n \n );\n}\n\nexport default FormStaleQuoteDialog;\n","import { QuoteType } from \"../types/QuoteType\";\nimport { FixAndFlipCalculation } from \"./short-term/short-term-calculation.model\";\nimport { FixAndFlipQuote } from \"./short-term/short-term.model\";\nimport { RentalCalculation } from \"./rental/rental-calculation.model\";\nimport { RentalQuote } from \"./rental/rental.model\";\n\nexport interface Quote {\n quoteName: string;\n createdOn: string;\n modifiedOn: string;\n id: number;\n quoteType: QuoteType;\n productType: string;\n isActive: boolean;\n quoteTypeLabel?: string;\n username: string;\n firstname: string;\n lastname: string;\n createdBy: string;\n underwriterStatus: string;\n}\n\nexport class FixAndFlipQuoteDetail {\n in: FixAndFlipQuote;\n out: FixAndFlipCalculation;\n\n constructor(quote: FixAndFlipQuote, calculation: FixAndFlipCalculation) {\n this.in = quote;\n this.out = calculation;\n }\n}\n\nexport class RentalQuoteDetail {\n in: RentalQuote;\n out: RentalCalculation;\n\n constructor(quote: RentalQuote, calculation: RentalCalculation) {\n this.in = quote;\n this.out = calculation;\n }\n}\n","import axios from \"axios\";\nimport { QuotingType } from \"../state/quote-reducer\";\nimport { ApiUtils } from \"./ApiUtils\";\n\nexport class CalculationApi {\n private static readonly _baseUrl = ApiUtils.getBaseCalcUrl();\n\n public static getCalculation(request: QuotingType): Promise {\n return axios.post(`${this._baseUrl}/calculations`, [request]);\n }\n}\n","import { CalculationApi } from \"../api/CalculationApi\";\nimport { QuoteApi } from \"../api/QuoteApi\";\nimport { QuotingType } from \"../state/quote-reducer\";\nimport { QuoteMetadata } from \"./types/QuoteMetadata\";\n\nexport class BaseQuoteHandler {\n async loadBase(id: number): Promise<{ response: any }> {\n const result = await QuoteApi.getQuoteById(id);\n const resultData = result.data;\n\n return {\n response: resultData,\n };\n }\n\n async calculateBase(quote: QuotingType): Promise {\n const result = await CalculationApi.getCalculation(quote);\n const resultData: QuoteDetail = result.data;\n\n return resultData;\n }\n\n async saveBase(quoteToSave: QuoteDetail): Promise {\n const result = await QuoteApi.createQuote(quoteToSave);\n\n return result.data;\n }\n\n async copyBase(quoteToCopy: QuoteDetail): Promise {\n const result = await QuoteApi.createQuote(quoteToCopy);\n\n return result.data;\n }\n\n async updateBase(\n id: number,\n quoteToUpdate: QuoteDetail\n ): Promise {\n const result = await QuoteApi.updateQuote(id, quoteToUpdate);\n\n return result.data;\n }\n\n async submitBase(quoteToSubmit: QuoteDetail): Promise {\n const result = await QuoteApi.submitQuoteToSalesforce(quoteToSubmit);\n\n return result.data.successful;\n }\n\n async submitForReviewBase(quoteToSubmit: QuoteDetail): Promise {\n const result = await QuoteApi.submitQuoteForReview(quoteToSubmit);\n\n return result.data.successful;\n }\n\n async submitExceptionBase(\n id: number,\n status: string | undefined\n ): Promise {\n const result = await QuoteApi.submitQuoteExceptions(id, status);\n\n return result.data.successful;\n }\n\n public getMetadataFromQuote(metadata: any): QuoteMetadata {\n return {\n createdDate: metadata.created_on,\n updatedDate: metadata.updated_at,\n valid: metadata.valid,\n pricingLastUpdated: metadata.pricingLastUpdated,\n submittedToSalesforce: metadata.submittedToSalesforce ?? false,\n underwriterStatus: metadata.underwriterStatus,\n exceptionStatus: metadata.exceptionStatus,\n rateLock: metadata.rateLock ?? {},\n ownerRole: metadata.ownerRole,\n ownerBalance: metadata.ownerBalance,\n milestone: metadata.milestone,\n milestoneUpdatedAt: metadata.milestoneUpdatedAt,\n };\n }\n}\n","import { QuoteApi } from \"../api/QuoteApi\";\nimport { CalculationType, QuotingType } from \"../state/quote-reducer\";\nimport { BaseQuoteHandler } from \"./BaseQuoteHandler\";\nimport { IQuoteHandler } from \"./interfaces/IQuoteHandler\";\nimport { YesNo } from \"./models/enums\";\nimport { RentalQuoteDetail } from \"./models/quote.model\";\nimport { RentalCalculation } from \"./models/rental/rental-calculation.model\";\nimport { RentalQuote } from \"./models/rental/rental.model\";\nimport { MetricType } from \"./types/MetricType\";\nimport { QuoteCalculationStatus } from \"./types/QuoteCalculationStatus\";\nimport { QuoteLoadPayload } from \"./types/QuoteLoadPayloadType\";\n\nexport class RentalQuoteHandler\n extends BaseQuoteHandler\n implements IQuoteHandler\n{\n public async load(id: number): Promise {\n const result = await super.loadBase(id);\n const { response } = result;\n\n return {\n id: id,\n calculation: response.out,\n quote: response.in,\n warnings: this.getWarningsFromCalculation(response.out),\n metadata: super.getMetadataFromQuote(response.metadata),\n };\n }\n\n public async calculate(\n quote: RentalQuote,\n id: number | null\n ): Promise> {\n quote.quoteId = id;\n const calculation = await super.calculateBase(quote);\n await this.saveMetric(id, \"CALC\", quote, calculation.out);\n return {\n quote: quote,\n calculation: calculation.out,\n warnings: this.getWarningsFromCalculation(calculation.out),\n };\n }\n\n public async save(\n quote: QuotingType,\n calculation: CalculationType\n ): Promise> {\n const quoteToSave = this.formatQuoteForAction(quote, calculation);\n const newQuoteId = await super.saveBase(quoteToSave);\n\n await this.saveMetric(\n +newQuoteId,\n \"SAVED\",\n quoteToSave.in,\n quoteToSave.out\n );\n\n return {\n id: +newQuoteId,\n quote: quoteToSave.in,\n calculation: quoteToSave.out,\n warnings: this.getWarningsFromCalculation(quoteToSave.out),\n };\n }\n\n public async submit(\n id: number,\n quote: QuotingType,\n calculation: CalculationType\n ): Promise {\n const quoteToSubmit = this.formatQuoteForAction(quote, calculation);\n quoteToSubmit.out.id = id.toString();\n\n const hasQuoteBeenSubmitted = await super.submitBase(quoteToSubmit);\n\n if (hasQuoteBeenSubmitted) {\n await this.saveMetric(\n id,\n \"SUBMITTED\",\n quoteToSubmit.in,\n quoteToSubmit.out\n );\n }\n\n return hasQuoteBeenSubmitted;\n }\n\n public async submitForReview(\n id: number,\n quote: QuotingType,\n calculation: CalculationType\n ) {\n const quoteToSubmit = this.formatQuoteForAction(quote, calculation);\n quoteToSubmit.out.id = id.toString();\n\n const hasQuoteBeenSubmitted = await super.submitForReviewBase(\n quoteToSubmit\n );\n\n if (hasQuoteBeenSubmitted) {\n await this.saveMetric(\n id,\n \"SUBMITTED\",\n quoteToSubmit.in,\n quoteToSubmit.out\n );\n }\n\n return hasQuoteBeenSubmitted;\n }\n\n public async submitException(id: number, status: string | undefined) {\n const hasExceptionSubmitted = await super.submitExceptionBase(id, status);\n return hasExceptionSubmitted;\n }\n\n public async copy(\n quote: QuotingType,\n calculation: CalculationType\n ): Promise> {\n const quoteToCopy = this.formatQuoteForAction(quote, calculation, true);\n const newQuoteId = await super.copyBase(quoteToCopy);\n\n await this.saveMetric(\n +newQuoteId,\n \"SAVED\",\n quoteToCopy.in,\n quoteToCopy.out\n );\n\n return {\n id: newQuoteId,\n quote: quoteToCopy.in,\n calculation: quoteToCopy.out,\n warnings: this.getWarningsFromCalculation(quoteToCopy.out),\n };\n }\n\n public async update(\n id: number,\n quote: QuotingType,\n calculation: CalculationType\n ): Promise> {\n const quoteToUpdate = this.formatQuoteForAction(quote, calculation);\n quoteToUpdate.out.id = id.toString();\n\n const updatedQuote = await super.updateBase(id, quoteToUpdate);\n\n await this.saveMetric(\n +quoteToUpdate.out.id,\n \"UPDATED\",\n quoteToUpdate.in,\n quoteToUpdate.out\n );\n\n return {\n id: +quoteToUpdate.out.id,\n quote: updatedQuote.in,\n calculation: updatedQuote.out,\n warnings: this.getWarningsFromCalculation(updatedQuote.out),\n };\n }\n\n public formatQuoteForAction(\n quote: QuotingType,\n calculation: CalculationType,\n isCopy: boolean = false\n ): RentalQuoteDetail {\n if (isCopy && quote && calculation) {\n calculation.id = \"\";\n quote.sfaccountid = undefined;\n quote.sfdealid = undefined;\n quote.campaignId = undefined;\n quote.campaignName = undefined;\n quote.campaignExpirationDate = undefined;\n quote.campaignIncentive = undefined;\n quote.campaignCode = undefined;\n quote.hasSubmittedQuote = false;\n }\n\n return new RentalQuoteDetail(\n quote as RentalQuote,\n calculation as RentalCalculation\n );\n }\n\n public async saveMetric(\n id: number | null,\n metric: MetricType,\n quote: RentalQuote,\n calculation: RentalCalculation\n ) {\n if (!id) return;\n\n const preferredScenarioId =\n quote.scenario?.find((x) => x.preferred === YesNo.Yes)?.scenarioId ?? 0;\n\n const metricOptions = {\n env: process.env.REACT_APP_ENVIRONMENT ?? \"DEV\",\n producttype: quote.quoteType,\n quoteproducttype: quote.productType,\n quotetype: metric,\n username: quote.username,\n quoteid: id,\n quoteloanamount:\n calculation.scenarios[preferredScenarioId - 1].loanAmt.toString(),\n };\n\n await QuoteApi.saveMetric(metricOptions);\n }\n\n public getWarningsFromCalculation(\n calc: RentalCalculation\n ): QuoteCalculationStatus {\n const warnings = calc.scenarios[0].warnings;\n\n const calculation =\n calc.validationErrors === \"h\" ? \"\" : calc.validationErrors;\n\n const errors = calc.validationErrors;\n const rateLLPAsFactored = calc.rateLLPAs;\n const feeLLPAsFactored = calc.feeLLPAs;\n const overridePricing = calc.overridePricing;\n\n const calcStatus: QuoteCalculationStatus = {};\n\n calculation && (calcStatus.calculation = calculation);\n warnings && (calcStatus.warnings = warnings);\n rateLLPAsFactored && (calcStatus.rateLLPAsFactored = rateLLPAsFactored);\n feeLLPAsFactored && (calcStatus.feeLLPAsFactored = feeLLPAsFactored);\n errors && (calcStatus.errors = errors);\n overridePricing && (calcStatus.overridePricing = overridePricing);\n\n return calcStatus;\n }\n}\n","import { CalculationType, QuotingType } from \"../state/quote-reducer\";\nimport { IQuoteHandler } from \"./interfaces/IQuoteHandler\";\nimport { RentalQuoteDetail } from \"./models/quote.model\";\nimport { RentalCalculation } from \"./models/rental/rental-calculation.model\";\nimport { RentalPremierQuote } from \"./models/rental/rental.model\";\nimport { RentalQuoteHandler } from \"./RentalQuoteHandler\";\n\nexport class RentalPremierQuoteHandler\n extends RentalQuoteHandler\n implements IQuoteHandler\n{\n public formatQuoteForAction(\n quote: QuotingType,\n calculation: CalculationType,\n isCopy: boolean = false\n ): RentalQuoteDetail {\n if (isCopy && quote && calculation) {\n calculation.id = \"\";\n quote.sfaccountid = undefined;\n quote.sfdealid = undefined;\n quote.hasSubmittedQuote = false;\n }\n\n return new RentalQuoteDetail(\n quote as RentalPremierQuote,\n calculation as RentalCalculation\n );\n }\n}\n","import { QuoteApi } from \"../api/QuoteApi\";\nimport { CalculationType, QuotingType } from \"../state/quote-reducer\";\nimport { BaseQuoteHandler } from \"./BaseQuoteHandler\";\nimport { IQuoteHandler } from \"./interfaces/IQuoteHandler\";\nimport { FixAndFlipQuoteDetail } from \"./models/quote.model\";\nimport { FixAndFlipCalculation } from \"./models/short-term/short-term-calculation.model\";\nimport { FixAndFlipQuote } from \"./models/short-term/short-term.model\";\nimport { MetricType } from \"./types/MetricType\";\nimport { QuoteCalculationStatus } from \"./types/QuoteCalculationStatus\";\nimport { QuoteLoadPayload } from \"./types/QuoteLoadPayloadType\";\n\nexport class ShortTermQuoteHandler\n extends BaseQuoteHandler\n implements IQuoteHandler\n{\n public async load(id: number): Promise {\n const result = await super.loadBase(id);\n const { response } = result;\n return {\n id: id,\n quote: response.in,\n calculation: response.out,\n warnings: this.getWarningsFromCalculation(response.out),\n metadata: super.getMetadataFromQuote(response.metadata),\n };\n }\n\n public async calculate(\n quote: FixAndFlipQuote,\n id: number | null\n ): Promise> {\n quote.quoteId = id;\n const calculation = await super.calculateBase(quote as FixAndFlipQuote);\n\n calculation.out.BorrowerInfo.borrowerTier =\n calculation.out.BorrowerInfo.borrowerTier.toString();\n if (id) {\n await this.saveMetric(+id, \"CALC\", quote, calculation.out);\n }\n return {\n quote: quote,\n calculation: calculation.out,\n warnings: this.getWarningsFromCalculation(calculation.out),\n };\n }\n\n public async save(\n quote: QuotingType,\n calculation: CalculationType\n ): Promise> {\n const quoteToSave = this.formatQuoteForAction(quote, calculation);\n const newQuoteId = await super.saveBase(quoteToSave);\n\n await this.saveMetric(\n +newQuoteId,\n \"SAVED\",\n quoteToSave.in,\n quoteToSave.out\n );\n return {\n id: newQuoteId,\n quote: quoteToSave.in,\n calculation: quoteToSave.out,\n warnings: this.getWarningsFromCalculation(quoteToSave.out),\n };\n }\n\n public async submit(\n id: number,\n quote: QuotingType,\n calculation: CalculationType\n ): Promise {\n const quoteToSubmit = this.formatQuoteForAction(quote, calculation);\n quoteToSubmit.out.id = id.toString();\n\n const hasQuoteBeenSubmitted = await super.submitBase(quoteToSubmit);\n\n if (hasQuoteBeenSubmitted) {\n await this.saveMetric(\n +id,\n \"SUBMITTED\",\n quoteToSubmit.in,\n quoteToSubmit.out\n );\n }\n\n return hasQuoteBeenSubmitted;\n }\n\n public async submitForReview(\n id: number,\n quote: QuotingType,\n calculation: CalculationType\n ) {\n const quoteToSubmit = this.formatQuoteForAction(quote, calculation);\n quoteToSubmit.out.id = id.toString();\n\n const hasQuoteBeenSubmitted = await super.submitForReviewBase(\n quoteToSubmit\n );\n\n if (hasQuoteBeenSubmitted) {\n await this.saveMetric(\n +id,\n \"SUBMITTED\",\n quoteToSubmit.in,\n quoteToSubmit.out\n );\n }\n\n return hasQuoteBeenSubmitted;\n }\n\n public async submitException(id: number, status: string | undefined) {\n const hasExceptionSubmitted = await super.submitExceptionBase(id, status);\n return hasExceptionSubmitted;\n }\n\n public async copy(\n quote: QuotingType,\n calculation: CalculationType\n ): Promise> {\n const quoteToCopy = this.formatQuoteForAction(quote, calculation, true);\n const newQuoteId = await super.copyBase(quoteToCopy);\n\n await this.saveMetric(\n +newQuoteId,\n \"SAVED\",\n quoteToCopy.in,\n quoteToCopy.out\n );\n\n return {\n id: newQuoteId,\n quote: quoteToCopy.in,\n calculation: quoteToCopy.out,\n warnings: this.getWarningsFromCalculation(quoteToCopy.out),\n };\n }\n\n public async update(\n id: number,\n quote: QuotingType,\n calculation: CalculationType\n ): Promise> {\n const quoteToUpdate = this.formatQuoteForAction(quote, calculation);\n quoteToUpdate.out.id = id.toString();\n const updatedQuoteId = await super.updateBase(id, quoteToUpdate);\n\n await this.saveMetric(\n +updatedQuoteId.out.id,\n \"UPDATED\",\n quoteToUpdate.in,\n quoteToUpdate.out\n );\n\n return {\n id: +updatedQuoteId.out.id,\n quote: quoteToUpdate.in,\n calculation: quoteToUpdate.out,\n warnings: this.getWarningsFromCalculation(quoteToUpdate.out),\n };\n }\n\n private formatQuoteForAction(\n quote: QuotingType,\n calculation: CalculationType,\n isCopy: boolean = false\n ): FixAndFlipQuoteDetail {\n if (isCopy && quote && calculation) {\n calculation.id = \"\";\n quote.sfaccountid = undefined;\n quote.sfdealid = undefined;\n quote.campaignId = undefined;\n quote.campaignName = undefined;\n quote.campaignExpirationDate = undefined;\n quote.campaignIncentive = undefined;\n quote.campaignCode = undefined;\n quote.hasSubmittedQuote = false;\n }\n\n return new FixAndFlipQuoteDetail(\n quote as FixAndFlipQuote,\n calculation as FixAndFlipCalculation\n );\n }\n\n public async saveMetric(\n id: number | null,\n metric: MetricType,\n quote: FixAndFlipQuote,\n calculation: FixAndFlipCalculation\n ) {\n if (!id) return;\n\n const metricOptions = {\n env: process.env.REACT_APP_ENVIRONMENT ?? \"DEV\",\n producttype: quote.quoteType,\n quoteproducttype: quote.loanSummary?.loanProduct,\n quotetype: metric,\n username: quote.username ?? \"\",\n quoteid: +id,\n quoteloanamount: calculation.LTCCalcOnPurchaseRehab.loanAmt.toString(),\n };\n\n await QuoteApi.saveMetric(metricOptions);\n }\n\n private getWarningsFromCalculation(\n calc: FixAndFlipCalculation\n ): QuoteCalculationStatus {\n const calculation = calc?.validationErrors;\n const rateLLPAsFactored = calc.rateLLPAsFactored;\n const feeLLPAsFactored = calc.feeLLPAsFactored;\n const warnings = calc.warnings;\n const errors = calc.validationErrors;\n const overrides = calc.overridePricing;\n const calcStatus: QuoteCalculationStatus = {};\n\n calculation && (calcStatus.calculation = calculation);\n rateLLPAsFactored && (calcStatus.rateLLPAsFactored = rateLLPAsFactored);\n feeLLPAsFactored && (calcStatus.feeLLPAsFactored = feeLLPAsFactored);\n warnings && (calcStatus.warnings = warnings);\n errors && (calcStatus.errors = errors);\n overrides && (calcStatus.overridePricing = overrides);\n\n return calcStatus;\n }\n}\n","import { IQuoteHandler } from \"./interfaces/IQuoteHandler\";\nimport { RentalPremierQuoteHandler } from \"./RentalPremierQuoteHandler\";\nimport { RentalQuoteHandler } from \"./RentalQuoteHandler\";\nimport { ShortTermQuoteHandler } from \"./ShortTermQuoteHandler\";\nimport { QuoteType } from \"./types/QuoteType\";\n\nexport class QuoteHandlerFactory {\n static getQuoteInstance(quoteType: QuoteType): IQuoteHandler {\n switch (quoteType) {\n case \"Rental\":\n return new RentalQuoteHandler();\n case \"Premier\":\n return new RentalPremierQuoteHandler();\n default:\n return new ShortTermQuoteHandler();\n }\n }\n}\n","import { QuoteHandlerFactory } from \"../lib/QuoteHandlerFactory\";\nimport { MetricType } from \"../lib/types/MetricType\";\nimport { QuoteLoadPayload } from \"../lib/types/QuoteLoadPayloadType\";\nimport { QuoteType } from \"../lib/types/QuoteType\";\nimport { CalculationType, QuotingType } from \"../state/quote-reducer\";\n\nexport class QuoteService {\n public static loadQuoteByType(\n quoteType: QuoteType,\n id: number\n ): Promise {\n return QuoteHandlerFactory.getQuoteInstance(quoteType).load(id);\n }\n\n public static calculateQuoteByType(\n quoteType: QuoteType,\n quote: QuotingType,\n id: number | null\n ): Promise> {\n return QuoteHandlerFactory.getQuoteInstance(quoteType).calculate(quote, id);\n }\n\n public static saveQuoteByType(\n id: number,\n quoteType: QuoteType,\n quote: QuotingType,\n calculation: CalculationType,\n isCopy: boolean\n ): Promise> {\n if (isCopy) {\n return QuoteHandlerFactory.getQuoteInstance(quoteType).copy(\n quote,\n calculation\n );\n }\n\n if (id) {\n return QuoteHandlerFactory.getQuoteInstance(quoteType).update(\n id,\n quote,\n calculation\n );\n }\n\n return QuoteHandlerFactory.getQuoteInstance(quoteType).save(\n quote,\n calculation\n );\n }\n\n public static submitQuoteByType(\n id: number,\n quoteType: QuoteType,\n quote: QuotingType,\n calculation: CalculationType,\n submitForReview: boolean\n ): Promise {\n if (submitForReview) {\n return QuoteHandlerFactory.getQuoteInstance(quoteType).submitForReview(\n id,\n quote,\n calculation\n );\n }\n\n return QuoteHandlerFactory.getQuoteInstance(quoteType).submit(\n id,\n quote,\n calculation\n );\n }\n\n public static saveMetricByType(\n id: number | null,\n metric: MetricType,\n quoteType: QuoteType,\n quote: QuotingType,\n calculation: CalculationType\n ): Promise {\n return QuoteHandlerFactory.getQuoteInstance(quoteType).saveMetric(\n id,\n metric,\n quote,\n calculation\n );\n }\n}\n","import React from \"react\";\nimport { MetricType } from \"../lib/types/MetricType\";\nimport { QuoteType } from \"../lib/types/QuoteType\";\nimport { QuoteActionTypes } from \"./quote-reducer\";\nimport { QuoteState } from \"./quote-state\";\n\ntype Dispatch = (action: QuoteActionTypes) => void;\n\nexport interface IQuoteContext {\n state: QuoteState;\n dispatch: Dispatch;\n fetchQuote: () => void;\n saveQuoteHelper: (quote: any, isCopy?: boolean) => void;\n calculateQuote: (quote: any) => void;\n deleteQuote: (quote: any) => void;\n saveQuoteMetrics: (metric: MetricType) => Promise;\n submitQuoteHandler: (quote: any) => void;\n isOwned?: boolean;\n quoteType: QuoteType;\n quoteId?: number;\n}\n\nexport const QuoteContext = React.createContext(\n undefined\n);\n","import { YesNo } from \"../lib/models/enums\";\nimport { RateLock } from \"../lib/models/rate-lock.model\";\nimport { RentalCalculation } from \"../lib/models/rental/rental-calculation.model\";\nimport {\n RentalOverrideOptions,\n RentalPremierQuote,\n RentalQuote,\n Scenario,\n} from \"../lib/models/rental/rental.model\";\nimport { FixAndFlipCalculation } from \"../lib/models/short-term/short-term-calculation.model\";\nimport {\n FixAndFlipOverrideOptions,\n FixAndFlipQuote,\n} from \"../lib/models/short-term/short-term.model\";\nimport { QuoteCalculationStatus } from \"../lib/types/QuoteCalculationStatus\";\nimport { QuoteMetadata } from \"../lib/types/QuoteMetadata\";\nimport { QuoteType } from \"../lib/types/QuoteType\";\nimport { QuoteState } from \"./quote-state\";\n\nexport type QuotingType =\n | FixAndFlipQuote\n | RentalQuote\n | RentalPremierQuote\n | null;\n\nexport type CalculationType = FixAndFlipCalculation | RentalCalculation | null;\n\nexport type QuoteActionTypes =\n | { type: \"QUOTE_STATUS_UPDATED\"; payload: boolean }\n | { type: \"QUOTE_LOADING\" }\n | {\n type: \"QUOTE_LOADED\";\n payload: {\n quote: QuotingType;\n calculation: CalculationType;\n quoteMetadata: QuoteMetadata;\n rateLock?: RateLock;\n };\n }\n | { type: \"QUOTE_LOAD_ERROR\" }\n | {\n type: \"QUOTE_SF_INFO_UPDATE\";\n payload: {\n sfaccountid: string;\n sfdealid: string;\n campaignId: string;\n campaignName: string;\n campaignExpirationDate: string;\n campaignIncentive: string;\n campaignCode: string;\n };\n }\n | { type: \"QUOTE_UPDATED\"; payload: { quote: QuotingType } }\n | { type: \"QUOTE_FORM_ERROR\"; payload: boolean }\n | { type: \"QUOTE_SAVING\" }\n | {\n type: \"QUOTE_SAVED\";\n payload: { quote: QuotingType; calculation: CalculationType };\n }\n | { type: \"QUOTE_SAVE_ERROR\" }\n | { type: \"QUOTE_CALCULATION_RESET\" }\n | { type: \"QUOTE_CALCULATION_REQUIRED\" }\n | { type: \"QUOTE_CALCULATING\" }\n | {\n type: \"QUOTE_CALCULATED\";\n payload: {\n quote: QuotingType;\n calculation: CalculationType;\n hasCalculated: boolean;\n };\n }\n | { type: \"QUOTE_CALCULATE_ERROR\" }\n | { type: \"QUOTE_CALCULATE_WARNING\"; payload: QuoteCalculationStatus }\n | { type: \"QUOTE_TYPE_CHANGE\"; payload: QuoteType }\n | { type: \"SCENARIO_UPDATE\"; payload: Scenario }\n | { type: \"SCENARIO_LOADED\"; payload: Scenario[] }\n | { type: \"QUOTE_SUBMITTED\"; payload: boolean }\n | { type: \"QUOTE_SUBMITTED_ERROR\" }\n | { type: \"QUOTE_SUBMITTING\" }\n | { type: \"USER_CHANGED\"; payload: string };\n\nexport const quoteReducer = (\n state: QuoteState,\n action: QuoteActionTypes\n): QuoteState => {\n switch (action.type) {\n case \"USER_CHANGED\":\n return {\n ...state,\n username: action.payload,\n };\n\n case \"QUOTE_STATUS_UPDATED\":\n return {\n ...state,\n isDirty: action.payload,\n };\n\n case \"QUOTE_TYPE_CHANGE\":\n if (state.quote !== null) {\n const hasCalculated =\n state.hasCalculated && state.quote.quoteType === action.payload;\n\n return {\n ...state,\n quoteType: action.payload,\n hasCalculated,\n };\n }\n\n return {\n ...state,\n quoteType: action.payload,\n hasCalculated: false,\n };\n\n case \"QUOTE_LOADING\":\n return { ...state, isLoading: true };\n\n case \"QUOTE_LOADED\":\n if (action.payload.quote?.quoteType === \"STF\") {\n const fixAndFlipCalc = action.payload\n .calculation as FixAndFlipCalculation;\n const borrowerTier = fixAndFlipCalc.BorrowerInfo.borrowerTier;\n const quote = action.payload.quote as FixAndFlipQuote;\n\n const overrides = new FixAndFlipOverrideOptions(\n quote.exceptionPricingOverride\n );\n quote.exceptionPricingOverride = overrides;\n\n if (quote && quote.borrowerInfo) {\n quote.borrowerInfo.borrowerTier = borrowerTier;\n }\n\n return {\n ...state,\n quote: action.payload.quote,\n quoteCalculation: fixAndFlipCalc,\n metadata: action.payload.quoteMetadata,\n isLoading: false,\n isNewQuote: false,\n hasCalculated: true,\n sfIntegration: {\n sfaccountid: action.payload.quote.sfaccountid,\n sfdealid: action.payload.quote.sfdealid,\n campaignId: action.payload.quote.campaignId,\n originalsfcampaignid: action.payload.quote.campaignId,\n campaignName: action.payload.quote.campaignName,\n campaignExpirationDate: action.payload.quote.campaignExpirationDate,\n campaignIncentive: action.payload.quote.campaignIncentive,\n campaignCode: action.payload.quote.campaignCode,\n originalsfaccountid: action.payload.quote.sfaccountid,\n originalsfdealid: action.payload.quote.sfdealid,\n },\n hasQuoteBeenSubmitted:\n action.payload.quoteMetadata.submittedToSalesforce,\n requiresQuoteResubmission: false,\n };\n } else {\n const rentalQuote = action.payload.quote as RentalQuote;\n\n const rentalOverrides = new RentalOverrideOptions(\n rentalQuote.exceptionPricingOverride\n );\n rentalQuote.exceptionPricingOverride = rentalOverrides;\n\n return {\n ...state,\n quote: action.payload.quote,\n quoteCalculation: action.payload.calculation,\n metadata: action.payload.quoteMetadata,\n isLoading: false,\n isNewQuote: false,\n hasCalculated: true,\n requiresQuoteResubmission: false,\n hasQuoteBeenSubmitted:\n action.payload.quoteMetadata.submittedToSalesforce,\n sfIntegration: {\n sfaccountid: rentalQuote.sfaccountid,\n sfdealid: rentalQuote.sfdealid,\n campaignId: rentalQuote.campaignId,\n originalsfcampaignid: rentalQuote.campaignId,\n campaignName: rentalQuote.campaignName,\n campaignExpirationDate: rentalQuote.campaignExpirationDate,\n campaignIncentive: rentalQuote.campaignIncentive,\n campaignCode: rentalQuote.campaignCode,\n originalsfaccountid: rentalQuote.sfaccountid,\n originalsfdealid: rentalQuote.sfdealid,\n },\n rentalQuoteScenarios: rentalQuote.scenario ?? [],\n };\n }\n\n case \"QUOTE_LOAD_ERROR\":\n return { ...state, isLoading: false };\n\n case \"QUOTE_FORM_ERROR\":\n const hasErrors = action.payload;\n\n return {\n ...state,\n hasFormErrors: hasErrors,\n };\n\n case \"QUOTE_SF_INFO_UPDATE\":\n const {\n sfaccountid: incomingSfAccount,\n sfdealid: incomingSfDeal,\n campaignId: incomingSfCampaign,\n campaignName: incomingCampaignName,\n campaignExpirationDate: incomingCampaignExpirationDate,\n campaignIncentive: incomingCampaignIncentive,\n campaignCode: incomingCampaignCode,\n } = action.payload;\n const originalAccountId = state.sfIntegration?.originalsfaccountid ?? \"\";\n const originalDealId = state.sfIntegration?.originalsfdealid ?? \"\";\n const originalCampaignId =\n state.sfIntegration?.originalsfcampaignid ?? \"\";\n const quoteFromState = state.quote;\n\n const haveSfValuesChanged = () => {\n if (!incomingSfAccount || !incomingSfDeal) {\n return true;\n }\n\n return (\n originalAccountId !== incomingSfAccount ||\n originalDealId !== incomingSfDeal ||\n originalCampaignId !== incomingSfCampaign\n );\n };\n\n const hasSfCampaignChanged = () => {\n return originalCampaignId !== incomingSfCampaign;\n };\n\n if (quoteFromState) {\n quoteFromState.sfaccountid = incomingSfAccount;\n quoteFromState.sfdealid = incomingSfDeal;\n quoteFromState.campaignId = incomingSfCampaign;\n quoteFromState.campaignName = incomingCampaignName;\n quoteFromState.campaignExpirationDate = incomingCampaignExpirationDate;\n quoteFromState.campaignIncentive = incomingCampaignIncentive;\n quoteFromState.campaignCode = incomingCampaignCode;\n }\n\n return {\n ...state,\n sfIntegration: {\n ...state.sfIntegration,\n sfaccountid: incomingSfAccount,\n sfdealid: incomingSfDeal,\n campaignId: incomingSfCampaign,\n campaignName: incomingCampaignName,\n campaignExpirationDate: incomingCampaignExpirationDate,\n campaignIncentive: incomingCampaignIncentive,\n campaignCode: incomingCampaignCode,\n },\n quote: quoteFromState,\n\n requiresRecalculation: hasSfCampaignChanged(),\n hasCalculated: !hasSfCampaignChanged(),\n requiresQuoteResubmission: state.metadata?.submittedToSalesforce\n ? haveSfValuesChanged()\n : false,\n };\n\n case \"QUOTE_UPDATED\":\n if (!action.payload.quote || !state.username) {\n return { ...state };\n }\n\n const salesforceIntegration = {\n sfaccountid: state.sfIntegration?.sfaccountid,\n sfdealid: state.sfIntegration?.sfdealid,\n campaignId: state.sfIntegration?.campaignId,\n campaignName: state.sfIntegration?.campaignName,\n campaignExpirationDate: state.sfIntegration?.campaignExpirationDate,\n campaignIncentive: state.sfIntegration?.campaignIncentive,\n campaignCode: state.sfIntegration?.campaignCode,\n };\n\n return {\n ...state,\n quote: {\n ...action.payload.quote,\n ...salesforceIntegration,\n username: state.username,\n },\n };\n\n case \"QUOTE_SAVING\":\n return { ...state, isLoading: true };\n\n case \"QUOTE_SAVED\":\n return {\n ...state,\n quote: action.payload.quote,\n quoteCalculation: action.payload.calculation,\n hasCalculated: true,\n isLoading: false,\n };\n\n case \"QUOTE_SAVE_ERROR\":\n return {\n ...state,\n isLoading: false,\n isCalculating: false,\n hasCalculated: false,\n };\n\n case \"QUOTE_SUBMITTING\":\n return { ...state, isSubmitting: true };\n\n case \"QUOTE_SUBMITTED\":\n let submittedQuote = state.quote;\n\n return {\n ...state,\n quote: submittedQuote,\n hasQuoteBeenSubmitted: true,\n isSubmitting: false,\n };\n\n case \"QUOTE_SUBMITTED_ERROR\":\n return { ...state, hasQuoteBeenSubmitted: false, isSubmitting: false };\n\n case \"QUOTE_CALCULATION_RESET\":\n return { ...state, isCalculating: false, hasCalculated: false };\n\n case \"QUOTE_CALCULATING\":\n return { ...state, isCalculating: true, hasCalculationErrors: true };\n\n case \"QUOTE_CALCULATED\":\n let calculation = action.payload.calculation;\n let calcQuote = state.quote as FixAndFlipQuote;\n\n if (state.quoteType === \"STF\") {\n const fixNFlipCalc = calculation as FixAndFlipCalculation;\n const stfQuote = calcQuote as FixAndFlipQuote;\n\n fixNFlipCalc.LoanCosts.appraisalFee =\n stfQuote.loanTerm?.appraisalFee ?? 0;\n fixNFlipCalc.LoanCosts.brokerProcessingFee =\n stfQuote.loanTerm?.brokerProcessingFee ?? 0;\n\n calculation = fixNFlipCalc;\n calcQuote = stfQuote;\n }\n\n return {\n ...state,\n quote: calcQuote,\n quoteCalculation: calculation,\n isCalculating: false,\n hasCalculated: action.payload.hasCalculated,\n requiresRecalculation: false,\n calculationWarnings: undefined,\n };\n\n case \"QUOTE_CALCULATE_WARNING\":\n return {\n ...state,\n calculationWarnings: action.payload,\n hasCalculationErrors: !!action.payload.calculation,\n };\n\n case \"QUOTE_CALCULATE_ERROR\":\n return {\n ...state,\n isCalculating: false,\n isLoading: false,\n hasCalculated: false,\n };\n\n case \"SCENARIO_LOADED\":\n return {\n ...state,\n rentalQuoteScenarios: action.payload,\n };\n\n case \"SCENARIO_UPDATE\":\n const scenarios = [...state.rentalQuoteScenarios];\n if (action.payload.preferred === YesNo.Yes) {\n scenarios.forEach((x) => {\n x.preferred = YesNo.No;\n });\n }\n\n scenarios.splice(action.payload.scenarioId - 1, 1, action.payload);\n\n const quote: RentalQuote = {\n ...(state.quote as RentalQuote),\n };\n\n const originalRentalScenarios = quote.scenario ?? [];\n\n const areRentalScenariosEqual = originalRentalScenarios.every(\n (x, index) => x === scenarios[index]\n );\n\n return {\n ...state,\n quote: quote,\n rentalQuoteScenarios: [...scenarios],\n requiresRecalculation: !areRentalScenariosEqual,\n hasCalculated: areRentalScenariosEqual,\n };\n\n default:\n return { ...state };\n }\n};\n","import { Scenario } from \"../lib/models/rental/rental.model\";\nimport { QuoteMetadata, QuoteSfIntegration } from \"../lib/types/QuoteMetadata\";\nimport { QuoteType } from \"../lib/types/QuoteType\";\nimport { CalculationType, QuotingType } from \"./quote-reducer\";\n\nexport type QuoteState = {\n quote: QuotingType;\n quoteCalculation: CalculationType;\n isSaving: boolean;\n isCalculating: boolean;\n isLoading: boolean;\n isSubmitting: boolean;\n hasCalculated: boolean;\n hasQuoteBeenSubmitted: boolean;\n isNewQuote: boolean;\n quoteType: QuoteType | null;\n rentalQuoteScenarios: Scenario[];\n requiresRecalculation: boolean;\n calculationWarnings?: {\n calculation?: string;\n feeLLPAsFactored?: string;\n rateLLPAsFactored?: string;\n overridePricing?: string;\n warnings?: string;\n };\n hasCalculationErrors?: boolean;\n hasFormErrors?: boolean;\n quoteFormErrors?: string;\n isDirty?: boolean;\n metadata?: QuoteMetadata;\n sfIntegration?: QuoteSfIntegration;\n requiresQuoteResubmission?: boolean;\n username?: string;\n};\n\nexport const initialQuoteState: QuoteState = {\n quote: null,\n quoteCalculation: null,\n isCalculating: false,\n isSaving: false,\n isLoading: false,\n isSubmitting: false,\n hasCalculated: false,\n hasQuoteBeenSubmitted: false,\n isNewQuote: true,\n quoteType: null,\n rentalQuoteScenarios: [],\n requiresRecalculation: false,\n calculationWarnings: undefined,\n hasCalculationErrors: false,\n hasFormErrors: false,\n quoteFormErrors: \"\",\n isDirty: false,\n metadata: undefined,\n sfIntegration: undefined,\n requiresQuoteResubmission: false,\n username: \"\",\n};\n","import { useColorModeValue } from \"@chakra-ui/react\";\nimport { useToast } from \"@chakra-ui/toast\";\nimport React from \"react\";\nimport { useHistory } from \"react-router\";\nimport { QuoteApi } from \"../../api/QuoteApi\";\nimport useUser from \"../../hooks/useUser\";\nimport { MetricType } from \"../../lib/types/MetricType\";\nimport { QuoteType } from \"../../lib/types/QuoteType\";\nimport { isQuoteOwner } from \"../../lib/UserPermissions\";\nimport { QuoteService } from \"../../services/quote.service\";\nimport { QuoteContext } from \"../../state/quote-context\";\nimport { quoteReducer } from \"../../state/quote-reducer\";\nimport { initialQuoteState } from \"../../state/quote-state\";\n\nexport interface QuoteProviderProps {\n children: any;\n id: number;\n quoteType: QuoteType;\n}\n\nfunction QuoteContextProvider({ children, id, quoteType }: QuoteProviderProps) {\n const toast = useToast();\n const history = useHistory();\n const user = useUser();\n const [state, dispatch] = React.useReducer(quoteReducer, initialQuoteState);\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n\n React.useEffect(() => {\n if (user.user?.email) {\n dispatch({\n type: \"USER_CHANGED\",\n payload: user.user?.email,\n });\n }\n }, [user]);\n\n React.useEffect(() => {\n dispatch({\n type: \"QUOTE_TYPE_CHANGE\",\n payload: quoteType,\n });\n }, [quoteType]);\n\n const sendToast = React.useCallback(\n (\n title: string,\n description: string,\n status: \"info\" | \"warning\" | \"success\" | \"error\" | undefined\n ) => {\n toast({\n title,\n description,\n status,\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n },\n [toast, toastVariant]\n );\n\n const fetchQuote = React.useCallback(async () => {\n if (!user.user?.email) {\n dispatch({ type: \"QUOTE_LOADING\" });\n return;\n }\n\n dispatch({ type: \"QUOTE_LOADING\" });\n\n try {\n const loadedQuote = await QuoteService.loadQuoteByType(quoteType, id);\n\n if (Object.keys(loadedQuote.warnings).length > 0) {\n dispatch({\n type: \"QUOTE_CALCULATE_WARNING\",\n payload: loadedQuote.warnings,\n });\n }\n\n dispatch({\n type: \"QUOTE_LOADED\",\n payload: {\n quote: loadedQuote.quote,\n calculation: loadedQuote.calculation,\n quoteMetadata: loadedQuote.metadata,\n rateLock: loadedQuote.metadata.rateLock,\n },\n });\n\n dispatch({\n type: \"QUOTE_TYPE_CHANGE\",\n payload: loadedQuote.quote.quoteType,\n });\n } catch (err) {\n sendToast(\n \"Quote Error\",\n \"An error has occurred while trying to load the quote\",\n \"error\"\n );\n\n history.push(\"/\");\n }\n }, [id, quoteType, sendToast, history, user.user?.email]);\n\n const saveQuoteMetrics = async (metric: MetricType) => {\n if (!state.quote?.username) return;\n\n try {\n await QuoteService.saveMetricByType(\n id,\n metric,\n quoteType,\n state.quote,\n state.quoteCalculation\n );\n } catch (err) {\n console.error(err);\n }\n };\n\n const saveQuoteHelper = async (quote: any, isCopy = false) => {\n if (!state.hasCalculated || !state.quote) {\n return;\n }\n\n dispatch({\n type: \"QUOTE_SAVING\",\n });\n\n // We merge the quote from state and the incoming quote\n // so that in the case of a copy we get the updated name\n const quoteToSave = {\n ...state.quote,\n quoteName: quote.quoteName,\n };\n\n if (quote.username) {\n quoteToSave.username = quote.username;\n }\n\n try {\n const result = await QuoteService.saveQuoteByType(\n id,\n quoteType,\n quoteToSave,\n state.quoteCalculation,\n isCopy\n );\n\n dispatch({\n type: \"QUOTE_SAVED\",\n payload: {\n quote: result.quote,\n calculation: result.calculation,\n },\n });\n\n sendToast(\"Quote Saved\", \"The quote has been saved.\", \"success\");\n\n if (result.id !== +id) {\n history.push(\n `/quotes/${result.id}/edit?type=${quoteType.toLowerCase()}#top`\n );\n\n return;\n }\n\n fetchQuote();\n } catch (err) {\n dispatch({ type: \"QUOTE_SAVE_ERROR\" });\n\n sendToast(\n \"Error Saving Quote\",\n \"The quote could not be saved. Please try again.\",\n \"error\"\n );\n }\n };\n\n const submitQuoteHandler = async (quote: any) => {\n dispatch({\n type: \"QUOTE_SUBMITTING\",\n });\n\n try {\n const hasSubmittedQuote = await QuoteService.submitQuoteByType(\n id,\n quoteType,\n state.quote,\n state.quoteCalculation,\n user.role === \"External\"\n );\n\n if (hasSubmittedQuote) {\n dispatch({\n type: \"QUOTE_SUBMITTED\",\n payload: true,\n });\n\n user.role === \"External\"\n ? sendToast(\n \"Quote Submitted For Review\",\n \"The quote has been submitted for review.\",\n \"success\"\n )\n : sendToast(\n \"Quote Submitted\",\n \"The quote has been submitted to Salesforce\",\n \"success\"\n );\n\n await saveQuoteHelper({ ...state.quote, hasSubmittedQuote }, false);\n } else {\n dispatch({\n type: \"QUOTE_SUBMITTED_ERROR\",\n });\n }\n } catch (err) {\n dispatch({\n type: \"QUOTE_SUBMITTED_ERROR\",\n });\n\n sendToast(\n \"Error Submitting Quote\",\n \"The quote could not be submitted. Please try again.\",\n \"error\"\n );\n }\n };\n\n const calculateQuote = React.useCallback(\n async (quote: any) => {\n dispatch({\n type: \"QUOTE_UPDATED\",\n payload: {\n quote: quote,\n },\n });\n\n dispatch({ type: \"QUOTE_CALCULATING\" });\n\n try {\n const calculatedQuote = await QuoteService.calculateQuoteByType(\n quoteType,\n quote,\n id\n );\n\n if (!calculatedQuote.warnings?.errors) {\n sendToast(\n \"Quote Calculated\",\n \"The quote has been successfully calculated.\",\n \"success\"\n );\n } else {\n sendToast(\n \"Quote Calculated with Errors\",\n \"The quote has been calculated but with errors.\",\n \"warning\"\n );\n }\n\n dispatch({\n type: \"QUOTE_CALCULATED\",\n payload: {\n quote: calculatedQuote.quote,\n calculation: calculatedQuote.calculation,\n hasCalculated: true,\n },\n });\n\n if (calculatedQuote.warnings) {\n dispatch({\n type: \"QUOTE_CALCULATE_WARNING\",\n payload: calculatedQuote.warnings,\n });\n }\n } catch (err) {\n console.log(err);\n\n dispatch({\n type: \"QUOTE_CALCULATE_ERROR\",\n });\n\n sendToast(\n \"Calculation Error\",\n \"The calculation encountered an error. Please try again.\",\n \"error\"\n );\n }\n },\n [quoteType, sendToast, id]\n );\n\n const deleteQuote = React.useCallback(\n async (quote: any) => {\n QuoteApi.deactivateQuote(id)\n .then((res) => {\n toast({\n status: \"success\",\n position: \"top-right\",\n title: \"Quote Deleted\",\n description: \"The quote has been successfully deleted\",\n isClosable: true,\n variant: toastVariant,\n });\n })\n .catch((err) => {\n toast({\n status: \"error\",\n position: \"top-right\",\n title: \"Unable to Delete Quote\",\n description: \"The quote could not be deleted\",\n isClosable: true,\n variant: toastVariant,\n });\n })\n .finally(() => {\n history.push(\"/quotes/my-quotes\");\n });\n },\n [history, toast, id, toastVariant]\n );\n\n React.useEffect(() => {\n if (!id) return;\n\n fetchQuote();\n }, [id, fetchQuote]);\n\n return (\n \n {children}\n \n );\n}\n\nexport default QuoteContextProvider;\n","import React from \"react\";\nimport { CommentsContext } from \"../state/comments-context\";\n\nexport default function useComments() {\n const context = React.useContext(CommentsContext);\n\n if (context === undefined) {\n throw new Error(\"useComments must be used within a CommentContextProvider\");\n }\n\n return context;\n}\n","import React from \"react\";\nimport { QuoteContext } from \"../state/quote-context\";\n\nexport default function useQuote() {\n const context = React.useContext(QuoteContext);\n\n if (context === undefined) {\n throw new Error(\"useQuote must be used within a QuoteContextProvider\");\n }\n\n return context;\n}\n","import { RentalCalculation } from \"../lib/models/rental/rental-calculation.model\";\nimport { FixAndFlipCalculation } from \"../lib/models/short-term/short-term-calculation.model\";\nimport { isInternalUser } from \"../lib/UserPermissions\";\nimport useGetUserRole from \"./useGetUserRole\";\nimport useQuote from \"./useQuote\";\n\nexport default function useGetFormTabs() {\n const role = useGetUserRole();\n const quote = useQuote();\n\n const { hasCalculationErrors, quoteCalculation, isNewQuote } = quote.state;\n\n const calculationExists = quoteCalculation !== null;\n\n quoteCalculation as RentalCalculation | FixAndFlipCalculation;\n\n if (isInternalUser(role) && !quoteCalculation?.isRestrictedZip) {\n return getTabs(\n hasCalculationErrors ?? false,\n calculationExists,\n isNewQuote\n );\n }\n\n return getTabsWithoutOverrides(calculationExists);\n}\n\nconst getTabsWithoutOverrides = (calculationExists?: boolean) => {\n if (calculationExists) {\n return [\"Details\", \"Calculation\"];\n }\n return [\"Details\"];\n};\n\nconst getTabs = (\n hasCalculationErrors: boolean,\n calculationExists: boolean,\n isNewQuote: boolean\n) => {\n if (!hasCalculationErrors && !isNewQuote) {\n return [\"Details\", \"Calculation\", \"Exceptions\", \"Discussion\"];\n } else if (calculationExists && !isNewQuote) {\n return [\"Details\", \"Calculation\", \"Exceptions\"];\n } else if (calculationExists) {\n return [\"Details\", \"Calculation\"];\n }\n\n return [\"Details\"];\n};\n","export default __webpack_public_path__ + \"static/media/roboto-700.75371f53.ttf\";","export default __webpack_public_path__ + \"static/media/Roboto-Italic.beb7fe13.ttf\";","export default __webpack_public_path__ + \"static/media/roboto.a8d6ac03.ttf\";","/**\n * Flatten a multidimensional object\n *\n * For example:\n * flattenObject({ a: 1, b: { c: 2 } })\n * Returns:\n * { a: 1, c: 2}\n */\nexport const flattenObject = (obj) => {\n if (!obj) return;\n\n const flattened = {};\n\n Object.keys(obj).forEach((key) => {\n if (typeof obj[key] === \"object\" && obj[key] !== null) {\n Object.assign(flattened, flattenObject(obj[key]));\n } else {\n flattened[key] = obj[key];\n }\n });\n\n return flattened;\n};\n","export const overrideLabelMap: { [key: string]: string } = {\n finalOrigFeeOverride: \"Final Orig Fee Override\",\n blendedLTCOverride: \"Blended LTC Override\",\n arvOverride: \"ARV Override\",\n finalRateOverride: \"Final Rate Override\",\n purchaseLTCOverride: \"Purchase LTC Override\",\n rateReductionOverride: \"Rate Reduction Override\",\n exceptionStatus: \"Exception Status\",\n exceptionType: \"Exception Type\",\n commissionReduction: \"Commission Reduction\",\n};\n","export const bulletListToArray = (text: string): string[] => {\n if (!text) return [];\n\n return text\n .split(\"●\")\n .map((x) => x.trim())\n .filter((x) => x);\n};\n\nexport const checkIfDecimal = (value: number) => {\n const hasDecimal = value - Math.floor(value) !== 0;\n return hasDecimal === true ? value.toFixed(2) : value;\n};\n","import { formatDateLocal, formatMoney, toFixed } from \"../../number-transforms\";\nimport { RentalProduct } from \"../enums\";\n\nexport const rentalSummary = [\n { label: \"Borrower\", accessor: \"borrower\" },\n {\n label: \"Estimated Value Of Property\",\n accessor: \"estimatedValOfProperty\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n { label: \"Number of Properties\", accessor: \"numOfProperties\" },\n { label: \"Borrower Credit Score\", accessor: \"borrowerCreditScore\" },\n { label: \"Term and Amortization Period\", accessor: \"amortizationPeriod\" },\n];\n\nexport const payoffsLoanCosts = [\n {\n label: \"Purchase Price of Properties\",\n accessor: \"purchasePriceProperties\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Payoff of Mortgage(s) on Properties\",\n accessor: \"payoffMortgageProperties\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"PROMOTION-Origination Fee Reduction\",\n accessor: \"campaignFeeIncentive\",\n transformer: (val: string) => `-$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Discounted Origination Fee\",\n accessor: \"originationFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"buyUpDownNotOpted\",\n accessor: \"buyUpDownFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n labelIsAccessor: true,\n },\n {\n label: \"Underwriting and Processing Fee\",\n accessor: \"processingFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Legal Fee\",\n accessor: \"legalFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Broker Fee\",\n accessor: \"brokerFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Broker Processing Fee\",\n accessor: \"brokerProcessingFeeCalc\",\n transformer: (val: string | number) => {\n return val === 0 ? \"N/A\" : `$ ${formatMoney(val, 0)}`;\n },\n },\n];\n\nexport const getPayoffsLoanCostsByChannel = (\n submissionType: string,\n quoteCalculation: any\n) => {\n let payoffsLoanCostsValues = [...payoffsLoanCosts];\n\n if (!submissionType.includes(\"Broker\")) {\n payoffsLoanCostsValues.splice(-3, 3);\n }\n\n if (!quoteCalculation[0].campaignFeeIncentive) {\n const campaignFeeIncentiveIndex = payoffsLoanCostsValues.findIndex(\n (x) => x.accessor === \"campaignFeeIncentive\"\n );\n payoffsLoanCostsValues.splice(campaignFeeIncentiveIndex, 1);\n\n const originationFeeIndex = payoffsLoanCostsValues.findIndex(\n (x) => x.accessor === \"originationFee\"\n );\n payoffsLoanCostsValues[originationFeeIndex].label = \"Origination Fee\";\n }\n\n return payoffsLoanCostsValues;\n};\n\nexport const impounds = [\n {\n label: \"Estimated 3rd Party Closing Costs (title, reconciliation, etc.)\",\n accessor: \"estimatedClosingCost\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Estimated 6 Month Tax Impound, Subject to Change\",\n accessor: \"taxImpound\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Estimated 6 Month Insurance Impound, Subject to Change\",\n accessor: \"insuranceImpound\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Interest Reserve Escrow\",\n accessor: \"interestReserveEscrow\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Estimated Cash Due From Borrower at Close\",\n labelAlt: \"Estimated Cash Due To Borrower at Close\",\n showLabelAltOnCondition: (val: number) => val > 0,\n accessor: \"closingCashToBorrower\",\n transformer: (val: string | number) => `$ ${formatMoney(+val, 0)}`,\n superscript: \"1\",\n totalRow: true,\n },\n];\n\nexport const getImpounds = (quote: any) => {\n let formattedImpounds = [...impounds];\n\n if (\n quote.loanCostOverride.taxEscrowAmount ||\n quote.loanCostOverride.taxEscrowAmount === 0\n ) {\n formattedImpounds.splice(1, 1, {\n label: \"Tax Impound, Subject to Change\",\n accessor: \"taxEscrowAmount\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n });\n }\n\n if (\n quote.loanCostOverride.insEscrowAmount ||\n quote.loanCostOverride.insEscrowAmount === 0\n ) {\n formattedImpounds.splice(2, 1, {\n label: \"Insurance Impound, Subject to Change\",\n accessor: \"insEscrowAmount\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n });\n }\n\n return formattedImpounds;\n};\n\nexport const rates = [\n {\n label: \"Qualifying Interest Rate\",\n accessor: \"qualifyingInterestRate\",\n transformer: (val: string | number) => `${toFixed(val, 3)} %`,\n },\n {\n label: \"Rate Buy Up/Buy Down\",\n accessor: \"rateBuyUpDown\",\n transformer: (val: string | number) => `${toFixed(val, 3)} %`,\n },\n {\n label: \"prepaymentPenaltySelected\",\n accessor: \"prepaymentPenalty\",\n transformer: (val: string | number) => `${toFixed(val, 3)} %`,\n labelIsAccessor: true,\n },\n {\n label: \"Initial Fixed Interest Rate\",\n accessor: \"initFixedInterestRate\",\n transformer: (val: string | number) => `${toFixed(val, 3)} %`,\n totalRow: true,\n superscript: \"2\",\n },\n];\n\nexport const payments5IO25ARM = [\n {\n label: \"Monthly Interest Only Payment\",\n accessor: \"monthlyPrincipalInterest\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Monthly Payment of Taxes and Insurance\",\n accessor: \"monthlyTaxesInsurance\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Monthly Payment of HOA Dues, paid by Borrower\",\n accessor: \"monthlyHOADues\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Total Monthly Payment (Interest, Taxes & Insurance)\",\n accessor: \"monthlyTotalPayment\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n totalRow: true,\n },\n];\n\nexport const payments = [\n {\n label: \"Monthly Principal & Interest Payment\",\n labelAlt: \"Monthly Interest Only Payment\",\n showLabelAltOnCondition: (val: string) =>\n val === RentalProduct[\"5 IO 25 ARM\"],\n\n accessor: \"monthlyPrincipalInterest\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Monthly Payment of Taxes and Insurance\",\n accessor: \"monthlyTaxesInsurance\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Monthly Payment of HOA Dues, paid by Borrower\",\n accessor: \"monthlyHOADues\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Total Monthly Payment (PITI)\",\n accessor: \"monthlyTotalPayment\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n totalRow: true,\n },\n];\n\nexport const rentalIncome = [\n {\n label: \"Estimated Monthly Rental Income\",\n accessor: \"monthlyEstimatedRentalIncome\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Rent to Debt Service Ratio\",\n accessor: \"rentDebtRatio\",\n transformer: (val: string | number) => `${toFixed(val, 2)}`,\n },\n];\n\nexport const rateFeatures = [\n {\n label: \"Index (30-day average of SOFR, Adjusts Semiannually)\",\n accessor: \"\",\n labelOnly: true,\n },\n {\n label: \"Cap Structure: Cap Structure: 5, 2, 5\",\n accessor: \"\",\n labelOnly: true,\n },\n {\n label: \"Lifetime Cap\",\n accessor: \"lifetimeCap\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Margin\",\n accessor: \"margin\",\n transformer: (val: string | number) => `${toFixed(val, 3)}`,\n },\n {\n label: \"Floor\",\n accessor: \"floor\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Lookback Period\",\n accessor: \"lookbackPeriod\",\n },\n];\n\nexport const additionalCashRequirements = [\n {\n label: \"Required Liquid Reserves\",\n accessor: \"liquidReserves\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Valuation Fee\",\n accessor: \"appraisalFee\",\n transformer: (val: number | string) => {\n return val === 0 ? \"TBD\" : `$ ${formatMoney(val, 2)}`;\n },\n },\n];\n\nexport const getArmLoanFeatureListItems = (\n productType: string\n): { label: string; items: string[] } => {\n let interestRateTerm = \"sixty (60) months\";\n\n if (productType === RentalProduct[\"10/1 ARM\"]) {\n interestRateTerm = \"one hundred twenty (120) months\";\n }\n\n return {\n label: \"Hybrid Adjustable Rate Mortgage (ARM) Loan Features\",\n items: [\n `Your interest rate will be fixed for ${interestRateTerm}. After the initial fixed period, your interest rate will be based on an index plus margin.`,\n \"This type of ARM loan carries a provision for a charge in the: Interest Rate and Monthly Payment.\",\n \"The index used to determine your initial interest rate and/or all adjustments is: the 30 day average of SOFR published by the Federal Reserve Bank of New York.\",\n \"Information about the index can be found: published by the Federal Reserve Bank of New York.\",\n \"Your interest rate will be equal to the index rate plus our margin rounded to the nearest .125% unless your interest rate caps limit the amount of change in the interest rate.\",\n \"Your interest rate will never be less than the Floor.\",\n \"Your interest rate will never be higher than the Lifetime Cap.\",\n \"Any increase in the interest rate will result in a higher monthly payment.\",\n ],\n };\n};\n\nexport const internalRentalLoanItems = [\n {\n label: \"Rates and Terms last updated\",\n accessor: \"pricingLastUpdated\",\n transformer: (val: string | number) => formatDateLocal(val.toString()),\n },\n { label: \"Submission Type\", accessor: \"submissionType\" },\n { label: \"Sreo Property #\", accessor: \"sreoPropertyNumber\" },\n {\n label: \"Borrower Net Worth\",\n accessor: \"borrowerNetWorth\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Yield Spread\",\n accessor: \"yieldSpread\",\n transformer: (val: string | number) => `${toFixed(+val, 3)} %`,\n },\n {\n label: \"Broker Fee\",\n accessor: \"brokerFee\",\n transformer: (val: string | number) => `${toFixed(val)} %`,\n },\n {\n label: \"Broker Processing Fee \",\n accessor: \"brokerProcessingFee\",\n transformer: (val: string | number) => {\n return val === 0 ? \"N/A\" : `$ ${formatMoney(val, 2)}`;\n },\n },\n {\n label: \"Valuation Fee\",\n accessor: \"appraisalFee\",\n transformer: (val: number | string) => {\n return val === 0 ? \"TBD\" : `$ ${formatMoney(val, 2)}`;\n },\n },\n {\n label: \"Refinancing L1C FixNFlip Loan?\",\n accessor: \"refiL1cFixNFlip\",\n },\n {\n label: \"Property Value Less Than $100,000\",\n accessor: \"propertyVal\",\n },\n {\n label: \"Condo?\",\n accessor: \"condo\",\n },\n {\n label: \"Is the borrower a referral?\",\n accessor: \"borrowerIsReferral\",\n },\n {\n label: \"Zero Percent Lender Fee\",\n accessor: \"isZeroOrigFee\",\n },\n];\n\nexport const internalRentalPropertyItems = [\n {\n label: \"Property State\",\n accessor: \"state\",\n },\n {\n label: \"Property Value < 6 Months\",\n accessor: \"appraisedVal1\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Total Costs < 6 Months\",\n accessor: \"totalCosts1\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Property Value 6-12 Months\",\n accessor: \"appraisedVal3\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Purchase Price\",\n accessor: \"purchasePrice\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Annual Insurance\",\n accessor: \"annualInsurance\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Annual Taxes\",\n accessor: \"annualTaxes\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Annual HOA\",\n accessor: \"annualHOA\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Annual Flood\",\n accessor: \"annualFloodInsurance\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Seasonal Rental\",\n accessor: \"seasonalRental\",\n },\n {\n label: \"5-9 Unit\",\n accessor: \"fiveNineUnit\",\n },\n];\n","export default \"data:image/png;base64,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\"","import { StyleSheet } from \"@react-pdf/renderer\";\n\nexport const styles = StyleSheet.create({\n body: {\n paddingHorizontal: 35,\n },\n twoColumnGrid: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n marginHorizontal: -10,\n },\n header: {\n display: \"flex\",\n justifyContent: \"space-between\",\n flexDirection: \"row\",\n margin: 1,\n paddingTop: 20,\n paddingBottom: 10,\n },\n headerImageTitleContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n headerImage: {\n height: \"auto\",\n width: 100,\n },\n footer: {\n position: \"absolute\",\n fontSize: 7,\n bottom: 10,\n left: 0,\n right: 0,\n color: \"grey\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n },\n addressText: {\n fontSize: 7,\n marginTop: 9,\n color: \"rgba(68, 68, 68, 0.8)\",\n },\n blackText: {\n color: \"#000000\",\n },\n grayText: {\n color: \"#444444\",\n },\n blueText: {\n color: \"#01457C\",\n },\n whiteText: {\n color: \"#FFFFFF\",\n },\n redText: {\n color: \"#B91C1C\",\n },\n greenText: {\n color: \"#15803D\",\n },\n\n text: {\n fontFamily: \"Roboto\",\n color: \"#2D3748\",\n fontSize: 7.5,\n position: \"relative\",\n lineHeight: 1.2,\n },\n textSmMd: {\n fontFamily: \"Roboto\",\n color: \"#2D3748\",\n fontSize: 8.5,\n position: \"relative\",\n lineHeight: 1.2,\n },\n textMd: {\n color: \"#2D3748\",\n fontFamily: \"Roboto\",\n fontSize: 10,\n },\n textLg: {\n fontFamily: \"Roboto\",\n fontSize: 12,\n },\n textSm: {\n fontFamily: \"Roboto\",\n fontSize: 7.5,\n lineHeight: 1.25,\n },\n textSmBlock: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: 8,\n textTransform: \"uppercase\",\n letterSpacing: \"0.5\",\n },\n table: {\n width: \"100%\",\n },\n tableRow: {\n display: \"flex\",\n flexDirection: \"row\",\n paddingVertical: 3,\n },\n tableRowNoBorder: {\n display: \"flex\",\n flexDirection: \"row\",\n paddingVertical: 3,\n },\n tableCell: {\n display: \"flex\",\n flexDirection: \"row\",\n flexGrow: 1,\n },\n tableCell2: {\n width: \"35%\",\n },\n tableCell3: {\n width: \"30%\",\n },\n tableStripe: {\n position: \"absolute\",\n top: -8,\n right: -30,\n height: \"83vh\",\n width: \"110%\",\n borderRadius: 3,\n backgroundColor: \"#f2f6fa\",\n },\n textAlignRight: {\n alignSelf: \"flex-end\",\n textAlign: \"right\",\n },\n textAlignCenter: {\n alignSelf: \"center\",\n },\n superscript: {\n fontSize: 6,\n marginLeft: 2,\n },\n nameHeader: {\n color: \"#01457C\",\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: 7.5,\n textTransform: \"uppercase\",\n },\n infoMedium: {\n color: \"#000000\",\n fontWeight: 500,\n fontSize: 7.5,\n },\n info: {\n color: \"#444444\",\n fontWeight: 400,\n fontSize: 7.5,\n },\n promotionText: {\n color: \"#01457C\",\n fontWeight: 600,\n },\n});\n","import { Text, View } from \"@react-pdf/renderer\";\nimport React from \"react\";\nimport { Scenario } from \"../../lib/models/rental/rental.model\";\nimport { styles } from \"./styles\";\n\nexport interface RentalTableSectionProps {\n scenarios: Scenario[];\n section: {\n label: string;\n accessor?: string;\n totalRow?: boolean;\n transformer?: (val: string | number) => string;\n labelIsAccessor?: boolean;\n superscript?: string;\n }[];\n valueMap: { [key: string | number]: any };\n label?: string;\n rowStyling?: any;\n}\n\nfunction RentalTableSection(props: RentalTableSectionProps) {\n const {\n scenarios,\n section,\n valueMap,\n label,\n rowStyling = styles.tableRow,\n } = props;\n\n const renderRowLabel = (row: any) => {\n if (row.labelIsAccessor) {\n return valueMap[0][row.label];\n }\n\n if (row.showLabelAltOnCondition) {\n const value = valueMap[0][row.accessor];\n return row.showLabelAltOnCondition(value) ? row.labelAlt : row.label;\n }\n\n return row.label;\n };\n\n return (\n \n {label && (\n \n {label}\n \n )}\n\n {section.map((row, index) => (\n \n \n \n {renderRowLabel(row)}\n \n {row.superscript && (\n \n {row.superscript}\n \n )}\n \n\n {row.accessor ? (\n scenarios.map((scenario) => (\n \n {row.accessor && (\n \n {row.transformer\n ? row.transformer(\n valueMap[scenario.scenarioId - 1][row.accessor]\n )\n : valueMap[scenario.scenarioId - 1][row.accessor]}\n \n )}\n \n ))\n ) : (\n  \n )}\n \n ))}\n \n );\n}\n\nexport default RentalTableSection;\n","import { Image, Page, Text, View } from \"@react-pdf/renderer\";\nimport React from \"react\";\nimport { RentalProduct } from \"../../../lib/models/enums\";\nimport {\n getImpounds,\n getPayoffsLoanCostsByChannel,\n payments,\n payments5IO25ARM,\n rates,\n rentalIncome,\n rentalSummary,\n} from \"../../../lib/models/rental/rental-term-sheet-map\";\nimport { RentalQuote, Scenario } from \"../../../lib/models/rental/rental.model\";\nimport { formatMoney } from \"../../../lib/number-transforms\";\nimport { PdfGenerationActions } from \"../../../lib/types/PDFGenerationActions\";\nimport { checkIfDecimal } from \"../../../lib/utils\";\nimport pdfLogo from \"../../../limaone_logo.png\";\nimport RentalTableSection from \"../RentalTableSection\";\nimport { styles } from \"../styles\";\n\nexport interface RentalCalculationSheetProps {\n action: PdfGenerationActions;\n quoteCalculation: { [key: string]: any };\n rentalScenarios: Scenario[];\n productType: string;\n quoteDate: string;\n quote: RentalQuote;\n}\n\nfunction RentalCalculationSheet(props: RentalCalculationSheetProps) {\n const {\n action,\n quoteCalculation,\n rentalScenarios,\n productType,\n quoteDate,\n quote,\n } = props;\n\n for (const [key] of Object.entries(quoteCalculation)) {\n if (key.length === 1) {\n quoteCalculation[key].taxEscrowAmount =\n quote.loanCostOverride?.taxEscrowAmount;\n quoteCalculation[key].insEscrowAmount =\n quote.loanCostOverride?.insEscrowAmount;\n }\n }\n\n const payoffsLoanCosts = getPayoffsLoanCostsByChannel(\n quote.submissionType,\n quoteCalculation\n );\n const impounds = getImpounds(quote);\n\n return (\n \n \n \n {action !== \"WHITELABEL\" ? (\n \n \n \n 201 East McBee Avenue, Suite 300 | Greenville, SC 29601\n \n \n ) : null}\n\n \n \n Preliminary Estimate of Costs\n \n \n Rental Loan - {productType}\n \n \n Estimate Date:\n {quoteDate}\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n Loan Amount\n \n \n \n\n {rentalScenarios.map((scenario, index) => (\n \n {rentalScenarios.length > 2 && index % 2 !== 0 && (\n \n )}\n\n \n \n {checkIfDecimal(scenario.ltvPercentage)}% LTV\n \n \n ${\" \"}\n {formatMoney(\n (quoteCalculation as { [key: number]: any })[\n scenario.scenarioId - 1\n ].loanAmt,\n 0\n )}\n \n \n \n ))}\n \n \n \n\n \n \n \n\n \n\n \n\n \n\n \n \n\n \n \n \n \n\n \n \n `Page ${pageNumber} of ${\n action === \"INTERNAL\" ? totalPages - 1 : totalPages\n }`\n }\n />\n \n \n );\n}\n\nexport default RentalCalculationSheet;\n","import { Image, Page, Text, View } from \"@react-pdf/renderer\";\nimport React from \"react\";\nimport { RentalProduct } from \"../../../lib/models/enums\";\nimport {\n additionalCashRequirements,\n getArmLoanFeatureListItems,\n rateFeatures,\n} from \"../../../lib/models/rental/rental-term-sheet-map\";\nimport { Scenario } from \"../../../lib/models/rental/rental.model\";\nimport { PdfGenerationActions } from \"../../../lib/types/PDFGenerationActions\";\nimport pdfLogo from \"../../../limaone_logo.png\";\nimport RentalTableSection from \"../RentalTableSection\";\nimport { styles } from \"../styles\";\n\nexport interface RentalDisclosureSheetProps {\n action: PdfGenerationActions;\n quoteCalculation: { [key: string]: any } | { [key: number]: any };\n rentalScenarios: Scenario[];\n productType: string;\n quoteDate: string;\n rentalQuote: { [key: string]: any };\n}\n\nfunction RentalDisclosureSheet(props: RentalDisclosureSheetProps) {\n const { action, quoteCalculation, rentalScenarios, productType, quoteDate } =\n props;\n\n const armLoanFeatureListItems = React.useMemo(() => {\n return getArmLoanFeatureListItems(productType);\n }, [productType]);\n\n return (\n \n \n {action !== \"WHITELABEL\" ? (\n \n \n \n 201 East McBee Avenue, Suite 300 | Greenville, SC 29601\n \n \n ) : (\n \n )}\n \n \n Preliminary Estimate of Costs\n \n \n Rental Loan - {productType}\n \n \n Estimate Date:\n {quoteDate}\n \n \n \n\n \n \n Disclosures and Contingencies\n \n\n {productType !== RentalProduct.Fixed ? (\n \n ) : null}\n\n \n \n \n\n \n \n Interest Reserve Account\n \n \n So long as no Event of Default has occurred and is continuing and no\n event with the passage of time and/or the giving of notice would\n constitute a default hereunder or under any other Loan Documents\n have occurred. Lender shall credit, the Interest Reserve towards the\n then due interest, principal, tax, and insurance payment under the\n Note.\n \n \n\n {(quoteCalculation as { [key: number]: any })[0].achFee !== undefined &&\n (quoteCalculation as { [key: number]: any })[0].achFee !== \"\" && (\n \n \n ACH Payments\n \n {\n \n ACH payments are required on this loan. An ACH form will be\n provided in the loan package signed at closing. If you cancel\n ACH payments after closing, a fee of{\" \"}\n {(quoteCalculation as { [key: number]: any })[0].achFee} will\n be added to the monthly payment.\n \n }\n \n )}\n\n \n \n Prepayment Penalty\n \n \n {(quoteCalculation as { [key: number]: any })[0][\n \"prepaymentPenaltyText\"\n ]\n .split(\"•\")\n .filter((x: string) => x)\n .map((x: string) => x.trim())\n .join(\" \")}\n \n \n\n \n \n Open Prepay Option\n \n \n Prepay penalty will be applied to any prepayments of the scheduled\n principal balance during the prepayment period.\n \n \n\n {productType !== RentalProduct.Fixed ? (\n \n \n {armLoanFeatureListItems.label}\n \n {armLoanFeatureListItems.items.map((x, index) => (\n \n -\n \n {x}\n \n \n ))}\n \n ) : null}\n\n {(quoteCalculation as { [key: number]: any })[0].numOfProperties >\n 1 && (\n \n \n Release Price\n \n \n The lien against an individual property will be released when 115%\n of the original loan amount allocated to that property is paid in\n full.\n \n \n )}\n \n \n Personal Guaranty\n \n \n All loans must be personally guaranteed by all members of the\n borrowing entity.\n \n \n\n \n \n Preliminary Estimate is Subject to Change\n \n \n This estimate of costs is contingent upon full borrower and property\n underwriting.\n \n \n\n \n \n Business purpose\n \n \n The Rental30 Loan is for business purpose use only, specifically,\n for real estate investors purchasing, refinancing, or cashing-out of\n non-owner occupied, rental properties.\n \n \n \n\n \n {action !== \"WHITELABEL\" ? (\n \n This estimate is for informational purposes only and does not\n constitute loan commitment or a rate lock. All rates and terms may\n change without notice and are subject to credit approval,\n underwriting, and verification of the information provided. Final\n terms and conditions will be detailed in definitive loan documents.\n Lima One is an equal housing lender. NMLS ID # 1324403\n (www.nmlsconsumeraccess.org).\n \n ) : (\n \n This estimate is for informational purposes only and is not a\n commitment to lend. All loans are subject to borrower qualification\n and final credit approval. Approvals are subject to underwriting and\n program guidelines, and are subject to change without notice in the\n lender’s sole discretion.\n \n )}\n\n \n `Page ${pageNumber} of ${\n action === \"INTERNAL\" ? totalPages - 1 : totalPages\n }`\n }\n />\n \n \n );\n}\n\nexport default RentalDisclosureSheet;\n","import { Text, View } from \"@react-pdf/renderer\";\nimport React from \"react\";\nimport { styles } from \"./styles\";\n\nexport interface FixAndFlipTableSectionProps {\n section: {\n label: string;\n labelAlt?: string;\n accessor: string;\n totalRow?: boolean;\n transformer?: (val: string | number) => string;\n labelIsAccessor?: boolean;\n superscript?: string;\n showAltByCondition?: (val: string | number) => boolean;\n }[];\n valueMap: { [key: string | number]: any };\n label?: string;\n rowStyling?: any;\n background?: string;\n superscript?: string;\n}\n\nfunction FixAndFlipTableSection(props: FixAndFlipTableSectionProps) {\n const {\n section,\n valueMap,\n label,\n rowStyling = styles.tableRow,\n background,\n superscript,\n } = props;\n\n const renderRowLabel = (row: any) => {\n if (row.labelIsAccessor) {\n return valueMap[0][row.label];\n }\n\n if (row.showLabelAltOnCondition) {\n const value = valueMap[row.accessor];\n return row.showLabelAltOnCondition(value) ? row.labelAlt : row.label;\n }\n\n return row.label;\n };\n\n return (\n \n {label && (\n \n \n {label}\n {superscript && (\n \n {superscript}\n \n )}\n \n \n )}\n\n {section.map((row, index) => (\n \n \n \n {renderRowLabel(row)}\n \n {row.superscript && (\n \n {row.superscript}\n \n )}\n \n\n {row.accessor ? (\n row.accessor !== \"formattedAddress\" ? (\n \n \n {row.transformer\n ? row.transformer(valueMap[row.accessor])\n : valueMap[row.accessor]}\n \n \n ) : (\n \n \n {`${valueMap.city}, ${valueMap.state} ${valueMap.zip}`}\n \n \n )\n ) : (\n  \n )}\n \n ))}\n \n );\n}\n\nexport default FixAndFlipTableSection;\n","import { Text, View } from \"@react-pdf/renderer\";\nimport React from \"react\";\nimport { formatDateTime } from \"../../lib/number-transforms\";\nimport { Comment } from \"../../lib/types/CommentType\";\nimport { styles } from \"./styles\";\n\nexport interface InternalDiscussionSectionProps {\n discussionArray: Comment[] | undefined;\n}\n\nfunction InternalDiscussionSection(props: InternalDiscussionSectionProps) {\n const { discussionArray } = props;\n\n if (!discussionArray?.length) {\n return null;\n }\n\n return (\n \n \n Discussion\n \n {discussionArray.map((x: Comment, index: number) => {\n return (\n \n \n {x.username}\n {formatDateTime(x.created)}\n \n \n {x.text}\n \n \n );\n })}\n \n );\n}\n\nexport default InternalDiscussionSection;\n","import { Text, View } from \"@react-pdf/renderer\";\nimport React from \"react\";\nimport { styles } from \"./styles\";\n\nexport interface InternalSelectionSectionProps {\n title: string;\n selectionArray: string[] | undefined;\n textColor: keyof typeof styles;\n}\n\nfunction InternalSelectionSection(props: InternalSelectionSectionProps) {\n const { title, selectionArray, textColor } = props;\n\n if (!selectionArray?.length) {\n return null;\n }\n\n return (\n \n \n {title}\n \n \n {selectionArray.map((x, index) => (\n \n {x}\n \n ))}\n \n \n );\n}\n\nexport default InternalSelectionSection;\n","import { Image, Page, Text, View } from \"@react-pdf/renderer\";\nimport React from \"react\";\nimport { YesNo } from \"../../../lib/models/enums\";\nimport {\n internalRentalLoanItems,\n internalRentalPropertyItems,\n} from \"../../../lib/models/rental/rental-term-sheet-map\";\nimport { Scenario } from \"../../../lib/models/rental/rental.model\";\nimport { Comment } from \"../../../lib/types/CommentType\";\nimport pdfLogo from \"../../../limaone_logo.png\";\nimport FixAndFlipTableSection from \"../FixAndFlipTableSection\";\nimport InternalDiscussionSection from \"../InternalDiscussionSection\";\nimport InternalSelectionSection from \"../InternalSelectionSection\";\nimport { styles } from \"../styles\";\n\nexport interface RentalInternalSelectionSheetProps {\n rentalQuote: { [key: string]: any };\n scenarios: Scenario[];\n productType: string;\n quoteDate: string;\n pricingLastUpdated: string;\n rateLLPAsArray: string[];\n feeLLPAsArray: string[];\n overrideArray: string[] | undefined;\n eligibilityArray: Array<[string, string]>;\n warningsArray: string[] | undefined;\n discussionArray: Comment[] | undefined;\n}\n\nfunction RentalInternalSelectionSheet(\n props: RentalInternalSelectionSheetProps\n) {\n const {\n rentalQuote,\n scenarios,\n eligibilityArray,\n productType,\n quoteDate,\n pricingLastUpdated,\n overrideArray,\n feeLLPAsArray,\n rateLLPAsArray,\n warningsArray,\n discussionArray,\n } = props;\n\n rentalQuote[\"pricingLastUpdated\"] = pricingLastUpdated;\n\n const preferredScenario = scenarios.find(\n (x: Scenario) => x.preferred === YesNo.Yes\n );\n\n return (\n \n \n \n \n \n 201 East McBee Avenue, Suite 300 | Greenville, SC 29601\n \n \n \n \n Internal Selections\n \n \n Rental {productType}\n \n {quoteDate}\n \n \n\n \n \n\n \n \n \n \n \n Scenario Eligibility\n \n \n \n {eligibilityArray.map((x, index) => (\n \n {x[0]}\n \n {x[1]}\n \n \n ))}\n \n \n\n \n \n \n Preferred Scenario\n \n \n \n {scenarios && (\n \n Scenario {preferredScenario?.scenarioId}: LTV{\" \"}\n {preferredScenario?.ltvPercentage}%\n \n )}\n \n \n \n \n\n \n \n \n \n \n \n \n \n\n \n\n \n\n \n \n );\n}\n\nexport default RentalInternalSelectionSheet;\n","import { formatMoney, toFixed } from \"../../number-transforms\";\nimport { RentalScenarioCalculation } from \"./rental-calculation.model\";\nimport { RentalQuote } from \"./rental.model\";\n\nexport type RentalQuoteOmittedPrepay = Omit<\n RentalQuote,\n \"prepaymentPenalty\" | \"appraisalFee\"\n>;\n\nexport interface FlattenedRentalQuote\n extends RentalScenarioCalculation,\n RentalQuoteOmittedPrepay {}\n\nexport type TermSheetMap = {\n label?: string;\n accessor?: keyof T;\n transformer?: (val: any) => string;\n superscript?: string;\n totalRow?: boolean;\n labelOnly?: boolean;\n labelAlt?: string;\n showLabelAltOnCondition?: (value: string | number) => boolean;\n};\n\nexport const borrowerSummary: TermSheetMap<{\n numOfProperties: number | undefined;\n quoteDate: string | undefined;\n}>[] = [\n { label: \"No. of Properties\", accessor: \"numOfProperties\" },\n {\n label: \"Quote Date\",\n accessor: \"quoteDate\",\n },\n];\n\nexport const propertySummary: TermSheetMap[] = [\n {\n label: \"Property Value\",\n accessor: \"estimatedValOfProperty\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Rental Income\",\n accessor: \"monthlyRent\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Taxes\",\n accessor: \"annualTaxes\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Homeowners Insurance\",\n accessor: \"annualInsurance\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"HOA (if applicable)\",\n accessor: \"annualHOA\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n];\nexport const summaryTerms: TermSheetMap[] = [\n {\n label: \"Loan Amount\",\n accessor: \"loanAmt\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Rate\",\n accessor: \"initFixedInterestRate\",\n transformer: (val: string | number) => `${toFixed(val, 3)} %`,\n },\n {\n label: \"Promotional Credit\",\n accessor: \"campaignFeeIncentive\",\n transformer: (val: string) => `-$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Origination Fee\",\n accessor: \"originationFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Buy up/down\",\n accessor: \"buyUpDownFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Underwriting and Processing Fee\",\n accessor: \"processingFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Prepayment Penalty\",\n accessor: \"prepaymentPenaltySelected\",\n transformer: (val: string) => {\n if (val === \"No Prepayment\") return \"No Penalty\";\n const splitText = val.split(\":\");\n return splitText.length > 0 ? splitText[1].trim() : val;\n },\n },\n {\n label: \"Payment (P&I only)\",\n accessor: \"monthlyPrincipalInterest\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Payment (PITI)\",\n accessor: \"monthlyTotalPayment\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Cash Due at Closing\",\n accessor: \"closingCashToBorrower\",\n transformer: (val: string | number) => {\n return val < 0 ? `$ ${formatMoney(Math.abs(+val), 0)}` : \"$ 0\";\n },\n superscript: \"1\",\n totalRow: true,\n },\n {\n label: \"Cash to Borrower\",\n accessor: \"closingCashToBorrower\",\n transformer: (val: string | number) => {\n return val > 0 ? `$ ${formatMoney(Math.abs(+val), 0)}` : \"$ 0\";\n },\n superscript: \"1\",\n totalRow: true,\n },\n];\n\nexport const getSummaryTerms = (\n closingCashToBorrower: any,\n campaignFeeIncentive: any,\n summaryTerms: any\n) => {\n const summaryTermValues = [...summaryTerms];\n\n if (closingCashToBorrower < 0) {\n const cashToBorrowerIndex = summaryTermValues.findIndex(\n (x) => x.label === \"Cash to borrower\"\n );\n summaryTermValues.splice(cashToBorrowerIndex, 1);\n } else if (closingCashToBorrower > 0) {\n const cashDueAtClosingIndex = summaryTermValues.findIndex(\n (x) => x.label === \"Cash Due at Closing\"\n );\n summaryTermValues.splice(cashDueAtClosingIndex, 1);\n }\n\n if (!campaignFeeIncentive) {\n const campaignFeeIncentiveIndex = summaryTermValues.findIndex(\n (x) => x.accessor === \"campaignFeeIncentive\"\n );\n summaryTermValues.splice(campaignFeeIncentiveIndex, 1);\n }\n\n return summaryTermValues;\n};\n","import { Image, Page, StyleSheet, Text, View } from \"@react-pdf/renderer\";\nimport React from \"react\";\nimport { flattenObject } from \"../../../lib/flattenObject\";\nimport {\n borrowerSummary,\n FlattenedRentalQuote,\n getSummaryTerms,\n propertySummary,\n summaryTerms,\n TermSheetMap,\n} from \"../../../lib/models/rental/rental-summary-term-sheet-map\";\nimport { RentalQuote, Scenario } from \"../../../lib/models/rental/rental.model\";\nimport { SFUserProfile } from \"../../../lib/models/sf-user-profile.model\";\nimport { PdfGenerationActions } from \"../../../lib/types/PDFGenerationActions\";\nimport { QuoteMetadata } from \"../../../lib/types/QuoteMetadata\";\nimport { checkIfDecimal } from \"../../../lib/utils\";\nimport pdfLogo from \"../../../limaone_logo.png\";\n\nexport interface RentalSummarySheetProps {\n quote: RentalQuote;\n quoteCalculation: { [key: string]: any } | { [key: number]: any };\n rentalScenarios: Scenario[];\n quoteDate: string;\n action: PdfGenerationActions;\n userProfile: SFUserProfile;\n metadata: QuoteMetadata;\n}\n\nfunction RentalSummarySheet(props: RentalSummarySheetProps) {\n const {\n quote,\n quoteCalculation,\n rentalScenarios,\n quoteDate,\n action,\n userProfile,\n } = props;\n\n const borrowerSummaryValues: {\n numOfProperties: number | undefined;\n quoteDate: string | undefined;\n } = {\n quoteDate: quoteDate,\n numOfProperties: quote.numOfProperties,\n };\n\n const flattenedRentalQuote: FlattenedRentalQuote = React.useMemo(() => {\n return flattenObject({\n quote,\n calculation: (quoteCalculation as { [key: number]: any })[0],\n }) as FlattenedRentalQuote;\n }, [quote, quoteCalculation]);\n\n const sheetTitle: Array = React.useMemo(() => {\n return (quoteCalculation as { [key: number]: any })[0].eocTitle.split(\"-\");\n }, [quoteCalculation]);\n\n const renderRowLabel = (row: TermSheetMap) => {\n if (row.showLabelAltOnCondition && row.accessor) {\n const value = flattenedRentalQuote[row.accessor] as number;\n return row.showLabelAltOnCondition(value) ? row.labelAlt : row.label;\n }\n\n return row.label;\n };\n\n return (\n \n \n \n \n \n \n Rental Loan -\n \n {sheetTitle[1]}\n \n \n Preliminary Cost Estimates\n \n \n {action !== \"WHITELABEL\" && (\n \n \n \n )}\n \n\n \n \n \n \n {flattenedRentalQuote.borrowingEntity}\n \n \n\n \n {borrowerSummary.map((row, index) => (\n \n \n \n {row.label}\n \n \n \n \n {row.transformer\n ? row.accessor &&\n row.transformer(borrowerSummaryValues[row.accessor])\n : row.accessor && borrowerSummaryValues[row.accessor]}\n \n \n \n ))}\n \n \n\n \n {propertySummary.map((row, index) =>\n index === 0 ? (\n \n \n \n {renderRowLabel(row)}\n \n \n \n \n {row.transformer\n ? row.accessor &&\n row.transformer(flattenedRentalQuote[row.accessor])\n : row.accessor && flattenedRentalQuote[row.accessor]}\n \n \n \n ) : (\n \n \n \n {renderRowLabel(row)}\n \n \n \n \n {row.transformer\n ? row.accessor &&\n row.transformer(flattenedRentalQuote[row.accessor])\n : row.accessor && flattenedRentalQuote[row.accessor]}\n \n \n \n )\n )}\n \n \n \n \n The above information was used to calculate your quote\n \n \n \n \n \n \n Summary Terms\n \n \n\n {rentalScenarios.map((scenario, index) => (\n \n {rentalScenarios.length > 2 && index % 2 !== 0 && (\n \n )}\n\n \n {checkIfDecimal(scenario.ltvPercentage)}% LTV\n \n \n ))}\n \n\n {getSummaryTerms(\n flattenedRentalQuote.closingCashToBorrower,\n flattenedRentalQuote.campaignFeeIncentive,\n summaryTerms\n ).map((row, index) => (\n \n \n \n {renderRowLabel(row)}\n \n \n\n {rentalScenarios.map((scenario) => (\n \n \n {row.transformer\n ? row.accessor &&\n row.transformer(\n (quoteCalculation as { [key: number]: any })[\n scenario.scenarioId - 1\n ][row.accessor]\n )\n : row.accessor &&\n (quoteCalculation as { [key: number]: any })[\n scenario.scenarioId - 1\n ][row.accessor]}\n \n \n ))}\n \n ))}\n \n\n \n {action !== \"WHITELABEL\"\n ? userProfile && (\n \n \n {userProfile.fullName}\n \n {userProfile.title}\n \n P: {userProfile.phone}\n \n \n Email: {userProfile.email}\n \n URL: limaone.com\n \n )\n : null}\n \n \n \n );\n}\n\nexport default RentalSummarySheet;\n\nconst styles = StyleSheet.create({\n header: {\n padding: \"16 16 8 16\",\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n },\n headerImage: {\n height: \"auto\",\n width: 150,\n marginRight: 16,\n },\n summaryInfoWrapper: {\n display: \"flex\",\n flexDirection: \"row\",\n },\n borrowerSummaryContainer: {\n backgroundColor: \"#203864\",\n marginRight: 2,\n padding: \"16 16 8 16\",\n flex: \"1 0 39%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n },\n propertySummaryContainer: {\n backgroundColor: \"#4472C4\",\n marginLeft: 2,\n padding: \"16 16 8 16\",\n flex: \"1 0 59%\",\n },\n calculationTable: {\n paddingLeft: 16,\n paddingRight: 16,\n paddingTop: 0,\n paddingBottom: 8,\n },\n centerStripe: {\n position: \"absolute\",\n top: -8,\n right: -10,\n height: \"54vh\",\n width: \"85%\",\n borderRadius: 3,\n backgroundColor: \"#f2f6fa\",\n },\n summaryRow: {\n display: \"flex\",\n flexDirection: \"row\",\n textAlign: \"right\",\n },\n summaryCol: {\n flex: \"2 1 auto\",\n },\n summaryColLabel: {\n flex: \"2 0 auto\",\n textAlign: \"left\",\n },\n footer: {\n display: \"flex\",\n flexDirection: \"row\",\n borderTopWidth: 1,\n borderColor: \"#DBDBDB\",\n justifyContent: \"space-between\",\n paddingTop: 8,\n margin: \"0 16\",\n },\n disclosureContainer: {\n flex: \"1 0 55%\",\n marginRight: 16,\n },\n signatureContainer: {\n flex: \"1 0 40%\",\n },\n row: {\n display: \"flex\",\n flexDirection: \"row\",\n },\n col: {\n flex: 1,\n },\n});\n\nconst text = StyleSheet.create({\n base: {\n fontFamily: \"Roboto\",\n color: \"#000000\",\n fontSize: 16,\n position: \"relative\",\n lineHeight: 1.8,\n },\n\n lg: { fontSize: 18 },\n sm: { fontSize: 12 },\n xs: { fontSize: 10 },\n xxs: { fontSize: 8 },\n\n bold: { fontWeight: 700 },\n\n darkBlue: { color: \"#203864\" },\n blue: { color: \"#0070C0\" },\n white: { color: \"white\" },\n\n alignRight: { textAlign: \"right\" },\n uppercase: { textTransform: \"uppercase\" },\n lineHeightNormal: { lineHeight: 1.5 },\n alignCenter: { textAlign: \"center\" },\n promotionText: {\n color: \"#01457C\",\n fontWeight: 700,\n fontSize: 16,\n position: \"relative\",\n lineHeight: 1.8,\n },\n});\n","import { Document, Font } from \"@react-pdf/renderer\";\nimport React, { useMemo } from \"react\";\nimport robotoBold from \"../../../fonts/roboto-700.ttf\";\nimport robotoItalic from \"../../../fonts/Roboto-Italic.ttf\";\nimport roboto from \"../../../fonts/roboto.ttf\";\nimport { flattenObject } from \"../../../lib/flattenObject\";\nimport { YesNo } from \"../../../lib/models/enums\";\nimport { overrideLabelMap } from \"../../../lib/models/override-label-map\";\nimport { RentalCalculation } from \"../../../lib/models/rental/rental-calculation.model\";\nimport { RentalQuote, Scenario } from \"../../../lib/models/rental/rental.model\";\nimport { SFUserProfile } from \"../../../lib/models/sf-user-profile.model\";\nimport { Comment } from \"../../../lib/types/CommentType\";\nimport { PdfGenerationActions } from \"../../../lib/types/PDFGenerationActions\";\nimport { QuoteMetadata } from \"../../../lib/types/QuoteMetadata\";\nimport { bulletListToArray } from \"../../../lib/utils\";\nimport RentalCalculationSheet from \"./RentalCalculationSheet\";\nimport RentalDisclosureSheet from \"./RentalDisclosureSheet\";\nimport RentalInternalSelectionSheet from \"./RentalInternalSelectionSheet\";\nimport RentalSummarySheet from \"./RentalSummarySheet\";\n\nexport interface RentalTermSheetProps {\n quote: RentalQuote;\n calculation: RentalCalculation;\n scenarios: Scenario[];\n action: PdfGenerationActions;\n userProfile: SFUserProfile;\n metadata: QuoteMetadata;\n discussionArray: Comment[] | undefined;\n}\n\nfunction RentalTermSheet({\n quote,\n calculation,\n scenarios,\n action,\n userProfile,\n metadata,\n discussionArray,\n}: RentalTermSheetProps) {\n const quoteCalculation: { [key: number]: any } = useMemo(() => {\n if (quote && calculation && calculation?.scenarios) {\n for (let scenario of calculation.scenarios) {\n scenario.prepaymentPenaltySelected = quote.prepaymentPenalty;\n scenario.appraisalFee = quote.appraisalFee;\n }\n\n return {\n ...calculation.scenarios,\n feeLLPAs: calculation.feeLLPAs,\n rateLLPAs: calculation.rateLLPAs,\n overridePricing: calculation.overridePricing,\n };\n } else {\n return { 0: {}, 1: {}, 2: {} };\n }\n }, [calculation, quote]);\n const { exceptionPricingOverride } = quote;\n const { rateLLPAs, feeLLPAs, overridePricing } = quoteCalculation;\n\n const rateLLPAsArray = useMemo(\n () => bulletListToArray(rateLLPAs),\n [rateLLPAs]\n );\n\n const feeLLPAsArray = useMemo(() => bulletListToArray(feeLLPAs), [feeLLPAs]);\n\n const warningsArray = useMemo(() => {\n const allWarnings = calculation.scenarios.filter(\n (scenario) => scenario.warnings\n );\n const stringWarnings = allWarnings.map((scenario) => {\n return scenario.warnings;\n });\n if (stringWarnings) {\n return bulletListToArray(stringWarnings.join());\n }\n }, [calculation.scenarios]);\n\n const overrideArray = useMemo(() => {\n const overrides = bulletListToArray(overridePricing);\n if (exceptionPricingOverride) {\n for (const [key, value] of Object.entries(exceptionPricingOverride)) {\n if (value !== undefined) {\n if (key === \"exceptionType\") {\n overrides.unshift(`${overrideLabelMap[key]}: ${value}`);\n }\n }\n }\n if (overrides.length) {\n overrides.unshift(\n `Exception Status: ${metadata.exceptionStatus ?? \"Not Submitted\"}`\n );\n }\n return overrides;\n }\n }, [overridePricing, metadata.exceptionStatus, exceptionPricingOverride]);\n\n const quoteDate = useMemo(() => {\n const date = new Date();\n return date.toLocaleDateString();\n }, []);\n\n const pricingLastUpdated = useMemo(() => {\n return calculation.scenarios[0].pricingUpdateTimestamp ?? \"\";\n }, [calculation]);\n\n const rentalScenarios = useMemo(() => {\n return scenarios.filter((x) => x.included === YesNo.Yes);\n }, [scenarios]);\n\n const rentalQuote: { [key: string]: any } = useMemo(() => {\n return flattenObject(quote) || {};\n }, [quote]);\n\n const eligibilityArray = React.useMemo(() => {\n const arr: Array<[string, string]> = [];\n const calcScenarios = calculation.scenarios;\n scenarios.forEach((scenario, i) => {\n if (scenario.included !== YesNo.No) {\n arr.push([`Scenario ${i + 1}: `, `${calcScenarios[i].ltvEligibility}`]);\n }\n });\n return arr;\n }, [calculation.scenarios, scenarios]);\n\n return (\n \n \n\n \n\n \n\n {action === \"INTERNAL\" && (\n \n )}\n \n );\n}\n\nFont.register({\n family: \"Roboto\",\n fonts: [\n {\n src: roboto,\n },\n {\n src: robotoBold,\n fontWeight: 700,\n },\n {\n src: robotoItalic,\n fontStyle: \"italic\",\n },\n ],\n});\n\nexport default RentalTermSheet;\n","import { formatMoney, toFixed } from \"../../number-transforms\";\n\nexport const rentalSummary = [\n { label: \"Borrower\", accessor: \"borrower\" },\n {\n label: \"Estimated Value Of Property\",\n accessor: \"estimatedValOfProperty\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n { label: \"Number of Properties\", accessor: \"numOfProperties\" },\n];\n\nexport const payoffsLoanCosts = [\n {\n label: \"Payoff of Mortgage on Properties\",\n accessor: \"payoffMortgageProperties\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Purchase Price of Properties\",\n accessor: \"purchasePriceProperties\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Estimated Closing Costs (title, reconciliation, etc.)\",\n accessor: \"estimatedClosingCost\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Origination Fee\",\n accessor: \"originationFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"buyUpDownNotOpted\",\n accessor: \"buyUpDownFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n labelIsAccessor: true,\n },\n {\n label: \"Processing Fee\",\n accessor: \"processingFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Legal Fee\",\n accessor: \"legalFee\",\n },\n {\n label: \"Broker Fee\",\n accessor: \"brokerFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Servicing Setup Fee\",\n accessor: \"insuranceCertifications\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n];\n\nexport const impounds = [\n {\n label: \"Estimated 6 Month Tax Impound, Subject to Change\",\n accessor: \"taxImpound\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Estimated 6 Month Insurance Impound, Subject to Change\",\n accessor: \"insuranceImpound\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Estimated Management Reserve Account, Financed\",\n accessor: \"interestReserveEscrow\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Estimated Cash Due From Borrower at Close\",\n labelAlt: \"Estimated Cash Due To Borrower at Close\",\n showLabelAltOnCondition: (val: number) => val > 0,\n accessor: \"closingCashToBorrower\",\n transformer: (val: string | number) =>\n `$ ${formatMoney(Math.abs(+val), 0)}`,\n superscript: \"1\",\n totalRow: true,\n },\n];\n\nexport const spread = [\n {\n label: \"Spread\",\n accessor: \"spread\",\n superscript: \"2\",\n transformer: (val: string | number) => `${toFixed(val, 3)} %`,\n },\n];\n\nexport const rates = [\n {\n label: \"Today's Indicative Qualifying Interest Rate\",\n accessor: \"qualifyingInterestRate\",\n transformer: (val: string | number) => `${toFixed(val, 3)} %`,\n },\n {\n label: \"Rate Buy Up/Buy Down\",\n accessor: \"rateBuyUpDown\",\n transformer: (val: string | number) => `${toFixed(val, 3)} %`,\n },\n {\n label: \"prepaymentPenaltySelected\",\n accessor: \"prepaymentPenalty\",\n transformer: (val: string | number) => `${toFixed(val, 3)} %`,\n labelIsAccessor: true,\n },\n {\n label: \"openPrepayOptionSelected\",\n accessor: \"openPrepay\",\n transformer: (val: string | number) => `${toFixed(val, 3)} %`,\n labelIsAccessor: true,\n },\n {\n label: \"Today's Indicative Fixed Interest Rate\",\n accessor: \"interestRateValue\",\n transformer: (val: string | number) => `${toFixed(val, 3)} %`,\n totalRow: true,\n },\n];\n\nexport const payments = [\n { label: \"amortizationPeriod\", accessor: \"\", labelIsAccessor: true },\n {\n label: \"Monthly Principal & Interest Payment\",\n accessor: \"monthlyPrincipalInterest\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Monthly Payment of Taxes and Insurance\",\n accessor: \"monthlyTaxesInsurance\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Monthly Payment of HOA Dues, paid to HOA\",\n accessor: \"monthlyHOADues\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Total Monthly Payment (PITIC) - Based on Today's Indicative Rate\",\n accessor: \"monthlyTotalPayment\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n totalRow: true,\n },\n];\n\nexport const rentalIncome = [\n {\n label: \"Estimated Monthly Rental Income\",\n accessor: \"monthlyEstimatedRentalIncome\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Rent to Debt Service Ratio\",\n accessor: \"rentDebtRatio\",\n transformer: (val: string | number) => `${toFixed(val, 2)}`,\n },\n];\n\nexport const rateFeatures = [\n {\n label: \"Index (30-day average of SOFR, Adjusts Semiannually)\",\n accessor: \"\",\n labelOnly: true,\n },\n {\n label: \"Cap Structure: Cap Structure: 5, 2, 5\",\n accessor: \"\",\n labelOnly: true,\n },\n {\n label: \"Lifetime Cap\",\n accessor: \"lifetimeCap\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Margin\",\n accessor: \"\",\n labelOnly: true,\n },\n {\n label: \"Floor\",\n accessor: \"floor\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Lookback Period\",\n accessor: \"\",\n labelOnly: true,\n },\n];\n\nexport const additionalCashRequirements = [\n {\n label: \"All appraisal costs are paid in advance of closing\",\n accessor: \"\",\n labelOnly: true,\n },\n];\n\nexport const armLoanFeatureListItems = {\n label: \"Hybrid Adjustable Rate Mortgage (ARM) Loan Features\",\n items: [\n \"Your interest rate will be fixed for sixty (60) months. After the initial fixed period, your interest rate will be based on an index plus margin.\",\n \"This type of ARM loan carries a provision for a charge in the: Interest Rate and Monthly Payment.\",\n \"The index used to determine your initial interest rate and/or all adjustments is: the 30 day average of SOFR published by the Federal Reserve Bank of New York.\",\n \"Information about the index can be found: published by the Federal Reserve Bank of New York.\",\n \"Your interest rate will be equal to the index rate plus our margin rounded to the nearest .125% unless your interest rate caps limit the amount of change in the interest rate.\",\n \"Your interest rate will never be less than the Floor.\",\n \"Your interest rate will never be higher than the Lifetime Cap.\",\n \"Any increase in the interest rate will result in a higher monthly payment.\",\n ],\n};\n\nexport const internalListItems = [\n { label: \"Submission Type\", accessor: \"submissionType\" },\n { label: \"Sreo Property #\", accessor: \"sreoPropertyNumber\" },\n {\n label: \"Borrower Net Worth\",\n accessor: \"borrowerNetWorth\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Properties Owned < 6 Months\",\n accessor: \"appraisedVal1\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Total Costs < 6 Months\",\n accessor: \"totalCosts1\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Property Value > 12 Months\",\n accessor: \"appraisedVal3\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Purchase Price\",\n accessor: \"purchasePrice\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Annual Insurance\",\n accessor: \"annualInsurance\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Annual Taxes\",\n accessor: \"annualTaxes\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Annual HOA\",\n accessor: \"annualHOA\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Annual Flood\",\n accessor: \"annualFloodInsurance\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 2)}`,\n },\n {\n label: \"Yield Spread\",\n accessor: \"yieldSpread\",\n transformer: (val: string | number) => `${toFixed(+val, 3)} %`,\n },\n {\n label: \"Broker Fee\",\n accessor: \"brokerFee\",\n transformer: (val: string | number) => `${toFixed(val)} %`,\n },\n {\n label: \"Broker Processing Fee \",\n accessor: \"brokerProcessingFee\",\n transformer: (val: string | number) => {\n return val === 0 ? \"N/A\" : `$ ${formatMoney(val, 2)}`;\n },\n },\n {\n label: \"Appraisal Fee\",\n accessor: \"appraisalFee\",\n transformer: (val: number | string) => {\n return val === 0 ? \"TBD\" : `$ ${formatMoney(val, 2)}`;\n },\n },\n {\n label: \"Refinancing L1C FixNFlip Loan?\",\n accessor: \"refiL1cFixNFlip\",\n },\n {\n label: \"Properties in NY?\",\n accessor: \"propertiesNY\",\n },\n {\n label: \"Is 25% of the collateral less than $75,000?\",\n accessor: \"propertyVal\",\n },\n {\n label: \"Is the borrower a referral?\",\n accessor: \"borrowerIsReferral\",\n },\n {\n label: \"Are condos 25% of the collateral?\",\n accessor: \"collateralCondos\",\n },\n];\n","import { Document, Font, Image, Page, Text, View } from \"@react-pdf/renderer\";\nimport React, { useMemo } from \"react\";\nimport robotoBold from \"../../fonts/roboto-700.ttf\";\nimport roboto from \"../../fonts/roboto.ttf\";\nimport { flattenObject } from \"../../lib/flattenObject\";\nimport { RentalPremierProduct, YesNo } from \"../../lib/models/enums\";\nimport { RentalCalculation } from \"../../lib/models/rental/rental-calculation.model\";\nimport {\n additionalCashRequirements,\n armLoanFeatureListItems,\n impounds,\n internalListItems,\n payments,\n payoffsLoanCosts,\n rateFeatures,\n rates,\n rentalIncome,\n rentalSummary,\n spread,\n} from \"../../lib/models/rental/rental-premier-term-sheet-map\";\nimport {\n RentalPremierQuote,\n Scenario,\n} from \"../../lib/models/rental/rental.model\";\nimport { formatMoney, toFixed } from \"../../lib/number-transforms\";\nimport { PdfGenerationActions } from \"../../lib/types/PDFGenerationActions\";\nimport pdfLogo from \"../../limaone_logo.png\";\nimport FixAndFlipTableSection from \"./FixAndFlipTableSection\";\nimport RentalTableSection from \"./RentalTableSection\";\nimport { styles } from \"./styles\";\n\nexport interface RentalPremierTermSheetProps {\n quote: RentalPremierQuote;\n calculation: RentalCalculation;\n scenarios: Scenario[];\n action: PdfGenerationActions;\n}\n\nfunction RentalPremierTermSheet({\n quote,\n calculation,\n scenarios,\n action,\n}: RentalPremierTermSheetProps) {\n const quoteCalculation: { [key: string]: any } | { [key: number]: any } =\n useMemo(() => {\n if (quote && calculation && calculation?.scenarios) {\n for (let scenario of calculation.scenarios) {\n scenario.interestRateValue = scenario.premier?.interestRateValue || 0;\n scenario.prepaymentPenaltySelected = quote.prepaymentPenalty;\n scenario.openPrepayOptionSelected = quote.premier?.openPrepayOption;\n scenario.amortizationPeriod = `Term and Amortization Period: ${scenario.amortizationPeriod}`;\n\n if (scenario.premier) {\n scenario.interestRateName = scenario.premier.interestRateName;\n scenario.openPrepay = scenario.premier.openPrepay;\n scenario.index = scenario.premier.index;\n scenario.indexRate = scenario.premier.indexRate;\n scenario.dateRate = scenario.premier.dateRate;\n scenario.spread = scenario.premier.spread;\n }\n }\n\n return {\n ...calculation.scenarios,\n };\n } else {\n return {\n 0: {},\n 1: {},\n 2: {},\n };\n }\n }, [calculation, quote]);\n\n const quoteDate = useMemo(() => {\n const date = new Date();\n return date.toLocaleDateString();\n }, []);\n\n const rentalScenarios = useMemo(() => {\n return scenarios.filter((x) => x.included === YesNo.Yes);\n }, [scenarios]);\n\n const rentalQuote: { [key: string]: any } = useMemo(() => {\n return flattenObject(quote) || {};\n }, [quote]);\n\n return (\n \n \n \n \n {action !== \"WHITELABEL\" ? (\n \n \n \n 201 East McBee Avenue, Suite 300 | Greenville, SC 29601\n \n \n ) : null}\n\n \n \n Preliminary Estimate of Costs\n \n \n Rental {quote.productType}\n \n {quoteDate}\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n Index:\n {(quoteCalculation as { [key: number]: any })[0].index}\n   |   Index Rate:\n {toFixed(\n +(quoteCalculation as { [key: number]: any })[0]\n .indexRate * 100,\n 2\n )}\n %\n \n \n Loan Amount\n \n \n \n\n {rentalScenarios.map((scenario, index) => (\n \n {rentalScenarios.length > 2 && index % 2 !== 0 && (\n \n )}\n\n \n \n {scenario.ltvPercentage}% LTV\n \n \n ${\" \"}\n {formatMoney(\n (quoteCalculation as { [key: number]: any })[index]\n .loanAmt,\n 0\n )}\n \n \n \n ))}\n \n \n \n\n \n \n \n\n \n\n \n\n \n\n \n\n \n \n \n\n {quote.productType === RentalPremierProduct[\"Premier - 5/1 ARM\"] && (\n \n \n Additional Information\n \n \n \n \n 1. Cash to close figures include an estimation of 3rd party\n Closing Costs, which will be charged by your selected title\n company.\n \n \n \n \n 2. The annual fixed Interest Rate for the Loan will be equal\n to the sum of (i) the Spread and (ii) the greater of the 10\n Year Swap Rate as of the date 5 days prior to the Closing Date\n and 0.70%. Based on the referenced 10 Year Swap Rate as of the\n date of your quote, Today's indicative rate is presented below\n for information purposes only. The Interest Rate is subject to\n change if there are material changes in prevailing interest\n rates or Borrower's application, such as, but not limited to\n changes in the loan amount, program type, loan to value or\n other changed circumstances.\n \n \n \n \n )}\n\n \n \n `Page ${pageNumber} of ${\n action === \"INTERNAL\" ? totalPages - 1 : totalPages\n }`\n }\n />\n \n \n\n \n \n {action !== \"WHITELABEL\" ? (\n \n \n \n 201 East McBee Avenue, Suite 300 | Greenville, SC 29601\n \n \n ) : (\n \n )}\n \n \n Preliminary Estimate of Costs\n \n \n Rental {quote.productType}\n \n {quoteDate}\n \n \n\n \n \n Disclosures and Contingencies\n \n\n {quote.productType === RentalPremierProduct[\"Premier - 5/1 ARM\"] ? (\n \n ) : null}\n\n \n \n Interest Reserve Account\n \n \n So long as no Event of Default has occurred and is continuing and\n no event with the passage of time and/or the giving of notice\n would constitute a default hereunder or under any other Loan\n Documents have occurred. Lender shall credit, the Interest Reserve\n towards the then due interest, principal, tax, and insurance\n payment under the Note.\n \n \n\n \n \n \n\n \n \n Prepayment Penalty\n \n \n {(quoteCalculation as { [key: number]: any })[0][\n \"prepaymentPenaltyText\"\n ]\n .split(\"•\")\n .filter((x: string) => x)\n .map((x: string) => x.trim())\n .join(\" \")}\n \n \n\n \n \n Open Prepay Option\n \n \n Prepay penalty will be applied to any prepayments of the scheduled\n principal balance during the prepayment period.\n \n \n\n {quote.productType === RentalPremierProduct[\"Premier - 5/1 ARM\"] ? (\n \n \n {armLoanFeatureListItems.label}\n \n {armLoanFeatureListItems.items.map((x, index) => (\n \n -\n \n {x}\n \n \n ))}\n \n ) : null}\n\n \n \n Release Price\n \n \n The lien against an individual property will be released when 115%\n of the original loan amount allocated to that property is paid in\n full.\n \n \n\n \n \n Personal Guaranty\n \n \n All loans must be personally guaranteed by all members of the\n borrowing entity.\n \n \n\n \n \n Preliminary Estimate is Subject to Change\n \n \n This estimate of costs is contingent upon full borrower and\n property underwriting.\n \n \n\n \n \n Business purpose\n \n \n The Rental30 Loan is for business purpose use only, specifically,\n for real estate investors purchasing, refinancing, or cashing-out\n of non-owner occupied, rental properties.\n \n \n \n\n {quote.productType !== RentalPremierProduct[\"Premier - 5/1 ARM\"] && (\n \n \n Additional Information\n \n \n \n \n 1. For Information Purposes Only - The above cash to close\n figures do not include 3rd party title fees.\n \n \n \n {quote.productType ===\n RentalPremierProduct[\"Premier - 5 Year, 30 Am\"] ||\n quote.productType ===\n RentalPremierProduct[\"Premier - 5 Year Balloon\"] ? (\n \n 2. The annual fixed Interest Rate for the Loan will be equal\n to the sum of (i) the Spread and (ii) the greater of the 5\n Year Swap Rate as of the date 5 days prior to the Closing\n Date and 0.50%. Based on the referenced 5 Year Swap Rate as\n of the date of your quote, Today's indicative rate is\n presented below for information purposes only. The Interest\n Rate is subject to change if there are material changes in\n prevailing interest rates or Borrower's application, such\n as, but not limited to changes in the loan amount, program\n type, loan to value or other changed circumstances.\n \n ) : (\n \n 2. The annual fixed Interest Rate for the Loan will be equal\n to the sum of (i) the Spread and (ii) the greater of the 10\n Year Swap Rate as of the date 5 days prior to the Closing\n Date and 0.70%. Based on the referenced 10 Year Swap Rate as\n of the date of your quote, Today's indicative rate is\n presented below for information purposes only. The Interest\n Rate is subject to change if there are material changes in\n prevailing interest rates or Borrower's application, such\n as, but not limited to changes in the loan amount, program\n type, loan to value or other changed circumstances.\n \n )}\n \n \n \n )}\n\n \n {action !== \"WHITELABEL\" ? (\n \n This estimate is for informational purposes only and does not\n constitute loan commitment or a rate lock. All rates and terms may\n change without notice and are subject to credit approval,\n underwriting, and verification of the information provided. Final\n terms and conditions will be detailed in definitive loan\n documents. Lima One is an equal housing lender. NMLS ID # 1324403\n (www.nmlsconsumeraccess.org).\n \n ) : (\n \n This estimate is for informational purposes only and is not a\n commitment to lend. All loans are subject to borrower\n qualification and final credit approval. Approvals are subject to\n underwriting and program guidelines, and are subject to change\n without notice in the lender’s sole discretion.\n \n )}\n\n \n `Page ${pageNumber} of ${\n action === \"INTERNAL\" ? totalPages - 1 : totalPages\n }`\n }\n />\n \n \n\n {action === \"INTERNAL\" && (\n \n \n \n \n \n 201 East McBee Avenue, Suite 300 | Greenville, SC 29601\n \n \n\n \n \n Internal Selections\n \n \n Rental {quote.productType}\n \n {quoteDate}\n \n \n\n \n \n \n \n )}\n \n );\n}\n\nFont.register({\n family: \"Roboto\",\n fonts: [\n {\n src: roboto,\n },\n {\n src: robotoBold,\n fontWeight: 700,\n },\n ],\n});\n\nexport default RentalPremierTermSheet;\n","import { formatDateLocal, formatMoney, toFixed } from \"../../number-transforms\";\n\nexport const propertyDetails = [\n {\n label: \"Subject Property Address\",\n accessor: \"propertyAddress\",\n },\n {\n label: \"\",\n accessor: \"formattedAddress\",\n },\n {\n label: \"Loan Purpose\",\n accessor: \"loanPurpose\",\n },\n {\n label: \"Loan Type\",\n accessor: \"loanProduct\",\n },\n {\n label: \"Property Type\",\n accessor: \"propertyType\",\n },\n { label: \"Number of Properties\", accessor: \"numOfProperties\" },\n];\n\nexport const loanTermsSummary = [\n {\n label: \"Estimated Loan Amount\",\n accessor: \"loanAmt\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Rate\",\n accessor: \"finalRate\",\n transformer: (val) => `${toFixed(val, 3)} %`,\n },\n {\n label: \"Origination Fee\",\n accessor: \"finalOrigFee\",\n transformer: (val) => `${toFixed(val, 3)} %`,\n },\n {\n label: \"Deferred Origination Fee\",\n accessor: \"deferredOriginationFee\",\n transformer: (val) => `${toFixed(val, 3)} %`,\n },\n {\n label: \"Term\",\n accessor: \"loanTerm\",\n transformer: (val) => `${val} Months Interest Only`,\n },\n {\n label: \"Initial Payment\",\n accessor: \"initMonthlyPayment\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Payment Once Fully Drawn\",\n accessor: \"paymentFullyDrawn\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n];\n\nexport const borrowerInformation = [\n { label: \"Primary Sponsor Name\", accessor: \"primaryGuarantor\" },\n {\n label: \"Entity Name\",\n accessor: \"borrowingEntity\",\n },\n { label: \"Qualifying FICO Score\", accessor: \"qualifyingFICO\" },\n {\n label: \"Loan Guaranty\",\n accessor: \"guaranty\",\n },\n];\n\nexport const loanStructureSummary = [\n {\n label: \"Estimated ARV\",\n accessor: \"afterCompletedVal\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Purchase Price\",\n accessor: \"totalPurchasePrice\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Construction Budget\",\n accessor: \"rehabConBudget\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Existing Payoff\",\n accessor: \"existingPayoff\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Total Loan Fees & Costs\",\n accessor: \"totalLoanFeesCost\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Estimated Loan Amount\",\n accessor: \"estimatedLoanAmt\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Interest Reserve Escrow\",\n accessor: \"interestReserve\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n];\n\nexport const estimatedCashToClose = [\n {\n label: \"Estimated Cash Due From Borrower at Close\",\n labelAlt: \"Estimated Cash Due To Borrower at Close\",\n showLabelAltOnCondition: (val) => val > 0,\n accessor: \"estimatedCashAtClose\",\n transformer: (val) => `$ ${formatMoney(Math.abs(val), 0)}`,\n },\n];\n\nexport const loanCostsPaidAtClosing = [\n {\n label: \"PROMOTION-Origination Fee Reduction\",\n accessor: \"campaignFeeIncentive\",\n transformer: (val) => `-$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Discounted Origination Fee\",\n accessor: \"originationFee\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Underwriting and Processing Fee\",\n accessor: \"processingFee\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Legal Fee\",\n accessor: \"legalFee\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Broker Fee\",\n accessor: \"brokerFee\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Broker Processing Fee\",\n accessor: \"brokerProcessingFeeCalc\",\n transformer: (val) => {\n return val === 0 ? \"N/A\" : `$ ${formatMoney(val, 0)}`;\n },\n },\n];\n\nexport const totalLoanCostsAtClosing = [\n {\n label: \"Projected Total Loan Costs*\",\n accessor: \"totalLoanCostFees\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n];\n\nexport const loanCostsPaidOutsideClosing = [\n {\n label: \"Upfront Valuation Fee\",\n accessor: \"appraisalFee\",\n transformer: (val) => {\n return val === 0 ? \"TBD\" : `$ ${formatMoney(val, 2)}`;\n },\n },\n {\n label: \"Draw Fee, Per Property Inspected\",\n accessor: \"drawFee\",\n transformer: (val) => (val ? `$ ${formatMoney(val, 0)}` : \"$ 225\"),\n },\n {\n label: \"Deferred Origination Fee\",\n accessor: \"exitFee\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n];\n\nexport const leverageCalculations = [\n {\n label: \"Blended Loan to Cost\",\n accessor: \"blendedLoanToCost\",\n transformer: (val) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Rehab Budget LTC\",\n accessor: \"rehabBudgetLTC\",\n transformer: (val) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Currently Projected ARV/LTV\",\n accessor: \"currentProjectedLTVLTARV\",\n transformer: (val) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Max Allowable ARV/LTV\",\n accessor: \"maxLTVRatio\",\n transformer: (val) => `${toFixed(val, 2)} %`,\n },\n];\n\nexport const internalBuyerItems = [\n {\n label: \"Secondary Guarantor\",\n accessor: \"secondaryGuarantor\",\n transformer: (val) => (val ? val : \"No Secondary Guarantor Entered\"),\n },\n {\n label: \"Referral?\",\n accessor: \"referralFee\",\n transformer: (val) => (val === 0 ? \"No\" : \"Yes\"),\n },\n {\n label: \"Internal Refinance?\",\n accessor: \"internalRefinance\",\n },\n {\n label: \"US Citizen?\",\n accessor: \"usCitizen\",\n },\n {\n label: \"Borrower Tier\",\n accessor: \"borrowerTier\",\n },\n {\n label: \"Completed Exits\",\n accessor: \"completedExits\",\n },\n { label: \"New Construction using FixNFlip Tier?\", accessor: \"altTier\" },\n];\n\nexport const internalStfPropertyItems = [\n {\n label: \"Property Address\",\n accessor: \"propertyAddress\",\n },\n {\n label: \"Property City\",\n accessor: \"city\",\n },\n {\n label: \"Property State\",\n accessor: \"state\",\n },\n {\n label: \"Property Zip\",\n accessor: \"zip\",\n },\n {\n label: \"Property Type\",\n accessor: \"propertyType\",\n },\n {\n label: \"Existing Debt Status\",\n accessor: \"existingDebtStatus\",\n },\n {\n label: \"Original Purchase Date\",\n accessor: \"originalPurchaseDate\",\n transformer: (val) => (val !== \"\" ? formatDateLocal(val) : \"N/A\"),\n },\n {\n label: \"Total Cost\",\n accessor: \"totalCost\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n];\n\nexport const internalStfLoanItems = [\n {\n label: \"Rates and Terms last updated\",\n accessor: \"pricingUpdateTimestamp\",\n transformer: (val) => formatDateLocal(val.toString()),\n },\n {\n label: \"Estimated Closing Date\",\n accessor: \"targetCloseDate\",\n transformer: (val) => formatDateLocal(val),\n },\n {\n label: \"Months to Payoff\",\n accessor: \"timeCloseToPayoff\",\n },\n {\n label: \"Loan Type\",\n accessor: \"loanProduct\",\n transformer: (val) => (val === \"New Construction\" ? val : \"FixNFlip\"),\n },\n {\n label: \"Channel\",\n accessor: \"channel\",\n },\n {\n label: \"Guaranty\",\n accessor: \"guaranty\",\n },\n {\n label: \"Cashout?\",\n accessor: \"actualCashOut\",\n },\n {\n label: \"Broker Fee\",\n accessor: \"brokerFeePercentage\",\n transformer: (val) => `${val} %`,\n },\n {\n label: \"Broker Processing Fee\",\n accessor: \"brokerProcessingFee\",\n transformer: (val) => {\n return val === 0 ? \"N/A\" : `$ ${formatMoney(val, 0)}`;\n },\n },\n {\n label: \"Max LTC on Purchase\",\n accessor: \"maxLTCOnPurchase\",\n transformer: (val) => `${toFixed(val, 3)} %`,\n },\n {\n label: \"LTC Construction Budget\",\n accessor: \"LTCConBudget\",\n transformer: (val) => `${toFixed(val, 3)} %`,\n },\n {\n label: \"Purchase + Rehab Maximum Loan\",\n accessor: \"ltcCalcRehabMaxLoan\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Blended LTC Maximum Loan\",\n accessor: \"blendedLTCMaxLoan\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"LTV Maximum Loan\",\n accessor: \"LTVMaxLoan\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Internal Valuation\",\n accessor: \"internalValuation\",\n },\n {\n label: \"Zero Percent Lender Fee\",\n accessor: \"isZeroOrigFee\",\n },\n {\n label: \"Fee Buy Down\",\n accessor: \"buyUpPercentage\",\n transformer: (val) => `${val} %`,\n },\n {\n label: \"Hybrid Appraisal\",\n accessor: \"hybridAppraisal\",\n transformer: (val) => (val === \"\" ? \"No\" : val),\n },\n];\n\nexport const internalDiscussionItems = [];\n","import { formatMoney } from \"./number-transforms\";\n\nexport const getLoanCostsPaidAtClosing = (\n flattenedCalculation: { [key: string]: any },\n loanCostsPaidAtClosing: any,\n campaignFeeIncentive: any\n) => {\n const loanCostsPaidAtClosingValues = [...loanCostsPaidAtClosing];\n\n if (!campaignFeeIncentive) {\n const campaignFeeIncentiveIndex = loanCostsPaidAtClosingValues.findIndex(\n (x) => x.accessor === \"campaignFeeIncentive\"\n );\n loanCostsPaidAtClosingValues.splice(campaignFeeIncentiveIndex, 1);\n\n const originationFeeIndex = loanCostsPaidAtClosingValues.findIndex(\n (x) => x.accessor === \"originationFee\"\n );\n loanCostsPaidAtClosingValues[originationFeeIndex].label = \"Origination Fee\";\n }\n\n if (!flattenedCalculation.channel.includes(\"Broker\")) {\n loanCostsPaidAtClosingValues.splice(-2, 2);\n }\n\n return loanCostsPaidAtClosingValues;\n};\n\nexport const getLoanTermsSummaryByProductType = (\n productType: string,\n loanTermsSummary: any,\n flattenedQuoteCalculation: { [key: string]: any }\n) => {\n const bridgePlusValues = [...loanTermsSummary];\n\n if (productType === \"BridgePlus\") {\n bridgePlusValues.pop();\n }\n\n if (!flattenedQuoteCalculation.deferredOriginationFee) {\n bridgePlusValues.splice(3, 1);\n }\n\n return bridgePlusValues;\n};\n\nexport const getLoanStructureSummaryLabels = (\n loanPurpose: string,\n loanStructureSummary: any,\n productType: string,\n interestReserve: number\n) => {\n const loanStructureSummaryValues = [...loanStructureSummary];\n\n const purchasePriceLabel = () => {\n if (loanPurpose === \"Refinance\") {\n return \"As-Is Value\";\n }\n if (productType === \"BridgePlus\") {\n return \"Total As-Is Value\";\n }\n return \"Purchase Price\";\n };\n\n loanStructureSummaryValues.forEach((x) => {\n if (x.accessor === \"totalPurchasePrice\") {\n x.label = purchasePriceLabel();\n if (loanPurpose === \"Refinance\") {\n x.accessor = \"lesserOfLotOrPurchase\";\n }\n }\n return x;\n });\n\n if (productType === \"BridgePlus\") {\n loanStructureSummaryValues.shift();\n }\n\n if (interestReserve === 0) {\n const interestReserveIndex = loanStructureSummaryValues.findIndex(\n (x) => x.accessor === \"interestReserve\"\n );\n loanStructureSummaryValues.splice(interestReserveIndex, 1);\n }\n\n return loanStructureSummaryValues;\n};\n\nexport const getLeverageCalculationsLabels = (\n productType: string,\n leverageCalculations: any\n) => {\n const leverageCalculationsValues = [...leverageCalculations];\n\n const currentProjectedLTVLTARVlabel =\n productType === \"BridgePlus\"\n ? \"Currently Projected LTV\"\n : \"Currently Projected ARV\";\n\n const maxLTVRatioLabel =\n productType === \"BridgePlus\" ? \"Max Allowable LTV\" : \"Max Allowable ARV\";\n\n leverageCalculationsValues.forEach((x) => {\n if (x.accessor === \"currentProjectedLTVLTARV\") {\n x.label = currentProjectedLTVLTARVlabel;\n }\n if (x.accessor === \"maxLTVRatio\") {\n x.label = maxLTVRatioLabel;\n }\n return x;\n });\n\n if (productType === \"BridgePlus\") {\n leverageCalculationsValues.splice(1, 1);\n }\n\n return leverageCalculationsValues;\n};\n\nexport const getInternalBuyerItemsByProductType = (\n productType: string,\n internalBuyerItems: any,\n completedExits: any\n) => {\n const internalBuyerValues = [...internalBuyerItems];\n\n if (productType !== \"New Construction\") {\n const altTierIndex = internalBuyerValues.findIndex(\n (x) => x.accessor === \"altTier\"\n );\n internalBuyerValues.splice(altTierIndex, 1);\n }\n\n if (!completedExits) {\n const completedExitsIndex = internalBuyerValues.findIndex(\n (x) => x.accessor === \"completedExits\"\n );\n internalBuyerValues.splice(completedExitsIndex, 1);\n }\n\n return internalBuyerValues;\n};\n\nexport const getInternalStfPropertyItemsByProductType = (\n productType: string,\n internalStfPropertyItems: any\n) => {\n const internalStfPropertyValues = [...internalStfPropertyItems];\n if (productType !== \"BridgePlus\") {\n internalStfPropertyValues.splice(5, 1);\n }\n\n return internalStfPropertyValues;\n};\n\nexport const getLoanCostsPaidOutsideClosingByProductType = (\n productType: string,\n numOfProperties: any,\n loanCostsPaidOutsideClosing: any,\n flattenedQuoteCalculation: { [key: string]: any }\n) => {\n const loanCostsPaidOutsideClosingValues = [...loanCostsPaidOutsideClosing];\n\n let drawFeeAmount = \"\";\n if (productType === \"New Construction\") {\n drawFeeAmount = numOfProperties > 1 ? \"$ 100\" : \"$ 199\";\n } else if (productType === \"FixNFlip\") {\n drawFeeAmount = \"$ 199\";\n }\n\n loanCostsPaidOutsideClosingValues.forEach((x) => {\n if (x.accessor === \"drawFee\") {\n x.transformer = (val: any) =>\n val ? `$ ${formatMoney(val, 0)}` : drawFeeAmount;\n }\n });\n\n if (productType === \"BridgePlus\") {\n loanCostsPaidOutsideClosingValues.splice(1, 1);\n }\n\n if (!flattenedQuoteCalculation.exitFee) {\n loanCostsPaidOutsideClosingValues.pop();\n }\n\n return loanCostsPaidOutsideClosingValues;\n};\n\nexport const getInternalStfLoanItems = (\n internalStfLoanItems: any,\n hybridAppraisal: string\n) => {\n const internalStfLoanItemValues = [...internalStfLoanItems];\n\n if (hybridAppraisal !== \"Yes\") {\n const hybridAppraisalIndex = internalStfLoanItemValues.findIndex(\n (x) => x.accessor === \"hybridAppraisal\"\n );\n internalStfLoanItemValues.splice(hybridAppraisalIndex, 1);\n }\n\n return internalStfLoanItemValues;\n};\n","import { Text, View } from \"@react-pdf/renderer\";\nimport React from \"react\";\nimport { SFUserProfile } from \"../../lib/models/sf-user-profile.model\";\nimport { styles } from \"./styles\";\n\nexport interface RepInfoTableSectionProps {\n userProfile: SFUserProfile;\n rowStyling?: any;\n background?: any;\n}\n\nfunction RepInfoTableSection(props: RepInfoTableSectionProps) {\n const { userProfile, rowStyling = styles.tableRow, background } = props;\n\n return (\n \n \n \n \n Contact Your Rep\n \n \n \n\n \n \n {userProfile.fullName}\n \n \n\n \n \n {userProfile.title}\n \n \n\n \n \n \n Phone:\n  {userProfile.phone}\n \n \n \n\n \n \n \n Email:\n  {userProfile.email}\n \n \n \n\n \n \n \n URL:\n  www.limaone.com\n \n \n \n \n );\n}\n\nexport default RepInfoTableSection;\n","import { Image, Page, Text, View } from \"@react-pdf/renderer\";\nimport React from \"react\";\nimport { FixAndFlipProduct } from \"../../../lib/models/enums\";\nimport { SFUserProfile } from \"../../../lib/models/sf-user-profile.model\";\nimport {\n borrowerInformation,\n estimatedCashToClose,\n leverageCalculations,\n loanCostsPaidAtClosing,\n loanCostsPaidOutsideClosing,\n loanStructureSummary,\n loanTermsSummary,\n propertyDetails,\n totalLoanCostsAtClosing,\n} from \"../../../lib/models/short-term/short-term-term-sheet-map\";\nimport {\n getLeverageCalculationsLabels,\n getLoanCostsPaidAtClosing,\n getLoanCostsPaidOutsideClosingByProductType,\n getLoanStructureSummaryLabels,\n getLoanTermsSummaryByProductType,\n} from \"../../../lib/stf-pdf-utils\";\nimport { PdfGenerationActions } from \"../../../lib/types/PDFGenerationActions\";\nimport { QuoteMetadata } from \"../../../lib/types/QuoteMetadata\";\nimport pdfLogo from \"../../../limaone_logo.png\";\nimport FixAndFlipTableSection from \"../FixAndFlipTableSection\";\nimport RepInfoTableSection from \"../RepInfoTableSection\";\nimport { styles } from \"../styles\";\n\nexport interface STFCalculationSheetProps {\n action: PdfGenerationActions;\n quoteDate: string;\n userProfile: SFUserProfile;\n metadata: QuoteMetadata;\n flattenedQuoteCalculation: { [key: string]: any };\n}\n\nfunction STFCalculationSheet(props: STFCalculationSheetProps) {\n const { action, quoteDate, flattenedQuoteCalculation, userProfile } = props;\n\n const loanCostsPaidAtClosingSection = getLoanCostsPaidAtClosing(\n flattenedQuoteCalculation,\n loanCostsPaidAtClosing,\n flattenedQuoteCalculation.campaignFeeIncentive\n );\n\n const loanTermsSummarySection = getLoanTermsSummaryByProductType(\n flattenedQuoteCalculation.loanProduct,\n loanTermsSummary,\n flattenedQuoteCalculation\n );\n\n const loanStructureSummarySection = getLoanStructureSummaryLabels(\n flattenedQuoteCalculation.loanPurpose,\n loanStructureSummary,\n flattenedQuoteCalculation.loanProduct,\n flattenedQuoteCalculation.interestReserve\n );\n\n const leverageCalculationsSection = getLeverageCalculationsLabels(\n flattenedQuoteCalculation.loanProduct,\n leverageCalculations\n );\n\n const loanCostsPaidOutsideClosingSection =\n getLoanCostsPaidOutsideClosingByProductType(\n flattenedQuoteCalculation.loanProduct,\n flattenedQuoteCalculation.numOfProperties,\n loanCostsPaidOutsideClosing,\n flattenedQuoteCalculation\n );\n\n return (\n \n \n {action !== \"WHITELABEL\" ? (\n \n \n \n 201 East McBee Avenue, Suite 300 | Greenville, SC 29601\n \n \n ) : (\n \n )}\n \n \n {flattenedQuoteCalculation.termSheetTitle}\n \n {quoteDate}\n \n \n\n \n \n \n \n \n\n \n \n {flattenedQuoteCalculation.loanAmt > 3000000 && (\n \n * The current loan structure will need an exception reviewed and\n approved by our Credit Review Committee.\n \n )}\n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n \n * Cash to close does not include title fees or construction due\n diligence fees.\n \n \n\n \n \n \n \n * Subject to change due to Lender's incurred underwriting\n expenses.\n \n \n \n\n \n \n {userProfile && action !== \"WHITELABEL\" && (\n \n )}\n \n \n \n {flattenedQuoteCalculation.loanProduct !==\n FixAndFlipProduct.BridgePlus && (\n <>\n \n *Draw fee will be netted against draw proceeds.\n \n \n )}\n \n \n \n\n \n \n Additional Information\n \n\n \n {flattenedQuoteCalculation.loanProduct !==\n FixAndFlipProduct.BridgePlus ? (\n \n * An approved GC may be required for New Construction or Heavy\n Rehab loans. Permits may be required before a draw is approved.\n \n ) : (\n \n * At Lender’s discretion, the term of the loan may be extended for\n up to 3 months for a 1% fee.\n \n )}\n \n * Disclaimer: If credit is pulled, you will incur a $50 Credit\n Report fee at closing.\n \n {flattenedQuoteCalculation.numOfProperties > 1 && (\n \n * The lien against an individual property will be released when\n 115% of the original loan amount allocated to that property is\n paid in full.\n \n )}\n {flattenedQuoteCalculation.interestReserve !== 0 && (\n \n * So long as no Event of Default has occurred and is continuing\n and no event with the passage of time and/or the giving of notice\n would constitute a default hereunder or under any other Loan\n Documents have occurred. Lender shall credit, the Interest Reserve\n towards the then due interest under the Note.\n \n )}\n {flattenedQuoteCalculation.achFee !== undefined &&\n flattenedQuoteCalculation.achFee !== \"\" && (\n \n * ACH payments are required on this loan. An ACH form will be\n provided in the loan package signed at closing. If you cancel\n ACH payments after closing, a fee of{\" \"}\n {flattenedQuoteCalculation.achFee} will be added to the monthly\n payment.\n \n )}\n \n \n \n {action !== \"WHITELABEL\" ? (\n \n This estimate is for informational purposes only and does not\n constitute loan commitment or a rate lock. All rates and terms may\n change without notice and are subject to credit approval,\n underwriting, and verification of the information provided. Final\n terms and conditions will be detailed in definitive loan documents.\n Lima One is an equal housing lender. NMLS ID # 1324403\n (www.nmlsconsumeraccess.org).\n \n ) : (\n \n This estimate is for informational purposes only and is not a\n commitment to lend. All loans are subject to borrower qualification\n and final credit approval. Approvals are subject to underwriting and\n program guidelines, and are subject to change without notice in the\n lender’s sole discretion.\n \n )}\n\n \n `Page ${pageNumber} of ${\n action === \"INTERNAL\" ? totalPages - 1 : totalPages\n }`\n }\n />\n \n \n );\n}\n\nexport default STFCalculationSheet;\n","import { Image, Page, Text, View } from \"@react-pdf/renderer\";\nimport React from \"react\";\nimport { SFUserProfile } from \"../../../lib/models/sf-user-profile.model\";\nimport {\n internalBuyerItems,\n internalStfLoanItems,\n internalStfPropertyItems,\n} from \"../../../lib/models/short-term/short-term-term-sheet-map\";\nimport {\n getInternalBuyerItemsByProductType,\n getInternalStfLoanItems,\n getInternalStfPropertyItemsByProductType,\n} from \"../../../lib/stf-pdf-utils\";\nimport { Comment } from \"../../../lib/types/CommentType\";\nimport pdfLogo from \"../../../limaone_logo.png\";\nimport FixAndFlipTableSection from \"../FixAndFlipTableSection\";\nimport InternalDiscussionSection from \"../InternalDiscussionSection\";\nimport InternalSelectionSection from \"../InternalSelectionSection\";\nimport { styles } from \"../styles\";\n\nexport interface STFInternalSelectionSheetProps {\n rateLLPAsArray: string[];\n feeLLPAsArray: string[];\n quoteDate: string;\n userProfile: SFUserProfile;\n flattenedQuoteCalculation: { [key: string]: any };\n overrideArray: string[] | undefined;\n warningsArray: string[] | undefined;\n discussionArray: Comment[] | undefined;\n}\n\nfunction STFInternalSelectionSheet(props: STFInternalSelectionSheetProps) {\n const {\n rateLLPAsArray,\n feeLLPAsArray,\n quoteDate,\n flattenedQuoteCalculation,\n overrideArray,\n warningsArray,\n discussionArray,\n } = props;\n\n const internalBuyerItemsSection = getInternalBuyerItemsByProductType(\n flattenedQuoteCalculation.loanProduct,\n internalBuyerItems,\n flattenedQuoteCalculation.completedExits\n );\n\n const internalStfPropertyItemsSection =\n getInternalStfPropertyItemsByProductType(\n flattenedQuoteCalculation.loanProduct,\n internalStfPropertyItems\n );\n\n const internalStfLoanItemsSection = getInternalStfLoanItems(\n internalStfLoanItems,\n flattenedQuoteCalculation.hybridAppraisal\n );\n\n return (\n \n \n \n \n \n 201 East McBee Avenue, Suite 300 | Greenville, SC 29601\n \n \n \n \n Internal Selections\n \n \n Fix And Flip Term Sheet\n \n {quoteDate}\n \n \n\n \n\n \n\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n \n );\n}\n\nexport default STFInternalSelectionSheet;\n","import { Document, Font } from \"@react-pdf/renderer\";\nimport React, { useMemo } from \"react\";\nimport robotoBold from \"../../../fonts/roboto-700.ttf\";\nimport roboto from \"../../../fonts/roboto.ttf\";\nimport { flattenObject } from \"../../../lib/flattenObject\";\nimport { overrideLabelMap } from \"../../../lib/models/override-label-map\";\nimport { SFUserProfile } from \"../../../lib/models/sf-user-profile.model\";\nimport { FixAndFlipCalculation } from \"../../../lib/models/short-term/short-term-calculation.model\";\nimport { FixAndFlipQuote } from \"../../../lib/models/short-term/short-term.model\";\nimport { Comment } from \"../../../lib/types/CommentType\";\nimport { PdfGenerationActions } from \"../../../lib/types/PDFGenerationActions\";\nimport { QuoteMetadata } from \"../../../lib/types/QuoteMetadata\";\nimport { bulletListToArray } from \"../../../lib/utils\";\nimport STFCalculationSheet from \"./STFCalculationSheet\";\nimport STFInternalSelectionSheet from \"./STFInternalSelectionSheet\";\n\nexport interface FixAndFlipTermSheetProps {\n quote: FixAndFlipQuote;\n calculation: FixAndFlipCalculation;\n action: PdfGenerationActions;\n userProfile: SFUserProfile;\n metadata: QuoteMetadata;\n discussionArray: Comment[] | undefined;\n}\n\nconst FixAndFlipTermSheet = ({\n quote,\n calculation,\n action,\n userProfile,\n metadata,\n discussionArray,\n}: FixAndFlipTermSheetProps) => {\n const { exceptionPricingOverride } = quote;\n const { rateLLPAsFactored, feeLLPAsFactored, overridePricing, warnings } =\n calculation;\n\n const rateLLPAsArray = useMemo(\n () => bulletListToArray(rateLLPAsFactored),\n [rateLLPAsFactored]\n );\n\n const feeLLPAsArray = useMemo(\n () => bulletListToArray(feeLLPAsFactored),\n [feeLLPAsFactored]\n );\n\n const warningsArray = useMemo(() => {\n return warnings ? bulletListToArray(warnings) : undefined;\n }, [warnings]);\n\n const overrideArray = useMemo(() => {\n const overrides = bulletListToArray(overridePricing);\n if (exceptionPricingOverride) {\n for (const [key, value] of Object.entries(exceptionPricingOverride)) {\n if (value !== undefined) {\n if (key === \"exceptionType\") {\n overrides.unshift(`${overrideLabelMap[key]}: ${value}`);\n }\n }\n }\n\n if (overrides.length) {\n overrides.unshift(\n `Exception Status: ${metadata.exceptionStatus ?? \"Not Submitted\"}`\n );\n }\n return overrides;\n }\n }, [overridePricing, metadata.exceptionStatus, exceptionPricingOverride]);\n\n const flattenedQuoteCalculation: { [key: string]: any } = useMemo(() => {\n calculation[\"brokerFeePercentage\"] = quote.loanTerm?.brokerFee;\n return flattenObject({ quote, calculation }) || {};\n }, [quote, calculation]);\n\n const quoteDate = useMemo(() => {\n const date = new Date();\n return date.toLocaleDateString();\n }, []);\n\n return (\n \n \n {action === \"INTERNAL\" && (\n \n )}\n \n );\n};\n\nFont.register({\n family: \"Roboto\",\n fonts: [\n {\n src: roboto,\n },\n {\n src: robotoBold,\n fontWeight: 700,\n },\n ],\n});\n\nexport default FixAndFlipTermSheet;\n","import { pdf } from \"@react-pdf/renderer\";\nimport { saveAs } from \"file-saver\";\nimport RentalTermSheet from \"../components/quote-pdfs/rental-term-sheet-pdf\";\nimport RentalPremierTermSheet from \"../components/quote-pdfs/RentalPremierTermSheet\";\nimport FixAndFlipTermSheet from \"../components/quote-pdfs/stf-term-sheet-pdf\";\n\nconst getFileName = (filename, action) => {\n const date = new Date();\n const filenameArr = filename.split(\" \");\n\n filenameArr.push(date.toLocaleDateString().replaceAll(\"/\", \"-\"));\n\n if (action === \"INTERNAL\") {\n filenameArr.unshift(\"Internal\");\n }\n\n return filenameArr.join(\"_\");\n};\n\nexport const generateRentalPdf = async (\n documentData,\n filename,\n quoteType,\n discussionArray\n) => {\n if ((quoteType = \"Rental\")) {\n generateRentalTermPdf(documentData, filename, discussionArray);\n } else {\n generateRentalPremierTermPdf(documentData, filename);\n }\n};\n\nconst generateRentalTermPdf = async (\n documentData,\n filename,\n discussionArray\n) => {\n const { quote, calculation, scenarios, action, userProfile, metadata } =\n documentData;\n\n const blob = await pdf(\n \n ).toBlob();\n saveAs(blob, `${getFileName(filename, action)}.pdf`);\n};\n\nconst generateRentalPremierTermPdf = async (documentData, filename) => {\n const { quote, calculation, scenarios, action, userProfile } = documentData;\n\n const blob = await pdf(\n \n ).toBlob();\n saveAs(blob, `${getFileName(filename, action)}.pdf`);\n};\n\nexport const generateShortTermFinancePdf = async (\n documentData,\n filename,\n discussionArray\n) => {\n const { calculation, quote, action, userProfile, metadata } = documentData;\n\n const blob = await pdf(\n \n ).toBlob();\n saveAs(blob, `${getFileName(filename, action)}.pdf`);\n};\n","import React from \"react\";\nexport default function useConfirmation(action: any) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [isLoading, setIsLoading] = React.useState(false);\n\n const toPromise = React.useCallback(() => {\n return new Promise((resolve) => {\n resolve(action());\n });\n }, [action]);\n\n const toggleOpen = React.useCallback(\n (): void => setIsOpen((isOpen) => !isOpen),\n []\n );\n\n const performAction = React.useCallback(() => {\n setIsLoading(true);\n toPromise().then(() => {\n setIsLoading(false);\n });\n }, [toPromise]);\n\n return {\n dialogOpen: isOpen,\n loading: isLoading,\n toggleOpen,\n performAction,\n };\n}\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function AnnotationIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function ClockIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n","import React from \"react\";\nimport { Icon, IconProps } from \"@chakra-ui/icons\";\n\nfunction DotsHorizontalIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport default DotsHorizontalIcon;\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function ExclamationTriangleIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function UserIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n","import React from \"react\";\nimport { Badge, Box, Flex, Text } from \"@chakra-ui/react\";\nimport { ClockIcon } from \"../icons/ClockIcon.tsx\";\nimport { formatTimestampWithoutTimeZone } from \"../../lib/number-transforms\";\nimport { RateLock } from \"../../lib/models/rate-lock.model\";\n\nexport type FormRateLockStatusProps = {\n rateLock: RateLock;\n};\nfunction FormRateLockStatus({ rateLock }: FormRateLockStatusProps) {\n return (\n \n \n \n Rate Lock Status\n \n \n {rateLock?.rateLockActive ? (\n Active\n ) : (\n Expired\n )}\n \n \n {rateLock?.startDate &&\n rateLock?.customerEndDate &&\n `${formatTimestampWithoutTimeZone(\n rateLock.startDate\n )} - ${formatTimestampWithoutTimeZone(rateLock.customerEndDate)}`}\n \n \n );\n}\nexport default FormRateLockStatus;\n","import { Badge } from \"@chakra-ui/react\";\nimport React from \"react\";\n\nfunction FormSubmittedStatus({\n requiresResubmission,\n hasBeenSubmitted,\n}: {\n hasBeenSubmitted: boolean;\n requiresResubmission: boolean | undefined;\n}) {\n if (hasBeenSubmitted && !requiresResubmission) {\n return Submitted;\n } else if (hasBeenSubmitted && requiresResubmission) {\n return Requires resubmission;\n } else {\n return null;\n }\n}\n\nexport default FormSubmittedStatus;\n","import { ChevronDownIcon, ChevronUpIcon } from \"@chakra-ui/icons\";\nimport {\n Badge,\n Box,\n Button,\n Divider,\n Flex,\n Heading,\n IconButton,\n Menu,\n MenuButton,\n MenuDivider,\n MenuItem,\n MenuList,\n Text,\n useColorModeValue,\n VStack,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport moment from \"moment\";\nimport React from \"react\";\nimport useConfirmation from \"../../hooks/useConfirmation\";\nimport useQuote from \"../../hooks/useQuote\";\nimport useUser from \"../../hooks/useUser\";\nimport { darkMode, lightMode } from \"../../lib/models/color-mode-colors\";\nimport { formatDateLocal, formatDateTime } from \"../../lib/number-transforms\";\nimport { QuoteUtils } from \"../../lib/quote-utils\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { isElevatedUser } from \"../../lib/UserPermissions\";\nimport DeleteQuoteDialog from \"../DeleteQuoteDialog\";\nimport { AnnotationIcon } from \"../icons/AnnotationIcon\";\nimport { ClockIcon } from \"../icons/ClockIcon.tsx\";\nimport DotsHorizontalIcon from \"../icons/DotsHorizontalIcon\";\nimport { ExclamationTriangleIcon } from \"../icons/ExclamationTriangleIcon\";\nimport { UserIcon } from \"../icons/UserIcon\";\nimport FormRateLockStatus from \"./FormRateLockStatus\";\nimport FormSubmittedStatus from \"./FormSubmittedStatus\";\n\ninterface FormQuoteSummaryProps {\n handler: (action: QuoteFormActions, values: any) => void;\n}\n\nfunction FormQuoteSummary({ handler }: FormQuoteSummaryProps) {\n const [isOpen, setIsOpen] = React.useState(true);\n const quoteContext = useQuote();\n const { role } = useUser();\n const { state, fetchQuote, isOwned } = quoteContext;\n const { values, isValid, dirty } = useFormikContext();\n const { quote, metadata } = state;\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n const quoteHandler = (action: QuoteFormActions) => {\n handler(action, values);\n };\n const { dialogOpen, loading, toggleOpen, performAction } = useConfirmation(\n () => quoteHandler(\"DELETE\")\n );\n\n const milestone = metadata?.milestoneUpdatedAt\n ? moment(\n metadata?.milestoneUpdatedAt.replace(\" \", \"T\"),\n \"YYYY-MM-DD hh:mm:ss\"\n ).format(\"MM/DD/YY\")\n : undefined;\n\n const commonDisable =\n !isValid ||\n !state.hasCalculated ||\n state.hasCalculationErrors ||\n state.requiresQuoteResubmission ||\n state.hasFormErrors;\n\n return (\n \n \n \n Quote Summary\n\n {!state.isNewQuote && (\n \n }\n width={1}\n size={\"sm\"}\n display={{ base: \"none\", lg: \"block\" }}\n >\n \n fetchQuote()}\n >\n Reload Quote\n \n quoteHandler(\"SAVE_AS\")}\n >\n Copy Quote\n \n {(isOwned || isElevatedUser(role)) && (\n <>\n \n toggleOpen()}\n >\n Delete Quote\n \n \n )}\n \n \n )}\n\n \n ) : (\n \n )\n }\n onClick={() => setIsOpen(!isOpen)}\n variant=\"unstyled\"\n size=\"sm\"\n >\n {isOpen ? \"Collapse\" : \"Expand\"}\n \n \n\n {isOpen && (\n <>\n \n \n \n {state.quoteType && (\n \n \n \n Quote Type\n \n \n {QuoteUtils.PrettyPrintQuoteType(state.quoteType)}\n \n \n )}\n\n {values.username && state.username !== quote?.username && (\n \n \n \n Owned By\n \n \n {quote?.username}\n \n \n )}\n\n {state.metadata?.createdDate && (\n \n \n \n Date Created\n \n \n {formatDateLocal(state.metadata.createdDate)}\n \n \n )}\n\n {state.metadata?.updatedDate && (\n \n \n \n Last Updated\n \n \n {formatDateTime(state.metadata.updatedDate)}\n \n \n )}\n\n {state.metadata?.exceptionStatus && (\n \n \n \n Exception Status\n \n \n {state.metadata?.exceptionStatus}\n \n \n )}\n\n {state.hasQuoteBeenSubmitted && (\n \n \n \n Submission Status\n \n \n \n )}\n\n {metadata?.rateLock?.rateLockActive && (\n \n )}\n\n {metadata?.milestone && (\n \n \n Milestone\n \n {metadata?.milestone}\n \n )}\n\n {metadata?.milestoneUpdatedAt && (\n \n \n \n Milestone Last Updated\n \n \n {milestone}\n \n \n )}\n \n \n \n )}\n \n );\n}\n\nexport default FormQuoteSummary;\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function BriefcaseIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function BuildingIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n","import { Button } from \"@chakra-ui/button\";\nimport { useDisclosure } from \"@chakra-ui/hooks\";\nimport { Box, Flex, Text } from \"@chakra-ui/layout\";\nimport {\n Popover,\n PopoverArrow,\n PopoverCloseButton,\n PopoverContent,\n PopoverTrigger,\n} from \"@chakra-ui/popover\";\nimport { Portal } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { SalesforceApi } from \"../../api/SalesforceApi\";\nimport useUser from \"../../hooks/useUser\";\nimport { SFDeal } from \"../../lib/models/sf-deal.model\";\nimport { SelectItem } from \"../../lib/types/SelectItem\";\nimport ComboBox from \"../form-fields/ComboBox/index\";\nimport { BriefcaseIcon } from \"../icons/BriefcaseIcon\";\nimport { BuildingIcon } from \"../icons/BuildingIcon\";\nimport ShowForRole from \"../ShowForRole\";\nimport WarningDialog from \"../WarningDialog\";\n\nconst findAccountById = async (\n accountid: string\n): Promise => {\n const account = (await SalesforceApi.getAccountById(accountid)).data;\n\n if (!!Object.keys(account).length) {\n return {\n label: account.name,\n value: account.accountid,\n };\n } else {\n return null;\n }\n};\n\nconst searchAccountsByQuery = async (\n query: string\n): Promise> => {\n const data = await SalesforceApi.getAccountsByQuery(query);\n return data.data.map((account) => ({\n label: account.name,\n value: account.accountid,\n }));\n};\n\nexport interface FormSfAccountDealSelectorProps {\n onAccountDealUpdate: (\n accountId: string,\n dealId: string,\n campaignId: string,\n campaignName: string,\n campaignExpirationDate: string,\n campaignIncentive: string,\n campaignCode: string\n ) => void;\n accountId: string | undefined;\n dealId: string | undefined;\n hasSubmitted: boolean;\n isSubmitting: boolean;\n campaignId: string | undefined;\n}\n\nfunction FormSfAccountDealSelector(props: FormSfAccountDealSelectorProps) {\n const userContext = useUser();\n const {\n onAccountDealUpdate,\n accountId,\n dealId,\n hasSubmitted,\n isSubmitting,\n campaignId,\n } = props;\n const [dealsLoading, setDealsLoading] = React.useState(false);\n const [hasSelected, setHasSelected] = React.useState(false);\n const _isMounted = React.useRef(true);\n\n const {\n isOpen: isAccountPopoverOpen,\n onClose: onAccountPopoverClose,\n onOpen: onAccountPopoverOpen,\n } = useDisclosure();\n\n const {\n isOpen: isDealPopoverOpen,\n onClose: onDealPopoverClose,\n onOpen: onDealPopoverOpen,\n } = useDisclosure();\n\n const [isChangedSfDialogOpen, setIsChangedSfDialogOpen] =\n React.useState(false);\n\n const [hasDialogBeenShown, setHasDialogBeenShown] = React.useState(false);\n\n const [sfDeals, setSfDeals] = React.useState([]);\n\n const sfAccountsItems: SelectItem[] = React.useMemo(() => {\n return userContext.sfAccounts.map((account) => ({\n label: account.name,\n value: account.accountid,\n }));\n }, [userContext.sfAccounts]);\n\n const sfDealsItems: SelectItem[] = React.useMemo(() => {\n return sfDeals.map((deal) => ({\n label: deal.dealname,\n value: deal.dealid,\n }));\n }, [sfDeals]);\n\n const sfCampaignItems: SelectItem[] = React.useMemo(() => {\n return sfDeals.map((deal) => ({\n label: deal.campaignName,\n value: deal.campaignId,\n }));\n }, [sfDeals]);\n\n const [selectedSfAccount, setSelectedSfAccount] =\n React.useState(\n sfAccountsItems.find((item) => item.value === accountId) ?? null\n );\n\n const [selectedSfDeal, setSelectedSfDeal] = React.useState(\n sfDealsItems.find((item) => item.value === dealId) ?? null\n );\n\n const [selectedSfCampaign, setSelectedSfCampaign] =\n React.useState(\n sfCampaignItems.find((item) => item.value === campaignId) ?? null\n );\n\n const fetchDeals = React.useCallback(async (accountId: any) => {\n const res = await SalesforceApi.getDeals(accountId);\n const deals = res.data;\n\n if (_isMounted.current) {\n setSfDeals(deals);\n setDealsLoading(false);\n }\n }, []);\n\n const handleAccountSelect = (account: SelectItem | null) => {\n setHasSelected(true);\n setSelectedSfAccount(account);\n setSelectedSfDeal(null);\n setSelectedSfCampaign(null);\n onAccountPopoverClose();\n };\n\n const handleDealSelect = (deal: SelectItem | null) => {\n setHasSelected(true);\n setSelectedSfDeal(deal);\n setSelectedSfCampaign(\n sfCampaignItems.find(\n (item) =>\n item.value ===\n sfDeals.find((sfDeal) => sfDeal.dealid === deal?.value)?.campaignId\n ) ?? null\n );\n onDealPopoverClose();\n };\n\n const handleWarningDialogClose = () => {\n const account = sfAccountsItems.find((x) => x.value === accountId);\n const deal = sfDealsItems.find((x) => x.value === dealId);\n const campaign =\n sfCampaignItems.find(\n (item) =>\n item.value ===\n sfDeals.find((sfDeal) => sfDeal.dealid === deal?.value)?.campaignId\n ) ?? null;\n\n if (account && deal) {\n setSelectedSfAccount(account);\n setSelectedSfDeal(deal);\n setSelectedSfCampaign(campaign);\n setIsChangedSfDialogOpen(false);\n }\n };\n\n const handleWarningDialogConfirm = () => {\n const selectedSfDealValues = sfDeals.find(\n (item) => item.dealid === selectedSfDeal?.value\n );\n\n onAccountDealUpdate(\n selectedSfAccount?.value as string,\n selectedSfDeal?.value as string,\n selectedSfCampaign?.value as string,\n selectedSfDealValues?.campaignName as string,\n selectedSfDealValues?.campaignExpirationDate as string,\n selectedSfDealValues?.campaignIncentive as string,\n selectedSfDealValues?.campaignCode as string\n );\n setIsChangedSfDialogOpen(false);\n };\n\n const haveSfValuesChanged = React.useCallback(\n (\n incomingAccountId: string,\n incomingDealId: string,\n incomingCampaignId: string\n ) => {\n if (!hasSubmitted) return false;\n\n const origAccountId = accountId;\n const origDealId = dealId;\n const origCampaignId = campaignId;\n\n if (origCampaignId !== incomingCampaignId) {\n return origCampaignId !== incomingCampaignId;\n }\n\n if (origAccountId && origDealId) {\n return (\n origAccountId !== incomingAccountId || origDealId !== incomingDealId\n );\n }\n\n return false;\n },\n [accountId, dealId, campaignId, hasSubmitted]\n );\n\n React.useEffect(() => {\n if (!hasSelected || isSubmitting) return;\n\n const selectedDeal = selectedSfDeal?.value as string;\n const selectedAccount = selectedSfAccount?.value as string;\n const selectedCampaign = selectedSfCampaign?.value as string;\n const selectedSfDealValues = sfDeals.find(\n (item) => item.dealid === selectedSfDeal?.value\n );\n\n if (\n !hasDialogBeenShown &&\n haveSfValuesChanged(selectedAccount, selectedDeal, selectedCampaign)\n ) {\n setIsChangedSfDialogOpen(true);\n setHasDialogBeenShown(true);\n } else {\n onAccountDealUpdate(\n selectedAccount,\n selectedDeal,\n selectedCampaign,\n selectedSfDealValues?.campaignName as string,\n selectedSfDealValues?.campaignExpirationDate as string,\n selectedSfDealValues?.campaignIncentive as string,\n selectedSfDealValues?.campaignCode as string\n );\n }\n }, [\n hasSelected,\n selectedSfAccount,\n selectedSfDeal,\n selectedSfCampaign,\n onAccountDealUpdate,\n haveSfValuesChanged,\n hasDialogBeenShown,\n isSubmitting,\n sfDeals,\n ]);\n\n React.useEffect(() => {\n if (selectedSfAccount) {\n setDealsLoading(true);\n fetchDeals(selectedSfAccount.value).catch((e) => {\n setDealsLoading(false);\n });\n }\n }, [selectedSfAccount, fetchDeals]);\n\n React.useEffect(() => {\n return () => {\n _isMounted.current = false;\n };\n }, []);\n\n React.useEffect(() => {\n if (!accountId) return;\n\n const accountFromCache = sfAccountsItems.find((x) => x.value === accountId);\n\n if (accountFromCache) {\n setSelectedSfAccount(accountFromCache);\n return;\n }\n\n findAccountById(accountId).then((account) => {\n account && setSelectedSfAccount(account);\n });\n }, [accountId, sfAccountsItems]);\n\n React.useEffect(() => {\n if (accountId) {\n setSelectedSfDeal(sfDealsItems.find((x) => x.value === dealId) ?? null);\n }\n }, [sfDealsItems, dealId, accountId]);\n\n React.useEffect(() => {\n if (dealId && sfCampaignItems && sfDeals) {\n setSelectedSfCampaign(\n sfCampaignItems.find(\n (item) =>\n item.value ===\n sfDeals.find((sfDeal) => sfDeal.dealid === dealId)?.campaignId\n ) ?? null\n );\n }\n }, [setSelectedSfCampaign, dealId, sfCampaignItems, sfDeals]);\n\n return (\n <>\n \n \n \n Account Name\n \n\n \n \n \n \n {selectedSfAccount\n ? selectedSfAccount.label\n : \"Select to link an account\"}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n Deal Name\n \n\n {dealsLoading ? (\n \n ) : (\n \n \n \n \n {selectedSfDeal\n ? selectedSfDeal.label\n : \"Select to link a deal\"}\n \n \n \n \n \n \n \n \n \n \n \n )}\n \n\n {selectedSfCampaign?.label && (\n \n \n \n Campaign Name\n \n\n \n \n {selectedSfCampaign?.label ?? undefined}\n \n \n \n )}\n\n \n \n );\n}\n\nexport default FormSfAccountDealSelector;\n","import React from \"react\";\nimport { Icon, IconProps } from \"@chakra-ui/icons\";\n\nfunction DotsVerticalIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport default DotsVerticalIcon;\n","import {\n Button,\n ButtonGroup,\n IconButton,\n Menu,\n MenuButton,\n MenuItem,\n MenuList,\n useToast,\n useColorModeValue,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React, { useCallback, useState } from \"react\";\nimport { QuoteApi } from \"../../api/QuoteApi\";\nimport useQuote from \"../../hooks/useQuote\";\nimport { UserRole } from \"../../lib/models/enums\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { isElevatedUser } from \"../../lib/UserPermissions\";\nimport DotsVerticalIcon from \"../icons/DotsVerticalIcon\";\nimport ShowForRole from \"../ShowForRole\";\nimport WarningDialog from \"../WarningDialog\";\n\nexport type FormSubmitButtonProps = {\n handler: (action: QuoteFormActions, values: any) => void;\n role: UserRole | null;\n};\n\nfunction FormSubmitButton({ handler, role }: FormSubmitButtonProps) {\n const quoteContext = useQuote();\n const { values, isValid } = useFormikContext();\n const { state, isOwned, quoteId } = quoteContext;\n const { sfIntegration, isSubmitting, metadata } = state;\n const [isSubmitDialogOpen, setIsSubmitDialogOpen] = useState(false);\n const toast = useToast();\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n\n const quoteHandler = useCallback(\n (action: QuoteFormActions) => {\n handler(action, values);\n },\n [handler, values]\n );\n\n const canSubmitQuote = React.useMemo(() => {\n return sfIntegration?.sfaccountid && sfIntegration?.sfdealid;\n }, [sfIntegration]);\n\n const commonDisable =\n state.isNewQuote ||\n !isValid ||\n !state.hasCalculated ||\n state.hasCalculationErrors ||\n state.hasFormErrors;\n\n const disableSubmit = commonDisable || !canSubmitQuote;\n\n const handleSalesFinalizedClick = () => {\n setIsSubmitDialogOpen(true);\n };\n const handleConfirm = () => {\n setIsSubmitDialogOpen(!isSubmitDialogOpen);\n handleSubmitSalesFinalized();\n };\n\n const handleWarningDialogClose = () => {\n setIsSubmitDialogOpen(false);\n };\n\n const handleSubmitSalesFinalized = useCallback(() => {\n if (!quoteId) return;\n\n QuoteApi.submitSalesFinalized(quoteId)\n .then((res) => {\n if (res.data) {\n toast({\n title: \"Quote is Sales Finalized\",\n description: \"The quote has been sales finalized.\",\n status: \"success\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n }\n })\n .catch((err) => {\n toast({\n title: \"Quote Not Finalized\",\n description:\n \"An error has occurred when attempting to finalize your quote.\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .finally(() => quoteHandler(\"SAVE\"));\n }, [quoteId, quoteHandler, toast, toastVariant]);\n\n return (\n <>\n \n \n \n quoteHandler(\"SUBMIT\")}\n isLoading={isSubmitting}\n loadingText=\"Submitting...\"\n isDisabled={\n disableSubmit ||\n metadata?.underwriterStatus === \"Sales Finalized\" ||\n metadata?.underwriterStatus === \"Final\" ||\n !(isOwned || isElevatedUser(role))\n }\n >\n {state.requiresQuoteResubmission\n ? \"Resubmit Quote\"\n : \"Submit Quote\"}\n \n {state.hasQuoteBeenSubmitted && (\n }\n borderLeft=\"1px\"\n borderLeftColor=\"gray.400\"\n isDisabled={\n disableSubmit ||\n metadata?.underwriterStatus === \"Sales Finalized\" ||\n metadata?.underwriterStatus === \"Final\" ||\n !(isOwned || isElevatedUser(role))\n }\n />\n )}\n \n\n \n handleSalesFinalizedClick()}>\n Sales Finalized\n \n \n \n \n \n quoteHandler(\"SUBMIT_FOR_REVIEW\")}\n isLoading={isSubmitting}\n loadingText=\"Submitting...\"\n isDisabled={\n commonDisable ||\n !isOwned ||\n metadata?.underwriterStatus !== \"Not Submitted\"\n }\n marginTop={2}\n >\n {state.requiresQuoteResubmission\n ? \"Resubmit For Review\"\n : \"Submit For Review\"}\n \n \n handleConfirm()}\n onCloseHandler={handleWarningDialogClose}\n />\n \n );\n}\n\nexport default FormSubmitButton;\n","import { ChevronDownIcon, ChevronUpIcon } from \"@chakra-ui/icons\";\nimport {\n Box,\n Button,\n Divider,\n Flex,\n Heading,\n useColorModeValue,\n VStack,\n} from \"@chakra-ui/react\";\nimport React from \"react\";\nimport useQuote from \"../../hooks/useQuote\";\nimport useUser from \"../../hooks/useUser\";\nimport { darkMode, lightMode } from \"../../lib/models/color-mode-colors\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport FormSfAccountDealSelector from \"./FormSfAccountDealSelector\";\nimport FormSubmitButton from \"./FormSubmitButton\";\n\ninterface FormSfActionsProps {\n handler: (action: QuoteFormActions, values: any) => void;\n}\n\nfunction FormSfActions({ handler }: FormSfActionsProps) {\n const [isOpen, setIsOpen] = React.useState(true);\n const quoteContext = useQuote();\n const { role, isEmployee } = useUser();\n const { state, dispatch } = quoteContext;\n const { isSubmitting, hasQuoteBeenSubmitted } = state;\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n\n const handleAccountDealUpdate = React.useCallback(\n (\n accountId: string,\n dealId: string,\n campaignId: string,\n campaignName: string,\n campaignExpirationDate: string,\n campaignIncentive: string,\n campaignCode: string\n ) => {\n dispatch({\n type: \"QUOTE_SF_INFO_UPDATE\",\n payload: {\n sfaccountid: accountId,\n sfdealid: dealId,\n campaignId: campaignId,\n campaignName: campaignName,\n campaignExpirationDate: campaignExpirationDate,\n campaignIncentive: campaignIncentive,\n campaignCode: campaignCode,\n },\n });\n },\n [dispatch]\n );\n\n return (\n \n \n Submit Actions\n \n ) : (\n \n )\n }\n onClick={() => setIsOpen(!isOpen)}\n variant=\"unstyled\"\n size=\"sm\"\n >\n {isOpen ? \"Collapse\" : \"Expand\"}\n \n \n\n {isOpen && (\n <>\n \n \n \n {isEmployee && (\n \n )}\n \n \n \n \n \n \n )}\n \n );\n}\n\nexport default FormSfActions;\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function InfoCircleOutline(props: IconProps) {\n return (\n \n \n \n );\n}\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function TimesCircleOutline(props: IconProps) {\n return (\n \n \n \n );\n}\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function WarningTriangleOutline(props: IconProps) {\n return (\n \n \n \n );\n}\n","import React, { useEffect } from \"react\";\n\nfunction useFormCalculationWarnings(\n validationWarnings: string | Array\n) {\n const [state, setState] = React.useState>([]);\n\n const getSeparatingIcon = (warning: string): string => {\n if (warning.includes(\"●\")) return \"●\";\n else if (warning.includes(\"•\")) return \"•\";\n else return \"●\";\n };\n\n useEffect(() => {\n if (!validationWarnings) return;\n\n if (typeof validationWarnings === \"string\") {\n const warnings = validationWarnings\n .split(getSeparatingIcon(validationWarnings))\n .map((x) => x.trim())\n .filter((x) => x);\n\n setState(warnings);\n } else {\n setState(validationWarnings);\n }\n }, [validationWarnings]);\n\n return state;\n}\n\nexport default useFormCalculationWarnings;\n","export type StatusColors =\n | \"red\"\n | \"brand\"\n | \"yellow\"\n | \"redDark\"\n | \"yellowDark\"\n | \"brandDark\";\n\nexport type FormStatusColors = {\n [color in StatusColors]: {\n backgroundColor: string;\n textColor: string;\n };\n};\n\nexport const FormStatusColorMap: FormStatusColors = {\n red: {\n backgroundColor: \"#FFF5F5\",\n textColor: \"#C53030\",\n },\n yellow: {\n backgroundColor: \"#FFFFF0\",\n textColor: \"#B7791F\",\n },\n brand: {\n backgroundColor: \"#f2f6fa\",\n textColor: \"#015498\",\n },\n redDark: {\n backgroundColor: \"#0f172a\",\n textColor: \"#F56565\",\n },\n yellowDark: {\n backgroundColor: \"#0f172a\",\n textColor: \"#e2ab20\",\n },\n brandDark: {\n backgroundColor: \"#0f172a\",\n textColor: \"#7ABEF5\",\n },\n};\n","import { Button } from \"@chakra-ui/button\";\nimport { useDisclosure } from \"@chakra-ui/hooks\";\nimport { ChevronDownIcon, ChevronUpIcon } from \"@chakra-ui/icons\";\nimport { Collapse } from \"@chakra-ui/transition\";\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\nimport useFormCalculationWarnings from \"../../hooks/useFormCalculationWarnings\";\nimport {\n FormStatusColorMap,\n StatusColors,\n} from \"../../lib/models/form-status-colors\";\n\nexport interface FormCalcStatusListProps {\n label: string;\n icon?: JSX.Element;\n items: string | Array | undefined;\n colorScheme: StatusColors;\n}\n\nfunction FormCalcStatusList(props: FormCalcStatusListProps) {\n const { label, icon, items, colorScheme } = props;\n const infoList = useFormCalculationWarnings(items ?? \"\");\n const { isOpen, onToggle } = useDisclosure();\n\n const colors = React.useMemo(() => {\n return FormStatusColorMap[colorScheme];\n }, [colorScheme]);\n\n if (!items || items.length < 1) return null;\n\n return (\n \n \n ) : (\n \n )\n }\n onClick={onToggle}\n fontSize=\"sm\"\n width=\"full\"\n >\n {infoList.length} {label}\n \n\n \n
    \n {infoList.map((item, index) => (\n
  • {item}
  • \n ))}\n
\n
\n \n );\n}\n\nexport default FormCalcStatusList;\n\nconst WarningContent = styled.div(\n (props: { textColor: string; backgroundColor: string }) => ({\n padding: \"var(--chakra-space-1) var(--chakra-space-4)\",\n backgroundColor: props.backgroundColor,\n color: props.textColor,\n width: \"100%\",\n borderRadius: \"var(--chakra-radii-md)\",\n\n ul: {\n marginTop: \"var(--chakra-space-2)\",\n marginLeft: \"var(--chakra-space-6)\",\n },\n\n li: {\n fontSize: \"var(--chakra-fontSizes-sm)\",\n padding: \"var(--chakra-space-1) 0\",\n },\n })\n);\n","import { Button } from \"@chakra-ui/button\";\nimport { ChevronDownIcon, ChevronUpIcon } from \"@chakra-ui/icons\";\nimport { Box, Divider, Flex, Heading, Text, VStack } from \"@chakra-ui/layout\";\nimport { useMediaQuery } from \"@chakra-ui/media-query\";\nimport { useColorMode, useColorModeValue } from \"@chakra-ui/react\";\nimport { default as React, useCallback } from \"react\";\nimport useQuote from \"../../hooks/useQuote\";\nimport { darkMode, lightMode } from \"../../lib/models/color-mode-colors\";\nimport { RentalCalculation } from \"../../lib/models/rental/rental-calculation.model\";\nimport { formatDateLocal } from \"../../lib/number-transforms\";\nimport { InfoCircleOutline } from \"../icons/InfoCircleOutline\";\nimport { TimesCircleOutline } from \"../icons/TimesCircleOutline\";\nimport { WarningTriangleOutline } from \"../icons/WarningTriangleOutline\";\nimport FormCalcStatusList from \"./FormCalcStatusList\";\n\nfunction FormCalcSummary() {\n const quoteContext = useQuote();\n const { state } = quoteContext;\n const { calculationWarnings, metadata, quoteType, quoteCalculation } = state;\n const [isOpen, setIsOpen] = React.useState(false);\n const [isLargerThan1000] = useMediaQuery(\"(min-width: 992px)\");\n const { colorMode } = useColorMode();\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n\n const hasWarnings = useCallback(() => {\n return calculationWarnings && Object.keys(calculationWarnings).length > 0;\n }, [calculationWarnings]);\n\n React.useEffect(() => {\n isLargerThan1000 ? setIsOpen(true) : setIsOpen(false);\n }, [isLargerThan1000]);\n\n return (\n \n \n Calculation Summary\n \n ) : (\n \n )\n }\n onClick={() => setIsOpen(!isOpen)}\n variant=\"unstyled\"\n size=\"sm\"\n >\n {isOpen ? \"Collapse\" : \"Expand\"}\n \n \n\n {isOpen && (\n <>\n <>\n {hasWarnings() && }\n\n \n }\n items={calculationWarnings?.calculation}\n colorScheme={colorMode === \"light\" ? \"red\" : \"redDark\"}\n />\n\n }\n items={calculationWarnings?.overridePricing}\n colorScheme={colorMode === \"light\" ? \"yellow\" : \"yellowDark\"}\n />\n\n }\n items={calculationWarnings?.warnings}\n colorScheme={colorMode === \"light\" ? \"yellow\" : \"yellowDark\"}\n />\n }\n items={calculationWarnings?.feeLLPAsFactored}\n colorScheme={colorMode === \"light\" ? \"brand\" : \"brandDark\"}\n />\n }\n items={calculationWarnings?.rateLLPAsFactored}\n colorScheme={colorMode === \"light\" ? \"brand\" : \"brandDark\"}\n />\n }\n items={\n quoteType === \"Rental\"\n ? (quoteCalculation as RentalCalculation).scenarios[0]\n .pricingInfo\n : quoteCalculation?.pricingInfo\n }\n colorScheme={colorMode === \"light\" ? \"brand\" : \"brandDark\"}\n />\n \n\n {hasWarnings() && metadata && (\n \n )}\n \n\n {quoteCalculation && metadata && (\n \n Rates and Terms updated{\" \"}\n \n {formatDateLocal(metadata.pricingLastUpdated)}\n \n \n )}\n \n )}\n \n );\n}\n\nexport default FormCalcSummary;\n","import { VStack } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport FormQuoteSummary from \"../common-quote/FormQuoteSummary\";\nimport FormSfActions from \"../common-quote/FormSfActions\";\nimport FormCalcSummary from \"../common-quote/FormCalcSummary\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { CalculationType } from \"../../state/quote-reducer\";\n\nexport interface QuoteSummaryBarProps {\n formActionHandler: (action: QuoteFormActions, formValues: any) => void;\n calculation: CalculationType;\n}\n\nconst QuoteSummaryBar = (props: QuoteSummaryBarProps) => {\n return (\n \n \n \n {props.calculation && }\n \n );\n};\n\nexport default QuoteSummaryBar;\n","import {\n Button,\n FormControl,\n FormLabel,\n Input,\n Modal,\n ModalBody,\n ModalCloseButton,\n ModalContent,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React from \"react\";\nimport useQuote from \"../../hooks/useQuote\";\nimport { FixAndFlipForm } from \"../../lib/models/short-term/short-term-form.model\";\nimport {\n RentalForm,\n RentalPremierForm,\n} from \"../../lib/models/rental/rental-form.model\";\n\nexport interface SaveAsQuoteDialogProps {\n isOpen: boolean;\n onOpen?: () => void;\n onClose: () => void;\n onSaveClick: (\n values: FixAndFlipForm | RentalForm | RentalPremierForm\n ) => void;\n}\n\nfunction SaveAsQuoteDialog(props: SaveAsQuoteDialogProps) {\n const { isOpen, onClose, onSaveClick } = props;\n const { values } = useFormikContext<\n FixAndFlipForm | RentalForm | RentalPremierForm\n >();\n const { state } = useQuote();\n\n const initialName = `Copy of ${values.quoteName}`;\n const [newQuoteName, setNewQuoteName] = React.useState(initialName);\n\n const handleSaveClick = () => {\n const copyOfValues = Object.assign({}, values);\n copyOfValues.quoteName = newQuoteName;\n copyOfValues.username = state.username;\n\n onSaveClick && onSaveClick(copyOfValues);\n };\n\n return (\n \n \n \n Save Quote As\n \n \n \n Quote Name\n {\n setNewQuoteName(e.target.value);\n }}\n value={newQuoteName}\n placeholder={initialName}\n />\n \n \n\n \n \n Save\n \n \n \n \n \n );\n}\n\nexport default SaveAsQuoteDialog;\n","import { IconButton, IconButtonProps } from \"@chakra-ui/button\";\nimport { ArrowUpIcon } from \"@chakra-ui/icons\";\nimport React from \"react\";\n\nexport const MobileTopButton = React.forwardRef(\n (props: IconButtonProps, ref: React.Ref) => {\n const scrollToTop = () => {\n //get element with id of 'main-container' and scroll to top of that container\n const mainContainer = document.getElementById(\"main-container\");\n mainContainer?.scrollTo({ top: 0, behavior: \"smooth\" });\n };\n\n return (\n scrollToTop()}\n ref={ref}\n display={{ base: \"flex\", lg: \"none\" }}\n fontSize=\"24px\"\n variant=\"ghost\"\n position=\"fixed\"\n bottom={3}\n right={3}\n zIndex={100}\n icon={}\n backgroundColor=\"brand.500\"\n _hover={{ backgroundColor: \"brand.400\" }}\n _active={{ backgroundColor: \"brand.500\" }}\n color=\"white\"\n borderRadius=\"50%\"\n height={14}\n width={14}\n {...props}\n />\n );\n }\n);\n","import React from \"react\";\nimport QuoteSummaryBar from \"./QuoteSummaryBar\";\nimport SaveAsQuoteDialog from \"../common-quote/SaveAsQuoteDialog\";\nimport { MobileTopButton } from \"../MobileTopButton\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { FixAndFlipForm } from \"../../lib/models/short-term/short-term-form.model\";\nimport { CalculationType } from \"../../state/quote-reducer\";\nimport {\n RentalForm,\n RentalPremierForm,\n} from \"../../lib/models/rental/rental-form.model\";\n\nexport interface QuoteBoxBottomProps {\n formActionHandler: (action: QuoteFormActions, values: FixAndFlipForm) => void;\n calculation: CalculationType;\n onSaveClick: (\n values: FixAndFlipForm | RentalForm | RentalPremierForm\n ) => void;\n isOpen: boolean;\n onClose: () => void;\n}\n\nconst QuoteBoxBottom = (props: QuoteBoxBottomProps) => {\n return (\n <>\n \n\n \n\n \n \n );\n};\n\nexport default QuoteBoxBottom;\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function Calculator(props: IconProps) {\n return (\n \n \n \n );\n}\n","import React from \"react\";\nimport { Icon, IconProps } from \"@chakra-ui/icons\";\n\nfunction DocumentReportIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport default DocumentReportIcon;\n","import { CheckCircleIcon } from \"@chakra-ui/icons\";\nimport { Box, Flex, Heading, Text } from \"@chakra-ui/layout\";\nimport {\n Alert,\n Button,\n ButtonGroup,\n IconButton,\n Menu,\n MenuButton,\n MenuItem,\n MenuList,\n useColorMode,\n useColorModeValue,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React, { useCallback, useState } from \"react\";\nimport useConfirmation from \"../../hooks/useConfirmation\";\nimport useQuote from \"../../hooks/useQuote\";\nimport useUser from \"../../hooks/useUser\";\nimport { darkMode, lightMode } from \"../../lib/models/color-mode-colors\";\nimport { FormStatusColorMap } from \"../../lib/models/form-status-colors\";\nimport { FixAndFlipQuote } from \"../../lib/models/short-term/short-term.model\";\nimport { PdfGenerationActions } from \"../../lib/types/PDFGenerationActions\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { isElevatedUser } from \"../../lib/UserPermissions\";\nimport DeleteQuoteDialog from \"../DeleteQuoteDialog\";\nimport { Calculator } from \"../icons/Calculator\";\nimport DocumentReportIcon from \"../icons/DocumentReportIcon\";\nimport DotsVerticalIcon from \"../icons/DotsVerticalIcon\";\nimport { WarningTriangleOutline } from \"../icons/WarningTriangleOutline\";\nimport ShowForRole from \"../ShowForRole\";\n\nexport type FormHeadingProps = {\n label: string;\n handler: (action: QuoteFormActions, values: any) => void;\n exportHandler: (action: PdfGenerationActions, values: any) => void;\n generatingPdf?: boolean;\n calculating?: boolean;\n children?: any;\n};\n\nfunction FormHeading({\n label,\n children,\n calculating,\n generatingPdf,\n handler,\n exportHandler,\n}: FormHeadingProps) {\n const quoteContext = useQuote();\n const { role } = useUser();\n const { values, dirty, isValid, touched, setFieldValue } =\n useFormikContext();\n const quoteHandler = useCallback(\n (action: QuoteFormActions) => {\n handler(action, values);\n },\n [handler, values]\n );\n const { dialogOpen, loading, toggleOpen, performAction } = useConfirmation(\n () => quoteHandler(\"DELETE\")\n );\n const { state, dispatch, isOwned } = quoteContext;\n const { metadata, quote } = state;\n const { yellow, brand, yellowDark, brandDark } = FormStatusColorMap;\n const { colorMode } = useColorMode();\n const [touchedLength, setTouchedLength] = useState(0);\n\n const numberOfTouchedFields = Object.keys(touched).length;\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n\n const resetCalculationStatus = React.useCallback(() => {\n dispatch({\n type: \"QUOTE_CALCULATION_RESET\",\n });\n }, [dispatch]);\n\n const updateFormStatus = React.useCallback(\n (dirty: boolean) => {\n dispatch({\n type: \"QUOTE_STATUS_UPDATED\",\n payload: dirty,\n });\n },\n [dispatch]\n );\n\n const calcQuote = () => {\n setTouchedLength(numberOfTouchedFields);\n quoteHandler(\"CALCULATE\");\n if (quote?.quoteType === \"STF\") {\n const stfQuote = quote as FixAndFlipQuote;\n setFieldValue(\"borrowerTier\", stfQuote.borrowerInfo?.borrowerTier);\n }\n };\n\n const handleGeneratePdfClick = (action: PdfGenerationActions) => {\n exportHandler(action, values);\n };\n\n const commonDisable =\n !isValid ||\n !state.hasCalculated ||\n state.hasCalculationErrors ||\n state.requiresQuoteResubmission ||\n state.hasFormErrors;\n\n const disablePdf = () => {\n if (state.quoteType === \"Rental\")\n return (\n !state.rentalQuoteScenarios.some((x) => x.included === \"Yes\") ||\n commonDisable ||\n state.isNewQuote ||\n dirty\n );\n return commonDisable || state.isNewQuote || dirty;\n };\n\n React.useEffect(() => {\n updateFormStatus(dirty);\n }, [dirty, updateFormStatus]);\n\n React.useEffect(() => {\n if (dirty) {\n resetCalculationStatus();\n }\n if (touchedLength !== numberOfTouchedFields) {\n resetCalculationStatus();\n }\n }, [dirty, resetCalculationStatus, numberOfTouchedFields, touchedLength]);\n\n return (\n \n \n \n \n \n \n {label}\n \n \n }\n onClick={() => calcQuote()}\n isDisabled={!isValid || state.hasFormErrors}\n isLoading={calculating}\n loadingText=\"Calculating..\"\n mr={4}\n >\n \n Calculate\n \n \n\n \n }\n isLoading={generatingPdf}\n onClick={() => {\n role !== \"External\"\n ? handleGeneratePdfClick(\"CUSTOMER\")\n : handleGeneratePdfClick(\"WHITELABEL\");\n }}\n loadingText=\"Generating..\"\n variant=\"solid\"\n isDisabled={disablePdf()}\n mr={4}\n >\n \n Generate PDF\n \n \n \n\n \n \n \n \n }\n isLoading={generatingPdf}\n onClick={() => {\n role !== \"External\"\n ? handleGeneratePdfClick(\"CUSTOMER\")\n : handleGeneratePdfClick(\"WHITELABEL\");\n }}\n loadingText=\"Generating..\"\n variant=\"solid\"\n isDisabled={disablePdf()}\n >\n \n Generate PDF\n \n \n }\n isDisabled={disablePdf() || generatingPdf}\n mr={4}\n borderLeft=\"1px\"\n borderLeftColor=\"gray.300\"\n />\n \n\n \n handleGeneratePdfClick(\"CUSTOMER\")}\n >\n Customer PDF\n \n\n handleGeneratePdfClick(\"INTERNAL\")}\n >\n Internal PDF\n \n\n handleGeneratePdfClick(\"WHITELABEL\")}\n >\n Whitelabel PDF\n \n \n \n \n\n \n quoteHandler(\"SAVE\")}\n >\n Save Quote\n \n \n \n \n \n {!isOwned && !isElevatedUser(role) && (\n \n \n \n This quote is read-only. You are not the owner, any changes you\n make will not be saved.\n \n \n )}\n {(metadata?.underwriterStatus === \"Sales Finalized\" ||\n metadata?.underwriterStatus === \"Final\") && (\n \n \n \n This quote is read-only. The underwriting process has been\n completed, any changes you make will not be saved.\n \n \n )}\n {metadata?.underwriterStatus === \"Under Review\" && (\n \n \n \n This quote has been submitted to the underwriting team. Only the\n available fields will be editable.\n \n \n )}\n \n {children}\n \n );\n}\n\nexport default FormHeading;\n","import { Button } from \"@chakra-ui/button\";\nimport { Flex } from \"@chakra-ui/layout\";\nimport React from \"react\";\nimport useComments from \"../hooks/useComments\";\n\nexport interface TabSwitcherProps {\n tabItems: string[];\n onTabClick: (index: number) => void;\n activeIndex?: number;\n}\n\nfunction TabSwitcher(props: TabSwitcherProps) {\n const { tabItems, onTabClick, activeIndex = 0 } = props;\n const { fetchComments } = useComments();\n const [tabIndex, setTabIndex] = React.useState(activeIndex);\n\n const handleButtonClick = (index: number, tabItems: string[]) => {\n onTabClick(index);\n setTabIndex(index);\n if (tabItems[index] === \"Discussion\") {\n fetchComments();\n }\n };\n\n return (\n \n {tabItems.map((item, index) => {\n return (\n item && (\n handleButtonClick(index, tabItems)}\n key={item}\n >\n {item}\n \n )\n );\n })}\n \n );\n}\n\nexport default TabSwitcher;\n","import React from \"react\";\nimport { Box } from \"@chakra-ui/layout\";\nimport FormHeading from \"../common-quote/FormHeading\";\nimport TabSwitcher from \"../TabSwitcher\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { PdfGenerationActions } from \"../../lib/types/PDFGenerationActions\";\n\nexport interface QuoteFormHeadingProps {\n quoteName: string;\n formActionHandler: (action: QuoteFormActions, formValues: any) => void;\n formExportHandler: (action: PdfGenerationActions, formValues: any) => void;\n generatingPdf: boolean;\n isCalculating: boolean | undefined;\n quoteTabs: string[];\n setTabIndex: React.Dispatch>;\n}\n\nconst QuoteFormHeading = (props: QuoteFormHeadingProps) => {\n return (\n \n \n props.setTabIndex(index)}\n />\n \n \n );\n};\n\nexport default QuoteFormHeading;\n","import { Button, ButtonProps, IconButton } from \"@chakra-ui/button\";\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n CopyIcon,\n DeleteIcon,\n RepeatIcon,\n} from \"@chakra-ui/icons\";\nimport { Box, Divider, Flex, Heading, Text, VStack } from \"@chakra-ui/layout\";\nimport { Menu, MenuButton, MenuItem, MenuList } from \"@chakra-ui/menu\";\nimport { useColorModeValue } from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React from \"react\";\nimport useConfirmation from \"../../hooks/useConfirmation\";\nimport useGetUserRole from \"../../hooks/useGetUserRole\";\nimport useQuote from \"../../hooks/useQuote\";\nimport useUser from \"../../hooks/useUser\";\nimport { darkMode, lightMode } from \"../../lib/models/color-mode-colors\";\nimport { PdfGenerationActions } from \"../../lib/types/PDFGenerationActions\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { isElevatedUser } from \"../../lib/UserPermissions\";\nimport DeleteQuoteDialog from \"../DeleteQuoteDialog\";\nimport { Calculator } from \"../icons/Calculator\";\nimport DocumentReportIcon from \"../icons/DocumentReportIcon\";\nimport DotsHorizontalIcon from \"../icons/DotsHorizontalIcon\";\nimport ShowForRole from \"../ShowForRole\";\n\ninterface FormQuoteActionsProps {\n handler: (action: QuoteFormActions, values: any) => void;\n exportHandler: (action: PdfGenerationActions, values: any) => void;\n generatingPdf?: boolean;\n calculating?: boolean;\n}\n\nfunction FormQuoteActions(props: FormQuoteActionsProps) {\n const { handler, exportHandler, generatingPdf, calculating } = props;\n const quoteContext = useQuote();\n const userRole = useGetUserRole();\n const { values, isValid, dirty } = useFormikContext();\n const { state, isOwned, fetchQuote } = quoteContext;\n const { role } = useUser();\n const [isOpen, setIsOpen] = React.useState(true);\n const buttonText = useColorModeValue(\"gray.800\", \"white\");\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n\n const handleGeneratePdfClick = (action: PdfGenerationActions) => {\n exportHandler(action, values);\n };\n\n const quoteHandler = (action: QuoteFormActions) => {\n handler(action, values);\n };\n\n const { dialogOpen, loading, toggleOpen, performAction } = useConfirmation(\n () => quoteHandler(\"DELETE\")\n );\n\n const commonDisable =\n !isValid ||\n !state.hasCalculated ||\n state.hasCalculationErrors ||\n state.requiresQuoteResubmission ||\n state.hasFormErrors;\n\n return (\n \n \n Quote Actions\n \n ) : (\n \n )\n }\n onClick={() => setIsOpen(!isOpen)}\n variant=\"unstyled\"\n size=\"sm\"\n >\n {isOpen ? \"Collapse\" : \"Expand\"}\n \n \n\n {isOpen && (\n <>\n \n \n }\n onClick={() => quoteHandler(\"CALCULATE\")}\n isDisabled={!isValid || state.hasFormErrors}\n isLoading={calculating}\n loadingText=\"Calculating..\"\n {...QuoteActionButtonStyle}\n >\n \n Calculate Quote\n \n \n\n \n }\n isLoading={generatingPdf}\n onClick={() => {\n userRole !== \"External\"\n ? handleGeneratePdfClick(\"CUSTOMER\")\n : handleGeneratePdfClick(\"WHITELABEL\");\n }}\n loadingText=\"Generating..\"\n isDisabled={commonDisable || state.isNewQuote}\n {...QuoteActionButtonStyle}\n >\n Generate PDF\n \n\n \n \n }\n isDisabled={commonDisable || state.isNewQuote}\n />\n\n \n handleGeneratePdfClick(\"CUSTOMER\")}\n >\n Customer PDF\n \n\n handleGeneratePdfClick(\"INTERNAL\")}\n >\n Internal PDF\n \n\n handleGeneratePdfClick(\"WHITELABEL\")}\n >\n Whitelabel PDF\n \n \n \n \n \n\n }\n onClick={() => fetchQuote()}\n isDisabled={commonDisable || dirty}\n {...QuoteActionButtonStyle}\n >\n \n Reload Quote\n \n \n\n }\n onClick={() => quoteHandler(\"SAVE_AS\")}\n isDisabled={commonDisable || dirty}\n {...QuoteActionButtonStyle}\n >\n \n Copy Quote\n \n \n\n {(isOwned || isElevatedUser(role)) && (\n <>\n \n }\n onClick={() => toggleOpen()}\n isDisabled={commonDisable || dirty}\n {...QuoteActionButtonStyle}\n _hover={{ color: \"red.600\", textDecoration: \"underline\" }}\n >\n \n Delete Quote\n \n \n \n \n )}\n\n quoteHandler(\"SAVE\")}\n >\n Save Quote\n \n \n \n )}\n \n );\n}\n\nconst QuoteActionButtonStyle: ButtonProps = {\n fontSize: \"sm\",\n iconSpacing: 4,\n textAlign: \"left\",\n variant: \"link\",\n};\n\nexport default FormQuoteActions;\n","import React from \"react\";\nimport QuoteFormHeading from \"./QuoteFormHeading\";\nimport { Box } from \"@chakra-ui/react\";\nimport FormQuoteActions from \"../common-quote/FormQuoteActions\";\nimport FormQuoteSummary from \"../common-quote/FormQuoteSummary\";\nimport FormSfActions from \"../common-quote/FormSfActions\";\nimport FormCalcSummary from \"../common-quote/FormCalcSummary\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { PdfGenerationActions } from \"../../lib/types/PDFGenerationActions\";\nimport { CalculationType } from \"../../state/quote-reducer\";\n\nexport interface QuoteBoxTopProps {\n quoteName: string;\n formActionHandler: (action: QuoteFormActions, values: any) => void;\n formExportHandler: (action: PdfGenerationActions, values: any) => void;\n loadingPdf: boolean;\n isCalculating: boolean | undefined;\n quoteTabs: string[];\n setTabIndex: React.Dispatch>;\n calculation: CalculationType;\n}\n\nconst QuoteBoxTop = (props: QuoteBoxTopProps) => {\n return (\n <>\n \n\n \n \n \n\n \n \n \n\n \n \n \n\n {props.calculation && (\n \n \n \n )}\n \n );\n};\n\nexport default QuoteBoxTop;\n","import { SelectItem } from \"../../types/SelectItem\";\nimport { RentalPremierProduct } from \"../enums\";\n\nexport function getPremierPrepayPenaltySelects(product: string) {\n if (\n product === RentalPremierProduct[\"Premier - 5/1 ARM\"] ||\n product === RentalPremierProduct[\"Premier - 5 Year Balloon\"] ||\n product === RentalPremierProduct[\"Premier - 5 Year, 30 Am\"]\n ) {\n return selectRentalPremierPrepayment;\n } else {\n return selectRentalPremierPrepaymentFixed;\n }\n}\n\nexport const selectRentalPremierProduct: SelectItem[] = [\n { label: \"Premier - 5 Year, 30 Am\", value: \"Premier - 5 Year, 30 Am\" },\n { label: \"Premier - 10 Year, 30 Am\", value: \"Premier - 10 Year, 30 Am\" },\n { label: \"Premier - 5 Year Balloon\", value: \"Premier - 5 Year Balloon\" },\n { label: \"Premier - 10 Year Balloon\", value: \"Premier - 10 Year Balloon\" },\n { label: \"Premier - 5/1 ARM\", value: \"Premier - 5/1 ARM\" },\n { label: \"Premier - 30 Year Fixed\", value: \"Premier - 30 Year Fixed\" },\n];\n\nexport const selectOpenPrepay: SelectItem[] = [\n {\n label: \"Open Prepayment Allowance: 0% UPB/Year\",\n value: \"Open Prepayment Allowance: 0% UPB/Year\",\n },\n {\n label: \"Open Prepayment Allowance: 5% UPB/Year\",\n value: \"Open Prepayment Allowance: 5% UPB/Year\",\n },\n];\n\nexport const selectRentalPremierPrepayment: SelectItem[] = [\n { label: \"Yield Spread Maintenance\", value: \"Yield Spread Maintenance\" },\n {\n label: \"5 Year Prepayment Penalty: 5, 5, 4, 4, 3\",\n value: \"5 Year Prepayment Penalty: 5, 5, 4, 4, 3\",\n },\n {\n label: \"5 Year Prepayment Penalty: 5, 4, 3, 2, 1\",\n value: \"5 Year Prepayment Penalty: 5, 4, 3, 2, 1\",\n },\n];\n\nexport const selectRentalPremierPrepaymentFixed: SelectItem[] = [\n { label: \"Yield Spread Maintenance\", value: \"Yield Spread Maintenance\" },\n {\n label: \"10 Year Prepayment Penalty: 5, 5, 4, 4, 3, 3, 2, 2, 1, 1\",\n value: \"10 Year Prepayment Penalty: 5, 5, 4, 4, 3, 3, 2, 2, 1, 1\",\n },\n {\n label: \"7 Year Prepayment Penalty: 5, 5, 4, 4, 3, 2, 1\",\n value: \"7 Year Prepayment Penalty: 5, 5, 4, 4, 3, 2, 1\",\n },\n];\n","import { SelectItem } from \"../../types/SelectItem\";\n\nexport const selectLoanPurpose: SelectItem[] = [\n { label: \"Purchase\", value: \"Purchase\" },\n { label: \"Refinance\", value: \"Refinance\" },\n];\n\nexport const selectLoanProduct: SelectItem[] = [\n { label: \"FixNFlip\", value: \"FixNFlip\" },\n { label: \"BridgePlus\", value: \"BridgePlus\" },\n { label: \"New Construction\", value: \"New Construction\" },\n];\n\nexport const selectPropertyType: SelectItem[] = [\n { label: \"SFR\", value: \"SFR\" },\n { label: \"2-4 Unit\", value: \"2-4 Unit\" },\n { label: \"Condo\", value: \"Condo\" },\n { label: \"5-9 Unit\", value: \"5-9 Unit\" },\n];\n\nexport const selectChannel: SelectItem[] = [\n { label: \"Standard Retail\", value: \"Standard Retail\" },\n { label: \"Broker\", value: \"Broker\" },\n { label: \"Lender Finance\", value: \"Lender Finance\" },\n];\n\nexport const brokerRetailSelectChannel: SelectItem[] = [\n { label: \"Standard Retail\", value: \"Standard Retail\" },\n { label: \"Broker\", value: \"Broker\" },\n { label: \"Broker Retail\", value: \"Broker Retail\" },\n { label: \"Lender Finance\", value: \"Lender Finance\" },\n];\n\nexport const selectLoanTerm: SelectItem[] = [\n { label: \"13\", value: \"13\" },\n { label: \"19\", value: \"19\" },\n { label: \"24\", value: \"24\" },\n];\n\nexport const selectFixAndFlipLoanTerm: SelectItem[] = [\n { label: \"13\", value: \"13\" },\n { label: \"19\", value: \"19\" },\n];\n\nexport const selectGuaranty: SelectItem[] = [\n { label: \"Full Recourse\", value: \"Full Recourse\" },\n { label: \"Non-Recourse\", value: \"Non-Recourse\" },\n];\n\nexport const selectDebtStatus: SelectItem[] = [\n { label: \"Purchase\", value: \"Purchase\" },\n { label: \"Free & Clear\", value: \"Free & Clear\" },\n { label: \"Payoff Existing Mortgage\", value: \"Payoff Existing Mortgage\" },\n];\n\nexport const selectDeferredOrig: SelectItem[] = [\n { label: \"0\", value: 0 },\n { label: \"50\", value: 50 },\n { label: \"100\", value: 100 },\n];\n\nexport const selectStates: SelectItem[] = [\n { label: \"Alabama\", value: \"AL\" },\n { label: \"Alaska\", value: \"AK\" },\n { label: \"Arizona\", value: \"AZ\" },\n { label: \"Arkansas\", value: \"AR\" },\n { label: \"California\", value: \"CA\" },\n { label: \"Colorado\", value: \"CO\" },\n { label: \"Connecticut\", value: \"CT\" },\n { label: \"Delaware\", value: \"DE\" },\n { label: \"District Of Columbia\", value: \"DC\" },\n { label: \"Florida\", value: \"FL\" },\n { label: \"Georgia\", value: \"GA\" },\n { label: \"Hawaii\", value: \"HI\" },\n { label: \"Idaho\", value: \"ID\" },\n { label: \"Illinois\", value: \"IL\" },\n { label: \"Indiana\", value: \"IN\" },\n { label: \"Iowa\", value: \"IA\" },\n { label: \"Kansas\", value: \"KS\" },\n { label: \"Kentucky\", value: \"KY\" },\n { label: \"Louisiana\", value: \"LA\" },\n { label: \"Maine\", value: \"ME\" },\n { label: \"Maryland\", value: \"MD\" },\n { label: \"Massachusetts\", value: \"MA\" },\n { label: \"Michigan\", value: \"MI\" },\n { label: \"Minnesota\", value: \"MN\" },\n { label: \"Mississippi\", value: \"MS\" },\n { label: \"Missouri\", value: \"MO\" },\n { label: \"Montana\", value: \"MT\" },\n { label: \"Nebraska\", value: \"NE\" },\n { label: \"Nevada\", value: \"NV\" },\n { label: \"New Hampshire\", value: \"NH\" },\n { label: \"New Jersey\", value: \"NJ\" },\n { label: \"New Mexico\", value: \"NM\" },\n { label: \"New York\", value: \"NY\" },\n { label: \"North Carolina\", value: \"NC\" },\n { label: \"North Dakota\", value: \"ND\" },\n { label: \"Ohio\", value: \"OH\" },\n { label: \"Oklahoma\", value: \"OK\" },\n { label: \"Oregon\", value: \"OR\" },\n { label: \"Pennsylvania\", value: \"PA\" },\n { label: \"Rhode Island\", value: \"RI\" },\n { label: \"South Carolina\", value: \"SC\" },\n { label: \"South Dakota\", value: \"SD\" },\n { label: \"Tennessee\", value: \"TN\" },\n { label: \"Texas\", value: \"TX\" },\n { label: \"Utah\", value: \"UT\" },\n { label: \"Vermont\", value: \"VT\" },\n { label: \"Virginia\", value: \"VA\" },\n { label: \"Washington\", value: \"WA\" },\n { label: \"West Virginia\", value: \"WV\" },\n { label: \"Wisconsin\", value: \"WI\" },\n { label: \"Wyoming\", value: \"WY\" },\n];\n","import { Button } from \"@chakra-ui/button\";\nimport { LinkIcon } from \"@chakra-ui/icons\";\nimport { Flex, Heading, Link } from \"@chakra-ui/layout\";\nimport React from \"react\";\n\nexport interface FormSectionHeaderProps {\n id: string;\n label: string;\n}\n\nfunction FormSectionHeader({ id, label }: FormSectionHeaderProps) {\n const [isIconVisible, setIconVisible] = React.useState(false);\n\n return (\n {\n setIconVisible(true);\n }}\n onMouseLeave={() => {\n setIconVisible(false);\n }}\n >\n \n \n {label}\n \n {isIconVisible && }\n \n \n );\n}\n\nexport default FormSectionHeader;\n","import { useField } from \"formik\";\nimport { useRef } from \"react\";\n\nfunction useFieldFast(props) {\n const [field, meta, helpers] = useField(props);\n\n const latestRef = useRef({});\n\n // On every render save newest helpers to latestRef\n latestRef.current.setValue = helpers.setValue;\n latestRef.current.setTouched = helpers.setTouched;\n latestRef.current.setError = helpers.setError;\n\n // On the first render create new function which will never change\n // but call newest helper function\n if (!latestRef.current.helpers) {\n latestRef.current.helpers = {\n setValue: (...args) => latestRef.current.setValue(...args),\n setTouched: (...args) => latestRef.current.setTouched(...args),\n setError: (...args) => latestRef.current.setError(...args),\n };\n }\n\n return [field, meta, latestRef.current.helpers];\n}\n\nexport default useFieldFast;\n","import useQuote from \"./useQuote\";\nimport useUser from \"./useUser\";\nexport default function useInProgressDisable(name: string) {\n const quoteContext = useQuote();\n const { state } = quoteContext;\n const { metadata } = state;\n const { role } = useUser();\n\n const inProgressFields = [\n \"loanProduct\",\n \"productType\",\n \"channel\",\n \"prepaymentPenalty\",\n \"referralFee\",\n \"submissionType\",\n \"borrowerIsReferral\",\n \"yieldSpread\",\n \"buyUpDownOption\",\n \"buyUpDownPercentage\",\n \"scenario1\",\n \"scenario2\",\n \"scenario3\",\n \"preferredScenario1\",\n \"preferredScenario2\",\n \"preferredScenario3\",\n \"brokerFee\",\n \"brokerProcessingFee\",\n \"isZeroOrigFee\",\n \"finalRateOverride\",\n \"finalOrigFeeOverride\",\n \"autoFee\",\n \"autoRate\",\n \"commissionReduction\",\n \"adjustedBlendedLTC\",\n \"adjustedPurchaseLTC\",\n \"adjustedARV\",\n \"deferredOrigPercent\",\n \"achExempt\",\n \"achRequired\",\n \"processingFeeOverride\",\n ];\n\n const exceptionFields = [\n \"finalOrigFeeOverride\",\n \"processingFeeOverride\",\n \"achExempt\",\n \"achRequired\",\n \"finalRateOverride\",\n \"commissionReduction\",\n \"exceptionType\",\n \"blendedLTCOverride\",\n \"purchaseLTCOverride\",\n \"arvOverride\",\n \"achExempt\",\n \"achRequired\",\n \"rateReductionOverride\",\n \"finalRateOverride\",\n \"commissionReduction\",\n ];\n\n if (\n (metadata?.underwriterStatus === \"Final\" ||\n metadata?.underwriterStatus === \"Sales Finalized\") &&\n name.toLowerCase().includes(\"scenario\")\n ) {\n return true;\n }\n\n if (inProgressFields.includes(name)) return false;\n\n if (exceptionFields.includes(name) && role === \"Capital Markets\") {\n return false;\n }\n\n return metadata?.underwriterStatus === \"Under Review\";\n}\n","import { Checkbox } from \"@chakra-ui/checkbox\";\nimport React from \"react\";\nimport useFieldFast from \"../../hooks/useFieldFast\";\nimport useInProgressDisable from \"../../hooks/useInProgressDisable\";\nimport { YesNo } from \"../../lib/models/enums\";\n\nexport type CheckboxFieldProps = {\n label: string;\n name: string;\n errorText?: string;\n children?: any;\n disabled?: boolean;\n};\n\nfunction CheckboxField(props: CheckboxFieldProps) {\n const { label, name, children, disabled } = props;\n const [field, , helpers] = useFieldFast(props);\n const { value } = field;\n const { setValue } = helpers;\n\n const handleChange = (e: any) => {\n const checked = e.target.checked;\n const value = checked ? YesNo.Yes : YesNo.No;\n\n setValue(value);\n };\n\n return (\n \n {label}\n {children}\n \n );\n}\n\nexport default CheckboxField;\n","import { FormControl, FormLabel } from \"@chakra-ui/form-control\";\nimport { FormErrorMessage, FormHelperText, InputGroup } from \"@chakra-ui/react\";\nimport { Select } from \"@chakra-ui/select\";\nimport { at } from \"lodash\";\nimport React from \"react\";\nimport useFieldFast from \"../../hooks/useFieldFast\";\nimport useInProgressDisable from \"../../hooks/useInProgressDisable\";\n\nexport type SelectFieldProps = {\n label: string;\n placeholder: string;\n data: { value: any; label: string; disabled?: boolean }[];\n name: string;\n errorText?: string;\n helperText?: string | React.ReactElement;\n disabled?: any;\n};\n\nfunction SelectField(props: SelectFieldProps) {\n const { label, data, name, helperText, placeholder, disabled } = props;\n const [field, meta] = useFieldFast(props);\n const { value: selectedValue } = field;\n\n function renderHelperText() {\n const [touched, error] = at(meta, \"touched\", \"error\");\n\n if (touched && error) {\n return error;\n }\n }\n\n return (\n \n {label}\n \n \n {data.map((option) => (\n \n {option.label}\n \n ))}\n \n \n {meta.touched && meta.error ? (\n {renderHelperText()}\n ) : (\n helperText && {helperText}\n )}\n \n );\n}\n\nexport default SelectField;\n","import { FormControl, FormLabel } from \"@chakra-ui/form-control\";\nimport { Input } from \"@chakra-ui/input\";\nimport {\n FormErrorMessage,\n FormHelperText,\n InputGroup,\n useColorMode,\n} from \"@chakra-ui/react\";\nimport { at } from \"lodash\";\nimport React from \"react\";\nimport NumberFormat, { NumberFormatProps } from \"react-number-format\";\nimport useFieldFast from \"../../hooks/useFieldFast\";\nimport useInProgressDisable from \"../../hooks/useInProgressDisable\";\nimport { css } from \"@emotion/react\";\n\nexport type TextInputFieldProps = {\n label: string;\n name: string;\n type?: string;\n errorText?: string;\n helperText?: string;\n children?: any;\n disabled?: any;\n isReadOnly?: any;\n formatNumber?: boolean;\n placeholder?: string | number;\n formatOptions?: NumberFormatProps;\n};\n\nfunction TextInputField(props: TextInputFieldProps) {\n const {\n label,\n name,\n type,\n helperText,\n children,\n disabled,\n isReadOnly,\n formatNumber,\n placeholder,\n formatOptions,\n } = props;\n\n const [field, meta, helpers] = useFieldFast(props);\n const { onChange, ...fieldProps } = field;\n const { colorMode } = useColorMode();\n\n function renderHelperText() {\n const [touched, error] = at(meta, \"touched\", \"error\");\n if (touched && error) {\n return error;\n }\n }\n\n const handleClick = (e: React.MouseEvent) => {\n if (meta.touched) return;\n\n let click = e.target as HTMLInputElement;\n click.select();\n };\n\n return (\n \n {label}\n \n {type === \"number\" && formatNumber ? (\n helpers.setValue(vals.value)}\n {...fieldProps}\n onClick={handleClick}\n placeholder={placeholder}\n {...formatOptions}\n />\n ) : (\n \n )}\n\n {children}\n \n {meta.touched && meta.error ? (\n {renderHelperText()}\n ) : (\n helperText && {helperText}\n )}\n \n );\n}\n\nexport default TextInputField;\n","import { Grid, GridItem, InputLeftElement } from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React, { useEffect } from \"react\";\nimport useGetUserRole from \"../../hooks/useGetUserRole\";\nimport { UserRole } from \"../../lib/models/enums\";\nimport { selectRentalProduct } from \"../../lib/models/rental/rental-form-selects.model\";\nimport { RentalForm } from \"../../lib/models/rental/rental-form.model\";\nimport { selectRentalPremierProduct } from \"../../lib/models/rental/rental-premier-form-selects.model\";\nimport {\n brokerRetailSelectChannel,\n selectChannel,\n} from \"../../lib/models/short-term/short-term-form-selects.model\";\nimport { QuoteType } from \"../../lib/types/QuoteType\";\nimport { SelectItem } from \"../../lib/types/SelectItem\";\nimport { brokerRetailUsers, isInternalUser } from \"../../lib/UserPermissions\";\nimport FormSectionHeader from \"../common-quote/FormSectionHeader\";\nimport CheckboxField from \"../form-fields/CheckboxField\";\nimport SelectField from \"../form-fields/SelectField\";\nimport TextInputField from \"../form-fields/TextInputField\";\n\nfunction RentalBorrowerInformationForm({\n quoteType,\n}: {\n quoteType: QuoteType;\n initialQuoteType: QuoteType;\n}) {\n const { setFieldValue, setFieldTouched, initialValues, values } =\n useFormikContext();\n\n const { productType } = initialValues;\n\n const role = useGetUserRole();\n\n const [loanProducts, setLoanProducts] =\n React.useState(selectRentalProduct);\n\n const [hasIntialValue, setHasInitialValue] = React.useState(true);\n\n const setSubmissionType = (channel: string) => {\n values.submissionType = channel;\n };\n\n const getChannelSelectByRole = (role: UserRole) => {\n if (!role) return selectChannel;\n\n if (brokerRetailUsers.includes(role)) {\n return brokerRetailSelectChannel;\n }\n\n return selectChannel;\n };\n\n useEffect(() => {\n if (!productType) return;\n\n if (quoteType === \"Premier\") {\n setHasInitialValue(\n !!selectRentalPremierProduct.find((x) => x.value === productType)\n );\n setLoanProducts(selectRentalPremierProduct);\n } else {\n setHasInitialValue(\n !!selectRentalProduct.find((x) => x.value === productType)\n );\n setLoanProducts(selectRentalProduct);\n }\n }, [quoteType, productType]);\n\n useEffect(() => {\n if (hasIntialValue) {\n setFieldValue(\"productType\", productType);\n } else {\n setFieldValue(\"productType\", \"\");\n setFieldTouched(\"productType\", true);\n }\n }, [hasIntialValue, productType, setFieldTouched, setFieldValue]);\n\n return (\n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n {isInternalUser(role) ? (\n \n \n \n ) : (\n setSubmissionType(\"Broker\")\n )}\n\n \n \n \n\n \n }\n />\n \n\n \n \n \n\n \n \n \n\n \n \n \n \n );\n}\n\nexport default RentalBorrowerInformationForm;\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function ArrowDownIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function ArrowUpIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n","import { Table, Tbody, Td, Th, Thead, Tr, Text } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { ArrowDownIcon } from \"../icons/ArrowDownIcon\";\nimport { ArrowUpIcon } from \"../icons/ArrowUpIcon\";\n\nexport function BuyUpDownTable({\n buyUpDownRatio = \"1:1\",\n}: {\n buyUpDownRatio?: string;\n}) {\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
RateOrigination FeeInterest Rate
Buy Up\n \n \n \n
Buy Down\n \n \n \n
\n \n *The Fee to Rate ratio is {buyUpDownRatio} and subject to\n minimum/maximum guidelines\n \n \n );\n}\n","import { FormControl, FormLabel } from \"@chakra-ui/form-control\";\nimport { Flex } from \"@chakra-ui/layout\";\nimport {\n NumberDecrementStepper,\n NumberIncrementStepper,\n NumberInput,\n NumberInputField,\n NumberInputStepper,\n} from \"@chakra-ui/number-input\";\nimport {\n FormErrorMessage,\n FormHelperText,\n InputGroup,\n useColorMode,\n useColorModeValue,\n} from \"@chakra-ui/react\";\nimport {\n Slider,\n SliderFilledTrack,\n SliderThumb,\n SliderTrack,\n} from \"@chakra-ui/slider\";\nimport { at } from \"lodash\";\nimport React from \"react\";\nimport useFieldFast from \"../../hooks/useFieldFast\";\nimport useInProgressDisable from \"../../hooks/useInProgressDisable\";\nimport { darkMode, lightMode } from \"../../lib/models/color-mode-colors\";\n\nexport type InputFieldProps = {\n label: string;\n name: string;\n errorText?: string;\n helperText?: string;\n defaultValue: number;\n step: number;\n max: number;\n min: number;\n precision?: number;\n disabled?: boolean;\n};\n\nfunction SliderField(props: InputFieldProps) {\n const {\n label,\n name,\n helperText,\n defaultValue,\n step,\n max,\n min,\n precision,\n disabled,\n } = props;\n const [field, meta, helpers] = useFieldFast(props);\n const { value } = field;\n const { setValue } = helpers;\n\n const [inputValue, setInputValue] = React.useState(+value);\n const handleChange = (value: any) => setInputValue(value);\n const handleChangeEnd = (value: any) => setFieldValue(value);\n const handleInputChange = (value: any) => {\n setFieldValue(value);\n };\n const isDisabled = useInProgressDisable(name) || disabled;\n const { colorMode } = useColorMode();\n const sliderThumbBg = useColorModeValue(lightMode[100], darkMode[200]);\n\n const setFieldValue = React.useCallback(\n (value) => {\n setValue(value);\n },\n [setValue]\n );\n\n React.useEffect(() => {\n setInputValue(value);\n }, [value]);\n\n function renderHelperText() {\n const [touched, error] = at(meta, \"touched\", \"error\");\n\n if (touched && error) {\n return error;\n }\n }\n\n return (\n \n {label}\n \n \n \n \n \n \n \n \n \n {\n handleChange(val);\n }}\n onChangeEnd={(val: number) => {\n handleChangeEnd(val);\n }}\n defaultValue={defaultValue}\n step={step}\n max={max}\n disabled={disabled}\n data-testid={`${label}-slider`}\n >\n \n \n \n {inputValue} %}\n />\n \n \n \n {meta.touched && meta.error ? (\n {renderHelperText()}\n ) : (\n helperText && {helperText}\n )}\n \n );\n}\n\nexport default SliderField;\n","import {\n Button,\n Grid,\n GridItem,\n InputLeftElement,\n InputRightElement,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React from \"react\";\nimport useGetUserRole from \"../../hooks/useGetUserRole\";\nimport {\n selectBuyUpBuyDown,\n selectPrepayPenalty,\n} from \"../../lib/models/rental/rental-form-selects.model\";\nimport { RentalForm } from \"../../lib/models/rental/rental-form.model\";\nimport {\n getPremierPrepayPenaltySelects,\n selectOpenPrepay,\n} from \"../../lib/models/rental/rental-premier-form-selects.model\";\nimport { QuoteType } from \"../../lib/types/QuoteType\";\nimport { isInternalUser } from \"../../lib/UserPermissions\";\nimport { BuyUpDownTable } from \"../common-quote/BuyUpDownTable\";\nimport FormSectionHeader from \"../common-quote/FormSectionHeader\";\nimport CheckboxField from \"../form-fields/CheckboxField\";\nimport SelectField from \"../form-fields/SelectField\";\nimport SliderField from \"../form-fields/SliderField\";\nimport TextInputField from \"../form-fields/TextInputField\";\nimport ModalWrapper from \"../ModalWrapper\";\nimport ShowForRole from \"../ShowForRole\";\n\nfunction RentalPricingForm({ quoteType }: { quoteType: QuoteType }) {\n const [isOpen, setIsOpen] = React.useState(false);\n\n const role = useGetUserRole();\n\n const {\n values,\n setFieldValue,\n setFieldTouched,\n validateForm,\n initialValues,\n } = useFormikContext();\n\n const { productType, submissionType, prepaymentPenalty } = values;\n\n React.useEffect(() => {\n if (quoteType === \"Rental\") {\n if (!selectPrepayPenalty.find((x) => x.value === prepaymentPenalty)) {\n setFieldValue(\"prepaymentPenalty\", selectPrepayPenalty[1].value);\n }\n } else if (quoteType === \"Premier\") {\n const prepayOptions = getPremierPrepayPenaltySelects(productType);\n setFieldValue(\"prepaymentPenalty\", prepayOptions[0].value);\n }\n\n Promise.resolve(validateForm())\n .then(() => {})\n .catch((error) => console.error(error));\n }, [quoteType, productType, setFieldValue, validateForm, prepaymentPenalty]);\n\n React.useEffect(() => {\n if (prepaymentPenalty !== \"\") {\n setFieldTouched(\"prepaymentPenalty\", true, true);\n }\n }, [prepaymentPenalty, setFieldTouched]);\n\n const checkRatio = () => {\n return \"5:1\";\n };\n\n return (\n \n \n \n \n\n \n \n \n\n {quoteType === \"Premier\" ? (\n \n \n \n ) : (\n \n )}\n\n {submissionType.includes(\"Broker\") && (\n <>\n \n }\n />\n \n\n {isInternalUser(role) && (\n \n }\n />\n \n )}\n \n )}\n\n \n \n \n setIsOpen(!isOpen)}\n float=\"right\"\n >\n What does this mean?\n \n \n setIsOpen(!isOpen)}\n title=\"Explanation of Buy Up/Down\"\n size=\"lg\"\n footer={}\n >\n \n \n \n\n \n }\n />\n \n\n \n \n \n {isInternalUser(role) && (\n \n }\n />\n \n )}\n\n \n \n \n\n {submissionType === \"Broker\" && (\n \n \n \n )}\n\n {quoteType === \"Rental\" ? (\n <>\n \n \n \n\n {isInternalUser(role) && (\n \n \n \n )}\n\n \n \n \n\n {initialValues.fiveNineUnit === \"Yes\" && (\n \n \n \n )}\n\n \n \n \n\n \n \n \n\n \n \n \n \n ) : (\n <>\n \n \n \n\n \n \n \n\n \n \n \n \n )}\n \n );\n}\n\nexport default RentalPricingForm;\n","import { WarningIcon } from \"@chakra-ui/icons\";\nimport {\n ListIcon,\n ListItem,\n Popover,\n PopoverArrow,\n PopoverBody,\n PopoverCloseButton,\n PopoverContent,\n PopoverHeader,\n PopoverTrigger,\n Tag,\n UnorderedList,\n} from \"@chakra-ui/react\";\nimport React from \"react\";\nimport useFormCalculationWarnings from \"../../hooks/useFormCalculationWarnings\";\n\nexport interface CalculationErrorsProps {\n calculationErrors: string | Array | undefined;\n label?: string;\n}\n\nfunction CalculationErrors({\n calculationErrors,\n label,\n}: CalculationErrorsProps) {\n const warnings = useFormCalculationWarnings(calculationErrors ?? \"\");\n\n return (\n \n \n \n {warnings.length} {label ? label : \"Calculation Errors\"}\n \n \n \n \n \n \n {warnings.length} {label ? label : \"Calculation Errors\"}\n \n \n \n {warnings.map((warning, index) => (\n \n \n {warning}\n \n ))}\n \n \n \n \n );\n}\n\nexport default CalculationErrors;\n","import { InfoOutlineIcon } from \"@chakra-ui/icons\";\nimport {\n Box,\n Flex,\n Grid,\n GridItem,\n InputLeftElement,\n InputRightElement,\n ScaleFade,\n Text,\n Tooltip,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React from \"react\";\nimport useQuote from \"../../hooks/useQuote\";\nimport { selectStates } from \"../../lib/models/short-term/short-term-form-selects.model\";\nimport { QuoteType } from \"../../lib/types/QuoteType\";\nimport CalculationErrors from \"../common-quote/FormCalculationErrors\";\nimport FormSectionHeader from \"../common-quote/FormSectionHeader\";\nimport SelectField from \"../form-fields/SelectField\";\nimport TextInputField from \"../form-fields/TextInputField\";\n\nfunction RentalPropertySummaryForm({ quoteType }: { quoteType: QuoteType }) {\n const { values } = useFormikContext();\n const { dispatch } = useQuote();\n\n const [isSectionValid, setIsSectionValid] = React.useState(false);\n const [sectionWarnings, SetSectionWarnings] = React.useState>(\n []\n );\n\n const propertyScenarioKeys = React.useMemo(() => {\n return [\"appraisedVal1\", \"totalCosts1\", \"appraisedVal3\", \"purchasePrice\"];\n }, []);\n\n const validatePropertyScenarios = React.useCallback(() => {\n let valid = false;\n\n for (let key of propertyScenarioKeys) {\n if (values[key] !== 0) {\n valid = true;\n break;\n }\n }\n\n setIsSectionValid(valid);\n }, [values, propertyScenarioKeys]);\n\n React.useEffect(() => {\n validatePropertyScenarios();\n }, [values, validatePropertyScenarios]);\n\n const setFormWarnings = React.useCallback(\n (isValid: boolean) => {\n if (isValid) {\n dispatch({\n type: \"QUOTE_FORM_ERROR\",\n payload: false,\n });\n\n SetSectionWarnings([]);\n } else {\n dispatch({\n type: \"QUOTE_FORM_ERROR\",\n payload: true,\n });\n\n SetSectionWarnings([\"All property values should not be $0\"]);\n }\n },\n [dispatch]\n );\n\n React.useEffect(() => {\n setFormWarnings(isSectionValid);\n }, [isSectionValid, setFormWarnings]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n {quoteType === \"Rental\" ? \"Properties Owned < 6 Months\" : \"\"}\n \n \n\n \n }\n />\n \n\n \n }\n />\n \n\n \n \n {quoteType === \"Rental\"\n ? \"Properties Owned > 6 Months\"\n : \"Properties Owned > 12 Months\"}\n \n \n\n \n }\n />\n \n\n \n \n Purchases\n \n \n\n \n }\n />\n \n\n \n }\n />\n \n\n \n }\n />\n \n\n \n }\n />\n \n\n \n }\n />\n \n\n \n }\n />\n \n\n \n }\n />\n \n\n {quoteType === \"Premier\" && (\n \n }\n />\n \n )}\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n );\n}\n\nexport default RentalPropertySummaryForm;\n","import {\n SimpleGrid,\n Table,\n Tbody,\n Td,\n Text,\n Th,\n Thead,\n Tr,\n} from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { FixAndFlipQuote } from \"../../lib/models/short-term/short-term.model\";\n\nexport type FixAndFlipTierTableProps = {\n constructionTable: boolean;\n quote: FixAndFlipQuote;\n};\n\nfunction FixAndFlipTierTable({\n constructionTable,\n quote,\n}: FixAndFlipTierTableProps) {\n const { borrowerInfo } = quote;\n return (\n <>\n \n \n \n \n {constructionTable ? (\n \n ) : (\n \n )}\n \n \n \n {!constructionTable && (\n <>\n \n \n \n \n \n \n \n \n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n
Borrower TierCompleted Number of Builds*Completed Number of Flips*
Tier 10
Tier 21-4
Tier 35-11
Tier 412-23
Tier 5Over 24
\n \n *Completed in the last 36 months\n \n\n \n {borrowerInfo?.buildsCompletedInThreeYears &&\n borrowerInfo?.buildsCompletedInThreeYears > 0 &&\n constructionTable ? (\n
\n
{`${\"Builds Completed > 3 Years:\"}`}
\n
{borrowerInfo?.buildsCompletedInThreeYears}
\n
\n ) : null}\n {borrowerInfo?.completedExits && borrowerInfo.completedExits > 0 ? (\n
\n
Completed Exits:
\n
{borrowerInfo?.completedExits}
\n
\n ) : null}\n\n {borrowerInfo?.fnfCompletedInThreeYears &&\n borrowerInfo?.fnfCompletedInThreeYears > 0 ? (\n
\n
{`${\"Flips Completed > 3 Years:\"}`}
\n
{borrowerInfo?.fnfCompletedInThreeYears}
\n
\n ) : null}\n
\n \n );\n}\nexport default FixAndFlipTierTable;\n","import { FormControl, FormLabel } from \"@chakra-ui/form-control\";\nimport { Flex } from \"@chakra-ui/layout\";\nimport {\n NumberDecrementStepper,\n NumberIncrementStepper,\n NumberInput,\n NumberInputField,\n NumberInputStepper,\n} from \"@chakra-ui/number-input\";\nimport {\n Button,\n FormErrorMessage,\n FormHelperText,\n InputGroup,\n useColorMode,\n useColorModeValue,\n} from \"@chakra-ui/react\";\nimport {\n Slider,\n SliderFilledTrack,\n SliderThumb,\n SliderTrack,\n} from \"@chakra-ui/slider\";\nimport { useFormikContext } from \"formik\";\nimport { at } from \"lodash\";\nimport React from \"react\";\nimport useFieldFast from \"../../hooks/useFieldFast\";\nimport useGetUserRole from \"../../hooks/useGetUserRole\";\nimport useInProgressDisable from \"../../hooks/useInProgressDisable\";\nimport useQuote from \"../../hooks/useQuote\";\nimport { darkMode, lightMode } from \"../../lib/models/color-mode-colors\";\nimport { FixAndFlipForm } from \"../../lib/models/short-term/short-term-form.model\";\nimport { FixAndFlipQuote } from \"../../lib/models/short-term/short-term.model\";\nimport ModalWrapper from \"../ModalWrapper\";\nimport FixAndFlipTierTable from \"../stf-quote/FixAndFlipTierTable\";\n\nexport type InputFieldProps = {\n label: string;\n altLabel: string;\n name: string;\n errorText?: string;\n helperText?: string;\n};\n\nfunction BorrowerTierSlider(props: InputFieldProps) {\n const { label, altLabel, name, helperText } = props;\n const [field, meta, helpers] = useFieldFast(props);\n const { values, setFieldValue } = useFormikContext();\n const { colorMode } = useColorMode();\n const sliderThumbBg = useColorModeValue(lightMode[100], darkMode[200]);\n const { altTier, loanProduct } = values;\n const { value } = field;\n const { setValue } = helpers;\n const quoteContext = useQuote();\n const role = useGetUserRole();\n const { state } = quoteContext;\n const { metadata, quote } = state;\n const stfQuote = quote as FixAndFlipQuote;\n\n const [isOpen, setIsOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState(value);\n const [min, setMin] = React.useState(1);\n\n const handleChange = (value: any) => setInputValue(value);\n const handleChangeEnd = (value: any) => setFieldFastValue(value);\n\n const disableAltTier = useInProgressDisable(\"altTier\");\n\n const isNewConstructionTier =\n loanProduct === \"New Construction\" && altTier === \"No\";\n\n const hasCalcTier =\n (stfQuote?.borrowerInfo?.buildsCompletedInThreeYears !== undefined &&\n stfQuote?.borrowerInfo?.buildsCompletedInThreeYears > 0) ||\n (stfQuote?.borrowerInfo?.fnfCompletedInThreeYears !== undefined &&\n stfQuote?.borrowerInfo?.fnfCompletedInThreeYears > 0) ||\n (stfQuote?.borrowerInfo?.completedExits !== undefined &&\n stfQuote?.borrowerInfo?.completedExits > 0);\n\n const setFieldFastValue = React.useCallback(\n (value) => {\n setValue(value.toString());\n },\n [setValue]\n );\n\n React.useEffect(() => {\n setValue(inputValue.toString());\n }, [inputValue, setValue]);\n\n React.useEffect(() => {\n if (metadata?.underwriterStatus === \"Not Submitted\") {\n if (loanProduct === \"New Construction\") {\n altTier === \"Yes\" ? setMin(4) : setMin(1);\n return;\n }\n setFieldValue(\"altTier\", \"No\");\n setMin(1);\n }\n }, [\n loanProduct,\n setFieldValue,\n altTier,\n setMin,\n metadata?.underwriterStatus,\n ]);\n\n function renderHelperText() {\n const [touched, error] = at(meta, \"touched\", \"error\");\n\n if (touched && error) {\n return error;\n }\n }\n\n function handleAltToggle() {\n if (altTier === \"Yes\") {\n setFieldValue(\"altTier\", \"No\");\n } else {\n setFieldValue(\"altTier\", \"Yes\");\n setInputValue(4);\n }\n }\n\n return (\n \n {isNewConstructionTier ? altLabel : label}\n\n \n \n \n \n \n \n \n \n \n {\n handleChange(val);\n }}\n onChangeEnd={(val: any) => {\n handleChangeEnd(val);\n }}\n defaultValue={1}\n step={1}\n max={5}\n min={min}\n >\n \n \n \n \n \n \n \n {meta.touched && meta.error ? (\n {renderHelperText()}\n ) : (\n helperText && {helperText}\n )}\n {(hasCalcTier || role === \"External\") && (\n setIsOpen(!isOpen)}\n float=\"right\"\n >\n What does this mean?\n \n )}\n\n {loanProduct === \"New Construction\" && !hasCalcTier && (\n \n {altTier === \"No\"\n ? \"Qualified FNF Borrower?\"\n : \"Use New Construction Tier?\"}\n \n )}\n\n setIsOpen(!isOpen)}\n title=\"Explanation of Borrower Tiers\"\n size=\"lg\"\n footer={}\n >\n \n \n \n );\n}\n\nexport default BorrowerTierSlider;\n","import { Flex, Grid, GridItem, InputLeftElement } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport FormSectionHeader from \"../common-quote/FormSectionHeader\";\nimport BorrowerTierSlider from \"../form-fields/BorrowerTierSlider\";\nimport CheckboxField from \"../form-fields/CheckboxField\";\nimport TextInputField from \"../form-fields/TextInputField\";\n\nfunction BorrowerInformationForm() {\n return (\n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n }\n />\n \n\n \n \n \n \n \n \n );\n}\n\nexport default BorrowerInformationForm;\n","import {\n Grid,\n GridItem,\n InputLeftElement,\n InputRightElement,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React from \"react\";\nimport { FixAndFlipProduct } from \"../../lib/models/enums\";\nimport { selectDebtStatus } from \"../../lib/models/short-term/short-term-form-selects.model\";\nimport { FixAndFlipForm } from \"../../lib/models/short-term/short-term-form.model\";\nimport FormSectionHeader from \"../common-quote/FormSectionHeader\";\nimport CheckboxField from \"../form-fields/CheckboxField\";\nimport SelectField from \"../form-fields/SelectField\";\nimport TextInputField from \"../form-fields/TextInputField\";\n\nfunction DealTermsForm() {\n const [lesserOfLotOrPurchaseLabel, setLesserOfLotOrPurchaseLabel] =\n React.useState(\"Total As-Is Value\");\n\n const { values, setFieldValue, initialValues, setFieldTouched } =\n useFormikContext();\n const {\n loanProduct,\n loanPurpose,\n targetCloseDate,\n channel,\n deferredOrigPercent,\n } = values;\n const { loanPurpose: initialLoanPurpose } = initialValues;\n\n React.useEffect(() => {\n if (loanProduct === FixAndFlipProduct[\"BridgePlus\"]) {\n setFieldValue(\"rehabConBudget\", 0);\n setFieldValue(\"afterCompletedVal\", values.lesserOfLotOrPurchase);\n }\n\n if (loanProduct === FixAndFlipProduct[\"New Construction\"]) {\n setLesserOfLotOrPurchaseLabel(\"Lesser of Lot Value or Purchase Price\");\n setFieldValue(\"buyUpPercentage\", 0);\n } else {\n setLesserOfLotOrPurchaseLabel(\"Total As-Is Value\");\n }\n }, [\n loanProduct,\n setFieldValue,\n values.lesserOfLotOrPurchase,\n values.afterCompletedVal,\n ]);\n\n React.useEffect(() => {\n if (initialLoanPurpose === loanPurpose) {\n if (initialLoanPurpose === \"Purchase\") {\n setFieldValue(\"existingDebtStatus\", \"Purchase\");\n setFieldValue(\"originalPurchaseDate\", targetCloseDate);\n }\n } else {\n if (loanPurpose === \"Purchase\") {\n setFieldValue(\"existingDebtStatus\", \"Purchase\");\n setFieldValue(\"originalPurchaseDate\", targetCloseDate);\n } else {\n setFieldValue(\"existingDebtStatus\", \"\");\n setFieldTouched(\"existingDebtStatus\", true, true);\n }\n }\n }, [\n initialLoanPurpose,\n loanPurpose,\n targetCloseDate,\n setFieldValue,\n setFieldTouched,\n ]);\n\n React.useEffect(() => {\n if (!!Number(deferredOrigPercent)) {\n setFieldValue(\"buyUpPercentage\", 0);\n setFieldValue(\"isZeroOrigFee\", \"No\");\n }\n }, [deferredOrigPercent, setFieldValue]);\n\n return (\n \n \n \n \n\n \n \n \n\n \n \n \n\n {loanPurpose === \"Purchase\" && (\n \n }\n />\n \n )}\n\n \n }\n />\n \n\n \n }\n />\n \n\n \n }\n />\n \n\n \n \n \n\n \n }\n />\n \n\n \n }\n disabled={\n loanProduct === FixAndFlipProduct[\"New Construction\"] ||\n !!Number(deferredOrigPercent)\n }\n />\n \n\n \n \n \n\n {channel.includes(\"Broker\") && (\n \n \n \n )}\n \n );\n}\n\nexport default DealTermsForm;\n","import { Grid, GridItem, Heading } from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React from \"react\";\nimport {\n selectLoanProduct,\n selectLoanPurpose,\n selectPropertyType,\n selectStates,\n} from \"../../lib/models/short-term/short-term-form-selects.model\";\nimport { FixAndFlipForm } from \"../../lib/models/short-term/short-term-form.model\";\nimport FormSectionHeader from \"../common-quote/FormSectionHeader\";\nimport SelectField from \"../form-fields/SelectField\";\nimport TextInputField from \"../form-fields/TextInputField\";\n\nfunction LoanSummaryForm() {\n const { values } = useFormikContext();\n const { loanProduct } = values;\n\n return (\n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n Property Address\n \n \n\n \n \n \n\n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n );\n}\n\nexport default LoanSummaryForm;\n","import {\n Box,\n Button,\n InputLeftElement,\n InputRightElement,\n SimpleGrid,\n Text,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React from \"react\";\nimport useGetUserRole from \"../../hooks/useGetUserRole\";\nimport { FixAndFlipProduct, UserRole } from \"../../lib/models/enums\";\nimport {\n brokerRetailSelectChannel,\n selectChannel,\n selectDeferredOrig,\n selectFixAndFlipLoanTerm,\n selectGuaranty,\n selectLoanTerm,\n} from \"../../lib/models/short-term/short-term-form-selects.model\";\nimport { FixAndFlipForm } from \"../../lib/models/short-term/short-term-form.model\";\nimport { brokerRetailUsers, isInternalUser } from \"../../lib/UserPermissions\";\nimport FormSectionHeader from \"../common-quote/FormSectionHeader\";\nimport CheckboxField from \"../form-fields/CheckboxField\";\nimport SelectField from \"../form-fields/SelectField\";\nimport TextInputField from \"../form-fields/TextInputField\";\nimport ModalWrapper from \"../ModalWrapper\";\n\nfunction LoanTermsForm() {\n const { values, setFieldValue } = useFormikContext();\n const { channel, loanProduct, isZeroOrigFee, buyUpPercentage } = values;\n const role = useGetUserRole();\n const [isOpen, setIsOpen] = React.useState(false);\n\n React.useEffect(() => {\n if (isZeroOrigFee !== \"No\" && buyUpPercentage !== 0) {\n setFieldValue(\"deferredOrigPercent\", 0);\n }\n }, [isZeroOrigFee, buyUpPercentage, setFieldValue]);\n\n const setChannel = (channel: string) => {\n values.channel = channel;\n };\n\n const getChannelSelectByRole = (role: UserRole) => {\n if (!role) return selectChannel;\n\n if (brokerRetailUsers.includes(role)) {\n return brokerRetailSelectChannel;\n }\n\n return selectChannel;\n };\n\n return (\n <>\n \n\n \n {isInternalUser(role) ? (\n \n ) : (\n setChannel(\"Broker\")\n )}\n\n \n\n \n {isInternalUser(role) && (\n }\n />\n )}\n\n {channel.includes(\"Broker\") && (\n <>\n }\n />\n {isInternalUser(role) && (\n }\n />\n )}\n \n )}\n\n {loanProduct !== FixAndFlipProduct[\"New Construction\"] && (\n \n {\n setIsOpen(!isOpen);\n }}\n float=\"right\"\n >\n What does this mean?\n \n setIsOpen(!isOpen)}\n title=\"Explanation of Deferred Origination Fee\"\n size=\"lg\"\n footer={\n \n }\n >\n \n A portion or all of the origination fee may be deferred and\n paid at the time of loan payoff\n \n \n \n }\n />\n )}\n {isInternalUser(role) && (\n \n \n \n )}\n\n {isInternalUser(role) &&\n values.loanProduct === \"BridgePlus\" &&\n values.loanPurpose === \"Refinance\" && (\n \n \n \n )}\n \n \n );\n}\n\nexport default LoanTermsForm;\n","import { debounce } from \"lodash\";\nimport React from \"react\";\n\nfunction useScrollSpy(\n selectors: string[],\n offset: number = 0,\n elementId: string = \"root\"\n) {\n const [activeId, setActiveId] = React.useState(\"\");\n const [scrollTop, setScrollTop] = React.useState(0);\n\n const element = React.useMemo(() => {\n return document.getElementById(elementId);\n }, [elementId]);\n\n React.useEffect(() => {\n if (!element) return;\n\n const elements: any[] = selectors\n .map((selector) => document.querySelector(selector))\n .filter((x) => x);\n\n const onScroll = () => {\n if (!elements || elements?.length < 1) return;\n\n const scrollPosition = element.scrollTop;\n const scrollHeight = element.scrollHeight;\n const containerHeight = element.clientHeight;\n const isAtEnd =\n scrollHeight - Math.round(scrollPosition) === containerHeight;\n\n setScrollTop(scrollPosition);\n\n const inViewElements: string[] = [];\n\n if (!isAtEnd) {\n for (let element in elements) {\n const offsetTop = elements[element]?.offsetTop ?? 0;\n\n if (offsetTop <= scrollPosition + offset) {\n inViewElements.push(elements[element].id);\n }\n }\n } else {\n inViewElements.push(elements[elements.length - 1].id);\n }\n\n setActiveId(inViewElements[inViewElements.length - 1]);\n };\n\n const debouncedScroll = debounce(onScroll, 200);\n\n element.addEventListener(\"scroll\", debouncedScroll);\n\n return () => {\n debouncedScroll.cancel();\n element.removeEventListener(\"scroll\", debouncedScroll);\n };\n }, [scrollTop, selectors, offset, element]);\n\n return [activeId];\n}\n\nexport default useScrollSpy;\n","import { FormikErrors, FormikTouched } from \"formik\";\nimport React from \"react\";\nimport { FormSectionStatus } from \"../lib/models/form-section-status.model\";\n\nfunction useSectionValidation(\n sections: FormSectionStatus[],\n touchedFields: FormikTouched,\n formErrors: FormikErrors,\n dirty: boolean\n) {\n const [validatedSections, setValidatedSections] = React.useState(sections);\n\n const validateSection = React.useCallback(\n (\n section: FormSectionStatus,\n touched: string[],\n errors: string[],\n dirty: boolean\n ) => {\n const sectionFieldCount =\n section.fields.length - (section.numberOfOptionalFields ?? 0);\n let errorCount = 0;\n let touchCount = 0;\n\n if (sectionFieldCount < 1) {\n section.status = \"info\";\n return;\n }\n\n for (let i = 0; i <= touched.length - 1; i++) {\n if (section.fields.includes(touched[i])) {\n touchCount++;\n }\n }\n\n for (let i = 0; i <= errors.length - 1; i++) {\n if (section.fields.includes(errors[i])) {\n errorCount++;\n }\n }\n\n if (errorCount < 1 && touchCount < 1) {\n section.status = \"success\";\n } else if (errorCount > 0 && touchCount > 0) {\n section.status = \"error\";\n } else if (errorCount < 1 && touchCount > 0) {\n section.status = \"success\";\n } else {\n section.status = \"info\";\n }\n },\n []\n );\n\n const validateSections = React.useCallback(\n (sections: FormSectionStatus[]) => {\n const validated = [...sections];\n const touchedKeys = Object.keys(touchedFields);\n const errorKeys = Object.keys(formErrors);\n\n validated.forEach((section) => {\n validateSection(section, touchedKeys, errorKeys, dirty);\n });\n\n setValidatedSections(validated);\n },\n [touchedFields, formErrors, dirty, validateSection]\n );\n\n React.useEffect(() => {\n validateSections(sections);\n }, [sections, validateSections]);\n\n return [validatedSections];\n}\n\nexport default useSectionValidation;\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function CheckCircle(props: IconProps) {\n return (\n \n \n \n );\n}\n","import Icon, { IconProps } from \"@chakra-ui/icon\";\nimport React from \"react\";\n\nexport function TimesCircle(props: IconProps) {\n return (\n \n \n \n );\n}\n","import {\n Box,\n Flex,\n Link,\n ListItem,\n UnorderedList,\n useColorModeValue,\n} from \"@chakra-ui/react\";\nimport styled from \"@emotion/styled\";\nimport { useFormikContext } from \"formik\";\nimport React from \"react\";\nimport useScrollSpy from \"../../hooks/useScrollSpy\";\nimport useSectionValidation from \"../../hooks/useSectionValidation\";\nimport { darkMode, lightMode } from \"../../lib/models/color-mode-colors\";\nimport { FormSectionStatus } from \"../../lib/models/form-section-status.model\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { CheckCircle } from \"../icons/CheckCircle\";\nimport { TimesCircle } from \"../icons/TimesCircle\";\n\nexport type FormNavigationProps = {\n sections: FormSectionStatus[];\n actionHandler?: (action: QuoteFormActions) => void;\n};\n\nfunction FormNavigation({ sections }: FormNavigationProps) {\n const { touched, errors, dirty } = useFormikContext();\n const textColor = useColorModeValue(\"gray.600\", \"white\");\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n\n const [validatedSections] = useSectionValidation(\n sections,\n touched,\n errors,\n dirty\n );\n\n const [activeId] = useScrollSpy(\n sections.map(({ id }) => `[id=\"${id}\"]`),\n 350,\n \"main-container\"\n );\n\n const getStatusColor = (status: \"success\" | \"error\" | \"info\") => {\n if (status === \"success\") {\n return \"green.500\";\n } else if (status === \"error\") {\n return \"red.500\";\n }\n\n return \"blue\";\n };\n\n const getStatusIcon = (status: \"success\" | \"error\" | \"info\") => {\n if (status === \"success\") {\n return ;\n } else if (status === \"error\") {\n return ;\n } else {\n return (\n \n \n \n );\n }\n };\n\n return (\n <>\n \n \n \n \n \n \n );\n}\n\nexport default FormNavigation;\n\nexport const SmallBlockHeading = styled.p`\n font-size: 12px;\n font-weight: bold;\n letter-spacing: 0.25px;\n text-transform: uppercase;\n margin-top: var(--chakra-space-2);\n margin-bottom: var(--chakra-space-2);\n padding-left: var(--chakra-space-2);\n padding-right: var(--chakra-space-2);\n color: var(--chakra-colors-gray-600);\n`;\n","import {\n Box,\n Divider,\n Fade,\n Flex,\n TabPanel,\n TabPanels,\n Tabs,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React, { useEffect } from \"react\";\nimport useQuote from \"../../hooks/useQuote\";\nimport { FormSectionStatus } from \"../../lib/models/form-section-status.model\";\nimport { CalculationType } from \"../../state/quote-reducer\";\nimport RentalBorrowerInformationForm from \"../rental-quote/RentalBorrowerInformationForm\";\nimport RentalPricingForm from \"../rental-quote/RentalPricingForm\";\nimport RentalPropertySummaryForm from \"../rental-quote/RentalPropertySummary\";\nimport BorrowerInformationForm from \"../stf-quote/BorrowerInformationForm\";\nimport DealTermsForm from \"../stf-quote/DealTermsForm\";\nimport LoanSummaryForm from \"../stf-quote/LoanSummaryForm\";\nimport LoanTermsForm from \"../stf-quote/LoanTermsForm\";\nimport FormNavigation from \"./FormNavigation\";\n\ninterface FormTabsContainerProps {\n tabIndex: number;\n formStatusSections: FormSectionStatus[];\n calculation: CalculationType;\n overrideContent: React.ReactNode;\n calcInfo: React.ReactNode;\n discussionContent?: React.ReactNode;\n isFnf: boolean;\n}\n\nfunction FormTabsContainer({\n tabIndex,\n formStatusSections,\n calculation,\n overrideContent,\n calcInfo,\n discussionContent,\n isFnf,\n}: FormTabsContainerProps) {\n const { state } = useQuote();\n const { validateForm, setFieldTouched } = useFormikContext();\n\n useEffect(() => {\n if (state.isNewQuote) return;\n\n validateForm().then((x) =>\n Object.keys(x).forEach((error) => {\n setFieldTouched(error);\n })\n );\n }, [setFieldTouched, state.isNewQuote, validateForm]);\n\n return (\n \n \n \n \n \n \n \n {isFnf ? (\n <>\n \n \n \n \n \n \n \n \n ) : (\n <>\n \n \n \n \n \n \n )}\n \n \n \n \n\n \n \n {calculation && calcInfo}\n \n \n\n \n \n \n {calculation && overrideContent}\n \n \n \n\n \n \n {calculation && discussionContent}\n \n \n \n \n );\n}\n\nexport default FormTabsContainer;\n","import { DeleteIcon } from \"@chakra-ui/icons\";\nimport {\n Box,\n Button,\n Heading,\n Text,\n Textarea,\n useColorModeValue,\n} from \"@chakra-ui/react\";\nimport React, { useCallback, useRef, useState } from \"react\";\nimport useComments from \"../../hooks/useComments\";\nimport useUser from \"../../hooks/useUser\";\nimport { formatDateTime } from \"../../lib/number-transforms\";\nimport { Comment } from \"../../lib/types/CommentType\";\nimport FormLoadingOverlay from \"./FormLoadingOverlay\";\nimport FormSectionHeader from \"./FormSectionHeader\";\n\nfunction Discussion() {\n const {\n comments,\n fetchComments,\n deleteComment,\n submitComment,\n commentsLoading,\n } = useComments();\n const { user } = useUser();\n const scrollRef = useRef(null);\n const [comment, setComment] = useState(\"\");\n const usernameText = useColorModeValue(\"gray.800\", \"\");\n const commentText = useColorModeValue(\"gray.600\", \"gray.400\");\n\n const handleInputChange = (e: any) => {\n let inputValue = e.target.value;\n setComment(inputValue);\n };\n\n const scrollToBottomOfList = () => {\n scrollRef.current.scrollIntoView();\n };\n\n const updateComments = useCallback(() => {\n fetchComments();\n }, [fetchComments]);\n\n const submitHelper = useCallback(() => {\n if (!user?.email) return;\n\n submitComment(comment, user?.email);\n setComment(\"\");\n scrollToBottomOfList();\n }, [comment, user?.email, submitComment]);\n\n const deleteHelper = useCallback(\n (commentId) => {\n if (!commentId) return;\n deleteComment(commentId);\n },\n [deleteComment]\n );\n\n return (\n \n {commentsLoading && }\n \n \n \n Update Comments\n \n \n {comments.length ? (\n \n {comments.map((comment: Comment) => {\n return (\n \n \n \n \n {comment.username}\n \n \n {comment.username === user?.email && (\n deleteHelper(comment.commentId)}\n >\n \n \n )}\n {formatDateTime(comment.created)}\n \n \n \n \n {comment.text}\n \n
\n
\n );\n })}\n \n ) : (\n \n \n No Comments\n \n There has been no discussion on this quote\n \n )}\n \n {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (comment.trim().length) {\n submitHelper();\n }\n }\n }}\n disabled={commentsLoading}\n placeholder={\"Leave a comment...\"}\n size=\"sm\"\n resize=\"none\"\n isInvalid={comment.length >= 256}\n ref={scrollRef}\n />\n \n \n {255 - comment.length}/255\n \n \n \n = 256 || commentsLoading || !comment.length\n }\n onClick={submitHelper}\n >\n Post\n \n \n \n \n );\n}\n\nexport default Discussion;\n","import { useColorModeValue, useToast } from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React from \"react\";\nimport { QuoteApi } from \"../../api/QuoteApi\";\nimport useUser from \"../../hooks/useUser\";\nimport { SelectItem } from \"../../lib/types/SelectItem\";\nimport { UserAccount } from \"../../lib/types/UserAccountType\";\nimport { isElevatedUser } from \"../../lib/UserPermissions\";\nimport ComboBox from \"../form-fields/ComboBox\";\n\nexport default function QuoteOwnerOverride() {\n const { sfProfile, role } = useUser();\n const { setFieldValue } = useFormikContext();\n const _isMounted = React.useRef(true);\n const toast = useToast();\n const [loading, setLoading] = React.useState();\n const [accounts, setAccounts] = React.useState([]);\n const [selectedAccount, setSelectedAccount] =\n React.useState(null);\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n\n const brokerItems: SelectItem[] = React.useMemo(() => {\n if (sfProfile?.brokers) {\n return sfProfile?.brokers.reduce((filtered, broker) => {\n if (broker.accountid) {\n const brokerItem = {\n label: broker.name,\n value: broker.username,\n };\n filtered.push(brokerItem);\n }\n return filtered;\n }, [] as SelectItem[]);\n }\n return [];\n }, [sfProfile?.brokers]);\n\n const accountItems: SelectItem[] = React.useMemo(() => {\n return accounts.map((account) => {\n return {\n label: `${account.firstName} ${account.lastName}`,\n value: account.username,\n };\n });\n }, [accounts]);\n\n const handleOwnerOverride = (brokerItem: SelectItem | null) => {\n setSelectedAccount(brokerItem);\n setFieldValue(\"username\", brokerItem?.value);\n };\n\n const fetchUsers = React.useCallback(() => {\n setLoading(true);\n\n QuoteApi.getQuoteUsers()\n .then((res) => {\n const activeUsers = res.data.map((x) => {\n return x;\n });\n if (_isMounted.current) {\n setAccounts(activeUsers);\n }\n })\n .catch((err) => {\n toast({\n title: \"Unable to Load Users\",\n description: \"An error has occurred when attempting to fetch users.\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n });\n setLoading(false);\n }, [toast, toastVariant]);\n\n React.useEffect(() => {\n return () => {\n _isMounted.current = false;\n };\n }, []);\n\n React.useEffect(() => {\n fetchUsers();\n }, [fetchUsers, loading]);\n\n return (\n <>\n {isElevatedUser(role) ? (\n \n ) : (\n \n )}\n \n );\n}\n","import { Box, Button } from \"@chakra-ui/react\";\nimport React, { useMemo } from \"react\";\nimport useQuote from \"../../hooks/useQuote\";\nimport useUser from \"../../hooks/useUser\";\nimport { isElevatedUser } from \"../../lib/UserPermissions\";\nimport WarningDialog from \"../WarningDialog\";\n\nexport type ExceptionSubmitButtonProps = {\n status?: string;\n contentText: string;\n handler: (status: string | undefined) => void;\n loanAmount?: number;\n noException?: boolean;\n};\n\nfunction ExceptionSubmitButton({\n handler,\n status,\n contentText,\n loanAmount,\n noException,\n}: ExceptionSubmitButtonProps) {\n const { state, isOwned } = useQuote();\n const { metadata } = state;\n const { role } = useUser();\n\n const [isSubmitDialogOpen, setIsSubmitDialogOpen] =\n React.useState(false);\n\n const handleSubmitException = () => {\n setIsSubmitDialogOpen(true);\n };\n\n const quoteHandler = (status: any) => {\n handler(status);\n };\n\n const handleConfirm = (status: any) => {\n setIsSubmitDialogOpen(!isSubmitDialogOpen);\n quoteHandler(status);\n };\n\n const handleWarningDialogClose = () => {\n setIsSubmitDialogOpen(false);\n };\n\n const statusDisable = useMemo(() => {\n if (role === \"Operations Analyst\") {\n return false;\n }\n\n if (loanAmount && loanAmount < 150000) {\n return true;\n }\n\n if (\n metadata?.exceptionStatus === \"Approved\" ||\n metadata?.exceptionStatus === \"Auto Approved\" ||\n (!metadata?.exceptionStatus && !status)\n ) {\n return true;\n }\n\n if (status === \"Auto Approved\" && metadata?.ownerBalance && loanAmount) {\n if (metadata?.ownerBalance < loanAmount) return true;\n }\n\n if (\n role === \"Inside Sales\" ||\n role === \"Broker\" ||\n role === \"Lender Finance\" ||\n role === \"Wholesale\" ||\n role === \"Business Development\" ||\n role === \"POD\" ||\n role === \"Production Coordinator\"\n ) {\n if (\n !metadata?.exceptionStatus ||\n metadata?.exceptionStatus === \"Not Approved\"\n ) {\n return false;\n }\n }\n\n if (role?.includes(\"Manager\")) {\n if (\n !metadata?.exceptionStatus ||\n metadata?.exceptionStatus === \"Not Approved\" ||\n metadata?.exceptionStatus === \"Requested\"\n ) {\n return false;\n }\n }\n\n if (role === \"Capital Markets\" || role === \"Administrator\") {\n return false;\n }\n\n return true;\n }, [role, status, metadata, loanAmount]);\n\n return (\n <>\n \n handleSubmitException()}\n >\n Submit Exceptions\n \n \n\n handleConfirm(status)}\n onCloseHandler={handleWarningDialogClose}\n />\n \n );\n}\n\nexport default ExceptionSubmitButton;\n","import { WarningTwoIcon } from \"@chakra-ui/icons\";\nimport {\n GridItem,\n Spinner,\n Stack,\n Text,\n Tooltip,\n useColorMode,\n useColorModeValue,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React, { useCallback, useEffect } from \"react\";\nimport { QuoteApi } from \"../../api/QuoteApi\";\nimport useQuote from \"../../hooks/useQuote\";\nimport { darkMode, lightMode } from \"../../lib/models/color-mode-colors\";\nimport { SelectItem } from \"../../lib/types/SelectItem\";\nimport SelectField from \"../form-fields/SelectField\";\nimport ExceptionSubmitButton from \"./ExceptionSubmitButton\";\n\nexport type ExceptionOptionsProps = {\n handler: (status: string | undefined) => void;\n quoteType: any;\n disableInputs: boolean;\n ownerBalance?: number;\n loanAmount?: number;\n};\n\nfunction AutoException({\n handler,\n quoteType,\n disableInputs,\n ownerBalance,\n loanAmount,\n}: ExceptionOptionsProps) {\n const { state, dispatch } = useQuote();\n const { metadata } = state;\n const firstUpdate = React.useRef(true);\n const _isMounted = React.useRef(true);\n const { setFieldValue, values, dirty } = useFormikContext();\n const [isLoading, setIsLoading] = React.useState(false);\n const { autoFee, autoRate, commissionReduction, loanProduct, productType } =\n values;\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n const { colorMode } = useColorMode();\n const noException = autoFee.toString() === \"0\" && autoRate.toString() === \"0\";\n\n const resetCalculationStatus = React.useCallback(() => {\n dispatch({\n type: \"QUOTE_CALCULATION_RESET\",\n });\n }, [dispatch]);\n\n const formatNumberWithCommas = (x: number | undefined) => {\n if (x === undefined) return;\n\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n };\n\n const fetchAutoCommission = useCallback(() => {\n if (!metadata?.ownerRole) return;\n\n if (noException) {\n setFieldValue(\"commissionReduction\", \"0.000\");\n return;\n }\n\n setIsLoading(true);\n\n QuoteApi.getAutoCommission(\n metadata?.ownerRole,\n autoFee,\n autoRate,\n quoteType,\n loanProduct ? loanProduct : productType\n )\n\n .then((res) => {\n const formattedCommissionReduction = res.data.commission_reduction;\n\n if (_isMounted.current || firstUpdate.current) {\n formattedCommissionReduction\n ? setFieldValue(\n \"commissionReduction\",\n Number(formattedCommissionReduction).toFixed(2).toString()\n )\n : setFieldValue(\"commissionReduction\", \"0.000\");\n setIsLoading(false);\n }\n })\n .catch((err) => {\n console.log(\"err: 💥\", err);\n });\n }, [\n autoFee,\n autoRate,\n quoteType,\n setFieldValue,\n metadata?.ownerRole,\n loanProduct,\n noException,\n productType,\n ]);\n\n useEffect(() => {\n if (metadata?.exceptionStatus !== \"Auto Approved\" && _isMounted.current) {\n if (!autoFee && !autoRate && firstUpdate.current) return;\n fetchAutoCommission();\n if (dirty) {\n resetCalculationStatus();\n }\n }\n }, [\n metadata?.exceptionStatus,\n fetchAutoCommission,\n autoFee,\n autoRate,\n dirty,\n resetCalculationStatus,\n ]);\n\n useEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = false;\n return;\n }\n\n fetchAutoCommission();\n }, [autoFee, autoRate, fetchAutoCommission]);\n\n React.useEffect(() => {\n return () => {\n _isMounted.current = false;\n };\n }, []);\n\n const isLoanAmountUnderMin = React.useMemo(() => {\n if (loanAmount && loanAmount < 150000) {\n return true;\n }\n return false;\n }, [loanAmount]);\n\n const isBalanceUnderLoanAmt = React.useMemo(() => {\n if (loanAmount && ownerBalance && loanAmount > ownerBalance) {\n return true;\n }\n return false;\n }, [loanAmount, ownerBalance]);\n\n return (\n <>\n \n \n \n\n \n \n \n\n \n \n Commission Reduction\n \n\n {isLoading ? (\n \n \n Loading...\n \n ) : (\n \n {commissionReduction ? commissionReduction : \"0.000\"}%\n \n )}\n \n\n \n \n Total Loan Amount\n \n \n {isLoanAmountUnderMin && (\n \n \n \n )}\n ${loanAmount ? formatNumberWithCommas(loanAmount) : \"0.00\"}\n \n \n\n \n \n Auto Exception Balance\n \n \n {isBalanceUnderLoanAmt && (\n \n \n \n )}\n ${ownerBalance ? formatNumberWithCommas(ownerBalance) : \"0.00\"}\n \n \n\n \n \n \n \n );\n}\n\nexport default AutoException;\n\nexport const selectRate: SelectItem[] = [\n { label: \"0.000%\", value: \"0\" },\n { label: \"0.120%\", value: \"0.12\" },\n { label: \"0.250%\", value: \"0.25\" },\n];\n","import { FormLabel, GridItem, Select } from \"@chakra-ui/react\";\nimport React, { useMemo, useState } from \"react\";\nimport useQuote from \"../../hooks/useQuote\";\nimport useUser from \"../../hooks/useUser\";\nimport { SelectItem } from \"../../lib/types/SelectItem\";\nimport { elevatedUsers } from \"../../lib/UserPermissions\";\nimport SelectField from \"../form-fields/SelectField\";\nimport ExceptionSubmitButton from \"./ExceptionSubmitButton\";\n\nexport type ExceptionOptionsProps = {\n handler: (status: string | undefined) => void;\n};\n\nfunction ExceptionOptions({ handler }: ExceptionOptionsProps) {\n const { state } = useQuote();\n const { metadata } = state;\n const { role } = useUser();\n const [selectedValue, setSelectedValue] = useState(\n metadata?.exceptionStatus ?? \"\"\n );\n\n const selectExceptionStatus = useMemo(\n () => [\n { label: \"Requested to Sales Manager\", value: \"Requested\" },\n {\n label: \"Submitted to Capital Markets\",\n value: \"Submitted\",\n disabled:\n role !== \"Production Coordinator\" &&\n role !== \"Operations Analyst\" &&\n role !== \"POD\" &&\n role !== null &&\n !elevatedUsers.includes(role),\n },\n {\n label: \"Not Approved\",\n value: \"Not Approved\",\n disabled: role !== \"Administrator\" && role !== \"Capital Markets\",\n },\n {\n label: \"Approved\",\n value: \"Approved\",\n disabled: role !== \"Administrator\" && role !== \"Capital Markets\",\n },\n ],\n [role]\n );\n\n return (\n <>\n \n \n \n\n \n Select Exception Status\n {\n setSelectedValue(e.target.value);\n }}\n >\n {selectExceptionStatus.map((option) => (\n \n {option.label}\n \n ))}\n \n \n\n \n\n \n \n \n \n );\n}\n\nexport default ExceptionOptions;\n\nexport const selectExceptionType: SelectItem[] = [\n { label: \"Credit\", value: \"Credit\" },\n { label: \"Pricing\", value: \"Pricing\" },\n // { label: \"Leverage\", value: \"Leverage\" },\n];\n","import {\n Box,\n GridItem,\n HStack,\n InputRightElement,\n Spinner,\n Switch,\n Text,\n VStack,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React, { useState } from \"react\";\nimport { RentalScenarioCalculation } from \"../../lib/models/rental/rental-calculation.model\";\nimport SliderField from \"../form-fields/SliderField\";\nimport TextInputField from \"../form-fields/TextInputField\";\n\nexport interface RateOverrideProps {\n scenarios?: RentalScenarioCalculation[];\n isCalculating?: boolean;\n rateReduction?: number | string;\n disableInputs: boolean;\n maxRate?: string;\n currRate?: number;\n handleScenarioPercentages?: (baseRate: number) => number;\n}\n\nfunction RateOverride({\n scenarios,\n isCalculating,\n maxRate,\n rateReduction,\n currRate,\n handleScenarioPercentages,\n disableInputs,\n}: RateOverrideProps) {\n const { setFieldValue } = useFormikContext();\n\n const [isReduction, setIsReduction] = useState(!!rateReduction);\n\n const onOverrideTypeChange = () => {\n setFieldValue(\"finalRateOverride\", \"\");\n setFieldValue(\"rateReductionOverride\", \"0.000\");\n setIsReduction(!isReduction);\n };\n return (\n <>\n \n \n Custom Rate\n \n \n \n\n {isReduction ? (\n <>\n \n \n \n {scenarios ? (\n \n \n \n Rate After Reduction\n \n \n {scenarios.map((scenario, i) => {\n return (\n \n \n Scenario {i + 1}\n \n {isCalculating ? (\n \n \n Calculating...\n \n ) : (\n \n {handleScenarioPercentages &&\n handleScenarioPercentages(\n scenario.initFixedInterestRate\n ).toFixed(3)}\n %\n \n )}\n \n );\n })}\n \n \n \n ) : (\n \n )}\n \n ) : (\n <>\n \n }\n helperText={\n maxRate\n ? `Current Maximum Rate: ${maxRate}%`\n : `Current Rate: ${currRate}%`\n }\n placeholder=\"No override\"\n disabled={disableInputs}\n />\n \n\n \n \n )}\n \n );\n}\n\nexport default RateOverride;\n","import { GridItem, InputRightElement } from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React from \"react\";\nimport { YesNo } from \"../../lib/models/enums\";\nimport { RentalCalculation } from \"../../lib/models/rental/rental-calculation.model\";\nimport { FixAndFlipCalculation } from \"../../lib/models/short-term/short-term-calculation.model\";\nimport { SelectItem } from \"../../lib/types/SelectItem\";\nimport CheckboxField from \"../form-fields/CheckboxField\";\nimport SelectField from \"../form-fields/SelectField\";\nimport TextInputField from \"../form-fields/TextInputField\";\nimport ExceptionOptions from \"./ExceptionOptions\";\nimport RateOverride from \"./RateOverride\";\n\nexport type ExceptionOptionsProps = {\n handler: (status: string | undefined) => void;\n findScenarioPercentages: (baseRate: number) => number;\n stfCalc: FixAndFlipCalculation | undefined;\n rentalCalc: RentalCalculation | undefined;\n rateReductionOverride: any;\n showCommission: boolean;\n maxRate: any;\n isCalculating: boolean;\n disableInputs: boolean;\n disableCommission: boolean;\n};\n\nfunction ManualException({\n handler,\n findScenarioPercentages,\n stfCalc,\n rentalCalc,\n rateReductionOverride,\n showCommission,\n maxRate,\n isCalculating,\n disableInputs,\n disableCommission,\n}: ExceptionOptionsProps) {\n const { values } = useFormikContext();\n return (\n <>\n \n }\n helperText={`Current Fee: ${\n stfCalc\n ? stfCalc?.RateFeeLLPA.finalOrigFee\n : rentalCalc?.originationFeePercent\n }%`}\n placeholder=\"No override\"\n disabled={disableInputs}\n />\n \n\n <>\n \n \n \n \n\n {stfCalc && (\n <>\n \n }\n helperText={`Current Blended LTC: ${stfCalc?.BlendedLTCCalc.maxBlendedLTCRatio}%`}\n placeholder=\"No override\"\n disabled={disableInputs}\n />\n \n\n \n }\n helperText={`Current Purchase LTC: ${stfCalc?.LTCCalcOnPurchaseRehab.maxLTCOnPurchase}%`}\n placeholder=\"No override\"\n disabled={disableInputs}\n />\n \n\n \n }\n helperText={`Current ARV: ${stfCalc?.LTVARVCalc.maxLTVRatio}%`}\n placeholder=\"No override\"\n disabled={disableInputs}\n />\n \n \n )}\n \n \n \n\n \n \n \n\n {/* {rentalCalc && (\n \n \n \n )} */}\n\n {stfCalc ? (\n \n ) : (\n \n )}\n\n {showCommission && (\n <>\n \n }\n placeholder=\"No override\"\n disabled={disableCommission}\n />\n \n \n \n )}\n\n \n \n );\n}\n\nexport default ManualException;\n\nexport const selectRate: SelectItem[] = [\n { label: \"0.000%\", value: \"0\" },\n { label: \"-0.120%\", value: \"0.12\" },\n { label: \"-0.250%\", value: \"0.25\" },\n];\n\nexport const selectACH: SelectItem[] = [\n { label: \"Exempt\", value: \"Exempt\" },\n { label: \"Non-exempt\", value: \"Non-exempt\" },\n];\n","import {\n Button,\n Flex,\n Grid,\n GridItem,\n HStack,\n Switch,\n useColorModeValue,\n useToast,\n} from \"@chakra-ui/react\";\nimport { useFormikContext } from \"formik\";\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport { QuoteApi } from \"../../api/QuoteApi\";\nimport useQuote from \"../../hooks/useQuote\";\nimport useUser from \"../../hooks/useUser\";\nimport { RentalCalculation } from \"../../lib/models/rental/rental-calculation.model\";\nimport { RentalOverrideOptions } from \"../../lib/models/rental/rental.model\";\nimport { FixAndFlipCalculation } from \"../../lib/models/short-term/short-term-calculation.model\";\nimport { FixAndFlipForm } from \"../../lib/models/short-term/short-term-form.model\";\nimport { FixAndFlipOverrideOptions } from \"../../lib/models/short-term/short-term.model\";\nimport { toFixed } from \"../../lib/number-transforms\";\nimport { QuoteUtils } from \"../../lib/quote-utils\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { isAutoExceptionUser, isElevatedUser } from \"../../lib/UserPermissions\";\nimport FormSectionHeader from \"../common-quote/FormSectionHeader\";\nimport QuoteOwnerOverride from \"../common-quote/QuoteOwnerOverride\";\nimport AutoException from \"./AutoException\";\nimport FormLoadingOverlay from \"./FormLoadingOverlay\";\nimport ManualException from \"./ManualException\";\nexport type OverrideFormProps = {\n stfCalc?: FixAndFlipCalculation;\n rentalCalc?: RentalCalculation;\n exceptionPricingOverride: FixAndFlipOverrideOptions | RentalOverrideOptions;\n totalLoanAmt?: number;\n formHandler: (action: QuoteFormActions, values: FixAndFlipForm) => void;\n};\n\nfunction OverrideForm({\n stfCalc,\n rentalCalc,\n exceptionPricingOverride,\n totalLoanAmt,\n formHandler,\n}: OverrideFormProps) {\n const quoteContext = useQuote();\n const { role } = useUser();\n const { state, quoteId } = quoteContext;\n const { isCalculating, metadata, quoteType } = state;\n const toast = useToast();\n const { setFieldValue, values } = useFormikContext();\n const { rateReductionOverride, commissionReduction } = values;\n const [isLoading, setIsLoading] = useState(false);\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n\n const [isManualException, setIsManualException] = useState(\n values.arvOverride ||\n values.blendedLTCOverride ||\n values.finalOrigFeeOverride ||\n values.finalRateOverride ||\n values.purchaseLTCOverride ||\n values.processingFeeOverride ||\n values.achRequired !== \"Yes\" ||\n values.achExempt !== \"Non-exempt\" ||\n values.rateReductionOverride !== 0\n );\n\n const OverrideOptions = stfCalc\n ? FixAndFlipOverrideOptions\n : RentalOverrideOptions;\n\n const clearHandler = () => {\n const overrideArray = Object.keys(new OverrideOptions(null));\n overrideArray.forEach((option) => {\n if (option === \"rateReductionOverride\") {\n setFieldValue(option, \"0.000\");\n } else if (option === \"autoRate\") {\n setFieldValue(option, 0);\n } else if (option === \"autoFee\") {\n setFieldValue(option, 0);\n } else if (option === \"achRequired\") {\n setFieldValue(option, \"Yes\");\n } else if (option === \"achExempt\") {\n setFieldValue(option, \"Non-exempt\");\n } else if (option !== \"exceptionType\") {\n setFieldValue(option, \"\");\n }\n });\n };\n\n const submitExceptionHandler = useCallback(\n (status) => {\n if (!quoteId) return;\n\n setIsLoading(true);\n Promise.resolve(formHandler(\"SAVE\", values))\n .then(() => {\n QuoteApi.submitQuoteExceptions(\n quoteId,\n status,\n !isManualException ? totalLoanAmt : undefined\n )\n .then((res) => {\n if (res.data) {\n toast({\n title: \"Exceptions Submitted\",\n description: \"The exceptions have been submitted.\",\n status: \"success\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n }\n })\n .catch((err) => {\n console.log(err);\n toast({\n title: \"Exceptions Submitted\",\n description:\n \"An error has occurred when attempting to submit your exceptions.\",\n status: \"success\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n });\n })\n .catch((error) => {\n console.log(error);\n });\n },\n [\n quoteId,\n formHandler,\n values,\n toast,\n isManualException,\n totalLoanAmt,\n toastVariant,\n ]\n );\n\n const overrideInputs = useMemo(() => {\n const inputs = new OverrideOptions(values);\n return QuoteUtils.normalizeOverrideValues(inputs);\n }, [OverrideOptions, values]);\n\n const displayOverrides = useMemo(() => {\n for (const [key, value] of Object.entries(overrideInputs)) {\n switch (key) {\n case \"achExempt\":\n if (value && value !== \"Non-exempt\") {\n return true;\n }\n continue;\n case \"achRequired\":\n if (value && value !== \"Yes\") {\n return true;\n }\n continue;\n case \"commissionReduction\":\n if (value && value !== \"0.000\") {\n return true;\n }\n continue;\n default:\n if (value && key !== \"exceptionType\") {\n return true;\n } else {\n continue;\n }\n }\n }\n return false;\n }, [overrideInputs]);\n\n const maxRate = useMemo(() => {\n if (!rentalCalc?.scenarios) return;\n\n const max = Math.max(\n ...rentalCalc?.scenarios.map((scenario) => scenario.initFixedInterestRate)\n );\n return toFixed(max, 3);\n }, [rentalCalc?.scenarios]);\n\n const findScenarioPercentages = (baseRate: number) => {\n if (rateReductionOverride === undefined) {\n return baseRate;\n }\n\n const override = exceptionPricingOverride.rateReductionOverride ?? 0;\n\n if (+rateReductionOverride === 0) {\n return baseRate + +override;\n } else {\n return baseRate + +override - +rateReductionOverride;\n }\n };\n\n const disableInputs =\n metadata?.exceptionStatus === \"Approved\" ||\n metadata?.exceptionStatus === \"Auto Approved\";\n\n const disableCommission =\n metadata?.exceptionStatus !== \"Not Submitted\" && role !== \"Capital Markets\";\n\n const showCommission = isElevatedUser(role) || commissionReduction !== null;\n\n //To hide Auto Exceptions:\n //uncomment \"allowAutoException = false\", comment \"allowAutoException = isAutoExceptionUser(metadata?.ownerRole)\"\n //const allowAutoException = false;\n const allowAutoException = isAutoExceptionUser(metadata?.ownerRole);\n\n const onAutoExceptionToggle = () => {\n clearHandler();\n setIsManualException(!isManualException);\n };\n\n return (\n \n {isLoading && }\n \n \n \n {displayOverrides && (\n \n )}\n \n \n\n \n \n \n\n \n
\n
\n\n {allowAutoException && (\n \n \n

Manual Exception

\n \n
\n
\n )}\n\n {!isManualException && allowAutoException && (\n \n )}\n\n {(isManualException || !allowAutoException) && (\n \n )}\n \n );\n}\n\nexport default OverrideForm;\n","import React from \"react\";\nimport OverrideForm from \"../common-quote/OverrideForm\";\nimport { FixAndFlipCalculation } from \"../../lib/models/short-term/short-term-calculation.model\";\nimport {\n FixAndFlipOverrideOptions,\n FixAndFlipQuote,\n} from \"../../lib/models/short-term/short-term.model\";\nimport { RentalCalculation } from \"../../lib/models/rental/rental-calculation.model\";\nimport {\n RentalOverrideOptions,\n RentalQuote,\n} from \"../../lib/models/rental/rental.model\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { CalculationType } from \"../../state/quote-reducer\";\n\nexport interface QuoteOverrideContentProps {\n isFnf: boolean;\n calculation: CalculationType;\n quote: FixAndFlipQuote | RentalQuote | null;\n formActionHandler: (action: QuoteFormActions, formValues: any) => void;\n preferredLoanAmt: number | undefined;\n}\n\nconst QuoteOverrideContent = (props: QuoteOverrideContentProps) => {\n const { quote, isFnf, calculation, formActionHandler, preferredLoanAmt } =\n props;\n return (\n <>\n {isFnf === true ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport default QuoteOverrideContent;\n","import { formatMoney, toFixed } from \"../../number-transforms\";\nimport {\n BlendedLTCCalc,\n CashToClose,\n FinalLoanAmount,\n GenericFixAndFlipLTCCalulationMap,\n LoanCosts,\n LTCCalcOnPurchaseRehab,\n LTVARVCalc,\n Payments,\n RateFeeLLPA,\n} from \"./short-term-calculation.model\";\n\nexport const blendedLTCCalc: GenericFixAndFlipLTCCalulationMap[] =\n [\n {\n label: \"Total Cost\",\n accessor: \"totalCost\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Maximum Blended LTC ratio\",\n accessor: \"maxBlendedLTCRatio\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Blended LTC Maximum Loan\",\n accessor: \"blendedLTCMaxLoan\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n ];\n\nexport const ltcCalcOnPurchaseRehab: GenericFixAndFlipLTCCalulationMap[] =\n [\n {\n label: \"Max LTC on Purchase\",\n accessor: \"maxLTCOnPurchase\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"LTC Construction Budget\",\n accessor: \"LTCConBudget\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Purchase + Rehab Maximum Loan\",\n accessor: \"ltcCalcRehabMaxLoan\",\n transformer: (val) => `$ ${formatMoney(val, 0)}`,\n },\n ];\n\nexport const ltvARVCalc: GenericFixAndFlipLTCCalulationMap[] = [\n {\n label: \"After completed value\",\n accessor: \"afterCompletedVal\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Maximum LTV ratio\",\n accessor: \"maxLTVRatio\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"LTV Maximum Loan\",\n accessor: \"LTVMaxLoan\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n];\n\nexport const cashToClose: GenericFixAndFlipLTCCalulationMap[] = [\n {\n label: \"Purchase\",\n accessor: \"purchase\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Existing Payoff\",\n accessor: \"existingPayoff\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Construction Budget\",\n accessor: \"conBudget\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Total Loan Fees & Costs\",\n accessor: \"totalLoanFeesCost\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Estimated Loan Amount\",\n accessor: \"estimatedLoanAmt\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Estimated Cash Due From Borrower at Close\",\n labelAlt: \"Estimated Cash Due To Borrower at Close\",\n showLabelAltOnCondition: (val) => val > 0,\n accessor: \"estimatedCashAtClose\",\n transformer: (val: string | number) =>\n `$ ${formatMoney(Math.abs(+val), 0)}`,\n },\n];\n\nexport const loanCosts: GenericFixAndFlipLTCCalulationMap[] = [\n {\n label: \"Broker Fee\",\n accessor: \"brokerFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Interest Reserve\",\n accessor: \"interestReserve\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Origination Fee\",\n accessor: \"originationFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Deferred Origination Fee\",\n accessor: \"exitFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Underwriting and Processing Fee\",\n accessor: \"processingFee\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Broker Processing Fee\",\n accessor: \"brokerProcessingFee\",\n transformer: (val) => {\n return val === 0 ? \"N/A\" : `$ ${formatMoney(val, 0)}`;\n },\n },\n {\n label: \"Valuation Fee Paid Outside Closing\",\n accessor: \"appraisalFee\",\n transformer: (val: number | string) => {\n return val === 0 ? \"TBD\" : `$ ${formatMoney(val, 2)}`;\n },\n },\n {\n label: \"Total Loan Costs & Fees\",\n accessor: \"totalLoanCostFees\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n];\n\nexport const rateFeesLLPA: GenericFixAndFlipLTCCalulationMap[] = [\n {\n label: \"Base Rate\",\n accessor: \"baseRate\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Total Rate LLPA's\",\n accessor: \"totalRateLLPA\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Final Rate\",\n accessor: \"finalRate\",\n canOverride: true,\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Base Orig Fee\",\n accessor: \"baseOrigFee\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Total Orig Fee LLPA's\",\n accessor: \"totalOrigFeeLLPA\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Final Orig Fee\",\n accessor: \"finalOrigFee\",\n canOverride: true,\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n {\n label: \"Referral Fee\",\n accessor: \"referralFee\",\n transformer: (val: string | number) => `${toFixed(val, 2)} %`,\n },\n];\n\nexport const payments: GenericFixAndFlipLTCCalulationMap[] = [\n {\n label: \"Initial Monthly Payment:\",\n accessor: \"initMonthlyPayment\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Payment Fully Drawn\",\n accessor: \"paymentFullyDrawn\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n];\n\nexport const finalLoanAmount: GenericFixAndFlipLTCCalulationMap[] =\n [\n {\n label: \"Total Loan Amount\",\n accessor: \"loanAmt\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n {\n label: \"Initially Funded Loan Amount\",\n accessor: \"initFundedLoanAmt\",\n transformer: (val: string | number) => `$ ${formatMoney(val, 0)}`,\n },\n ];\n","import { GridItem, Heading, SimpleGrid } from \"@chakra-ui/layout\";\nimport { InputRightElement, useColorModeValue } from \"@chakra-ui/react\";\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { FixAndFlipCalculation } from \"../../lib/models/short-term/short-term-calculation.model\";\nimport {\n blendedLTCCalc,\n cashToClose,\n finalLoanAmount,\n loanCosts,\n ltcCalcOnPurchaseRehab,\n ltvARVCalc,\n payments,\n rateFeesLLPA,\n} from \"../../lib/models/short-term/short-term-loan-calculations-map\";\nimport FormSectionHeader from \"../common-quote/FormSectionHeader\";\nimport TextInputField from \"../form-fields/TextInputField\";\n\nfunction LoanCalculationsAndTerms({\n calculation,\n}: {\n calculation: FixAndFlipCalculation;\n}) {\n const checkTotal = (checkAmount: number) => {\n if (checkAmount === calculation.LTVARVCalc.totalLoanAmt) {\n return {\n color: \"var(--chakra-colors-green-500)\",\n textDecoration: \"underline\",\n };\n }\n return {};\n };\n let updatedLoanCosts = {\n ...calculation.LoanCosts,\n exitFee: calculation.exitFee,\n };\n\n const labelColor = useColorModeValue(\n \"var(--chakra-colors-gray-600)\",\n \"var(--chakra-colors-gray-400)\"\n );\n\n return (\n \n \n\n
\n \n \n Blended LTC Calc\n \n
\n \n {blendedLTCCalc.map((calc) => (\n
\n
{calc.label}
\n \n {calc.transformer\n ? calc.transformer(\n calculation.BlendedLTCCalc[calc.accessor]\n )\n : calculation.BlendedLTCCalc[calc.accessor]}\n \n
\n ))}\n \n }\n />\n \n \n
\n
\n\n \n \n LTC Calc on Purchase + Rehab\n \n
\n \n {ltcCalcOnPurchaseRehab.map((calc) => (\n
\n
{calc.label}
\n \n {calc.transformer\n ? calc.transformer(\n calculation.LTCCalcOnPurchaseRehab[calc.accessor]\n )\n : calculation.LTCCalcOnPurchaseRehab[calc.accessor]}\n \n
\n ))}\n \n }\n />\n \n \n
\n
\n\n \n \n LTV/ARV Calc\n \n
\n \n {ltvARVCalc.map((calc) => (\n
\n
{calc.label}
\n
\n {calc.transformer\n ? calc.transformer(calculation.LTVARVCalc[calc.accessor])\n : calculation.LTVARVCalc[calc.accessor]}\n
\n
\n ))}\n \n }\n />\n \n \n
\n
\n\n \n \n Final Loan Amount\n \n
\n \n {finalLoanAmount.map((calc) => (\n
\n
{calc.label}
\n \n {calc.transformer\n ? calc.transformer(\n calculation.LTCCalcOnPurchaseRehab[calc.accessor]\n )\n : calculation.LTCCalcOnPurchaseRehab[calc.accessor]}\n \n
\n ))}\n \n
\n
\n\n \n \n Loan Costs\n \n
\n \n {loanCosts.map((calc) => (\n
\n
{calc.label}
\n
\n {calc.transformer\n ? calc.transformer(updatedLoanCosts[calc.accessor] ?? 0)\n : updatedLoanCosts[calc.accessor]}\n
\n
\n ))}\n \n
\n
\n\n \n \n Cash to Close\n \n
\n \n {cashToClose.map((calc) => (\n
\n
\n {calc.showLabelAltOnCondition\n ? calc.showLabelAltOnCondition(\n calculation.CashToClose[calc.accessor]\n )\n ? calc.labelAlt\n : calc.label\n : calc.label}\n
\n
\n {calc.transformer\n ? calc.transformer(calculation.CashToClose[calc.accessor])\n : calculation.CashToClose[calc.accessor]}\n
\n
\n ))}\n \n
\n
\n\n \n \n Rate & Fees LLPA's\n \n
\n \n {rateFeesLLPA.map((calc) => (\n
\n
{calc.label}
\n
\n {calc.transformer\n ? calc.transformer(calculation.RateFeeLLPA[calc.accessor])\n : calculation.RateFeeLLPA[calc.accessor]}\n
\n
\n ))}\n \n
\n
\n\n \n \n Payments\n \n
\n \n {payments.map((calc) => (\n
\n
{calc.label}
\n
\n {calc.transformer\n ? calc.transformer(calculation.Payments[calc.accessor])\n : calculation.Payments[calc.accessor]}\n
\n
\n ))}\n \n
\n
\n
\n
\n );\n}\n\nconst LoanCalculationsSection = styled.section<{ labelColor: string }>`\n dl {\n dt {\n letter-spacing: 0.25px;\n color: ${(props) => props.labelColor};\n padding-bottom: var(--chakra-space-2);\n font-size: var(--chakra-fontSizes-sm);\n }\n }\n`;\n\nconst CalculationSection = styled.section`\n margin-top: var(--chakra-space-10);\n`;\n\nexport default LoanCalculationsAndTerms;\n","import {\n FormControl,\n FormControlProps,\n FormLabel,\n Radio,\n} from \"@chakra-ui/react\";\nimport React from \"react\";\nimport useInProgressDisable from \"../../hooks/useInProgressDisable\";\n\nexport type RadioFieldProps = {\n label?: string;\n name: string;\n errorText?: string;\n isChecked?: boolean;\n value?: number;\n onChange?: (e: any) => void;\n disabled?: boolean;\n radioProps?: FormControlProps;\n};\n\nfunction RadioField(props: RadioFieldProps) {\n const { name, isChecked, onChange, label, radioProps, disabled, value } =\n props;\n\n return (\n \n \n {label}\n \n \n \n );\n}\n\nexport default RadioField;\n","import {\n FormControl,\n FormControlProps,\n FormLabel,\n Switch,\n} from \"@chakra-ui/react\";\nimport React, { useState } from \"react\";\nimport useInProgressDisable from \"../../hooks/useInProgressDisable\";\nimport { YesNo } from \"../../lib/models/enums\";\n\nexport type SwitchFieldProps = {\n label?: string;\n name: string;\n size?: string;\n errorText?: string;\n inputValue?: YesNo;\n changeHandler?: (includedInQuote: YesNo) => void;\n disabled?: boolean;\n switchProps?: FormControlProps;\n};\n\nfunction SwitchField(props: SwitchFieldProps) {\n const {\n name,\n inputValue,\n changeHandler,\n size,\n label,\n switchProps,\n disabled,\n } = props;\n const [checked, setChecked] = useState(inputValue ?? YesNo.No);\n\n const handleChange = (e: any) => {\n const checked = e.target.checked;\n const value = checked ? YesNo.Yes : YesNo.No;\n setChecked(value);\n if (changeHandler) {\n changeHandler(value);\n }\n };\n\n return (\n \n \n {label}\n \n \n \n );\n}\n\nexport default SwitchField;\n","import { CheckIcon, CloseIcon, EditIcon } from \"@chakra-ui/icons\";\nimport { Input, InputGroup, InputRightElement } from \"@chakra-ui/input\";\nimport { Box, Flex, Text } from \"@chakra-ui/layout\";\nimport { Button, ButtonGroup, IconButton } from \"@chakra-ui/react\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { checkIfDecimal } from \"../../lib/utils\";\n\nfunction RentalScenarioTableInput({\n inputValue,\n changeHandler,\n}: {\n inputValue: string;\n changeHandler: (value: number) => void;\n}) {\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(inputValue);\n const [initialValue] = useState(inputValue);\n const inputRef = useRef(null);\n\n const handleSaveClick = () => {\n changeHandler(+value);\n setIsEditing(!isEditing);\n };\n\n const handleCancelClick = () => {\n setValue(initialValue);\n setIsEditing(!isEditing);\n };\n\n const handleEditClick = () => {\n setIsEditing(!isEditing);\n };\n\n useEffect(() => {\n if (isEditing && inputRef.current) {\n const target = inputRef.current;\n target.select();\n }\n }, [isEditing]);\n\n return (\n \n {isEditing ? (\n \n \n ) => {\n let click = e.target as HTMLInputElement;\n click.select();\n }}\n onChange={(e) => {\n setValue(e.target.value);\n }}\n />\n \n \n\n \n }\n />\n }\n />\n \n \n ) : (\n <>\n \n {checkIfDecimal(+value)}%\n \n }\n marginTop={2}\n >\n Edit\n \n \n )}\n \n );\n}\n\nexport default RentalScenarioTableInput;\n","import React from \"react\";\nimport { Flex } from \"@chakra-ui/layout\";\n\nfunction RentalScenarioTableNumber({\n label,\n symbol,\n }: {\n label: string | number;\n symbol: string;\n }) {\n return (\n \n \n {symbol}\n {label}\n \n \n );\n }\n\n export default RentalScenarioTableNumber;","import { Badge, Box } from \"@chakra-ui/layout\";\nimport { useColorModeValue } from \"@chakra-ui/react\";\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\nimport useQuote from \"../../hooks/useQuote\";\nimport { darkMode, lightMode } from \"../../lib/models/color-mode-colors\";\nimport { YesNo } from \"../../lib/models/enums\";\nimport { RentalScenarioCalculation } from \"../../lib/models/rental/rental-calculation.model\";\nimport { Scenario } from \"../../lib/models/rental/rental.model\";\nimport { formatMoney, toFixed } from \"../../lib/number-transforms\";\nimport { QuoteUtils } from \"../../lib/quote-utils\";\nimport FormSectionHeader from \"../common-quote/FormSectionHeader\";\nimport RadioField from \"../form-fields/RadioField\";\nimport SwitchField from \"../form-fields/SwitchField\";\nimport RentalScenarioTableInput from \"./RentalScenarioTableInput\";\nimport RentalScenarioTableNumber from \"./RentalScenarioTableNumber\";\n\nfunction RentalScenarios({\n scenarios,\n setPreferredLoanAmt,\n}: {\n actionHandler?: () => void;\n scenarios: RentalScenarioCalculation[];\n setPreferredLoanAmt: any;\n}) {\n const quoteContext = useQuote();\n const { state, dispatch } = quoteContext;\n const { metadata } = state;\n const { isNewQuote } = state;\n const [selectedLtvValue, setSelectedLtvValue] = React.useState();\n const preferredScenario = state.rentalQuoteScenarios.find(\n (x) => x.preferred === YesNo.Yes\n );\n const headerBg = useColorModeValue(lightMode[100], darkMode[200]);\n const headerTextColor = useColorModeValue(\"#777676\", \"white\");\n const primaryScenarioColor = useColorModeValue(\"#E2E8F0\", \"#353e4f\");\n\n React.useEffect(() => {\n if (isNewQuote) {\n dispatch({\n type: \"SCENARIO_LOADED\",\n payload: QuoteUtils.GenerateRentalQuoteScenarios(),\n });\n }\n }, [isNewQuote, dispatch]);\n\n const updateScenario = React.useCallback(\n (id: number, update: Partial): Scenario | null => {\n const scenario = state.rentalQuoteScenarios.find(\n (x) => x.scenarioId === id\n );\n\n if (!scenario) return null;\n\n const updateFields = {\n ...scenario,\n ...update,\n };\n\n dispatch({\n type: \"SCENARIO_UPDATE\",\n payload: updateFields,\n });\n\n return updateFields;\n },\n [dispatch, state.rentalQuoteScenarios]\n );\n\n const onScenarioLTVUpdate = (scenarioId: number, updatedValue: number) => {\n updateScenario(scenarioId, { ltvPercentage: updatedValue });\n };\n\n const onScenarioQuoteToggle = (\n scenarioId: number,\n includedInQuote: YesNo\n ) => {\n updateScenario(scenarioId, { included: includedInQuote });\n };\n\n const onPreferredScenarioToggle = React.useCallback(\n (scenarioId: number) => {\n updateScenario(scenarioId, { preferred: YesNo.Yes });\n\n setSelectedLtvValue(scenarioId);\n },\n [updateScenario]\n );\n\n React.useEffect(() => {\n if (!scenarios) return;\n const scenario = state.rentalQuoteScenarios.find(\n (x) => x.preferred === YesNo.Yes\n );\n\n if (!scenario) {\n onPreferredScenarioToggle(1);\n }\n\n setSelectedLtvValue(scenario?.scenarioId ?? 1);\n\n if (preferredScenario) {\n const preferredScenarioLoanAmt =\n scenarios[(preferredScenario.scenarioId ?? 1) - 1].loanAmt;\n setPreferredLoanAmt(preferredScenarioLoanAmt);\n }\n }, [\n scenarios,\n state.rentalQuoteScenarios,\n onPreferredScenarioToggle,\n setPreferredLoanAmt,\n preferredScenario,\n ]);\n return (\n
\n \n \n \n {metadata?.underwriterStatus !== \"Not Submitted\" && (\n <>\n \n \n \n \n Underwriting Scenario\n \n \n \n \n \n \n \n \n )}\n \n \n Loan to Value\n {state.rentalQuoteScenarios.map((scenario) => (\n \n \n onScenarioLTVUpdate(scenario.scenarioId, value)\n }\n inputValue={scenario.ltvPercentage.toString()}\n />\n \n ))}\n \n \n Preferred Scenario\n {state.rentalQuoteScenarios.map((scenario) => (\n \n \n onPreferredScenarioToggle(+e.target.value)\n }\n name={`preferredScenario${scenario.scenarioId}`}\n />\n \n ))}\n \n \n Include in Quote\n {state.rentalQuoteScenarios.map((scenario) => (\n \n \n onScenarioQuoteToggle(\n scenario.scenarioId,\n includedInQuote\n )\n }\n name={`scenario${scenario.scenarioId}`}\n inputValue={scenario.included}\n size=\"md\"\n switchProps={{ justifyContent: \"center\" }}\n />\n \n ))}\n \n \n Eligibility\n {scenarios.map((scenario, index) => (\n \n \n {scenario.ltvEligibility}\n \n \n ))}\n \n \n Loan Amount\n {scenarios.map((scenario, index) => {\n return (\n \n \n \n );\n })}\n \n \n Cash To\n {scenarios.map((scenario, index) => {\n return (\n \n \n \n );\n })}\n \n \n Interest Rate\n {scenarios.map((scenario, index) => {\n return (\n \n \n \n );\n })}\n \n \n Origination Fee\n {scenarios.map((scenario, index) => {\n return (\n \n \n \n );\n })}\n \n \n Buy Up / Buy Down Fee\n {scenarios.map((scenario, index) => {\n return (\n \n \n \n );\n })}\n \n \n RDSR\n {scenarios.map((scenario, index) => {\n return (\n \n \n \n );\n })}\n \n \n \n \n
\n );\n}\n\nconst ScenarioTable = styled.table<{\n headerBg: string;\n headerTextColor: string;\n primaryScenarioColor: string;\n}>`\n width: 100%;\n margin-top: var(--chakra-space-4);\n\n tr:not(:last-of-type) {\n border-bottom: 1px solid var(--chakra-colors-gray-200);\n }\n\n th,\n td {\n padding: var(--chakra-space-4);\n }\n\n th {\n color: #777676;\n color: ${(props) => props.headerTextColor};\n font-weight: normal;\n text-align: left;\n left: 0;\n top: 0;\n background: ${(props) => props.headerBg};\n opacity: 1;\n position: sticky;\n }\n\n td {\n font-weight: 500;\n min-width: 200px;\n }\n\n .center-text {\n text-align: center;\n }\n\n .right-text {\n text-align: right;\n }\n\n .dashed-box {\n border-width: 5px;\n border-style: dashed;\n border-color: ${(props) => props.primaryScenarioColor};\n }\n\n .underwriting-scenario-text {\n font-weight: normal;\n opacity: 1;\n text-align: center;\n padding-bottom: 0;\n border-bottom: 2px solid ${(props) => props.primaryScenarioColor};\n }\n`;\n\nexport default RentalScenarios;\n","import React from 'react';\nimport { FixAndFlipCalculation } from '../../lib/models/short-term/short-term-calculation.model';\nimport { RentalCalculation } from '../../lib/models/rental/rental-calculation.model';\nimport LoanCalculationsAndTerms from '../stf-quote/LoanCalculationsAndTerms';\nimport RentalScenarios from '../rental-quote/RentalScenarios';\nimport { CalculationType } from '../../state/quote-reducer';\n\nexport interface QuoteCalcInfoProps {\n isFnf: boolean;\n calculation: CalculationType;\n setPreferredLoanAmt: React.Dispatch> | undefined;\n }\n\nconst QuoteCalcInfo = (props: QuoteCalcInfoProps) => {\n return (\n <>\n {props.isFnf ? (\n \n ) : (\n \n )}\n \n )\n}\n\nexport default QuoteCalcInfo;","import { Box, useColorModeValue } from \"@chakra-ui/react\";\nimport React, { Dispatch, SetStateAction } from \"react\";\nimport TabSwitcher from \"../TabSwitcher\";\nimport FormLoadingOverlay from \"../common-quote/FormLoadingOverlay\";\nimport FormTabsContainer from \"../common-quote/FormTabsContainer\";\nimport Discussion from \"../common-quote/Discussion\";\nimport QuoteOverrideContent from \"./QuoteOverrideContent\";\nimport QuoteCalcInfo from \"./QuoteCalcInfo\";\nimport { RentalQuote } from \"../../lib/models/rental/rental.model\";\nimport { FixAndFlipQuote } from \"../../lib/models/short-term/short-term.model\";\nimport { FormSectionStatus } from \"../../lib/models/form-section-status.model\";\nimport { FixAndFlipForm } from \"../../lib/models/short-term/short-term-form.model\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { CalculationType } from \"../../state/quote-reducer\";\nimport { lightMode, darkMode } from \"../../lib/models/color-mode-colors\";\n\nexport interface QuoteFormTabsProps {\n isCalculating: boolean | undefined;\n quoteTabs: string[];\n setTabIndex: React.Dispatch>;\n tabIndex: number;\n formStatusSections: FormSectionStatus[];\n calculation: CalculationType;\n isFnf: boolean;\n quote: FixAndFlipQuote | RentalQuote | null;\n formActionHandler: (action: QuoteFormActions, values: FixAndFlipForm) => void;\n preferredLoanAmt: number | undefined;\n setPreferredLoanAmt: Dispatch> | undefined;\n}\n\nconst QuoteFormTabs = (props: QuoteFormTabsProps) => {\n const bgColor = useColorModeValue(lightMode[100], darkMode[200]);\n return (\n <>\n {props.isCalculating && (\n \n )}\n \n \n {props.quoteTabs.length > 1 && (\n \n props.setTabIndex(index)}\n />\n \n )}\n \n }\n calcInfo={\n \n }\n discussionContent={}\n isFnf={props.isFnf}\n />\n \n \n \n );\n};\n\nexport default QuoteFormTabs;\n","import { useDisclosure } from \"@chakra-ui/hooks\";\nimport { Box, Flex } from \"@chakra-ui/layout\";\nimport { SlideFade } from \"@chakra-ui/transition\";\nimport { Formik } from \"formik\";\nimport React, { useState } from \"react\";\nimport useComments from \"../../hooks/useComments\";\nimport useGetFormTabs from \"../../hooks/useGetFormTabs\";\nimport useQuote from \"../../hooks/useQuote\";\nimport useUser from \"../../hooks/useUser\";\nimport { FormSectionStatus } from \"../../lib/models/form-section-status.model\";\nimport {\n RentalForm,\n RentalPremierForm,\n} from \"../../lib/models/rental/rental-form.model\";\nimport { FixAndFlipCalculation } from \"../../lib/models/short-term/short-term-calculation.model\";\nimport {\n ExternalFixAndFlipFormSchema,\n FixAndFlipForm,\n FixAndFlipFormSchema,\n} from \"../../lib/models/short-term/short-term-form.model\";\nimport {\n BorrowerInfo,\n DealTerms,\n FixAndFlipQuote,\n LoanSummary,\n LoanTerm,\n} from \"../../lib/models/short-term/short-term.model\";\nimport { generateShortTermFinancePdf } from \"../../lib/pdf-generator\";\nimport { QuoteUtils } from \"../../lib/quote-utils\";\nimport { PdfGenerationActions } from \"../../lib/types/PDFGenerationActions\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { QuoteFormProps } from \"../../lib/types/QuoteFormProps\";\nimport QuoteBoxBottom from \"./QuoteBoxBottom\";\nimport QuoteBoxTop from \"./QuoteBoxTop\";\nimport QuoteFormTabs from \"./QuoteFormTabs\";\n\nfunction FixAndFlipQuoteForm({\n quote,\n submitHandler,\n saveHandler,\n saveQuoteMetrics,\n calculateHandler,\n deleteHandler,\n isCalculating,\n isLoading,\n}: QuoteFormProps) {\n const quoteContext = useQuote();\n const userContext = useUser();\n const { comments } = useComments();\n\n const [form] = useState(\n quote ? new FixAndFlipForm(quote) : new FixAndFlipForm(null)\n );\n\n const [tabIndex, setTabIndex] = useState(0);\n const [isPdfLoading, setPdfLoading] = useState(false);\n const { state } = quoteContext;\n const { sfProfile, isEmployee } = userContext;\n const { quoteCalculation: calculation, metadata } = state;\n const { isOpen, onOpen, onClose } = useDisclosure();\n const quoteTabs = useGetFormTabs();\n\n const formExportHandler = (\n action: PdfGenerationActions,\n values: FixAndFlipForm\n ) => {\n Promise.resolve(QuoteUtils.FixAndFlipFormToQuote(values))\n .then((fixAndFlipQuote: FixAndFlipQuote) => {\n if (fixAndFlipQuote) {\n setPdfLoading(true);\n Promise.resolve(generatePdf(fixAndFlipQuote, action))\n .then(() => {})\n .catch((error) => console.error(error));\n Promise.resolve(saveQuoteMetrics(\"PDF\"))\n .then(() => {})\n .catch((error) => console.error(error));\n setPdfLoading(false);\n }\n })\n .catch((error) => console.error(error));\n };\n\n const formActionHandler = (\n action: QuoteFormActions,\n values: FixAndFlipForm\n ) => {\n const sfValues = state.sfIntegration;\n Promise.resolve(\n QuoteUtils.FixAndFlipFormToQuote({ ...values, ...sfValues })\n )\n .then((fixAndFlipQuote: FixAndFlipQuote) => {\n if (action === \"CALCULATE\") {\n calculateHandler(fixAndFlipQuote);\n } else if (action === \"SAVE\") {\n saveHandler(fixAndFlipQuote);\n } else if (action === \"SAVE_AS\") {\n onOpen();\n } else if (action === \"SUBMIT\") {\n submitHandler(fixAndFlipQuote);\n } else if (action === \"SUBMIT_FOR_REVIEW\") {\n submitHandler(fixAndFlipQuote);\n } else if (action === \"DELETE\") {\n deleteHandler(fixAndFlipQuote);\n }\n })\n .catch((error) => console.error(error));\n };\n\n const handleSaveAs = (\n values: FixAndFlipForm | RentalForm | RentalPremierForm\n ) => {\n Promise.resolve(QuoteUtils.FixAndFlipFormToQuote(values as FixAndFlipForm))\n .then((fixAndFlipQuote: FixAndFlipQuote) => {\n saveHandler(fixAndFlipQuote, true);\n })\n .catch((error) => console.error(error));\n };\n\n const generatePdf = async (\n quote: FixAndFlipQuote,\n action: PdfGenerationActions\n ) => {\n try {\n await generateShortTermFinancePdf(\n {\n quote,\n calculation: state.quoteCalculation as FixAndFlipCalculation,\n action,\n userProfile: sfProfile,\n metadata: metadata,\n },\n quote.quoteName,\n comments\n );\n } catch (err) {\n console.error(err);\n }\n };\n\n return (\n {}}\n onReset={() => {}}\n validationSchema={\n isEmployee ? FixAndFlipFormSchema : ExternalFixAndFlipFormSchema\n }\n >\n <>\n \n \n \n\n \n \n \n \n\n \n \n \n \n );\n}\n\nexport default FixAndFlipQuoteForm;\n\nconst formStatusSections: FormSectionStatus[] = [\n {\n label: \"Loan Summary\",\n id: \"loan-summary\",\n fields: Object.keys(new LoanSummary()),\n status: \"info\",\n value: \"loanSummary\",\n },\n {\n label: \"Borrower Information\",\n id: \"borrower-information\",\n fields: Object.keys(new BorrowerInfo()),\n status: \"info\",\n value: \"borrowerInformation\",\n numberOfOptionalFields: 1,\n },\n {\n label: \"Loan Terms\",\n id: \"loan-terms\",\n fields: Object.keys(new LoanTerm()),\n status: \"info\",\n value: \"loanTerms\",\n },\n {\n label: \"Deal Terms\",\n id: \"deal-terms\",\n fields: Object.keys(new DealTerms()),\n status: \"info\",\n value: \"dealTerms\",\n },\n];\n","import { Box, Flex } from \"@chakra-ui/layout\";\nimport { useDisclosure } from \"@chakra-ui/react\";\nimport { Formik } from \"formik\";\nimport React, { useState } from \"react\";\nimport useComments from \"../../hooks/useComments\";\nimport useGetFormTabs from \"../../hooks/useGetFormTabs\";\nimport useQuote from \"../../hooks/useQuote\";\nimport useUser from \"../../hooks/useUser\";\nimport { FormSectionStatus } from \"../../lib/models/form-section-status.model\";\nimport { RentalCalculation } from \"../../lib/models/rental/rental-calculation.model\";\nimport {\n ExternalRentalFormSchema,\n RentalBorrowerInformation,\n RentalForm,\n RentalFormSchema,\n RentalPremierForm,\n RentalPricing,\n RentalPropertySummary,\n} from \"../../lib/models/rental/rental-form.model\";\nimport {\n RentalPremierQuote,\n RentalQuote,\n} from \"../../lib/models/rental/rental.model\";\nimport { FixAndFlipForm } from \"../../lib/models/short-term/short-term-form.model\";\nimport { FixAndFlipQuote } from \"../../lib/models/short-term/short-term.model\";\nimport { generateRentalPdf } from \"../../lib/pdf-generator\";\nimport { QuoteUtils } from \"../../lib/quote-utils\";\nimport { PdfGenerationActions } from \"../../lib/types/PDFGenerationActions\";\nimport { QuoteFormActions } from \"../../lib/types/QuoteFormActions\";\nimport { QuoteFormProps } from \"../../lib/types/QuoteFormProps\";\nimport { QuoteType } from \"../../lib/types/QuoteType\";\nimport { QuotingType } from \"../../state/quote-reducer\";\nimport QuoteBoxBottom from \"./QuoteBoxBottom\";\nimport QuoteBoxTop from \"./QuoteBoxTop\";\nimport QuoteFormTabs from \"./QuoteFormTabs\";\n\nfunction RentalQuoteForm({\n quote,\n submitHandler,\n saveHandler,\n deleteHandler,\n saveQuoteMetrics,\n calculateHandler,\n isCalculating,\n}: QuoteFormProps) {\n const quoteContext = useQuote();\n const userContext = useUser();\n const { comments } = useComments();\n\n const [form] = useState(\n setInitialRentalForm(quote, quote?.quoteType)\n );\n const [loadingPdf, setLoadingPdf] = useState(false);\n const { state, dispatch } = quoteContext;\n const { quoteCalculation: calculation, metadata } = state;\n const { sfProfile, isEmployee } = userContext;\n const { isOpen, onOpen, onClose } = useDisclosure();\n const [tabIndex, setTabIndex] = useState(0);\n const quoteTabs = useGetFormTabs();\n const [preferredLoanAmt, setPreferredLoanAmt] = useState();\n\n const formExportHandler = (action: PdfGenerationActions, formValues: any) => {\n if (state.quoteType === \"Rental\") {\n Promise.resolve(QuoteUtils.RentalFormToQuote(formValues))\n .then((quote: RentalQuote) => {\n quote.quoteType = \"Rental\";\n savePdf(quote, quote.quoteType, action);\n })\n .catch((error) => {\n console.error(error);\n });\n } else {\n const premierForm = state.quote\n ? new RentalPremierForm(state.quote)\n : new RentalPremierForm(null);\n const values = { ...premierForm, ...formValues };\n Promise.resolve(QuoteUtils.RentalFormToPremierQuote(values))\n .then((quote: RentalPremierQuote) => {\n quote.quoteType = \"Premier\";\n savePdf(quote, quote.quoteType, action);\n })\n .catch((error) => {\n console.error(error);\n });\n }\n };\n\n const savePdf = (\n quote: RentalQuote | RentalPremierQuote,\n quoteType: QuoteType,\n action: PdfGenerationActions\n ) => {\n if (!quote.scenario) {\n quote.scenario = QuoteUtils.GenerateRentalQuoteScenarios();\n }\n\n setLoadingPdf(true);\n\n Promise.resolve(\n normalizeQuoteForType(generatePdf(quote, quoteType, action))\n )\n .then(() => {})\n .catch((error) => {\n console.error(error);\n });\n\n Promise.resolve(saveQuoteMetrics(\"PDF\"))\n .then(() => {})\n .catch((error) => {\n console.error(error);\n });\n\n setLoadingPdf(false);\n };\n\n const normalizeQuoteForType = async (formValues: any) => {\n let quote: RentalQuote | RentalPremierQuote;\n let hasScenarios: boolean = false;\n\n if (state.quoteType === \"Rental\") {\n const quoteFromState = state.quote as RentalQuote;\n const rental = await QuoteUtils.RentalFormToQuote(formValues);\n rental.quoteType = \"Rental\";\n quote = rental;\n\n if (quoteFromState) {\n hasScenarios = !!quoteFromState.scenario?.length;\n }\n } else {\n const quoteFromState = state.quote as RentalPremierQuote;\n const premierForm = state.quote\n ? new RentalPremierForm(state.quote)\n : new RentalPremierForm(null);\n const values = { ...premierForm, ...formValues };\n const premier = await QuoteUtils.RentalFormToPremierQuote(values);\n premier.quoteType = \"Premier\";\n quote = premier;\n\n if (quoteFromState) {\n hasScenarios = !!quoteFromState.scenario?.length;\n }\n }\n\n if (!hasScenarios) {\n quote.scenario = QuoteUtils.GenerateRentalQuoteScenarios();\n } else {\n quote.scenario = state.rentalQuoteScenarios;\n }\n\n return quote;\n };\n\n const formActionHandler = (action: QuoteFormActions, formValues: any) => {\n const sfValues = state.sfIntegration;\n Promise.resolve(normalizeQuoteForType({ ...formValues, ...sfValues }))\n .then((quote: RentalQuote | RentalPremierQuote) => {\n dispatch({\n type: \"QUOTE_UPDATED\",\n payload: {\n quote,\n },\n });\n if (action === \"CALCULATE\") {\n calculateHandler(quote);\n } else if (action === \"SAVE\") {\n saveHandler(quote);\n } else if (action === \"SAVE_AS\") {\n onOpen();\n } else if (action === \"SUBMIT\") {\n submitHandler(quote);\n } else if (action === \"SUBMIT_FOR_REVIEW\") {\n submitHandler(quote);\n } else if (action === \"DELETE\") {\n deleteHandler(quote);\n }\n })\n .catch((error) => {\n console.error(error);\n });\n };\n\n const handleSaveAs = (\n values: FixAndFlipForm | RentalForm | RentalPremierForm\n ) => {\n Promise.resolve(normalizeQuoteForType(values))\n .then((quote) => {\n saveHandler(quote, true);\n })\n .catch((error) => {\n console.log(error);\n });\n };\n\n const generatePdf = async (\n quote: QuotingType,\n quoteType: QuoteType | null,\n action: PdfGenerationActions\n ) => {\n try {\n await generateRentalPdf(\n {\n quote: quote as RentalQuote,\n calculation: state.quoteCalculation as RentalCalculation,\n scenarios: state.rentalQuoteScenarios,\n action,\n userProfile: sfProfile,\n metadata: metadata,\n },\n quote?.quoteName,\n quoteType,\n comments\n );\n } catch (err) {\n console.error(err);\n }\n };\n\n return (\n {}}\n validationSchema={\n isEmployee ? RentalFormSchema : ExternalRentalFormSchema\n }\n enableReinitialize={true}\n >\n <>\n \n \n \n\n \n \n\n \n \n \n \n );\n}\n\nexport default RentalQuoteForm;\n\nconst setInitialRentalForm = (\n quote: RentalQuote | FixAndFlipQuote | null,\n quoteType: QuoteType = \"Rental\"\n) => {\n if (!quote) {\n return new RentalForm(null);\n }\n\n if (quoteType === \"Rental\") {\n return quote ? new RentalForm(quote) : new RentalForm(null);\n } else {\n return quote ? new RentalPremierForm(quote) : new RentalPremierForm(null);\n }\n};\n\nconst formStatusSections: FormSectionStatus[] = [\n {\n label: \"Borrower Information\",\n id: \"borrower-information\",\n fields: Object.keys(new RentalBorrowerInformation()),\n status: \"info\",\n value: \"borrowerInformation\",\n },\n {\n label: \"Property Summary\",\n id: \"property-summary\",\n fields: Object.keys(new RentalPropertySummary()),\n status: \"info\",\n value: \"propertySummary\",\n },\n {\n label: \"Pricing\",\n id: \"pricing\",\n fields: Object.keys(new RentalPricing()),\n status: \"info\",\n value: \"pricing\",\n },\n];\n","import React from \"react\";\nimport { Prompt } from \"react-router\";\nimport WarningDialog from \"./WarningDialog\";\n\ninterface RouteLeavingGuardProps {\n when?: boolean | undefined;\n navigate: (path: string) => void;\n shouldBlockNavigation: (location: Location) => boolean;\n}\n\nfunction RouteLeavingGuard(props: RouteLeavingGuardProps) {\n const { when, navigate, shouldBlockNavigation } = props;\n\n const [modalVisible, setModalVisible] = React.useState(false);\n const [lastLocation, setLastLocation] = React.useState(null);\n const [confirmedNavigation, setConfirmedNavigation] = React.useState(false);\n\n const closeModal = () => {\n setModalVisible(false);\n };\n\n const handleBlockedNavigation = (nextLocation: Location): boolean => {\n if (!confirmedNavigation && shouldBlockNavigation(nextLocation)) {\n setModalVisible(true);\n setLastLocation(nextLocation);\n return false;\n }\n\n return true;\n };\n\n React.useEffect(() => {\n if (confirmedNavigation && lastLocation) {\n // Navigate to the previous blocked location with your navigate function\n navigate(lastLocation.pathname);\n }\n }, [confirmedNavigation, lastLocation, navigate]);\n\n const handleConfirmNavigationClick = () => {\n setModalVisible(false);\n setConfirmedNavigation(true);\n };\n\n return (\n <>\n handleBlockedNavigation(location)}\n />\n\n \n \n );\n}\n\nexport default RouteLeavingGuard;\n","import { useLocation } from \"react-router-dom\";\n\nfunction useQuery() {\n return new URLSearchParams(useLocation().search);\n}\n\nexport default useQuery","import { Button } from \"@chakra-ui/button\";\nimport { ArrowBackIcon } from \"@chakra-ui/icons\";\nimport { Box } from \"@chakra-ui/react\";\nimport React, { useEffect } from \"react\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport CommentsContextProvider from \"../components/CommentsContextProvider\";\nimport FormSkeletonLoader from \"../components/common-quote/FormSkeletonLoader\";\nimport FormStaleQuoteDialog from \"../components/common-quote/FormStaleQuoteDialog\";\nimport QuoteContextProvider from \"../components/common-quote/QuoteContextProvider\";\nimport FixAndFlipQuoteForm from \"../components/quote/FixAndFlipQuoteForm\";\nimport RentalQuoteForm from \"../components/quote/RentalQuoteForm\";\nimport RouteLeavingGuard from \"../components/RouteLeavingGuard\";\nimport useQuery from \"../hooks/useQuery\";\nimport useQuote from \"../hooks/useQuote\";\nimport { QuoteTypeEnum } from \"../lib/models/enums\";\nimport { QuoteType } from \"../lib/types/QuoteType\";\n\nfunction QuoteView() {\n const query = useQuery();\n const { id } = useParams();\n const [quoteType, setQuoteType] = React.useState(\n undefined\n );\n\n useEffect(() => {\n const quoteParams = query.get(\"type\")?.toLowerCase();\n\n if (!quoteParams) return;\n\n if (quoteParams === QuoteTypeEnum.stf) {\n setQuoteType(\"STF\");\n } else if (quoteParams === QuoteTypeEnum.rental) {\n setQuoteType(\"Rental\");\n } else {\n setQuoteType(\"Premier\");\n }\n }, [id, query]);\n\n return (\n <>\n {quoteType && (\n \n \n \n \n \n )}\n \n );\n}\n\nfunction QuoteConsumer() {\n const history = useHistory();\n const quoteContext = useQuote();\n\n const {\n state,\n saveQuoteHelper,\n calculateQuote,\n quoteType,\n saveQuoteMetrics,\n submitQuoteHandler,\n deleteQuote,\n quoteId,\n } = quoteContext;\n const { metadata } = state;\n\n const shouldBlockNavigation = (location: Location) => {\n const { location: locationFromHistory } = history;\n const { pathname: currentPathname } = locationFromHistory;\n\n if (location.pathname === currentPathname) {\n return false;\n }\n\n return true;\n };\n\n const handleBackClick = () => {\n history.location.state === undefined\n ? history.push(\"/quotes/my-quotes\")\n : history.goBack();\n };\n\n return (\n \n {state.isLoading ? (\n \n ) : (\n <>\n }\n variant=\"link\"\n size=\"sm\"\n color=\"brand.200\"\n marginBottom={4}\n >\n Back to Quotes\n \n\n {quoteType === \"Rental\" || quoteType === \"Premier\" ? (\n \n ) : (\n \n )}\n history.push(path)}\n />\n \n \n )}\n \n );\n}\n\nexport default QuoteView;\n","import { useToast, useColorModeValue } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport { QuoteApi } from \"../api/QuoteApi\";\nimport QuoteTableContainer from \"../components/QuoteTableContainer\";\nimport useUser from \"../hooks/useUser\";\nimport { Quote } from \"../lib/models/quote.model\";\nimport { QuoteUtils } from \"../lib/quote-utils\";\n\nfunction BorrowerByIdQuotesView() {\n const user = useUser();\n const toast = useToast();\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n const { id } = useParams<{ id: string }>();\n const { sfProfile } = user;\n const history = useHistory();\n const { sfAccounts } = useUser();\n\n const [quotes, setQuotes] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [borrower, setBorrower] = React.useState();\n\n const fetchQuotes = React.useCallback(() => {\n setLoading(true);\n\n QuoteApi.getBorrowerQuoteById(id)\n .then((res) => {\n const activeQuotes = res.data.map((x) => {\n x.quoteTypeLabel = QuoteUtils.PrettyPrintQuoteType(x.quoteType);\n x.createdBy = `${x.firstname} ${x.lastname}`;\n return x;\n });\n\n setQuotes(activeQuotes);\n })\n .catch((err) => {\n toast({\n title: \"Unable to Load Quotes\",\n description: \"An error has occurred when attempting to fetch quotes\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .finally(() => {\n setLoading(false);\n });\n }, [setQuotes, id, toast, toastVariant]);\n\n React.useEffect(() => {\n if (!id) return;\n\n if (sfAccounts) {\n const borrower = sfAccounts.find((x) => x.accountid === id);\n borrower ? setBorrower(borrower) : history.push(\"/quotes/my-quotes\");\n }\n\n fetchQuotes();\n }, [fetchQuotes, id, sfProfile, history, sfAccounts]);\n\n return (\n \n );\n}\n\nexport default BorrowerByIdQuotesView;\n","import QuotesView from \"../views/QuotesView\";\nimport QuoteView from \"../views/QuoteView\";\nimport MyQuotesView from \"../views/MyQuotesView\";\nimport { UserRole } from \"../lib/models/enums\";\nimport { elevatedUsers, internalUsers } from \"../lib/UserPermissions\";\nimport BrokerQuotesView from \"../views/BrokerQuotesView\";\nimport BrokerByIdQuotesView from \"../views/QuotesByBrokerView\";\nimport UserByIdQuotesView from \"../views/QuotesByUserView\";\nimport BorrowerByIdQuotesView from \"../views/QuotesByBorrowerView\";\nimport { LogoutView } from \"../views/LogoutView\";\n\nexport type Route = {\n path: string;\n name: string;\n Component: any;\n secured: boolean;\n exact: boolean;\n roles?: UserRole[];\n fallback?: string;\n};\n\nexport const routes: Route[] = [\n {\n path: \"/quotes\",\n name: \"All Quotes\",\n Component: QuotesView,\n secured: true,\n exact: true,\n roles: elevatedUsers,\n fallback: \"/quotes/my-quotes\",\n },\n {\n path: \"/quotes/my-quotes\",\n name: \"My Quotes\",\n Component: MyQuotesView,\n secured: true,\n exact: true,\n },\n {\n path: \"/quotes/users/:id\",\n name: \"User Quotes\",\n Component: UserByIdQuotesView,\n secured: true,\n exact: true,\n roles: elevatedUsers,\n },\n {\n path: \"/quotes/broker-quotes\",\n name: \"Broker Quotes\",\n Component: BrokerQuotesView,\n secured: true,\n exact: true,\n },\n {\n path: \"/quotes/brokers/:id\",\n name: \"Single Broker Quote\",\n Component: BrokerByIdQuotesView,\n roles: internalUsers,\n secured: true,\n exact: true,\n },\n {\n path: \"/quotes/borrowers/:id\",\n name: \"Single Borrower Quote\",\n Component: BorrowerByIdQuotesView,\n roles: internalUsers,\n secured: true,\n exact: true,\n },\n {\n path: \"/quotes/:id/edit\",\n name: \"Edit Quote\",\n Component: QuoteView,\n secured: true,\n exact: false,\n },\n {\n path: \"/quotes/new\",\n name: \"New Quote\",\n Component: QuoteView,\n secured: true,\n exact: false,\n },\n {\n path: \"/logout\",\n name: \"Log Out\",\n Component: LogoutView,\n secured: true,\n exact: false,\n },\n];\n","import { useColorModeValue, useToast } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { QuoteApi } from \"../api/QuoteApi\";\nimport QuoteTableContainer from \"../components/QuoteTableContainer\";\nimport useUser from \"../hooks/useUser\";\nimport { Quote } from \"../lib/models/quote.model\";\nimport { QuoteUtils } from \"../lib/quote-utils\";\n\nfunction MyQuotesView() {\n const [quotes, setQuotes] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const { user } = useUser();\n const toast = useToast();\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n\n const fetchQuotes = React.useCallback(() => {\n setLoading(true);\n\n if (!user?.email) {\n return;\n }\n\n QuoteApi.getQuotes({ username: user?.email, allquotes: false })\n .then((res) => {\n const activeQuotes = res.data.map((x) => {\n x.quoteTypeLabel = QuoteUtils.PrettyPrintQuoteType(x.quoteType);\n x.createdBy = `${x.firstname} ${x.lastname}`;\n return x;\n });\n\n setQuotes(activeQuotes);\n })\n .catch((err) => {\n toast({\n title: \"Unable to Load Quotes\",\n description: \"An error has occurred when attempting to fetch quotes\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .finally(() => setLoading(false));\n }, [setQuotes, user, toast, toastVariant]);\n\n React.useEffect(() => {\n fetchQuotes();\n }, [fetchQuotes]);\n\n return (\n \n );\n}\n\nexport default MyQuotesView;\n","import { useToast, useColorModeValue } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { QuoteApi } from \"../api/QuoteApi\";\nimport QuoteTableContainer from \"../components/QuoteTableContainer\";\nimport { Quote } from \"../lib/models/quote.model\";\nimport { QuoteUtils } from \"../lib/quote-utils\";\n\nfunction UserByIdQuotesView() {\n const toast = useToast();\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n const { id } = useParams<{ id: string }>();\n\n const [quotes, setQuotes] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [ownerName, setOwnerName] = React.useState();\n const fetchQuotes = React.useCallback(() => {\n setLoading(true);\n\n QuoteApi.getQuotesById(id)\n .then((res) => {\n const activeQuotes = res.data.map((x) => {\n x.quoteTypeLabel = QuoteUtils.PrettyPrintQuoteType(x.quoteType);\n x.createdBy = `${x.firstname} ${x.lastname}`;\n return x;\n });\n\n setQuotes(activeQuotes);\n setOwnerName(activeQuotes[0].createdBy);\n })\n .catch((err) => {\n toast({\n title: \"Unable to Load Quotes\",\n description: \"An error has occurred when attempting to fetch quotes\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .finally(() => {\n setLoading(false);\n });\n }, [setQuotes, id, toast, toastVariant]);\n\n React.useEffect(() => {\n fetchQuotes();\n }, [fetchQuotes]);\n\n return (\n \n );\n}\n\nexport default UserByIdQuotesView;\n","import { Box, useColorModeValue, useToast } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { QuoteApi } from \"../api/QuoteApi\";\nimport ComboBox from \"../components/form-fields/ComboBox\";\nimport QuoteTableContainer from \"../components/QuoteTableContainer\";\nimport useUser from \"../hooks/useUser\";\nimport { Quote } from \"../lib/models/quote.model\";\nimport { Broker } from \"../lib/models/sf-user-profile.model\";\nimport { QuoteUtils } from \"../lib/quote-utils\";\nimport { SelectItem } from \"../lib/types/SelectItem\";\n\nfunction BrokerQuotesView() {\n const toast = useToast();\n const { sfProfile } = useUser();\n\n const [quotes, setQuotes] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [activeBroker, setActiveBroker] = React.useState();\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n\n const brokerItems: SelectItem[] = React.useMemo(() => {\n if (sfProfile?.brokers) {\n return sfProfile?.brokers.map((broker) => ({\n label: broker.name,\n value: broker.accountid,\n }));\n }\n return [];\n }, [sfProfile?.brokers]);\n\n const [selectedBrokerItem, setSelectedBrokerItem] =\n React.useState(brokerItems[0]);\n\n React.useEffect(() => {\n if (!sfProfile?.brokers) {\n return;\n }\n setActiveBroker(sfProfile.brokers[0]);\n }, [sfProfile]);\n\n const handleBrokerSelect = (brokerItem: SelectItem | null) => {\n const selectBroker = sfProfile?.brokers.find(\n (broker) => broker.accountid === brokerItem?.value\n );\n\n setSelectedBrokerItem(brokerItem);\n setActiveBroker(selectBroker);\n };\n\n const fetchQuotes = React.useCallback(() => {\n setLoading(true);\n\n if (!activeBroker) {\n return;\n }\n\n QuoteApi.getQuotesForReviewById(activeBroker?.accountid)\n .then((res) => {\n const activeQuotes = res.data.map((x) => {\n x.quoteTypeLabel = QuoteUtils.PrettyPrintQuoteType(x.quoteType);\n x.createdBy = `${x.firstname} ${x.lastname}`;\n return x;\n });\n\n setQuotes(activeQuotes);\n })\n .catch((err) => {\n toast({\n title: \"Unable to Load Quotes\",\n description: \"An error has occurred when attempting to fetch quotes\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .finally(() => setLoading(false));\n }, [setQuotes, activeBroker, toast, toastVariant]);\n\n React.useEffect(() => {\n if (!activeBroker) {\n return;\n }\n fetchQuotes();\n }, [activeBroker, fetchQuotes]);\n\n return (\n \n \n \n \n \n );\n}\n\nexport default BrokerQuotesView;\n","import { useToast, useColorModeValue } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport { QuoteApi } from \"../api/QuoteApi\";\nimport QuoteTableContainer from \"../components/QuoteTableContainer\";\nimport useUser from \"../hooks/useUser\";\nimport { Quote } from \"../lib/models/quote.model\";\nimport { QuoteUtils } from \"../lib/quote-utils\";\n\nfunction BrokerByIdQuotesView() {\n const user = useUser();\n const toast = useToast();\n const toastVariant = useColorModeValue(\"subtle\", \"solid\");\n const { id } = useParams<{ id: string }>();\n const { sfProfile } = user;\n const history = useHistory();\n\n const [quotes, setQuotes] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [broker, setBroker] = React.useState();\n\n const fetchQuotes = React.useCallback(() => {\n setLoading(true);\n\n QuoteApi.getBrokerQuoteById(id)\n .then((res) => {\n const activeQuotes = res.data.map((x) => {\n x.quoteTypeLabel = QuoteUtils.PrettyPrintQuoteType(x.quoteType);\n x.createdBy = `${x.firstname} ${x.lastname}`;\n return x;\n });\n\n setQuotes(activeQuotes);\n })\n .catch((err) => {\n toast({\n title: \"Unable to Load Quotes\",\n description: \"An error has occurred when attempting to fetch quotes\",\n status: \"error\",\n variant: toastVariant,\n isClosable: true,\n position: \"top-right\",\n });\n })\n .finally(() => {\n setLoading(false);\n });\n }, [setQuotes, id, toast, toastVariant]);\n\n React.useEffect(() => {\n if (!id) return;\n\n if (sfProfile?.brokers) {\n const broker = sfProfile.brokers.find((x) => x.accountid === id);\n broker ? setBroker(broker) : history.push(\"/quotes/my-quotes\");\n }\n\n fetchQuotes();\n }, [fetchQuotes, id, sfProfile, history]);\n\n return (\n \n );\n}\n\nexport default BrokerByIdQuotesView;\n","import { useOktaAuth } from \"@okta/okta-react\";\n\nexport const LogoutView = () => {\n const { oktaAuth } = useOktaAuth();\n\n const logout = async () => {\n oktaAuth.tokenManager.clear();\n window.location.replace(\"/login\");\n };\n\n logout();\n\n return null;\n};\n","import { LoginCallback, useOktaAuth } from \"@okta/okta-react\";\nimport React from \"react\";\nimport { Redirect, Route, Switch, useHistory } from \"react-router\";\nimport { oktaInternalAuthConfig } from \"../lib/auth-config\";\nimport LoginSSOView from \"../views/LoginSSOView\";\nimport LoginView from \"../views/LoginView\";\nimport AuthenticatedLayout from \"../views/_AuthenticatedLayout\";\nimport GuardedRoute from \"./GuardedRoute\";\nimport { routes } from \"./index\";\n\nfunction AppRoutes() {\n const history = useHistory();\n const okta = useOktaAuth();\n const { authState } = okta;\n\n if (!authState) {\n if (!history.location.pathname.includes(\"callback\")) {\n return null;\n }\n }\n\n const onAuthResume = async () => {\n history.push(\"/login\");\n };\n\n const isLoggedIn = authState?.isAuthenticated;\n\n return (\n \n }\n />\n\n \n \n \n\n (\n \n )}\n />\n\n } />\n\n \n {isLoggedIn ? (\n \n \n {routes.map(\n ({ exact, path, Component, secured, roles, fallback }, key) =>\n secured ? (\n \n ) : (\n \n )\n )}\n \n \n \n \n \n ) : (\n \n )}\n \n \n );\n}\nexport default AppRoutes;\n","import { extendTheme } from \"@chakra-ui/react\";\nimport { createBreakpoints } from \"@chakra-ui/theme-tools\";\n\nconst Input = {\n variants: {\n outline: ({ colorMode }: { colorMode: string }) => ({\n field: {\n borderColor: \"gray.300\",\n _hover: {\n borderColor: \"gray.400\",\n },\n _autofill: {\n border: `1px solid ${colorMode === \"light\" ? \"gray.300\" : \"#FFFFFF\"}`,\n textFillColor: `${colorMode === \"light\" ? \"gray.700\" : \"#FFFFFF\"}`,\n boxShadow: `0 0 0px 1000px ${\n colorMode === \"light\" ? \"#FFFFFF\" : \"#1E293B\"\n } inset`,\n },\n },\n }),\n },\n};\n\nconst Select = {\n variants: {\n outline: {\n field: {\n borderColor: \"gray.300\",\n _hover: {\n borderColor: \"gray.400\",\n },\n },\n },\n },\n};\n\nconst Checkbox = {\n baseStyle: {\n control: {\n borderColor: \"gray.300\",\n\n _hover: {\n borderColor: \"gray.400\",\n },\n },\n },\n};\n\nconst FormLabel = {\n baseStyle: {\n fontSize: \"xs\",\n letterSpacing: \"0.25px\",\n },\n};\n\nconst FormError = {\n baseStyle: {\n text: {\n fontSize: \"xs\",\n letterSpacing: \"0.25px\",\n },\n },\n};\n\nconst Form = {\n baseStyle: {\n helperText: {\n fontSize: \"xs\",\n letterSpacing: \"0.25px\",\n },\n },\n};\n\nconst Button = {\n baseStyle: {\n fontWeight: \"500\",\n lineHeight: \"normal\",\n },\n\n variants: {\n link: ({ colorMode }: { colorMode: string }) => ({\n color: colorMode === \"light\" ? \"brand.500\" : \"white\",\n _hover: {\n color: colorMode === \"light\" ? \"brand.400\" : \"white\",\n },\n }),\n brand: {\n bg: \"brand.400\",\n color: \"white\",\n fontSize: \"sm\",\n borderColor: \"brand.500\",\n _hover: {\n bg: \"brand.300\",\n _disabled: {\n bg: \"brand:400\",\n opacity: 0.4,\n },\n },\n _active: {\n bg: \"brand.300\",\n },\n },\n },\n};\n\nconst Table = {\n baseStyle: ({ colorMode }: { colorMode: string }) => ({\n th: {\n bg: colorMode === \"light\" ? \"#F9FAFB\" : \"#334155\",\n },\n }),\n};\n\nconst breakpoints = createBreakpoints({\n sm: \"30em\",\n md: \"48em\",\n lg: \"61em\",\n xl: \"80.05em\",\n \"2xl\": \"96em\",\n});\n\nconst theme = extendTheme({\n initialColorMode: \"light\",\n useSystemColorMode: true,\n fonts: {\n heading: \"'Roboto', sans-serif\",\n body: \"'Roboto', sans-serif\",\n },\n colors: {\n brand: {\n 50: \"#C8E6FE\",\n 100: \"#7abef5\",\n 200: \"#0165B6\",\n 300: \"#0269BB\",\n 400: \"#015498\",\n 500: \"#01457C\",\n },\n darkMode: {\n 100: \"#0F3457\",\n 200: \"#1E293B\",\n 300: \"#0F172A\",\n },\n lightMode: {\n 100: \"#FFFFFF\",\n 200: \"#EDF2F7\",\n 300: \"#eeeff2\",\n },\n },\n breakpoints,\n components: {\n Button,\n Table,\n FormLabel,\n FormError,\n Form,\n Input,\n Checkbox,\n Select,\n },\n});\n\nexport default theme;\n","import { ChakraProvider, Tag } from \"@chakra-ui/react\";\nimport { OktaAuth, toRelativeUrl } from \"@okta/okta-auth-js\";\nimport { Security } from \"@okta/okta-react\";\nimport * as React from \"react\";\nimport { useHistory } from \"react-router\";\nimport UserContextProvider from \"./components/UserContextProvider\";\nimport { oktaInternalAuthConfig } from \"./lib/auth-config\";\nimport AppRoutes from \"./routes/AppRoutes\";\nimport theme from \"./theme/theme-config\";\n\nconst oktaAuth = new OktaAuth(oktaInternalAuthConfig);\n\nconst isDevUrl =\n window.location.origin !== process.env.REACT_APP_ENVIRONMENT_PROD_URL;\n\nexport const App = () => {\n const history = useHistory();\n\n const customAuthHandler = () => {\n history.push(\"/login\");\n };\n\n const restoreOriginalUri = async (\n _oktaAuth: OktaAuth,\n originalUri: string\n ) => {\n if (originalUri !== null) {\n history.replace(toRelativeUrl(originalUri, window.location.origin));\n } else {\n history.replace(toRelativeUrl(\"/\", window.location.origin));\n }\n };\n\n return (\n \n \n \n \n \n \n\n {isDevUrl && (\n \n {process.env.REACT_APP_ENVIRONMENT}\n \n )}\n \n );\n};\n","import { ReportHandler } from \"web-vitals\"\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import(\"web-vitals\").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry)\n getFID(onPerfEntry)\n getFCP(onPerfEntry)\n getLCP(onPerfEntry)\n getTTFB(onPerfEntry)\n })\n }\n}\n\nexport default reportWebVitals\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://cra.link/PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,\n ),\n)\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void\n onUpdate?: (registration: ServiceWorkerRegistration) => void\n}\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service \" +\n \"worker. To learn more, visit https://cra.link/PWA\",\n )\n })\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n if (installingWorker == null) {\n return\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://cra.link/PWA.\",\n )\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n } else {\n // At this point, everything has been precached.\n // It is the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\")\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration)\n }\n }\n }\n }\n }\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { \"Service-Worker\": \"script\" },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\")\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\",\n )\n })\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister()\n })\n .catch((error) => {\n console.error(error.message)\n })\n }\n}\n","import * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { App } from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport { ColorModeScript } from \"@chakra-ui/react\";\nimport theme from \"./theme/theme-config\";\n\nReactDOM.render(\n \n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://cra.link/PWA\nserviceWorker.unregister();\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}