{"version":3,"sources":["img/font_awesome/font_awesome1.js","img/font_awesome/font_awesome2.js","img/font_awesome/font_awesome.js","components/creditcard/CreditCardImmediateChargeWindow.js","components/search/FlatFeeAddonWindow.js","components/search/FlatFeeAddonConfirmationWindow.js","components/image/FlatFeeAddon.js","components/constants/constants.js","components/common/modal/Loading.js","../node_modules/typescript/lib sync","components/search/ImageConfirmOrderWindow.js","components/search/EscrowAddonWindow.js","components/search/CreditCardAuthWindow.js","components/common/page/ZoomableImage.js","components/search/PreviewWindow.js","components/common/function/contextMenuUtils.js","components/common/modal/Alert.js","utils/AjaxResult.js","utils/AjaxResponseHandler.js","redux/store/index.js","utils/DateValidation.js","components/common/form/DateField.js","components/common/form/PlatField.js","components/common/form/TextField.js","components/common/form/SelectField.js","components/common/form/RadioGroup.js","components/common/form/FieldRow.js","components/common/function/formattingUtils.js","components/common/function/userValidation.js","components/top/CurrentUser.js","components/top/CurrentUserChangePassword.js","components/top/Logout.js","redux/actions/loginActions.js","components/creditcard/EscrowRechargeAmountWindow.js","img/trimin_landshark_verysmall.png","components/top/InformationMain.js","components/top/Navigationbar.js","components/top/CommonTop.js","components/home/ContactUs.js","components/home/Disclaimer.js","components/home/LatestNewsBig.js","components/home/LatestNews.js","components/home/Links.js","components/home/NotableDates.js","components/home/TransactionReport.js","components/home/Transactions.js","components/home/LoginPageSlides.js","components/home/Home.js","components/side/SideNavigationLabel.js","components/side/SideNavigationToggle.js","components/side/SideNavigationNavLink.js","components/side/SideNavigationNumberedLabel.js","components/side/SideNavigationNumberedNavLink.js","components/common/page/TextFilter.js","components/common/page/SelectFilter.js","components/common/page/PageBanner.js","components/common/page/CountyNotes.js","components/common/form/PrimaryButton.js","components/common/form/ClearButton.js","components/common/form/CancelButton.js","components/common/form/SecondaryButton.js","components/common/form/CreditCardSearchAuthWindow.js","components/common/form/CreditCardPriceListWindow.js","components/common/form/CreditCardPriceListReAuthWindow.js","components/common/form/FormTemplate.js","redux/actions/commonStuff.js","redux/actions/controlPanelActions.js","redux/actions/searchActions.js","components/search/searchBy/SearchByAddress.js","components/search/searchBy/SearchByBookAndPage.js","components/search/searchBy/SearchByDate.js","components/search/searchBy/SearchByDocumentNumber.js","components/common/page/PaginatorHelper.js","components/common/selection/UserSelectionList.js","components/common/selection/AccountSelectionList.js","redux/actions/userManagerActions.js","components/common/page/SearchPaginator.js","components/search/searchResults/SearchResultsTable.js","components/search/searchResults/SearchResultsDetailsNoResults.js","components/search/searchResults/LegalDetails.js","components/search/searchResults/SearchResultsDetails.js","components/search/searchResults/TaxLienSearchResultsDetails.js","redux/actions/paginatorActions.js","components/common/page/Paginator.js","components/common/selection/PlatSelectionList.js","utils/FieldValidation.js","components/search/searchBy/SearchByLegalDescription.js","components/search/searchBy/SearchByName.js","components/search/searchBy/SearchByParcelId.js","components/search/searchBy/SearchByTorrensCertificate.js","components/search/searchBy/SearchByTorrensText.js","components/search/searchBy/SearchByTractIndexNMI.js","components/search/searchBy/SpecialSearchPlat.js","components/search/searchBy/SpecialSearchGrantorGranteeBook.js","components/search/searchBy/SpecialSearchTaxLien.js","components/external/TaxLinks.js","components/external/GisLinks.js","components/search/searchResults/SearchResults.js","components/search/searchResults/TractBookSearchResultsDetails.js","components/search/searchResults/TractBookSearchResultsTable.js","components/search/searchResults/TractBookSearchResults.js","components/search/searchResults/TaxLienSearchResultsTable.js","components/search/searchResults/TaxLienSearchResults.js","components/search/searchResults/TorrensSearchResultsDetails.js","components/search/searchResults/TorrensSearchResultsTable.js","components/search/searchResults/TorrensSearchResults.js","components/search/searchResults/GrantorGranteeBookSearchResultsDetails.js","components/search/searchResults/GrantorGranteeBookSearchResultsTable.js","components/search/searchResults/GrantorGranteeBookSearchResults.js","components/search/searchBy/SpecialSearchTractBookId.js","components/search/searchBy/SpecialSearchTractBookLegal.js","components/search/searchBy/SearchHistory.js","components/search/Search.js","components/search/searchBy/SearchByParcelIdExternal.js","components/search/searchBy/SearchByDocumentNumberExternal.js","components/efile/EfileConfirmation.js","components/efile/CreditCardEfilePayment.js","components/efile/Efile.js","redux/actions/reportActions.js","components/reports/UserReport.js","components/reports/AccountReport.js","components/reports/StatementReport.js","components/reports/AccountTypeReport.js","components/reports/Reports.js","components/common/modal/Confirmation.js","components/userManager/UserList.js","components/userManager/UserEntry.js","components/userManager/UserPassword.js","components/controlPanel/Accounts.js","components/controlPanel/AccountDocTypes.js","components/common/function/accountValidation.js","components/controlPanel/AccountEntry.js","redux/actions/accountActions.js","components/controlPanel/AccountReload.js","components/controlPanel/AccountPageAccess.js","components/controlPanel/AccountTasks.js","components/controlPanel/CreditCardAlternateRates.js","components/controlPanel/CreditCardExtra.js","components/controlPanel/Escrow.js","utils/CodeValueValidation.js","components/controlPanel/FlatFeeRates.js","components/controlPanel/ALaCarteRates.js","components/controlPanel/ALaCarteRatesSpecial.js","components/controlPanel/Common.js","components/controlPanel/Efile.js","components/controlPanel/Languages.js","components/controlPanel/HomeLatestNews.js","components/controlPanel/HomeExternalLinks.js","components/controlPanel/HomeNotableDates.js","components/controlPanel/HomeSelections.js","components/controlPanel/LoginPageLinks.js","components/controlPanel/LoginPageLatestNews.js","components/controlPanel/LoginPageSlides.js","components/controlPanel/LoginPageRegistration.js","components/controlPanel/Search.js","components/controlPanel/Search2.js","components/controlPanel/Reports.js","components/controlPanel/PerformanceMonitoring.js","components/controlPanel/ReloadConfiguration.js","components/controlPanel/LandSharkOneAccountsUsers.js","components/controlPanel/LandSharkOneAuditLog.js","components/controlPanel/UserLockout.js","components/controlPanel/UserLockout2.js","components/controlPanel/UserPurgeSchedule.js","components/controlPanel/UserPurgeNow.js","components/controlPanel/UserAccess.js","components/controlPanel/BillingSchedule.js","components/controlPanel/FlatFeeOverride.js","components/controlPanel/AuditLogPurgeSchedule.js","components/controlPanel/ControlPanel.js","components/top/LoginTop.js","components/auth/LoginPageLinks.js","components/auth/LoginPageSlides.js","components/auth/LoginPageLatestNews.js","components/bottom/Footer.js","components/auth/Login.js","components/auth/Register.js","components/auth/ForgotUsername.js","components/auth/ForgotPassword.js","components/auth/PasswordReset.js","components/auth/CompleteRegistration.js","components/auth/PrivateRoute.js","App.js","redux/reducers/imageContentReducer.js","redux/reducers/countyConfigUserLockoutReducer.js","redux/reducers/countyConfigUserPurgeNowReducer.js","redux/reducers/countyConfigReducer.js","redux/reducers/auditLogTypesAllReducer.js","redux/reducers/auditTransactionTypesAllReducer.js","redux/reducers/auditLogTypesReducer.js","redux/reducers/auditTransactionTypesReducer.js","redux/reducers/accountTypesReducer.js","redux/reducers/bookTypesReducer.js","redux/reducers/documentTypesReducer.js","redux/reducers/documentTypesWithBlankReducer.js","redux/reducers/instrumentCodesReducer.js","redux/reducers/instrumentCodesWithBlankReducer.js","redux/reducers/instrumentGroupsReducer.js","redux/reducers/otherLotCodesReducer.js","redux/reducers/paymentMethodTypesAllReducer.js","redux/reducers/paymentMethodTypesNonALaCarteReducer.js","redux/reducers/platsReducer.js","redux/reducers/platsByNumberReducer.js","redux/reducers/platNamesReducer.js","redux/reducers/platNumbersReducer.js","redux/reducers/userTypesReducer.js","redux/reducers/dataSourceTypesReducer.js","redux/reducers/landlinkConfigReducer.js","redux/reducers/countyConfigBillingScheduleReducer.js","redux/reducers/countyConfigFlatFeeReducer.js","redux/reducers/countyConfigFlatFeeOverrideUISettingsReducer.js","redux/reducers/countyConfigReportsReducer.js","redux/reducers/countyConfigEfileReducer.js","redux/reducers/countyConfigEscrowReducer.js","redux/reducers/countyConfigCreditCardExtraReducer.js","redux/reducers/countyConfigLanguagesReducer.js","redux/reducers/countyConfigNotableDatesReducer.js","redux/reducers/countyConfigSearchReducer.js","redux/reducers/countyConfigSearch2Reducer.js","redux/reducers/countyConfigCommonReducer.js","redux/reducers/countyConfigUserAccessReducer.js","redux/reducers/countyConfigLoginRegistrationReducer.js","redux/reducers/productPropertiesReducer.js","redux/reducers/currentUserReducer.js","redux/reducers/reportCriteriaReducer.js","redux/reducers/searchCriteriaReducer.js","redux/reducers/searchHistoryReducer.js","redux/reducers/searchDetailsReducer.js","redux/reducers/searchDetailsGrantorGranteeBookReducer.js","redux/reducers/searchDetailsTaxLienReducer.js","redux/reducers/searchDetailsTorrensCertificateReducer.js","redux/reducers/searchDetailsTractBookReducer.js","redux/reducers/searchDetailsGrantorsGranteesPaginationReducer.js","redux/reducers/searchDetailsLegalDescriptionsPaginationReducer.js","redux/reducers/searchDetailsReferenceDocumentsPaginationReducer.js","redux/reducers/searchDetailsTorrensCertificatesPaginationReducer.js","redux/reducers/searchDetailsTaxpayersPaginationReducer.js","redux/reducers/searchDetailsReleasesPaginationReducer.js","redux/reducers/searchDetailsRevisionsPaginationReducer.js","redux/reducers/searchSequenceStartedReducer.js","redux/reducers/searchSequenceRewindReducer.js","redux/reducers/searchResultsTableSelectedRowReducer.js","redux/reducers/searchResultsFilterAppliedFilter.js","redux/reducers/searchResultsReducer.js","redux/reducers/searchResultsSortReducer.js","redux/reducers/searchResultsTableLoadingReducer.js","redux/reducers/searchResultsFilterReducer.js","redux/reducers/searchResultsFilterGrantorGranteeBookReducer.js","redux/reducers/searchResultsFilterTaxLiensReducer.js","redux/reducers/searchResultsFilterTorrensReducer.js","redux/reducers/searchResultsFilterTractBookReducer.js","redux/reducers/searchResultsVisitedReducer.js","redux/reducers/searchResultsVisitedAppliedReducer.js","redux/reducers/accountListFiltersReducer.js","redux/reducers/userListFiltersReducer.js","redux/reducers/accountsPaginationReducer.js","redux/reducers/accountSelectionListPaginationReducer.js","redux/reducers/platSelectionListPaginationReducer.js","redux/reducers/searchResultsPaginationReducer.js","redux/reducers/searchResultsPageVisitedReducer.js","redux/reducers/userSelectionListPaginationReducer.js","redux/reducers/usersPaginationReducer.js","redux/reducers/searchTypeReducer.js","redux/reducers/reportTypeReducer.js","redux/reducers/controlPanelTypeReducer.js","redux/reducers/sideNavigationReducer.js","redux/reducers/serverProductVersionsReducer.js","redux/reducers/notableDatesReducer.js","redux/reducers/index.js","serviceWorker.js","redux/actions/helperActions.js","index.js","logger.js","redux/actions/otherLandLinkActions.js","utils/AjaxError.js","components/image/Thumbnails.js"],"names":["minusIcon","icon","faMinusCircle","size","filterIcon","faFilter","arrowAltDownIcon","faLongArrowAltDown","className","arrowRightIcon","faArrowRight","arrowRightActiveIcon","arrowDownIcon","faArrowDown","arrowUpIcon","faArrowUp","atlasIcon","faAtlas","atlasActiveIcon","spinnerIconGray","faSpinner","style","color","spin","spinnerIconWhiteBig","calendarIcon","faCalendar","dateIcon","dateActiveIcon","addressIcon","faSquare","faDoorClosed","addressActiveIcon","bookIcon","faBook","bookActiveIcon","documentNumberIcon","faHashtag","documentNumberActiveIcon","dollarIcon","faDollarSign","dollarActiveIcon","dollarIconBlack","imageIcon","faImage","parcelIcon","faCube","parcelActiveIcon","legalIcon","faThLarge","legalActiveIcon","homeIcon","faHome","homeActiveIcon","loginIcon","faSignInAlt","loginActiveIcon","searchIcon","faSearch","searchActiveIcon","caretSquareDownIcon","faCaretDown","caretSquareUpIcon","faCaretUp","chevronCircleLeftIcon","faChevronCircleLeft","chevronLeftIcon","faChevronLeft","chevronRightIcon","faChevronRight","statementIcon","faFileInvoiceDollar","statementActiveIcon","accountTypeIcon","faColumns","accountTypeActiveIcon","commonIcon","faGlobe","commonActiveIcon","flatFeeIcon","faMoneyBillAlt","flatFeeActiveIcon","unitRatesIcon","faUtensils","unitRatesActiveIcon","escrowReloadIcon","faCreditCard","faCartPlus","faPiggyBank","escrowReloadActiveIcon","userPurgeIcon","faUserAltSlash","userPurgeActiveIcon","userClockIcon","faUserClock","userClockActiveIcon","userLockIcon","faUserLock","userLockActiveIcon","doorOpenIcon","faDoorOpen","doorOpenActiveIcon","stethoscopeIcon","faDatabase","faStethoscope","stethoscopeActiveIcon","cogIconBlack","faStopwatch","faCog","redoIcon","faPaperclip","faRedo","warningIcon","faExclamationCircle","warningSmallIcon","infoIcon","faInfoCircle","infoSmallIcon","backwardSmallIcon","faCaretSquareLeft","fileDownloadSmallIcon","faFileDownload","removeFormatIcon","faRemoveFormat","removeFormatActiveIcon","paperPlaneIcon","faPaperPlane","mobileIcon","faMobileAlt","commentIcon","faComment","externalLinkIcon","faExternalLinkAlt","expandIcon","faExpand","listIcon","faList","fileImportIcon","faFileImport","fileImportActiveIcon","languageIcon","faLanguage","languageActiveIcon","checkIconGreen","faCheckCircle","checkIcon","registeredLandIcon","faRegistered","registeredLandActiveIcon","nameIcon","faUser","nameActiveIcon","fileIcon","faFileAlt","fileActiveIcon","fileCodeIcon","faFileCode","copyrightIcon","faCopyright","bookmarkIcon","faBookmark","userIcon","userIconBlack","userActiveIcon","accountIcon","faIdCard","accountIconBlack","accountActiveIcon","creditCardIcon","creditCardActiveIcon","grantorGranteeBookIcon","faAddressBook","grantorGranteeBookActiveIcon","platIcon","platActiveIcon","questionIcon","faQuestionCircle","All1","All2","creditCardIcon2","creditCardActiveIcon2","auditLogPurgeIcon","auditLogPurgeActiveIcon","CreditCardImmediateChargeWindow","props","handleAuthorizeDotNetCancelClicked","cancelPayment","handleAuthorizeDotNetPayClicked","json","makePayment","handleCancelClick","event","preventDefault","authFormRef","React","createRef","state","previousShow","show","this","current","submit","o","document","createElement","src","configData","AUTHORIZE_ACCEPTJS_URL","prevProps","prevState","undefined","setState","submitAuthorizeDotNetForm","window","AuthorizeNetIFrame","onReceiveCommunication","queryStr","console","log","message","parse","isValidMessage","action","JSON","response","backendLogger","info","stringify","onHide","centered","Header","closeButton","Title","title","Body","background","id","name","width","height","scrolling","ref","AUTHORIZE_PAYMENT_URL","method","target","type","value","token","Footer","margin","md","textAlign","variant","onClick","Component","PREFIX","FlatFeeAddOnWindow","componentDidMount","componentDidUpdate","handleBackClick","backClicked","handleBuyClick","buyClicked","option","optionSelected","handleCloseClick","closeClicked","handleOptionChange","me","validSelectedValue","options","map","idx","length","Modal","Container","Row","Col","paddingLeft","paddingRight","marginLeft","fontWeight","Form","Check","checked","onChange","display","label","text","Button","marginRight","FlatFeeAddOnConfirmationWindow","defaultContent","accountMessage","beginningBalance","endingBalance","headers","insufficientBalance","purchase","description","content","Object","assign","indent","header","Table","borderless","colSpan","purchaseMessage","textDecoration","ALERT_MESSAGE","ALERT_WARNING","FlatFeeAddon","addShowLoading","newState","loadingStatus","LOADING_STATUES","LOADING","showLoading","func","hideLoading","status","loadOptions","loadOptions2","request","a","axios","post","LANDSHARK_SERVER_URL","withCredentials","then","result","AjaxResult","isOk","imageState","addonWindow","createAddonWindowState","handleError","error","AjaxResponseHandler","showAlertText","hasImageStateProperty","createAddonConfirmationWindowState","addonWindowCallbackBackClicked","addShowAddonWindow","cancelImageState","addonConfirmationWindowCallbackBackClicked","addShowAddonConfirmationWindow","addonWindowCallbackCloseClicked","addonConfirmationWindowCallbackCloseClicked","imageStateGuid","guid","imageStateReference","purchaseOptions","flatFeeOptions","getImageState","addonConfirmationWindowCallbackBuyClicked","ok","addAlert","createAlertWindowParams","completed","showAlert","addonWindowCallbackBuyClicked","addonConfirmationWindow","errorMessage","callback","alertWindowParams","alertWindow","msg","hideAlert","params","Loading","loadingIndicator","FlatFeeAddonWindow","FlatFeeAddonConfirmationWindow","Alert","connect","dispatch","refreshUsageBalanceFromContent","refreshUsageBalance","userId","ALERT_TYPES","DIRECTION_OPTIONS","code","backdrop","keyboard","fluid","padding","fontSize","webpackEmptyContext","req","e","Error","keys","resolve","module","exports","ImageConfirmOrderWindow","handleBuyOptionsClick","buyOptionsClicked","handleContinueClick","continueClicked","handleReauthClick","reauthClicked","feeSchedule","singleItemPurchase","item","multipleItemPurchase","itemHeaderDescription","hasBuyOptions","creditCardOptions","authorizationInfo","authorized","borderTop","borderBottom","preauthAmount","border","items","total","alreadyPurchasedMessage","insufficientBalanceMessage","noPurchasingOptionsAvailableMessage","downloadButtonText","countyConfigCreditCardExtraReducer","maxAmount","EscrowAddOnWindow","deposit","handleDepositChanged","updateState","handleDepositBlur","updateStateFromProps","createIfMissing","callSetState","source","escrowAddonWindow","version","escrowOptions","eo","lowBalanceMessage","verticalAlign","depositAmountMessage","Control","onBlur","surchargeMessage","CreditCardWindow","payClicked","creditCardAuthWindow","ZoomableImage","handleBigMouseMove","getBoundingClientRect","left","top","x","pageX","y","pageY","bigStyle","backgroundPosition","handleSmallMouseMove","smallStyle","close","handleDoubleClick","open","handleClick","handleMouseOut","handleKeepPageClicked","modal","keepPageClicked","handleIgnorePageClicked","ignorePageClicked","backgroundImage","backgroundSize","onMouseMove","children","dialogClassName","bigClassName","ACTION_PAGE_TOGGLED","CSV_PAGES","ENTIRE_DOCUMENT","PreviewWindow","processImagePreviewSettingsResults","results","pagesSelected","pageSelectionMethod","selectedAsCsv","selectedAsBoolean","i","thumbnails","pageIdx","page","selected","processGetThumbnailsResults","sourcedDocKey","pageCount","uiTitle","uiTitleBeginningOfSentence","Array","image","base64","getThumbnailIdx","lastIndexOf","parseInt","substring","getFirstThumbnailShowing","getTotalPageCount","getCurrentViewInfo","offset","getViewInfo","firstThumbnail","view","thumbnail","fullPages","Math","trunc","partialPageCount","firstPage","lastPage","pageNumber","min","isFirstPage","isFullPage","isLastPage","isPartialPage","getCanPerformNextJump","n","getCanPerformPrevJump","getCanPerformFirstJump","currentView","getCanPerformLastJump","getThumbnailKey","docKey","handleImageRightClick","disableContextMenu","handleChange","handlePageSelectionMethodChange","updatePreviewSettings","handleSelectedPagesChanged","handleSelectedPagesBlur","handleThumbnailKept","handleThumbnailIgnored","handleThumbnailChecked","handleThumbnailClick","handleDownloadClick","trim","downloadClicked","instrumentCode","instCode","alert","handleGoClick","jumpToPage","isNaN","gotoPage","handleFirstClick","handleLastClick","max","handlePrevSmallJumpClick","handlePrevBigJumpClick","handleNextSmallJumpClick","handleNextBigJumpClick","populateImagePreviewSettings","thumbnailRequest","AjaxError","imagePreviewSettingChange","imagePreviewSettings","previewWindow","totalPageCount","modalSize","alt","onContextMenu","disabled","borderLeft","borderRight","borderTopLeftRadius","borderBottomLeftRadius","borderRadius","step","precision","borderTopRightRadius","borderBottomRightRadius","marginBottom","data","getErrorMessage","statusText","lockout","defaultValue","obj","handler","history","getStatus","push","dispatchError","store","momentDateFormat","momentDateTimeFormat","hourOptions","minuteOptions","amPmOptions","validateDates","errors","fromDate","fromDateKey","toDate","toDateKey","fromMomentDate","moment","isValid","toMomentDate","currentDate","startOf","diff","validateDateTimes","fromHour","fromMinute","fromAmPm","toHour","toMinute","toAmPm","fromDateTime","toDateTime","fromMomentDateTime","validateMonthRangeLimit","validateYearRangeLimit","InputWithButton","InputGroup","Append","zIndex","DateField","datePickerDate","formGroup","textInputDate","handleDatePickerChange","date","format","handleDateInputChange","primaryCriteria","customInput","inputProps","current_state","PlatField","placeholder","textField","fieldType","required","disableField","selectField","as","hideSelect","ownProps","allPlatList","platsReducer","codeDescriptionResultList","allPlatNameList","platNamesReducer","allPlatNumberList","platNumbersReducer","TextField","numberType","maxLength","minLength","maxValue","minValue","formControl","pattern","leadingCharacter","alignItems","SelectField","clazzName","layout","buttonControl","selectButton","RadioGroup","radioButtons","FieldRow","generateRow","formGroupRow","formGroups","index","lgSize","mdSize","smSize","xsSize","lg","sm","xs","Group","controlId","hideField","FormFile","key","marginTop","Text","hint","fieldRow","hideRow","formatPhone","previousValue","currentValue","replace","cvLength","slice","formatNumericOnly","formatInternationalPhone","formatZip","trimUserFields","user","trimmedUser","firstName","lastName","company","address","city","email","validateUser","validateUsername","validatePassword","username","search","startsWith","endsWith","includes","password","passwordConfirm","address1","address2","zip","phoneFormatType","phoneStandard","phoneInternational","passwordReset","CurrentUser","alertType","OK","validateAndSubmit","phone","closeCurrentUser","redirectToLogin","showWarning","handleSubmit","trimmedUserFields","handleChangePassword","openCurrentUserChangePassword","alertMessage","WARNING","get","formGroupRows","minWidth","usStates","maxWidth","onSubmit","currentUser","paddingBottom","currentUserReducer","CurrentUserChangePassword","closeCurrentUserChangePassword","handleBack","openCurrentUser","Logout","handleYesClick","closeLogout","logout","handleNoClick","translations","language","continue","yes","no","EscrowRechargeAmountWindow","surcharge","totalCharge","Number","handleEntryChanged","applySurcharge","isCreditCardSurchargePercent","creditCardSurcharge","round","creditCardSurchargePercent","EPSILON","surchargeText","depositEntry","minReloadAmount","maxReloadAmount","borderColor","countyConfigEscrowReducer","creditCardSurchargeMethod","InformationMain","flatFeeAddonWindowCallbackCompleted","currentUserId","flatFeeAddonWindowCallbackCloseClicked","flatFeeAddonWindow","handleClickAbout","showAbout","handleClickCurrentUser","showCurrentUser","handleCloseCurrentUser","handleClickCurrentUserChangePassword","showCurrentUserChangePassword","handleCloseCurrentUserChangePassword","handleClickLogout","showLogout","handleCloseLogout","handleEscrowAddMoney","showEscrowRechargeAmountWindow","handleEscrowAmountClose","handleRechargeEscrowAccount","depositAmount","amount","showCreditCardEscrowRechargeWindow","authAndCaptureToken","tokenResults","handleEscrowPaymentComplete","transactionResponse","hideEscrowPaymentPage","handleFlatFeePurchaseImages","handleClickrefreshUsageBalance","fontVariant","countyName","appTitle","landshark_logo","countyConfigUserLockout","lockoutInPlace","position","messageHeadline","hello","currentUserName","role","backgroundColor","accountType","paymentMethod","countyConfigEscrow","reloadByCreditCard","currentUserUsageBalance","countyConfigFlatFeeOverrideUISettings","accountAdminReload","countyConfigUserLockoutReducer","countyConfigBillingSchedule","countyConfigEfile","countyConfigEfileReducer","countyConfigFlatFeeOverrideUISettingsReducer","countyConfigCommonReducer","usageBalance","Navigationbar","Navbar","bg","expand","Toggle","Collapse","Nav","to","home","efile","e_file","CommonTop","ContactUs","Card","contact_us","listStyle","contactEmail","contactPhone","Disclaimer","disclaimerLink","links","filteredDisclaimerList","filter","link","heading","rel","href","paragraphContent","click","here","disclaimer","LatestNewsBig","handleClose","latest_news","newsItems","newsItem","LatestNews","showModal","expandSpan","cursor","float","paddingTop","Links","NotableDates","notableDatesTable","notableDates","headings","rows","row","values","cardHeaderClassName","TODAY","MONTH","YTD","CUSTOM","TransactionReport","subtract","reportType","reportRange","handleSelectionMethodChange","handleValidation","responseType","blob","Blob","fileURL","URL","createObjectURL","handleDatePickerChangeFromDate","handleDatePickerChangeToDate","formIsValid","fromDateError","toDateError","transactions","today","this_month","ytd","custom_range","from_mmddyyyy","to_mmddyyyy","generate_report","Transactions","transactionTotalsTable","transactionTotals","details","LoginPageSlides","showLoginSlideModals","clickedId","parentElement","slide1","BROWSER_ROUTER_BASENAME","COUNTY_DIRECTORY","slideArray","loginPageSlides","loginPageSlideModals","numberOfSlides","Img","bottom","right","class","Home","contactUsCard","disclaimerCard","latestNewsCard","linksCard","loginSlidesCard","notableDatesCard","transactionsCard","submitMessage","handleLockout","paragraphs","latestNews","selections","contactUs","loginSlides","common","CardColumns","SideNavigationLabel","sideNavigationOpen","badge","sideNavigationReducer","SideNavigationToggle","isToggleOn","toggle","buttonLeftPadding","buttonIcon","outline","SideNavigationNavLink","SideNavigationNumberedLabel","number","SideNavigationNumberedNavLink","currentSearchIndicator","historyLink","criteriaDescription","TextFilter","filterText","textFilterProps","keyCode","textFilter","onKeyDown","SelectFilter","selectFilterProps","selectFilter","PageBanner","textFilterComponent","selectFilterComponent","finderFilterComponent","finderFilterProps","finderFilterReset","finderFilterClick","criteriaList","searchCriteria","criteria","listStyleType","buttonList","buttons","button","buttonClassName","onClickAction","pageHeading","CountyNotes","componentName","countyNotes","countyConfig","countyConfigSearchReducer","countyConfigReportsReducer","PrimaryButton","buttonLabel","ClearButton","onClear","CancelButton","onCancel","SecondaryButton","buttonBlue","onSave","CreditCardSearchAuthWindow","creditCardAuthWindowCallbackPayClicked","authTrans","authorizationOkay","handleAuthorizedSubmit","handleCloseClicked","memo","CreditCardPriceListWindow","searchRates","forEach","searchRate","priceListHeading","continueLabel","handleContinueClicked","creditCardSearchRates","CreditCardSearchReAuthWindow","FormTemplate","formTemplateMarginLeft","ceil","random","formTemplateMarginRight","formOnly","autoComplete","secondaryButtons","onSeconaryClick","secondaryButtonLabel","boxShadow","pageButtons","autocomplete","afterRowsContent","primaryButtonLabel","successIndicator","secondaryButtonBlue","clearButtonLabel","formRightArea","creditCardPriceListWindowShow","handleCreditCardPriceListContinue","handleCreditCardPriceListClose","creditCardAuthorizeDotNetWindowShow","handleCreditCardAuthorizeDotNetWindowClose","authorizeDotNetToken","CreditCardPriceListReAuthWindow","creditCardPriceListReAuthWindowShow","handleCreditCardPriceListReAuth","handleCreditCardPriceListReAuthWindowClose","handleBlobError","fileReader","FileReader","onload","readAsText","handleCallBack","foundRecords","AccountsControlPanelKey","ALaCarteRatesControlPanelKey","ALaCarteRatesSpecialControlPanelKey","CreditCardAlternateRatesControlPanelKey","CreditCardExtraControlPanelKey","EscrowControlPanelKey","FlatFeeControlPanelKey","FlatFeeOverrideControlPanelKey","BillingScheduleControlPanelKey","CommonControlPanelKey","HomeSelectionsControlPanelKey","HomeLatestNewsControlPanelKey","HomeExternalLinksControlPanelKey","HomeNotableDatesControlPanelKey","LoginPageLinksControlPanelKey","LoginPageLatestNewsControlPanelKey","LoginPageSlidesControlPanelKey","LoginPageRegistrationControlPanelKey","ReportsControlPanelKey","SearchControlPanelKey","Search2ControlPanelKey","EfileControlPanelKey","LanguagesControlPanelKey","LandSharkOneAccountsUsersControlPanelKey","LandSharkOneAuditLogControlPanelKey","UserLockoutControlPanelKey","UserLockout2ControlPanelKey","UserPurgeNowControlPanelKey","UserPurgeScheduleControlPanelKey","UserAccessControlPanelKey","AuditLogPurgeScheduleControlPanelKey","PerformanceMonitoringControlPanelKey","ReloadConfigurationControlPanelKey","setSelectedControlPanelType","selectedControlPanelType","SearchByAddressKey","SearchByBookAndPageKey","SearchByDateKey","SearchByDocumentNumberKey","SearchByLegalDescriptionKey","SearchByNameKey","SearchByParcelIdKey","SearchByTorrensCertificateKey","SearchByTorrensTextKey","SpecialSearchGrantorGranteeBookKey","SpecialSearchTractBookIdKey","SpecialSearchTractBookLegalKey","SpecialSearchPlatKey","SpecialSearchTaxLienKey","SearchByTractIndexNMIKey","SearchByAddressUrl","SearchByBookAndPageUrl","SearchByDateUrl","SearchByDocumentNumberUrl","SearchByLegalDescriptionUrl","SearchByNameUrl","SearchByParcelIdUrl","SearchByTorrensTextUrl","SpecialSearchPlatUrl","SpecialSearchTaxLienUrl","LoadByBatchUrls","SEARCH_RESULTS_BATCH_SIZE","handleTractBookDetails","paymentNeededAgain","paymentNeeded","displayTorrensCertificateDetails","searchDetails","docId","handleTorrensCertificateDetails","handleGrantorGranteeBookDetails","displayTaxLienDetails","handleTaxLienSearchDetails","displayDetails","handleSearchDetails","selectSearchSequenceRow","setSelectedSearchType","selectedSearchType","updateSearchHistory","historyResults","newHistory","searchHistoryList","handleDocumentSearchResponse","pushHistory","sortKey","sortDirection","handleSearchResponse","handleTorrensSearchResponse","pushDestination","searchResults","totalRecordCount","resetPage","sort","handleSearchResults","handleTableBatchResponse","printResults","url","saveAs","loadDocuments","tableLoading","timestamp","valueOf","loadTableBatches","getState","numberOfBatches","SEARCH_RESULTS_PAGE_SIZE","indexOf","recordsFetched","batch","updateHistory","currentSearchTimestamp","searchResultsReducer","searchByGrantorGranteeBook","searchByGrantorGranteeBookPrint","searchByTaxLien","searchByTorrensCertificate","searchByTorrensCertificatePrint","searchByTorrensText","searchByTractBookLegal","searchByTractBookId","searchResultsSort","currentSearch","displayCriteria","searchResultsSortDirection","searchResultsPrint","getSearchResultById","arg2","searchResult","searchResultList","find","SearchByAddress","fromRecordedDate","toRecordedDate","instrumentGroup","streetNumber","streetName","resetSearchSequence","resetSearchSequenceDocumentNumber","resetSearchDetail","searchByAddress","handleClear","resetSearchCriteria","handleDatePickerChangeFromRecordedDate","handleDatePickerChangeToRecordedDate","creditCardUser","formProps","SUCCESS","instrumentGroups","previousSearchKeyValue","match","searchHistoryNumber","searchHistoryIndex","searchHistory","searchHistoryReducer","searchCriteriaReducer","notableDatesReducer","instrumentGroupsReducer","SearchByBookAndPage","book","bookType","searchByBookAndPage","isBookType","bookLabel","book_type","bookTypes","search_by_book_and_page","clear","landlinkConfigReducer","bookTypesReducer","SearchByDate","documentType","searchByDate","useVerificationDate","abstractVerifiedDate","isPropertyCode","allOnlySearch","document_type","documentTypes","instrument_group","search_by_date","countyConfigNotableDatesReducer","propertyCode","countyConfigSearch2Reducer","documentTypesReducer","SearchByDocumentNumber","fromDocumentNumber","toDocumentNumber","searchByDocumentNumber","test","numeric_only_range","invalid_numeric_range","document_number","to_document_number","search_by_document_number","getPaginatorHelper","recordList","numberOfVisibleRecords","zeroBasedStartingRecordIndex","zeroBasedEndingRecordIndex","currentPageRecordList","currentPageStartingRecordNumber","currentPageEndingRecordNumber","UserSelectionListComponentName","UserSelectionList","filteredList","handleTextFilter","handleFilter","filters","handleRowClick","closest","getAttribute","entry","String","fromCharCode","numberOfPages","paginationHelper","paginationPage","scope","record","justifyContent","userSelectionListPaginationReducer","AccountSelectionListComponentName","AccountSelectionList","accountSelectionListPaginationReducer","UserListComponetName","SearchPaginator","startingPageNumber","activePageNumber","handlePageClick","newActivePageNumber","pageinateSearch","criteriaJson","handleFirstPageClick","handleForwardOnePageClick","newStartingPageNumber","handleBackwardOnePageClick","handleForwardTenPagesClick","endingPageNumber","handleBackwardTenPagesClick","handleLastPageClick","setSelectedPaginationPage","endingNumber","paginationItems","paginationItem","Pagination","Item","active","searchPaginationVisitedLinks","firstPagePageLink","lastPagePageLink","backwardOnePagePageLink","forwardOnePagePageLink","backwardTenPagesPageLink","forwardTenPagesPageLink","searchResultsSortReducer","searchResultsTableLoadingReducer","searchResultsPageVisitedReducer","SearchResultsTableComponetName","SearchResultsTable","selectedDocumentId","selectedDocumentName","select","handleCheckFilterLimit","searchResultsFilter","handleCheckClick","filterResults","resetRewindSearch","checkSelected","bookTypeLabel","loadingLabel","bookPageBoookTypeHeader","displayResults","truncatedResultWarning","rewind","selectedRow","responsive","striped","bordered","hover","maxHeight","overflowY","tableLayout","selectedClass","grantorsBadge","grantorSearchResults","grantorOneDisplayName","displayName","granteesBadge","granteeSearchResults","granteeOneDisplayName","referenceDocumentsBadge","referenceDocumentSearchResults","referenceDocumentOne","displayDocNumber","legalDescriptionsBadge","legalSearchResults","legalDescriptionOne","cursorStyle","searchResultsVisited","Set","has","FormCheck","filterApplied","instrumentDescription","recordedDate","displayBookAndPage","INFO","searchResultsPaginationReducer","searchResultsTableSelectedRowReducer","searchSequenceRewindReducer","searchResultsFilterAppliedFilter","searchResultsFilterReducer","searchResultsVisitedReducer","SearchResultsDetailsNoResults","LegalDetails","metesAndBoundsHeaders","metesAndBoundsRows","lotsAndBlocksHeaders","lotsAndBlocksRows","condoHeaders","condoRows","hideLegalDetails","legalDescriptionTypeDetails","metesAndBoundsDetails","column","metesAndBoundsTable","lotsAndBlocksDetails","lotsAndBlocksTable","condoDetails","condoTable","SearchResultsDetailsGrantorsGranteesComponetName","SearchResultsDetailsReferenceDocumentsComponetName","SearchResultsDetailsLegalDescriptionsComponetName","SearchResultsDetailsTorrensCertificatesComponetName","SearchResultsDetails","showLegalDetails","handleTorrensCertificateClick","searchSequence","currentSearchCriteria","currentPageNumber","currentSort","startSearchSequence","searchResultsDetails","certificateNumber","handleGrantorGranteeClick","grantorGranteeSearchIn","grantorGranteeLastName1","grantorGranteeMiddleInitial1","grantorGranteeFirstName1","searchByName","handleReferenceDocumentClick","selectedSearchResult","recordedDateTime","instrumentDate","mortgageAmount","salePrice","verifiedStatus","displayOnlySearchResults","additionalInfoSearchResults","torrensSearchResults","selectedSearchResultInfo","getSelectedSearchResultInfo","docType","docKeyType","imageKeyType","grantorsGranteesArray","numberOfGrantorsGranteesPages","paginationHelperGrantorsGrantees","paginationPageGrantorsGrantees","numberOfLegalSearchResultsPages","paginationHelperLegalDescriptions","paginationPageLegalDescriptions","numberOfReferenceDocumentSearchResultsPages","paginationHelperReferenceDocuments","paginationPageReferenceDocuments","numberOfTorrensSearchResultsPages","paginationHelperTorrensCertificates","paginationPageTorrensCertificates","mortgageAmountLabel","salePriceMortgageAmountLabel","salePriceMortgageAmount","displaySalePrice","displayMortgageAmount","showMapButton","handleGisClick","showTaxButton","handleTaxClick","accountDocTypes","imageRetrieval","handleImageClick","certificate","grantorGrantee","middleInitial","legalDescription","comment","reference","docNumber","recordedTime","recordedAmPm","additionalInfo","displayOnlySearchResult","fromRecordedDateCriteria","isArray","toRecordedDateCriteria","tax","searchDetailsReducer","searchDetailsGrantorsGranteesPaginationReducer","searchDetailsLegalDescriptionsPaginationReducer","searchDetailsReferenceDocumentsPaginationReducer","searchDetailsTorrensCertificatesPaginationReducer","searchSequenceStartedReducer","searchSequenceSelectedDocumentId","searchType","SearchResultsDetailsTaxpayersComponetName","SearchResultsDetailsReleasesComponetName","SearchResultsDetailsRevisionsComponetName","TaxLienSearchResultsDetails","handleDocumentClick","handleLienDocumentClick","currentOrExpired","searchByTaxLienMethod","documentNumber","handleTaxpayerClick","taxpayerName","lienNumber","lienDate","totalAmount","lienType","taxpayerSearchResults","releaseSearchResults","revisionSearchResults","docKeyNumber","numberOfTaxpayerSearchResultsPages","paginationHelperTaxpayers","paginationPageTaxpayers","numberOfReleaseSearchResultsPages","paginationHelperReleases","paginationPageReleases","numberOfRevisionSearchResultsPages","paginationHelperRevisions","paginationPageRevisions","taxpayer","displayAddress","amendment","flag","release","partialFullFlag","releaseDisplayDocNumber","releaseDocNumber","releaseDocType","releaseDate","revokeDisplayDocNumber","revokeDocNumber","revokeDocType","revokeDate","searchDetailsTaxLienReducer","searchDetailsTaxpayersPaginationReducer","searchDetailsReleasesPaginationReducer","searchDetailsRevisionsPaginationReducer","listType","actionType","PlatSeclectionListComponentName","charAt","searchCriteriaObject","Paginator","PlatSeclectionList","handleReset","toUpperCase","codeNumeric","filterTextNumeric","indexFirstNonNumber","handleSortChange","platSelectionListPaginationReducer","platsByNumberReducer","validateCharacters","fieldName","validateLength","SearchByLegalDescription","legalType","searchMethod","section","township","range","base","meridian","qqqq","qqq","qq","q","municipality","otherLotMb","otherLotLb","otherLotCodeMb","otherLotCodeLb","lot","sublot","block","plat","platName","platNumber","building","unit","garage","grantorGranteeLastNameLb","grantorGranteeLastNameMb","grantorGranteeFirstNameLb","grantorGranteeFirstNameMb","grantorGranteeMiddleInitialLb","grantorGranteeMiddleInitialMb","showPlatNumberDropdown","platNumberFilteredList","showPlatNameDropdown","platNameFilteredList","showPlatList","targetValue","namefilteredList","concat","searchByLegalDescription","showNotableDates","abstractIndexBeginDate","handlePlatLookup","handlePlatReset","handleClosePlatLookup","selectedId","selectedName","hideBaseMeridianMunicipalityRow","isBaseline","isMunicipality","isMeridian","isQQQQ","isQQQ","isSublot","isMbOtherLot","otherLotCodes","PlatSelectionList","otherLotCodesReducer","baseline","mbOtherLot","SearchByName","andOr","grantorGranteeLastName2","grantorGranteeFirstName2","grantorGranteeMiddleInitial2","required_if_mi","required_if_first_name","business_or_last_name","first_name","middle_initial","and_or","and","or","search_in","both_grantors_grantees","grantors_only","grantees_only","from_date","to_date","search_by_name","SearchByParcelId","parcelId","searchByParcelId","matchType","SearchByTorrensCertificate","torrensLabel","SearchByTorrensText","searchIn","textLabel","SearchByTractIndexNMI","island","village","three_characters_minimum","search_by_tract_index","parcel_id","SpecialSearchPlat","platNameFound","searchByPlat","SpecialSearchGrantorGranteeBook","grantorGranteeLastName","DOCUMENT_NUMBER_SEARCH","LIEN_NUMBER_SEARCH","TAXPAYER_SEARCH","DATE_RANGE_SEARCH","SpecialSearchTaxLien","taxpayerFirstName","taxpayerMiddleInitial","searchBy","TaxLinks","parcelIds","parcelIdLinks","complete","forceUpdate","getLink","hasOwnProperty","parcelIdsTable","GisLinks","SearchResults","handleSort","filteredResultsSort","setSearchResultsSort","imagingWindows","request1","getSelectedSearchResult","getSelectedSearchResultInfo2","createImagingWindowsWindowState","handleImageComplete","taxLinks","createTaxLinksWindowState","hideTaxLinks","gisLinks","createGisLinksWindowState","hideGisLinks","selectedDocId","showOriginalResultList","paginate","rewindSearch","selectTaxLienDetails","selectDetail","notableDatesLeft","clientX","showNotableDatesModal","hideNotableDates","handleApplyFilter","applySearchResultsFilter","showFilteredResults","filteredDocuments","handleResetRead","resetRead","sortOptions","b","sortByFormGroup","currentSearchLongDescription","longDescription","read","showDownloadResultsButton","Thumbnails","downloadResults","applyFilter","TractBookSearchResultsDetails","searchDetailsTractBookReducer","TractBookSearchResultsTable","searchResultsFilterTractBookReducer","displayTractBookDetails","TractBookSearchResults","searchResultsVisitedApplied","searchResultsVisitedAppliedReducer","TaxLienSearchResultsTable","taxpayersBadge","taxpayerDisplayName","releasesBadge","releaseReovokeOne","releaseOne","revokeOne","revisionsBadge","revisionOne","searchResultsFilterTaxLiensReducer","TaxLienSearchResults","TorrensSearchResultsDetails","fileNumber","certifiedDate","shortStatus","cancelledBySearchResults","isTorrensUseFileNumbers","cancelledBySearchResult","cancelledByCertificateId","cancelledByCertificateNumber","torrensUseFileNumber","searchDetailsTorrensCertificateReducer","TorrensSearchResultsTable","certificateNumberFileNumberHeader","statusBadge","searchResultsFilterTorrensReducer","TorrensSearchResults","selectTorrensCertificateDetails","GrantorGranteeBookSearchResultsDetails","fromName","toName","searchDetailsGrantorGranteeBookReducer","GrantorGranteeBookSearchResultsTable","extractId","searchResultsFilterGrantorGranteeBookReducer","displayGrantorGranteeBookDetails","GrantorGranteeBookSearchResults","SpecialSearchTractBookId","tractBookId","SpecialSearchTractBookLegal","otherLot","SearchHistory","Search","searchByProps","search_by","searchByAddressProps","searchByBookAndPageProps","book_and_page","searchByDateProps","searchByDocumentNumberProps","searchByNameProps","searchByLegalDescriptionProps","searchByParcelIdProps","searchByTorrensCertificateProps","searchByTorrensTextProps","searchByTractIndexNMIProps","tract_index","searchByList","countyConfigSearch","searchList","isTorrens","searchByTractIndexNMI","specialSearchesProps","searchByGrantorGranteeBookProps","searchByPlatProps","searchByTaxLienProps","searchByTractBookIdProps","searchByTractBookLegalProps","specialSearchesList","defaultRoute","recentSearchesProps","recent_searches","path","component","defaultSearch","Link","eventKey","searchTypeReducer","torrens","SearchByParcelIdExternal","searchCallback","okay","parcelIdParam","SearchByDocumentNumberExternal","EfileConfirmation","cancelConfirmation","proceedConfirmation","isNonZeroCharge","hasDocumentCharge","firstPageCharge","hasAdditionalPagesCharge","additionalPagesCharge","hasSurcharge","hasTotalCharge","documentChargeRow","additionalPagesChargeRow","surchargeRow","totalChargeRow","modalTitle","CreditCardEfilePayment","AuthorizeNetIFrameLogging","logStr","PAYMENT_METHOD_CREDIT_CARD","Efile","selectedFile","fileKey","efileType","audtofillChecked","countyStateCode","uploadedFile","transactionNumber","imageId","showConfirmationDialog","userName","userAddress","userCity","userState","userZip","userEmail","efileSubmitPending","acknowledgement","validate","formData","FormData","append","invalid_file_format","exceeds_max_size","showConfirmation","hideConfirmation","hidePaymentPage","showCreditCardPaymentDialog","handlePay","efileSubmit","transactionId","paymentTransactionId","updateUsageBalance","handleComplete","transId","onFileChange","files","onAutoFillChange","onAcknowledgementChange","document_upload","use_profile","acknowledgementStatement","productPropertiesReducer","ReportStatementKey","ReportAccountAuditKey","ReportUserAuditKey","ReportAccountTypeKey","setSelectedReportType","selectedReportType","handleReportResults","reportCriteria","UserReport","accountName","statementNumber","dataSource","summaryMode","transactionType","logInformation","showAccountList","showUserList","reportUser","handleExport","exportUser","resetReportCriteria","onSummarayChange","handleAccountLookup","handleCloseAccountLookup","accountId","handleUserLookup","handleCloseUserLookup","logTypes","transactionTypes","logTypesAll","transactionTypesAll","dataSourceTypes","codeDescriptionResults","accounts","users","reportByCriteria","reportCriteriaReducer","auditLogTypesReducer","auditLogTypesAllReducer","auditTransactionTypesReducer","auditTransactionTypesAllReducer","dataSourceTypesReducer","AccountReport","orderBy","reportAccount","exportAccount","StatementReport","reportStatement","exportStatement","allowableAccounts","AccountTypReport","reportAccountType","Reports","statementReportsProps","statementReportProps","auditReportsProps","accountReportProps","userReportProps","summaryReportsProps","accountTypeReportProps","AccountTypeReport","countyConfigReports","auditAccountsReport","auditUsersReport","statementReport","accountTypeReport","reportTypeReducer","Confirmation","question","UserList","selectedUsername","statusType","userListFilters","showDeleteConfirmationDialog","showActivateConfirmationDialog","handleFinderFilterReset","handleFinderFilterClick","handleSelectFilter","filterSelected","updateUserListFilters","handleRowEdit","handleRowPassword","handleDeleteUser","showDeleteConfirmation","hideDeleteConfirmation","hideActivateConfirmation","handleChangeUserStatus","userStatus","activateQuestion","submitUserStatus","openNewUserEntry","exportData","userResult","inactiveBadge","usersPaginationReducer","userListFiltersReducer","userListAccountFilter","accountFilter","UserEntry","allowableUserTypes","userTypes","redirect","includeInactive","handleCancel","disabledFlag","roleField","accountField","splice","changeStatusLabel","userTypesReducer","UserPassword","redirectToUserManager","Accounts","selectedAccountName","accountListFilters","showChangeAccountStatusConfirmationDialog","activateOrDeactivate","handleRedirectToUsers","selectedAccountId","handleRowReload","handleTasks","handleDocTypes","handleRowAccess","handleDeleteAccount","updateAccountList","accountCodeDescriptionResults","openNewAccountEntry","showChangeAccountStatusConfirmation","hideChangeAccountStatusConfirmation","handleChangeAccountStatus","updateAccountListFilters","accountResult","accountTypeDescription","paymentMethodDescription","monthlyFeeDescription","Dropdown","Menu","countyAdminReload","userCount","accountsPaginationReducer","accountListFiltersReducer","list","AccountDocTypes","getContainer","docTypes","getStateFromContent","createDefaultRow","imageChargeMethod","previewRetrieval","handleMoreRows","newRows","targetId","handleReorganizeRows","handleRemoveRow","indexToRemove","container","accountDocTypesContainer","trueFalseOptions","isTrue","chargeMethodOptions","docTypesTable","availableDocumentTypes","accountTypes","accountTypesReducer","countyConfigFlatFee","countyConfigFlatFeeReducer","countyConfigBillingScheduleReducer","documentTypesWithBlankReducer","trimAccountFields","account","trimmedAccount","landLinkAccount","validateAccount","validateAccountName","AccountEntry","flatFeeRateLevel","monthlyFee","lastTasks","postToLandLink","userReload","trimmedAccountFields","handleSaveResult","errorFound","saveAccount","createRateOption","rate","unlimitedNumberOfPages","cost","itemDescription","createRateOptions","flatFeeRates","chargingImages","rates","paymentMethodOptions","paymentMethodTypesAll","paymentMethodTypesNonALaCarte","accountTypeField","paymentMethodField","userReloadField","postToLandLinkField","flatFeeRateOptions","landlinkAccountRequired","paymentMethodTypesAllReducer","paymentMethodTypesNonALaCarteReducer","AccountReload","imagesRemaining","currentImagesRemaining","AccountPageAccess","AccountTasks","lastBilled","lastImageRenewal","needsBilling","needsImageRenewal","showPrepareToRerunAccountTasksConfirmationDialog","handleBilledNow","handleImageRenewNow","getAccountId","showPrepareToRerunAccountTasksConfirmation","hidePrepareToRerunAccountTasksConfirmation","handleRunAccountTasks","handlePrepareToRerunAccountTasks","CreditCardAlternateRates","applyAlternateRates","searchByAddressCreditCard","searchByBookAndPageCreditCard","searchByDateCreditCard","searchByDocumentNumberCreditCard","searchByLegalDescriptionCreditCard","searchByNameCreditCard","searchByParcelIdCreditCard","searchByTorrensCertificateNumberCreditCard","searchByTorrensTextCreditCard","searchByPlatCreditCard","searchByTaxLienCreditCard","searchByGrantorGranteeBookCreditCard","searchByTractBookCreditCard","documentDetailsCreditCard","taxLienDetailsCreditCard","imageDocumentCreditCard","imageFirstPageCreditCard","imageAdditionalPagesCreditCard","platImagePlatCreditCard","platImageFirstPageCreditCard","platImageAdditionalPagesCreditCard","documentRate","firstPageRate","additionalPagesRate","rateTable","CreditCardExtra","surchargeMethod","surchargePercent","chargeChargeCode","surchargeChargeCode","chargeFeeCode","surchargeFeeCode","Escrow","feeCode","chargeCode","hasFeeCode","hasChargeCode","parseFloat","validateNumberOfImagesCostPair","unlimited","numberOfImages","numberOfImagesKey","costKey","FlatFeeRates","validateUnimited","unlimitedRowNumber","currentRowSelected","currentRowUnlimited","validateRatePairs","createRateRow","ALaCarteRates","searchByTorrensCertificateNumber","searchByTractBook","documentDetails","taxLienDetails","imageDocument","imageFirstPage","imageAdditionalPages","ALaCarteRatesSpecial","applySpecialRates","handleCloseConfirmation","handleClickSave","lastRate","allDocumentTypeInstrutmentCodes","currentLength","blankArray","rate1","rate2","firstDocumentTypeControl","firstInstrumentCodeFormControl","availableInstrumentCodes","instrumentCodesWithBlankReducer","Common","contactName","contactTitle","efileCountyNote","Languages","languages","HomeLatestNews","paragraphTable","xl","HomeExternalLinks","HomeNotableDates","showSeparateIndexes","abstractVerified","abstractLegalVerified","abstractPosted","abstractLegalPosted","abstractIndexBegin","abstractImageBegin","abstractImageThru","torrensVerified","torrensLegalVerified","torrensPosted","torrensLegalPosted","torrensIndexBegin","torrensImageBegin","torrensImageThru","torrensCertificateThru","lienVerified","lienPosted","lienIndexBegin","lienImageBegin","lienImageThru","disableLegal","HomeSelections","latestNewsLoginPage","latestNewsMore","linksLoginPage","linksMore","LoginPageLinks","handleUpRow","indexToMoveUp","handleDownRow","indexToMoveDown","LoginPageLatestNews","LoginPageRegistration","forgotPasswordLink","selfRegistration","emaileExpireIn","searchAccess","searchByAddressCountyNote","searchByBookAndPageCountyNote","searchByDateCountyNote","searchByDocumentNumberCountyNote","searchByLegalDescriptionCountyNote","searchByNameCountyNote","searchByParcelIdCountyNote","searchByTorrensCertificateCountyNote","searchByTorrensTextCountyNote","searchByTaxLienCountyNote","searchByGrantorGranteeBookCountyNote","searchByPlatCountyNote","searchByTractBookIdCountyNote","searchByTractBookLegalCountyNote","searchByTractIndexNMICountyNote","handleSave","searchTypes","Search2","setHelperData","baseContent","statementReportCountyNote","auditAccountsReportCountyNote","auditUsersReportCountyNote","accountTypeReportCountyNote","PerformanceMonitoring","ReloadConfiguration","LandSharkOneAccountsUsers","landSharkOneDbAddress","landSharkOneDbName","landSharkOneDbUsername","landSharkOneDbPassword","showMigrateConfirmationDialog","handleConfirmMigration","showMigrateConfirmation","hideMigrateConfirmation","LandSharkOneAuditLog","dataType","batchSize","deleteQuestion","UserLockout","messageLogin","UserLockout2","UserPurgeSchedule","automaticPurge","automaticPurgeAfterDays","UserPurgeNow","purgeDate","UserAccess","guestUserName","limitLoginAttempts","maxloginAttempts","inactivityTimeLimit","inactivityTimeLimitPeriod","BillingSchedule","automaticBilling","automaticImageRenewal","renewalDay","renewalTime","lastRan","FlatFeeOverride","AuditLogPurgeSchedule","ControlPanel","accountsHeadingProps","accountsProps","feeStructureHeadingProps","creditCardAlternateRatesProps","creditCardExtraProps","escrowProps","flatFeeProps","flatFeeOverrideProps","aLaCarteRatesProps","aLaCarteRatesInstrumentCodeProps","billingScheduleProps","webPagesProps","commonProps","efileProps","languagesProps","homeLatestNewsProps","homeMoreLinksProps","homeNotableDatesProps","homeSelectionsProps","loginPageLinksProps","loginPageLatestNewsProps","loginPageSlidesProps","loginPageRegistrationProps","searchProps","search2Props","reportsProps","technicalProps","performanceMonitoringProps","reloadConfigurationProps","landSharkOneAccountsUsersProps","landSharkOneAuditLogProps","userAdminProps","userAccessProps","userLockoutProps","userLockout2Props","userPurgeNowProps","userPurgeScheduleProps","auditLogPurgeScheduleProps","technicalNavLink","controlPanelTypeReducer","LoginTop","handleTriminClick","valign","align","numberOfLinks","numberOfRows","numberOfRowOneLinks","columnSize","floor","rowOnefiller","numberOfRowTwoLinks","rowTwofiller","rowOneLinks","rowTwoLinks","slide2","slide3","slide4","slide5","slide6","Carousel","autoPlay","controls","indicators","interval","year","Date","getFullYear","packageJson","serverProductVersions","serverProductVersionsReducer","combinedVersion","Login","loading","handleCallback","login","pathname","location","loginRegistration","countyConfigLoginRegistrationReducer","countyConfigLanguagesReducer","credential","getRawErrorMessage","Register","ForgotUsername","ForgotPassword","PasswordReset","ticket","CompleteRegistration","usernameLine","welcomeLine","completeMessage","fullName","PrivateRoute","isAuthenticated","isLoggedIn","rest","render","from","App","exact","initialState","imageContentReducer","countyConfigUserPurgeNowReducer","userPurgeNow","userLockout","countyConfigReducer","userAccess","instrumentCodesReducer","countyConfigUserAccessReducer","searchDetailsGrantorGranteePaginationReducer","seachSequenceStartedReducer","object","array","beginningIndex","prototype","apply","document1","document2","recordedDateComparing","fromDateComparing","lienDateComparing","certifiedDateComparing","add","appReducer","combineReducers","rootReducer","middleware","thunk","persistConfig","storage","persistedReducer","persistReducer","ReactReduxDevTools","__REDUX_DEVTOOLS_EXTENSION__","navigator","userAgent","createStore","compose","applyMiddleware","persistStore","Boolean","hostname","handleLandSharkConfigResults","namedContentResultList","handleLandSharkConfigCodeDescriptionResults","namedCodeDescriptionResultList","handleLandLinkConfigResults","afterFunction","trimin","PUBLIC_URL","consoleLogHandler","bootstrap","homepage","ReactDOM","getElementById","serviceWorker","ready","registration","unregister","lsUrl","winston","createLogger","transports","Http","host","port","ssl","protocol","toString","ACTION_SHOW","ACTION_UPDATE","loadThumbnails","createPreviewWindowState","createImageStateReference","confirmOrderWindowCallbackBackClicked","addShowConfirmOrderWindow","addShowPreviewWindow","confirmOrderWindowCallbackCloseClicked","confirmOrderWindowCallbackBuyOptionsClicked","createFlatFeeAddonWindowState","createEscrowAddonWindowState","creditCardAuthWindowShow","confirmOrderWindowCallbackContinueClicked","confirmOrderWindowCallbackContinueClicked2","usageBalanceResult","imageWindowShow","recomputeDownloadOrder","createCreditCardAuthWindowState","flatFeeMessage","creditCardAuthWindowCallbackBackClicked","creditCardAuthWindowCallbackCloseClicked","addShowCreditCardAuthWindow","creditCardExceedingPreauthWindowCallbackContinueClicked","escrowAddonWindowCallbackBackClicked","escrowAddonWindowCallbackBuyClicked","escrowAddonWindowCallbackCloseClicked","addShowEscrowAddonWindow","addShowFlatFeeAddonWindow","flatFeeAddonWindowCallbackBackClicked","addImageStateReference","previewWindowCallbackDownloadClicked","computeDownloadOrder","confirmOrderWindow","previewWindowCallbackCloseClicked","escrowAddOnWindowShow","imageWindowShowStep2","preview","byteCharacters","Buffer","pdf","byteArrays","byteNumbers","charCodeAt","byteArray","Uint8Array","fileName","uiSaveAsImageName"],"mappings":"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","file":"static/js/main.b9390a78.chunk.js","sourcesContent":["import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faLongArrowAltDown, faFilter, faMinusCircle, faCaretSquareLeft, faFileDownload, faArrowRight, faRemoveFormat, faExclamationCircle, faInfoCircle, faArrowDown, faArrowUp, faSignInAlt, faThLarge, faSquare, faAtlas, faSpinner, faPiggyBank, faCartPlus, faCreditCard, faUtensils, faMoneyBillAlt, faHome, faColumns, faCalendar, faFileInvoiceDollar, \r\n faDoorClosed, faSearch, faCube, faBook, faHashtag, faDollarSign, faCaretUp, faCaretDown, faChevronCircleLeft, faChevronLeft, faChevronRight, faGlobe, faFileImport, faLanguage,\r\n faDoorOpen, faUserAltSlash, faUserClock, faUserLock, faCog, faDatabase, faStethoscope, faStopwatch, faPaperclip, faRedo, faPaperPlane, faMobileAlt, faComment, faExternalLinkAlt, faList, faExpand, faImage } from '@fortawesome/free-solid-svg-icons'\r\nimport '../../landshark.css';\r\n\r\nexport const minusIcon = <FontAwesomeIcon icon={faMinusCircle} size=\"1x\" /> \r\nexport const filterIcon = <FontAwesomeIcon icon={faFilter} size=\"1x\" /> \r\n\r\nexport const arrowAltDownIcon = <FontAwesomeIcon icon={faLongArrowAltDown} className=\"side-navlink-icon\" size=\"1x\" /> \r\n\r\nexport const arrowRightIcon = <FontAwesomeIcon icon={faArrowRight} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const arrowRightActiveIcon = <FontAwesomeIcon icon={faArrowRight} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const arrowDownIcon = <FontAwesomeIcon icon={faArrowDown} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const arrowUpIcon = <FontAwesomeIcon icon={faArrowUp} className=\"side-navlink-icon\" size=\"1x\" /> \r\n\r\nexport const atlasIcon = <FontAwesomeIcon icon={faAtlas} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const atlasActiveIcon = <FontAwesomeIcon icon={faAtlas} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const spinnerIconGray = <FontAwesomeIcon icon={faSpinner} size=\"2x\" style={{ color: '#808080' }} spin /> \r\n\r\nexport const spinnerIconWhiteSmall = <FontAwesomeIcon icon={faSpinner} style={{ color: 'white' }} size=\"1x\" spin /> \r\nexport const spinnerIconWhiteBig = <FontAwesomeIcon icon={faSpinner} style={{ color: 'white' }} spin /> \r\n\r\nexport const calendarIcon = <FontAwesomeIcon icon={faCalendar} size=\"1x\" /> \r\n\r\nexport const dateIcon = <FontAwesomeIcon icon={faCalendar} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const dateActiveIcon = <FontAwesomeIcon icon={faCalendar} className=\"side-navlink-icon-active\" size=\"1x\" />\r\n\r\nexport const platIcon = <FontAwesomeIcon icon={faSquare} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const platActiveIcon = <FontAwesomeIcon icon={faSquare} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const addressIcon = <FontAwesomeIcon icon={faDoorClosed} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const addressActiveIcon = <FontAwesomeIcon icon={faDoorClosed} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const bookIcon = <FontAwesomeIcon icon={faBook} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const bookActiveIcon = <FontAwesomeIcon icon={faBook} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const documentNumberIcon = <FontAwesomeIcon icon={faHashtag} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const documentNumberActiveIcon = <FontAwesomeIcon icon={faHashtag} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const dollarIcon = <FontAwesomeIcon icon={faDollarSign} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const dollarActiveIcon = <FontAwesomeIcon icon={faDollarSign} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\nexport const dollarIconBlack = <FontAwesomeIcon icon={faDollarSign} className=\"side-navlink-icon\" size=\"1x\" style={{ color: 'black' }} /> \r\n\r\nexport const imageIcon = <FontAwesomeIcon icon={faImage} size=\"1x\" /> \r\n\r\nexport const parcelIcon = <FontAwesomeIcon icon={faCube} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const parcelActiveIcon = <FontAwesomeIcon icon={faCube} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const legalIcon = <FontAwesomeIcon icon={faThLarge} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const legalActiveIcon = <FontAwesomeIcon icon={faThLarge} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const homeIcon = <FontAwesomeIcon icon={faHome} size=\"1x\" /> \r\nexport const homeActiveIcon = <FontAwesomeIcon icon={faHome} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const loginIcon = <FontAwesomeIcon icon={faSignInAlt} size=\"1x\" /> \r\nexport const loginActiveIcon = <FontAwesomeIcon icon={faSignInAlt} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const searchIcon = <FontAwesomeIcon icon={faSearch} size=\"1x\" /> \r\nexport const searchActiveIcon = <FontAwesomeIcon icon={faSearch} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const caretSquareDownIcon = <FontAwesomeIcon icon={faCaretDown} size=\"1x\" />\r\nexport const caretSquareUpIcon = <FontAwesomeIcon icon={faCaretUp} size=\"1x\" />\r\n\r\nexport const chevronCircleLeftIcon = <FontAwesomeIcon icon={faChevronCircleLeft} style={{ color: 'darkGray' }} size=\"3x\"/>\r\nexport const chevronLeftIcon = <FontAwesomeIcon icon={faChevronLeft} size=\"1x\" className=\"side-navlink-icon\" />\r\nexport const chevronRightIcon = <FontAwesomeIcon icon={faChevronRight} size=\"1x\" className=\"side-navlink-icon\" />\r\n\r\nexport const statementIcon = <FontAwesomeIcon icon={faFileInvoiceDollar} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const statementActiveIcon = <FontAwesomeIcon icon={faFileInvoiceDollar} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const accountTypeIcon = <FontAwesomeIcon icon={faColumns} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const accountTypeActiveIcon = <FontAwesomeIcon icon={faColumns} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const commonIcon = <FontAwesomeIcon icon={faGlobe} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const commonActiveIcon = <FontAwesomeIcon icon={faGlobe} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const flatFeeIcon = <FontAwesomeIcon icon={faMoneyBillAlt} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const flatFeeActiveIcon = <FontAwesomeIcon icon={faMoneyBillAlt} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const unitRatesIcon = <FontAwesomeIcon icon={faUtensils} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const unitRatesActiveIcon = <FontAwesomeIcon icon={faUtensils} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const creditCardIcon = <FontAwesomeIcon icon={faCreditCard} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const creditCardActiveIcon = <FontAwesomeIcon icon={faCreditCard} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const cartPlusIcon = <FontAwesomeIcon icon={faCartPlus} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const cartPlusActiveIcon = <FontAwesomeIcon icon={faCartPlus} className=\"side-navlink-icon-active\" size=\"1x\" />\r\n\r\nexport const escrowReloadIcon = <FontAwesomeIcon icon={faPiggyBank} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const escrowReloadActiveIcon = <FontAwesomeIcon icon={faPiggyBank} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const userPurgeIcon = <FontAwesomeIcon icon={faUserAltSlash} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const userPurgeActiveIcon = <FontAwesomeIcon icon={faUserAltSlash} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const userClockIcon = <FontAwesomeIcon icon={faUserClock} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const userClockActiveIcon = <FontAwesomeIcon icon={faUserClock} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const userLockIcon = <FontAwesomeIcon icon={faUserLock} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const userLockActiveIcon = <FontAwesomeIcon icon={faUserLock} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const doorOpenIcon = <FontAwesomeIcon icon={faDoorOpen} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const doorOpenActiveIcon = <FontAwesomeIcon icon={faDoorOpen} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const databaseIcon = <FontAwesomeIcon icon={faDatabase} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const databaseActiveIcon = <FontAwesomeIcon icon={faDatabase} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const stethoscopeIcon = <FontAwesomeIcon icon={faStethoscope} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const stethoscopeActiveIcon = <FontAwesomeIcon icon={faStethoscope} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const stopWatchIcon = <FontAwesomeIcon icon={faStopwatch} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const stopWatchActiveIcon = <FontAwesomeIcon icon={faStopwatch} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const cogIconBlack = <FontAwesomeIcon icon={faCog} className=\"side-navlink-icon\" size=\"1x\" style={{ color: 'black' }} /> \r\n\r\nexport const paperclipIconBlue = <FontAwesomeIcon icon={faPaperclip} style={{ color: '#408CC7', marginTop: 5 }} size=\"1x\" />\r\n\r\nexport const redoIcon = <FontAwesomeIcon icon={faRedo} className=\"side-navlink-icon\" size=\"1x\" /> \r\n\r\nexport const warningIcon = <FontAwesomeIcon icon={faExclamationCircle} size=\"2x\" /> \r\nexport const warningSmallIcon = <FontAwesomeIcon icon={faExclamationCircle} size=\"1x\" /> \r\n\r\nexport const infoIcon = <FontAwesomeIcon icon={faInfoCircle} size=\"2x\" /> \r\nexport const infoSmallIcon = <FontAwesomeIcon icon={faInfoCircle} size=\"1x\" /> \r\n\r\nexport const backwardSmallIcon = <FontAwesomeIcon icon={faCaretSquareLeft} size=\"1x\" /> \r\n\r\nexport const fileDownloadSmallIcon = <FontAwesomeIcon icon={faFileDownload} size=\"1x\" /> \r\n\r\nexport const removeFormatIcon = <FontAwesomeIcon icon={faRemoveFormat} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const removeFormatActiveIcon = <FontAwesomeIcon icon={faRemoveFormat} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const paperPlaneIcon = <FontAwesomeIcon icon={faPaperPlane} size=\"1x\" />\r\n\r\nexport const mobileIcon = <FontAwesomeIcon icon={faMobileAlt} size=\"1x\" />\r\n\r\nexport const commentIcon = <FontAwesomeIcon icon={faComment} size=\"1x\" />\r\n\r\nexport const externalLinkIcon = <FontAwesomeIcon icon={faExternalLinkAlt} size=\"1x\" />\r\n\r\nexport const expandIcon = <FontAwesomeIcon icon={faExpand} size=\"1x\" />\r\n\r\nexport const listIcon = <FontAwesomeIcon icon={faList} size=\"1x\" />\r\n\r\nexport const fileImportIcon = <FontAwesomeIcon icon={faFileImport} size=\"1x\" />\r\nexport const fileImportActiveIcon = <FontAwesomeIcon icon={faFileImport} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const languageIcon = <FontAwesomeIcon icon={faLanguage} size=\"1x\" />\r\nexport const languageActiveIcon = <FontAwesomeIcon icon={faLanguage} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faQuestionCircle, faSquare, faCheckCircle, faCopyright, faCreditCard, faFileCode, faIdCard, faUser, faBookmark, faRegistered, faFileAlt, faAddressBook } from '@fortawesome/free-regular-svg-icons'\r\nimport '../../landshark.css';\r\n\r\nexport const checkIconGreen = <FontAwesomeIcon icon={faCheckCircle} size=\"2x\" style={{ color: 'green' }} /> \r\n\r\nexport const checkIcon = <FontAwesomeIcon icon={faCheckCircle} size=\"2x\" /> \r\n\r\nexport const registeredLandIcon = <FontAwesomeIcon icon={faRegistered} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const registeredLandActiveIcon = <FontAwesomeIcon icon={faRegistered} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const nameIcon = <FontAwesomeIcon icon={faUser} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const nameActiveIcon = <FontAwesomeIcon icon={faUser} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const fileIcon = <FontAwesomeIcon icon={faFileAlt} size=\"1x\" /> \r\nexport const fileActiveIcon = <FontAwesomeIcon icon={faFileAlt} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const fileCodeIcon = <FontAwesomeIcon icon={faFileCode} size=\"1x\" /> \r\n\r\nexport const copyrightIcon = <FontAwesomeIcon icon={faCopyright} size=\"sm\" /> \r\n\r\nexport const bookmarkIcon = <FontAwesomeIcon icon={faBookmark} size=\"1x\" />\r\n\r\nexport const userIcon = <FontAwesomeIcon icon={faUser} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const userIconBlack = <FontAwesomeIcon icon={faUser} className=\"side-navlink-icon\" size=\"1x\" style={{ color: 'black' }} /> \r\nexport const userActiveIcon = <FontAwesomeIcon icon={faUser} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const accountIcon = <FontAwesomeIcon icon={faIdCard} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const accountIconBlack = <FontAwesomeIcon icon={faIdCard} className=\"side-navlink-icon\" size=\"1x\" style={{ color: 'black' }} /> \r\nexport const accountActiveIcon = <FontAwesomeIcon icon={faIdCard} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const creditCardIcon = <FontAwesomeIcon icon={faCreditCard} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const creditCardActiveIcon = <FontAwesomeIcon icon={faCreditCard} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const grantorGranteeBookIcon = <FontAwesomeIcon icon={faAddressBook} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const grantorGranteeBookActiveIcon = <FontAwesomeIcon icon={faAddressBook} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const platIcon = <FontAwesomeIcon icon={faSquare} className=\"side-navlink-icon\" size=\"1x\" /> \r\nexport const platActiveIcon = <FontAwesomeIcon icon={faSquare} className=\"side-navlink-icon-active\" size=\"1x\" /> \r\n\r\nexport const questionIcon = <FontAwesomeIcon icon={faQuestionCircle} size=\"2x\" /> \r\n","import * as All1 from './font_awesome1'\r\nimport * as All2 from './font_awesome2'\r\n\r\nexport const atlasIcon = All1.atlasIcon;\r\nexport const atlasActiveIcon = All1.atlasActiveIcon;\r\nexport const arrowDownIcon = All1.arrowDownIcon;\r\nexport const arrowAltDownIcon = All1.arrowAltDownIcon;\r\nexport const arrowRightIcon = All1.arrowRightIcon;\r\nexport const arrowRightActiveIcon = All1.arrowRightActiveIcon;\r\nexport const arrowUpIcon = All1.arrowUpIcon;\r\nexport const checkIcon = All2.checkIcon;\r\nexport const checkIconGreen = All2.checkIconGreen;\r\nexport const spinnerIconGray = All1.spinnerIconGray;\r\nexport const spinnerIconWhiteSmall = All1.spinnerIconWhiteSmall;\r\nexport const spinnerIconWhiteBig = All1.spinnerIconWhiteBig;\r\nexport const dateIcon = All1.dateIcon;\r\nexport const dateActiveIcon = All1.dateActiveIcon;\r\nexport const imageIcon = All1.imageIcon;\r\nexport const platIcon = All2.platIcon;\r\nexport const platActiveIcon = All2.platActiveIcon;\r\nexport const addressIcon = All1.addressIcon;\r\nexport const addressActiveIcon = All1.addressActiveIcon; \r\nexport const bookIcon = All1.bookIcon;\r\nexport const bookActiveIcon = All1.bookActiveIcon;\r\n\r\nexport const documentNumberIcon = All1.documentNumberIcon;\r\nexport const documentNumberActiveIcon = All1.documentNumberActiveIcon;\r\nexport const dollarIcon = All1.dollarIcon;\r\nexport const dollarActiveIcon = All1.dollarActiveIcon;\r\nexport const dollarIconBlack = All1.dollarIconBlack;\r\nexport const parcelIcon = All1.parcelIcon;\r\nexport const parcelActiveIcon = All1.parcelActiveIcon; \r\nexport const legalIcon = All1.legalIcon;\r\nexport const legalActiveIcon = All1.legalActiveIcon;\r\nexport const homeIcon = All1.homeIcon;\r\nexport const homeActiveIcon = All1.homeActiveIcon; \r\nexport const searchIcon = All1.searchIcon;\r\nexport const searchActiveIcon = All1.searchActiveIcon;\r\nexport const caretSquareDownIcon = All1.caretSquareDownIcon;\r\nexport const caretSquareUpIcon = All1.caretSquareUpIcon;\r\nexport const chevronCircleLeftIcon = All1.chevronCircleLeftIcon;\r\nexport const chevronLeftIcon = All1.chevronLeftIcon;\r\nexport const chevronRightIcon = All1.chevronRightIcon;\r\nexport const statementIcon = All1.statementIcon; \r\nexport const statementActiveIcon = All1.statementActiveIcon; \r\nexport const accountTypeIcon = All1.accountTypeIcon; \r\nexport const accountTypeActiveIcon = All1.accountTypeActiveIcon; \r\nexport const commonIcon = All1.commonIcon;\r\nexport const commonActiveIcon = All1.commonActiveIcon; \r\nexport const flatFeeIcon = All1.flatFeeIcon;\r\nexport const flatFeeActiveIcon = All1.flatFeeActiveIcon; \r\nexport const unitRatesIcon = All1.unitRatesIcon;\r\nexport const unitRatesActiveIcon = All1.unitRatesActiveIcon; \r\nexport const creditCardIcon = All1.creditCardIcon; \r\nexport const creditCardActiveIcon = All1.creditCardActiveIcon; \r\nexport const cartPlusIcon = All1.cartPlusIcon; \r\nexport const cartPlusActiveIcon = All1.cartPlusActiveIcon;\r\nexport const escrowReloadIcon = All1.escrowReloadIcon; \r\nexport const escrowReloadActiveIcon = All1.escrowReloadActiveIcon;\r\nexport const userPurgeIcon = All1.userPurgeIcon;\r\nexport const userPurgeActiveIcon = All1.userPurgeActiveIcon;\r\nexport const userClockIcon = All1.userClockIcon;\r\nexport const userClockActiveIcon = All1.userClockActiveIcon;\r\nexport const userLockIcon = All1.userLockIcon;\r\nexport const userLockActiveIcon = All1.userLockActiveIcon;\r\nexport const doorOpenIcon = All1.doorOpenIcon;\r\nexport const doorOpenActiveIcon = All1.doorOpenActiveIcon;\r\nexport const databaseIcon = All1.databaseIcon;\r\nexport const databaseActiveIcon = All1.databaseActiveIcon;\r\nexport const stopWatchIcon = All1.stopWatchIcon;\r\nexport const stopWatchActiveIcon = All1.stopWatchActiveIcon;\r\nexport const stethoscopeIcon = All1.stethoscopeIcon;\r\nexport const stethoscopeActiveIcon = All1.stethoscopeActiveIcon;\r\nexport const cogIconBlack = All1.cogIconBlack;\r\nexport const paperclipIconBlue = All1.paperclipIconBlue;\r\nexport const loginIcon = All1.loginIcon;\r\nexport const loginActiveIcon = All1.loginActiveIcon; \r\nexport const minusIcon = All1.minusIcon;\r\nexport const filterIcon = All1.filterIcon;\r\n\r\nexport const registeredLandIcon = All2.registeredLandIcon;\r\nexport const registeredLandActiveIcon = All2.registeredLandActiveIcon;\r\nexport const nameIcon = All2.nameIcon; \r\nexport const nameActiveIcon = All2.nameActiveIcon; \r\nexport const fileIcon = All2.fileIcon; \r\nexport const fileActiveIcon = All2.fileActiveIcon; \r\nexport const fileCodeIcon = All2.fileCodeIcon; \r\nexport const grantorGranteeBookIcon = All2.grantorGranteeBookIcon;\r\nexport const grantorGranteeBookActiveIcon = All2.grantorGranteeBookActiveIcon;\r\nexport const copyrightIcon = All2.copyrightIcon; \r\nexport const bookmarkIcon = All2.bookmarkIcon; \r\nexport const userIcon = All2.userIcon;\r\nexport const userIconBlack = All2.userIconBlack;\r\nexport const userActiveIcon = All2.userActiveIcon; \r\nexport const accountIcon = All2.accountIcon; \r\nexport const accountIconBlack = All2.accountIconBlack; \r\nexport const accountActiveIcon = All2.accountActiveIcon; \r\n\r\nexport const creditCardIcon2 = All2.creditCardIcon;\r\nexport const creditCardActiveIcon2 = All2.creditCardActiveIcon;\r\n\r\nexport const redoIcon = All1.redoIcon;\r\n\r\nexport const warningIcon = All1.warningIcon; \r\nexport const warningSmallIcon = All1.warningSmallIcon; \r\nexport const infoIcon = All1.infoIcon; \r\nexport const infoSmallIcon = All1.infoSmallIcon; \r\nexport const backwardSmallIcon = All1.backwardSmallIcon;\r\nexport const fileDownloadSmallIcon = All1.fileDownloadSmallIcon;\r\n\r\nexport const questionIcon = All2.questionIcon;\r\n\r\nexport const auditLogPurgeIcon = All1.removeFormatIcon;\r\nexport const auditLogPurgeActiveIcon = All1.removeFormatActiveIcon;\r\n\r\nexport const paperPlaneIcon = All1.paperPlaneIcon;\r\nexport const mobileIcon = All1.mobileIcon;\r\nexport const commentIcon = All1.commentIcon;\r\nexport const externalLinkIcon = All1.externalLinkIcon;\r\nexport const calendarIcon = All1.calendarIcon;\r\nexport const expandIcon = All1.expandIcon;\r\nexport const listIcon = All1.listIcon;\r\n\r\nexport const fileImportIcon = All1.fileImportIcon;\r\nexport const fileImportActiveIcon = All1.fileImportActiveIcon;\r\n\r\nexport const languageIcon = All1.languageIcon;\r\nexport const languageActiveIcon = All1.languageActiveIcon;\r\n\r\n","import React, { Component } from 'react';\r\nimport { Modal, Button, Row, Col, Container } from 'react-bootstrap'\r\nimport { parse } from 'query-string';\r\nimport {backendLogger} from \"../../logger.js\"\r\n\r\nimport configData from \"../../config/config.json\";\r\n\r\nclass CreditCardImmediateChargeWindow extends Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.authFormRef = React.createRef();\r\n this.state = {previousShow: this.props.show};\r\n }\r\n\r\n handleAuthorizeDotNetCancelClicked = () => {\r\n this.props.cancelPayment();\r\n }\r\n\r\n handleAuthorizeDotNetPayClicked = (json) => {\r\n this.props.makePayment(json);\r\n }\r\n\r\n handleCancelClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.props.cancelPayment();\r\n }\r\n\r\n submitAuthorizeDotNetForm() {\r\n if (this.authFormRef.current) {\r\n this.authFormRef.current.submit();\r\n }\r\n }\r\n\r\n isValidMessage(o) {\r\n return typeof o === 'object' && o !== null\r\n }\r\n\r\n componentDidMount() {\r\n const script = document.createElement('script');\r\n script.src = configData.AUTHORIZE_ACCEPTJS_URL;\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (this.props.show === undefined) {\r\n // nothing to display\r\n return;\r\n } else if (this.props.show === prevProps.show) {\r\n // no change\r\n return;\r\n } else {\r\n // changing\r\n }\r\n\r\n if (this.props.show && !this.state.previousShow) {\r\n this.setState( {\r\n previousShow: this.props.show\r\n });\r\n\r\n this.submitAuthorizeDotNetForm();\r\n window.AuthorizeNetIFrame = {\r\n onReceiveCommunication: queryStr => {\r\n console.log('received communication: ', queryStr);\r\n \r\n const message = parse(queryStr);\r\n if (this.isValidMessage(message)) {\r\n \r\n switch (message.action) {\r\n case 'transactResponse':\r\n const json = JSON.parse(message.response);\r\n console.log('processing transactRepsponse: ', json);\r\n this.handleAuthorizeDotNetPayClicked(json);\r\n backendLogger.info(\"Recieved called back from iframecommunicator.html: \" + JSON.stringify(json));\r\n break;\r\n \r\n case 'resizeWindow':\r\n break;\r\n \r\n case 'cancel':\r\n this.handleAuthorizeDotNetCancelClicked();\r\n break;\r\n default:\r\n console.log('Unknown message action from authorize.net:[' + message.action + ']')\r\n };\r\n }\r\n },\r\n };\r\n } else if (!this.props.show && this.state.previousShow) {\r\n this.setState( {\r\n previousShow: this.props.show\r\n });\r\n\r\n if (window.AuthorizeNetIFrame) {\r\n delete window.AuthorizeNetIFrame;\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Modal show={this.props.show} onHide={this.handleCancelClick} size='lg' aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton>\r\n <Modal.Title>\r\n {this.props.title}\r\n </Modal.Title>\r\n </Modal.Header>\r\n\r\n <Modal.Body style={{ background: '#408CC7' }}>\r\n <iframe title='Credit Card Payment for Escrow' id=\"load_payment\" name=\"load_payment\" width=\"100%\" height=\"500px\" scrolling=\"yes\" />\r\n <form ref={this.authFormRef} id=\"send_hptoken\" action={configData.AUTHORIZE_PAYMENT_URL} method=\"post\" target=\"load_payment\">\r\n <input type=\"hidden\" name=\"token\" value={this.props.token} />\r\n </form>\r\n </Modal.Body>\r\n <Modal.Footer >\r\n <Container >\r\n <Row style={{ margin: 5 }} >\r\n <Col md='9' className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"secondary\" onClick={this.handleCancelClick}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default CreditCardImmediateChargeWindow;","import React, { Component } from 'react';\r\nimport { Modal, Button, Form, Row, Col, Container } from 'react-bootstrap'\r\n\r\nconst NO_OPTION_SELECTED = '';\r\nconst PREFIX = 'FlatFeeAddOnWindow: ';\r\n\r\n// Class notes.\r\n//\r\n// Properties:\r\n// - show: boolean: show or not\r\n// - title: string: window title\r\n// - options: { text: string, value: string }. value cannot be null\r\n// - backClicked(): callback when the back button is clicked (null == no button)\r\n// - buyClicked({ option: value-of-option-selected }): callback\r\n// when the buy button is clicked\r\n// - closeClicked(): callback when the close button is clicked\r\n//\r\n// The selected option starts with the 1st option. If the \r\n// currently selected option is not valid, the 1st option is chosen.\r\nclass FlatFeeAddOnWindow extends Component {\r\n constructor(props) {\r\n super(props);\r\n \r\n console.log(PREFIX + \"constructed with props\", props);\r\n\r\n this.state = {\r\n optionSelected: NO_OPTION_SELECTED\r\n };\r\n\r\n console.log(PREFIX + 'construction complete');\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n }\r\n\r\n handleBackClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.backClicked();\r\n }\r\n\r\n handleBuyClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.buyClicked({\r\n option: this.state.optionSelected\r\n });\r\n }\r\n \r\n handleCloseClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.closeClicked();\r\n }\r\n\r\n handleOptionChange = (event) => {\r\n this.setState( {\r\n optionSelected: event.target.value\r\n });\r\n }\r\n\r\n render() {\r\n console.log(PREFIX + 'rendering');\r\n console.log(PREFIX + 'state: ' , this.state);\r\n console.log(PREFIX + 'props: ' , this.props);\r\n \r\n // Ensure selected option is valid.\r\n // I'm not a fan of calling setState() here as a re-render \r\n // is involved, but the other option is a bit clumsy as\r\n // we would forget the selected value when coming back to\r\n // the window from the back and forward buttons in the workflow.\r\n let me = this;\r\n let validSelectedValue = null;\r\n\r\n this.props.options.map(function(option, idx) {\r\n if (me.state.optionSelected === option.value) {\r\n validSelectedValue = true;\r\n }\r\n });\r\n\r\n if (!validSelectedValue && (this.props.options.length > 0)) {\r\n this.setState( {\r\n optionSelected: this.props.options[0].value\r\n });\r\n }\r\n\r\n return (\r\n <Modal show={this.props.show} onHide={this.handleCloseClick} size='lg' aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton>\r\n <Modal.Title>\r\n Flat Fee Account Add On\r\n </Modal.Title>\r\n </Modal.Header>\r\n\r\n <Modal.Body style={{ background: '#408CC7' }}>\r\n <Container >\r\n <Row className=\"justify-content-md-center\">\r\n <Col md=\"auto\" style={{ paddingLeft: 2, paddingRight: 2, margin: 5, marginLeft: 10, background: 'white' }}>\r\n <Container>\r\n <Row>\r\n <Col>\r\n <Container>\r\n <Row>\r\n <span style={{ fontWeight: 'bold'}}>{this.props.title}</span>\r\n </Row>\r\n { \r\n this.props.options.map(function(option, idx) {\r\n return <>\r\n <Row>\r\n <Form.Check name='purchase' id={'PURCHASE_'+idx} type='radio' \r\n checked={me.state.optionSelected === option.value} onChange={me.handleOptionChange} \r\n style={{ display: 'inline-block' }} \r\n label={option.text} value={option.value} /> \r\n </Row>\r\n </>;\r\n })\r\n }\r\n </Container>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Col> \r\n </Row>\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer >\r\n <Container >\r\n <Row style={{ margin: 5 }} >\r\n {\r\n this.props.backClicked && \r\n <Col md='3' className='align-self-end' style={{ textAlign: 'left' }}>\r\n <Button variant=\"secondary\" onClick={this.handleBackClick}>Back</Button>\r\n </Col>\r\n }\r\n <Col md='9' className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"primary\" style={{ marginRight: 8 }} onClick={this.handleBuyClick}>Buy</Button>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default FlatFeeAddOnWindow;\r\n","import React, { Component } from 'react';\r\nimport { Modal, Button, Row, Col, Container, Table } from 'react-bootstrap'\r\n\r\nconst PREFIX = 'FlatFeeAddOnConfirmationWindow: ';\r\n\r\n// Class notes.\r\n//\r\n// Properties:\r\n// - show: boolean: show or not\r\n// - content: {\r\n// accountMessage: '',\r\n// beginningBalance: null, // { description: '', value: '' }\r\n// endingBalance: null, // { description: '', value: '' }\r\n// headers: [],\r\n// insufficientBalance: false,\r\n// purchase: { description: '', value: ''}\r\n// }\r\n// - backClicked(): callback when the back button is clicked\r\n// - buyClicked(): callback\r\n// when the buy button is clicked\r\n// - closeClicked(): callback when the close button is clicked\r\n//\r\nclass FlatFeeAddOnConfirmationWindow extends Component {\r\n constructor(props) {\r\n super(props);\r\n \r\n console.log(PREFIX + \"constructed with props\", props);\r\n\r\n this.defaultContent = {\r\n accountMessage: '',\r\n beginningBalance: null,\r\n endingBalance: null,\r\n headers: [],\r\n insufficientBalance: false,\r\n purchase: { description: '', value: ''}\r\n };\r\n \r\n this.state = {\r\n };\r\n\r\n console.log(PREFIX + 'construction complete');\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n }\r\n\r\n handleBackClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.backClicked();\r\n }\r\n\r\n handleBuyClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.buyClicked();\r\n }\r\n \r\n handleCloseClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.closeClicked();\r\n }\r\n\r\n render() {\r\n console.log(PREFIX + 'rendering');\r\n console.log(PREFIX + 'props: ' , this.props);\r\n console.log(PREFIX + 'state: ' , this.state);\r\n \r\n let content = Object.assign({}, this.defaultContent, this.props.content);\r\n let indent = <span> </span>;\r\n\r\n return (\r\n <Modal show={this.props.show} onHide={this.handleCloseClick} size='lg' aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton>\r\n <Modal.Title>\r\n Flat Fee Account Add On Confirmation\r\n </Modal.Title>\r\n </Modal.Header>\r\n\r\n <Modal.Body style={{ background: '#408CC7' }}>\r\n <Container >\r\n <Row className=\"justify-content-md-center\">\r\n <Col md=\"auto\" style={{ paddingLeft: 2, paddingRight: 2, margin: 5, marginLeft: 10, background: 'white' }}>\r\n <Container>\r\n <Row>\r\n <Col>\r\n <Container style={{ textAlign: 'center' }}> \r\n {\r\n content.headers.map((header, idx) => {\r\n let style = {};\r\n \r\n if (idx === 1) style.fontWeight = 'bold';\r\n\r\n return <>\r\n <span style={style}>{header}</span><br/>\r\n </>;\r\n })\r\n }\r\n </Container>\r\n <Row> </Row>\r\n <Container>\r\n <Table borderless size=\"sm\">\r\n <tbody>\r\n <tr>\r\n <td colSpan=\"2\" style={{ fontWeight: 'bold' }}>{content.accountMessage}</td>\r\n </tr>\r\n {\r\n content.beginningBalance && \r\n <tr>\r\n <td style={{ fontWeight: 'bold' }}>{content.beginningBalance.description}</td>\r\n <td style={{ textAlign: 'right' }}>{content.beginningBalance.value}</td>\r\n </tr>\r\n }\r\n <tr>\r\n <td style={{ fontWeight: 'bold' }}>{content.purchaseMessage}</td>\r\n <td> </td>\r\n </tr>\r\n <tr>\r\n <td>{indent}{content.purchase.description}</td>\r\n <td style={{ textAlign: 'right' }}>{content.purchase.value}</td>\r\n </tr>\r\n {\r\n content.endingBalance && content.insufficientBalance &&\r\n <tr>\r\n <td style={{ fontWeight: 'bold' }}>{content.endingBalance.description}</td>\r\n <td style={{ fontWeight: 'bold', textDecoration: 'underline', textAlign: 'right' }}>{content.endingBalance.value}</td>\r\n </tr>\r\n }\r\n {\r\n content.endingBalance && !content.insufficientBalance &&\r\n <tr>\r\n <td style={{ fontWeight: 'bold' }}>{content.endingBalance.description}</td>\r\n <td style={{ textAlign: 'right' }}>{content.endingBalance.value}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </Table>\r\n </Container>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Col> \r\n </Row>\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer >\r\n <Container >\r\n <Row style={{ margin: 5 }} >\r\n <Col md='3' className='align-self-end' style={{ textAlign: 'left' }}>\r\n <Button variant=\"secondary\" onClick={this.handleBackClick}>Back</Button>\r\n </Col>\r\n <Col md='9' className='align-self-end' style={{ textAlign: 'right' }}>\r\n {\r\n !content.insufficientBalance &&\r\n <Button variant=\"primary\" style={{ marginRight: 8 }} onClick={this.handleBuyClick}>Buy</Button>\r\n }\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default FlatFeeAddOnConfirmationWindow;\r\n","import React, { Component } from \"react\"\r\nimport { connect } from \"react-redux\";\r\n\r\nimport FlatFeeAddonWindow from \"../search/FlatFeeAddonWindow\";\r\nimport FlatFeeAddonConfirmationWindow from \"../search/FlatFeeAddonConfirmationWindow\";\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport Alert from '../common/modal/Alert'\r\nimport AjaxResult from \"../../utils/AjaxResult\";\r\nimport AjaxResponseHandler from \"../../utils/AjaxResponseHandler\"\r\n\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\nimport Loading from '../common/modal/Loading';\r\nimport { refreshUsageBalance, refreshUsageBalanceFromContent } from \"../../redux/actions/otherLandLinkActions\";\r\n\r\n// Child state actions.\r\nconst ALERT_MESSAGE = 'MESSAGE';\r\nconst ALERT_WARNING = 'WARNING';\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n refreshUsageBalanceFromContent: (content) => dispatch(refreshUsageBalanceFromContent(content)),\r\n refreshUsageBalance: (userId) => dispatch(refreshUsageBalance(userId))\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n };\r\n}\r\n\r\n// This class deals with adding to a flat fee account.\r\n//\r\n// Props:\r\n// - show: boolean if the window should show\r\n// - imageStateReference: { imageState: state } If state==null, we will create\r\n// and destroy this internally.\r\n// - backClicked(): notification that the component had the back button clicked (null==no button)\r\n// - closeClicked(): notification that the component was closed\r\n// - completed(): notification that a purchase was made\r\nclass FlatFeeAddon extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n addonWindow : this.createAddonWindowState(false),\r\n addonConfirmationWindow: this.createAddonConfirmationWindowState(null, false),\r\n\r\n alertWindow: {\r\n callback: null,\r\n message: '',\r\n show: false,\r\n type: ''\r\n },\r\n loadingStatus: \"\"\r\n };\r\n \r\n this.imageState = null; // set if none in props\r\n }\r\n\r\n addShowLoading = (newState) => {\r\n newState.loadingStatus = LOADING_STATUES.LOADING;\r\n }\r\n\r\n showLoading = (func) => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n }, function() { \r\n if (func) func();\r\n })\r\n\r\n return true;\r\n } else {\r\n if (func) func();\r\n } \r\n\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n loadOptions = () => {\r\n let me = this;\r\n this.showLoading( function() { me.loadOptions2(); });\r\n }\r\n\r\n loadOptions2 = () => {\r\n let request = {\r\n };\r\n\r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"flatFee/getAddOnOptions\", request, { withCredentials: true })\r\n .then((response) => {\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n this.hideLoading();\r\n } else {\r\n this.imageState = result.content();\r\n this.setState( {\r\n addonWindow : this.createAddonWindowState(true),\r\n loadingStatus: ''\r\n });\r\n }\r\n }, (error) => {\r\n AjaxResponseHandler.handleError(error, this.showAlertText, null);\r\n this.hideLoading();\r\n })\r\n })();\r\n }\r\n\r\n componentDidMount = () => {\r\n if (!this.props.show) return;\r\n this.loadOptions();\r\n }\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n // We get here is the IMAGE button is clicked or an internal state change\r\n // occurs.\r\n if (!this.props.show) return;\r\n \r\n // Reload state if hide->show\r\n if (!prevProps.show) {\r\n if (this.hasImageStateProperty()) {\r\n this.setState( {\r\n addonWindow : this.createAddonWindowState(true)\r\n } );\r\n } else {\r\n this.loadOptions();\r\n }\r\n }\r\n }\r\n\r\n createAddonWindowState = (show) => {\r\n return {\r\n show: show\r\n };\r\n }\r\n\r\n createAddonConfirmationWindowState = (content, show) => {\r\n return {\r\n content: content || {},\r\n show: show\r\n };\r\n }\r\n\r\n addonWindowCallbackBackClicked = () => {\r\n let newState = {};\r\n let me = this;\r\n\r\n this.addShowAddonWindow(newState, false);\r\n this.setState(newState, function() {\r\n me.cancelImageState( me.props.backClicked );\r\n });\r\n }\r\n\r\n addonConfirmationWindowCallbackBackClicked = () => {\r\n let newState = {};\r\n \r\n this.addShowAddonConfirmationWindow(newState, false);\r\n this.addShowAddonWindow(newState, true);\r\n this.setState(newState);\r\n }\r\n\r\n addonWindowCallbackCloseClicked = () => {\r\n let newState = {};\r\n let me = this;\r\n\r\n this.addShowAddonWindow(newState, false);\r\n this.setState(newState, function() {\r\n me.cancelImageState( me.props.closeClicked );\r\n });\r\n }\r\n\r\n addonConfirmationWindowCallbackCloseClicked = () => {\r\n let newState = {};\r\n let me = this;\r\n\r\n this.addShowAddonConfirmationWindow(newState, false);\r\n this.setState(newState, function() {\r\n me.cancelImageState( me.props.closeClicked );\r\n });\r\n }\r\n\r\n cancelImageState = (func) => {\r\n // We only cancel internally created state.\r\n if (!this.imageState) {\r\n if (func) func();\r\n return;\r\n }\r\n\r\n let request = {\r\n imageStateGuid: this.imageState.guid\r\n };\r\n \r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"imaging/cancelImageState\", request, { withCredentials: true })\r\n .then((response) => {\r\n \r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.imageState = null;\r\n }\r\n\r\n if (func) func();\r\n }, (error) => {\r\n AjaxResponseHandler.handleError(error, this.showAlertText, null);\r\n if (func) func();\r\n })\r\n })();\r\n }\r\n\r\n hasImageStateProperty = () => {\r\n return this.props.imageStateReference && this.props.imageStateReference.imageState &&\r\n this.props.imageStateReference.imageState.purchaseOptions && this.props.imageStateReference.imageState.purchaseOptions.flatFeeOptions;\r\n }\r\n\r\n getImageState = () => {\r\n if (this.hasImageStateProperty()) {\r\n return this.props.imageStateReference.imageState;\r\n } else {\r\n return this.imageState;\r\n }\r\n }\r\n\r\n addonConfirmationWindowCallbackBuyClicked = () => {\r\n // Complete the payment.\r\n let me = this;\r\n let request = {\r\n imageStateGuid: this.getImageState().guid\r\n };\r\n \r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"flatFee/userAddOn\", request, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else if (result.content().ok) {\r\n let newState = {};\r\n\r\n this.addAlert(newState, \r\n me.createAlertWindowParams(true, result.content().message, null, ALERT_MESSAGE));\r\n this.addShowAddonConfirmationWindow(newState, false);\r\n this.setState(newState, function() {\r\n me.cancelImageState(me.props.completed);\r\n });\r\n } else {\r\n // Just stay on the page when an error occurs.\r\n this.showAlert(\r\n me.createAlertWindowParams(true, result.content().message, null, ALERT_WARNING));\r\n }\r\n }, (error) => {\r\n AjaxResponseHandler.handleError(error, this.showAlertText, null);\r\n })\r\n })();\r\n }\r\n\r\n addonWindowCallbackBuyClicked = (state) => {\r\n // Complete the payment.\r\n let me = this;\r\n let request = {\r\n option: state.option,\r\n imageStateReference: { imageStateGuid: this.getImageState().guid }\r\n };\r\n\r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"flatFee/getUserAddOnConfirmation\", request, { withCredentials: true })\r\n .then((response) => {\r\n \r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else if (result.content().ok) {\r\n // Close the confirm window, put up the image window.\r\n let newState = {};\r\n\r\n me.addShowAddonWindow(newState, false);\r\n newState.addonConfirmationWindow = me.createAddonConfirmationWindowState(result.content(), true);\r\n me.setState(newState);\r\n } else {\r\n // Just stay on the page when an error occurs.\r\n me.showAlert(\r\n me.createAlertWindowParams(true, result.content().errorMessage, null, ALERT_WARNING));\r\n }\r\n }, (error) => {\r\n AjaxResponseHandler.handleError(error, me.showAlertText, null);\r\n })\r\n })();\r\n }\r\n\r\n addShowAddonWindow = (state, show) => {\r\n state.addonWindow = this.createAddonWindowState(show);\r\n }\r\n\r\n addShowAddonConfirmationWindow = (state, show) => {\r\n state.addonConfirmationWindow = this.createAddonConfirmationWindowState(null, show);\r\n }\r\n\r\n createAlertWindowParams = (show, message, callback, type) => {\r\n if (show) {\r\n return {\r\n callback: callback,\r\n message: message,\r\n show: show,\r\n type: type ? type : ALERT_MESSAGE\r\n };\r\n } else {\r\n return {\r\n callback: null,\r\n message: '',\r\n show: show,\r\n type: ALERT_MESSAGE\r\n };\r\n }\r\n }\r\n\r\n addAlert = (state, alertWindowParams) => {\r\n\t\tstate.alertWindow = alertWindowParams;\r\n }\r\n\t\r\n showAlert = (alertWindowParams) => {\r\n\t\tthis.setState({\r\n\t\t alertWindow: alertWindowParams\r\n\t\t})\r\n\t }\r\n\t\r\n showAlertText = (msg) => {\r\n this.showAlert(this.createAlertWindowParams(true, msg, null, ALERT_MESSAGE));\r\n }\r\n\r\n\thideAlert = () => {\r\n // After the alert is confirmed, close the alert and pay for the order.\r\n let callback = this.state.alertWindow.callback;\r\n let params = this.createAlertWindowParams(false);\r\n\t\tthis.setState({\r\n\t\t\t alertWindow: params\r\n\t\t },\r\n () => { if (callback) callback(); }\r\n );\r\n\t}\r\n\r\n render() {\r\n // console.log(\"BEGIN flatfeeaddon ###################################\");\r\n // console.log(\"add on: \" + this.state.addonWindow.show)\r\n // console.log(\"confirm: \" + this.state.addonConfirmationWindow.show)\r\n // console.log(\"END flatfeeaddon ###################################\");\r\n\r\n let imageState = this.getImageState();\r\n var title;\r\n var options;\r\n\r\n if (imageState == null) {\r\n title = '';\r\n options = [];\r\n } else {\r\n title = imageState.purchaseOptions.flatFeeOptions.title;\r\n options = imageState.purchaseOptions.flatFeeOptions.options;\r\n }\r\n\r\n return (\r\n <>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <FlatFeeAddonWindow\r\n show={this.state.addonWindow.show}\r\n title={title}\r\n options={options}\r\n backClicked={this.props.backClicked ? this.addonWindowCallbackBackClicked : null}\r\n buyClicked={this.addonWindowCallbackBuyClicked}\r\n closeClicked={this.addonWindowCallbackCloseClicked} />\r\n <FlatFeeAddonConfirmationWindow \r\n show={this.state.addonConfirmationWindow.show}\r\n content={this.state.addonConfirmationWindow.content} \r\n backClicked={this.addonConfirmationWindowCallbackBackClicked}\r\n buyClicked={this.addonConfirmationWindowCallbackBuyClicked}\r\n closeClicked={this.addonConfirmationWindowCallbackCloseClicked} />\r\n <Alert show={this.state.alertWindow.show} hideAlert={this.hideAlert} message={this.state.alertWindow.message} type={this.state.alertWindow.type} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(FlatFeeAddon);","export const LOADING_STATUES = {\"LOADING\": \"LOADING\", \"SUCCESS\":\"SUCCESS\" }\r\nexport const ALERT_TYPES = {\"OK\": \"OK\", \"WARNING\": \"WARNING\", \"INFO\": \"INFO\" }\r\nexport const DIRECTION_OPTIONS = [{code : \"\", description: \"\"}, {code : \"E\", description: \"E\"}, { code: \"S\", description: \"S\"}, { code: \"W\", description: \"W\"}, { code: \"N\", description: \"N\"}, { code: \"SE\", description: \"SE\"}, { code: \"SW\", description: \"SW\"}, { code: \"NE\", description: \"NE\"}, { code: \"NW\", description: \"NW\"}]\r\nexport const SEARCH_RESULTS_SOURCE = { \"LANDLINK\": \"LANDLINK\", \"IMAGING_SYSTEM\": \"IMAGING_SYSTEM\" }\r\n","import React from 'react';\r\n\r\nimport { Modal, Container, Col, Row } from 'react-bootstrap'\r\nimport { spinnerIconWhiteBig } from \"../../../img/font_awesome/font_awesome\"\r\n\r\nexport default class Loading extends React.Component {\r\n render() {\r\n return (\r\n <Modal show={this.props.loadingIndicator} backdrop=\"static\" keyboard={false} size=\"sm\" aria-labelledby=\"contained-modal-title-vcenter\" centered >\r\n <Modal.Body>\r\n <Container fluid=\"true\" style={{ padding: 20, background: 'darkGray', margin: 0}}>\r\n <Row className=\"justify-content-md-center\">\r\n <Col className=\"text-center\" style={{ color: 'white', fontSize: 25}}>\r\n {spinnerIconWhiteBig} Loading\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Body>\r\n </Modal>\r\n )\r\n }\r\n}","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 249;","import React, { Component } from 'react';\r\nimport { Modal, Button, Row, Col, Container, Table } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\n\r\nconst PREFIX = 'ImageConfirmOrderWindow: ';\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n preauthAmount: state.countyConfigCreditCardExtraReducer.maxAmount\r\n };\r\n }\r\n\r\n// Class notes.\r\n//\r\n// - props.confirmOrderWindow.*\r\n// - action ( 'show' or any )\r\n// - feeSchedule (the fee schedule for the charges)\r\n// - show: boolean if the window should show\r\n// - backClicked(): notification that the back button was clicked\r\n// - buyOptionsClicked(): notification that the buy button was clicked\r\n// - closeClicked(): notification that the window was closed\r\n// - continueClicked(): notification that the continue button was clicked\r\n// - reauthClicked(): notification that the reauth button was clicked\r\n// feeSchedule: {\r\n// alreadyPurchasedMessage: null,\r\n// beginningBalance: { description: '', value: '' },\r\n// endingBalance: { description: '', value: '' },\r\n// insufficientBalance: false,\r\n// insufficientBalanceMessage: false,\r\n// multipleItemPurchase: null,\r\n// noPurchasingOptionsAvailableMessage: null,\r\n// singleItemPurchase: null\r\n//},\r\n// imageState: {\r\n// purchaseOptions: {\r\n// }\r\nclass ImageConfirmOrderWindow extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n };\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n }\r\n\r\n handleBackClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.backClicked();\r\n }\r\n\r\n handleBuyOptionsClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.buyOptionsClicked();\r\n }\r\n\r\n handleContinueClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.continueClicked();\r\n }\r\n\r\n handleReauthClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.reauthClicked();\r\n }\r\n\r\n handleCloseClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.closeClicked();\r\n }\r\n\r\n render() {\r\n if (!this.props.show) {\r\n return <></>;\r\n }\r\n\r\n let feeSchedule = this.props.feeSchedule;\r\n let purchaseOptions = this.props.imageState.purchaseOptions;\r\n\r\n\r\n let title = \"\";\r\n\r\n if (feeSchedule.singleItemPurchase) {\r\n title = feeSchedule.singleItemPurchase.item.description + ' Download';\r\n } else if (feeSchedule.multipleItemPurchase) {\r\n title = feeSchedule.multipleItemPurchase.itemHeaderDescription + ' Download';\r\n }\r\n\r\n if (feeSchedule.insufficientBalance && purchaseOptions.hasBuyOptions && purchaseOptions.creditCardOptions && purchaseOptions.creditCardOptions.authorizationInfo.authorized) {\r\n title = \"Exceeding Current Preauthorization\"\r\n }\r\n\r\n return (\r\n <Modal show={this.props.show} onHide={this.handleCloseClick} size='lg' aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton>\r\n <Modal.Title>\r\n {title}\r\n </Modal.Title>\r\n </Modal.Header>\r\n\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black', background: '#3674AB' }}>\r\n <Container >\r\n {\r\n feeSchedule.insufficientBalance && purchaseOptions.hasBuyOptions && purchaseOptions.creditCardOptions && !purchaseOptions.creditCardOptions.authorizationInfo.authorized &&\r\n <Row className=\"justify-content-md-left\" style={{ background: '#3674AB', color: 'white', fontSize: 20 }}>\r\n Image download will incur a charge. To continue, it requires a credit card preauthorization of ${this.props.preauthAmount}. Final and actual credit card charges for this download are computed as below:\r\n </Row>\r\n }\r\n {\r\n feeSchedule.insufficientBalance && purchaseOptions.hasBuyOptions && purchaseOptions.creditCardOptions && purchaseOptions.creditCardOptions.authorizationInfo.authorized &&\r\n <Row className=\"justify-content-md-left\" style={{ background: '#3674AB', color: 'white', fontSize: 20 }}>\r\n Your charges are exceeding the current preauthorized amount. To continue, it requires another round of credit card preauthorization of ${this.props.preauthAmount}. Final and actual credit card charges for this download are computed as below:\r\n </Row>\r\n }\r\n <Row className=\"justify-content-md-center\">\r\n <Col md=\"auto\" style={{ border: '2px solid black', paddingLeft: 2, paddingRight: 2, margin: 5, marginLeft: 10, background: 'white' }}>\r\n <Container>\r\n <Row>\r\n <Col>\r\n <Container>\r\n <Table borderless size=\"sm\">\r\n <tbody>\r\n <tr>\r\n <td style={{ fontWeight: 'bold' }}>{feeSchedule.beginningBalance.description}</td>\r\n <td style={{ textAlign: 'right' }}>{feeSchedule.beginningBalance.value}</td>\r\n </tr>\r\n <tr>\r\n <td style={{ fontWeight: 'bold' }}>{feeSchedule.purchaseMessage}</td>\r\n <td> </td>\r\n </tr>\r\n {\r\n feeSchedule.singleItemPurchase &&\r\n <tr>\r\n <td>Download charges</td>\r\n <td style={{ textAlign: 'right' }}>{feeSchedule.singleItemPurchase.item.value}</td>\r\n </tr>\r\n }\r\n {\r\n feeSchedule.multipleItemPurchase &&\r\n <>\r\n <tr>\r\n <td>Download charges</td>\r\n <td> </td>\r\n </tr>\r\n {\r\n feeSchedule.multipleItemPurchase.items.map((item) => {\r\n return <>\r\n <tr>\r\n <td>{item.description}</td>\r\n <td style={{ textAlign: 'right' }}>{item.value}</td>\r\n </tr>\r\n </>;\r\n })\r\n }\r\n <tr>\r\n <td>{feeSchedule.multipleItemPurchase.total.description}</td>\r\n <td style={{ textAlign: 'right' }}>{feeSchedule.multipleItemPurchase.total.value}</td>\r\n </tr>\r\n </>\r\n }\r\n {\r\n feeSchedule.insufficientBalance &&\r\n <tr>\r\n <td style={{ fontWeight: 'bold' }}>{feeSchedule.endingBalance.description}</td>\r\n <td style={{ fontWeight: 'bold', textDecoration: 'underline', textAlign: 'right' }}>{feeSchedule.endingBalance.value}</td>\r\n </tr>\r\n }\r\n {\r\n !feeSchedule.insufficientBalance &&\r\n <tr>\r\n <td style={{ fontWeight: 'bold' }}>{feeSchedule.endingBalance.description}</td>\r\n <td style={{ textAlign: 'right' }}>{feeSchedule.endingBalance.value}</td>\r\n </tr>\r\n }\r\n {\r\n (feeSchedule.alreadyPurchasedMessage != null) &&\r\n <tr>\r\n <td colSpan=\"2\" style={{ fontWeight: 'bold' }}>{feeSchedule.alreadyPurchasedMessage}</td>\r\n </tr>\r\n }\r\n {\r\n feeSchedule.insufficientBalance &&\r\n <tr>\r\n <td colSpan=\"2\" style={{ fontWeight: 'bold' }}>{feeSchedule.insufficientBalanceMessage}</td>\r\n </tr>\r\n }\r\n {\r\n feeSchedule.insufficientBalance && !purchaseOptions.hasBuyOptions &&\r\n <tr>\r\n <td colSpan=\"2\" style={{ fontWeight: 'bold' }}>{feeSchedule.noPurchasingOptionsAvailableMessage}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </Table>\r\n </Container>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer >\r\n <Container >\r\n <Row style={{ margin: 5 }} >\r\n <Col md='3' className='align-self-end' style={{ textAlign: 'left' }}>\r\n <Button variant=\"secondary\" onClick={this.handleBackClick}>Back</Button>\r\n </Col>\r\n <Col md='9' className='align-self-end' style={{ textAlign: 'right' }}>\r\n {\r\n feeSchedule.insufficientBalance && purchaseOptions.hasBuyOptions && !purchaseOptions.creditCardOptions &&\r\n <Button variant=\"primary\" style={{ marginRight: 8 }} onClick={this.handleBuyOptionsClick}>Add to Escrow</Button>\r\n }\r\n {\r\n feeSchedule.insufficientBalance && purchaseOptions.hasBuyOptions && purchaseOptions.creditCardOptions && !purchaseOptions.creditCardOptions.authorizationInfo.authorized &&\r\n <Button variant=\"primary\" style={{ marginRight: 8 }} onClick={this.handleBuyOptionsClick}>Continue to Preauthorization</Button>\r\n }\r\n {\r\n feeSchedule.insufficientBalance && purchaseOptions.hasBuyOptions && purchaseOptions.creditCardOptions && purchaseOptions.creditCardOptions.authorizationInfo.authorized &&\r\n <Button variant=\"primary\" style={{ marginRight: 8 }} onClick={this.handleReauthClick}>Continue to Preauthorization</Button>\r\n }\r\n {\r\n !feeSchedule.insufficientBalance &&\r\n <Button variant=\"primary\" style={{ marginRight: 8 }} onClick={this.handleContinueClick}>{feeSchedule.downloadButtonText}</Button>\r\n }\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(ImageConfirmOrderWindow);\r\n","import React, { Component } from 'react';\r\nimport { Modal, Button, Form, Row, Col, Container, Table } from 'react-bootstrap'\r\n\r\nconst PREFIX = 'EscrowAddOnWindow: ';\r\n\r\n// Class notes.\r\n//\r\n// - props.escrowAddOnWindow.*\r\n// - action ( 'show' or any )\r\n// - event.backClicked\r\n// - event.closeClicked\r\n// - imageState\r\n// - show\r\n// - version\r\n//\r\n// The CONTINUE handler passes back:\r\n// option: The option value selected\r\nclass EscrowAddOnWindow extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n console.log(PREFIX + \"constructed with props\", props);\r\n\r\n this.state = {\r\n deposit: '0'\r\n };\r\n\r\n this.version = 0;\r\n\r\n this.updateStateFromProps(true, false);\r\n console.log(PREFIX + 'construction complete');\r\n }\r\n\r\n handleBackClick = (event) => {\r\n console.log(PREFIX + 'handleBackClick');\r\n\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.state.event.backClicked({});\r\n }\r\n\r\n handleBuyClick = (event) => {\r\n console.log(PREFIX + 'handleBuyClick');\r\n\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.state.event.buyClicked({\r\n deposit: this.state.deposit\r\n });\r\n }\r\n \r\n handleCloseClick = (event) => {\r\n console.log(PREFIX + 'handleCloseClick');\r\n\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.state.event.closeClicked();\r\n }\r\n\r\n handleDepositChanged = (event) => {\r\n console.log(PREFIX + 'handleDepositChanged: ', event.target.value);\r\n\r\n // Since the user is typing here, select the \"pages\" form of entry.\r\n this.updateState( {\r\n deposit: event.target.value\r\n });\r\n }\r\n\r\n handleDepositBlur = (event) => {\r\n console.log(PREFIX + 'handleDepositBlur');\r\n\r\n // Update the new value so the server gets it.\r\n this.updateState( {\r\n deposit: event.target.value\r\n });\r\n }\r\n\r\n updateStateFromProps = (createIfMissing, callSetState) => {\r\n let source = this.props.escrowAddonWindow;\r\n\r\n if (!source) {\r\n if (!createIfMissing) return;\r\n\r\n source = {\r\n action: '',\r\n event: {},\r\n imageState: null,\r\n show: false,\r\n version: (this.version < 1) ? 1 : this.version + 1\r\n }\r\n }\r\n\r\n if (source.version <= this.version) return;\r\n\r\n console.log(PREFIX + 'updating state from props version ' + source.version + ' state version ' + this.version);\r\n console.log(PREFIX + 'updating state from source', source);\r\n\r\n let newState = callSetState ? {} : this.state;\r\n\r\n newState.show = source.show;\r\n this.version = source.version;\r\n\r\n if (!source.imageState) {\r\n source.imageState = {\r\n purchaseOptions: {\r\n escrowOptions: {\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (source.action !== 'show') {\r\n newState.event = source.event;\r\n newState.imageState = source.imageState;\r\n }\r\n\r\n if (callSetState) {\r\n this.updateState(newState);\r\n }\r\n }\r\n\r\n updateState = (newState) => {\r\n console.log(PREFIX + 'setState', newState);\r\n this.setState(newState);\r\n }\r\n\r\n render() {\r\n console.log(PREFIX + 'rendering state version ' + this.version);\r\n\r\n this.updateStateFromProps(false, false);\r\n\r\n console.log(PREFIX + 'state: ', this.state);\r\n console.log(PREFIX + 'props: ', this.props);\r\n\r\n let eo = this.state.imageState.purchaseOptions.escrowOptions;\r\n\r\n return (\r\n <Modal show={this.state.show} onHide={this.handleCloseClick} size='lg' aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton>\r\n <Modal.Title>\r\n Escrow Account Add On\r\n </Modal.Title>\r\n </Modal.Header>\r\n\r\n <Modal.Body style={{ background: '#408CC7' }}>\r\n <Container >\r\n <Row className=\"justify-content-md-center\">\r\n <Col md=\"auto\" style={{ paddingLeft: 2, paddingRight: 2, margin: 5, marginLeft: 10, background: 'white' }}>\r\n <Container>\r\n <Row>\r\n <Col>\r\n <Container>\r\n <Table borderless size=\"sm\">\r\n <tbody>\r\n <tr>\r\n <td colSpan=\"2\" style={{ fontWeight: 'bold' }}>{eo.accountMessage}</td>\r\n </tr>\r\n {\r\n eo.beginningBalance &&\r\n <tr>\r\n <td style={{ fontWeight: 'bold' }}>{eo.beginningBalance.description}</td>\r\n <td style={{ textAlign: 'right' }}>{eo.beginningBalance.value}</td>\r\n </tr>\r\n }\r\n {\r\n eo.lowBalanceMessage &&\r\n <tr>\r\n <td>{eo.lowBalanceMessage}</td>\r\n <td style={{ textAlign: 'right' }}> </td>\r\n </tr>\r\n }\r\n <tr>\r\n <td style={{ fontWeight: 'bold', verticalAlign: 'middle' }}>{eo.depositAmountMessage}</td>\r\n <td style={{ textAlign: 'right', verticalAlign: 'middle' }}>\r\n <Form.Control id='deposit' style={{ width: 200, margin: 5, display: 'inline-block' }} \r\n type='text' onChange={this.handleDepositChanged} \r\n onBlur={this.handleDepositBlur} value={this.state.deposit} /> \r\n </td>\r\n </tr>\r\n {\r\n eo.surchargeMessage &&\r\n <tr>\r\n <td>{eo.surchargeMessage}</td>\r\n <td style={{ textAlign: 'right' }}> </td>\r\n </tr>\r\n }\r\n {\r\n eo.endingBalance &&\r\n <tr>\r\n <td style={{ fontWeight: 'bold' }}>{eo.endingBalance.description}</td>\r\n <td style={{ textAlign: 'right' }}>{eo.endingBalance.value}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </Table>\r\n </Container>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer >\r\n <Container >\r\n <Row style={{ margin: 5 }} >\r\n <Col md='3' className='align-self-end' style={{ textAlign: 'left' }}>\r\n <Button variant=\"secondary\" onClick={this.handleBackClick}>Back</Button>\r\n </Col>\r\n <Col md='9' className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"primary\" style={{ marginRight: 8 }} onClick={this.handleBuyClick}>Buy</Button>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default EscrowAddOnWindow;\r\n","import React, { Component } from 'react';\r\nimport { Modal, Button, Row, Col, Container } from 'react-bootstrap';\r\nimport { parse } from 'query-string';\r\n\r\nimport configData from \"../../config/config.json\";\r\n\r\nconst PREFIX = 'CreditCardAuthWindow: ';\r\n\r\n// Class notes.\r\n//\r\n// - props.creditCardWindow.*\r\n// - action ( 'show' or any )\r\n// - event.backClicked\r\n// - event.closeClicked\r\n// - event.continueClicked\r\n// - show\r\n// - version\r\nclass CreditCardWindow extends Component {\r\n \r\n constructor(props) {\r\n super(props);\r\n\r\n console.log(PREFIX + \"constructed with props\", props);\r\n\r\n this.state = {\r\n };\r\n\r\n\r\n this.authFormRef = React.createRef();\r\n\r\n this.version = 0;\r\n\r\n this.updateStateFromProps(true, false);\r\n console.log(PREFIX + 'construction complete');\r\n }\r\n \r\n handleBackClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.state.event.backClicked({});\r\n }\r\n \r\n handleCloseClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.state.event.closeClicked();\r\n }\r\n\r\n handleAuthorizeDotNetPayClicked = (json) => {\r\n this.state.event.payClicked(json);\r\n }\r\n\r\n handleAuthorizeDotNetCancelClicked = (json) => {\r\n this.state.event.closeClicked();\r\n }\r\n \r\n updateStateFromProps = (createIfMissing, callSetState) => {\r\n let source = this.props.creditCardAuthWindow;\r\n\r\n if (!source) {\r\n if (!createIfMissing) return;\r\n\r\n source = {\r\n action: '',\r\n event: {},\r\n message: '',\r\n show: false,\r\n previousShow: false,\r\n version: (this.version < 1) ? 1 : this.version + 1\r\n }\r\n }\r\n\r\n if (source.version <= this.version) return;\r\n let newState = callSetState ? {} : this.state;\r\n\r\n newState.show = source.show;\r\n this.version = source.version;\r\n\r\n if (source.action !== 'show') {\r\n newState.event = source.event;\r\n newState.message = source.message;\r\n newState.token = source.token;\r\n }\r\n\r\n if (callSetState) {\r\n this.updateState(newState);\r\n }\r\n }\r\n \r\n updateState = (newState) => {\r\n console.log(PREFIX + 'setState', newState);\r\n this.setState(newState);\r\n }\r\n\r\n isValidMessage(o) {\r\n return typeof o === 'object' && o !== null\r\n }\r\n\r\n componentDidMount() {\r\n const script = document.createElement('script');\r\n script.src = configData.AUTHORIZE_ACCEPTJS_URL;\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (this.props.creditCardAuthWindow.show === undefined) {\r\n // nothing to display\r\n return;\r\n } else if (this.props.creditCardAuthWindow.show === prevProps.creditCardAuthWindow.show) {\r\n // no change\r\n return;\r\n } else {\r\n // changing\r\n }\r\n\r\n if (this.state.show && !this.state.previousShow) {\r\n this.setState( {previousShow: this.state.show} );\r\n this.submitAuthorizeDotNetForm();\r\n window.AuthorizeNetIFrame = {\r\n onReceiveCommunication: queryStr => {\r\n console.log(PREFIX + 'received communication: ', queryStr);\r\n \r\n const message = parse(queryStr);\r\n if (this.isValidMessage(message)) {\r\n switch (message.action) {\r\n case 'transactResponse':\r\n const json = JSON.parse(message.response);\r\n console.log(PREFIX + 'processing transactRepsponse: ', json);\r\n this.handleAuthorizeDotNetPayClicked(json);\r\n break;\r\n \r\n case 'resizeWindow':\r\n break;\r\n \r\n case 'cancel':\r\n this.handleAuthorizeDotNetCancelClicked();\r\n break;\r\n default:\r\n console.log(PREFIX + 'unrecognized message action from Authorize.net:[' + message.action + ']');\r\n this.handleAuthorizeDotNetCancelClicked();\r\n };\r\n }\r\n },\r\n };\r\n } else if (!this.state.show && this.state.previousShow) {\r\n this.setState( {previousShow: this.state.show} );\r\n\r\n if (window.AuthorizeNetIFrame) {\r\n delete window.AuthorizeNetIFrame;\r\n }\r\n }\r\n }\r\n\r\n submitAuthorizeDotNetForm() {\r\n if (this.authFormRef.current) {\r\n this.authFormRef.current.submit();\r\n }\r\n }\r\n\r\n render() {\r\n console.log(PREFIX + 'rendering state version ' + this.version);\r\n\r\n this.updateStateFromProps(false, false);\r\n\r\n console.log(PREFIX + 'state: ', this.state);\r\n console.log(PREFIX + 'props: ', this.props);\r\n\r\n return (\r\n <Modal show={this.state.show} onHide={this.handleCloseClick} size='lg' aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton>\r\n <Modal.Title>\r\n Credit Card Preauthorization\r\n </Modal.Title>\r\n </Modal.Header>\r\n\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black',background: '#408CC7' }}>\r\n <iframe title='Credit Card Preauthorization for Images' id=\"load_payment\" name=\"load_payment\" width=\"100%\" height=\"500px\" scrolling=\"yes\" />\r\n <form ref={this.authFormRef} id=\"send_hptoken\" action={configData.AUTHORIZE_PAYMENT_URL} method=\"post\" target=\"load_payment\">\r\n <input type=\"hidden\" name=\"token\" value={this.state.token} />\r\n </form>\r\n </Modal.Body>\r\n <Modal.Footer >\r\n <Container >\r\n <Row style={{ margin: 5 }} >\r\n <Col md='3' className='align-self-end' style={{ textAlign: 'left' }}>\r\n <Button variant=\"secondary\" onClick={this.handleBackClick}>Back</Button>\r\n </Col>\r\n <Col md='9' className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default CreditCardWindow;\r\n","import React, { Component } from 'react';\r\nimport { Modal, Button, Row, Col, Container } from 'react-bootstrap'\r\n\r\n// Taken from https://codepen.io/robertkirsz/pen/ZvorjB\r\n\r\n// Properties:\r\n// - backgroundImage The image URL.\r\n// - bigClassName The class name for the bigger container\r\n// - className The class name for the container\r\n// - dialogClassName The class name governing the dialog size\r\n// - ignorePageClicked function(pageNumber) called when the ignore page button is clicked\r\n// - keepPageClicked function(pageNumber) called when the keep page button is clicked\r\n// - pageNumber The page number\r\n// - tile The window title\r\n// - width, height The CSS size for the container\r\n// - supports child components\r\nclass ZoomableImage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n modal: false,\r\n bigStyle: {\r\n backgroundImage: 'url(' + this.props.backgroundImage + ')',\r\n backgroundPosition: '0% 0%',\r\n backgroundSize: '300%'\r\n },\r\n smallStyle: {\r\n backgroundImage: 'url(' + this.props.backgroundImage + ')',\r\n backgroundPosition: '0% 0%',\r\n backgroundSize: '350%'\r\n }\r\n };\r\n }\r\n\r\n handleBigMouseMove = (event) => {\r\n const { left, top, width, height } = event.target.getBoundingClientRect();\r\n const x = (event.pageX - left) / width * 100;\r\n const y = (event.pageY - top) / height * 100;\r\n\r\n this.setState(prevState => ({\r\n bigStyle: {\r\n ...prevState.bigStyle,\r\n backgroundPosition: `${x}% ${y}%`\r\n }\r\n }))\r\n }\r\n\r\n handleSmallMouseMove = (event) => {\r\n const { left, top, width, height } = event.target.getBoundingClientRect();\r\n const x = (event.pageX - left) / width * 100;\r\n const y = (event.pageY - top) / height * 100;\r\n\r\n // backgroundSize: '500%', \r\n this.setState(prevState => ({\r\n smallStyle: {\r\n ...prevState.smallStyle,\r\n backgroundPosition: `${x}% ${y}%`\r\n }\r\n }))\r\n }\r\n\r\n close() {\r\n this.setState({ modal: false });\r\n }\r\n\r\n open() {\r\n this.setState({ modal: true });\r\n }\r\n\r\n handleCloseClick = (event) => {\r\n this.close();\r\n }\r\n\r\n handleDoubleClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.open();\r\n }\r\n\r\n handleClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.open();\r\n }\r\n\r\n handleMouseOut = (event) => {\r\n this.close();\r\n }\r\n\r\n handleKeepPageClicked = (event) => {\r\n this.setState({ modal: false }, function () {\r\n this.props.keepPageClicked();\r\n });\r\n }\r\n\r\n handleIgnorePageClicked = (event) => {\r\n this.setState({ modal: false }, function () {\r\n this.props.ignorePageClicked();\r\n });\r\n }\r\n\r\n render() {\r\n return <>\r\n <figure className={this.props.className} onMouseMove={this.handleSmallMouseMove}\r\n onClick={this.handleClick}\r\n style={this.state.smallStyle}>\r\n {this.props.children}\r\n </figure>\r\n {this.state.modal &&\r\n <Modal show={this.state.modal} dialogClassName={this.props.dialogClassName}\r\n onHide={this.handleCloseClick}\r\n aria-labelledby=\"contained-modal-title-vcenter\" centered >\r\n <Modal.Header closeButton >\r\n <Modal.Title style={{ color: '#3674AB' }}>{this.props.title}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{ background: '#3674AB', color: 'white', fontSize: 20 }}>\r\n <Container>\r\n <Row className=\"justify-content-md-center\">\r\n <Col className=\"text-center\" style={{ color: 'white', fontSize: 25 }}>\r\n <figure className={this.props.bigClassName} onMouseMove={this.handleBigMouseMove}\r\n style={this.state.bigStyle}>\r\n {this.props.children}\r\n </figure>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Container>\r\n <Row style={{ margin: 5 }} >\r\n <Col md='12' className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"primary\" style={{ marginRight: 8 }} onClick={this.handleKeepPageClicked}>Keep Page</Button>\r\n <Button variant=\"secondary\" onClick={this.handleIgnorePageClicked}>Ignore Page</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Modal >\r\n }\r\n </>;\r\n }\r\n}\r\n\r\nexport default ZoomableImage;\r\n","import React, { Component } from 'react';\r\nimport { Modal, Button, Form, Row, Col, Container } from 'react-bootstrap'\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport { infoIcon } from '../../img/font_awesome/font_awesome'\r\nimport AjaxError from \"../../utils/AjaxError\";\r\nimport AjaxResult from \"../../utils/AjaxResult\";\r\nimport { disableContextMenu } from \"../common/function/contextMenuUtils\"\r\nimport Loading from '../common/modal/Loading';\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\nimport ZoomableImage from '../common/page/ZoomableImage';\r\n\r\nconst PREFIX = 'PreviewWindow: ';\r\n\r\nconst ACTION_PAGE_SELECTION_METHOD_CHANGED = 'PAGE_SELECTION_METHOD_CHANGED';\r\nconst ACTION_PAGES_CHANGED = 'PAGES_CHANGED';\r\nconst ACTION_PAGE_TOGGLED = 'PAGE_TOGGLED';\r\nconst ACTION_PAGE_IGNORED = 'IGNORE_PAGE';\r\nconst ACTION_PAGE_KEPT = 'KEEP_PAGE';\r\n\r\nconst CSV_PAGES = 'CSV_PAGES';\r\nconst ENTIRE_DOCUMENT = 'ENTIRE_DOCUMENT';\r\nconst THUMBNAIL_VIEW_SIZE = 5;\r\n\r\n// Number of thumbnails to jump.\r\nconst BIG_JUMP = THUMBNAIL_VIEW_SIZE;\r\nconst SMALL_JUMP = 1;\r\n\r\nconst IMAGE_CONTENT_TYPE_PREFIX = 'data:image/jpeg;base64,';\r\n\r\n// Class notes.\r\n// - thumbnail related IDs should be of the form xyz_SEQUENCENUMBER.\r\n//\r\n// - downloadClicked(params) handles a download click\r\n// - closeClicked() handles the window closing\r\n// - show: boolean if the window should show\r\n// - sourcedDocKey: the document key object\r\n// - instCode: the instrument code of the document\r\n// - version\r\nclass PreviewWindow extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n jumpToPage: '',\r\n loadingStatus: '',\r\n uiTitle: '',\r\n uiTitleBeginningOfSentence: ''\r\n };\r\n\r\n this.version = 0;\r\n\r\n this.updateStateFromProps(true, false);\r\n }\r\n\r\n addShowLoading = (newState) => {\r\n newState.loadingStatus = LOADING_STATUES.LOADING;\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n processImagePreviewSettingsResults = (results) => {\r\n let newState = {};\r\n\r\n // Though the header is included, there is no need for it here.\r\n\r\n if (results && results.pagesSelected) {\r\n newState.pageSelectionMethod = results.pagesSelected.pageSelectionMethod;\r\n newState.selectedAsCsv = results.pagesSelected.selectedAsCsv;\r\n\r\n // State can be updated asynchronously, so\r\n // I update the thumbnails during setState().\r\n newState.selectedAsBoolean = results.pagesSelected.selectedAsBoolean;\r\n } else {\r\n newState.pageSelectionMethod = ENTIRE_DOCUMENT;\r\n newState.selectedAsCsv = '';\r\n newState.selectedAsBoolean = [];\r\n }\r\n\r\n this.updateState(function (state, props) {\r\n state.pageSelectionMethod = newState.pageSelectionMethod;\r\n state.selectedAsCsv = newState.selectedAsCsv;\r\n\r\n // Update the selected flags. \r\n // Though I don't think it's likely, I do a sanity check on the page numbers.\r\n for (let i = 0; i < state.thumbnails.length; ++i) {\r\n let pageIdx = state.thumbnails[i].page - 1;\r\n\r\n if (pageIdx < newState.selectedAsBoolean.length) {\r\n state.thumbnails[i].selected = newState.selectedAsBoolean[pageIdx];\r\n } else {\r\n state.thumbnails[i].selected = false;\r\n }\r\n }\r\n\r\n return state;\r\n });\r\n }\r\n\r\n processGetThumbnailsResults = (results, callSetState) => {\r\n let newState = callSetState ? {} : this.state;\r\n if (results && results.header) {\r\n newState.sourcedDocKey = results.header.sourcedDocKey;\r\n newState.pageCount = results.header.pageCount;\r\n newState.uiTitle = results.header.uiTitle;\r\n newState.uiTitleBeginningOfSentence = results.header.uiTitleBeginningOfSentence;\r\n }\r\n\r\n if (results && results.pagesSelected) {\r\n newState.pageSelectionMethod = results.pagesSelected.pageSelectionMethod;\r\n newState.selectedAsCsv = results.pagesSelected.selectedAsCsv;\r\n } else {\r\n newState.pageSelectionMethod = ENTIRE_DOCUMENT;\r\n newState.selectedAsCsv = '';\r\n }\r\n\r\n if (results && results.thumbnails) {\r\n newState.thumbnails = new Array(results.thumbnails.length);\r\n\r\n for (let i = 0; i < newState.thumbnails.length; ++i) {\r\n let source = results.thumbnails[i];\r\n\r\n newState.thumbnails[i] = {\r\n image: IMAGE_CONTENT_TYPE_PREFIX + source.base64,\r\n page: source.page,\r\n selected: source.selected\r\n };\r\n }\r\n } else {\r\n newState.thumbnails = [];\r\n }\r\n\r\n if (callSetState) {\r\n this.updateState(newState);\r\n }\r\n }\r\n\r\n getThumbnailIdx = (id) => {\r\n // xyz_SEQNUMBER\r\n let i = id.lastIndexOf('_');\r\n let seqNumber = parseInt(id.substring(i + 1));\r\n\r\n return seqNumber - 1;\r\n }\r\n\r\n // 0 = none, otherwise 1-n.\r\n getFirstThumbnailShowing = () => {\r\n if (!this.state.thumbnails.length) return 0;\r\n if (this.getTotalPageCount() === 0) return 0;\r\n\r\n return this.state.thumbnails[0].page;\r\n }\r\n\r\n getTotalPageCount = () => {\r\n return this.state.pageCount;\r\n }\r\n\r\n // Gets the current view info after applying a thumbnail offset.\r\n getCurrentViewInfo = (offset) => {\r\n var i = this.getFirstThumbnailShowing();\r\n\r\n // If there is no thumbnail showing, adding an offset will do\r\n // nothing for us.\r\n if (i > 0) i += offset;\r\n\r\n return this.getViewInfo(i);\r\n }\r\n\r\n // Look at the internals here to understand the returned data.\r\n // firstThumbnail: 1-pageCount; outside of this the view info indicates\r\n // nothing is being viewed.\r\n getViewInfo = (firstThumbnail) => {\r\n var view = {\r\n pageCount: this.getTotalPageCount(),\r\n thumbnail: {}\r\n };\r\n\r\n view.thumbnail.fullPages = Math.trunc(view.pageCount / THUMBNAIL_VIEW_SIZE);\r\n view.thumbnail.partialPageCount = view.pageCount - (view.thumbnail.fullPages * THUMBNAIL_VIEW_SIZE);\r\n\r\n if ((firstThumbnail < 1) || (firstThumbnail > view.pageCount)) {\r\n view.thumbnail.firstPage = -1;\r\n view.thumbnail.lastPage = -1;\r\n view.thumbnail.pageNumber = -1;\r\n view.thumbnail.pageCount = 0;\r\n } else {\r\n view.thumbnail.firstPage = firstThumbnail;\r\n view.thumbnail.lastPage = Math.min(firstThumbnail + THUMBNAIL_VIEW_SIZE - 1, view.pageCount);\r\n view.thumbnail.pageNumber = Math.trunc((firstThumbnail - 1) / THUMBNAIL_VIEW_SIZE) + 1;\r\n view.thumbnail.pageCount = view.thumbnail.lastPage - view.thumbnail.firstPage + 1;\r\n }\r\n\r\n view.thumbnail.isFirstPage = (view.thumbnail.firstPage == 1);\r\n view.thumbnail.isFullPage = (view.thumbnail.pageCount === THUMBNAIL_VIEW_SIZE);\r\n view.thumbnail.isLastPage = (view.thumbnail.lastPage == view.pageCount);\r\n view.thumbnail.isPartialPage = (view.thumbnail.pageCount > 0) && (view.thumbnail.pageCount !== THUMBNAIL_VIEW_SIZE);\r\n\r\n return view;\r\n }\r\n\r\n getCanPerformNextJump = (n) => {\r\n // We don't scroll past the last page.\r\n var currentView = this.getCurrentViewInfo(0);\r\n\r\n if (currentView.thumbnail.isLastPage) return false;\r\n\r\n // We'll show any page with at least the requested number of thumbs.\r\n var newView = this.getCurrentViewInfo(n);\r\n\r\n if (newView.thumbnail.pageCount < n) return false;\r\n return true;\r\n }\r\n\r\n getCanPerformPrevJump = (n) => {\r\n // We don't scroll back past the first page.\r\n var currentView = this.getCurrentViewInfo(0);\r\n\r\n if (currentView.thumbnail.isFirstPage) return false;\r\n\r\n // We'll show any page with thumbnails.\r\n var newView = this.getCurrentViewInfo(-n);\r\n\r\n return (newView.thumbnail.pageCount > 0);\r\n }\r\n\r\n getCanPerformFirstJump = () => {\r\n // We don't scroll back past the first page.\r\n var currentView = this.getCurrentViewInfo(0);\r\n\r\n if (currentView.thumbnail.isFirstPage) return false;\r\n\r\n // We'll show any page with thumbnails.\r\n return (currentView.pageCount > 0);\r\n }\r\n\r\n getCanPerformLastJump = () => {\r\n // We don't scroll past the last page.\r\n var currentView = this.getCurrentViewInfo(0);\r\n\r\n if (currentView.thumbnail.isLastPage) return false;\r\n\r\n // We'll show any page with thumbnails.\r\n return (currentView.pageCount > 0);\r\n }\r\n\r\n getThumbnailKey = (idx) => {\r\n return this.props.sourcedDocKey.docKey + '_' + this.state.thumbnails[idx].page;\r\n }\r\n\r\n handleImageRightClick = (event) => {\r\n disableContextMenu(event);\r\n }\r\n\r\n handleChange = (event) => {\r\n this.updateState({\r\n [event.target.id]: event.target.value\r\n })\r\n }\r\n\r\n handlePageSelectionMethodChange = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n // Update the new value so the server gets it.\r\n this.setState({ pageSelectionMethod: event.target.id }, function () {\r\n this.updatePreviewSettings(ACTION_PAGE_SELECTION_METHOD_CHANGED, 0);\r\n });\r\n }\r\n\r\n handleSelectedPagesChanged = (event) => {\r\n // Since the user is typing here, select the \"pages\" form of entry.\r\n this.updateState({\r\n pageSelectionMethod: CSV_PAGES,\r\n selectedAsCsv: event.target.value\r\n });\r\n }\r\n\r\n handleSelectedPagesBlur = (event) => {\r\n // Update the new value so the server gets it.\r\n this.setState({ selectedAsCsv: event.target.value }, function () {\r\n this.updatePreviewSettings(ACTION_PAGES_CHANGED, 0);\r\n });\r\n }\r\n\r\n handleThumbnailKept = (pageNumber) => {\r\n this.updatePreviewSettings(ACTION_PAGE_KEPT, pageNumber);\r\n }\r\n\r\n handleThumbnailIgnored = (pageNumber) => {\r\n this.updatePreviewSettings(ACTION_PAGE_IGNORED, pageNumber);\r\n }\r\n\r\n handleThumbnailChecked = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n let idx = this.getThumbnailIdx(event.target.id);\r\n let page = this.state.thumbnails[idx].page;\r\n\r\n this.updatePreviewSettings(ACTION_PAGE_TOGGLED, page);\r\n }\r\n\r\n handleThumbnailClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n let idx = this.getThumbnailIdx(event.target.id);\r\n let page = this.state.thumbnails[idx].page;\r\n\r\n this.updatePreviewSettings(ACTION_PAGE_TOGGLED, page);\r\n }\r\n\r\n handleDownloadClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n if (this.state.selectedAsCsv.trim().length === 0) {\r\n alert('There are no pages selected.');\r\n return;\r\n }\r\n\r\n this.props.downloadClicked(\r\n {\r\n sourcedDocKey: this.props.sourcedDocKey,\r\n instrumentCode: this.props.instCode,\r\n pageSelectionMethod: this.state.pageSelectionMethod,\r\n pagesSelected: this.state.selectedAsCsv,\r\n pageCount: this.getTotalPageCount()\r\n });\r\n }\r\n\r\n handleCloseClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.props.closeClicked();\r\n }\r\n\r\n handleGoClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n let page = parseInt(this.state.jumpToPage, 10);\r\n\r\n if (isNaN(page) || (page < 1) || (page > this.getTotalPageCount())) {\r\n alert(\"Document does not have a page \" + this.state.jumpToPage);\r\n } else {\r\n this.gotoPage(this.state.jumpToPage);\r\n }\r\n }\r\n\r\n handleFirstClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n var currentView = this.getCurrentViewInfo(0);\r\n\r\n if (currentView.thumbnail.isFirstPage) {\r\n alert(\"Already at first page.\");\r\n } else {\r\n this.gotoPage(1);\r\n }\r\n }\r\n\r\n handleLastClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n var currentView = this.getCurrentViewInfo(0);\r\n\r\n if (currentView.thumbnail.isLastPage) {\r\n alert(\"Already at last page.\");\r\n } else {\r\n let page = Math.max(1, currentView.pageCount - THUMBNAIL_VIEW_SIZE + 1);\r\n\r\n this.gotoPage(page);\r\n }\r\n }\r\n\r\n handlePrevSmallJumpClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n var currentView = this.getCurrentViewInfo(0);\r\n\r\n if (currentView.thumbnail.isFirstPage) {\r\n alert(\"Already at first page.\");\r\n } else {\r\n let page = Math.max(1, currentView.thumbnail.firstPage - SMALL_JUMP);\r\n\r\n this.gotoPage(page);\r\n }\r\n }\r\n\r\n handlePrevBigJumpClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n var currentView = this.getCurrentViewInfo(0);\r\n\r\n if (currentView.thumbnail.isFirstPage) {\r\n alert(\"Already at first page.\");\r\n } else {\r\n let page = Math.max(1, currentView.thumbnail.firstPage - BIG_JUMP);\r\n\r\n this.gotoPage(page);\r\n }\r\n }\r\n\r\n handleNextSmallJumpClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n var currentView = this.getCurrentViewInfo(0);\r\n\r\n if (currentView.thumbnail.isLastPage) {\r\n alert(\"Already at last page.\");\r\n } else {\r\n let page = Math.min(currentView.pageCount, currentView.thumbnail.firstPage + SMALL_JUMP);\r\n\r\n this.gotoPage(page);\r\n }\r\n }\r\n\r\n handleNextBigJumpClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n var currentView = this.getCurrentViewInfo(0);\r\n\r\n if (currentView.thumbnail.isLastPage) {\r\n alert(\"Already at last pages.\");\r\n } else {\r\n let page = Math.min(currentView.pageCount, currentView.thumbnail.firstPage + BIG_JUMP);\r\n\r\n this.gotoPage(page);\r\n }\r\n }\r\n\r\n populateImagePreviewSettings = (request) => {\r\n request.sourcedDocKey = this.props.sourcedDocKey;\r\n request.pageCount = this.state.pageCount;\r\n request.pageSelectionMethod = this.state.pageSelectionMethod;\r\n request.selectedAsCsv = this.state.selectedAsCsv;\r\n }\r\n\r\n gotoPage = (page) => {\r\n let thumbnailRequest = {};\r\n\r\n this.populateImagePreviewSettings(thumbnailRequest);\r\n thumbnailRequest.page = page;\r\n\r\n let me = this;\r\n let newState = { loadingStatus: '' };\r\n\r\n this.setState({ loadingStatus: LOADING_STATUES.LOADING });\r\n\r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"imaging/getThumbnails\", thumbnailRequest, { withCredentials: true })\r\n .then((response) => {\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n me.processGetThumbnailsResults(result.content(), true);\r\n }\r\n\r\n me.setState(newState);\r\n }, (error) => {\r\n me.setState(newState);\r\n\r\n let result = new AjaxError(error);\r\n\r\n result.handleError();\r\n })\r\n })();\r\n }\r\n\r\n updatePreviewSettings = (action, page) => {\r\n let request = {\r\n imagePreviewSettingChange: action,\r\n imagePreviewSettings: {},\r\n page: page\r\n };\r\n\r\n this.populateImagePreviewSettings(request.imagePreviewSettings);\r\n\r\n let me = this;\r\n let newState = { loadingStatus: '' };\r\n\r\n this.setState({ loadingStatus: LOADING_STATUES.LOADING });\r\n\r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"imaging/updateImagePreviewSettings\", request, { withCredentials: true })\r\n .then((response) => {\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n me.processImagePreviewSettingsResults(result.content());\r\n }\r\n\r\n me.setState(newState);\r\n }, (error) => {\r\n me.setState(newState);\r\n\r\n let result = new AjaxError(error);\r\n\r\n result.handleError();\r\n });\r\n })();\r\n }\r\n\r\n updateStateFromProps = (createIfMissing, callSetState) => {\r\n let source = this.props.previewWindow;\r\n\r\n if (!source) {\r\n if (!createIfMissing) return;\r\n\r\n source = {\r\n action: '',\r\n content: null,\r\n event: {},\r\n instrumentCode: '',\r\n show: false,\r\n version: (this.version < 1) ? 1 : this.version + 1\r\n }\r\n }\r\n\r\n if (source.version <= this.version) return;\r\n\r\n console.log(PREFIX + 'updating state from props version ' + source.version + ' state version ' + this.version);\r\n console.log(PREFIX + 'updating state from source', source);\r\n\r\n let newState = callSetState ? {} : this.state;\r\n\r\n newState.show = source.show;\r\n this.instrumentCode = source.instrumentCode; // get from this.props.instCode after refactored\r\n this.version = source.version;\r\n\r\n if (source.action === 'show') {\r\n if (callSetState) {\r\n this.updateState(newState);\r\n }\r\n } else {\r\n newState.event = source.event;\r\n\r\n if (callSetState) {\r\n this.updateState(newState);\r\n }\r\n\r\n this.processGetThumbnailsResults(source.content, callSetState);\r\n }\r\n }\r\n\r\n updateState = (newState) => {\r\n this.setState(newState);\r\n }\r\n\r\n render() {\r\n console.log(PREFIX + 'rendering state version ' + this.version);\r\n\r\n this.updateStateFromProps(false, false);\r\n\r\n let thumbnails = this.state.thumbnails;\r\n let totalPageCount = this.getTotalPageCount();\r\n\r\n var modalSize = '';\r\n\r\n if (thumbnails.length == 0) {\r\n modalSize = '';\r\n } else if (totalPageCount > 3) {\r\n modalSize = 'xl';\r\n } else if (thumbnails.length > 2) {\r\n modalSize = 'lg';\r\n }\r\n\r\n let title = this.state.uiTitleBeginningOfSentence + \" has \" + totalPageCount + \" page\" + (totalPageCount == 1 ? '.' : 's.');\r\n\r\n return (\r\n <>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <Modal show={this.state.show} onHide={this.handleCloseClick} size={modalSize} aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n {\r\n totalPageCount === 0 &&\r\n <>\r\n <Modal.Header closeButton>\r\n <Modal.Title style={{ color: '#3674AB' }}>{infoIcon} <span style={{ verticalAlign: 'super' }}>No images on file</span></Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{ background: '#3674AB', color: 'white', fontSize: 20 }}>\r\n <Container>\r\n {this.state.uiTitleBeginningOfSentence} does not have any images on file.\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer >\r\n <Container >\r\n <Row>\r\n <Col md=\"12\" className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Close</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </>\r\n }\r\n {\r\n totalPageCount > 0 &&\r\n <>\r\n <Modal.Header closeButton>\r\n <Modal.Title>{title}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{ background: '#408CC7' }}>\r\n <Container>\r\n <Row className=\"justify-content-md-center\">\r\n {\r\n (thumbnails.length >= 1) && thumbnails[0] &&\r\n <Col md=\"auto\" style={{ paddingLeft: 2, paddingRight: 2, margin: 5, marginLeft: 10, background: 'white' }}>\r\n <Container>\r\n <Row>\r\n <Col md=\"9\" style={{ padding: 4, color: thumbnails[0].selected ? 'dimgray' : 'lightgray', fontWeight: 'bold' }}>Page {thumbnails[0].page}</Col>\r\n <Col md=\"3\" style={{ textAlign: 'right', padding: 0 }}>\r\n {/* checkbox is tricky. This is the only way I could make the checked attribute works. It's essentially forcing the checkbox to re-render. */}\r\n {\r\n thumbnails.length > 1 && thumbnails[0].selected && // Show the checkbox only if there's more than 1 thumbnails\r\n <Form.Check id='thumbnail_1' type=\"checkbox\" checked={true} onChange={this.handleThumbnailChecked} />\r\n }\r\n {\r\n thumbnails.length > 1 && !thumbnails[0].selected && // Show the checkbox only if there's more than 1 thumbnails\r\n <Form.Check id='thumbnail_1' type=\"checkbox\" checked={false} onChange={this.handleThumbnailChecked} />\r\n }\r\n </Col>\r\n </Row>\r\n <Row >\r\n <Col>\r\n <ZoomableImage key={this.getThumbnailKey(0)}\r\n backgroundImage={thumbnails[0].image}\r\n bigClassName='bigPreview' className='preview' dialogClassName='zoomerDialog'\r\n title={'Page ' + thumbnails[0].page}\r\n keepPageClicked={() => this.handleThumbnailKept(thumbnails[0].page)}\r\n ignorePageClicked={() => this.handleThumbnailIgnored(thumbnails[0].page)}>\r\n <img id='img_1' width='100%' height='100%' alt=''\r\n onContextMenu={this.handleImageRightClick} className='thumbnail-img'\r\n src={thumbnails[0].image} ></img>\r\n </ZoomableImage>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Col>\r\n }\r\n {\r\n (thumbnails.length >= 2) && thumbnails[1] &&\r\n <Col md=\"auto\" style={{ paddingLeft: 2, paddingRight: 2, margin: 5, marginLeft: 10, background: 'white' }}>\r\n <Container>\r\n <Row>\r\n <Col md=\"9\" style={{ padding: 4, color: thumbnails[1].selected ? 'dimgray' : 'lightgray', fontWeight: 'bold' }}>Page {thumbnails[1].page}</Col>\r\n <Col md=\"3\" style={{ textAlign: 'right', padding: 0 }}>\r\n {\r\n thumbnails[1].selected &&\r\n <Form.Check id='thumbnail_2' type=\"checkbox\" checked={true} onChange={this.handleThumbnailChecked} />\r\n }\r\n {\r\n !thumbnails[1].selected &&\r\n <Form.Check id='thumbnail_2' type=\"checkbox\" checked={false} onChange={this.handleThumbnailChecked} />\r\n }\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col>\r\n <ZoomableImage key={this.getThumbnailKey(1)}\r\n backgroundImage={thumbnails[1].image}\r\n bigClassName='bigPreview' className='preview' dialogClassName='zoomerDialog'\r\n title={'Page ' + thumbnails[1].page}\r\n keepPageClicked={() => this.handleThumbnailKept(thumbnails[1].page)}\r\n ignorePageClicked={() => this.handleThumbnailIgnored(thumbnails[1].page)}>\r\n <img id='img_2' width='100%' height='100%' alt=''\r\n onContextMenu={this.handleImageRightClick} className='thumbnail-img'\r\n src={thumbnails[1].image} ></img>\r\n </ZoomableImage>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Col>\r\n }\r\n {\r\n (thumbnails.length >= 3) && thumbnails[2] &&\r\n <Col md=\"auto\" style={{ paddingLeft: 2, paddingRight: 2, margin: 5, marginLeft: 10, background: 'white' }}>\r\n {thumbnails[2] &&\r\n <Container>\r\n <Row>\r\n <Col md=\"9\" style={{ padding: 4, color: thumbnails[2].selected ? 'dimgray' : 'lightgray', fontWeight: 'bold' }}>Page {thumbnails[2].page}</Col>\r\n <Col md=\"3\" style={{ textAlign: 'right', padding: 0 }}>\r\n {\r\n thumbnails[2].selected &&\r\n <Form.Check id='thumbnail_3' type=\"checkbox\" checked={true} onChange={this.handleThumbnailChecked} />\r\n }\r\n {\r\n !thumbnails[2].selected &&\r\n <Form.Check id='thumbnail_3' type=\"checkbox\" checked={false} onChange={this.handleThumbnailChecked} />\r\n }\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col>\r\n <ZoomableImage key={this.getThumbnailKey(2)}\r\n backgroundImage={thumbnails[2].image}\r\n bigClassName='bigPreview' className='preview' dialogClassName='zoomerDialog'\r\n title={'Page ' + thumbnails[2].page}\r\n keepPageClicked={() => this.handleThumbnailKept(thumbnails[2].page)}\r\n ignorePageClicked={() => this.handleThumbnailIgnored(thumbnails[2].page)}>\r\n <img id='img_3' width='100%' height='100%' alt=''\r\n onContextMenu={this.handleImageRightClick} className='thumbnail-img'\r\n src={thumbnails[2].image} ></img>\r\n </ZoomableImage>\r\n </Col>\r\n </Row>\r\n </Container>\r\n }\r\n </Col>\r\n }\r\n {\r\n (thumbnails.length >= 4) && thumbnails[3] &&\r\n <Col md=\"auto\" style={{ paddingLeft: 2, paddingRight: 2, margin: 5, marginLeft: 10, background: 'white' }}>\r\n <Container>\r\n <Row>\r\n <Col md=\"9\" style={{ padding: 4, color: thumbnails[3].selected ? 'dimgray' : 'lightgray', fontWeight: 'bold' }}>Page {thumbnails[3].page}</Col>\r\n <Col md=\"3\" style={{ textAlign: 'right', padding: 0 }}>\r\n {\r\n thumbnails[3].selected &&\r\n <Form.Check id='thumbnail_4' type=\"checkbox\" checked={true} onChange={this.handleThumbnailChecked} />\r\n }\r\n {\r\n !thumbnails[3].selected &&\r\n <Form.Check id='thumbnail_4' type=\"checkbox\" checked={false} onChange={this.handleThumbnailChecked} />\r\n }\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col>\r\n <ZoomableImage key={this.getThumbnailKey(3)}\r\n backgroundImage={thumbnails[3].image}\r\n bigClassName='bigPreview' className='preview' dialogClassName='zoomerDialog'\r\n title={'Page ' + thumbnails[3].page}\r\n keepPageClicked={() => this.handleThumbnailKept(thumbnails[3].page)}\r\n ignorePageClicked={() => this.handleThumbnailIgnored(thumbnails[3].page)}>\r\n <img id='img_4' width='100%' height='100%' alt=''\r\n onContextMenu={this.handleImageRightClick} className='thumbnail-img'\r\n src={thumbnails[3].image} ></img>\r\n </ZoomableImage>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Col>\r\n }\r\n {\r\n (thumbnails.length >= 5) && thumbnails[4] &&\r\n <Col md=\"auto\" style={{ paddingLeft: 2, paddingRight: 2, margin: 5, marginLeft: 10, background: 'white' }}>\r\n <Container>\r\n <Row>\r\n <Col md=\"9\" style={{ padding: 4, color: thumbnails[4].selected ? 'dimgray' : 'lightgray', fontWeight: 'bold' }}>Page {thumbnails[4].page} of {totalPageCount}</Col>\r\n <Col md=\"3\" style={{ textAlign: 'right', padding: 0 }}>\r\n {\r\n thumbnails[4].selected &&\r\n <Form.Check id='thumbnail_5' type=\"checkbox\" checked={true} onChange={this.handleThumbnailChecked} />\r\n }\r\n {\r\n !thumbnails[4].selected &&\r\n <Form.Check id='thumbnail_5' type=\"checkbox\" checked={false} onChange={this.handleThumbnailChecked} />\r\n }\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col>\r\n <ZoomableImage key={this.getThumbnailKey(4)}\r\n backgroundImage={thumbnails[4].image}\r\n bigClassName='bigPreview' className='preview' dialogClassName='zoomerDialog'\r\n title={'Page ' + thumbnails[4].page}\r\n keepPageClicked={() => this.handleThumbnailKept(thumbnails[4].page)}\r\n ignorePageClicked={() => this.handleThumbnailIgnored(thumbnails[4].page)}>\r\n <img id='img_5' width='100%' height='100%' alt=''\r\n onContextMenu={this.handleImageRightClick} className='thumbnail-img'\r\n src={thumbnails[4].image} ></img>\r\n </ZoomableImage>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Col>\r\n }\r\n {\r\n (thumbnails.length >= 1) &&\r\n <span><i>Hover over to zoom in, or click an image to see a bigger image.</i></span>\r\n }\r\n </Row>\r\n\r\n {\r\n (totalPageCount > THUMBNAIL_VIEW_SIZE) && (thumbnails.length > 1) && // Page navigation\r\n <Row >\r\n <Col md=\"3\" style={{ padding: 0 }}>\r\n <Button disabled={!this.getCanPerformFirstJump()} variant=\"secondary\" style={{ fontWeight: 'bold', background: 'white', color: '#6C757D', borderTop: '3px solid #6C757D', borderBottom: '3px solid #6C757D', borderLeft: '3px solid #6C757D', borderRight: 'none', borderTopLeftRadius: '10px', borderBottomLeftRadius: '10px' }} onClick={this.handleFirstClick}>First</Button>\r\n <Button disabled={!this.getCanPerformPrevJump(BIG_JUMP)} variant=\"secondary\" style={{ fontWeight: 'bold', background: 'white', color: '#6C757D', borderTop: '3px solid #6C757D', borderBottom: '3px solid #6C757D', borderLeft: '3px solid #6C757D', borderRight: 'none', borderRadius: '0px', margin: 0 }} onClick={this.handlePrevBigJumpClick}>Prev {BIG_JUMP}</Button>\r\n <Button disabled={!this.getCanPerformPrevJump(SMALL_JUMP)} variant=\"secondary\" style={{ fontWeight: 'bold', background: 'white', color: '#6C757D', borderTop: '3px solid #6C757D', borderBottom: '3px solid #6C757D', borderLeft: '3px solid #6C757D', borderRight: '3px solid #6C757D', borderRadius: '0px', margin: 0 }} onClick={this.handlePrevSmallJumpClick}>Prev {SMALL_JUMP}</Button>\r\n </Col>\r\n <Col md=\"6\" style={{ textAlign: 'center', fontWeight: 500 }}>\r\n Jump to page:\r\n <Form.Control id='jumpToPage' style={{ width: 100, margin: 5, display: 'inline-block' }} type='number' min={1} max={totalPageCount} step={1} precision={0} onChange={this.handleChange} />\r\n <Button variant=\"secondary\" onClick={this.handleGoClick}>Go</Button>\r\n </Col>\r\n <Col md=\"3\" style={{ padding: 0, textAlign: 'right' }}>\r\n <Button disabled={!this.getCanPerformNextJump(SMALL_JUMP)} variant=\"secondary\" style={{ fontWeight: 'bold', background: 'white', color: '#6C757D', borderTop: '3px solid #6C757D', borderBottom: '3px solid #6C757D', borderLeft: '3px solid #6C757D', borderRight: '3px solid #6C757D', borderRadius: '0px', margin: 0 }} onClick={this.handleNextSmallJumpClick}>Next {SMALL_JUMP}</Button>\r\n <Button disabled={!this.getCanPerformNextJump(BIG_JUMP)} variant=\"secondary\" style={{ fontWeight: 'bold', background: 'white', color: '#6C757D', borderTop: '3px solid #6C757D', borderBottom: '3px solid #6C757D', borderRight: '3px solid #6C757D', borderLeft: 'none', borderRadius: '0px', margin: 0 }} onClick={this.handleNextBigJumpClick}>Next {BIG_JUMP}</Button>\r\n <Button disabled={!this.getCanPerformLastJump()} variant=\"secondary\" style={{ fontWeight: 'bold', background: 'white', color: '#6C757D', borderTop: '3px solid #6C757D', borderBottom: '3px solid #6C757D', borderRight: '3px solid #6C757D', borderLeft: 'none', borderTopRightRadius: '10px', borderBottomRightRadius: '10px' }} onClick={this.handleLastClick}>Last</Button>\r\n </Col>\r\n </Row>\r\n }\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer >\r\n <Container >\r\n <Row style={{ margin: 5 }} >\r\n {\r\n totalPageCount && // Page selector\r\n <Col md=\"9\" style={{ fontWeight: 'bold', padding: 0 }}>\r\n <Container>\r\n <Row>\r\n <Col>\r\n <Form.Check name='downloadOption' id='ENTIRE_DOCUMENT' type='radio' checked={this.state.pageSelectionMethod === ENTIRE_DOCUMENT} onChange={this.handlePageSelectionMethodChange} style={{ marginBottom: 9 }} label={'All Pages'} />\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col>\r\n <Form.Check name='downloadOption' id='CSV_PAGES' type='radio' checked={this.state.pageSelectionMethod === CSV_PAGES} onChange={this.handlePageSelectionMethodChange} style={{ display: 'inline-block' }} label={'Pages'} />\r\n <Form.Control id='selectedAsCsv' style={{ width: 200, margin: 5, display: 'inline-block' }} type='text' onChange={this.handleSelectedPagesChanged} onBlur={this.handleSelectedPagesBlur} value={this.state.selectedAsCsv} />\r\n <span style={{ fontWeight: 'normal' }}>Ex.: 1, 3, 7-9, 11 (Comma-delimited and may contain ranges)</span>\r\n </Col>\r\n </Row>\r\n\r\n </Container>\r\n </Col>\r\n }\r\n </Row>\r\n \r\n <Row>\r\n <Col md=\"12\" className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"primary\" style={{ marginRight: 8 }} onClick={this.handleDownloadClick}>Continue</Button>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n\r\n </Container>\r\n </Modal.Footer>\r\n </>\r\n }\r\n </Modal>\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default PreviewWindow;\r\n","export const disableContextMenu = (event) => {\r\n event.preventDefault();\r\n };","import React from 'react';\r\n\r\nimport { Modal, Button } from 'react-bootstrap'\r\n\r\nimport { checkIcon, warningIcon, infoIcon } from '../../../img/font_awesome/font_awesome'\r\n\r\nexport default class Alert extends React.Component {\r\n\r\n handleCloseClick = () => {\r\n this.props.hideAlert();\r\n }\r\n\r\n render() {\r\n let title = \"\"\r\n\r\n if (this.props.title) {\r\n title = this.props.title;\r\n }\r\n\r\n let icon = checkIcon;\r\n if (this.props.type === 'WARNING') {\r\n icon = warningIcon;\r\n }\r\n\r\n if (this.props.type === 'INFO') {\r\n icon = infoIcon;\r\n }\r\n\r\n return (\r\n <Modal show={this.props.show} onHide={this.handleCloseClick} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n \r\n <Modal.Header closeButton >\r\n <Modal.Title style={{color: '#3674AB'}}>{icon} {title}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black', background: '#3674AB', color: 'white', fontSize: 20}}>\r\n {this.props.message}\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Close</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}","class AjaxResult {\r\n constructor(result) {\r\n this.result = result || {};\r\n\r\n if (this.result.data) {\r\n this.data = this.result.data;\r\n } else {\r\n this.data = {\r\n ok: false,\r\n message: '',\r\n lockout: null,\r\n content: null\r\n }\r\n }\r\n }\r\n\r\n isOk = () => {\r\n return this.data.ok;\r\n }\r\n\r\n // Handle an error by notifying the user.\r\n // It's presumed an error has occurred.\r\n handleError = () => {\r\n let msg = this.getErrorMessage();\r\n\r\n alert(msg);\r\n console.log(msg);\r\n }\r\n\r\n // A message is always returned.\r\n getErrorMessage = () => {\r\n let msg = '';\r\n\r\n if (!msg.length && this.data.message) {\r\n msg = 'ERROR: ' + this.data.message;\r\n }\r\n\r\n if (!msg.length) {\r\n msg = 'HTTP status ' + this.result.status;\r\n\r\n if (this.result.statusText) {\r\n msg += ' (' + this.result.statusText + ')';\r\n }\r\n }\r\n\r\n if (!msg.length) {\r\n msg = 'An error occurred, please note the steps you took and contact TriMin.';\r\n }\r\n\r\n return msg;\r\n }\r\n\r\n // An object is always returned, though it may be empty.\r\n content = () => {\r\n return this.data.content;\r\n }\r\n}\r\n\r\nexport default AjaxResult;\r\n","// Usage from https://github.com/axios/axios#handling-errors\r\n// Should be invoked from the axios error function.\r\nclass AjaxResponseHandler {\r\n // Gets the HTTP status of an error from an axios error callback.\r\n // 'error' is the error object, typically the axios object passed to error().\r\n // 'defaultValue' is the default status if it can't be determined, defaults to 0.\r\n // Returns the status.\r\n static getStatus(error, defaultValue) {\r\n let status = defaultValue ? defaultValue : 0;\r\n\r\n if (error) {\r\n let obj = error.response;\r\n\r\n if (obj && (obj.status)) {\r\n status = obj.status;\r\n }\r\n }\r\n\r\n return status;\r\n }\r\n\r\n // Handle an error from an axios error callback.\r\n // 'error' is the error object, typically the axios object passed to error().\r\n // 'handler(message)' is the message handler or null for an alert to be displayed.\r\n // 'history' is the history stack or null.\r\n static handleError(error, handler, history) {\r\n // Update the history\r\n let defaultStatus = '';\r\n let status = AjaxResponseHandler.getStatus(error, defaultStatus);\r\n\r\n if (history) {\r\n if (status === 403) {\r\n history.push('/login');\r\n } \r\n }\r\n\r\n // Generate the message.\r\n let message = '';\r\n\r\n if (error) {\r\n let obj = error.response;\r\n\r\n if (obj && obj.data) {\r\n message = obj.data.message;\r\n }\r\n }\r\n\r\n if (!message) {\r\n if (status === defaultStatus) {\r\n message = 'An unexpected error has occurred';\r\n } else {\r\n message = 'An unexpected error has occurred (' + status + ')';\r\n }\r\n }\r\n \r\n // Dispatch the error.\r\n AjaxResponseHandler.dispatchError(message, handler);\r\n }\r\n\r\n static consoleLogHandler(message) {\r\n console.log(message);\r\n }\r\n\r\n static dispatchError(message, handler) {\r\n if (handler) {\r\n handler(message);\r\n } else {\r\n alert(message);\r\n }\r\n }\r\n}\r\n\r\nexport default AjaxResponseHandler;\r\n","import { createStore, applyMiddleware, compose } from \"redux\";\r\n\r\nimport {persistStore, persistReducer} from \"redux-persist\";\r\nimport storage from \"redux-persist/lib/storage\";\r\n\r\nimport rootReducer from \"../reducers/index\";\r\nimport thunk from 'redux-thunk'\r\n\r\nconst initialState = {};\r\nconst middleware = [thunk]\r\n\r\nconst persistConfig = {\r\n key: \"root\",\r\n storage\r\n};\r\n \r\nconst persistedReducer = persistReducer(persistConfig, rootReducer);\r\n\r\nconst ReactReduxDevTools = window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__();\r\nlet store;\r\nif (window.navigator.userAgent.includes(\"Chrome\") && ReactReduxDevTools) {\r\n store = createStore(persistedReducer, initialState, compose(applyMiddleware(...middleware), ReactReduxDevTools));\r\n} else {\r\n store = createStore(persistedReducer, initialState, compose(applyMiddleware(...middleware)));\r\n}\r\n\r\nconst persistor = persistStore(store);\r\n\r\nexport default store;","import moment from 'moment';\r\n\r\nexport const momentDateFormat = \"MM/DD/YYYY\";\r\n\r\nexport const momentDateTimeFormat = \"MM/DD/YYYY h:m a\";\r\n\r\nexport const hourOptions = [{ code :'1', description: '1'}, {code: '2', description: '2'}, {code: '3', description: '3'}, {code: '4', description: '4'}, {code: '5', description: '5'}, {code: '6', description: '6'}, {code: '7', description: '7'}, {code: '8', description: '8'}, {code: '9', description: '9'}, {code: '10', description: '10'}, {code: '11', description: '11'}, {code: '12', description: '12'} ];\r\nexport const minuteOptions = [{ code :'0', description: '00'}, {code: '15', description: '15'}, {code: '30', description: '30'}, {code: '45', description: '45'}, {code: '59', description: '59'} ]\r\nexport const amPmOptions = [{ code :'am', description: 'AM'}, {code: 'pm', description: 'PM'}];\r\n\r\n\r\nexport const validateDates = (errors, fromDate, fromDateKey, toDate, toDateKey) => {\r\n let fromMomentDate = moment(fromDate, momentDateFormat, true);\r\n if (!fromMomentDate.isValid()) {\r\n errors[fromDateKey] = momentDateFormat;\r\n return false;\r\n }\r\n\r\n let toMomentDate = moment(toDate, momentDateFormat, true);\r\n if (!toMomentDate.isValid()) {\r\n errors[toDateKey] = momentDateFormat;\r\n return false;\r\n }\r\n\r\n let currentDate = moment().startOf('day'); // current start of day\r\n if (fromMomentDate.diff(currentDate, 'days') > 0) {\r\n errors[fromDateKey] = \"Future date entered.\";\r\n return false;\r\n }\r\n\r\n if (toMomentDate.diff(currentDate, 'days') > 0) {\r\n errors[toDateKey] = \"Future date entered.\";\r\n return false;\r\n }\r\n\r\n if (toMomentDate < fromMomentDate) {\r\n errors[fromDateKey] = \"Invalid date range.\";\r\n errors[toDateKey] = \"Invalid date range.\";\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n\r\nexport const validateDateTimes = (errors, fromDate, fromHour, fromMinute, fromAmPm, fromDateKey, toDate, toHour, toMinute, toAmPm, toDateKey) => {\r\n // check the date values\r\n let dateCheck = validateDates(errors, fromDate, fromDateKey, toDate, toDateKey);\r\n if (!dateCheck) {\r\n return false;\r\n }\r\n\r\n // check the date+time values\r\n let fromDateTime = fromDate + ' ' + fromHour + ':' + fromMinute + ' ' + fromAmPm;\r\n let toDateTime = toDate + ' ' + toHour + ':' + toMinute + ' ' + toAmPm;\r\n\r\n let fromMomentDateTime = moment(fromDateTime, momentDateTimeFormat, true);\r\n let toMomentDateTime = moment(toDateTime, momentDateTimeFormat, true);\r\n\r\n if (toMomentDateTime < fromMomentDateTime) {\r\n errors[fromDateKey] = \"Invalid date/time range.\";\r\n errors[toDateKey] = \"Invalid date/time range.\";\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport const validateMonthRangeLimit = (errors, fromDate, fromDateKey, toDate, toDateKey) => {\r\n\r\n let fromMomentDate = moment(fromDate, momentDateFormat, true);\r\n let toMomentDate = moment(toDate, momentDateFormat, true);\r\n\r\n if (toMomentDate.diff(fromMomentDate, 'days') > 31) {\r\n errors[fromDateKey] = \"Date range cannot exceed a month.\";\r\n errors[toDateKey] = \"Date range cannot exceed a month.\";\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nexport const validateYearRangeLimit = (errors, fromDate, fromDateKey, toDate, toDateKey) => {\r\n\r\n let fromMomentDate = moment(fromDate, momentDateFormat, true);\r\n let toMomentDate = moment(toDate, momentDateFormat, true);\r\n\r\n if (toMomentDate.diff(fromMomentDate, 'days') > 366) {\r\n errors[fromDateKey] = \"Date range cannot exceed a year.\";\r\n errors[toDateKey] = \"Date range cannot exceed a year.\";\r\n return false;\r\n }\r\n return true;\r\n};","import React, {Component} from 'react';\r\nimport DatePicker from \"react-datepicker\";\r\nimport moment from 'moment';\r\n\r\nimport { InputGroup, Button } from 'react-bootstrap'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faCalendar } from '@fortawesome/free-solid-svg-icons'\r\nimport {momentDateFormat} from \"../../../../src/utils/DateValidation\";\r\n\r\nconst InputWithButton = (props) => {\r\n return (\r\n <div>\r\n <InputGroup>\r\n <InputGroup.Append >\r\n <Button style={{ color: \"white\", zIndex: 0 }} onClick={props.onClick} ><FontAwesomeIcon icon={faCalendar} /></Button>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </div>\r\n\r\n );\r\n};\r\n\r\nexport default class DateField extends Component {\r\n\r\n state = {\r\n datePickerDate: this.props.formGroup.value,\r\n textInputDate: this.props.formGroup.value\r\n }\r\n\r\n static getDerivedStateFromProps(props, current_state) {\r\n if (props.formGroup.value !== current_state.textInputDate) {\r\n return {\r\n textInputDate: props.formGroup.value\r\n }\r\n } \r\n return null;\r\n }\r\n\r\n handleDatePickerChange = (date) => {\r\n this.setState({textInputDate:moment(date).format('L')});\r\n this.setState({datePickerDate:date});\r\n\r\n this.props.formGroup.handleDatePickerChange(date);\r\n\r\n }\r\n\r\n handleDateInputChange = (event) => {\r\n this.handleChange(event);\r\n this.props.onChange(event);\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n textInputDate: event.target.value\r\n })\r\n \r\n let momentDate = moment(event.target.value, momentDateFormat, true);\r\n\r\n if(momentDate.isValid()){\r\n this.setState({\r\n datePickerDate: event.target.value\r\n })\r\n }\r\n }\r\n \r\n render() {\r\n let selected = '';\r\n if (this.state.datePickerDate) {\r\n selected = moment(this.state.datePickerDate).toDate();\r\n }\r\n \r\n const inputProps = { }\r\n \r\n let fontWeight = 'normal';\r\n if (this.props.formGroup.primaryCriteria) {\r\n fontWeight = 'bold';\r\n }\r\n\r\n let disabled = false;\r\n if (this.props.formGroup.disabled) {\r\n disabled = true;\r\n }\r\n\r\n return (\r\n <div>\r\n <label style={{ fontWeight, marginBottom:0 }}>{this.props.formGroup.label}:</label> <br />\r\n <div className=\"form-group form-inline\" style={{ marginBottom:0 }} >\r\n <input type='text' className='form-control' id={this.props.formGroup.id} disabled={disabled} value={this.state.textInputDate} onChange={this.handleDateInputChange} />\r\n <DatePicker selected={selected} onChange={(date) => this.handleDatePickerChange(date)} customInput={<InputWithButton inputProps={{ inputProps }} />} />\r\n </div>\r\n </div>\r\n )\r\n }\r\n}","import React from 'react';\r\nimport { Form } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n allPlatList: state.platsReducer.codeDescriptionResultList,\r\n allPlatNameList: state.platNamesReducer.codeDescriptionResultList,\r\n allPlatNumberList: state.platNumbersReducer.codeDescriptionResultList\r\n };\r\n}\r\n\r\nclass PlatField extends React.Component {\r\n render() {\r\n let fontWeight = 'normal';\r\n if (this.props.formGroup.primaryCriteria) {\r\n fontWeight = 'bold';\r\n }\r\n\r\n let placeholder = this.props.formGroup.placeholder;\r\n if (!placeholder) {\r\n placeholder = '(Optional)'\r\n }\r\n\r\n let style = this.props.formGroup.style;\r\n let textField = <Form.Control id={this.props.formGroup.id} style={style} type={this.props.formGroup.fieldType} placeholder={placeholder} disabled={this.props.disabled} onChange={this.props.onChange} onBlur={this.props.formGroup.onBlur} value={this.props.formGroup.value} />\r\n if (this.props.formGroup.required === true) {\r\n textField = <Form.Control id={this.props.formGroup.id} style={style} required type={this.props.formGroup.fieldType} disabled={this.props.disabled} onChange={this.props.onChange} onBlur={this.props.formGroup.onBlur} value={this.props.formGroup.value} />\r\n } else if (this.props.formGroup.disableField == true) {\r\n textField = <Form.Control id={this.props.formGroup.id} style={style} disabled type={this.props.formGroup.fieldType} onChange={this.props.onChange} value={this.props.formGroup.value} />\r\n }\r\n\r\n let size = this.props.formGroup.size ? this.props.formGroup.size : \"md\";\r\n let options = this.props.formGroup.options;\r\n\r\n let selectField =\r\n <Form.Control size={size} id={this.props.formGroup.id + 'Select'} style={this.props.formGroup.style} as='select' onChange={this.props.onChange} >\r\n {\r\n // 'disabled' is assumed false\r\n options.map((option) => {\r\n return (<option key={option.code} disabled={!!option.disabled} value={option.code}>{option.description}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n\r\n if (this.props.formGroup.disableField == true || this.props.disabled === true) {\r\n selectField =\r\n <Form.Control size={size} id={this.props.formGroup.id + 'Select'} style={this.props.formGroup.style} as='select' disabled onChange={this.props.onChange} >\r\n {\r\n // 'disabled' is assumed false\r\n options.map((option, description) => {\r\n return (<option value={option[0]}>{option[1]}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n }\r\n\r\n let label = this.props.formGroup.label ? this.props.formGroup.label + ':' : <> </>;\r\n return (\r\n <div style={{ marginLeft: 4, fontWeight }}>\r\n\r\n <div>{label}</div>\r\n {textField}\r\n {\r\n this.props.formGroup.hideSelect !== true &&\r\n selectField\r\n }\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(PlatField);","import React from 'react';\r\nimport { Form } from 'react-bootstrap'\r\n\r\nexport default class TextField extends React.Component {\r\n \r\n render() {\r\n let placeholder = this.props.formGroup.placeholder;\r\n if (!placeholder) {\r\n placeholder = '(Optional)'\r\n }\r\n\r\n let style = this.props.formGroup.style;\r\n if (this.props.formGroup.fieldType === 'number') {\r\n style = {...style, textAlign: 'right'};\r\n } \r\n if (this.props.formGroup.fieldType === 'minute') {\r\n style = {...style, textAlign: 'right', width: '48px'};\r\n } \r\n\r\n let numberType = this.props.formGroup.numberType;\r\n let step = 1;\r\n if (numberType === 'decimal') {\r\n step = 0.01;\r\n } \r\n\r\n let maxLength = this.props.formGroup.maxLength;\r\n if (!maxLength) {\r\n maxLength = 999; // arbitrary max length\r\n }\r\n\r\n let minLength = this.props.formGroup.minLength;\r\n if (!minLength) {\r\n minLength = 0; \r\n }\r\n\r\n let maxValue = this.props.formGroup.maxValue;\r\n if (!maxLength) {\r\n maxLength = undefined;\r\n }\r\n\r\n let minValue = this.props.formGroup.minValue;\r\n if (!minValue) {\r\n minValue = 0;\r\n }\r\n\r\n let formControl = <Form.Control style={style} type={this.props.formGroup.fieldType} minLength={minLength} maxLength={maxLength} min={minValue} max={maxValue} step={step} precision={2} placeholder={placeholder} disabled={this.props.disabled} onChange={this.props.onChange} onBlur={this.props.formGroup.onBlur} value={this.props.formGroup.value}/>\r\n if (this.props.formGroup.required === true) {\r\n if (this.props.formGroup.fieldType === 'datetime') {\r\n formControl = <Form.Control style={style} required type='text' maxLength='19' disabled={this.props.disabled} onChange={this.props.onChange} value={this.props.formGroup.value} title=\"YYYY-MM-DD HH:MM:SS\"/>\r\n } else if (this.props.formGroup.fieldType === 'tel') {\r\n formControl = <Form.Control style={style} required type='tel' maxLength='14' pattern=\"(?:\\(\\d{3}\\)|\\d{3})[- ]?\\d{3}[- ]?\\d{4}\" disabled={this.props.disabled} onChange={this.props.onChange} value={this.props.formGroup.value}/>\r\n } else if (this.props.formGroup.fieldType === 'tel_international') {\r\n formControl = <Form.Control style={style} required maxLength='15' disabled={this.props.disabled} onChange={this.props.onChange} value={this.props.formGroup.value}/>\r\n } else if (this.props.formGroup.fieldType === 'zip') {\r\n formControl = <Form.Control style={style} required type='text' maxLength='5' disabled={this.props.disabled} onChange={this.props.onChange} value={this.props.formGroup.value}/>\r\n } else if (this.props.formGroup.fieldType === 'minute') {\r\n formControl = <Form.Control style={style} required type={this.props.formGroup.fieldType} minLength='1' maxLength='2' pattern='[0-5]?[0-9]' disabled={this.props.disabled} onChange={this.props.onChange} value={this.props.formGroup.value}/>\r\n } else {\r\n formControl = <Form.Control style={style} required type={this.props.formGroup.fieldType} minLength={minLength} maxLength={maxLength} min={minValue} max={maxValue} step={step} precision={2} disabled={this.props.disabled} onChange={this.props.onChange} onBlur={this.props.formGroup.onBlur} value={this.props.formGroup.value}/>\r\n }\r\n } else if (this.props.formGroup.disableField == true) {\r\n formControl = <Form.Control style={style} disabled type={this.props.formGroup.fieldType} precision={2} onChange={this.props.onChange} value={this.props.formGroup.value}/>\r\n } else if (this.props.formGroup.fieldType === 'datetime') {\r\n formControl = <Form.Control style={style} type='text' maxLength='19' disabled={this.props.disabled} placeholder={placeholder} onChange={this.props.onChange} value={this.props.formGroup.value} title=\"YYYY-MM-DD HH:MM:SS\" />\r\n } else if (this.props.formGroup.fieldType === 'tel') {\r\n formControl = <Form.Control style={style} type='tel' maxLength='14' pattern=\"(?:\\(\\d{3}\\)|\\d{3})[- ]?\\d{3}[- ]?\\d{4}\" disabled={this.props.disabled} placeholder={placeholder} onChange={this.props.onChange} value={this.props.formGroup.value}/>\r\n } else if (this.props.formGroup.fieldType === 'tel_international') {\r\n formControl = <Form.Control style={style} type='text' maxLength='15' disabled={this.props.disabled} placeholder={placeholder} onChange={this.props.onChange} value={this.props.formGroup.value}/>\r\n } else if (this.props.formGroup.fieldType === 'zip') {\r\n formControl = <Form.Control style={style} type='text' maxLength='5' disabled={this.props.disabled} placeholder={placeholder} onChange={this.props.onChange} value={this.props.formGroup.value}/>\r\n } else if (this.props.formGroup.fieldType === 'minute') {\r\n formControl = <Form.Control style={style} required type={this.props.formGroup.fieldType} minLength='1' maxLength={2} pattern='[0-5]?[0-9]' disabled={this.props.disabled} onChange={this.props.onChange} value={this.props.formGroup.value}/>\r\n }\r\n\r\n let fontWeight = 'normal';\r\n if (this.props.formGroup.primaryCriteria) {\r\n fontWeight = 'bold';\r\n }\r\n\r\n let label = this.props.formGroup.label ? this.props.formGroup.label + ':' : <> </>;\r\n let leadingCharacter = this.props.formGroup.fieldType === 'tel_international' ? '+' : '';\r\n return (\r\n <div style={{ marginLeft: 4, fontWeight }}>\r\n <div>{label}</div>\r\n <div style={{display: 'flex', alignItems : 'center'}}><span>{leadingCharacter}</span> {formControl} </div>\r\n </div>\r\n )\r\n }\r\n}","import React from 'react';\r\nimport { Form } from 'react-bootstrap'\r\nimport '../../../landshark.css';\r\n\r\n// Select element. \r\n// Its options are defaulted to Yes and No if options are not provided. \r\nexport default class SelectField extends React.Component {\r\n\r\n render() {\r\n\r\n let clazzName = 'form-inline-block';\r\n if (this.props.formGroup.layout === 'horizontal') {\r\n clazzName = 'form-inline search-results-sort-dropdown ';\r\n }\r\n\r\n // if options are not provided, assume it's a Yes or No dropdown.\r\n let options = this.props.formGroup.options;\r\n if (!options) {\r\n options = [{code : true, description: \"Yes\"}, { code: false, description: \"No\"}]\r\n }\r\n\r\n let size = this.props.formGroup.size ? this.props.formGroup.size : \"md\";\r\n\r\n let formControl = \r\n <Form.Control size={size} id={this.props.formGroup.id} style={ this.props.formGroup.style} as={this.props.formGroup.fieldType} onChange={this.props.onChange} >\r\n {\r\n // 'disabled' is assumed false\r\n options.map((option) => {\r\n if (this.props.formGroup.value === option.code)\r\n return (<option key={option.code} selected disabled={!!option.disabled} value={option.code}>{option.description}</option>)\r\n else\r\n return (<option key={option.code} disabled={!!option.disabled} value={option.code}>{option.description}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n\r\n if (this.props.formGroup.disableField == true || this.props.disabled === true) {\r\n formControl = \r\n <Form.Control size={size} id={this.props.formGroup.id} style={ this.props.formGroup.style} as={this.props.formGroup.fieldType} disabled onChange={this.props.onChange} >\r\n {\r\n // 'disabled' is assumed false\r\n options.map((option, description) => {\r\n if (this.props.formGroup.value === option[0])\r\n return (<option selected value={option[0]}>{option[1]}</option>)\r\n else\r\n return (<option value={option[0]}>{option[1]}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n }\r\n\r\n let buttonControl = <></>\r\n if (this.props.selectButton) {\r\n buttonControl = this.props.selectButton;\r\n }\r\n\r\n let fontWeight = 'normal';\r\n if (this.props.formGroup.primaryCriteria) {\r\n fontWeight = 'bold';\r\n }\r\n\r\n let label = this.props.formGroup.label ? this.props.formGroup.label + ':' : <> </>;\r\n\r\n return (\r\n <div className={clazzName} style={{ fontWeight }}>\r\n <div>{label} </div> \r\n {formControl}\r\n {buttonControl}\r\n </div>\r\n )\r\n }\r\n}","import React from 'react';\r\nimport { Form } from 'react-bootstrap'\r\nimport '../../../landshark.css';\r\n\r\n// Radio Buttons element. \r\n// Its options are defaulted to Yes and No if options are not provided. \r\nexport default class RadioGroup extends React.Component {\r\n\r\n render() {\r\n\r\n // if options are not provided, assume it's a Yes or No dropdown.\r\n let options = this.props.formGroup.options;\r\n if (!options) {\r\n options = [{code : true, description: \"Yes\"}, { code: false, description: \"No\"}]\r\n }\r\n\r\n let radioButtons = \r\n <>\r\n {\r\n options.map((option) => {\r\n return <Form.Check name={this.props.formGroup.id} type='radio' checked={this.props.formGroup.value === option.code} id={option.code} label={option.description} onChange={this.props.onChange} />\r\n })\r\n }\r\n </>\r\n\r\n let fontWeight = 'normal';\r\n if (this.props.formGroup.primaryCriteria) {\r\n fontWeight = 'bold';\r\n }\r\n\r\n let clazzName = 'form-inline-block';\r\n return (\r\n <div className={clazzName} style={{ marginLeft: 4 }}>\r\n <div style={{ fontWeight }}>{this.props.formGroup.label}: </div> \r\n {radioButtons}\r\n </div>\r\n )\r\n }\r\n}","import React, {Component} from 'react';\r\nimport { Form, Button, Col, FormFile } from 'react-bootstrap'\r\n\r\nimport DateField from \"./DateField\";\r\nimport PlatField from \"./PlatField\";\r\nimport TextField from \"./TextField\";\r\nimport SelectField from \"./SelectField\";\r\nimport RadioGroup from \"./RadioGroup\";\r\n\r\nimport { searchIcon, listIcon } from \"../../../img/font_awesome/font_awesome\"\r\n\r\n// A FieldRow may have one or more fields.\r\nexport default class FieldRow extends Component {\r\n generateRow = (formGroupRow) => {\r\n return (\r\n formGroupRow.formGroups.map((formGroup, index) => { // looping thru the formGroups within the row.\r\n let lgSize = formGroup.lgSize ? formGroup.lgSize : 'auto';\r\n let mdSize = formGroup.mdSize ? formGroup.mdSize : 'auto';\r\n let smSize = formGroup.smSize ? formGroup.smSize : 'auto';\r\n let xsSize = formGroup.xsSize ? formGroup.xsSize : 'auto';\r\n return (\r\n <Col key={formGroup.id} lg={lgSize} md={mdSize} sm={smSize} xs={xsSize} >\r\n <Form.Group key={formGroup.id} controlId={formGroup.id} >\r\n { /* Text Field */\r\n (formGroup.fieldType === 'text' || formGroup.fieldType === 'password' || formGroup.fieldType === 'datetime' || formGroup.fieldType === 'zip' || formGroup.fieldType === 'tel' || formGroup.fieldType === 'tel_international' || formGroup.fieldType === 'email' || formGroup.fieldType === 'number' || formGroup.fieldType === 'minute') && formGroup.hideField !== true &&\r\n <>\r\n <TextField formGroup={formGroup} onChange={this.props.onChange} disabled={this.props.disabled || formGroup.disabled} />\r\n <div style={{color: \"red\", fontWeight: \"bold\"}}>{formGroup.error}</div>\r\n </>\r\n }\r\n { /* Plat Field */\r\n (formGroup.fieldType === 'plat') && formGroup.hideField !== true &&\r\n <>\r\n <PlatField formGroup={formGroup} onChange={this.props.onChange} disabled={this.props.disabled || formGroup.disabled} />\r\n <div style={{color: \"red\", fontWeight: \"bold\"}}>{formGroup.error}</div>\r\n </>\r\n }\r\n { /* Date Field */\r\n formGroup.fieldType === 'date' && formGroup.hideField !== true &&\r\n <>\r\n <DateField formGroup={formGroup} onChange={this.props.onChange} disabled={this.props.disabled} />\r\n <div style={{color: \"red\", fontWeight: \"bold\"}}>{formGroup.error}</div>\r\n </>\r\n }\r\n { /* Dropdown */\r\n formGroup.fieldType === 'select' && formGroup.hideField !== true &&\r\n <>\r\n <SelectField formGroup={formGroup} disabled={this.props.disabled} onChange={this.props.onChange}/> \r\n <div style={{color: \"red\", fontWeight: \"bold\"}}>{formGroup.error}</div>\r\n </>\r\n }\r\n { /* Button */\r\n formGroup.fieldType === 'lookup' && formGroup.hideField !== true &&\r\n <>\r\n <div> </div>\r\n <Button variant=\"primary\" onClick={formGroup.onClick}>{searchIcon}</Button>\r\n </>\r\n \r\n }\r\n { /* Button */\r\n formGroup.fieldType === 'lookupWithLabel' && formGroup.hideField !== true &&\r\n <>\r\n <div> </div>\r\n <Button variant=\"secondary\" style={formGroup.style} onClick={formGroup.onClick}>{listIcon} {formGroup.label}</Button>\r\n </>\r\n \r\n }\r\n { /* Button */\r\n formGroup.fieldType === 'reset' && formGroup.hideField !== true &&\r\n <>\r\n <div> </div>\r\n <Button variant=\"secondary\" onClick={formGroup.onClick}>Reset</Button>\r\n </>\r\n \r\n }\r\n { /* Button */\r\n formGroup.fieldType === 'button' && formGroup.hideField !== true &&\r\n <>\r\n <div> </div>\r\n <Button variant=\"secondary\" onClick={formGroup.onClick}>{formGroup.label}</Button>\r\n </>\r\n \r\n }\r\n { /* File */\r\n formGroup.fieldType === 'file' && formGroup.hideField !== true &&\r\n <div style={{marginLeft: 3}}>\r\n <div style={{fontWeight: 'bold'}}>{formGroup.label}:</div>\r\n <FormFile onChange={formGroup.onChange} key={formGroup.key} ></FormFile>\r\n <div style={{color: \"red\", fontWeight: \"bold\"}}>{formGroup.error}</div>\r\n </div>\r\n }\r\n { /* Label */\r\n formGroup.fieldType === 'label' && formGroup.hideField !== true &&\r\n <span>{formGroup.value}</span>\r\n }\r\n { /* Label */\r\n formGroup.fieldType === 'textlike' && formGroup.hideField !== true &&\r\n <>\r\n <div> </div>\r\n <div style={{marginTop: 5}}>{formGroup.value}</div>\r\n \r\n \r\n </>\r\n }\r\n { /* Radio */ \r\n formGroup.fieldType === 'radio' && formGroup.hideField !== true &&\r\n <>\r\n <RadioGroup formGroup={formGroup} disabled={this.props.disabled} onChange={this.props.onChange}/> \r\n <div style={{color: \"red\", fontWeight: \"bold\"}}>{formGroup.error}</div>\r\n </>\r\n }\r\n\r\n { /* Checkbox */ \r\n formGroup.fieldType === 'checkbox' && formGroup.hideField !== true && formGroup.checked === true &&\r\n <>\r\n <Form.Check id={formGroup.id} style={{fontWeight: 'bold'}} type='checkbox' checked={true} onChange={formGroup.onChange} label={formGroup.label} />\r\n {\r\n formGroup.error && formGroup.error != '' && \r\n <div style={{color: \"red\", fontWeight: \"bold\"}}> {formGroup.error}</div>\r\n }\r\n </>\r\n }\r\n { /* Checkbox */ \r\n formGroup.fieldType === 'checkbox' && formGroup.hideField !== true && formGroup.checked === false &&\r\n <>\r\n <Form.Check id={formGroup.id} style={{fontWeight: 'bold'}} type='checkbox' checked={false} onChange={formGroup.onChange} label={formGroup.label} />\r\n {\r\n formGroup.error && formGroup.error != '' && \r\n <div style={{color: \"red\", fontWeight: \"bold\"}}> {formGroup.error}</div>\r\n }\r\n </>\r\n }\r\n { /* Checkbox */ \r\n formGroup.fieldType === 'blankrow' && formGroup.hideField !== true &&\r\n <> </>\r\n }\r\n\r\n\r\n\r\n <Form.Text className=\"text-muted\">\r\n {formGroup.hint}\r\n </Form.Text>\r\n </Form.Group>\r\n </Col>\r\n );\r\n })\r\n );\r\n }\r\n\r\n render() {\r\n let fieldRow = <></>\r\n // Display the row only if hideField is not true.\r\n if (this.props.formGroupRow.formGroups[0].hideRow !== true) {\r\n fieldRow = <><Form.Row> {this.generateRow(this.props.formGroupRow)}</Form.Row></>\r\n }\r\n return (fieldRow);\r\n }\r\n}","export const formatPhone = (value, previousValue) => {\r\n // return nothing if no value\r\n if (!value) return value;\r\n\r\n // only allows 0-9 inputs\r\n const currentValue = value.replace(/[^\\d]/g, '');\r\n const cvLength = currentValue.length;\r\n\r\n if (!previousValue || value.length > previousValue.length) {\r\n\r\n // returns: \"x\", \"xx\", \"xxx\"\r\n if (cvLength < 4) return currentValue;\r\n\r\n // returns: \"(xxx)\", \"(xxx) x\", \"(xxx) xx\", \"(xxx) xxx\",\r\n if (cvLength < 7) return `(${currentValue.slice(0, 3)}) ${currentValue.slice(3)}`;\r\n\r\n // returns: \"(xxx) xxx-\", (xxx) xxx-x\", \"(xxx) xxx-xx\", \"(xxx) xxx-xxx\", \"(xxx) xxx-xxxx\"\r\n return `(${currentValue.slice(0, 3)}) ${currentValue.slice(3, 6)}-${currentValue.slice(6, 10)}`;\r\n }\r\n};\r\n\r\nconst formatNumericOnly = (value) => {\r\n // return nothing if no value\r\n if (!value) {\r\n return value;\r\n }\r\n\r\n return value.replace(/[^\\d]/g, '');\r\n}\r\n\r\nexport const formatInternationalPhone = (value) => {\r\n return formatNumericOnly(value);\r\n};\r\n\r\nexport const formatZip = (value) => {\r\n return formatNumericOnly(value);\r\n};","// Trim all fields except for username and password. \r\n// Let validation errors out leading and trailing spaces on username and password.\r\nexport const trimUserFields = (user) => {\r\n let trimmedUser = {};\r\n\r\n // First Name\r\n if (user.firstName) {\r\n let firstName = user.firstName.trim();\r\n firstName = {firstName};\r\n trimmedUser = {...trimmedUser, ...firstName};\r\n }\r\n\r\n // Last Name\r\n if (user.lastName) {\r\n let lastName = user.lastName.trim();\r\n lastName = {lastName};\r\n trimmedUser = {...trimmedUser, ...lastName};\r\n }\r\n\r\n // Company\r\n if (user.company) {\r\n let company = user.company.trim();\r\n company = {company};\r\n trimmedUser = {...trimmedUser, ...company};\r\n }\r\n\r\n // Address\r\n if (user.address) {\r\n let address = user.address.trim();\r\n address = {address};\r\n trimmedUser = {...trimmedUser, ...address};\r\n }\r\n\r\n // City\r\n if (user.city) {\r\n let city = user.city.trim();\r\n city = {city};\r\n trimmedUser = {...trimmedUser, ...city};\r\n }\r\n\r\n // Email\r\n if (user.email) {\r\n let email = user.email.trim();\r\n email = {email};\r\n trimmedUser = {...trimmedUser, ...email};\r\n }\r\n return trimmedUser;\r\n}\r\n\r\n// This function is used by different user forms in the app.\r\n// Different forms may or may not contain a certain field. \r\n// For example, you can't change the username on an existing user, so its form doesn't have username.\r\n// Hence, the checks for undefined to make sure the field is in the user object.\r\nexport const validateUser = (user, validateUsername = true, validatePassword = true) => {\r\n let errors = {};\r\n\r\n // Username\r\n if (validateUsername && user.username !== undefined) { // make sure it's defined\r\n if (!user.username) { // make sure it's not blank or null.\r\n errors[\"username\"] = \"Required.\";\r\n return errors;\r\n }\r\n\r\n if (user.username && user.username.length < 8) {\r\n errors[\"username\"] = \"At least 8 characters long.\";\r\n return errors;\r\n }\r\n\r\n if (user.username && user.username.length > 50) {\r\n errors[\"username\"] = \"Maximum 50 characters long.\";\r\n return errors;\r\n }\r\n\r\n if (user.username.search(/^[0-9a-zA-Z._@]+$/) === -1) {\r\n errors[\"username\"] = \"Letters, numbers, underscores, dots and @ only.\";\r\n return errors;\r\n }\r\n\r\n if (user.username.startsWith(\".\") || user.username.startsWith(\"@\") || user.username.startsWith(\"_\")) {\r\n errors[\"username\"] = \"Must start with a number or letter.\";\r\n return errors;\r\n }\r\n\r\n if (user.username.endsWith(\".\") || user.username.endsWith(\"@\") || user.username.endsWith(\"_\")) {\r\n errors[\"username\"] = \"Must end with a number or letter.\";\r\n return errors;\r\n }\r\n\r\n if (user.username.includes(\"..\") || user.username.includes(\"__\") || user.username.includes(\"@@\") ||\r\n user.username.includes(\"._\") || user.username.includes(\"_.\") || \r\n user.username.includes(\".@\") || user.username.includes(\"@.\") || \r\n user.username.includes(\"_@\") || user.username.includes(\"@_\") ) {\r\n errors[\"username\"] = \"No consecutive special characters.\";\r\n return errors;\r\n }\r\n\r\n\r\n }\r\n \r\n // Password\r\n if (validatePassword && user.password !== undefined) {\r\n if (!user.password) {\r\n errors[\"password\"] = \"Required.\";\r\n return errors;\r\n }\r\n\r\n if (!user.passwordConfirm) {\r\n errors[\"passwordConfirm\"] = \"Required.\";\r\n return errors;\r\n }\r\n\r\n if (user.password && user.password.length < 8) {\r\n errors[\"password\"] = \"At least 8 characters.\";\r\n return errors;\r\n }\r\n\r\n if (user.password.length > 64) {\r\n errors[\"password\"] = \"64 characters maximum.\";\r\n return errors;\r\n }\r\n\r\n if (user.password.search(/^(?=.*\\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&])[0-9a-zA-Z!@#$%^&]{8,64}$/) === -1) {\r\n errors[\"password\"] = \"Must contain a letter, a number and a special character. Special characters are !@#$%^&\";\r\n return errors;\r\n }\r\n\r\n if (user.password !== user.passwordConfirm) {\r\n errors[\"password\"] = \"Mismatched passwords.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // First Name\r\n if (user.firstName !== undefined) {\r\n if (!user.firstName) {\r\n errors[\"firstName\"] = \"Required.\";\r\n return errors;\r\n }\r\n\r\n if (user.firstName && user.firstName.length > 30) {\r\n errors[\"firstName\"] = \"30 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // Last Name\r\n if (user.lastName !== undefined) {\r\n if (!user.lastName) {\r\n errors[\"lastName\"] = \"Required.\";\r\n return errors;\r\n }\r\n\r\n if (user.lastName && user.lastName.length > 30) {\r\n errors[\"firstName\"] = \"30 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // Name - Efile\r\n if (user.name !== undefined) {\r\n if (!user.name) {\r\n errors[\"name\"] = \"Required.\";\r\n return errors;\r\n }\r\n\r\n if (user.name && user.name.length > 150) {\r\n errors[\"name\"] = \"150 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // Company\r\n if (user.company !== undefined) {\r\n if (user.company && user.company.length > 60) {\r\n errors[\"company\"] = \"60 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // Address\r\n if (user.address !== undefined) {\r\n if (user.address && user.address.length > 50) {\r\n errors[\"address\"] = \"50 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // Address1 - Efile\r\n if (user.address1 !== undefined) {\r\n if (user.address1 && user.address1.length > 50) {\r\n errors[\"address1\"] = \"50 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // Address2 - Efile\r\n if (user.address2 !== undefined) {\r\n if (user.address2 && user.address2.length > 50) {\r\n errors[\"address2\"] = \"50 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // City\r\n if (user.city !== undefined) {\r\n if (user.city && user.city.length > 50) {\r\n errors[\"city\"] = \"50 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // Email\r\n if (user.email !== undefined) {\r\n if (user.email && user.email.length > 50) {\r\n errors[\"email\"] = \"50 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n if (user.zip && user.zip.length > 0 && user.zip.length < 5) {\r\n errors[\"zip\"] = \"5-digit zip.\";\r\n return errors;\r\n }\r\n\r\n if (user.zip && user.zip.search(/^[0-9]+$/) === -1) {\r\n errors[\"zip\"] = \"Numbers only.\";\r\n return errors;\r\n }\r\n\r\n if (user.phoneFormatType === 'STANDARD') {\r\n if (user.phoneStandard && user.phoneStandard.length < 14) {\r\n errors[\"phoneStandard\"] = \"(XXX) XXX-XXXX\";\r\n return errors;\r\n }\r\n }\r\n\r\n if (user.phoneFormatType === 'INTERNATIONAL') {\r\n if (user.phoneInternational && user.phoneInternational.length < 7) {\r\n errors[\"phoneInternational\"] = \"Country code and phone number.\";\r\n return errors;\r\n }\r\n\r\n if (user.phoneInternational && user.phoneInternational.search(/^[0-9]+$/) === -1) {\r\n errors[\"phoneInternational\"] = \"Numbers only. No spaces. No dashes.\";\r\n return errors;\r\n }\r\n }\r\n\r\n return errors;\r\n}\r\n\r\n\r\nexport const validatePassword = (passwordReset) => {\r\n let errors = {};\r\n \r\n // Password\r\n if (passwordReset.password !== undefined) {\r\n if (!passwordReset.password) {\r\n errors[\"password\"] = \"Required.\";\r\n return errors;\r\n }\r\n\r\n if (!passwordReset.passwordConfirm) {\r\n errors[\"passwordConfirm\"] = \"Required.\";\r\n return errors;\r\n }\r\n\r\n if (passwordReset.password && passwordReset.password.length < 8) {\r\n errors[\"password\"] = \"At least 8 characters.\";\r\n return errors;\r\n }\r\n\r\n if (passwordReset.password.length > 64) {\r\n errors[\"password\"] = \"64 characters maximum.\";\r\n return errors;\r\n }\r\n\r\n if (passwordReset.password.search(/^(?=.*\\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&])[0-9a-zA-Z!@#$%^&]{8,64}$/) === -1) {\r\n errors[\"password\"] = \"Must contain a letter, a number and a special character.\";\r\n return errors;\r\n }\r\n\r\n if (passwordReset.password !== passwordReset.passwordConfirm) {\r\n errors[\"password\"] = \"Mismatched passwords.\";\r\n return errors;\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n return errors;\r\n}","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { Modal, Button, Form, Container } from 'react-bootstrap'\r\nimport FieldRow from \"../common/form/FieldRow\";\r\nimport Loading from '../common/modal/Loading';\r\nimport { formatPhone, formatInternationalPhone, formatZip } from \"../common/function/formattingUtils.js\";\r\nimport { validateUser, trimUserFields } from \"../common/function/userValidation.js\";\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport usStates from \"../../config/us_states.json\";\r\nimport { LOADING_STATUES, ALERT_TYPES } from \"../constants/constants\";\r\nimport Alert from '../common/modal/Alert';\r\n\r\nimport { userActiveIcon } from \"../../img/font_awesome/font_awesome\"\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n currentUser: state.currentUserReducer\r\n };\r\n}\r\n\r\nclass CurrentUser extends Component {\r\n\r\n state = {\r\n firstName: \"\",\r\n lastName: \"\",\r\n company: \"\",\r\n address: \"\",\r\n city: \"\",\r\n state: \"\",\r\n zip: \"\",\r\n email: \"\",\r\n phoneFormatType: '',\r\n\t\tphoneInternational: '',\r\n\t\tphoneStandard: '',\r\n loadingStatus: '',\r\n errors: {},\r\n alertType: ALERT_TYPES.OK\r\n }\r\n\r\n handleChange = (event) => {\r\n event.preventDefault();\r\n \r\n let value = event.target.value;\r\n\r\n if (event.target.id === 'phoneStandard') {\r\n\t\t\tvalue = formatPhone(value, this.state.phoneStandard);\r\n\t\t} else if (event.target.id === 'phoneInternational') {\r\n\t\t\tvalue = formatInternationalPhone(value);\r\n\t\t} else if (event.target.id === 'zip') {\r\n\t\t\tvalue = formatZip(value);\r\n\t\t}\r\n\r\n this.setState({\r\n [event.target.id]: value,\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n validateAndSubmit = () => {\r\n\t\tlet errors = validateUser(this.state, false);\r\n\t\tif (errors && Object.keys(errors).length > 0) {\r\n\t\t\tthis.setState({errors});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.showLoading() === true) {\r\n\r\n const { loadingStatus, alertType, errors, phoneInternational, phoneStandard,\r\n ...request } = this.state; // remove UI only fields before submitting\r\n\r\n if (this.state.phoneFormatType === 'INTERNATIONAL') {\r\n\t\t\t\trequest.phone = this.state.phoneInternational;\r\n\t\t\t} else {\r\n\t\t\t\trequest.phone = this.state.phoneStandard;\r\n\t\t\t}\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"currentUser/profile\", request, { withCredentials: true })\r\n .then((response) => {\r\n this.setState({ loadingStatus: \"\" })\r\n this.props.closeCurrentUser();\r\n }, (error) => {\r\n var response = error.response;\r\n if (response.status === 403) {\r\n this.props.history.push('/login');\r\n } else {\r\n \t\t\t\t\tthis.setState({loadingStatus: \"\", redirectToLogin: false}, this.showWarning(error.response.data.message));\r\n } \r\n\t\t\t\t}); \r\n\t\t}\r\n\t}\r\n\r\n handleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tconst trimmedUserFields = trimUserFields(this.state);\r\n\t\tthis.setState({ ...trimmedUserFields }, function () {\r\n\t\t\tthis.validateAndSubmit();\r\n\t\t});\r\n\t}\r\n \r\n handleCloseClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.setState({ errors: {} })\r\n this.props.closeCurrentUser();\r\n }\r\n\r\n handleChangePassword = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.setState({ errors: {} })\r\n this.props.closeCurrentUser();\r\n this.props.openCurrentUserChangePassword();\r\n }\r\n\r\n componentDidMount() {\r\n\t\r\n\t\taxios.get(configData.LANDSHARK_SERVER_URL + \"currentUser/profile\", { withCredentials: true })\r\n\t\t.then(\r\n\t\t\t(response) => {\r\n\t\t\t\tconst content = response.data.content;\r\n\t\t\t\tthis.setState( {\r\n firstName: content.firstName,\r\n lastName: content.lastName,\r\n company: content.company,\r\n address: content.address,\r\n city: content.city,\r\n state: content.state,\r\n zip: content.zip,\r\n email: content.email,\r\n phoneFormatType: content.phoneFormatType,\r\n\t\t\t\t\tphoneStandard: content.phoneFormatType === 'STANDARD' ? content.phone: '',\r\n\t\t\t\t\tphoneInternational: content.phoneFormatType === 'INTERNATIONAL' ? content.phone: ''\r\n\t\t\t\t});\r\n\t\t\t\r\n\t\t\t},\r\n\t\t\t(error) => {\r\n\t\t\t console.log(error);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\r\n showWarning = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t alertType: ALERT_TYPES.WARNING,\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t}\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t\tif (this.state.redirectToLogin) {\r\n\t\t\tthis.props.history.push('/login');\r\n\t\t}\r\n\t}\r\n\r\n render() {\r\n\r\n let formGroupRows = [\r\n {\r\n formGroups: [{ id: 'firstName', label: 'First Name', fieldType: 'text', value: this.state.firstName, required: true, primaryCriteria: true, error: this.state.errors['firstName'] }, { id: 'lastName', label: 'Last Name', fieldType: 'text', value: this.state.lastName, required: true, primaryCriteria: true, error: this.state.errors['lastName'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'email', label: 'Email', fieldType: 'email', value: this.state.email, required: true, primaryCriteria: true, error: this.state.errors['email'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'company', label: 'Company', fieldType: 'text', value: this.state.company, required: false, error: this.state.errors['company'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'address', label: 'Address', fieldType: 'text', value: this.state.address, required: false, style: {minWidth: 400}, error: this.state.errors['address'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'city', label: 'City', fieldType: 'text', value: this.state.city, required: false, error: this.state.errors['city'] }]\r\n },\r\n {\r\n formGroups: [ { id: 'state', label: 'State', fieldType: 'select', value: this.state.state, required: false, options: usStates }, { id: 'zip', label: 'Zip (ex. 55111)', fieldType: 'zip', value: this.state.zip, required: false, style: {maxWidth: 80}, error: this.state.errors['zip'] }]\r\n },\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'phoneFormatType', label: 'Phone Format', fieldType: 'select', options: [{ code: \"STANDARD\", description: \"(XXX) XXX-XXXX\" }, { code: \"INTERNATIONAL\", description: \"International\" }], value: this.state.phoneFormatType, required: false, error: this.state.errors['phoneFormatType'] },\r\n\t\t\t\t { id: 'phoneStandard', label: 'Phone (ex. (612) 555-1234)', fieldType: 'tel', value: this.state.phoneStandard, required: false, hideField: this.state.phoneFormatType !== 'STANDARD', error: this.state.errors['phoneStandard'] },\r\n\t\t\t\t\t\t\t { id: 'phoneInternational', label: 'Phone country code (ex. 8613123456789)', fieldType: 'tel_international', value: this.state.phoneInternational, required: false, hideField: this.state.phoneFormatType !== 'INTERNATIONAL', error: this.state.errors['phoneInternational'] } ]\r\n\t\t\t}\r\n ]\r\n\r\n return (\r\n <>\r\n <Modal show={this.props.show} onHide={this.handleCloseClick} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Form onSubmit={this.handleSubmit}>\r\n <Modal.Header closeButton>\r\n <Modal.Title style={{color: '#3674AB'}}>{userActiveIcon} {this.props.currentUser.username} </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black', background: '#3674AB', color: 'white'}}>\r\n <Container fluid=\"true\" style={{ paddingLeft: 50, paddingBottom: 50, marginTop: 10, background: 'white', color: 'black', border: '2px solid black', borderRadius: '5px' }}>\r\n <br/>\r\n {\r\n formGroupRows.map((formGroupRow, index) => {\r\n return (\r\n <FieldRow key={\"currentUserProfileFieldRow\" + index} formGroupRow={formGroupRow} onChange={this.handleChange} />\r\n );\r\n })\r\n }\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button className='mr-auto' variant=\"secondary\" onClick={this.handleChangePassword} >Change Password</Button>\r\n <Button variant=\"primary\" type=\"submit\" >Update</Button>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Close</Button>\r\n </Modal.Footer>\r\n </Form>\r\n </Modal>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} type={this.state.alertType}/>\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, null)(CurrentUser);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { Modal, Button, Form, Container } from 'react-bootstrap'\r\nimport FieldRow from \"../common/form/FieldRow\";\r\nimport Loading from '../common/modal/Loading';\r\n\r\nimport { validatePassword } from \"../common/function/userValidation.js\";\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport { LOADING_STATUES, ALERT_TYPES } from \"../constants/constants\";\r\nimport Alert from '../common/modal/Alert';\r\n\r\nimport { userActiveIcon } from \"../../img/font_awesome/font_awesome\"\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n currentUser: state.currentUserReducer\r\n };\r\n}\r\n\r\nclass CurrentUserChangePassword extends Component {\r\n\r\n state = {\r\n password: \"\",\r\n\t\tpasswordConfirm: \"\",\r\n loadingStatus: '',\r\n errors: {},\r\n alertType: ALERT_TYPES.OK\r\n }\r\n\r\n handleChange = (event) => {\r\n event.preventDefault();\r\n \r\n let value = event.target.value;\r\n this.setState({\r\n [event.target.id]: value,\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\r\n handleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n let errors = validatePassword(this.state);\r\n\t\tif (errors && Object.keys(errors).length > 0) {\r\n\t\t\tthis.setState({errors});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\tlet { loadingStatus, errors, alertType, showAlert, passwordConfirm, ...request } = this.state; // remove UI only fields before submitting\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"currentUser/password\", request, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({loadingStatus: \"\"}, this.showAlert(\"Password updated.\")); \r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\t this.setState({loadingStatus: \"\"}, this.showAlert(error.response.data.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t\t}\r\n \r\n handleCloseClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.setState({ errors: {} })\r\n this.props.closeCurrentUserChangePassword();\r\n }\r\n\r\n handleBack = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.setState({ errors: {} })\r\n this.props.closeCurrentUserChangePassword();\r\n this.props.openCurrentUser();\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t}, this.handleCloseClick)\r\n\t }\r\n\r\n showWarning = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t alertType: ALERT_TYPES.WARNING,\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t}\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t}\r\n\r\n render() {\r\n\r\n\t\tlet formGroupRows = [\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'password', label: 'New Password', fieldType: 'password', value: this.state.password, required: true, primaryCriteria: true, error: this.state.errors['password'] } ]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [ { id: 'passwordConfirm', label: 'Confirm Password', fieldType: 'password', value: this.state.passwordConfirm, required: true, primaryCriteria: true, error: this.state.errors['passwordConfirm'] }]\r\n\t\t\t}\r\n\t\t]\r\n\r\n return (\r\n <>\r\n <Modal show={this.props.show} onHide={this.handleCloseClick} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Form onSubmit={this.handleSubmit}>\r\n <Modal.Header closeButton>\r\n <Modal.Title style={{color: '#3674AB'}}>{userActiveIcon} {this.props.currentUser.username} </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black', background: '#3674AB', color: 'white'}}>\r\n <Container fluid=\"true\" style={{ paddingLeft: 50, paddingBottom: 50, marginTop: 10, background: 'white', color: 'black', border: '2px solid black', borderRadius: '5px' }}>\r\n <br/>\r\n {\r\n formGroupRows.map((formGroupRow, index) => {\r\n return (\r\n <FieldRow key={index} formGroupRow={formGroupRow} onChange={this.handleChange} />\r\n );\r\n })\r\n }\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button className='mr-auto' variant=\"secondary\" onClick={this.handleBack} >Back</Button>\r\n <Button variant=\"primary\" type=\"submit\" >Update</Button>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Close</Button>\r\n </Modal.Footer>\r\n </Form>\r\n </Modal>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} type={this.state.alertType}/>\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, null)(CurrentUserChangePassword);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { Modal, Button } from 'react-bootstrap'\r\nimport { logout } from \"../../redux/actions/loginActions\";\r\nimport translations from \"../../config/translation/logout_translations.json\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH',\r\n };\r\n }\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n logout: (history) => dispatch(logout(history))\r\n }\r\n}\r\n\r\nclass Logout extends Component {\r\n\r\n handleYesClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.props.closeLogout();\r\n this.props.logout(this.props.history);\r\n }\r\n\r\n handleNoClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.props.closeLogout();\r\n }\r\n\r\n render() {\r\n return (\r\n <Modal show={this.props.show} onHide={this.handleNoClick} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton>\r\n <Modal.Title style={{color: '#3674AB'}}>{translations[this.props.language].logout}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black', background: '#3674AB', color: 'white', fontSize: 20}}>\r\n {translations[this.props.language].continue}?\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"primary\" onClick={this.handleYesClick}>{translations[this.props.language].yes}</Button>\r\n <Button variant=\"secondary\" onClick={this.handleNoClick}>{translations[this.props.language].no}</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(Logout);","import axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport AjaxError from \"../../utils/AjaxError\";\r\n\r\nexport const login = (credential, defaultSearch, history, callback) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"auth/login\", credential, { withCredentials: true })\r\n .then((response) => {\r\n // We either have an error or the current user.\r\n if (response.data.content) {\r\n dispatch({ type: 'UPDATE_SEARCH_HISTORY', historyResults: response.data.content.searchHistoryList });\r\n dispatch({ type: 'UPDATE_CURRENT_USER', currentUser: response.data.content });\r\n dispatch({ type: 'SET_SELECTED_SEARCH_TYPE', selectedSearchType: defaultSearch });\r\n callback( { error: false } );\r\n history.push('/home'); // default to the home page after logging in\r\n } else {\r\n callback( { error: true, message: response.data.message });\r\n }\r\n }, (error) => {\r\n let result = new AjaxError(error);\r\n\r\n callback( { error: true, message: result.getRawErrorMessage() });\r\n });\r\n};\r\n\r\nexport const logout = (history) => async dispatch => {\r\n await axios.get(configData.LANDSHARK_SERVER_URL + \"auth/logout\", { withCredentials: true })\r\n .then((response) => {\r\n history.push('/login');\r\n dispatch({ type: 'LOGOUT_USER' });\r\n }, (error) => {\r\n alert(\"Logout Failed\");\r\n });\r\n};","import React, { Component } from 'react';\r\nimport { Modal, Button, Form, Row, Col, Container } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n applySurcharge: state.countyConfigEscrowReducer.applySurcharge,\r\n creditCardSurcharge: state.countyConfigEscrowReducer.creditCardSurcharge,\r\n creditCardSurchargePercent: state.countyConfigEscrowReducer.creditCardSurchargePercent,\r\n minReloadAmount: state.countyConfigEscrowReducer.minReloadAmount,\r\n maxReloadAmount: state.countyConfigEscrowReducer.maxReloadAmount,\r\n isCreditCardSurchargePercent: state.countyConfigEscrowReducer.creditCardSurchargeMethod === 'percent' ? true : false\r\n };\r\n}\r\n\r\nclass EscrowRechargeAmountWindow extends Component {\r\n \r\n state = {\r\n deposit: 0.00,\r\n surcharge: 0.00,\r\n totalCharge: 0.00\r\n };\r\n \r\n onSubmit = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n let amt = Number(this.state.deposit);\r\n if (amt > 0) {\r\n this.props.buyClicked({\r\n deposit: this.state.deposit\r\n });\r\n } else {\r\n alert(\"Amount must be greater than zero\");\r\n }\r\n }\r\n \r\n handleCloseClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.props.closeClicked();\r\n }\r\n\r\n handleDepositChanged = (event) => {\r\n this.handleEntryChanged(event);\r\n }\r\n\r\n handleDepositBlur = (event) => {\r\n this.handleEntryChanged(event);\r\n }\r\n\r\n handleEntryChanged = (event) => {\r\n const deposit = event.target.value;\r\n \r\n let surcharge = 0.00;\r\n\r\n if ((this.props.applySurcharge === true || this.props.applySurcharge === 'true') && this.props.isCreditCardSurchargePercent) {\r\n // Doing all this just to make sure rounding correctly\r\n surcharge = Math.round((this.props.creditCardSurchargePercent + Number.EPSILON) * 100) / 100\r\n surcharge = surcharge/100;\r\n surcharge = deposit * surcharge;\r\n surcharge = Math.round((surcharge + Number.EPSILON) * 100) / 100\r\n } else if (this.props.applySurcharge === true || this.props.applySurcharge === 'true') {\r\n surcharge = this.props.creditCardSurcharge\r\n }\r\n\r\n const totalCharge = deposit * 1 + surcharge;\r\n\r\n this.setState( {\r\n deposit,\r\n surcharge,\r\n totalCharge\r\n });\r\n }\r\n\r\n render() {\r\n \r\n let surchargeText = '$' + this.props.creditCardSurcharge;\r\n\r\n if (this.props.isCreditCardSurchargePercent) {\r\n surchargeText = this.props.creditCardSurchargePercent + '%';\r\n }\r\n\r\n const depositEntry = <Form.Control id='deposit' style={{ width: 200, display: 'inline-block', textAlign: 'right' }} type='number' onChange={this.handleDepositChanged}\r\n onBlur={this.handleDepositBlur} value={this.state.deposit} step={0.01} min={this.props.minReloadAmount} max={this.props.maxReloadAmount} precision={2} />\r\n\r\n return (\r\n <Modal show={this.props.show} onHide={this.handleCloseClick} size='lg' aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Form onSubmit={this.onSubmit} >\r\n <Modal.Header >\r\n <Modal.Title style={{color: '#3674AB'}}>\r\n Escrow Deposit\r\n </Modal.Title>\r\n </Modal.Header>\r\n\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black', background: '#3674AB', color: 'white', fontSize: 18}}>\r\n <Container >\r\n <Row>\r\n <Col>\r\n <Container>\r\n <Row><Col lg={1}></Col><Col lg={5}>Deposit amount (${this.props.minReloadAmount} - ${this.props.maxReloadAmount} max):</Col><Col lg={5} style={{ textAlign: 'end' }}>${depositEntry}</Col><Col lg={1}></Col></Row>\r\n {\r\n this.props.applySurcharge === true && <>\r\n <Row><Col lg={1}></Col><Col lg={5}>Credit card fee ({surchargeText}):</Col><Col lg={5} style={{textAlign: 'end'}}>${this.state.surcharge}</Col><Col lg={1}></Col></Row>\r\n <Row ><Col lg={1}></Col><Col lg={10} style={{ textAlign: 'right' }}><hr style={{ borderColor: 'white' }} /></Col><Col lg={1}></Col></Row>\r\n <Row style={{fontWeight: 'bold'}}><Col lg={1}></Col><Col lg={5}>Total to be charged:</Col><Col lg={5} style={{textAlign: 'right'}}>${this.state.totalCharge}</Col><Col lg={1}></Col></Row>\r\n <Row ><Col lg={1}></Col><Col lg={10} style={{ textAlign: 'right' }}><hr style={{ borderColor: 'white' }} /></Col><Col lg={1}></Col></Row>\r\n </>\r\n }\r\n </Container>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Body>\r\n\r\n <Modal.Footer >\r\n <Container >\r\n <Row style={{ margin: 5 }} >\r\n <Col md='12' className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"primary\" type=\"submit\" style={{ marginRight: 8 }} >Continue to Credit Card</Button>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Form>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(EscrowRechargeAmountWindow);","export default \"data:image/png;base64,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\"","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { Button, Row, Col, Container } from 'react-bootstrap'\r\n\r\nimport axios from \"axios\";\r\n\r\nimport CurrentUser from './CurrentUser';\r\nimport CurrentUserChangePassword from './CurrentUserChangePassword';\r\nimport Logout from './Logout';\r\nimport CreditCardImmediateChargeWindow from \"../creditcard/CreditCardImmediateChargeWindow\";\r\nimport EscrowRechargeAmountWindow from \"../creditcard/EscrowRechargeAmountWindow\";\r\nimport FlatFeeAddon from \"../image/FlatFeeAddon\"\r\nimport configData from \"../../config/config.json\";\r\nimport AjaxResult from \"../../utils/AjaxResult\";\r\nimport AjaxResponseHandler from \"../../utils/AjaxResponseHandler\"\r\nimport Alert from '../common/modal/Alert'\r\n\r\nimport landshark_logo from '../../img/trimin_landshark_verysmall.png';\r\nimport { refreshUsageBalance } from \"../../redux/actions/otherLandLinkActions\";\r\nimport { dollarIcon, imageIcon, redoIcon, nameIcon, warningSmallIcon } from \"../../img/font_awesome/font_awesome\"\r\nimport { backendLogger } from \"../../logger.js\"\r\n\r\nimport translations from \"../../config/translation/information_main_translations.json\"\r\n\r\nconst mapStateToProps = state => {\r\n\treturn {\r\n\t\tcountyConfigUserLockout: state.countyConfigUserLockoutReducer,\r\n\t\tcountyConfigBillingSchedule: state.countyConfigBillingSchedule,\r\n\t\tcountyConfigEfile: state.countyConfigEfileReducer,\r\n\t\tcountyConfigEscrow: state.countyConfigEscrowReducer,\r\n\t\tcountyConfigFlatFeeOverrideUISettings: state.countyConfigFlatFeeOverrideUISettingsReducer,\r\n\t\tappTitle: state.countyConfigCommonReducer.appTitle,\r\n\t\tcountyName: state.countyConfigCommonReducer.countyName,\r\n\t\tcurrentUserId: state.currentUserReducer.userId,\r\n\t\tcurrentUserName: state.currentUserReducer.username,\r\n\t\tcurrentUserUsageBalance: state.currentUserReducer.usageBalance,\r\n\t\tpaymentMethod: state.currentUserReducer.paymentMethod,\r\n\t\taccountType: state.currentUserReducer.accountType,\r\n\t\trole: state.currentUserReducer.role,\r\n\t\tlanguage: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH' \r\n\t};\r\n}\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\trefreshUsageBalance: (userId) => dispatch(refreshUsageBalance(userId))\r\n\t}\r\n}\r\n\r\nconst ALERT_MESSAGE = 'MESSAGE';\r\n\r\nclass InformationMain extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n\t\t\tshowCurrentUser: false,\r\n\t\t\tshowCurrentUserChangePassword: false,\r\n\t\t\tshowEscrowRechargeAmountWindow: false,\r\n\t\t\tshowLogout: false,\r\n\t\t\talertWindow: this.createAlertWindowParams(false),\r\n\t\t\tflatFeeAddonWindow : { show: false }\r\n\t\t};\r\n\t}\r\n\r\n flatFeeAddonWindowCallbackCompleted = () => {\r\n\t\tconst userId = { userId: this.props.currentUserId}\r\n\t\t\r\n\t\tthis.props.refreshUsageBalance(userId);\r\n this.flatFeeAddonWindowCallbackCloseClicked();\r\n }\r\n\r\n flatFeeAddonWindowCallbackCloseClicked = () => {\r\n let newState = { flatFeeAddonWindow: { show: false }};\r\n this.setState(newState);\r\n }\r\n\r\n\thandleClickAbout = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.showAbout(true);\r\n\t}\r\n\r\n\thandleClickCurrentUser = (event) => {\r\n\t\tif (event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t\tthis.setState({\r\n\t\t\tshowCurrentUser: true\r\n\t\t});\r\n\t}\r\n\r\n\thandleCloseCurrentUser = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowCurrentUser: false\r\n\t\t});\r\n\t}\r\n\r\n\thandleClickCurrentUserChangePassword = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowCurrentUserChangePassword: true\r\n\t\t});\r\n\t}\r\n\r\n\thandleCloseCurrentUserChangePassword = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowCurrentUserChangePassword: false\r\n\t\t});\r\n\t}\r\n\r\n\thandleClickLogout = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\tshowLogout: true\r\n\t\t});\r\n\t}\r\n\r\n\thandleCloseLogout = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowLogout: false\r\n\t\t});\r\n\t}\r\n\r\n\thandleEscrowAddMoney = (event) => {\r\n \tevent.preventDefault(); \r\n\t\tthis.setState({\r\n\t\t\tshowEscrowRechargeAmountWindow: true\r\n\t\t})\r\n\t}\r\n\r\n\thandleEscrowAmountClose = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowEscrowRechargeAmountWindow: false\r\n\t\t})\r\n\t}\r\n\r\n\thandleRechargeEscrowAccount = (depositAmount) => {\r\n\t\tthis.setState({\r\n\t\t\tshowEscrowRechargeAmountWindow: false\r\n\t\t});\r\n\r\n\t\t(async () => {\r\n\t\t\tawait\r\n\t\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"escrowDeposit/initiateDeposit\", \r\n\t\t\t\t\t{amount: depositAmount.deposit}, { withCredentials: true })\r\n\t\t\t\t\t.then((response) => {\r\n\t\t\t\t\t\tlet result = new AjaxResult(response);\r\n\r\n\t\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\t\t\tshowCreditCardEscrowRechargeWindow: true,\r\n\t\t\t\t\t\t\t\tauthAndCaptureToken: result.content().tokenResults.token\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}, (error) => {\r\n\t\t\t\t\t\tthis.setState({ loadingStatus: \"\" }, function() {\r\n\t\t\t\t\t\t\tAjaxResponseHandler.handleError(error, this.showAlertText, this.props.history);\r\n\t\t\t\t\t\t}); \r\n\t\t\t\t\t})\r\n\t\t})();\r\n\t}\r\n\r\n\thandleEscrowPaymentComplete = (transactionResponse) => {\r\n\t\tlet request = transactionResponse;\r\n\t\tconsole.log(request);\r\n\r\n\t\tbackendLogger.info(\"Attempting to call escrowDeposit/completeDeposit with transactionResponse: \" + JSON.stringify(request));\r\n\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"escrowDeposit/completeDeposit\", request, { withCredentials: true })\r\n\t\t\t.then((response) => {\r\n\t\t\t\tconsole.log('notify server of auth and capture response ', response);\r\n\t\t\t\tconst userId = { userId: this.props.currentUserId}\r\n\t\t\t\tthis.props.refreshUsageBalance(userId);\r\n\r\n\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tshowCreditCardEscrowRechargeWindow: false,\r\n\t\t\t\t})\r\n\t\t\t}, (error) => {\r\n\t\t\t\t\t\tconsole.log(\"Error adding to escrow\");\r\n\t\t\t\t\t\tthis.setState({ loadingStatus: \"\", showCreditCardEscrowRechargeWindow: false }, function() {\r\n\t\t\t\t\t\t\t\tAjaxResponseHandler.handleError(error, this.showAlertText, this.props.history);\r\n\t\t\t\t\t\t}); \r\n\t\t\t})\r\n\t}\r\n\r\n\thideEscrowPaymentPage = () => {\r\n\t\tthis.setState({\r\n\t\t\t\tshowCreditCardEscrowRechargeWindow: false\r\n\t\t})\r\n\t}\r\n\t\r\n\thandleFlatFeePurchaseImages = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState( { flatFeeAddonWindow : { show: true } } );\r\n\t}\r\n\r\n\thandleClickrefreshUsageBalance = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tconst userId = { userId: this.props.currentUserId}\r\n\t\tthis.props.refreshUsageBalance(userId);\r\n\t}\r\n\r\n createAlertWindowParams = (show, message, callback, type) => {\r\n if (show) {\r\n return {\r\n callback: callback,\r\n message: message,\r\n show: show,\r\n type: type ? type : ALERT_MESSAGE\r\n };\r\n } else {\r\n return {\r\n callback: null,\r\n message: '',\r\n show: show,\r\n type: ALERT_MESSAGE\r\n };\r\n }\r\n }\r\n\r\n addAlert = (state, alertWindowParams) => {\r\n\t\tstate.alertWindow = alertWindowParams;\r\n }\r\n\t\r\n showAlert = (alertWindowParams) => {\r\n\t\tthis.setState({\r\n\t\t alertWindow: alertWindowParams\r\n\t\t})\r\n\t }\r\n\t\r\n showAlertText = (msg) => {\r\n this.showAlert(this.createAlertWindowParams(true, msg, null, ALERT_MESSAGE));\r\n }\r\n\r\n\thideAlert = () => {\r\n // After the alert is confirmed, close the alert and pay for the order.\r\n let callback = this.state.alertWindow.callback;\r\n let params = this.createAlertWindowParams(false);\r\n\t\tthis.setState({\r\n\t\t\t alertWindow: params\r\n\t\t },\r\n () => { if (callback) callback(); }\r\n );\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<Container fluid=\"true\" >\r\n\t\t\t\t\t<Row className='align-items-end'>\r\n\t\t\t\t\t\t<Col lg={8}>\r\n\t\t\t\t\t\t\t<Container style={{marginLeft: 0}}>\r\n\t\t\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t\t\t<span style={{ color: '#3674AB', fontSize: 32, fontVariant: 'small-caps', fontWeight: 'bold' }}>{this.props.countyName} {this.props.appTitle}</span>\r\n\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t\t\t<span style={{ fontSize: 20, fontWeight: 500, marginTop: 50 }}> powered by </span>\r\n\t\t\t\t\t\t\t\t\t\t<img border=\"0\" src={landshark_logo} alt=\"Trimin Landshark\" style={{ paddingBottom: 15 }} />\r\n\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.props.countyConfigUserLockout && this.props.countyConfigUserLockout.lockoutInPlace === true &&\r\n\t\t\t\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t\t\t\t<div id=\"arrow\" className=\"circle bounce\" data-target=\"#introText\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"bounce\" > {warningSmallIcon} <span style={{ position: 'relative', color: 'red', fontSize: 20, fontWeight: 'bold' }}>{this.props.countyConfigUserLockout.messageHeadline}</span></span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</Container>\r\n\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t<Col lg={4} >\r\n\t\t\t\t\t\t\t<table className='float-right' style={{ marginRight: 20, fontSize: 16, fontWeight: 500 }}>\r\n\t\t\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t<div style={{ color: 'gray' }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"align-bottom\">{translations[this.props.language].hello}, {this.props.currentUserName}</span> \r\n\t\t\t\t\t\t\t\t\t\t\t\t{ \r\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.role !== 'GUEST' &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" className='btn-sm' onClick={this.handleClickCurrentUser} style={{ marginLeft: 5 }}>{nameIcon}</Button> \r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"danger\" className='btn-sm' style={{ marginLeft: 5}} onClick={this.handleClickLogout}>{translations[this.props.language].logout}</Button> \r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t\t<hr style={{ backgroundColor: '#000', marginTop: 6, marginBottom: 6, marginLeft: 0, marginRight: 0}}></hr>\r\n\t\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tthis.props.role !== 'TRIMIN' && this.props.role !== 'COUNTY' && this.props.role !== 'GUEST' && this.props.accountType === 'A_LA_CARTE' && this.props.paymentMethod === 'ESCROW' &&\r\n\t\t\t\t\t\t\t\t\t\t \tthis.props.countyConfigEscrow.reloadByCreditCard &&\r\n\t\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"align-bottom\" style={{ color: 'gray' }}>{this.props.currentUserUsageBalance}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" className='btn-sm' onClick={this.handleClickrefreshUsageBalance} style={{ marginLeft: 5, marginBottom: 6 }}>{redoIcon}</Button>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.role == 'ACCOUNT' &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" className='btn-sm' onClick={this.handleEscrowAddMoney} style={{ marginLeft: 5, marginBottom: 6 }}>Add {dollarIcon} </Button>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tthis.props.role !== 'TRIMIN' && this.props.role !== 'COUNTY' && this.props.role !== 'GUEST' && this.props.accountType === 'A_LA_CARTE' && this.props.paymentMethod === 'ESCROW' &&\r\n\t\t\t\t\t\t\t\t\t\t\t!this.props.countyConfigEscrow.reloadByCreditCard &&\r\n\t\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"align-bottom\" style={{ color: 'gray' }}>{this.props.currentUserUsageBalance}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" className='btn-sm' onClick={this.handleClickrefreshUsageBalance} style={{ marginLeft: 5, marginBottom: 6 }}>{redoIcon}</Button>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tthis.props.role !== 'TRIMIN' && this.props.role !== 'COUNTY' && this.props.role !== 'GUEST' && this.props.accountType === 'A_LA_CARTE' && this.props.paymentMethod === 'INVOICE' &&\r\n\t\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"align-bottom\" style={{ color: 'gray' }}>{this.props.currentUserUsageBalance} </span>\r\n\t\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tthis.props.role !== 'TRIMIN' && this.props.role !== 'COUNTY' && this.props.role !== 'GUEST' && this.props.accountType === 'FLAT_FEE' &&\r\n\t\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"align-bottom\" style={{ color: 'gray' }}>{this.props.currentUserUsageBalance}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" className='btn-sm' onClick={this.handleClickrefreshUsageBalance} style={{ marginLeft: 5, marginBottom: 6 }}>{redoIcon}</Button> \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.role == 'ACCOUNT' && this.props.countyConfigEscrow.reloadByCreditCard &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" className='btn-sm' onClick={this.handleEscrowAddMoney} style={{ marginLeft: 5, marginBottom: 6 }}>Add {dollarIcon}</Button> \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.role == 'ACCOUNT' && this.props.countyConfigFlatFeeOverrideUISettings.accountAdminReload &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" className='btn-sm' onClick={this.handleFlatFeePurchaseImages} style={{ marginLeft: 5, marginBottom: 6 }}>Add {imageIcon}</Button> \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tthis.props.role !== 'TRIMIN' && this.props.role !== 'COUNTY' && this.props.role !== 'GUEST' && this.props.accountType === 'A_LA_CARTE' && this.props.paymentMethod === 'CREDIT_CARD' &&\r\n\t\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"align-bottom\" style={{ color: 'gray' }}>{this.props.currentUserUsageBalance} </span>\r\n\t\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t\t\t</table>\r\n\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t</Row>\r\n\t\t\t\t</Container>\r\n <Alert show={this.state.alertWindow.show} hideAlert={this.hideAlert} message={this.state.alertWindow.message} type={this.state.alertWindow.type} />\r\n\t\t\t\t<CurrentUser show={this.state.showCurrentUser} openCurrentUserChangePassword={this.handleClickCurrentUserChangePassword} closeCurrentUser={this.handleCloseCurrentUser} history={this.props.history}/>\r\n\t\t\t\t<CurrentUserChangePassword show={this.state.showCurrentUserChangePassword} openCurrentUser={this.handleClickCurrentUser} closeCurrentUserChangePassword={this.handleCloseCurrentUserChangePassword} history={this.props.history}/>\r\n\t\t\t\t<CreditCardImmediateChargeWindow show={this.state.showCreditCardEscrowRechargeWindow} token={this.state.authAndCaptureToken}\r\n cancelPayment={this.hideEscrowPaymentPage} makePayment={this.handleEscrowPaymentComplete} title='Escrow Deposit - Credit Card Authorization' />\r\n\t\t\t\t<EscrowRechargeAmountWindow show={this.state.showEscrowRechargeAmountWindow} buyClicked={this.handleRechargeEscrowAccount} closeClicked={this.handleEscrowAmountClose} />\r\n <FlatFeeAddon\r\n show={this.state.flatFeeAddonWindow.show}\r\n completed={this.flatFeeAddonWindowCallbackCompleted}\r\n closeClicked={this.flatFeeAddonWindowCallbackCloseClicked} />\r\n\t\t\t\t<Logout show={this.state.showLogout} closeLogout={this.handleCloseLogout} history={this.props.history} />\r\n\t\t\t</>\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(InformationMain);","import React, { Component } from \"react\";\r\nimport { Navbar, Nav } from 'react-bootstrap'\r\nimport { NavLink } from 'react-router-dom'\r\nimport { connect } from \"react-redux\";\r\nimport translations from \"../../config/translation/navigation_bar_translations.json\"\r\n\r\nconst mapStateToProps = state => {\r\n\treturn {\r\n search: state.currentUserReducer.search,\r\n\t\trole: state.currentUserReducer.role,\r\n countyConfigEfile: state.countyConfigEfileReducer,\r\n countyName: state.countyConfigCommonReducer.countyName,\r\n\t\tlanguage: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH' \r\n\t};\r\n}\r\n\r\nclass Navigationbar extends Component {\r\n render() {\r\n return <Navbar bg=\"light\" expand=\"lg\" style={{ padding: 2 }}>\r\n <Navbar.Toggle aria-controls=\"basic-navbar-nav\" />\r\n <Navbar.Collapse id=\"basic-navbar-nav\">\r\n <Nav className=\"mr-auto\" style={{ width: '100%' }}>\r\n <NavLink to=\"/home\" className=\"top-navlink\">{translations[this.props.language].home}</NavLink>\r\n {\r\n\t\t\t\t\t\t(this.props.countyConfigEfile.efile === true) &&\r\n <NavLink to=\"/efile\" className=\"top-navlink\">{translations[this.props.language].e_file}</NavLink>\r\n } \r\n {\r\n <NavLink to=\"/search\" className=\"top-navlink\">{translations[this.props.language].search}</NavLink>\r\n }\r\n {\r\n (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY' || this.props.role === 'ACCOUNT') &&\r\n <>\r\n <NavLink to=\"/reports\" className=\"top-navlink\">Reports</NavLink>\r\n <NavLink to=\"/userManager\" className=\"top-navlink\">User Manager</NavLink> \r\n </>\r\n }\r\n { \r\n (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY' ) &&\r\n <NavLink to=\"/controlPanel\" className=\"top-navlink top-navlink-last\">Control Panel</NavLink>\r\n }\r\n </Nav>\r\n </Navbar.Collapse>\r\n </Navbar>\r\n }\r\n\r\n}\r\n\r\nexport default connect(mapStateToProps)(Navigationbar);\r\n","import React from 'react';\r\n\r\nimport InformationMain from \"./InformationMain\";\r\nimport Navigationbar from \"./Navigationbar\";\r\n\r\nexport default class CommonTop extends React.Component {\r\n\t\r\n render() {\r\n return( \r\n <div>\r\n\t\t\t\t<InformationMain history={this.props.history} />\r\n <Navigationbar />\r\n </div>\r\n )\r\n }\r\n}","import React, {Component} from 'react';\r\nimport { Card } from 'react-bootstrap'\r\nimport { mobileIcon } from '../../img/font_awesome/font_awesome';\r\nimport translations from \"../../config/translation/home_translations.json\"\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH',\r\n };\r\n}\r\n\r\nclass ContactUs extends Component {\r\n render() {\r\n return (\r\n <Card>\r\n <Card.Header>\r\n {mobileIcon} {translations[this.props.language].contact_us} \r\n </Card.Header>\r\n <Card.Body>\r\n \r\n <>\r\n <ul style={{ listStyle: 'none' }} >\r\n <li><span style={{ fontWeight: 'bold' }}>Email:</span> {this.props.contactEmail}</li>\r\n <li><span style={{ fontWeight: 'bold' }}>Phone:</span> {this.props.contactPhone}</li>\r\n </ul>\r\n </>\r\n \r\n </Card.Body>\r\n </Card>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(ContactUs);","import React, {Component} from 'react';\r\nimport { Card } from 'react-bootstrap'\r\nimport { commentIcon } from '../../img/font_awesome/font_awesome';\r\nimport translations from \"../../config/translation/home_translations.json\"\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH',\r\n };\r\n}\r\n\r\nclass Disclaimer extends Component {\r\n render() {\r\n let disclaimerLink = <></>;\r\n if (this.props.links && this.props.links.length > 0) {\r\n const filteredDisclaimerList = this.props.links.filter( link => link.heading === 'Disclaimer' );\r\n if (filteredDisclaimerList && filteredDisclaimerList.length === 1) {\r\n disclaimerLink = <ul style={{ listStyle: 'none' }}><li><strong>By proceeding to use this website, each visitor agrees to the terms in the Disclaimer.</strong></li><li> </li><li><a target=\"_blank\" rel=\"noopener noreferrer\" href={filteredDisclaimerList[0].paragraphContent} style={{ color: '#408CC7', fontWeight: 'bold' }}>{translations[this.props.language].click} {translations[this.props.language].here}</a></li></ul> \r\n } \r\n }\r\n \r\n return (\r\n <Card>\r\n <Card.Header>\r\n {commentIcon} {translations[this.props.language].disclaimer}\r\n </Card.Header>\r\n <Card.Body>\r\n {disclaimerLink}\r\n </Card.Body>\r\n </Card >\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(Disclaimer);\r\n","import React, { Component } from 'react';\r\nimport { Modal, Button, Form } from 'react-bootstrap'\r\nimport { paperPlaneIcon } from '../../img/font_awesome/font_awesome';\r\nimport translations from \"../../config/translation/home_translations.json\"\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH',\r\n };\r\n}\r\n\r\nclass LatestNewsBig extends Component {\r\n\r\n render() {\r\n return (\r\n <>\r\n <Modal show={this.props.show} onHide={this.props.handleClose} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered >\r\n <Form onSubmit={this.handleSubmit}>\r\n <Modal.Header style={{ background: '#3674AB', color: 'white'}}>\r\n <Modal.Title>{paperPlaneIcon} {translations[this.props.language].latest_news}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body >\r\n <ul style={{ listStyle: 'none' }} >\r\n <li> </li>\r\n {\r\n this.props.newsItems.map((newsItem, index) => {\r\n return <li key={index}><span style={{ fontWeight: 'bold' }}>{newsItem.heading}</span> {newsItem.paragraphContent}</li>\r\n })\r\n }\r\n </ul>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={this.props.handleClose}>Close</Button>\r\n </Modal.Footer>\r\n </Form>\r\n </Modal>\r\n \r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(LatestNewsBig);","import React, {Component} from 'react';\r\nimport { Card } from 'react-bootstrap'\r\nimport { paperPlaneIcon, expandIcon } from '../../img/font_awesome/font_awesome';\r\nimport LatestNewsBig from './LatestNewsBig';\r\nimport translations from \"../../config/translation/home_translations.json\"\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH',\r\n };\r\n}\r\n\r\nclass LatestNews extends Component {\r\n \r\n state = {\r\n showModal: false\r\n }\r\n\r\n handleClick = () => {\r\n this.setState({\r\n showModal : true\r\n })\r\n }\r\n\r\n handleClose = () => {\r\n this.setState({\r\n showModal : false\r\n })\r\n }\r\n\r\n render() {\r\n let expandSpan = <></>\r\n if (this.props.newsItems) {\r\n expandSpan = <span onClick={this.handleClick} style={{ cursor: \"pointer\", float: 'right' }}>{expandIcon}</span>\r\n }\r\n\r\n return (\r\n <>\r\n <Card>\r\n <Card.Header>\r\n {paperPlaneIcon} {translations[this.props.language].latest_news}{expandSpan}\r\n </Card.Header>\r\n <Card.Body style={{paddingTop:0, paddingLeft: 0, paddingRight:0, paddingBottom: 0}}>\r\n <ul className='list-card' style={{ listStyle: 'none', paddingLeft: 0, marginLeft: 20 }} >\r\n <li> </li>\r\n {\r\n this.props.newsItems.map((newsItem, index) => {\r\n return <li key={index}><span style={{ fontWeight: 'bold' }}>{newsItem.heading}</span> {newsItem.paragraphContent}</li>\r\n })\r\n }\r\n </ul>\r\n </Card.Body>\r\n </Card>\r\n <LatestNewsBig show={this.state.showModal} newsItems={this.props.newsItems} handleClose={this.handleClose} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(LatestNews);\r\n","import React, {Component} from 'react';\r\n\r\nimport { Card, Container, Row, Col } from 'react-bootstrap' \r\nimport { externalLinkIcon } from '../../img/font_awesome/font_awesome';\r\nimport translations from \"../../config/translation/home_translations.json\"\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH',\r\n };\r\n}\r\n\r\nclass Links extends Component {\r\n\r\n render() {\r\n let links = <></>;\r\n if (this.props.links && this.props.links.length > 0) {\r\n links = <ul style={{ listStyle: 'none' }}>\r\n {\r\n this.props.links.map((link, index) => {\r\n return <li key={index}>{externalLinkIcon} <a target=\"_blank\" rel=\"noopener noreferrer\" href={link.paragraphContent} style={{ color: '#408CC7', fontWeight: 'bold' }}>{link.heading}</a></li>\r\n })\r\n }\r\n </ul>\r\n }\r\n \r\n return (\r\n <Card>\r\n <Card.Header>\r\n {externalLinkIcon} {translations[this.props.language].links}\r\n </Card.Header>\r\n <Card.Body style={{ color: '#408CC7' }}>\r\n {links}\r\n </Card.Body>\r\n </Card>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(Links);\r\n","import React, {Component} from 'react';\r\nimport { Card, Table } from 'react-bootstrap'\r\nimport { calendarIcon } from '../../img/font_awesome/font_awesome';\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH',\r\n };\r\n}\r\n\r\nclass NotableDates extends Component {\r\n\r\n render() {\r\n let notableDatesTable = <></>;\r\n if (this.props.notableDates) {\r\n notableDatesTable =\r\n <Table size='sm'>\r\n <tbody>\r\n <tr>\r\n {\r\n this.props.notableDates.headings.map((heading, index) => {\r\n return <th key={index} className='table-td-xs'>{heading}</th>\r\n })\r\n\r\n }\r\n </tr>\r\n {\r\n this.props.notableDates.rows.map((row, index) => {\r\n return <tr key={index}>\r\n {\r\n row.values.map((value, index) => { return <td key={index} className=\"table-td-xs\">{value}</td> })\r\n }\r\n </tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n }\r\n\r\n let cardHeaderClassName = 'card-header-blue';\r\n if (this.props.cardHeaderClassName) {\r\n cardHeaderClassName = this.props.cardHeaderClassName;\r\n }\r\n return (\r\n <Card >\r\n <Card.Header className={cardHeaderClassName}>\r\n {calendarIcon} Notable Dates\r\n </Card.Header>\r\n <Card.Body>\r\n {notableDatesTable}\r\n </Card.Body>\r\n </Card>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(NotableDates);\r\n","import React, { Component } from 'react';\r\nimport { Modal, Button, Form, Row, Container, Col } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport DateField from '../common/form/DateField';\r\nimport SelectField from '../common/form/SelectField';\r\nimport { listIcon } from '../../img/font_awesome/font_awesome';\r\nimport { validateYearRangeLimit, validateDates } from \"../../utils/DateValidation\";\r\nimport moment from 'moment';\r\nimport translations from \"../../config/translation/home_translations.json\"\r\n\r\nconst TODAY = 'TODAY';\r\nconst MONTH = 'MONTH';\r\nconst YTD = 'YTD';\r\nconst CUSTOM = 'CUSTOM';\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n currentUser: state.currentUserReducer,\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH',\r\n };\r\n}\r\n\r\nclass TransactionReport extends Component {\r\n\r\n state = {\r\n fromDate: moment().subtract(1, 'M').format('L'),\r\n toDate: moment().format('L'),\r\n reportType: 'USER',\r\n reportRange: YTD,\r\n errors: {}\r\n }\r\n\r\n handleSelectionMethodChange = (event) => {\r\n event.preventDefault();\r\n this.setState({\r\n reportRange: event.target.id,\r\n errors: {}\r\n })\r\n }\r\n\r\n handleChange = (event) => {\r\n event.preventDefault();\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n errors: {}\r\n })\r\n }\r\n\r\n handleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n if (this.handleValidation()) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"home/transactionReport\", this.state, { responseType: 'blob', withCredentials: true })\r\n .then((response) => {\r\n let blob = new Blob([response.data], { type: 'application/pdf' });\r\n const fileURL = URL.createObjectURL(blob);\r\n window.open(fileURL);\r\n }, (error) => {\r\n\r\n }); \r\n }\r\n\t}\r\n \r\n handleCloseClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.setState({ errors: {} })\r\n this.props.handleClose();\r\n }\r\n\r\n handleDatePickerChangeFromDate = (date) => {\r\n this.setState({\r\n fromDate : moment(date).format('L'),\r\n errors: {}\r\n })\r\n }\r\n \r\n handleDatePickerChangeToDate = (date) => {\r\n this.setState({\r\n toDate : moment(date).format('L'),\r\n errors: {}\r\n })\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n if (!this.state.fromDate) {\r\n errors['fromDate'] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n let formIsValid = validateDates(errors, this.state.fromDate, 'fromDate', this.state.toDate, 'toDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n formIsValid = validateYearRangeLimit(errors, this.state.fromDate, 'fromDate', this.state.toDate, 'toDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n \r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n render() {\r\n let fromDateError = '';\r\n if (this.state.errors && this.state.errors['fromDate']) {\r\n fromDateError = this.state.errors['fromDate']\r\n }\r\n\r\n let toDateError = '';\r\n if (this.state.errors && this.state.errors['toDate']) {\r\n toDateError = this.state.errors['toDate']\r\n }\r\n \r\n return (\r\n <>\r\n <Modal show={this.props.show} onHide={this.handleCloseClick} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Form onSubmit={this.handleSubmit}>\r\n <Modal.Header style={{ background: '#3674AB', color: 'white' }}>\r\n <Modal.Title>{listIcon} {translations[this.props.language].transactions}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <Container fluid=\"true\" style={{ marginLeft: 20}}>\r\n {\r\n this.props.currentUser.role === 'ACCOUNT' &&\r\n <>\r\n <Row>\r\n <SelectField formGroup={{ layout: 'horizontal', id: 'reportType', label: 'Includes', fieldType: 'select', value: 'USER', options: [{ code: \"ACCOUNT\", description: \"All transactions for this account\" }, { code: \"USER\", description: \"My transactions only\" }] }} onChange={this.handleChange} />\r\n </Row>\r\n <Row> </Row>\r\n </>\r\n }\r\n <Row>\r\n {/* checkbox is tricky. This is the only way I could make the checked attribute works. It's essentially forcing the checkbox to re-render. */}\r\n {\r\n this.state.reportRange === TODAY &&\r\n <Form.Check name='reportOption' id={TODAY} type='radio' checked={true} onChange={this.handleSelectionMethodChange} label={translations[this.props.language].today} value={TODAY} />\r\n }\r\n {\r\n this.state.reportRange !== TODAY &&\r\n <Form.Check name='reportOption' id={TODAY} type='radio' checked={false} onChange={this.handleSelectionMethodChange} label={translations[this.props.language].today} value={TODAY} />\r\n }\r\n </Row>\r\n <Row>\r\n {\r\n this.state.reportRange === MONTH &&\r\n <Form.Check name='reportOption' id={MONTH} type='radio' checked={true} onChange={this.handleSelectionMethodChange} label={translations[this.props.language].this_month} value={MONTH} />\r\n }\r\n {\r\n this.state.reportRange !== MONTH &&\r\n <Form.Check name='reportOption' id={MONTH} type='radio' checked={false} onChange={this.handleSelectionMethodChange} label={translations[this.props.language].this_month} value={MONTH} />\r\n }\r\n </Row>\r\n <Row>\r\n {\r\n this.state.reportRange === YTD &&\r\n <Form.Check name='reportOption' id={YTD} type='radio' checked={true} onChange={this.handleSelectionMethodChange} label={translations[this.props.language].ytd} value={YTD} />\r\n }\r\n {\r\n this.state.reportRange !== YTD &&\r\n <Form.Check name='reportOption' id={YTD} type='radio' checked={false} onChange={this.handleSelectionMethodChange} label={translations[this.props.language].ytd} value={YTD} />\r\n }\r\n </Row>\r\n <Row>\r\n {\r\n this.state.reportRange === CUSTOM &&\r\n <Form.Check name='reportOption' id={CUSTOM} type='radio' checked={true} onChange={this.handleSelectionMethodChange} label={translations[this.props.language].custom_range} value={CUSTOM} />\r\n }\r\n {\r\n this.state.reportRange !== CUSTOM &&\r\n <Form.Check name='reportOption' id={CUSTOM} type='radio' checked={false} onChange={this.handleSelectionMethodChange} label={translations[this.props.language].custom_range} value={CUSTOM} />\r\n }\r\n </Row>\r\n <Row >\r\n <Col>\r\n <DateField onChange={this.handleChange} formGroup={{ id: 'fromDate', label: translations[this.props.language].from_mmddyyyy, disabled: this.state.reportRange !== CUSTOM, value: this.state.fromDate, handleDatePickerChange: this.handleDatePickerChangeFromDate }} ></DateField>\r\n <span style={{ color: \"red\", fontWeight: \"bold\" }}>{fromDateError}</span>\r\n </Col>\r\n </Row>\r\n <Row >\r\n <Col>\r\n <DateField onChange={this.handleChange} formGroup={{ id: 'toDate', label: translations[this.props.language].to_mmddyyyy, disabled: this.state.reportRange !== CUSTOM, value: this.state.toDate, handleDatePickerChange: this.handleDatePickerChangeToDate }} ></DateField>\r\n <span style={{ color: \"red\", fontWeight: \"bold\" }}>{toDateError}</span>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"primary\" type=\"submit\" >{translations[this.props.language].generate_report}</Button>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>{translations[this.props.language].close}</Button>\r\n </Modal.Footer>\r\n </Form>\r\n </Modal>\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(TransactionReport);","import React, {Component} from 'react';\r\nimport { Card, Table, Button } from 'react-bootstrap'\r\n\r\nimport { listIcon, expandIcon } from '../../img/font_awesome/font_awesome';\r\nimport TransactionReport from './TransactionReport';\r\nimport translations from \"../../config/translation/home_translations.json\"\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH',\r\n };\r\n}\r\n\r\nclass Transactions extends Component {\r\n\r\n state = {\r\n showModal: false\r\n }\r\n\r\n handleClick = () => {\r\n this.setState({\r\n showModal : true\r\n })\r\n }\r\n\r\n handleClose = () => {\r\n this.setState({\r\n showModal : false\r\n })\r\n }\r\n\r\n render() {\r\n let transactionTotalsTable = <></>;\r\n if (this.props.transactionTotals) {\r\n transactionTotalsTable =\r\n <Table size='sm'>\r\n <tbody>\r\n <tr>\r\n {\r\n this.props.transactionTotals.headings.map((heading) => {\r\n return <th className=\"table-td-xs\">{heading}</th>\r\n })\r\n\r\n }\r\n </tr>\r\n {\r\n this.props.transactionTotals.rows.map((row, index) => {\r\n return <tr key={index}>\r\n {\r\n row.values.map((value, index) => { return <td key={index} className=\"table-td-xs\">{value}</td> })\r\n }\r\n </tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n }\r\n\r\n return (\r\n <>\r\n <Card>\r\n <Card.Header>\r\n {listIcon} {translations[this.props.language].transactions}<span onClick={this.handleClick} style={{ cursor: \"pointer\", float: 'right' }}>{expandIcon}</span>\r\n </Card.Header>\r\n <Card.Body>\r\n {transactionTotalsTable}\r\n <Button variant=\"primary\" className='btn-sm' onClick={this.handleClick} >{translations[this.props.language].details}</Button> \r\n </Card.Body>\r\n </Card>\r\n <TransactionReport show={this.state.showModal} handleClose={this.handleClose} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(Transactions);\r\n","import React, {Component} from 'react';\r\nimport { Card, Modal, Button } from 'react-bootstrap'\r\n\r\nimport { expandIcon } from '../../img/font_awesome/font_awesome';\r\nimport configData from \"../../config/config.json\";\r\n\r\nclass LoginPageSlides extends Component {\r\n\r\n state = {\r\n showLoginSlideModals: [false, false, false, false, false, false]\r\n }\r\n\r\n handleClick = (event) => {\r\n event.preventDefault();\r\n \r\n const clickedId = event.target.parentElement.parentElement.id; // find the closest parent\r\n console.log(clickedId);\r\n let show = [false, false, false, false, false, false];\r\n show[clickedId] = true;\r\n\r\n this.setState({\r\n showLoginSlideModals: show\r\n })\r\n }\r\n\r\n handleCloseClick = (event) => {\r\n event.preventDefault();\r\n this.setState({\r\n showLoginSlideModals: [false, false, false, false, false, false]\r\n })\r\n }\r\n\r\n\r\n render() {\r\n\t\r\n const slide1 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/one.jpg\";\r\n\t\tconst slide2 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/two.jpg\";\r\n\t\tconst slide3 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/three.jpg\";\r\n\t\tconst slide4 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/four.jpg\";\r\n\t\tconst slide5 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/five.jpg\";\r\n\t\tconst slide6 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/six.jpg\";\r\n\r\n let slideArray = [slide1, slide2, slide3, slide4, slide5, slide6];\r\n let loginPageSlides = [];\r\n let loginPageSlideModals = [];\r\n\r\n for (var i = 0; i < this.props.numberOfSlides; i++) {\r\n loginPageSlides.push(\r\n <Card key={i} style={{ cursor: \"pointer\"}} >\r\n <div id={i} style={{ position: 'relative', top: 0, left: 0 }} onClick={this.handleClick} >\r\n <div style={{ position: 'relative', top: 0, left: 0 }}> <Card.Img variant=\"top\" src={slideArray[i]} /></div>\r\n <div style={{ position: 'absolute', bottom: 5, right: 15, color: '#408CC7' }}> {expandIcon} </div>\r\n </div>\r\n </Card>);\r\n loginPageSlideModals.push(\r\n <Modal key={i} show={this.state.showLoginSlideModals[i]} onHide={this.handleCloseClick} size=\"xl\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Body style={{ borderTop: '2px solid black', borderBottom: '2px solid black', background: '#3674AB' }}>\r\n <img border=\"0\" src={slideArray[i]} alt=\"THREE\" class=\"img-fluid\" />\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Close</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n );\r\n }\r\n\r\n if (loginPageSlides.length === 0) {\r\n loginPageSlides.push(<Card><Card.Img variant=\"top\" src={slide1} /></Card>);\r\n }\r\n\r\n return (\r\n <>\r\n { loginPageSlides }\r\n { loginPageSlideModals }\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default LoginPageSlides;\r\n","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { CardColumns } from 'react-bootstrap'\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\n\r\nimport CommonTop from \"../../components/top/CommonTop\";\r\n\r\nimport ContactUs from './ContactUs';\r\nimport Disclaimer from './Disclaimer';\r\nimport LatestNews from './LatestNews';\r\nimport Links from './Links';\r\nimport NotableDates from './NotableDates';\r\nimport Transactions from './Transactions';\r\nimport LoginPageSlides from './LoginPageSlides';\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\nimport Loading from '../common/modal/Loading';\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n currentUser: state.currentUserReducer\r\n };\r\n}\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n handleLockout: (lockout) => dispatch({ type: 'SET_LOCKOUT_IN_PLACE', lockout })\r\n }\r\n}\r\n\r\nclass Home extends Component {\r\n\r\n state = {\r\n contactUsCard: false,\r\n disclaimerCard: false,\r\n latestNewsCard: false,\r\n linksCard: false,\r\n loginSlidesCard: false,\r\n notableDatesCard: false,\r\n transactionsCard: false,\r\n\r\n numberOfSlides: 0,\r\n contactPhone: '',\r\n contactEmail: '',\r\n\r\n notableDates: null,\r\n transactionTotals: null,\r\n\r\n links: [],\r\n newsItems: [],\r\n loadingStatus: \"\"\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n \r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\"\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message\r\n })\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n\r\n this.showLoading();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"home/all\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.props.handleLockout(response.data.lockout);\r\n\r\n const content = response.data.content;\r\n\r\n let links = content.links.paragraphs;\r\n if (!links || links.length === 0) {\r\n links = []\r\n }\r\n\r\n let newsItems = content.latestNews.paragraphs;\r\n if (!newsItems || newsItems.length === 0) {\r\n newsItems = []\r\n }\r\n\r\n this.setState( {\r\n contactUsCard: content.selections.contactUs,\r\n disclaimerCard: content.selections.disclaimer,\r\n latestNewsCard: content.selections.latestNews,\r\n linksCard: content.selections.links,\r\n loginSlidesCard: content.selections.loginSlides,\r\n notableDatesCard: content.selections.notableDates,\r\n transactionsCard: content.selections.transactions,\r\n numberOfSlides: content.numberOfSlides.numberOfSlides,\r\n contactPhone: content.common.contactPhone,\r\n contactEmail: content.common.contactEmail,\r\n notableDates: content.notableDates,\r\n transactionTotals: content.transactionTotals,\r\n links,\r\n newsItems\r\n },\r\n function() { // callback function after the state is set\r\n this.hideLoading();\r\n });\r\n },\r\n (error) => {\r\n // handleError(error, this.props.history);\r\n this.hideLoading();\r\n }\r\n );\r\n }\r\n\r\n\r\n render() {\r\n return (\r\n <>\r\n <CommonTop history={this.props.history} />\r\n <div style={{paddingBottom: 2, marginLeft: 10, marginRight: 6, marginTop: 2 }} >\r\n <CardColumns style={{marginTop: 20, marginLeft:50, marginRight: 50}}>\r\n { \r\n this.state.loginSlidesCard &&\r\n <LoginPageSlides numberOfSlides={this.state.numberOfSlides} />\r\n }\r\n {\r\n this.state.linksCard &&\r\n <Links links={this.state.links} />\r\n }\r\n {\r\n this.state.notableDatesCard &&\r\n <NotableDates notableDates={this.state.notableDates} />\r\n }\r\n {\r\n this.state.transactionsCard && this.props.currentUser.role !== 'GUEST' &&\r\n <Transactions transactionTotals={this.state.transactionTotals} />\r\n }\r\n {\r\n this.state.latestNewsCard &&\r\n <LatestNews newsItems={this.state.newsItems} />\r\n }\r\n {\r\n this.state.contactUsCard &&\r\n <ContactUs contactEmail={this.state.contactEmail} contactPhone={this.state.contactPhone} ></ContactUs>\r\n }\r\n {\r\n this.state.disclaimerCard &&\r\n <Disclaimer links={this.state.links} />\r\n }\r\n </CardColumns>\r\n </div>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(Home);","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return { \r\n sideNavigationOpen: state.sideNavigationReducer\r\n };\r\n}\r\n\r\nclass SideNavigationLabel extends React.Component {\r\n\r\n render () {\r\n \tlet label = <div style={{textAlign:\"left\"}}> <span style={{width:18, display:\"inline-block\"}}>{this.props.image}</span></div>;\r\n \tif (this.props.sideNavigationOpen) {\r\n \t\tlabel = <div style={{textAlign:\"left\"}}> <span style={{width:18, display:\"inline-block\"}}>{this.props.image}</span><span> {this.props.name} </span><span style={{\"backgroundColor\":\"lightGray\"}} className=\"badge badge-secondary\">{this.props.badge}</span> </div>;\r\n \t}\r\n return (label)\r\n }\r\n }\r\n\r\n export default connect(mapStateToProps)(SideNavigationLabel);","import React from 'react';\r\n\r\nimport { chevronLeftIcon, chevronRightIcon } from '../../img/font_awesome/font_awesome'\r\nimport { Button} from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n toggle: () => { dispatch ({type: 'TOGGLE_SIDE_NAVIGATION'})}\r\n }\r\n}\r\n\r\nclass SideNavigationToggle extends React.Component {\r\n\t\r\n state = {\r\n isToggleOn: true\r\n }\r\n \r\n handleClick = () => {\r\n this.setState({isToggleOn: !this.state.isToggleOn}, this.props.toggle());\r\n }\r\n\r\n render() {\r\n let buttonLeftPadding = 14;\r\n let buttonIcon = chevronRightIcon;\r\n if (this.state.isToggleOn) {\r\n buttonLeftPadding = 226;\r\n buttonIcon = chevronLeftIcon;\r\n }\r\n\r\n return (\r\n <Button onClick={this.handleClick} style={{float: \"right\", display:\"block\", paddingLeft: buttonLeftPadding, borderBottomRightRadius: 0, borderBottomLeftRadius: 0, outline : 0}}>\r\n {buttonIcon}\r\n </Button>\r\n )\r\n \r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SideNavigationToggle);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {NavLink} from 'react-router-dom'\r\n\r\nimport SideNavigationLabel from \"./SideNavigationLabel\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer\r\n };\r\n}\r\n\r\nclass SideNavigationNavLink extends Component {\r\n\r\n render(){\r\n let minWidth = 0\r\n if (this.props.sideNavigationOpen) {\r\n minWidth = 250\r\n }\r\n let className = \"side-navlink\";\r\n if (this.props.selected) {\r\n className += \" side-navlink-selected\"\r\n }\r\n return(\r\n <NavLink to={this.props.link} id={this.props.id} title={this.props.name} style={{ minWidth:minWidth }} className={className}><SideNavigationLabel {...{ image: this.props.image, name: this.props.name, badge:this.props.badge}} /></NavLink>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(SideNavigationNavLink);","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return { \r\n sideNavigationOpen: state.sideNavigationReducer\r\n };\r\n}\r\n\r\nclass SideNavigationNumberedLabel extends React.Component {\r\n\trender(){\r\n\t let label = <div style={{textAlign:\"left\"}} title={this.props.title}><span style={{width:18, display:\"inline-block\", textAlign:\"center\"}}>{this.props.number}</span></div>\r\n\t\tif (this.props.sideNavigationOpen) {\r\n \t\t\tlabel = <div style={{textAlign:\"left\"}} title={this.props.title}><span style={{width:18, display:\"inline-block\", textAlign:\"center\"}}>{this.props.number}</span><span> {this.props.name} </span><span style={{\"backgroundColor\":\"lightGray\"}} className=\"badge badge-secondary\">{this.props.badge}</span></div>\r\n \t\t}\r\n \t\treturn (label) \r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(SideNavigationNumberedLabel);","import React from 'react';\r\nimport {Link} from 'react-router-dom'\r\nimport SideNavigationNumberedLabel from \"./SideNavigationNumberedLabel\";\r\n\r\nexport default class SideNavigationNumberedNavLink extends React.Component {\r\n render(){\r\n let currentSearchIndicator = '';\r\n if (this.props.index === 1) {\r\n \t\tcurrentSearchIndicator = 'Current';\r\n }\r\n\r\n let minWidth = 0\r\n if (this.props.sideNavigationOpen) {\r\n minWidth = 250\r\n }\r\n\r\n let className = \"side-numbered-navlink\";\r\n if (this.props.index === 5) {\r\n className += \" side-numbered-navlink-last\"\r\n }\r\n\r\n let historyLink = '/search/searchHistory/' + this.props.type + '/' + this.props.index;\r\n return(\r\n <Link to={historyLink} style={{ minWidth:minWidth}} className={className}><SideNavigationNumberedLabel {...{ number: this.props.index, name: this.props.description, title:this.props.criteriaDescription, badge:currentSearchIndicator}} /></Link>\r\n )\r\n }\r\n}","import React, {Component} from 'react';\r\nimport { InputGroup, Button, Form } from 'react-bootstrap'\r\nimport { searchIcon } from \"../../../img/font_awesome/font_awesome\"\r\n\r\n\r\nclass TextFilter extends Component {\r\n state = {\r\n\t\tfilterText: this.props.textFilterProps.filterText ? this.props.textFilterProps.filterText : ''\r\n\t}\r\n\r\n handleChange = (event) => {\r\n event.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\tfilterText: event.target.value\r\n\t\t})\r\n }\r\n \r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n \t\t// 13 is Enter. \r\n\t\tif (event.type === 'keydown' && event.keyCode !== 13) {\r\n return;\r\n\t\t}\r\n\r\n this.props.textFilterProps.textFilter(this.state.filterText); \r\n }\r\n\r\n render() {\r\n return (\r\n <Form onSubmit={this.handleSubmit}>\r\n <InputGroup>\r\n <Form.Control value={this.state.filterText} onChange={this.handleChange} onKeyDown={this.props.handleSubmit} />\r\n <InputGroup.Append>\r\n <Button style={{ color: \"white\" }} type=\"submit\" >{searchIcon}</Button>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Form>\r\n )\r\n }\r\n}\r\n\r\nexport default TextFilter;","import React, {Component} from 'react';\r\nimport { Form } from 'react-bootstrap'\r\n\r\nclass SelectFilter extends Component {\r\n\r\n handleChange = (event) => {\r\n event.preventDefault(); \r\n this.props.selectFilterProps.selectFilter(event.target.value);\r\n }\r\n \r\n render() {\r\n return (\r\n <Form.Control as='select' onChange={this.handleChange} >\r\n {\r\n this.props.selectFilterProps.options.map((option) => {\r\n if (this.props.selectFilterProps.selected === option.code)\r\n return (<option key={option.code} selected value={option.code}>{option.description}</option>)\r\n else\r\n return (<option key={option.code} value={option.code}>{option.description}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n )\r\n }\r\n}\r\n\r\nexport default SelectFilter;","import React from 'react';\r\nimport TextFilter from './TextFilter';\r\nimport SelectFilter from './SelectFilter';\r\nimport { Form, Button, Container, Row, Col } from 'react-bootstrap'\r\nimport { minusIcon, filterIcon } from \"../../../img/font_awesome/font_awesome\"\r\n\r\nexport default class PageBanner extends React.Component {\r\n render() {\r\n\r\n let textFilterComponent = '';\r\n if (this.props.selectFilterProps) {\r\n textFilterComponent = <span style={{ display:'inline-block', marginLeft: 20 }}><TextFilter textFilterProps={this.props.textFilterProps}></TextFilter></span>\r\n }\r\n\r\n let selectFilterComponent = '';\r\n if (this.props.selectFilterProps) {\r\n selectFilterComponent = <span style={{ display:'inline-block', marginLeft: 20 }}><SelectFilter selectFilterProps={this.props.selectFilterProps}></SelectFilter></span>\r\n }\r\n\r\n let finderFilterComponent = '';\r\n if (this.props.finderFilterProps && this.props.finderFilterProps.id > 0) {\r\n finderFilterComponent =<><span> <Button variant=\"secondary\" onClick={this.props.finderFilterProps.finderFilterReset}>{minusIcon} Account: {this.props.finderFilterProps.name}</Button></span></> \r\n } else if (this.props.finderFilterProps) {\r\n finderFilterComponent = <span style={{ display:'inline-block', marginLeft: 20 }}>\r\n <Container>\r\n <Row>\r\n <Col><Button variant='primary' onClick={this.props.finderFilterProps.finderFilterClick}>Account {filterIcon}</Button></Col>\r\n </Row>\r\n </Container>\r\n </span> \r\n }\r\n\r\n\r\n\r\n let criteriaList = '';\r\n if (this.props.searchCriteria) {\r\n criteriaList = this.props.searchCriteria.map(criteria => {\r\n return <ul style={{ display: 'inline-block', marginBottom: 0, listStyleType: 'none', paddingLeft:10, fontSize: 14 }}><li style={{ textDecoration: \"underline\" }} >{ criteria.description}</li><li style={{ textAlign: \"center\" }}>{criteria.value}</li></ul>\r\n });\r\n }\r\n\r\n let buttonList = '';\r\n if (this.props.buttons) {\r\n buttonList = this.props.buttons.map((button, description) => {\r\n let buttonClassName = button.className;\r\n if (!buttonClassName) {\r\n buttonClassName = \"btn btn-primary\";\r\n }\r\n return (<><button className={buttonClassName} onClick={button.onClickAction} >{button.icon} {button.label}</button> </>)\r\n })\r\n }\r\n\r\n return (\r\n <h5 style={{ color: '#3674AB', paddingTop: 10, paddingBottom: 10, paddingLeft: 10, marginTop: 5, marginLeft:4, marginRight:4, border: '3px solid #3674AB', borderRadius: '5px' }}>\r\n {this.props.pageHeading}\r\n {textFilterComponent}\r\n {selectFilterComponent}\r\n {finderFilterComponent}\r\n <span style={{ marginRight: 20 }}>{criteriaList}</span>\r\n <span style={{ float: 'right', marginRight: 10 }}>{buttonList}</span>\r\n </h5>\r\n )\r\n }\r\n\r\n}","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return { \r\n countyConfig: {...state.countyConfigSearchReducer, ...state.countyConfigReportsReducer, ...state.countyConfigEfileReducer}\r\n }\r\n }\r\n\r\nclass CountyNotes extends Component {\r\n \r\n render() {\r\n let key = this.props.componentName + 'CountyNote';\r\n let countyNotes = this.props.countyConfig[key];\r\n if (countyNotes)\r\n return <div style={{ paddingTop:5, paddingBottom:5, paddingLeft:10}}>{countyNotes}</div>\r\n else \r\n return <div style={{paddingTop:0}}></div>\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(CountyNotes);","import React from 'react';\r\n\r\nimport { Button } from 'react-bootstrap'\r\n\r\nexport default class PrimaryButton extends React.Component {\r\n render() {\r\n if (this.props.buttonLabel !== undefined) {\r\n return <Button variant=\"primary\" type=\"submit\" disabled={this.props.disabled}>{this.props.buttonLabel}</Button>\r\n }\r\n return (\r\n <Button variant=\"primary\" type=\"submit\" disabled={this.props.disabled} >Submit</Button>\r\n )\r\n }\r\n}","import React from 'react';\r\n\r\nimport { Button } from 'react-bootstrap'\r\n\r\nexport default class ClearButton extends React.Component {\r\n render() {\r\n if (this.props.buttonLabel !== undefined) {\r\n return <Button variant=\"secondary\" onClick={this.props.onClear}>{this.props.buttonLabel}</Button> \r\n }\r\n return (\r\n <Button variant=\"secondary\" onClick={this.props.onClear}>Clear</Button>\r\n )\r\n }\r\n}","import React from 'react';\r\n\r\nimport { Button } from 'react-bootstrap'\r\n\r\nexport default class CancelButton extends React.Component {\r\n render() {\r\n return (\r\n <Button variant=\"secondary\" onClick={this.props.onCancel}>Cancel</Button>\r\n )\r\n }\r\n}","import React from 'react';\r\n\r\nimport { Button } from 'react-bootstrap'\r\n\r\nexport default class SecondaryButton extends React.Component {\r\n render() {\r\n if (this.props.buttonLabel !== undefined) { \r\n if (this.props.buttonBlue === true) {\r\n return <Button variant=\"primary\" onClick={this.props.onClick} >{this.props.buttonLabel}</Button>\r\n }\r\n \r\n return <Button variant=\"secondary\" onClick={this.props.onClick} >{this.props.buttonLabel}</Button>\r\n }\r\n return (\r\n <Button variant=\"secondary\" onClick={this.props.onSave} >Submit</Button>\r\n )\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Modal, Container, Row, Col, Button } from 'react-bootstrap';\r\nimport { parse } from 'query-string';\r\nimport axios from \"axios\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\n\r\nimport configData from \"../../../config/config.json\";\r\n\r\nconst PREFIX = 'CreditCardSearchAuthWindow: ';\r\n\r\nclass CreditCardSearchAuthWindow extends Component {\r\n \r\n constructor(props) {\r\n super(props);\r\n console.log(PREFIX + \"constructed with props\", props);\r\n this.authFormRef = React.createRef();\r\n this.setState( {show: props.show} );\r\n }\r\n\r\n componentDidMount() {\r\n const script = document.createElement('script');\r\n script.src = configData.AUTHORIZE_ACCEPTJS_URL;\r\n this.setState( {show: this.props.show} );\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n // If we're now showing the window and we haven't created the AuthorizeNetIFrame, do so now\r\n if (this.state.show && !window.AuthorizeNetIFrame) {\r\n this.submitAuthorizeDotNetForm();\r\n window.AuthorizeNetIFrame = {\r\n onReceiveCommunication: queryStr => {\r\n const message = parse(queryStr);\r\n console.log(PREFIX + 'processing message from Authorize.net.');\r\n if (typeof message === 'object' && message !== null) {\r\n switch (message.action) {\r\n case 'transactResponse':\r\n const json = JSON.parse(message.response);\r\n this.creditCardAuthWindowCallbackPayClicked(json);\r\n break;\r\n\r\n case 'resizeWindow':\r\n break;\r\n\r\n case 'cancel':\r\n this.handleAuthorizeDotNetCancelClicked();\r\n break;\r\n default:\r\n this.handleAuthorizeDotNetCancelClicked();\r\n };\r\n }\r\n },\r\n };\r\n } else if (!this.state.show) {\r\n // If weren't now showing the window and the AuthorizeNetIFrame is still here, we\r\n // delete it so it doesn't intercept any iframecommunicator calls.\r\n if (window.AuthorizeNetIFrame) {\r\n delete window.AuthorizeNetIFrame;\r\n }\r\n }\r\n }\r\n\r\n handleAuthorizeDotNetCancelClicked() {\r\n this.props.handleCloseClicked();\r\n }\r\n\r\n creditCardAuthWindowCallbackPayClicked = (authTrans) => {\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorizationResponse\", authTrans, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n if (result.content().authorizationOkay) {\r\n this.props.handleAuthorizedSubmit();\r\n } else {\r\n alert('Failed to process credit card authorization from Authorize.net. Note, you will not be charged. Please contact the county or TriMin support for assitance');\r\n }\r\n }\r\n }, (error) => {\r\n alert('Failed to process credit card authorization from Authorize.net. Note, you will not be charged. Please contact the county or TriMin support for assitance');\r\n })\r\n }\r\n\r\n componentWillUnmount() {\r\n if (window.AuthorizeNetIFrame) {\r\n delete window.AuthorizeNetIFrame;\r\n }\r\n }\r\n\r\n submitAuthorizeDotNetForm() {\r\n if (this.authFormRef.current) {\r\n this.authFormRef.current.submit();\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Modal show={this.props.show} onHide={this.props.handleCloseClicked} size='lg' aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton>\r\n <Modal.Title>\r\n Credit Card Preauthorization\r\n </Modal.Title>\r\n </Modal.Header>\r\n\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black', background: '#408CC7' }}>\r\n <iframe title='Credit Card Preauthorization for Searches' id=\"load_payment\" name=\"load_payment\" width=\"100%\" height=\"500px\" scrolling=\"yes\" />\r\n <form ref={this.authFormRef} id=\"send_hptoken\" action={configData.AUTHORIZE_PAYMENT_URL} method=\"post\" target=\"load_payment\">\r\n <input type=\"hidden\" name=\"token\" value={this.props.token} />\r\n </form>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Container>\r\n <Row style={{ margin: 5 }} >\r\n <Col md='12' className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"secondary\" onClick={this.props.handleCloseClicked}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default React.memo(CreditCardSearchAuthWindow);\r\n","import React, { Component } from 'react';\r\nimport { Modal, Button, Row, Col, Container } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n preauthAmount: state.countyConfigCreditCardExtraReducer.maxAmount,\r\n surchargeMessage: state.countyConfigCreditCardExtraReducer.surchargeMessage,\r\n searchRates: state.currentUserReducer.creditCardSearchRates\r\n };\r\n}\r\n\r\nclass CreditCardPriceListWindow extends Component {\r\n\r\n\r\n render() {\r\n \r\n let searchRates = [];\r\n if (this.props.searchRates) {\r\n this.props.searchRates.forEach((searchRate, index) => {\r\n searchRates.push(<Row className=\"justify-content-md-left\"><Col md='9'>{searchRate.code}:</Col><Col md='3'>${searchRate.description}</Col></Row>);\r\n })\r\n searchRates.push(<Row className=\"justify-content-md-left\"> </Row>);\r\n }\r\n if (this.props.surchargeMessage) {\r\n searchRates.push(<Row className=\"justify-content-md-left\"><Col md='12'>{this.props.surchargeMessage}</Col></Row>);\r\n searchRates.push(<Row className=\"justify-content-md-left\"> </Row>);\r\n } \r\n\r\n const priceListHeading = this.props.priceListHeading ? this.props.priceListHeading : \"Price List\"\r\n\r\n const continueLabel = this.props.continueLabel ? this.props.continueLabel : \"Continue\"\r\n\r\n return (\r\n <Modal show={this.props.show} onHide={this.props.handleCloseClicked} size='lg' aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton>\r\n <Modal.Title>\r\n {priceListHeading}\r\n </Modal.Title>\r\n </Modal.Header>\r\n\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black', background: '#3674AB', color: 'white', fontSize: 20}}>\r\n <Container >\r\n <Row className=\"justify-content-md-left\">\r\n The following search activities will incur a charge. To continue, it requires a credit card preauthorization of ${this.props.preauthAmount}. Final and actual credit card charges will be computed based on the below activities:\r\n </Row>\r\n <Row className=\"justify-content-md-left\"> </Row>\r\n {searchRates}\r\n <Row className=\"justify-content-md-left\"> </Row>\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer >\r\n <Container >\r\n <Row style={{ margin: 5 }} >\r\n <Col md='12' className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"primary\" style={{ marginRight: 8 }} onClick={this.props.handleContinueClicked}>{continueLabel}</Button>\r\n <Button variant=\"secondary\" onClick={this.props.handleCloseClicked}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(CreditCardPriceListWindow);\r\n","import React, { Component } from 'react';\r\nimport { Modal, Button, Row, Col, Container } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n preauthAmount: state.countyConfigCreditCardExtraReducer.maxAmount,\r\n surchargeMessage: state.countyConfigCreditCardExtraReducer.surchargeMessage,\r\n searchRates: state.currentUserReducer.creditCardSearchRates\r\n };\r\n}\r\n\r\nclass CreditCardSearchReAuthWindow extends Component {\r\n\r\n render() {\r\n\r\n let searchRates = [];\r\n if (this.props.searchRates) {\r\n this.props.searchRates.forEach((searchRate, index) => {\r\n searchRates.push(<Row key={searchRate.code} className=\"justify-content-md-left\"><Col md='8'>{searchRate.code}:</Col><Col md='4'>${searchRate.description}</Col></Row>);\r\n })\r\n searchRates.push(<Row key={'emptyline1'} className=\"justify-content-md-left\"> </Row>);\r\n }\r\n if (this.props.surchargeMessage) {\r\n searchRates.push(<Row key={'surchargeMessage'} className=\"justify-content-md-left\"><Col md='8'>{this.props.surchargeMessage}</Col></Row>);\r\n searchRates.push(<Row key={'emptyline2'} className=\"justify-content-md-left\"> </Row>);\r\n }\r\n \r\n return (\r\n <Modal show={this.props.show} onHide={this.props.handleCloseClicked} size='lg' aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton>\r\n <Modal.Title>\r\n Exceeding Current Credit Card Preauthorization\r\n </Modal.Title>\r\n </Modal.Header>\r\n\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black', background: '#3674AB', color: 'white', fontSize: 20}}>\r\n <Container >\r\n <Row className=\"justify-content-md-left\">\r\n Your charges are exceeding the current preauthorized amount. To continue, it requires another round of credit card preauthorization of ${this.props.preauthAmount}. Final and actual credit card charges are computed based on the below activities:\r\n </Row>\r\n <Row className=\"justify-content-md-left\"> </Row>\r\n {searchRates}\r\n </Container>\r\n </Modal.Body>\r\n <Modal.Footer >\r\n <Container >\r\n <Row style={{ margin: 5 }} >\r\n <Col md='12' className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"primary\" style={{ marginRight: 8 }} onClick={this.props.handleContinueClicked}>Preauthorize credit card for ${this.props.preauthAmount}</Button>\r\n <Button variant=\"secondary\" onClick={this.props.handleCloseClicked}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(CreditCardSearchReAuthWindow);\r\n","import React from 'react';\r\n\r\nimport { Form, Container, Row, Col } from 'react-bootstrap'\r\n\r\nimport PageBanner from \"../page/PageBanner\";\r\nimport CountyNotes from \"../page/CountyNotes\";\r\nimport PrimaryButton from \"./PrimaryButton\";\r\nimport ClearButton from \"./ClearButton\";\r\nimport CancelButton from \"./CancelButton\";\r\nimport SecondaryButton from \"./SecondaryButton\";\r\nimport CreditCardSearchAuthWindow from \"./CreditCardSearchAuthWindow\";\r\nimport CreditCardPriceListWindow from \"./CreditCardPriceListWindow\";\r\nimport CreditCardPriceListReAuthWindow from \"./CreditCardPriceListReAuthWindow\"\r\nimport { connect } from \"react-redux\";\r\nimport FieldRow from './FieldRow';\r\nimport { checkIconGreen, spinnerIconGray } from \"../../../img/font_awesome/font_awesome\"\r\nimport Loading from '../modal/Loading';\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer\r\n };\r\n}\r\n\r\nclass FormTemplate extends React.Component {\r\n\r\n render() {\r\n\r\n // The authorize.net window in CreditCardSearchAuthWindow needs to re-render every time apparently. I tried to use the authorize.net token as the component key, but apparently, \r\n // the token either is too big or has characteers that didn't work out. Therefore, I'm using a random number to force it re-render each time.\r\n const creditCardAuthorizeDotNetWindowKey = Math.ceil(Math.random() * 1000000000) + \"\";\r\n\r\n let formTemplateMarginLeft = 60\r\n let formTemplateMarginRight = 20\r\n if (this.props.formOnly) {\r\n formTemplateMarginLeft = 0\r\n formTemplateMarginRight = 0\r\n } else if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n } \r\n\r\n let autoComplete = this.props.autoComplete === false ? \"off\" : \"on\";\r\n\r\n // Convert from legacy single secondary button into newer unlimited buttons.\r\n let secondaryButtons = this.props.secondaryButtons;\r\n\r\n if (!secondaryButtons) {\r\n if (this.props.onSeconaryClick) {\r\n secondaryButtons = [{ onClick: this.props.onSeconaryClick, label: this.props.secondaryButtonLabel }]\r\n } else {\r\n secondaryButtons = [];\r\n }\r\n }\r\n\r\n return (\r\n <div style={{ marginLeft: formTemplateMarginLeft, marginRight: formTemplateMarginRight, marginTop:4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n <CountyNotes componentName={this.props.componentName} />\r\n <PageBanner pageHeading={this.props.pageHeading} buttons= {this.props.pageButtons}/>\r\n <Container fluid=\"true\" style={{ paddingLeft: 50, paddingBottom: 20, marginTop: 10, marginLeft: 4, marginRight: 4, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n <Row> </Row>\r\n <Row>\r\n <Col>\r\n <Form autocomplete={autoComplete} onSubmit={this.props.onSubmit} style={{paddingRight: 10}}>\r\n {\r\n this.props.formGroupRows.map((formGroupRow, index) => {\r\n return (\r\n <>\r\n {formGroupRow.heading && <h5 style={{textDecoration: 'underline'}}>{formGroupRow.heading}</h5>}\r\n <FieldRow key={this.props.componentName + \"FieldRow\" + index} formGroupRow={formGroupRow} disabled={this.props.loadingIndicator} onChange={this.props.onChange} />\r\n </>\r\n );\r\n })\r\n }\r\n {this.props.afterRowsContent}\r\n\r\n <Row> </Row>\r\n <PrimaryButton buttonLabel={this.props.primaryButtonLabel} disabled={this.props.loadingIndicator} /> \r\n \r\n { \r\n this.props.successIndicator && !this.props.onSeconaryClick && !this.props.onClear &&\r\n <span style={{width:18, verticalAlign: \"bottom\", paddingBottom: 1, display:\"inline-block\"}}>{checkIconGreen}</span>\r\n }\r\n { \r\n this.props.loadingIndicator && !this.props.onSeconaryClick && !this.props.onClear &&\r\n <span style={{width:18, verticalAlign: \"bottom\", marginBottom: 1, display:\"inline-block\"}}>{spinnerIconGray}</span>\r\n }\r\n\r\n {\r\n (secondaryButtons.length > 0) && secondaryButtons.map((button, index) => {\r\n return <>\r\n <SecondaryButton buttonBlue={this.props.secondaryButtonBlue} buttonLabel={button.label} onClick={button.onClick} />\r\n \r\n </>;\r\n })\r\n }\r\n { \r\n this.props.successIndicator && this.props.onSeconaryClick &&\r\n <> <span style={{width:18, verticalAlign: \"bottom\", paddingBottom: 1, display:\"inline-block\"}}>{checkIconGreen} </span></>\r\n }\r\n { \r\n this.props.loadingIndicator && this.props.onSeconaryClick &&\r\n <> <span style={{width:18, verticalAlign: \"bottom\", marginBottom: 1, display:\"inline-block\"}}>{spinnerIconGray} </span></>\r\n && <> </>\r\n }\r\n \r\n {\r\n this.props.onClear &&\r\n <ClearButton onClear={this.props.onClear} buttonLabel={this.props.clearButtonLabel}/>\r\n }\r\n { \r\n this.props.successIndicator && this.props.onClear &&\r\n <> <span style={{width:18, verticalAlign: \"bottom\", paddingBottom: 1, display:\"inline-block\"}}>{checkIconGreen} </span></>\r\n }\r\n { \r\n this.props.loadingIndicator && this.props.onClear &&\r\n <> <span style={{width:18, verticalAlign: \"bottom\", marginBottom: 1, display:\"inline-block\"}}>{spinnerIconGray} </span></>\r\n }\r\n {\r\n this.props.onCancel &&\r\n <CancelButton onCancel={this.props.onCancel} />\r\n }\r\n {\r\n this.props.submitMessage &&\r\n <span style={{width:18}}> {this.props.submitMessage}</span>\r\n }\r\n </Form>\r\n </Col>\r\n { \r\n \r\n this.props.formRightArea &&\r\n <Col sm={4} className='align-self-end' >\r\n {\r\n this.props.formRightArea\r\n }\r\n </Col>\r\n }\r\n </Row>\r\n </Container>\r\n <Loading loadingIndicator={this.props.loadingIndicator} />\r\n <CreditCardPriceListWindow show={this.props.creditCardPriceListWindowShow} continueLabel=\"Continue to Credit Card\" priceListHeading=\"Credit Card Preauthorization\" handleContinueClicked={this.props.handleCreditCardPriceListContinue} handleCloseClicked={this.props.handleCreditCardPriceListClose} />\r\n {this.props.creditCardAuthorizeDotNetWindowShow && <CreditCardSearchAuthWindow show={this.props.creditCardAuthorizeDotNetWindowShow} handleAuthorizedSubmit={this.props.handleAuthorizedSubmit} handleCloseClicked={this.props.handleCreditCardAuthorizeDotNetWindowClose} token={this.props.authorizeDotNetToken} />}\r\n <CreditCardPriceListReAuthWindow show={this.props.creditCardPriceListReAuthWindowShow} handleContinueClicked={this.props.handleCreditCardPriceListReAuth} handleCloseClicked={this.props.handleCreditCardPriceListReAuthWindowClose} />\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(FormTemplate);","export const handleError = (error, history) => {\r\n var response = error.response;\r\n if (response && response.status === 403) {\r\n if (response.data.message && response.data.message != '') {\r\n alert(response.data.message);\r\n }\r\n history.push('/login');\r\n } \r\n};\r\n\r\nexport const handleBlobError = (error, history, callback) => {\r\n var response = error.response;\r\n if (response && response.status === 403) {\r\n history.push('/login');\r\n } else {\r\n var blob = new Blob([response.data], { type: 'application/json' });\r\n var fileReader = new FileReader();\r\n fileReader.onload = function() {\r\n let data = JSON.parse(this.result);\r\n if (response.status === 403 && data.status === 'LOGIN') {\r\n history.push('/login');\r\n } else if (response.status === 500) {\r\n callback(data.message, data.status);\r\n }\r\n };\r\n fileReader.readAsText(blob);\r\n }\r\n};\r\n\r\nexport const handleCallBack = (callback, foundRecords, content) => {\r\n if (!callback) {\r\n return;\r\n }\r\n\r\n let message = '';\r\n if (foundRecords === false) {\r\n message = 'No Records Found.'\r\n }\r\n callback(message, \"OK\", content);\r\n};\r\n\r\n","export const AccountsControlPanelKey = \"AccountsControlPanelKey\";\r\nexport const ALaCarteRatesControlPanelKey = \"ALaCarteRatesControlPanelKey\";\r\nexport const ALaCarteRatesSpecialControlPanelKey = \"ALaCarteRatesSpecialControlPanelKey\";\r\nexport const CreditCardAlternateRatesControlPanelKey = \"CreditCardAlternateRatesControlPanelKey\";\r\nexport const CreditCardExtraControlPanelKey = \"CreditCardExtraControlPanelKey\";\r\nexport const EscrowControlPanelKey = \"EscrowControlPanelKey\";\r\nexport const FlatFeeControlPanelKey = \"FlatFeeControlPanelKey\";\r\nexport const FlatFeeOverrideControlPanelKey = \"FlatFeeOverrideControlPanelKey\";\r\nexport const BillingScheduleControlPanelKey = \"BillingScheduleControlPanelKey\";\r\n\r\nexport const CommonControlPanelKey = \"CommonControlPanelKey\";\r\nexport const HomeSelectionsControlPanelKey = \"HomeSelectionsControlPanelKey\";\r\nexport const HomeLatestNewsControlPanelKey = \"HomeLatestNewsControlPanelKey\";\r\nexport const HomeExternalLinksControlPanelKey = \"HomeExternalLinksControlPanelKey\";\r\nexport const HomeNotableDatesControlPanelKey = \"HomeNotableDatesControlPanelKey\";\r\nexport const LoginPageLinksControlPanelKey = \"LoginPageLinksControlPanelKey\";\r\nexport const LoginPageLatestNewsControlPanelKey = \"LoginPageLatestNewsControlPanelKey\";\r\nexport const LoginPageSlidesControlPanelKey = \"LoginPageSlidesControlPanelKey\";\r\nexport const LoginPageRegistrationControlPanelKey = \"LoginPageRegistrationControlPanelKey\";\r\nexport const ReportsControlPanelKey = \"ReportsControlPanelKey\";\r\nexport const SearchControlPanelKey = \"SearchControlPanelKey\";\r\nexport const Search2ControlPanelKey = \"Search2ControlPanelKey\";\r\nexport const EfileControlPanelKey = \"EfileControlPanelKey\";\r\nexport const LanguagesControlPanelKey = \"LanguagesControlPanelKey\";\r\nexport const LandSharkOneAccountsUsersControlPanelKey = \"LandSharkOneAccountsUsersControlPanelKey\";\r\nexport const LandSharkOneAuditLogControlPanelKey = \"LandSharkOneAuditLogControlPanelKey\";\r\n\r\nexport const UserLockoutControlPanelKey = \"UserLockoutControlPanelKey\";\r\nexport const UserLockout2ControlPanelKey = \"UserLockout2ControlPanelKey\";\r\nexport const UserPurgeNowControlPanelKey = \"UserPurgeNowControlPanelKey\";\r\nexport const UserPurgeScheduleControlPanelKey = \"UserPurgeScheduleControlPanelKey\";\r\nexport const UserAccessControlPanelKey = \"UserAccessControlPanelKey\";\r\n\r\nexport const AuditLogPurgeScheduleControlPanelKey = \"AuditLogPurgeScheduleControlPanelKey\";\r\n\r\nexport const PerformanceMonitoringControlPanelKey = \"PerformanceMonitoringControlPanelKey\";\r\nexport const ReloadConfigurationControlPanelKey = \"ReloadConfigurationControlPanelKey\";\r\n\r\nexport const setSelectedControlPanelType = (selectedControlPanelType) => {\r\n return {\r\n type: 'SET_SELECTED_CONTROL_PANEL_TYPE',\r\n selectedControlPanelType\r\n }\r\n}\r\n \r\nexport const updateAccountListFilters = (filters) => {\r\n return {\r\n type: 'SET_ACCOUNT_LIST_FILTERS',\r\n filters\r\n }\r\n}","import axios from \"axios\";\r\nimport { saveAs } from 'file-saver';\r\nimport moment from 'moment';\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError, handleCallBack } from \"./commonStuff\";\r\nimport { AuditLogPurgeScheduleControlPanelKey } from \"./controlPanelActions\";\r\n\r\nexport const SearchByAddressKey = \"searchByAddress\";\r\nexport const SearchByBookAndPageKey = \"searchByBookAndPage\";\r\nexport const SearchByDateKey = \"searchByDate\";\r\nexport const SearchByDocumentNumberKey = \"searchByDocumentNumber\";\r\nexport const SearchByLegalDescriptionKey = \"searchByLegalDescription\";\r\nexport const SearchByNameKey = \"searchByName\";\r\nexport const SearchByParcelIdKey = \"searchByParcelId\";\r\nexport const SearchByTorrensCertificateKey = \"searchByTorrensCertificate\";\r\nexport const SearchByTorrensTextKey = \"searchByTorrensText\";\r\nexport const SpecialSearchGrantorGranteeBookKey = \"searchByGrantorGranteeBook\";\r\nexport const SpecialSearchTractBookIdKey = \"searchByTractBookId\";\r\nexport const SpecialSearchTractBookLegalKey = \"searchByTractBookLegal\";\r\nexport const SpecialSearchPlatKey = \"searchByPlat\";\r\nexport const SpecialSearchTaxLienKey = \"searchByTaxLien\";\r\nexport const SearchByTractIndexNMIKey = \"searchByTractIndexNMI\";\r\n\r\nexport const SearchByAddressUrl = \"search/\" + SearchByAddressKey;\r\nexport const SearchByBookAndPageUrl = \"search/\" + SearchByBookAndPageKey;\r\nexport const SearchByDateUrl = \"search/\" + SearchByDateKey;\r\nexport const SearchByDocumentNumberUrl = \"search/\" + SearchByDocumentNumberKey;\r\nexport const SearchByLegalDescriptionUrl = \"search/\" + SearchByLegalDescriptionKey;\r\nexport const SearchByNameUrl = \"search/\" + SearchByNameKey;\r\nexport const SearchByParcelIdUrl = \"search/\" + SearchByParcelIdKey;\r\nexport const SearchByTorrensCertificateUrl = \"search/\" + SearchByTorrensCertificateKey;\r\nexport const SearchByTorrensTextUrl = \"search/\" + SearchByTorrensTextKey;\r\nexport const SpecialSearchGrantorGranteeBookUrl = \"search/\" + SpecialSearchGrantorGranteeBookKey;\r\nexport const SpecialSearchTractBookIdUrl = \"search/\" + SpecialSearchTractBookIdKey;\r\nexport const SpecialSearchTractBookLegalUrl = \"search/\" + SpecialSearchTractBookLegalKey;\r\nexport const SpecialSearchPlatUrl = \"search/\" + SpecialSearchPlatKey;\r\nexport const SpecialSearchTaxLienUrl = \"search/\" + SpecialSearchTaxLienKey;\r\nexport const SearchByTractIndexNMIUrl = \"search/\" + SearchByTractIndexNMIKey;\r\n\r\nconst LoadByBatchUrls = [SearchByAddressUrl, SearchByBookAndPageUrl, SearchByDateUrl, SearchByDocumentNumberUrl, SearchByLegalDescriptionUrl, SearchByNameUrl, SearchByParcelIdUrl, SpecialSearchPlatUrl, SpecialSearchTaxLienUrl];\r\n\r\nexport const SEARCH_RESULTS_PAGE_SIZE = 100; // 100 records max per page\r\nexport const SEARCH_RESULTS_BATCH_SIZE = 25; // 25 records max per batch.\r\n \r\nexport const displayTractBookDetails = (id, sourcedDocKey, callback) => async dispatch => {\r\n const searchDetails = {\r\n docId: id,\r\n sourcedDocKey: sourcedDocKey\r\n }\r\n\r\n dispatch({ type: 'VISITED', id });\r\n\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/tractBookDetails\", searchDetails, { withCredentials: true })\r\n .then((response) => {\r\n handleTractBookDetails(dispatch, id, callback, response.data.content);\r\n }, (error) => {\r\n console.log(error);\r\n });\r\n};\r\n\r\nconst handleTractBookDetails = (dispatch, id, callback, content) => {\r\n if (content.paymentNeededAgain === true || content.paymentNeeded === true) {\r\n dispatch({ type: 'DISPLAY_TRACT_BOOK_SEARCH_DETAILS', id : 0 }, handleCallBack(callback, true, content)); \r\n } else {\r\n dispatch({ type: 'DISPLAY_TRACT_BOOK_SEARCH_DETAILS', id }, handleCallBack(callback, true, content)); \r\n }\r\n dispatch({ type: 'UPDATE_CURRENT_USER_USAGE_BALANCE', usageBalance: content.usageBalance });\r\n};\r\n\r\nexport const displayTorrensCertificateDetails = (id, sourcedDocKey, callback) => async dispatch => {\r\n const searchDetails = {\r\n docId: id,\r\n sourcedDocKey: sourcedDocKey\r\n }\r\n\r\n dispatch({ type: 'VISITED', id });\r\n\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/torrensCertificateDetails\", searchDetails, { withCredentials: true })\r\n .then((response) => {\r\n handleTorrensCertificateDetails(dispatch, id, callback, response.data.content);\r\n }, (error) => {\r\n console.log(error);\r\n });\r\n};\r\n\r\nconst handleTorrensCertificateDetails = (dispatch, id, callback, content) => {\r\n if (content.paymentNeededAgain === true || content.paymentNeeded === true) {\r\n dispatch({ type: 'DISPLAY_TORRENS_CERTIFICATE_SEARCH_DETAILS', id : 0 }, handleCallBack(callback, true, content)); \r\n } else {\r\n dispatch({ type: 'DISPLAY_TORRENS_CERTIFICATE_SEARCH_DETAILS', id }, handleCallBack(callback, true, content)); \r\n }\r\n dispatch({ type: 'UPDATE_CURRENT_USER_USAGE_BALANCE', usageBalance: content.usageBalance });\r\n};\r\n\r\nexport const displayGrantorGranteeBookDetails = (id, sourcedDocKey, callback) => async dispatch => {\r\n const searchDetails = {\r\n docId: id,\r\n sourcedDocKey: sourcedDocKey\r\n }\r\n\r\n dispatch({ type: 'VISITED', id });\r\n\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/grantorGranteeBookDetails\", searchDetails, { withCredentials: true })\r\n .then((response) => {\r\n handleGrantorGranteeBookDetails(dispatch, id, callback, response.data.content);\r\n }, (error) => {\r\n console.log(error);\r\n });\r\n};\r\n\r\nconst handleGrantorGranteeBookDetails = (dispatch, id, callback, content) => {\r\n if (content.paymentNeededAgain === true || content.paymentNeeded === true) {\r\n dispatch({ type: 'DISPLAY_GRANTOR_GRANTEE_BOOK_SEARCH_DETAILS', id : 0 }, handleCallBack(callback, true, content)); \r\n } else {\r\n dispatch({ type: 'DISPLAY_GRANTOR_GRANTEE_BOOK_SEARCH_DETAILS', id }, handleCallBack(callback, true, content)); \r\n }\r\n dispatch({ type: 'UPDATE_CURRENT_USER_USAGE_BALANCE', usageBalance: content.usageBalance });\r\n};\r\n\r\nexport const displayTaxLienDetails = (id, sourcedDocKey, callback) => async dispatch => {\r\n const searchDetails = {\r\n docId: id,\r\n sourcedDocKey: sourcedDocKey\r\n }\r\n\r\n dispatch({ type: 'VISITED', id });\r\n\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/taxLienDetails\", searchDetails, { withCredentials: true })\r\n .then((response) => {\r\n handleTaxLienSearchDetails(dispatch, id, callback, response.data.content);\r\n }, (error) => {\r\n console.log(error);\r\n });\r\n};\r\n\r\nconst handleTaxLienSearchDetails = (dispatch, id, callback, content) => {\r\n if (content.paymentNeededAgain === true || content.paymentNeeded === true) {\r\n dispatch({ type: 'DISPLAY_TAX_LIEN_SEARCH_DETAILS', id : 0 }, handleCallBack(callback, true, content)); \r\n } else {\r\n dispatch({ type: 'DISPLAY_TAX_LIEN_SEARCH_DETAILS', id }, handleCallBack(callback, true, content)); \r\n }\r\n dispatch({ type: 'UPDATE_CURRENT_USER_USAGE_BALANCE', usageBalance: content.usageBalance });\r\n};\r\n\r\nexport const displayDetails = (id, sourcedDocKey, callback) => async dispatch => {\r\n const searchDetails = {\r\n docId: id,\r\n sourcedDocKey: sourcedDocKey\r\n }\r\n\r\n dispatch({ type: 'VISITED', id });\r\n\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/documentDetails\", searchDetails, { withCredentials: true })\r\n .then((response) => {\r\n handleSearchDetails(dispatch, id, callback, response.data.content);\r\n }, (error) => {\r\n console.log(error);\r\n });\r\n};\r\n\r\nexport const selectSearchSequenceRow = (id) => async dispatch => {\r\n dispatch({ type: 'SELECT_TABLE_ROW', id : id })\r\n};\r\n\r\nconst handleSearchDetails = (dispatch, id, callback, content) => {\r\n if (content.paymentNeededAgain === true || content.paymentNeeded === true) {\r\n dispatch({ type: 'DISPLAY_DETAILS', id : 0 }, handleCallBack(callback, true, content)); \r\n } else {\r\n dispatch({ type: 'DISPLAY_DETAILS', id }, handleCallBack(callback, true, content)); \r\n }\r\n dispatch({ type: 'UPDATE_CURRENT_USER_USAGE_BALANCE', usageBalance: content.usageBalance });\r\n};\r\n\r\nexport const setSelectedSearchType = (selectedSearchType) => {\r\n return {\r\n type: 'SET_SELECTED_SEARCH_TYPE',\r\n selectedSearchType\r\n }\r\n}\r\n\r\nconst handleLockout = (dispatch, lockout) => {\r\n dispatch({ type: 'SET_LOCKOUT_IN_PLACE', lockout }); \r\n};\r\n\r\nconst handleSearchResults = (dispatch, content, resetPage = true, pageNumber = 1, sortKey = 'docNumber', sortDirection = 'ASC') => {\r\n dispatch({ type: 'UPDATE_SEARCH_RESULTS', searchResults: content.searchResults }); // This is the search results table\r\n if (resetPage) {\r\n dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_PAGE', pageNumber }); // New search results, reset the search results table to page 1.\r\n dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_SORT', sort: { sortKey, sortDirection } }); // New search results, reset the search results table to page 1.\r\n updateSearchHistory(dispatch, content);\r\n }\r\n dispatch({ type: 'UPDATE_CURRENT_USER_USAGE_BALANCE', usageBalance: content.usageBalance });\r\n};\r\n\r\nconst updateSearchHistory = (dispatch, content) => {\r\n dispatch({ type: 'UPDATE_SEARCH_HISTORY', historyResults: content.historyResults }); // This is the search history in the lower left.\r\n dispatch({ type: 'UPDATE_SEARCH_CRITERIA', newHistory: content.historyResults.searchHistoryList[0] }); // This is the search criteria that populates the Search forms.\r\n dispatch({ type: 'UPDATE_CURRENT_USER_USAGE_BALANCE', usageBalance: content.usageBalance });\r\n};\r\n\r\nconst handleDocumentSearchResponse = (response, history, callback, pushHistory, dispatch, pageNumber, sortKey, sortDirection) => {\r\n handleSearchResponse(response, history, callback, pushHistory, dispatch, '/search/SearchResults', pageNumber, sortKey, sortDirection);\r\n}\r\n\r\nconst handleTorrensSearchResponse = (response, history, callback, pushHistory, dispatch, pageNumber, sortKey, sortDirection) => {\r\n handleSearchResponse(response, history, callback, pushHistory, dispatch, '/search/TorrensSearchResults', pageNumber, sortKey, sortDirection);\r\n}\r\n\r\nconst handleSearchResponse = (response, history, callback, pushHistory, dispatch, pushDestination, pageNumber, sortKey, sortDirection) => {\r\n handleLockout(dispatch, response.data.lockout);\r\n\r\n let content = response.data.content;\r\n let foundRecords = false;\r\n if (content.paymentNeeded !== true && content.paymentNeededAgain !== true) {\r\n if (content.searchResults.totalRecordCount > 0) {\r\n if (pushHistory) {\r\n history.push(pushDestination);\r\n } \r\n handleSearchResults(dispatch, content, pushHistory === true, pageNumber, sortKey, sortDirection); \r\n foundRecords = true;\r\n } else {\r\n updateSearchHistory(dispatch, content);\r\n }\r\n }\r\n handleCallBack(callback, foundRecords, content);\r\n}\r\n\r\nconst handleTableBatchResponse = (response, dispatch) => {\r\n let content = response.data.content;\r\n if (content.searchResults.totalRecordCount > 0) {\r\n \r\n dispatch({ type: 'UPDATE_TABLE_BATCH_RESULTS', searchResults: content.searchResults }); // This is the search results table \r\n }\r\n}\r\n\r\nexport const printResults = (searchCriteria, callback, url) => async dispatch => {\r\n \r\n await axios.post(configData.LANDSHARK_SERVER_URL + url + 'Print', searchCriteria, { responseType: 'blob', withCredentials: true })\r\n .then((response) => {\r\n let blob = new Blob([response.data], { type: 'application/pdf' });\r\n saveAs(blob, 'SearchResultsReport.pdf');\r\n handleCallBack(callback, true);\r\n }, (error) => {\r\n \r\n });\r\n\r\n \r\n};\r\n\r\nexport const loadDocuments = (searchCriteria, history, callback, url, pushHistory = true) => async dispatch => {\r\n let totalRecordCount = 0;\r\n dispatch({ type: 'SET_TABLE_LOADING', tableLoading: false });\r\n searchCriteria.timestamp = moment().valueOf();\r\n await axios.post(configData.LANDSHARK_SERVER_URL + url, searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n handleDocumentSearchResponse(response, history, callback, pushHistory, dispatch, searchCriteria.pageNumber, searchCriteria.sortKey, searchCriteria.sortDirection);\r\n totalRecordCount = response.data.content.searchResults.totalRecordCount;\r\n }, (error) => {\r\n handleError(error, history);\r\n });\r\n\r\n if (totalRecordCount > SEARCH_RESULTS_BATCH_SIZE) {\r\n dispatch(loadTableBatches(searchCriteria, url));\r\n }\r\n};\r\n\r\nexport const loadTableBatches = (searchCriteria, url) => async (dispatch, getState) => {\r\n const numberOfBatches = SEARCH_RESULTS_PAGE_SIZE / SEARCH_RESULTS_BATCH_SIZE;\r\n\r\n if (LoadByBatchUrls.indexOf(url) >= 0) {\r\n for (let index = 2; index <= numberOfBatches; index++) { // Batch 1 has already been fetched, so start with batch 2.\r\n let recordsFetched = 0;\r\n dispatch({ type: 'SET_TABLE_LOADING', tableLoading: true });\r\n searchCriteria.batch = index;\r\n searchCriteria.updateHistory = false;\r\n await axios.post(configData.LANDSHARK_SERVER_URL + url, searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n handleTableBatchResponse(response, dispatch);\r\n recordsFetched = response.data.content.searchResults.totalRecordCount;\r\n }, (error) => {\r\n });\r\n dispatch({ type: 'SET_TABLE_LOADING', tableLoading: false });\r\n\r\n\r\n const currentSearchTimestamp = getState().searchResultsReducer.timestamp;\r\n\r\n // if fetches less than batch size, it means there's no more to fetch.\r\n if (recordsFetched < SEARCH_RESULTS_BATCH_SIZE || currentSearchTimestamp !== searchCriteria.timestamp) {\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// GRANTOR GRANTEE BOOK\r\nexport const searchByGrantorGranteeBook = (searchCriteria, history, callback, pushHistory = true) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/searchByGrantorGranteeBook\", searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n handleSearchResponse(response, history, callback, pushHistory, dispatch, '/search/GrantorGranteeBookSearchResults', searchCriteria.pageNumber, searchCriteria.sortKey, searchCriteria.sortDirection);\r\n }, (error) => {\r\n handleError(error, history);\r\n });\r\n};\r\n\r\n// GRANTOR GRANTEE BOOK Print\r\nexport const searchByGrantorGranteeBookPrint = (searchCriteria, callback) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/searchByGrantorGranteeBookPrint\", searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n \r\n }, (error) => {\r\n \r\n });\r\n};\r\n\r\n// TAX LIEN\r\nexport const searchByTaxLien = (searchCriteria, history, callback, pushHistory = true) => async dispatch => {\r\n\r\n let totalRecordCount = 0;\r\n dispatch({ type: 'SET_TABLE_LOADING', tableLoading: false });\r\n searchCriteria.timestamp = moment().valueOf();\r\n await axios.post(configData.LANDSHARK_SERVER_URL + SpecialSearchTaxLienUrl, searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n handleSearchResponse(response, history, callback, pushHistory, dispatch, '/search/TaxLienSearchResults', searchCriteria.pageNumber, searchCriteria.sortKey, searchCriteria.sortDirection);\r\n totalRecordCount = response.data.content.searchResults.totalRecordCount;\r\n }, (error) => {\r\n handleError(error, history);\r\n });\r\n if (totalRecordCount > SEARCH_RESULTS_BATCH_SIZE) {\r\n dispatch(loadTableBatches(searchCriteria, SpecialSearchTaxLienUrl));\r\n }\r\n};\r\n\r\n// TAX LIEN Print\r\nexport const searchByTaxLienPrint = (searchCriteria, callback) => async dispatch => {\r\n\r\n searchCriteria.pageNumber = -1;\r\n\r\n await axios.post(configData.LANDSHARK_SERVER_URL + SpecialSearchTaxLienUrl, searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n \r\n \r\n }, (error) => {\r\n \r\n });\r\n};\r\n\r\n// TORRENS CERTIFICATE\r\nexport const searchByTorrensCertificate = (searchCriteria, history, callback, pushHistory = true) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/searchByTorrensCertificate\", searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n handleTorrensSearchResponse(response, history, callback, pushHistory, dispatch, searchCriteria.pageNumber, searchCriteria.sortKey, searchCriteria.sortDirection);\r\n }, (error) => {\r\n handleError(error, history);\r\n });\r\n};\r\n\r\n// TORRENS CERTIFICATE Print\r\nexport const searchByTorrensCertificatePrint = (searchCriteria, callback) => async dispatch => {\r\n searchCriteria.pageNumber = -1;\r\n\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/searchByTorrensCertificatePrint\", searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n\r\n }, (error) => {\r\n \r\n });\r\n};\r\n\r\n// TORRENS TEXT\r\nexport const searchByTorrensText = (searchCriteria, history, callback, pushHistory = true) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/searchByTorrensText\", searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n handleTorrensSearchResponse(response, history, callback, pushHistory, dispatch, searchCriteria.pageNumber, searchCriteria.sortKey, searchCriteria.sortDirection);\r\n }, (error) => {\r\n handleError(error, history);\r\n });\r\n};\r\n\r\n// TORRENS TEXT Print\r\nexport const searchByTorrensTextPrint = (searchCriteria, callback) => async dispatch => {\r\n searchCriteria.pageNumber = -1;\r\n\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/searchByTorrensTextPrint\", searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n \r\n }, (error) => {\r\n \r\n });\r\n};\r\n\r\n// TRACT BOOK Legal\r\nexport const searchByTractBookLegal = (searchCriteria, history, callback, pushHistory = true) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/searchByTractBookLegal\", searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n handleSearchResponse(response, history, callback, pushHistory, dispatch, '/search/TractBookSearchResults', searchCriteria.pageNumber, searchCriteria.sortKey, searchCriteria.sortDirection);\r\n }, (error) => {\r\n handleError(error, history);\r\n });\r\n};\r\n\r\n// TRACT BOOK Id\r\nexport const searchByTractBookId = (searchCriteria, history, callback, pushHistory = true) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"search/searchByTractBookId\", searchCriteria, { withCredentials: true })\r\n .then((response) => {\r\n handleSearchResponse(response, history, callback, pushHistory, dispatch, '/search/TractBookSearchResults', searchCriteria.pageNumber, searchCriteria.sortKey, searchCriteria.sortDirection);\r\n }, (error) => {\r\n handleError(error, history);\r\n });\r\n};\r\n\r\n// SORT\r\nexport const searchResultsSort = (sort, currentSearch, history, callback) => async dispatch => {\r\n\r\n let displayCriteria = currentSearch.displayCriteria;\r\n\r\n let searchCriteria = {};\r\n displayCriteria.forEach((criteria) => {\r\n searchCriteria[criteria.key] = criteria.value; \r\n })\r\n\r\n searchCriteria.sortKey = sort.searchResultsSort;\r\n searchCriteria.sortDirection = sort.searchResultsSortDirection;\r\n searchCriteria.pageNumber = sort.pageNumber;\r\n\r\n dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_SORT', sort: {sortKey: searchCriteria.sortKey, sortDirection: searchCriteria.sortDirection }});\r\n dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_PAGE', pageNumber: sort.pageNumber }); \r\n\r\n switch (currentSearch.type) {\r\n case SearchByAddressKey:\r\n dispatch(loadDocuments(searchCriteria, history, callback, SearchByAddressUrl, false));\r\n break;\r\n\r\n case SearchByBookAndPageKey:\r\n dispatch(loadDocuments(searchCriteria, history, callback, SearchByBookAndPageUrl, false));\r\n break;\r\n\r\n case SearchByDateKey:\r\n dispatch(loadDocuments(searchCriteria, history, callback, SearchByDateUrl, false));\r\n break;\r\n\r\n case SearchByDocumentNumberKey:\r\n dispatch(loadDocuments(searchCriteria, history, callback, SearchByDocumentNumberUrl, false));\r\n break;\r\n\r\n case SpecialSearchGrantorGranteeBookKey:\r\n dispatch(searchByGrantorGranteeBook(searchCriteria, history, callback, false));\r\n break;\r\n\r\n case SpecialSearchTractBookIdKey:\r\n dispatch(searchByTractBookId(searchCriteria, history, callback, false));\r\n break;\r\n\r\n case SpecialSearchTractBookLegalKey:\r\n dispatch(searchByTractBookLegal(searchCriteria, history, callback, false));\r\n break;\r\n\r\n case SearchByLegalDescriptionKey:\r\n dispatch(loadDocuments(searchCriteria, history, callback, SearchByLegalDescriptionUrl, false));\r\n break;\r\n\r\n case SearchByNameKey:\r\n dispatch(loadDocuments(searchCriteria, history, callback, SearchByNameUrl, false));\r\n break;\r\n\r\n case SearchByParcelIdKey:\r\n dispatch(loadDocuments(searchCriteria, history, callback, SearchByParcelIdUrl, false));\r\n break;\r\n\r\n case SpecialSearchPlatKey:\r\n dispatch(loadDocuments(searchCriteria, history, callback, SpecialSearchPlatUrl, false));\r\n break;\r\n\r\n case SpecialSearchTaxLienKey:\r\n dispatch(searchByTaxLien(searchCriteria, history, callback, false));\r\n break;\r\n\r\n case SearchByTorrensCertificateKey:\r\n dispatch(searchByTorrensCertificate(searchCriteria, history, callback, false));\r\n break;\r\n \r\n case SearchByTorrensTextKey:\r\n dispatch(searchByTorrensText(searchCriteria, history, callback, false));\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n}\r\n\r\nexport const searchResultsPrint = (sort, currentSearch, history, callback) => async dispatch => {\r\n\r\n let displayCriteria = currentSearch.displayCriteria;\r\n\r\n let searchCriteria = {};\r\n displayCriteria.forEach((criteria) => {\r\n searchCriteria[criteria.key] = criteria.value; \r\n })\r\n\r\n searchCriteria.sortKey = sort.searchResultsSort;\r\n searchCriteria.sortDirection = sort.searchResultsSortDirection;\r\n searchCriteria.pageNumber = sort.pageNumber;\r\n\r\n switch (currentSearch.type) {\r\n case SearchByAddressKey:\r\n dispatch(printResults(searchCriteria, callback, SearchByAddressUrl));\r\n break;\r\n\r\n case SearchByBookAndPageKey:\r\n dispatch(printResults(searchCriteria, callback, SearchByBookAndPageUrl));\r\n break;\r\n\r\n case SearchByDateKey:\r\n dispatch(printResults(searchCriteria, callback, SearchByDateUrl));\r\n break;\r\n\r\n case SearchByDocumentNumberKey:\r\n dispatch(printResults(searchCriteria, callback, SearchByDocumentNumberUrl));\r\n break;\r\n\r\n case SpecialSearchGrantorGranteeBookKey:\r\n dispatch(searchByGrantorGranteeBookPrint(searchCriteria, callback));\r\n break;\r\n\r\n case SearchByLegalDescriptionKey:\r\n dispatch(printResults(searchCriteria, callback, SearchByLegalDescriptionUrl));\r\n break;\r\n\r\n case SearchByNameKey:\r\n dispatch(printResults(searchCriteria, callback, SearchByNameUrl));\r\n break;\r\n\r\n case SearchByParcelIdKey:\r\n dispatch(printResults(searchCriteria, callback, SearchByParcelIdUrl));\r\n break;\r\n\r\n case SpecialSearchPlatKey:\r\n dispatch(printResults(searchCriteria, callback, SpecialSearchPlatUrl));\r\n break;\r\n\r\n case SpecialSearchTaxLienKey:\r\n dispatch(printResults(searchCriteria, callback, SpecialSearchTaxLienUrl));\r\n break;\r\n\r\n case SearchByTorrensCertificateKey:\r\n dispatch(searchByTorrensCertificatePrint(searchCriteria, callback));\r\n break;\r\n \r\n case SearchByTorrensTextKey:\r\n dispatch(printResults(searchCriteria, callback, SearchByTorrensTextUrl));\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n}\r\n\r\n// arg2: \r\n// - a string property name on the search result\r\n// - a function taking a searchResult and returning the expected ID field value\r\n// - not specified which will use the 'docId' property on the search result\r\nexport const getSearchResultById = (me, id, arg2) => {\r\n let searchResult;\r\n\r\n if (!me.props.searchResults || (id === 0)) {\r\n searchResult = null;\r\n } else if (typeof arg2 === 'function') {\r\n searchResult = me.props.searchResults.searchResultList.find((searchResult) => {\r\n return id == arg2(searchResult);\r\n });\r\n } else {\r\n if (typeof arg2 === 'undefined') arg2 = 'docId';\r\n\r\n searchResult = me.props.searchResults.searchResultList.find((searchResult) => {\r\n return id == searchResult[arg2];\r\n });\r\n }\r\n\r\n if ((typeof searchResult === 'undefined') || (searchResult == null)) {\r\n // Not found default value.\r\n searchResult = { sourcedDocKey: {} };\r\n }\r\n\r\n return searchResult;\r\n}","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { loadDocuments, setSelectedSearchType, SearchByAddressKey, SearchByAddressUrl } from \"../../../redux/actions/searchActions\";\r\nimport { validateDates } from \"../../../utils/DateValidation\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nimport moment from 'moment';\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\n\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst componentName = SearchByAddressKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByAddress: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByAddressUrl)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n return {\r\n notableDates: state.notableDatesReducer,\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n instrumentGroups: state.instrumentGroupsReducer.codeDescriptionResultList,\r\n fromRecordedDate: previousSearchKeyValue.fromRecordedDate ? previousSearchKeyValue.fromRecordedDate : moment('01/01/1900').format('L'),\r\n toRecordedDate: previousSearchKeyValue.toRecordedDate ? previousSearchKeyValue.toRecordedDate : moment().format('L'),\r\n instrumentGroup: previousSearchKeyValue.instrumentGroup ? previousSearchKeyValue.instrumentGroup : 'ALL',\r\n streetNumber: previousSearchKeyValue.streetNumber ? previousSearchKeyValue.streetNumber : null,\r\n streetName: previousSearchKeyValue.streetName ? previousSearchKeyValue.streetName : null,\r\n city: previousSearchKeyValue.city ? previousSearchKeyValue.city : null\r\n };\r\n}\r\n\r\nclass SearchByAddress extends Component {\r\n\r\n state = {\r\n fromRecordedDate: this.props.fromRecordedDate,\r\n toRecordedDate: this.props.toRecordedDate,\r\n instrumentGroup: this.props.instrumentGroup,\r\n streetNumber: this.props.streetNumber,\r\n streetName: this.props.streetName,\r\n city: this.props.city,\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: \"\",\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByAddress(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n\r\n if (!this.state.streetNumber) {\r\n errors[\"streetNumber\"] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.streetName) {\r\n errors[\"streetName\"] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (this.state.streetName.length < 3) {\r\n errors[\"streetName\"] = \"Three characters minimum.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (this.state.city && this.state.city.length < 3) {\r\n errors[\"city\"] = \"Three characters minimum, or leave blank.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n let formIsValid = validateDates(errors, this.state.fromRecordedDate, 'fromRecordedDate', this.state.toRecordedDate, 'toRecordedDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n this.setState({\r\n streetNumber: '',\r\n streetName: '',\r\n city: '',\r\n instrumentGroup: 'ALL',\r\n fromRecordedDate: moment('01/01/1900').format('L'),\r\n toRecordedDate: moment().format('L'),\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n handleDatePickerChangeFromRecordedDate = (date) => {\r\n this.setState({\r\n fromRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToRecordedDate = (date) => {\r\n this.setState({\r\n toRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Search by Address\",\r\n onChange: this.handleChange,\r\n onClear: this.handleClear,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n formRightArea: <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'streetNumber', label: 'House Number', primaryCriteria: true, fieldType: 'text', required: true, value: this.state.streetNumber, error: this.state.errors['streetNumber'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'streetName', label: 'Street Name (3 characters min.)', primaryCriteria: true, fieldType: 'text', required: true, value: this.state.streetName, error: this.state.errors['streetName'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'city', label: 'City/Town', fieldType: 'text', value: this.state.city, error: this.state.errors['city'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'instrumentGroup', label: 'Instrument Group', fieldType: 'select', options: this.props.instrumentGroups, value: this.state.instrumentGroup }]\r\n },\r\n {\r\n formGroups: [{ id: 'fromRecordedDate', label: 'From Date', fieldType: 'date', value: this.state.fromRecordedDate, handleDatePickerChange: this.handleDatePickerChangeFromRecordedDate, error: this.state.errors['fromRecordedDate'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'toRecordedDate', label: 'To Date', fieldType: 'date', value: this.state.toRecordedDate, handleDatePickerChange: this.handleDatePickerChangeToRecordedDate, error: this.state.errors['toRecordedDate'] }]\r\n }\r\n\r\n ],\r\n\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n\r\n return (\r\n <FormTemplate {...formProps} />\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchByAddress);\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { loadDocuments, setSelectedSearchType, SearchByBookAndPageKey, SearchByBookAndPageUrl } from \"../../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport translations from \"../../../config/translation/search_by_book_and_page_translations.json\";\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst componentName = SearchByBookAndPageKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByBookAndPage: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByBookAndPageUrl)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n return {\r\n notableDates: state.notableDatesReducer,\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n isBookType: state.landlinkConfigReducer.bookType,\r\n bookLabel: state.countyConfigCommonReducer.bookLabel,\r\n bookTypes: state.bookTypesReducer.codeDescriptionResultList,\r\n book: previousSearchKeyValue.book ? previousSearchKeyValue.book : null,\r\n page: previousSearchKeyValue.page ? previousSearchKeyValue.page : null,\r\n bookType: previousSearchKeyValue.bookType ? previousSearchKeyValue.bookType : 'ALL',\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH'\r\n };\r\n}\r\n\r\nclass SearchByBookAndPage extends Component {\r\n\r\n state = {\r\n book: this.props.book,\r\n page: this.props.page,\r\n bookType: this.props.bookType,\r\n loadingStatus: '',\r\n submitMessage: '',\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByBookAndPage(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n\r\n if (!this.state.book) {\r\n errors[\"book\"] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n\r\n this.setState({\r\n submitMessage: '',\r\n book: '',\r\n page: '',\r\n bookType: this.props.isBookType === 'true' ? 'all' : null\r\n })\r\n }\r\n\r\n render() {\r\n\r\n let formGroupRows = [\r\n {\r\n formGroups: [{ id: 'book', label: this.props.language !== 'ENGLISH' ? translations[this.props.language].book : this.props.bookLabel, primaryCriteria: true, fieldType: 'text', value: this.state.book, required: true, error: this.state.errors['book'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'page', label: translations[this.props.language].page, fieldType: 'text', value: this.state.page, required: false }]\r\n }\r\n ]\r\n\r\n if (this.props.isBookType === true) {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'bookType', label: translations[this.props.language].book_type, fieldType: 'select', value: this.state.bookType, options: this.props.bookTypes }]\r\n });\r\n }\r\n\r\n\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: this.props.language !== 'ENGLISH' ? translations[this.props.language].search_by_book_and_page : \"Search by \" + this.props.bookLabel + \" & Page\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n primaryButtonLabel: translations[this.props.language].submit,\r\n clearButtonLabel: translations[this.props.language].clear,\r\n formGroupRows: formGroupRows,\r\n formRightArea: <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />,\r\n\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchByBookAndPage);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { loadDocuments, setSelectedSearchType, SearchByDateKey, SearchByDateUrl } from \"../../../redux/actions/searchActions\";\r\nimport { validateDates, validateMonthRangeLimit } from \"../../../utils/DateValidation\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport translations from \"../../../config/translation/search_by_date_translations.json\";\r\n\r\nimport moment from 'moment';\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst componentName = SearchByDateKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByDate: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByDateUrl)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n let toRecordedDate = previousSearchKeyValue.toRecordedDate;\r\n if (!toRecordedDate && state.countyConfigNotableDatesReducer.useVerificationDate === true) {\r\n toRecordedDate = state.landlinkConfigReducer.abstractVerifiedDate;\r\n }\r\n \r\n if (!toRecordedDate) {\r\n toRecordedDate = moment().format('L');\r\n }\r\n\r\n return {\r\n notableDates: state.notableDatesReducer,\r\n useVerificationDate: state.countyConfigNotableDatesReducer.useVerificationDate,\r\n abstractVerifiedDate: state.landlinkConfigReducer.abstractVerifiedDate,\r\n isPropertyCode: state.landlinkConfigReducer.propertyCode,\r\n allOnlySearch: state.countyConfigSearch2Reducer.allOnlySearch,\r\n documentTypes: state.documentTypesReducer.codeDescriptionResultList,\r\n documentType: previousSearchKeyValue.documentType ? previousSearchKeyValue.documentType : 'ALL',\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n instrumentGroups: state.instrumentGroupsReducer.codeDescriptionResultList,\r\n fromRecordedDate: previousSearchKeyValue.fromRecordedDate ? previousSearchKeyValue.fromRecordedDate : '',\r\n toRecordedDate,\r\n instrumentGroup: previousSearchKeyValue.instrumentGroup ? previousSearchKeyValue.instrumentGroup : 'ALL',\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH'\r\n };\r\n}\r\n\r\nclass SearchByDate extends Component {\r\n\r\n state = {\r\n documentType: this.props.documentType,\r\n fromRecordedDate: this.props.fromRecordedDate,\r\n toRecordedDate: this.props.toRecordedDate,\r\n instrumentGroup: this.props.instrumentGroup,\r\n loadingStatus: \"\",\r\n submitMessage: '',\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByDate(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n if (!this.state.fromRecordedDate) {\r\n errors['fromRecordedDate'] = translations[this.props.language].required;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n let formIsValid = validateDates(errors, this.state.fromRecordedDate, 'fromRecordedDate', this.state.toRecordedDate, 'toRecordedDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n formIsValid = validateMonthRangeLimit(errors, this.state.fromRecordedDate, 'fromRecordedDate', this.state.toRecordedDate, 'toRecordedDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n\r\n let toRecordedDate = moment().format('L');\r\n if (this.props.useVerificationDate === true) {\r\n toRecordedDate = this.props.abstractVerifiedDate;\r\n }\r\n\r\n this.setState({\r\n documentType: 'ALL',\r\n fromRecordedDate: '',\r\n toRecordedDate,\r\n instrumentGroup: 'ALL',\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n handleDatePickerChangeFromRecordedDate = (date) => {\r\n this.setState({\r\n fromRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToRecordedDate = (date) => {\r\n this.setState({\r\n toRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n render() {\r\n let formGroupRows = [\r\n {\r\n formGroups: [{ id: 'fromRecordedDate', label: translations[this.props.language].date, fieldType: 'date', primaryCriteria: true, value: this.state.fromRecordedDate, handleDatePickerChange: this.handleDatePickerChangeFromRecordedDate, error: this.state.errors['fromRecordedDate'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'toRecordedDate', label: translations[this.props.language].to, fieldType: 'date', primaryCriteria: true, value: this.state.toRecordedDate, handleDatePickerChange: this.handleDatePickerChangeToRecordedDate, error: this.state.errors['toRecordedDate'] }]\r\n }\r\n ]\r\n\r\n if (this.props.isPropertyCode === true && this.props.allOnlySearch !== true && this.props.allOnlySearch !== 'true') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'documentType', label: translations[this.props.language].document_type, fieldType: 'select', value: this.state.documentType, options: this.props.documentTypes }]\r\n });\r\n }\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'instrumentGroup', label: translations[this.props.language].instrument_group, fieldType: 'select', options: this.props.instrumentGroups, value: this.state.instrumentGroup }]\r\n });\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: translations[this.props.language].search_by_date,\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n primaryButtonLabel: translations[this.props.language].submit,\r\n clearButtonLabel: translations[this.props.language].clear,\r\n formGroupRows: formGroupRows,\r\n formRightArea: <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />,\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchByDate);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { loadDocuments, setSelectedSearchType, SearchByDocumentNumberKey, SearchByDocumentNumberUrl } from \"../../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport translations from \"../../../config/translation/search_by_document_number_translations.json\";\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst componentName = SearchByDocumentNumberKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByDocumentNumber: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByDocumentNumberUrl)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n return {\r\n notableDates: state.notableDatesReducer,\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n documentTypes: state.documentTypesReducer.codeDescriptionResultList,\r\n isPropertyCode: state.landlinkConfigReducer.propertyCode,\r\n allOnlySearch: state.countyConfigSearch2Reducer.allOnlySearch,\r\n documentType: previousSearchKeyValue.documentType ? previousSearchKeyValue.documentType : 'ALL',\r\n fromDocumentNumber: previousSearchKeyValue.fromDocumentNumber ? previousSearchKeyValue.fromDocumentNumber : null,\r\n toDocumentNumber: previousSearchKeyValue.toDocumentNumber ? previousSearchKeyValue.toDocumentNumber : null,\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH'\r\n };\r\n}\r\n\r\nclass SearchByDocumentNumber extends Component {\r\n\r\n state = {\r\n documentType: this.props.documentType,\r\n fromDocumentNumber: this.props.fromDocumentNumber,\r\n toDocumentNumber: this.props.toDocumentNumber,\r\n loadingStatus: \"\",\r\n submitMessage: '',\r\n \r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchDetail();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n const { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByDocumentNumber(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n\r\n if (!this.state.fromDocumentNumber) {\r\n errors[\"fromDocumentNumber\"] = translations[this.props.language].required;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (this.state.toDocumentNumber) {\r\n\r\n if (/\\D/.test(this.state.fromDocumentNumber)) {\r\n errors[\"fromDocumentNumber\"] = translations[this.props.language].numeric_only_range;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (/\\D/.test(this.state.toDocumentNumber)) {\r\n errors[\"toDocumentNumber\"] = translations[this.props.language].numeric_only_range;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (parseInt(this.state.toDocumentNumber) < parseInt(this.state.fromDocumentNumber)) {\r\n errors[\"fromDocumentNumber\"] = translations[this.props.language].invalid_numeric_range;\r\n errors[\"toDocumentNumber\"] = translations[this.props.language].invalid_numeric_range;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n this.setState({\r\n submitMessage: '',\r\n fromDocumentNumber: '',\r\n toDocumentNumber: '',\r\n documentType: 'ALL'\r\n })\r\n }\r\n\r\n render() {\r\n\r\n let formGroupRows = []\r\n\r\n if (this.props.isPropertyCode === true && this.props.allOnlySearch !== true && this.props.allOnlySearch !== 'true') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'documentType', label: translations[this.props.language].document_type, fieldType: 'select', value: this.state.documentType, options: this.props.documentTypes }]\r\n });\r\n }\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'fromDocumentNumber', label: translations[this.props.language].document_number, primaryCriteria: true, value: this.state.fromDocumentNumber, required: true, fieldType: 'text', error: this.state.errors['fromDocumentNumber'] }]\r\n });\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'toDocumentNumber', label: translations[this.props.language].to_document_number, value: this.state.toDocumentNumber, fieldType: 'text', error: this.state.errors['toDocumentNumber'] }]\r\n });\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: translations[this.props.language].search_by_document_number,\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n primaryButtonLabel: translations[this.props.language].submit,\r\n clearButtonLabel: translations[this.props.language].clear,\r\n formGroupRows: formGroupRows,\r\n formRightArea: <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />,\r\n \r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchByDocumentNumber);","\r\nexport const getPaginatorHelper = (pageNumber, recordList, numberOfVisibleRecords) => {\r\n \r\n let zeroBasedPageNumber = pageNumber - 1;\r\n\tlet zeroBasedStartingRecordIndex = (zeroBasedPageNumber * numberOfVisibleRecords);\r\n let zeroBasedEndingRecordIndex = zeroBasedStartingRecordIndex + numberOfVisibleRecords;\r\n \r\n\tlet currentPageRecordList = recordList.slice(zeroBasedStartingRecordIndex, zeroBasedEndingRecordIndex);\r\n\tlet currentPageStartingRecordNumber = recordList.length > 0 ? zeroBasedStartingRecordIndex + 1 : 0;\r\n let currentPageEndingRecordNumber = zeroBasedEndingRecordIndex <= recordList.length ? zeroBasedEndingRecordIndex : recordList.length;\r\n \r\n return {currentPageRecordList, currentPageStartingRecordNumber, currentPageEndingRecordNumber};\r\n};","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nimport configData from \"../../../config/config.json\"\r\nimport axios from \"axios\";\r\n\r\nimport { Modal, Container, Col, Row, Button, Form, InputGroup } from 'react-bootstrap'\r\nimport Paginator from '../page/Paginator'\r\nimport { getPaginatorHelper } from '../page/PaginatorHelper'\r\nimport Loading from '../modal/Loading';\r\n\r\nimport { searchIcon } from \"../../../img/font_awesome/font_awesome\"\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nexport const UserSelectionListComponentName = \"UserSelectionListComponentName\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n paginationPage: state.userSelectionListPaginationReducer \r\n };\r\n}\r\n\r\nclass UserSelectionList extends React.Component {\r\n state = {\r\n filteredList: [],\r\n filterText: '',\r\n loadingStatus: ''\r\n }\r\n\r\n handleTextFilter = (filterText) => {\r\n\t\tthis.setState({ filterText: filterText }, function() { this.handleFilter() } )\r\n\t}\r\n\r\n handleFilter = () => {\r\n if (this.showLoading() !== true) {\r\n return;\r\n }\r\n\r\n let filters = { filterText: this.state.filterText };\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"helperdata/userscodedescription\", filters, { withCredentials: true })\r\n .then((response) => {\r\n this.setState({ filteredList: response.data.content.codeDescriptionResultList, loadingStatus: '' })\r\n }, (error) => {\r\n this.setState({ filteredList:[], loadingStatus: '' });\r\n });\r\n }\r\n\r\n handleCloseClick = () => {\r\n this.props.onHide();\r\n }\r\n\r\n handleRowClick = (event) => {\r\n this.props.onHide(event.target.closest(\"tr\").id, event.target.closest(\"tr\").getAttribute(\"id\"));\r\n }\r\n\r\n handleChange = (event) => {\r\n event.preventDefault();\r\n\r\n this.setState({\r\n filterText: event.target.value\r\n })\r\n }\r\n \r\n showLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n // 13 is Enter. \r\n if (event.type === 'keyPress' && event.keyCode !== 13) {\r\n const entry = String.fromCharCode(event.keyCode);\r\n this.setState({\r\n filterText: this.state.filterText + entry\r\n })\r\n\r\n return;\r\n }\r\n this.handleTextFilter(this.state.filterText);\r\n }\r\n\r\n componentDidMount() {\r\n\t\tthis.handleFilter();\r\n\t}\r\n\r\n render() {\r\n let filteredList = this.state.filteredList;\r\n if (!filteredList) {\r\n return <></>\r\n }\r\n\r\n const numberOfVisibleRecords = 10;\r\n let numberOfPages = Math.ceil(filteredList.length / numberOfVisibleRecords);\r\n let paginationHelper = getPaginatorHelper(this.props.paginationPage, filteredList, numberOfVisibleRecords);\r\n \r\n return (\r\n <>\r\n <Modal show={this.props.showModal} aria-labelledby=\"contained-modal-title-vcenter\">\r\n <Modal.Header style={{ borderBottom: '2px solid #3674AB' }} >\r\n <Modal.Title id=\"contained-modal-title-vcenter\" style={{color: '#3674AB'}}>\r\n Click row to select user:\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"show-grid\">\r\n <Col style={{ paddingLeft: 0, paddingRight: 0 }}>\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, marginRight: 2, marginTop: 2 }}>\r\n <Row>\r\n <Col>\r\n <Form onSubmit={this.handleSubmit}>\r\n <InputGroup>\r\n <Form.Control onChange={this.handleChange} type='text' value={this.state.filterText} placeholder=\"Enter a word or name to filter\" />\r\n <InputGroup.Append>\r\n <Button style={{ color: \"white\" }} type=\"submit\" >{searchIcon}</Button>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Form>\r\n </Col>\r\n </Row>\r\n </Container>\r\n\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, marginRight: 2, marginTop: 2, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n\r\n <table className=\"table table-striped table-hover\">\r\n <thead >\r\n <tr>\r\n <th scope=\"col\">Username</th>\r\n \r\n </tr>\r\n </thead>\r\n <tbody>\r\n {\r\n paginationHelper.currentPageRecordList.map((record) => {\r\n return (\r\n <tr style={{ cursor: \"pointer\" }} id={record.code} name={record.description} onClick={this.handleRowClick} >\r\n <td>{record.code}</td>\r\n \r\n </tr>\r\n )\r\n })\r\n }\r\n </tbody>\r\n </table>\r\n </Container>\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, marginRight: 2, marginTop: 2 }}>\r\n\r\n <Row>\r\n <Col><Paginator style={{ justifyContent: 'center' }} componentName={UserSelectionListComponentName} numberOfVisibleRecords={numberOfVisibleRecords} numberOfPages={numberOfPages} ></Paginator></Col>\r\n </Row>\r\n <Row>\r\n <Col>Displaying Results: {paginationHelper.currentPageStartingRecordNumber}-{paginationHelper.currentPageEndingRecordNumber} of {filteredList.length}</Col>\r\n </Row>\r\n\r\n </Container>\r\n </Col>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button onClick={this.handleCloseClick}>Close</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(UserSelectionList);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nimport configData from \"../../../config/config.json\"\r\nimport axios from \"axios\";\r\n\r\nimport { Modal, Container, Col, Row, Button, Form, InputGroup } from 'react-bootstrap'\r\nimport Paginator from '../page/Paginator'\r\nimport { getPaginatorHelper } from '../page/PaginatorHelper'\r\nimport Loading from '../modal/Loading';\r\n\r\nimport { searchIcon } from \"../../../img/font_awesome/font_awesome\"\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nexport const AccountSelectionListComponentName = \"AccountSelectionListComponentName\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n paginationPage: state.accountSelectionListPaginationReducer \r\n };\r\n}\r\n\r\nclass AccountSelectionList extends React.Component {\r\n state = {\r\n filteredList: [],\r\n filterText: '',\r\n loadingStatus: ''\r\n }\r\n\r\n handleTextFilter = (filterText) => {\r\n\t\tthis.setState({ filterText: filterText }, function() { this.handleFilter() } )\r\n\t}\r\n\r\n handleFilter = () => {\r\n if (this.showLoading() !== true) {\r\n return;\r\n }\r\n\r\n let filters = { filterText: this.state.filterText };\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"helperdata/accountscodedescription\", filters, { withCredentials: true })\r\n .then((response) => {\r\n this.setState({ filteredList: response.data.content.codeDescriptionResultList, loadingStatus: '' })\r\n }, (error) => {\r\n this.setState({ filteredList:[], loadingStatus: '' });\r\n });\r\n }\r\n\r\n handleCloseClick = () => {\r\n this.props.onHide();\r\n }\r\n\r\n handleRowClick = (event) => {\r\n this.props.onHide(event.target.closest(\"tr\").id, event.target.closest(\"tr\").getAttribute(\"name\"));\r\n }\r\n\r\n handleChange = (event) => {\r\n event.preventDefault();\r\n\r\n this.setState({\r\n filterText: event.target.value\r\n })\r\n }\r\n \r\n showLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n // 13 is Enter. \r\n if (event.type === 'keyPress' && event.keyCode !== 13) {\r\n const entry = String.fromCharCode(event.keyCode);\r\n this.setState({\r\n filterText: this.state.filterText + entry\r\n })\r\n\r\n return;\r\n }\r\n this.handleTextFilter(this.state.filterText);\r\n }\r\n\r\n componentDidMount() {\r\n\t\tthis.handleFilter();\r\n\t}\r\n\r\n render() {\r\n let filteredList = this.state.filteredList;\r\n if (!filteredList) {\r\n return <></>\r\n }\r\n\r\n const numberOfVisibleRecords = 10;\r\n let numberOfPages = Math.ceil(filteredList.length / numberOfVisibleRecords);\r\n let paginationHelper = getPaginatorHelper(this.props.paginationPage, filteredList, numberOfVisibleRecords);\r\n \r\n return (\r\n <>\r\n <Modal show={this.props.showModal} aria-labelledby=\"contained-modal-title-vcenter\">\r\n <Modal.Header style={{ borderBottom: '2px solid #3674AB' }} >\r\n <Modal.Title id=\"contained-modal-title-vcenter\" style={{color: '#3674AB'}}>\r\n Click row to select account:\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"show-grid\">\r\n <Col style={{ paddingLeft: 0, paddingRight: 0 }}>\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, marginRight: 2, marginTop: 2 }}>\r\n <Row>\r\n <Col>\r\n <Form onSubmit={this.handleSubmit}>\r\n <InputGroup>\r\n <Form.Control onChange={this.handleChange} type='text' value={this.state.filterText} placeholder=\"Enter a word or name to filter\" />\r\n <InputGroup.Append>\r\n <Button style={{ color: \"white\" }} type=\"submit\" >{searchIcon}</Button>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Form>\r\n </Col>\r\n </Row>\r\n </Container>\r\n\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, marginRight: 2, marginTop: 2, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n\r\n <table className=\"table table-striped table-hover\">\r\n <thead >\r\n <tr>\r\n <th scope=\"col\">Name</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {\r\n paginationHelper.currentPageRecordList.map((record) => {\r\n return (\r\n <tr style={{ cursor: \"pointer\" }} id={record.code} name={record.description} onClick={this.handleRowClick} >\r\n <td>{record.description}</td>\r\n </tr>\r\n )\r\n })\r\n }\r\n </tbody>\r\n </table>\r\n </Container>\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, marginRight: 2, marginTop: 2 }}>\r\n\r\n <Row>\r\n <Col><Paginator style={{ justifyContent: 'center' }} componentName={AccountSelectionListComponentName} numberOfVisibleRecords={numberOfVisibleRecords} numberOfPages={numberOfPages} ></Paginator></Col>\r\n </Row>\r\n <Row>\r\n <Col>Displaying Results: {paginationHelper.currentPageStartingRecordNumber}-{paginationHelper.currentPageEndingRecordNumber} of {filteredList.length}</Col>\r\n </Row>\r\n\r\n </Container>\r\n </Col>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button onClick={this.handleCloseClick}>Close</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(AccountSelectionList);\r\n","export const UserListComponetName = \"UserList\";\r\n\r\nexport const updateUserListFilters = (filters) => {\r\n return {\r\n type: 'SET_USER_LIST_FILTERS',\r\n filters\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport Pagination from 'react-bootstrap/Pagination'\r\nimport { connect } from \"react-redux\";\r\nimport { setSelectedPaginationPage, pageinateSearch } from \"../../../redux/actions/paginatorActions\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport { spinnerIconGray } from \"../../../img/font_awesome/font_awesome\"\r\nimport Loading from '../modal/Loading';\r\n\r\nconst mapStateToProps = state => {\r\n\treturn {\r\n\t\tsearchHistory: state.searchHistoryReducer.searchHistoryList[0],\r\n searchResultsSort: state.searchResultsSortReducer,\r\n tableLoading: state.searchResultsTableLoadingReducer,\r\n searchPaginationVisitedLinks: state.searchResultsPageVisitedReducer\r\n\t};\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tsetSelectedPaginationPage: (componentName, activePageNumber) => dispatch(setSelectedPaginationPage(componentName, activePageNumber)),\r\n pageinateSearch: (activePageNumber, sort, url, criteria, callback) => dispatch(pageinateSearch(activePageNumber, sort, url, criteria, callback))\r\n\t}\r\n}\r\n\r\nclass SearchPaginator extends Component {\r\n \r\n state = {\r\n startingPageNumber: 1, // current starting pagination number\r\n activePageNumber: 1, // currently selected page number\r\n loadingStatus: \"\"\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n \r\n hideLoading = (status) => {\r\n if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n }\r\n\r\n handlePageClick = (event) => {\r\n event.preventDefault();\r\n\r\n let newActivePageNumber = Number(event.target.id);\r\n this.setState({\r\n activePageNumber: newActivePageNumber,\r\n loadingStatus: \"\"\r\n })\r\n\r\n if (this.showLoading() === true) {\r\n this.props.pageinateSearch(newActivePageNumber, this.props.searchResultsSort, this.props.searchHistory.link, this.props.searchHistory.criteriaJson, this.hideLoading) ;\r\n }\r\n }\r\n\r\n handleFirstPageClick = (event) => {\r\n event.preventDefault();\r\n \r\n this.setState({\r\n startingPageNumber: 1,\r\n activePageNumber: 1,\r\n loadingStatus: \"\"\r\n })\r\n \r\n if (this.showLoading() === true) {\r\n this.props.pageinateSearch(1, this.props.searchResultsSort, this.props.searchHistory.link, this.props.searchHistory.criteriaJson, this.hideLoading) ;\r\n }\r\n }\r\n\r\n handleForwardOnePageClick = (event) => {\r\n event.preventDefault();\r\n let newActivePageNumber = this.state.activePageNumber + 1; // move forward 1 page\r\n if (newActivePageNumber > this.props.numberOfPages) { // make sure it stays within the upper bound\r\n newActivePageNumber = this.props.numberOfPages;\r\n }\r\n\r\n let newStartingPageNumber = this.state.startingPageNumber;\r\n let endingPageNumber = this.state.startingPageNumber + this.props.numberOfVisibleRecords - 1;\r\n if (newActivePageNumber > endingPageNumber) { // if the active page is not in view, scroll forward\r\n newStartingPageNumber = newActivePageNumber - this.props.numberOfVisibleRecords + 1;\r\n }\r\n \r\n this.setState({\r\n startingPageNumber: newStartingPageNumber,\r\n activePageNumber: newActivePageNumber,\r\n loadingStatus: \"\"\r\n })\r\n \r\n if (this.showLoading() === true) {\r\n this.props.pageinateSearch(newActivePageNumber, this.props.searchResultsSort, this.props.searchHistory.link, this.props.searchHistory.criteriaJson, this.hideLoading) ;\r\n }\r\n }\r\n \r\n\r\n handleBackwardOnePageClick = (event) => {\r\n event.preventDefault();\r\n let newActivePageNumber = this.state.activePageNumber - 1; // move backward 1 page\r\n if (newActivePageNumber < 1) { // make sure it stays within the lower bound\r\n newActivePageNumber = 1;\r\n }\r\n\r\n let newStartingPageNumber = this.state.startingPageNumber;\r\n if (newActivePageNumber < newStartingPageNumber) { // if the active page is not in view, scroll backward\r\n newStartingPageNumber = newActivePageNumber;\r\n }\r\n\r\n if (newStartingPageNumber < 1) { // make sure it stays within the lower bound\r\n newStartingPageNumber = 1;\r\n }\r\n \r\n this.setState({\r\n startingPageNumber: newStartingPageNumber,\r\n activePageNumber: newActivePageNumber,\r\n loadingStatus: \"\"\r\n })\r\n \r\n if (this.showLoading() === true) {\r\n this.props.pageinateSearch(newActivePageNumber, this.props.searchResultsSort, this.props.searchHistory.link, this.props.searchHistory.criteriaJson, this.hideLoading) ;\r\n }\r\n}\r\n\r\n handleForwardTenPagesClick = (event) => {\r\n event.preventDefault();\r\n let newActivePageNumber = this.state.activePageNumber + 10; // move forward 10 pages\r\n if (newActivePageNumber > this.props.numberOfPages) { // make sure it stays within the upper bound\r\n newActivePageNumber = this.props.numberOfPages;\r\n }\r\n\r\n let newStartingPageNumber = this.state.startingPageNumber;\r\n let endingPageNumber = newStartingPageNumber + this.props.numberOfVisibleRecords - 1;\r\n while (newActivePageNumber > endingPageNumber) { // while the active page is not visible, scroll forward until visible\r\n newStartingPageNumber += this.props.numberOfVisibleRecords;\r\n endingPageNumber = newStartingPageNumber + this.props.numberOfVisibleRecords - 1;\r\n }\r\n\r\n if (newStartingPageNumber > this.props.numberOfPages - this.props.numberOfVisibleRecords + 1) { // make sure it stays within the upper bound\r\n newStartingPageNumber = this.props.numberOfPages - this.props.numberOfVisibleRecords + 1;\r\n }\r\n \r\n this.setState({\r\n startingPageNumber: newStartingPageNumber,\r\n activePageNumber: newActivePageNumber,\r\n loadingStatus: \"\"\r\n })\r\n \r\n if (this.showLoading() === true) {\r\n this.props.pageinateSearch(newActivePageNumber, this.props.searchResultsSort, this.props.searchHistory.link, this.props.searchHistory.criteriaJson, this.hideLoading) ;\r\n }\r\n }\r\n\r\n handleBackwardTenPagesClick = (event) => {\r\n event.preventDefault();\r\n let newActivePageNumber = this.state.activePageNumber - 10; // move backward 10 pages\r\n if (newActivePageNumber < 1) { // make sure it stays within the lower bound\r\n newActivePageNumber = 1;\r\n }\r\n\r\n let newStartingPageNumber = this.state.startingPageNumber;\r\n while (newActivePageNumber < newStartingPageNumber) { // while the active page is not visible, scroll backward until visible\r\n newStartingPageNumber -= this.props.numberOfVisibleRecords;\r\n }\r\n\r\n if (newStartingPageNumber < 1) { // make sure it stays within the lower bound\r\n newStartingPageNumber = 1;\r\n }\r\n \r\n this.setState({\r\n startingPageNumber: newStartingPageNumber,\r\n activePageNumber: newActivePageNumber,\r\n loadingStatus: \"\"\r\n })\r\n \r\n if (this.showLoading() === true) {\r\n this.props.pageinateSearch(newActivePageNumber, this.props.searchResultsSort, this.props.searchHistory.link, this.props.searchHistory.criteriaJson, this.hideLoading) ;\r\n }\r\n }\r\n handleLastPageClick = (event) => {\r\n event.preventDefault();\r\n let newStartingPageNumber = this.props.numberOfPages - this.props.numberOfVisibleRecords + 1;\r\n this.setState({\r\n startingPageNumber: newStartingPageNumber,\r\n activePageNumber: this.props.numberOfPages,\r\n loadingStatus: \"\"\r\n })\r\n\r\n if (this.showLoading() === true) {\r\n this.props.pageinateSearch(this.props.numberOfPages, this.props.searchResultsSort, this.props.searchHistory.link, this.props.searchHistory.criteriaJson, this.hideLoading) ;\r\n }\r\n }\r\n\r\n\tcomponentDidMount() {\r\n this.setState({\r\n startingPageNumber: 1,\r\n activePageNumber: 1,\r\n loadingStatus: \"\"\r\n });\r\n\r\n this.props.setSelectedPaginationPage(this.props.componentName, 1);\r\n }\r\n\r\n render() {\r\n\r\n let endingNumber = this.state.startingPageNumber + this.props.numberOfVisibleRecords;\r\n if (this.props.numberOfPages < this.props.numberOfVisibleRecords) {\r\n endingNumber = this.state.startingPageNumber + this.props.numberOfPages;\r\n } \r\n\r\n let paginationItems = [];\r\n for (let number = this.state.startingPageNumber; number < endingNumber; number++) {\r\n\r\n let paginationItem = <Pagination.Item key={number} id={number} style={{ borderTop: '3px solid darkGray', borderBottom: '3px solid darkGray' }} onClick={this.handlePageClick} active={number === this.state.activePageNumber}>{number}</Pagination.Item>\r\n\r\n if (number !== this.state.activePageNumber && this.props.searchPaginationVisitedLinks.includes(number)) {\r\n paginationItem = <Pagination.Item key={number} id={number} style={{ borderTop: '3px solid darkGray', borderBottom: '3px solid darkGray' }} className='paginationItemVisitedLink' onClick={this.handlePageClick} active={number === this.state.activePageNumber}>{number}</Pagination.Item>\r\n }\r\n\r\n paginationItems.push(\r\n paginationItem\r\n );\r\n }\r\n \r\n let firstPagePageLink = <></>\r\n let lastPagePageLink = <></>\r\n\r\n // round corners\r\n let backwardOnePagePageLink = <Pagination.Item key=\"backward1\" id=\"backward1\" style={{ border: '3px solid darkGray', borderTopLeftRadius: '5px', borderBottomLeftRadius: '5px' }} onClick={this.handleBackwardOnePageClick}>Prev</Pagination.Item>\r\n let forwardOnePagePageLink = <Pagination.Item key=\"forward1\" id=\"forward1\" style={{ border: '3px solid darkGray', borderTopRightRadius: '5px', borderBottomRightRadius: '5px' }} onClick={this.handleForwardOnePageClick}>Next</Pagination.Item>\r\n \r\n let backwardTenPagesPageLink = <></>\r\n let forwardTenPagesPageLink = <></>\r\n\r\n if (this.props.numberOfPages > this.props.numberOfVisibleRecords) {\r\n // round corners\r\n firstPagePageLink = <Pagination.Item key=\"first\" id=\"first\" style={{ borderTop: '3px solid darkGray', borderBottom: '3px solid darkGray', borderLeft: '3px solid darkGray', borderTopLeftRadius: '5px', borderBottomLeftRadius: '5px' }} onClick={this.handleFirstPageClick}>First</Pagination.Item>\r\n lastPagePageLink = <Pagination.Item key=\"last\" id=\"last\" style={{ borderTop: '3px solid darkGray', borderBottom: '3px solid darkGray', borderRight: '3px solid darkGray', borderTopRightRadius: '5px', borderBottomRightRadius: '5px' }} onClick={this.handleLastPageClick}>Last</Pagination.Item>\r\n \r\n // change to sharp corners, as they are no longer the rightmost and leftmost page links.\r\n backwardOnePagePageLink = <Pagination.Item key=\"backward1\" id=\"backward1\" style={{ border: '3px solid darkGray' }} onClick={this.handleBackwardOnePageClick}>Prev</Pagination.Item>\r\n forwardOnePagePageLink = <Pagination.Item key=\"forward1\" id=\"forward1\" style={{ border: '3px solid darkGray' }} onClick={this.handleForwardOnePageClick}>Next</Pagination.Item>\r\n \r\n if (this.props.numberOfPages > 30) { // show the \"move 10 pages\" links only if the number of pages is greater than 30\r\n backwardTenPagesPageLink = <Pagination.Item key=\"backward10\" id=\"backward10\" style={{ borderTop: '3px solid darkGray', borderBottom: '3px solid darkGray', borderLeft: '3px solid darkGray' }} onClick={this.handleBackwardTenPagesClick}>-10</Pagination.Item>\r\n forwardTenPagesPageLink = <Pagination.Item key=\"forward10\" id=\"forward10\" style={{ borderTop: '3px solid darkGray', borderBottom: '3px solid darkGray', borderRight: '3px solid darkGray' }} onClick={this.handleForwardTenPagesClick}>+10</Pagination.Item>\r\n }\r\n }\r\n \r\n return (\r\n <>\r\n { this.props.tableLoading === true && \r\n <span>{spinnerIconGray}</span>\r\n }\r\n { this.props.tableLoading !== true && this.props.numberOfPages > 1 && // show pagination only if there's more than 1 page\r\n <Pagination size=\"sm\">\r\n {firstPagePageLink}\r\n {backwardTenPagesPageLink}\r\n {backwardOnePagePageLink}\r\n {paginationItems}\r\n {forwardOnePagePageLink}\r\n {forwardTenPagesPageLink}\r\n {lastPagePageLink}\r\n </Pagination>\r\n }\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchPaginator);","import React, { Component } from \"react\"\r\n\r\nimport { Container, Col, Row, Table, FormCheck } from 'react-bootstrap'\r\n\r\nimport { connect } from \"react-redux\";\r\n\r\nimport { displayDetails, SEARCH_RESULTS_PAGE_SIZE, getSearchResultById} from '../../../redux/actions/searchActions'\r\nimport SearchPaginator from '../../common/page/SearchPaginator'\r\nimport { getPaginatorHelper } from '../../common/page/PaginatorHelper'\r\nimport Loading from '../../common/modal/Loading';\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nimport CreditCardSearchAuthWindow from \"../../../components/common/form/CreditCardSearchAuthWindow\";\r\nimport CreditCardPriceListWindow from \"../../../components/common/form/CreditCardPriceListWindow\";\r\nimport CreditCardPriceListReAuthWindow from \"../../../components/common/form/CreditCardPriceListReAuthWindow\"\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\"\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\n\r\nimport Alert from '../../common/modal/Alert';\r\nimport { ALERT_TYPES } from \"../../constants/constants\";\r\n\r\nexport const SearchResultsTableComponetName = 'SearchResultsTable';\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n bookLabel: state.countyConfigCommonReducer.bookLabel,\r\n bookType: state.landlinkConfigReducer.bookType,\r\n searchResults: state.searchResultsReducer,\r\n paginationPage: state.searchResultsPaginationReducer,\r\n tableLoading: state.searchResultsTableLoadingReducer,\r\n selectedRow: state.searchResultsTableSelectedRowReducer,\r\n rewind: state.searchSequenceRewindReducer,\r\n searchResultsSort: state.searchResultsSortReducer, \r\n filterApplied: state.searchResultsFilterAppliedFilter,\r\n searchResultsFilter: state.searchResultsFilterReducer,\r\n searchResultsVisited: state.searchResultsVisitedReducer\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n select: (id, sourcedDocKey, callback) => dispatch(displayDetails(id, sourcedDocKey, callback)),\r\n filterResults: (document, sortKey, sortDirection, callback) => dispatch({ type: 'FILTER_DOCUMENT_ID', document, sortKey, sortDirection }, callback()),\r\n resetRewindSearch: () => dispatch({ type: 'RESET_REWIND_SEARCH_SEQUENCE'}) \r\n }\r\n}\r\n\r\nclass SearchResultsTable extends Component {\r\n\r\n state = {\r\n selectedDocumentId: null,\r\n selectedDocumentName: '',\r\n loadingStatus: '',\r\n tableLoading: true,\r\n \r\n token: null,\r\n\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n \r\n showAlert: false,\r\n alertMessage: \"\"\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t}\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === '') {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\"\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleAuthorizedSubmit = () => {\r\n let searchResult = getSearchResultById(this, this.state.selectedDocumentId);\r\n\r\n this.props.select(this.state.selectedDocumentId, searchResult.sourcedDocKey, this.hideLoading);\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState({creditCardAuthorizeDotNetWindowShow:true});\r\n }\r\n \r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleCheckFilterLimit = () => {\r\n if (this.props.searchResultsFilter.totalRecordCount >= 100) {\r\n this.setState(\r\n {\r\n showAlert: true,\r\n alertMessage: 'You have reached the limit of selecting up to 100 records.'\r\n });\r\n }\r\n }\r\n\r\n handleCheckClick = (event) => {\r\n const clickedId = event.target.closest(\"tr\").id; // find the closest parent tr\r\n this.props.searchResults.searchResultList.map((searchResult) => {\r\n if (searchResult.docId == clickedId) {\r\n this.props.filterResults(searchResult, this.props.searchResultsSort.sortKey, this.props.searchResultsSort.sortDirection, this.handleCheckFilterLimit);\r\n }\r\n });\r\n }\r\n\r\n handleRowClick = (event) => {\r\n const clickedId = event.target.closest(\"tr\").id; // find the closest parent tr\r\n this.props.resetRewindSearch();\r\n if (clickedId && this.showLoading() === true) {\r\n const selectedDocumentName = event.target.closest(\"tr\").getAttribute(\"name\");\r\n this.setState({ selectedDocumentId: clickedId, selectedDocumentName })\r\n\r\n let searchResult = getSearchResultById(this, clickedId);\r\n\r\n this.props.select(clickedId, searchResult.sourcedDocKey, this.hideLoading);\r\n }\r\n }\r\n\r\n checkSelected = (docId) => {\r\n \r\n for (const element of this.props.searchResultsFilter.searchResultList) {\r\n if (element.docId === docId) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n let result = new AjaxResult(response);\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n\r\n render() {\r\n // Only want to show the credit card entry screen once the first time the user goes to enter their CC info\r\n console.log('CreditCardAuthorizeDotNetWindowShow: ' + this.state.creditCardAuthorizeDotNetWindowShow);\r\n\r\n let bookTypeLabel = \"\";\r\n if (this.props.bookType === true){\r\n bookTypeLabel = \"/Type\";\r\n }\r\n\r\n let loadingLabel = this.props.tableLoading === true ? 'Loading' : \"Displaying\";\r\n let bookPageBoookTypeHeader = <th className=\"table-td-xs\" scope=\"col\" style={{ width: '18%' }} >Recorded Date<br /> {this.props.bookLabel}/Page{bookTypeLabel}</th>\r\n\r\n let filteredList = this.props.searchResults.searchResultList;\r\n const numberOfVisibleRecords = SEARCH_RESULTS_PAGE_SIZE;\r\n let numberOfPages = Math.ceil ( filteredList.length / numberOfVisibleRecords );\r\n let paginationHelper = getPaginatorHelper(this.props.paginationPage, filteredList, numberOfVisibleRecords);\r\n\r\n let displayResults = paginationHelper.currentPageStartingRecordNumber === paginationHelper.currentPageEndingRecordNumber ? \r\n paginationHelper.currentPageStartingRecordNumber :\r\n paginationHelper.currentPageStartingRecordNumber + \"-\" + paginationHelper.currentPageEndingRecordNumber;\r\n\r\n let truncatedResultWarning = <></>;\r\n if (filteredList.length >= 1000) {\r\n truncatedResultWarning = <span className='badge badge-danger'>Results truncated. If needed, narrow criteria and search again.</span>\r\n }\r\n\r\n // The authorize.net window in CreditCardSearchAuthWindow needs to re-render every time apparently. I tried to use the authorize.net token as the component key, but apparently, \r\n // the token either is too big or has characteers that didn't work out. Therefore, I'm using a random number to force it re-render each time.\r\n const creditCardAuthorizeDotNetWindowKey = Math.ceil(Math.random() * 1000000000) + \"\";\r\n let selectedDocumentId = 0;\r\n if (this.props.rewind === true) {\r\n selectedDocumentId = this.props.selectedRow;\r\n } else {\r\n selectedDocumentId = this.state.selectedDocumentId;\r\n }\r\n\r\n return (\r\n <>\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, paddingBottom: 50}}>\r\n <Table responsive striped bordered hover size=\"sm\" style={{ maxHeight: 600, marginBottom:0, overflowY: 'auto', display: 'inline-block'}} >\r\n <thead style={{ display: 'table', width: '100%', tableLayout: 'fixed'}}>\r\n <tr>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '4%' }}></th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '26%' }}>Instrument<br />Document #</th>\r\n {bookPageBoookTypeHeader}\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '22%' }} >Grantors<br />Grantees</th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '22%' }}>References<br />Legals</th>\r\n </tr>\r\n </thead>\r\n { \r\n this.props.searchResults.timestamp > 0 &&\r\n <tbody key={this.props.searchResults.timestamp} style={{ display: 'table', width: '100%', tableLayout: 'fixed', cursor: \"pointer\"}} >\r\n {\r\n paginationHelper.currentPageRecordList.map((searchResult) => {\r\n const selectedClass = selectedDocumentId == searchResult.docId ? \"table-active\" : \"\"; // highlight the selected row\r\n\r\n const grantorsBadge = searchResult.grantorSearchResults && searchResult.grantorSearchResults.length > 1 ? \"more\" : \"\";\r\n const grantorOneDisplayName = searchResult.grantorSearchResults && searchResult.grantorSearchResults.length > 0 && searchResult.grantorSearchResults[0] ? searchResult.grantorSearchResults[0].displayName : '';\r\n const granteesBadge = searchResult.granteeSearchResults && searchResult.granteeSearchResults.length > 1 ? \"more\" : \"\";\r\n const granteeOneDisplayName = searchResult.granteeSearchResults && searchResult.granteeSearchResults.length > 0 && searchResult.granteeSearchResults[0] ? searchResult.granteeSearchResults[0].displayName : '';\r\n\r\n const referenceDocumentsBadge = searchResult.referenceDocumentSearchResults && searchResult.referenceDocumentSearchResults.length > 1 ? \"more\" : \"\";\r\n const referenceDocumentOne = searchResult.referenceDocumentSearchResults && searchResult.referenceDocumentSearchResults.length > 0 && searchResult.referenceDocumentSearchResults[0] ? searchResult.referenceDocumentSearchResults[0].displayDocNumber : '';\r\n\r\n const legalDescriptionsBadge = searchResult.legalSearchResults && searchResult.legalSearchResults.length > 1 ? \"more\" : \"\";\r\n const legalDescriptionOne = searchResult.legalSearchResults && searchResult.legalSearchResults.length > 0 && searchResult.legalSearchResults[0] ? searchResult.legalSearchResults[0].description : '';\r\n\r\n const selected = this.checkSelected(searchResult.docId);\r\n\r\n \r\n let cursorStyle = {cursor: 'wait' };\r\n if (searchResult.docId) {\r\n cursorStyle = { cursor: 'pointer' }\r\n }\r\n\r\n let badgeClass = 'badge-light';\r\n if (this.props.searchResultsVisited instanceof Set && this.props.searchResultsVisited.has(searchResult.docId+\"\")) {\r\n cursorStyle = {...cursorStyle, ...{color: 'darkgray'}} \r\n badgeClass = 'badge-info';\r\n }\r\n\r\n return (\r\n <tr className={selectedClass} style={cursorStyle} id={searchResult.docId} name={searchResult.displayDocNumber} onClick={this.handleRowClick}>\r\n { \r\n selected &&\r\n <td className=\"table-td-xs\" style={{ width: '4%' }} ><FormCheck onChange={this.handleCheckClick} checked={true} disabled={this.props.filterApplied}></FormCheck></td>\r\n }\r\n { \r\n !selected &&\r\n <td className=\"table-td-xs\" style={{ width: '4%' }} ><FormCheck onChange={this.handleCheckClick} checked={false} disabled={this.props.filterApplied}></FormCheck></td>\r\n }\r\n <td className=\"table-td-xs\" style={{ width: '26%' }} ><strong>{searchResult.instrumentDescription}</strong><br />{searchResult.displayDocNumber ? searchResult.displayDocNumber : 'Loading'}<br /></td>\r\n <td className=\"table-td-xs\" style={{ width: '18%' }} >{searchResult.recordedDate}<br />{searchResult.displayBookAndPage}</td>\r\n <td className=\"table-td-xs\" style={{ width: '22%' }} >{grantorOneDisplayName} <span className='badge {badgeClass}'>{grantorsBadge}</span><br />{granteeOneDisplayName} <span className='badge {badgeClass}'>{granteesBadge}</span></td>\r\n <td className=\"table-td-xs\" style={{ width: '22%' }} >{referenceDocumentOne} <span className='badge {badgeClass}'>{referenceDocumentsBadge}</span><br />{legalDescriptionOne} <span className='badge {badgeClass}'>{legalDescriptionsBadge}</span></td>\r\n </tr>\r\n )\r\n })\r\n }\r\n </tbody>\r\n }\r\n </Table>\r\n <Row>\r\n <Col style={{ marginLeft: 4}} >{loadingLabel} Results: {displayResults} of {filteredList.length} {truncatedResultWarning}</Col>\r\n </Row>\r\n <Row >\r\n <Col style={{ marginLeft: 4}} ><SearchPaginator style={{ justifyContent: 'center' }} componentName={SearchResultsTableComponetName} numberOfVisibleRecords={numberOfVisibleRecords} numberOfPages={numberOfPages}></SearchPaginator></Col>\r\n </Row>\r\n </Container>\r\n \r\n <Alert show={this.state.showAlert} hideAlert={this.hideAlert} type={ALERT_TYPES.INFO} message={this.state.alertMessage} />\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <CreditCardPriceListWindow show={this.state.creditCardPriceListWindowShow} handleContinueClicked={this.handleCreditCardPriceListContinue} handleCloseClicked={this.handleCreditCardPriceListClose} />\r\n {this.state.creditCardAuthorizeDotNetWindowShow && <CreditCardSearchAuthWindow show={this.state.creditCardAuthorizeDotNetWindowShow} handleAuthorizedSubmit={this.handleAuthorizedSubmit} handleCloseClicked={this.handleCreditCardAuthorizeDotNetWindowClose} token={this.state.token} />}\r\n <CreditCardPriceListReAuthWindow show={this.state.creditCardPriceListReAuthWindowShow} handleContinueClicked={this.handleCreditCardPriceListReAuth} handleCloseClicked={this.handleCreditCardPriceListReAuthWindowClose} />\r\n \r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchResultsTable);","import React, { Component } from \"react\"\r\nimport { Container, Col } from 'react-bootstrap'\r\nimport { chevronCircleLeftIcon } from \"../../../img/font_awesome/font_awesome\"\r\nimport '../../../landshark.css';\r\n\r\nexport default class SearchResultsDetailsNoResults extends Component {\r\n render() {\r\n return (\r\n <Col style={{paddingLeft: 0, marginLeft: 6, marginRight: 4}} >\r\n <Container fluid=\"true\">\r\n <div id=\"arrow\" className=\"circle bounce\" data-target=\"#introText\">\r\n <div className=\"bounce\" style={{ paddingLeft:10, paddingTop: 65 }}> {chevronCircleLeftIcon} <span style={{position: 'relative', bottom: 10, color: 'black'}}>Click on a record to view details and images</span></div>\r\n </div>\r\n </Container>\r\n </Col>\r\n )\r\n }\r\n}","import React, {Component} from 'react';\r\nimport { Modal, Button, Table } from 'react-bootstrap'\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\n\r\nexport default class LegalDetails extends Component {\r\n\r\n state = {\r\n\t\tmetesAndBoundsHeaders:[],\r\n metesAndBoundsRows: [],\r\n\t\tlotsAndBlocksHeaders: [],\r\n lotsAndBlocksRows: [],\r\n\t\tcondoHeaders: [],\r\n\t\tcondoRows: []\r\n\t }\r\n\r\n handleCloseClick = () => {\r\n this.props.hideLegalDetails();\r\n }\r\n\r\n componentDidMount() {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"search/legalDescriptionDetails\", {id: this.props.docId}, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n metesAndBoundsHeaders: content.metesAndBoundsHeaders,\r\n metesAndBoundsRows: content.metesAndBoundsRows? content.metesAndBoundsRows.legalDescriptionTypeDetails: [],\r\n lotsAndBlocksHeaders: content.lotsAndBlocksHeaders,\r\n lotsAndBlocksRows: content.lotsAndBlocksRows? content.lotsAndBlocksRows.legalDescriptionTypeDetails : [],\r\n condoHeaders: content.condoHeaders,\r\n condoRows: content.condoRows? content.condoRows.legalDescriptionTypeDetails : []\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n let metesAndBoundsHeaders = this.state.metesAndBoundsHeaders.map((header) => {\r\n return <th scope=\"col\">{header}</th>\r\n })\r\n\r\n let metesAndBoundsDetails = this.state.metesAndBoundsRows.map((row) => {\r\n return <tr>\r\n {\r\n row.map((column) => {\r\n return <td>{column}</td>\r\n })\r\n }\r\n </tr>\r\n })\r\n\r\n let metesAndBoundsTable = <></>;\r\n if (metesAndBoundsHeaders) {\r\n metesAndBoundsTable =\r\n <Table striped hover size=\"sm\" >\r\n <thead>\r\n <tr>\r\n {metesAndBoundsHeaders}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {metesAndBoundsDetails}\r\n </tbody>\r\n </Table>\r\n }\r\n\r\n let lotsAndBlocksHeaders = this.state.lotsAndBlocksHeaders.map((header) => {\r\n return <th scope=\"col\">{header}</th>\r\n })\r\n\r\n let lotsAndBlocksDetails = this.state.lotsAndBlocksRows.map((row) => {\r\n return <tr>\r\n {\r\n row.map((column) => {\r\n return <td>{column}</td>\r\n })\r\n }\r\n </tr>\r\n })\r\n\r\n let lotsAndBlocksTable = <></>;\r\n if (lotsAndBlocksHeaders) {\r\n lotsAndBlocksTable =\r\n <Table striped hover size=\"sm\" >\r\n <thead>\r\n <tr>\r\n {lotsAndBlocksHeaders}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {lotsAndBlocksDetails}\r\n </tbody>\r\n </Table>\r\n }\r\n\r\n let condoHeaders = this.state.condoHeaders.map((header) => {\r\n return <th scope=\"col\">{header}</th>\r\n })\r\n\r\n let condoDetails = this.state.condoRows.map((row) => {\r\n return <tr>\r\n {\r\n row.map((column) => {\r\n return <td>{column}</td>\r\n })\r\n }\r\n </tr>\r\n })\r\n\r\n let condoTable = <></>;\r\n if (condoHeaders) {\r\n condoTable =\r\n <Table striped hover size=\"sm\" >\r\n <thead>\r\n <tr>\r\n {condoHeaders}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {condoDetails}\r\n </tbody>\r\n </Table>\r\n }\r\n\r\n return (\r\n\r\n <Modal show={this.props.show} onHide={this.handleCloseClick} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n \r\n <Modal.Header closeButton >\r\n <Modal.Title style={{color: '#3674AB'}}>{this.props.title}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{borderTop: '2px solid black', height:'50vh', borderBottom: '2px solid black', overflowY: 'scroll'}}>\r\n {metesAndBoundsTable}\r\n {lotsAndBlocksTable}\r\n {condoTable}\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Close</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n \r\n )\r\n }\r\n}","import React, { Component } from \"react\"\r\nimport { Container, Col, Row, Table, Button } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\nimport SearchResultsDetailsNoResults from './SearchResultsDetailsNoResults'\r\nimport { loadDocuments, searchByTorrensCertificate, SearchByDocumentNumberUrl, SearchByNameUrl, selectSearchSequenceRow, setSelectedSearchType, SearchByNameKey, SearchByDocumentNumberKey, SearchByTorrensCertificateKey } from \"../../../redux/actions/searchActions\";\r\nimport Paginator from '../../common/page/Paginator'\r\nimport { getPaginatorHelper } from '../../common/page/PaginatorHelper'\r\nimport Loading from '../../common/modal/Loading';\r\nimport LegalDetails from './LegalDetails';\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport moment from 'moment';\r\n\r\nexport const SearchResultsDetailsGrantorsGranteesComponetName = 'SearchResultsDetailsGrantorsGrantees';\r\nexport const SearchResultsDetailsReferenceDocumentsComponetName = 'SearchResultsDetailsReferenceDocuments';\r\nexport const SearchResultsDetailsLegalDescriptionsComponetName = 'SearchResultsDetailsLegalDescriptions';\r\nexport const SearchResultsDetailsTorrensCertificatesComponetName = 'SearchResultsDetailsTorrensCertificates';\r\n\r\nconst mapStateToProps = state => {\r\n\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[0];\r\n\r\n let fromRecordedDate;\r\n let toRecordedDate;\r\n if (searchHistory && searchHistory.displayCriteria) {\r\n const fromRecordedDateCriteria = searchHistory.displayCriteria.filter(criteria => {\r\n return criteria.key === 'fromRecordedDate'\r\n })\r\n\r\n if (Array.isArray(fromRecordedDateCriteria) && fromRecordedDateCriteria.length > 0) {\r\n fromRecordedDate = fromRecordedDateCriteria[0].value;\r\n }\r\n\r\n const toRecordedDateCriteria = searchHistory.displayCriteria.filter(criteria => {\r\n return criteria.key === 'toRecordedDate'\r\n })\r\n if (Array.isArray(toRecordedDateCriteria) && toRecordedDateCriteria.length > 0) {\r\n toRecordedDate = toRecordedDateCriteria[0].value;\r\n }\r\n }\r\n\r\n return {\r\n showMapButton: state.countyConfigSearch2Reducer.map,\r\n showTaxButton: state.countyConfigSearch2Reducer.tax,\r\n searchResults: state.searchResultsReducer,\r\n searchResultsDetails: state.searchDetailsReducer,\r\n bookLabel: state.countyConfigCommonReducer.bookLabel,\r\n bookType: state.landlinkConfigReducer.bookType,\r\n displaySalePrice: state.landlinkConfigReducer.displaySalePrice,\r\n displayMortgageAmount: state.landlinkConfigReducer.displayMortgageAmount,\r\n mortgageAmountLabel: state.landlinkConfigReducer.mortgageAmountLabel,\r\n paginationPageGrantorsGrantees: state.searchDetailsGrantorsGranteesPaginationReducer,\r\n paginationPageLegalDescriptions: state.searchDetailsLegalDescriptionsPaginationReducer,\r\n paginationPageReferenceDocuments: state.searchDetailsReferenceDocumentsPaginationReducer,\r\n paginationPageTorrensCertificates: state.searchDetailsTorrensCertificatesPaginationReducer,\r\n // If the recorded dates from the original search are available, use them in the Grantor/Grantee link searches.\r\n fromRecordedDate: fromRecordedDate ? fromRecordedDate : moment('01/01/1900').format('L'),\r\n toRecordedDate: toRecordedDate ? toRecordedDate : moment().format('L'),\r\n currentUser: state.currentUserReducer,\r\n tableLoading: state.searchResultsTableLoadingReducer,\r\n currentSearch: state.searchHistoryReducer.searchHistoryList[0],\r\n currentSort: state.searchResultsSortReducer,\r\n currentPageNumber: state.searchResultsPaginationReducer,\r\n searchSequence: state.searchSequenceStartedReducer,\r\n searchSequenceSelectedDocumentId: state.searchResultsTableSelectedRowReducer\r\n };\r\n}\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n searchByTorrensCertificate: (searchCriteria, history, callback) => dispatch(searchByTorrensCertificate(searchCriteria, history, callback)),\r\n searchByName: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByNameUrl)),\r\n searchByDocumentNumber: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByDocumentNumberUrl)),\r\n startSearchSequence: (currentSearch) => dispatch({ type: 'START_SEARCH_SEQUENCE', search: currentSearch }),\r\n selectSearchSequenceRow: (id) => dispatch(selectSearchSequenceRow(id)),\r\n setSelectedSearchType: (searchType) => dispatch(setSelectedSearchType(searchType))\r\n }\r\n}\r\n\r\nclass SearchResultsDetails extends Component {\r\n\r\n state = {\r\n loadingStatus: \"\",\r\n showLegalDetails: false\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n }\r\n\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n showLegalDetails = (event) => {\r\n event.preventDefault();\r\n this.setState({\r\n showLegalDetails: true\r\n })\r\n }\r\n\r\n hideLegalDetails = () => {\r\n this.setState({\r\n showLegalDetails: false\r\n })\r\n }\r\n\r\n handleTorrensCertificateClick = (event) => {\r\n event.preventDefault();\r\n\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n\r\n if (!this.props.searchSequence) {\r\n let currentSearchCriteria = this.props.currentSearch;\r\n currentSearchCriteria.pageNumber = this.props.currentPageNumber;\r\n currentSearchCriteria.sortKey = this.props.currentSort.sortKey;\r\n currentSearchCriteria.sortDirection = this.props.currentSort.sortDirection;\r\n this.props.startSearchSequence(currentSearchCriteria);\r\n this.props.selectSearchSequenceRow(this.props.searchResultsDetails);\r\n }\r\n\r\n let searchCriteria = {\r\n certificateNumber: event.target.getAttribute(\"data-certificate\")\r\n }\r\n\r\n this.props.setSelectedSearchType(SearchByTorrensCertificateKey);\r\n this.props.searchByTorrensCertificate(searchCriteria, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleGrantorGranteeClick = (event) => {\r\n event.preventDefault();\r\n\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n\r\n if (!this.props.searchSequence) {\r\n let currentSearchCriteria = this.props.currentSearch;\r\n currentSearchCriteria.pageNumber = this.props.currentPageNumber;\r\n currentSearchCriteria.sortKey = this.props.currentSort.sortKey;\r\n currentSearchCriteria.sortDirection = this.props.currentSort.sortDirection;\r\n this.props.startSearchSequence(currentSearchCriteria);\r\n this.props.selectSearchSequenceRow(this.props.searchResultsDetails);\r\n }\r\n\r\n let searchCriteria = {\r\n grantorGranteeSearchIn: 'both',\r\n grantorGranteeLastName1: event.target.getAttribute(\"data-lastname\"),\r\n grantorGranteeMiddleInitial1: event.target.getAttribute(\"data-middleinitial\"),\r\n grantorGranteeFirstName1: event.target.getAttribute(\"data-firstname\"),\r\n fromRecordedDate: this.props.fromRecordedDate,\r\n toRecordedDate: this.props.toRecordedDate\r\n }\r\n\r\n this.props.setSelectedSearchType(SearchByNameKey);\r\n this.props.searchByName(searchCriteria, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleReferenceDocumentClick = (event) => {\r\n event.preventDefault();\r\n\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n\r\n if (!this.props.searchSequence) {\r\n let currentSearchCriteria = this.props.currentSearch;\r\n currentSearchCriteria.pageNumber = this.props.currentPageNumber;\r\n currentSearchCriteria.sortKey = this.props.currentSort.sortKey;\r\n currentSearchCriteria.sortDirection = this.props.currentSort.sortDirection;\r\n this.props.startSearchSequence(currentSearchCriteria);\r\n this.props.selectSearchSequenceRow(this.props.searchResultsDetails);\r\n }\r\n\r\n let searchCriteria = {\r\n documentType: event.target.getAttribute(\"data-documenttype\"),\r\n fromDocumentNumber: event.target.getAttribute(\"data-documentnumber\"),\r\n toDocumentNumber: ''\r\n }\r\n\r\n this.props.setSelectedSearchType(SearchByDocumentNumberKey);\r\n this.props.searchByDocumentNumber(searchCriteria, this.props.history, this.hideLoading);\r\n }\r\n\r\n render() {\r\n const numberOfVisibleRecords = 3;\r\n\r\n let bookTypeLabel = \"\";\r\n if (this.props.bookType === true){\r\n bookTypeLabel = \"/Type\";\r\n }\r\n\r\n\r\n if (this.props.searchResultsDetails === 0) {\r\n return (<SearchResultsDetailsNoResults />)\r\n }\r\n\r\n let selectedSearchResult = this.props.searchResults.searchResultList.find((searchResult) => {\r\n return this.props.searchResultsDetails == searchResult.docId;\r\n });\r\n \r\n if (selectedSearchResult == null || selectedSearchResult === 0) {\r\n return (<SearchResultsDetailsNoResults />)\r\n }\r\n \r\n let { displayDocNumber, docId, instrumentDescription, displayBookAndPage, recordedDateTime, instrumentDate,\r\n mortgageAmount, salePrice,\r\n grantorSearchResults, granteeSearchResults, verifiedStatus,\r\n displayOnlySearchResults, referenceDocumentSearchResults, additionalInfoSearchResults, legalSearchResults, torrensSearchResults } = \r\n selectedSearchResult || {};\r\n let selectedSearchResultInfo = this.props.getSelectedSearchResultInfo(selectedSearchResult) || {};\r\n let docType = selectedSearchResultInfo.sourcedDocKey.docKeyType;\r\n let imageKeyType = selectedSearchResultInfo.sourcedDocKey.imageKeyType;\r\n\r\n let grantorsGranteesArray = [];\r\n for (let i = 0; i < grantorSearchResults.length || i < granteeSearchResults.length; i++) {\r\n grantorsGranteesArray[i] = [grantorSearchResults[i], granteeSearchResults[i]];\r\n }\r\n\r\n\r\n let numberOfGrantorsGranteesPages = Math.ceil(grantorsGranteesArray.length / numberOfVisibleRecords);\r\n let paginationHelperGrantorsGrantees = getPaginatorHelper(this.props.paginationPageGrantorsGrantees, grantorsGranteesArray, numberOfVisibleRecords);\r\n\r\n let numberOfLegalSearchResultsPages = Math.ceil(legalSearchResults.length / numberOfVisibleRecords);\r\n let paginationHelperLegalDescriptions = getPaginatorHelper(this.props.paginationPageLegalDescriptions, legalSearchResults, numberOfVisibleRecords);\r\n\r\n let numberOfReferenceDocumentSearchResultsPages = Math.ceil(referenceDocumentSearchResults.length / numberOfVisibleRecords);\r\n let paginationHelperReferenceDocuments = getPaginatorHelper(this.props.paginationPageReferenceDocuments, referenceDocumentSearchResults, numberOfVisibleRecords);\r\n\r\n let numberOfTorrensSearchResultsPages = Math.ceil(torrensSearchResults.length / numberOfVisibleRecords);\r\n let paginationHelperTorrensCertificates = getPaginatorHelper(this.props.paginationPageTorrensCertificates, torrensSearchResults, numberOfVisibleRecords);\r\n\r\n let mortgageAmountLabel = 'Mortgage Amount';\r\n if (this.props.mortgageAmountLabel && this.props.mortgageAmountLabel != '') {\r\n mortgageAmountLabel = this.props.mortgageAmountLabel;\r\n }\r\n\r\n let salePriceMortgageAmountLabel = 'Sale Price/' + mortgageAmountLabel;\r\n let salePriceMortgageAmount = (salePrice + mortgageAmount).length ? (salePrice + \"/\" + mortgageAmount) : '';\r\n if (this.props.displaySalePrice === true && this.props.displayMortgageAmount === false) {\r\n salePriceMortgageAmountLabel = 'Sale Price';\r\n salePriceMortgageAmount = salePrice;\r\n } else if (this.props.displaySalePrice === false && this.props.displayMortgageAmount === true) {\r\n salePriceMortgageAmountLabel = mortgageAmountLabel;\r\n salePriceMortgageAmount = mortgageAmount;\r\n }\r\n\r\n return (\r\n <>\r\n <Col style={{ paddingLeft: 0, marginRight: 0, boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }} >\r\n <Container key={this.props.searchResultsDetails} style={{ paddingLeft: 10, paddingTop: 10, paddingRight: 0, marginRight: 0 }} fluid=\"true\">\r\n <Row >\r\n\r\n <Col>\r\n\r\n <h5>\r\n <span><strong>{instrumentDescription}</strong> </span>\r\n <span className=\"badge badge-secondary\">{verifiedStatus}</span>\r\n <span style={{ float: 'right' }}>\r\n {\r\n this.props.showMapButton === true &&\r\n <>\r\n <Button variant=\"primary\" size=\"sm\" onClick={this.props.handleGisClick}>Map</Button>\r\n \r\n </>\r\n }\r\n {\r\n this.props.showTaxButton === true &&\r\n <>\r\n <Button variant=\"primary\" size=\"sm\" onClick={this.props.handleTaxClick}>Tax</Button>\r\n \r\n </>\r\n }\r\n {\r\n this.props.currentUser.accountDocTypes[imageKeyType].imageRetrieval &&\r\n <Button variant=\"primary\" size=\"sm\" onClick={this.props.handleImageClick} >Image</Button>\r\n }\r\n </span>\r\n </h5>\r\n </Col>\r\n\r\n </Row>\r\n <hr style={{ background: 'black', marginTop: 2, marginBottom: 2 }}></hr>\r\n\r\n <div>\r\n <div><strong>Document #: </strong>{displayDocNumber} </div>\r\n <div><strong>Recorded Date and Time: </strong>{recordedDateTime} </div>\r\n <div><strong>Instrument Date: </strong>{instrumentDate}</div>\r\n <div><strong>{this.props.bookLabel}/Page{bookTypeLabel}: </strong>{displayBookAndPage}</div>\r\n <div><strong>{salePriceMortgageAmountLabel}: </strong>{salePriceMortgageAmount}</div>\r\n {\r\n docType === 'T' &&\r\n <>\r\n <Table striped bordered hover variant=\"dark\" size=\"sm\" style={{ marginBottom: 0, marginTop: 10 }}>\r\n <thead><tr><th style={{ width: '50%' }} scope=\"col\">Certificates</th><th style={{ width: '50%' }} scope=\"col\">Status</th></tr></thead>\r\n <tbody>\r\n {\r\n paginationHelperTorrensCertificates.currentPageRecordList.map(certificate => {\r\n return <tr>\r\n <td className=\"table-td-xs\">\r\n {\r\n this.props.tableLoading === true &&\r\n <span>{certificate.certificateNumber}</span>\r\n }\r\n {\r\n this.props.tableLoading !== true &&\r\n <a name=\"searchByTorrensCertificate\" href='#BogusToRemoveWarning' style={{ textDecoration: 'none' }} data-certificate={certificate.certificateNumber} onClick={this.handleTorrensCertificateClick}> {certificate.certificateNumber}</a>\r\n }\r\n </td>\r\n <td className=\"table-td-xs\">\r\n {certificate.status}\r\n </td>\r\n </tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n <Row>\r\n <Col><Paginator componentName={SearchResultsDetailsTorrensCertificatesComponetName} numberOfPages={numberOfTorrensSearchResultsPages} numberOfVisibleRecords={numberOfVisibleRecords} ></Paginator></Col>\r\n </Row>\r\n </>\r\n }\r\n\r\n <Table striped bordered hover variant=\"dark\" size=\"sm\" style={{ marginBottom: 0, marginTop: 10 }}>\r\n <thead><tr><th scope=\"col\">Grantors</th><th scope=\"col\">Grantees</th></tr></thead>\r\n <tbody>\r\n {\r\n paginationHelperGrantorsGrantees.currentPageRecordList.map((grantorGrantee) => {\r\n return <tr>\r\n <td className=\"table-td-xs\" style={{ width: '50%' }} >\r\n {\r\n this.props.tableLoading === true &&\r\n <span>{grantorGrantee[0] ? grantorGrantee[0].displayName : ''} </span>\r\n }\r\n {\r\n this.props.tableLoading !== true &&\r\n <a href='#BogusToRemoveWarning' name=\"searchByName\" style={{ textDecoration: 'none' }} data-lastname={grantorGrantee[0] ? grantorGrantee[0].lastName : ''} data-firstname={grantorGrantee[0] ? grantorGrantee[0].firstName : ''} data-middieinitial={grantorGrantee[0] ? grantorGrantee[0].middleInitial : ''} onClick={this.handleGrantorGranteeClick}> {grantorGrantee[0] ? grantorGrantee[0].displayName : ''} </a>\r\n }\r\n </td>\r\n <td className=\"table-td-xs\" style={{ width: '50%' }} >\r\n {\r\n this.props.tableLoading === true &&\r\n <span> {grantorGrantee[1] ? grantorGrantee[1].displayName : ''} </span>\r\n }\r\n {\r\n this.props.tableLoading !== true &&\r\n <a href='#BogusToRemoveWarning' name=\"searchByName\" style={{ textDecoration: 'none' }} data-lastname={grantorGrantee[1] ? grantorGrantee[1].lastName : ''} data-firstname={grantorGrantee[1] ? grantorGrantee[1].firstName : ''} data-middleinitial={grantorGrantee[1] ? grantorGrantee[1].middleInitial : ''} onClick={this.handleGrantorGranteeClick}> {grantorGrantee[1] ? grantorGrantee[1].displayName : ''} </a>\r\n }\r\n </td>\r\n </tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n\r\n <Row >\r\n <Col ><Paginator style={{ marginBottom: 0 }} componentName={SearchResultsDetailsGrantorsGranteesComponetName} numberOfPages={numberOfGrantorsGranteesPages} numberOfVisibleRecords={numberOfVisibleRecords} ></Paginator></Col>\r\n </Row>\r\n\r\n <Table striped bordered hover variant=\"dark\" size=\"sm\" style={{ marginBottom: 0, marginTop: 10 }}>\r\n <thead><tr><th style={{ width: '50%' }} scope=\"col\">Legal Description <Button style={{ fontSize: '0.7em', fontWeight: 'bold', paddingTop: 0, paddingBottom: 1 }} variant=\"primary\" onClick={this.showLegalDetails} >Details</Button> </th><th style={{ width: '50%' }} scope=\"col\">Comment</th></tr></thead>\r\n <tbody>\r\n {\r\n paginationHelperLegalDescriptions.currentPageRecordList.map(legalDescription => {\r\n return <tr id={legalDescription.docId}>\r\n <td className=\"table-td-xs\">\r\n {legalDescription.description}\r\n </td>\r\n <td className=\"table-td-xs\">\r\n {legalDescription.comment}\r\n </td>\r\n </tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n <Row>\r\n <Col><Paginator style={{ marginBottom: 0 }} componentName={SearchResultsDetailsLegalDescriptionsComponetName} numberOfPages={numberOfLegalSearchResultsPages} numberOfVisibleRecords={numberOfVisibleRecords} ></Paginator></Col>\r\n </Row>\r\n\r\n <Table striped bordered hover variant=\"dark\" size=\"sm\" style={{ marginBottom: 0, marginTop: 10 }}>\r\n <thead><tr><th style={{ width: '34%' }} scope=\"col\">Reference Document</th><th style={{ width: '34%' }} scope=\"col\">Doc #</th><th style={{ width: '16%' }} scope=\"col\">Bk/Pg</th><th style={{ width: '16%' }} scope=\"col\">Rec Date</th></tr></thead>\r\n <tbody>\r\n {\r\n paginationHelperReferenceDocuments.currentPageRecordList.map(reference => {\r\n return <tr id={reference.docId}>\r\n <td className=\"table-td-xs\">\r\n {reference.instrumentDescription}\r\n </td>\r\n <td className=\"table-td-xs\">\r\n {\r\n this.props.tableLoading === true &&\r\n <span> {reference.displayDocNumber} </span>\r\n }\r\n {\r\n this.props.tableLoading !== true &&\r\n <a name=\"searchByDocumentNumber\" href='#BogusToRemoveWarning' style={{ textDecoration: 'none' }} data-documentnumber={reference.docNumber} data-documenttype={reference.docType} onClick={this.handleReferenceDocumentClick}> {reference.displayDocNumber}</a>\r\n }\r\n </td>\r\n <td className=\"table-td-xs\">\r\n {reference.displayBookAndPage} \r\n </td>\r\n <td className=\"table-td-xs\">\r\n {reference.recordedDate} {reference.recordedTime}{reference.recordedAmPm}\r\n </td>\r\n </tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n <Row>\r\n <Col><Paginator componentName={SearchResultsDetailsReferenceDocumentsComponetName} numberOfPages={numberOfReferenceDocumentSearchResultsPages} numberOfVisibleRecords={numberOfVisibleRecords} ></Paginator></Col>\r\n </Row>\r\n {\r\n // Showing the Additional Info section only if there's any additional info\r\n additionalInfoSearchResults.length > 0 &&\r\n <Table striped bordered hover variant=\"dark\" size=\"sm\" style={{ marginBottom: 0, marginTop: 10 }}>\r\n <thead><tr><th scope=\"col\">Additional Info</th></tr></thead>\r\n <tbody>\r\n {\r\n additionalInfoSearchResults.map(additionalInfo => {\r\n return <tr><td>{additionalInfo}</td></tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n }\r\n <div style={{ marginTop: 10 }}></div>\r\n {\r\n displayOnlySearchResults.map((displayOnlySearchResult) => {\r\n return <div><strong>{displayOnlySearchResult.label}: </strong>{displayOnlySearchResult.value}</div>\r\n })\r\n }\r\n\r\n </div>\r\n </Container>\r\n </Col>\r\n <Loading loadingIndicator={this.state.loadingStatus === 'LOADING'} />\r\n <LegalDetails show={this.state.showLegalDetails} hideLegalDetails={this.hideLegalDetails} title={displayDocNumber} key={docId} docId={docId} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchResultsDetails);","import React, { Component } from \"react\"\r\nimport { Container, Col, Row, Table, Button } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\nimport SearchResultsDetailsNoResults from './SearchResultsDetailsNoResults'\r\nimport { searchByTaxLien, loadDocuments, SearchByDocumentNumberUrl, selectSearchSequenceRow, setSelectedSearchType, SearchByDocumentNumberKey, } from \"../../../redux/actions/searchActions\";\r\nimport Paginator from '../../common/page/Paginator'\r\nimport { getPaginatorHelper } from '../../common/page/PaginatorHelper'\r\nimport Loading from '../../common/modal/Loading'\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nexport const SearchResultsDetailsTaxpayersComponetName = 'SearchResultsDetailsTaxpayers';\r\nexport const SearchResultsDetailsReleasesComponetName = 'SearchResultsDetailsReleases';\r\nexport const SearchResultsDetailsRevisionsComponetName = 'SearchResultsDetailsRevisions';\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n searchResults: state.searchResultsReducer,\r\n searchResultsDetails: state.searchDetailsTaxLienReducer,\r\n bookLabel: state.countyConfigCommonReducer.bookLabel,\r\n bookType: state.landlinkConfigReducer.bookType,\r\n currentUser: state.currentUserReducer,\r\n paginationPageTaxpayers: state.searchDetailsTaxpayersPaginationReducer,\r\n paginationPageReleases: state.searchDetailsReleasesPaginationReducer,\r\n paginationPageRevisions: state.searchDetailsRevisionsPaginationReducer,\r\n tableLoading: state.searchResultsTableLoadingReducer,\r\n currentSearch: state.searchHistoryReducer.searchHistoryList[0],\r\n currentSort: state.searchResultsSortReducer,\r\n currentPageNumber: state.searchResultsPaginationReducer,\r\n searchSequence: state.searchSequenceStartedReducer,\r\n searchSequenceSelectedDocumentId: state.searchResultsTableSelectedRowReducer\r\n };\r\n}\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n searchByTaxLien: (searchCriteria, history, callback) => dispatch(searchByTaxLien(searchCriteria, history, callback)),\r\n searchByDocumentNumber: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByDocumentNumberUrl)),\r\n startSearchSequence: (currentSearch) => dispatch({ type: 'START_SEARCH_SEQUENCE', search: currentSearch}),\r\n selectSearchSequenceRow: (id) => dispatch(selectSearchSequenceRow(id)),\r\n setSelectedSearchType: (searchType) => dispatch(setSelectedSearchType(searchType))\r\n }\r\n}\r\n\r\nclass TaxLienSearchResultsDetails extends Component {\r\n\r\n // May not need a loadingStatus, hence a state. \r\n // Leave the below three parts of code here for now.\r\n state = {\r\n loadingStatus: \"\"\r\n }\r\n\r\n // May not need a hideLoading. \r\n // Loading is needed only if you can trigger a search from details, as in SearchResultsDetails. \r\n // Not sure if there's anything to click in TaxLienSearchResultsDetails.\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n }\r\n\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n\r\n }\r\n\r\n handleDocumentClick = (event) => {\r\n event.preventDefault();\r\n\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n\r\n if (!this.props.searchSequence) {\r\n let currentSearchCriteria = this.props.currentSearch;\r\n currentSearchCriteria.pageNumber = this.props.currentPageNumber;\r\n currentSearchCriteria.sortKey = this.props.currentSort.sortKey;\r\n currentSearchCriteria.sortDirection = this.props.currentSort.sortDirection;\r\n this.props.startSearchSequence(currentSearchCriteria); \r\n this.props.selectSearchSequenceRow(this.props.searchResultsDetails);\r\n }\r\n\r\n let searchCriteria = {\r\n documentType: event.target.getAttribute(\"data-documenttype\"),\r\n fromDocumentNumber: event.target.getAttribute(\"data-documentnumber\"), \r\n toDocumentNumber: ''\r\n }\r\n\r\n this.props.setSelectedSearchType(SearchByDocumentNumberKey);\r\n this.props.searchByDocumentNumber(searchCriteria, this.props.history, this.hideLoading); \r\n }\r\n\r\n handleLienDocumentClick = (event) => {\r\n event.preventDefault();\r\n\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n\r\n if (!this.props.searchSequence) {\r\n let currentSearchCriteria = this.props.currentSearch;\r\n currentSearchCriteria.pageNumber = this.props.currentPageNumber;\r\n currentSearchCriteria.sortKey = this.props.currentSort.sortKey; \r\n currentSearchCriteria.sortDirection = this.props.currentSort.sortDirection;\r\n this.props.startSearchSequence(currentSearchCriteria); \r\n this.props.selectSearchSequenceRow(this.props.searchResultsDetails);\r\n }\r\n\r\n let searchCriteria = {\r\n currentOrExpired: 'ALL',\r\n searchByTaxLienMethod: 'DOCUMENTNUMBER',\r\n documentNumber: event.target.getAttribute(\"data-documentnumber\"),\r\n documentType: event.target.getAttribute(\"data-documenttype\")\r\n }\r\n\r\n this.props.searchByTaxLien(searchCriteria, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleTaxpayerClick = (event) => {\r\n event.preventDefault();\r\n\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n\r\n if (!this.props.searchSequence) {\r\n let currentSearchCriteria = this.props.currentSearch;\r\n currentSearchCriteria.pageNumber = this.props.currentPageNumber;\r\n currentSearchCriteria.sortKey = this.props.currentSort.sortKey;\r\n currentSearchCriteria.sortDirection = this.props.currentSort.sortDirection;\r\n this.props.startSearchSequence(currentSearchCriteria); \r\n this.props.selectSearchSequenceRow(this.props.searchResultsDetails);\r\n }\r\n\r\n let searchCriteria = {\r\n currentOrExpired: 'ALL',\r\n searchByTaxLienMethod: 'TAXPAYER',\r\n taxpayerName: event.target.getAttribute(\"data-taxpayername\")\r\n }\r\n\r\n this.props.searchByTaxLien(searchCriteria, this.props.history, this.hideLoading);\r\n }\r\n\r\n render() {\r\n\r\n const numberOfVisibleRecords = 3;\r\n\r\n let bookTypeLabel = \"\";\r\n if (this.props.bookType === true){\r\n bookTypeLabel = \"/Type\";\r\n }\r\n\r\n if (this.props.searchResultsDetails === 0) {\r\n return (<SearchResultsDetailsNoResults />)\r\n } \r\n\r\n let selectedSearchResult = this.props.searchResults.searchResultList.find((searchResult) => {\r\n return this.props.searchResultsDetails == searchResult.docId;\r\n });\r\n\r\n let { displayDocNumber, lienNumber, instrumentDescription, lienDate, recordedDateTime, instrumentDate, totalAmount, lienType,\r\n taxpayerSearchResults, releaseSearchResults, revisionSearchResults, displayBookAndPage } = selectedSearchResult;\r\n let docType = selectedSearchResult.sourcedDocKey.docKeyType;\r\n let docNumber = selectedSearchResult.sourcedDocKey.docKeyNumber;\r\n\r\n let numberOfTaxpayerSearchResultsPages = Math.ceil ( taxpayerSearchResults.length / numberOfVisibleRecords );\r\n let paginationHelperTaxpayers = getPaginatorHelper(this.props.paginationPageTaxpayers, taxpayerSearchResults, numberOfVisibleRecords);\r\n\r\n let numberOfReleaseSearchResultsPages = Math.ceil ( releaseSearchResults.length / numberOfVisibleRecords );\r\n let paginationHelperReleases = getPaginatorHelper(this.props.paginationPageReleases, releaseSearchResults, numberOfVisibleRecords);\r\n\r\n let numberOfRevisionSearchResultsPages = Math.ceil ( revisionSearchResults.length / numberOfVisibleRecords );\r\n let paginationHelperRevisions = getPaginatorHelper(this.props.paginationPageRevisions, revisionSearchResults, numberOfVisibleRecords);\r\n\r\n return (\r\n <>\r\n <Col style={{ paddingLeft: 0, marginRight: 0, boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }} >\r\n <Container key={this.props.searchResultsDetails} style={{ paddingLeft: 10, paddingTop: 10, paddingRight: 0, paddingBottom: 10, marginRight: 0 }} fluid=\"true\">\r\n\r\n <Row >\r\n <Col>\r\n <h5>\r\n <span><strong>{instrumentDescription}</strong> </span>\r\n <span className=\"badge badge-secondary\">{lienType}</span>\r\n </h5>\r\n </Col>\r\n </Row>\r\n <hr style={{ background: 'black', marginTop: 2, marginBottom: 2 }}></hr>\r\n\r\n <div>\r\n <div>\r\n <strong>Document #: </strong> \r\n <a name=\"searchByDocumentNumber\" href='#BogusToRemoveWarning' style={{ textDecoration: 'none' }} data-documentnumber={docNumber} data-documenttype={docType} onClick={this.handleDocumentClick}> {displayDocNumber}</a>\r\n </div>\r\n <div><strong>Recorded Date: </strong>{recordedDateTime}</div>\r\n <div><strong>Lien Date: </strong>{lienDate}</div>\r\n <div><strong>Lien #: </strong>{lienNumber} </div>\r\n <div><strong>Instrument Date: </strong>{instrumentDate}</div>\r\n <div><strong>Total Amount: </strong>{totalAmount}</div>\r\n <div><strong>{this.props.bookLabel}/Page{bookTypeLabel}: </strong>{displayBookAndPage}</div>\r\n\r\n <Table striped bordered hover variant=\"dark\" size=\"sm\" style={{ marginBottom: 0, marginTop: 10 }}>\r\n <thead>\r\n <tr>\r\n <th style={{ width: '34%' }} scope=\"col\">Taxpayer</th>\r\n <th style={{ width: '33%' }} scope=\"col\">Address</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {\r\n paginationHelperTaxpayers.currentPageRecordList.map(taxpayer => {\r\n return <tr>\r\n \r\n <td className=\"table-td-xs\">\r\n {\r\n this.props.tableLoading === true &&\r\n <span>{taxpayer.name}</span>\r\n }\r\n {\r\n this.props.tableLoading !== true &&\r\n <a name=\"searchByTaxLienTaxpayer\" href='#BogusToRemoveWarning' style={{ textDecoration: 'none' }} data-taxpayername={taxpayer.name} onClick={this.handleTaxpayerClick}> {taxpayer.name}</a>\r\n }\r\n </td>\r\n \r\n <td className=\"table-td-xs\">\r\n {taxpayer.displayAddress}\r\n </td>\r\n\r\n </tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n <Row>\r\n <Col><Paginator componentName={SearchResultsDetailsTaxpayersComponetName} numberOfPages={numberOfTaxpayerSearchResultsPages} numberOfVisibleRecords={numberOfVisibleRecords} ></Paginator></Col>\r\n </Row>\r\n\r\n <Table striped bordered hover variant=\"dark\" size=\"sm\" style={{ marginBottom: 0, marginTop: 10 }}>\r\n <thead>\r\n <tr>\r\n <th style={{ width: '10%' }} scope=\"col\">Revision</th>\r\n <th style={{ width: '23%' }} scope=\"col\">Document</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {\r\n paginationHelperRevisions.currentPageRecordList.map(amendment => {\r\n return <tr>\r\n <td className=\"table-td-xs\">\r\n {amendment.flag}\r\n </td>\r\n <td className=\"table-td-xs\">\r\n {\r\n this.props.tableLoading === true &&\r\n <span>{amendment.displayDocNumber}</span>\r\n }\r\n {\r\n this.props.tableLoading !== true &&\r\n <a name=\"searchByTaxLienDocumentNumber\" href='#BogusToRemoveWarning' style={{ textDecoration: 'none' }} data-documentnumber={amendment.docNumber} data-documenttype={amendment.docType} onClick={this.handleLienDocumentClick}> {amendment.displayDocNumber}</a>\r\n }\r\n </td>\r\n </tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n <Row>\r\n <Col><Paginator componentName={SearchResultsDetailsRevisionsComponetName} numberOfPages={numberOfRevisionSearchResultsPages} numberOfVisibleRecords={numberOfVisibleRecords} ></Paginator></Col>\r\n </Row>\r\n \r\n <Table striped bordered hover variant=\"dark\" size=\"sm\" style={{ marginBottom: 0, marginTop: 10 }}>\r\n <thead>\r\n <tr>\r\n <th style={{ width: '10%' }} scope=\"col\">Release</th>\r\n <th style={{ width: '23%' }} scope=\"col\">Released By</th>\r\n <th style={{ width: '22' }} scope=\"col\">Date</th>\r\n <th style={{ width: '23%' }} scope=\"col\">Revoked By</th>\r\n <th style={{ width: '22%' }} scope=\"col\">Date</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {\r\n paginationHelperReleases.currentPageRecordList.map(release => {\r\n return <tr>\r\n <td className=\"table-td-xs\">\r\n {release.partialFullFlag}\r\n </td>\r\n <td className=\"table-td-xs\">\r\n {\r\n this.props.tableLoading === true &&\r\n <span>{release.releaseDisplayDocNumber}</span>\r\n }\r\n {\r\n this.props.tableLoading !== true &&\r\n <a name=\"searchByDocumentNumber\" href='#BogusToRemoveWarning' style={{ textDecoration: 'none' }} data-documentnumber={release.releaseDocNumber} data-documenttype={release.releaseDocType} onClick={this.handleDocumentClick}> {release.releaseDisplayDocNumber}</a>\r\n }\r\n </td>\r\n <td className=\"table-td-xs\">\r\n {release.releaseDate}\r\n </td>\r\n <td className=\"table-td-xs\">\r\n {\r\n this.props.tableLoading === true &&\r\n <span>{release.revokeDisplayDocNumber}</span>\r\n }\r\n {\r\n this.props.tableLoading !== true &&\r\n <a name=\"searchByDocumentNumber\" href='#BogusToRemoveWarning' style={{ textDecoration: 'none' }} data-documentnumber={release.revokeDocNumber} data-documenttype={release.revokeDocType} onClick={this.handleDocumentClick}> {release.revokeDisplayDocNumber}</a>\r\n }\r\n </td>\r\n <td className=\"table-td-xs\">\r\n {release.revokeDate}\r\n </td>\r\n </tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n <Row>\r\n <Col><Paginator componentName={SearchResultsDetailsReleasesComponetName} numberOfPages={numberOfReleaseSearchResultsPages} numberOfVisibleRecords={numberOfVisibleRecords} ></Paginator></Col>\r\n </Row>\r\n\r\n </div>\r\n </Container>\r\n </Col>\r\n <Loading loadingIndicator={this.state.loadingStatus === 'LOADING'} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(TaxLienSearchResultsDetails);","import axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\n\r\n \r\nimport { SEARCH_RESULTS_BATCH_SIZE, loadTableBatches } from \"./searchActions\";\r\nimport { UserSelectionListComponentName } from \"../../components/common/selection/UserSelectionList\"\r\nimport { AccountSelectionListComponentName } from \"../../components/common/selection/AccountSelectionList\"\r\nimport { AccountsControlPanelKey } from \"./controlPanelActions\";\r\nimport { UserListComponetName } from \"./userManagerActions\";\r\nimport { SearchResultsTableComponetName } from \"../../components/search/searchResults/SearchResultsTable\";\r\nimport { SearchResultsDetailsGrantorsGranteesComponetName, SearchResultsDetailsLegalDescriptionsComponetName, SearchResultsDetailsReferenceDocumentsComponetName, SearchResultsDetailsTorrensCertificatesComponetName } from \"../../components/search/searchResults/SearchResultsDetails\";\r\nimport { SearchResultsDetailsTaxpayersComponetName, SearchResultsDetailsReleasesComponetName, SearchResultsDetailsRevisionsComponetName } from \"../../components/search/searchResults/TaxLienSearchResultsDetails\";\r\nimport { PlatSeclectionListComponentName } from \"../../components/common/selection/PlatSelectionList\"\r\n\r\nexport const setSelectedPaginationPage = (listType, pageNumber) => {\r\n\r\n let actionType = '';\r\n\r\n switch (listType) {\r\n\r\n case SearchResultsTableComponetName:\r\n actionType = 'SET_SELECTED_SEARCH_RESULTS_PAGE'\r\n break;\r\n\r\n case SearchResultsDetailsGrantorsGranteesComponetName:\r\n actionType = 'SET_SELECTED_DETAILS_GRANTORS_GRANTEES_PAGE'\r\n break;\r\n\r\n case SearchResultsDetailsLegalDescriptionsComponetName:\r\n actionType = 'SET_SELECTED_DETAILS_LEGAL_DESCRIPTIONS_PAGE'\r\n break;\r\n\r\n case SearchResultsDetailsReferenceDocumentsComponetName:\r\n actionType = 'SET_SELECTED_DETAILS_REFERENCE_DOCUMENTS_PAGE'\r\n break;\r\n\r\n case SearchResultsDetailsTaxpayersComponetName:\r\n actionType = 'SET_SELECTED_DETAILS_TAXPAYERS_PAGE'\r\n break;\r\n\r\n case SearchResultsDetailsReleasesComponetName:\r\n actionType = 'SET_SELECTED_DETAILS_RELEASES_PAGE'\r\n break;\r\n\r\n case SearchResultsDetailsRevisionsComponetName:\r\n actionType = 'SET_SELECTED_DETAILS_REVISIONS_PAGE'\r\n break;\r\n\r\n case SearchResultsDetailsTorrensCertificatesComponetName:\r\n actionType = 'SET_SELECTED_DETAILS_TORRENS_CERTIFICATES_PAGE'\r\n break;\r\n\r\n case AccountsControlPanelKey: // Account List\r\n actionType = 'SET_SELECTED_ACCOUNTS_PAGE'\r\n break;\r\n\r\n case AccountSelectionListComponentName: // Account List\r\n actionType = 'SET_SELECTED_ACCOUNT_SELECTION_PAGE'\r\n break;\r\n\r\n case UserListComponetName: // User Manager\r\n actionType = 'SET_SELECTED_USERS_PAGE'\r\n break;\r\n\r\n case UserSelectionListComponentName: // User Selection Popup\r\n actionType = 'SET_SELECTED_USER_SELECTION_PAGE'\r\n break;\r\n\r\n case PlatSeclectionListComponentName: // Plat Finder\r\n actionType = 'SET_SELECTED_PLAT_SELECTION_PAGE'\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n return {\r\n type: actionType,\r\n pageNumber\r\n }\r\n}\r\n\r\nexport const pageinateSearch = (pageNumber, sort, url, searchCriteria, callback) => async dispatch => {\r\n if (url.charAt(0) === '/') {\r\n url = url.substring(1);\r\n }\r\n\r\n let totalRecordCount = 0;\r\n\r\n let searchCriteriaObject = JSON.parse(searchCriteria);\r\n searchCriteriaObject.pageNumber = pageNumber;\r\n searchCriteriaObject.sortDirection = sort.sortDirection;\r\n searchCriteriaObject.sortKey = sort.sortKey;\r\n await axios.post(configData.LANDSHARK_SERVER_URL + url, searchCriteriaObject, { withCredentials: true })\r\n .then((response) => {\r\n let content = response.data.content;\r\n if (content.searchResults.totalRecordCount > 0) {\r\n handleSearchResults(dispatch, content);\r\n }\r\n totalRecordCount = response.data.content.searchResults.totalRecordCount;\r\n dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_PAGE', pageNumber }); // This is the search results table\r\n callback(\"OK\");\r\n }, (error) => {\r\n });\r\n\r\n if (totalRecordCount >= SEARCH_RESULTS_BATCH_SIZE) {\r\n dispatch(loadTableBatches(searchCriteriaObject, url)); \r\n }\r\n};\r\n\r\nconst handleSearchResults = (dispatch, content) => {\r\n dispatch({ type: 'UPDATE_PAGINATED_SEARCH_RESULTS', searchResults: content.searchResults }); // This is the search results table\r\n dispatch({ type: 'UPDATE_CURRENT_USER_USAGE_BALANCE', usageBalance: content.usageBalance });\r\n};\r\n\r\n","import React, { Component } from 'react';\r\nimport Pagination from 'react-bootstrap/Pagination'\r\nimport { connect } from \"react-redux\";\r\nimport { setSelectedPaginationPage } from \"../../../redux/actions/paginatorActions\";\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tsetSelectedPaginationPage: (componentName, activePageNumber) => dispatch(setSelectedPaginationPage(componentName, activePageNumber))\r\n\t}\r\n}\r\n\r\nclass Paginator extends Component {\r\n \r\n state = {\r\n startingPageNumber: 1, // current starting pagination number\r\n activePageNumber: 1, // currently selected page number\r\n }\r\n\r\n handlePageClick = (event) => {\r\n event.preventDefault();\r\n let newActivePageNumber = Number(event.target.id);\r\n this.setState({\r\n activePageNumber: newActivePageNumber\r\n })\r\n \r\n this.props.setSelectedPaginationPage(this.props.componentName, newActivePageNumber);\r\n }\r\n\r\n handleFirstPageClick = (event) => {\r\n event.preventDefault();\r\n \r\n this.setState({\r\n startingPageNumber: 1,\r\n activePageNumber: 1\r\n })\r\n \r\n this.props.setSelectedPaginationPage(this.props.componentName, 1);\r\n }\r\n\r\n handleForwardOnePageClick = (event) => {\r\n event.preventDefault();\r\n let newActivePageNumber = this.state.activePageNumber + 1; // move forward 1 page\r\n if (newActivePageNumber > this.props.numberOfPages) { // make sure it stays within the upper bound\r\n newActivePageNumber = this.props.numberOfPages;\r\n }\r\n\r\n let newStartingPageNumber = this.state.startingPageNumber;\r\n let endingPageNumber = this.state.startingPageNumber + this.props.numberOfVisibleRecords - 1;\r\n if (newActivePageNumber > endingPageNumber) { // if the active page is not in view, scroll forward\r\n newStartingPageNumber = newActivePageNumber - this.props.numberOfVisibleRecords + 1;\r\n }\r\n \r\n this.setState({\r\n startingPageNumber: newStartingPageNumber,\r\n activePageNumber: newActivePageNumber\r\n })\r\n \r\n this.props.setSelectedPaginationPage(this.props.componentName, newActivePageNumber);\r\n }\r\n\r\n handleBackwardOnePageClick = (event) => {\r\n event.preventDefault();\r\n let newActivePageNumber = this.state.activePageNumber - 1; // move backward 1 page\r\n if (newActivePageNumber < 1) { // make sure it stays within the lower bound\r\n newActivePageNumber = 1;\r\n }\r\n\r\n let newStartingPageNumber = this.state.startingPageNumber;\r\n if (newActivePageNumber < newStartingPageNumber) { // if the active page is not in view, scroll backward\r\n newStartingPageNumber = newActivePageNumber;\r\n }\r\n\r\n if (newStartingPageNumber < 1) { // make sure it stays within the lower bound\r\n newStartingPageNumber = 1;\r\n }\r\n \r\n this.setState({\r\n startingPageNumber: newStartingPageNumber,\r\n activePageNumber: newActivePageNumber\r\n })\r\n \r\n this.props.setSelectedPaginationPage(this.props.componentName, newActivePageNumber);\r\n }\r\n\r\n handleForwardTenPagesClick = (event) => {\r\n event.preventDefault();\r\n let newActivePageNumber = this.state.activePageNumber + 10; // move forward 10 pages\r\n if (newActivePageNumber > this.props.numberOfPages) { // make sure it stays within the upper bound\r\n newActivePageNumber = this.props.numberOfPages;\r\n }\r\n\r\n let newStartingPageNumber = this.state.startingPageNumber;\r\n let endingPageNumber = newStartingPageNumber + this.props.numberOfVisibleRecords - 1;\r\n while (newActivePageNumber > endingPageNumber) { // while the active page is not visible, scroll forward until visible\r\n newStartingPageNumber += this.props.numberOfVisibleRecords;\r\n endingPageNumber = newStartingPageNumber + this.props.numberOfVisibleRecords - 1;\r\n }\r\n\r\n if (newStartingPageNumber > this.props.numberOfPages - this.props.numberOfVisibleRecords + 1) { // make sure it stays within the upper bound\r\n newStartingPageNumber = this.props.numberOfPages - this.props.numberOfVisibleRecords + 1;\r\n }\r\n \r\n this.setState({\r\n startingPageNumber: newStartingPageNumber,\r\n activePageNumber: newActivePageNumber\r\n })\r\n \r\n this.props.setSelectedPaginationPage(this.props.componentName, newActivePageNumber);\r\n }\r\n\r\n handleBackwardTenPagesClick = (event) => {\r\n event.preventDefault();\r\n let newActivePageNumber = this.state.activePageNumber - 10; // move backward 10 pages\r\n if (newActivePageNumber < 1) { // make sure it stays within the lower bound\r\n newActivePageNumber = 1;\r\n }\r\n\r\n let newStartingPageNumber = this.state.startingPageNumber;\r\n while (newActivePageNumber < newStartingPageNumber) { // while the active page is not visible, scroll backward until visible\r\n newStartingPageNumber -= this.props.numberOfVisibleRecords;\r\n }\r\n\r\n if (newStartingPageNumber < 1) { // make sure it stays within the lower bound\r\n newStartingPageNumber = 1;\r\n }\r\n \r\n this.setState({\r\n startingPageNumber: newStartingPageNumber,\r\n activePageNumber: newActivePageNumber\r\n })\r\n \r\n this.props.setSelectedPaginationPage(this.props.componentName, newActivePageNumber);\r\n }\r\n\r\n handleLastPageClick = (event) => {\r\n event.preventDefault();\r\n let newStartingPageNumber = this.props.numberOfPages - this.props.numberOfVisibleRecords + 1;\r\n this.setState({\r\n startingPageNumber: newStartingPageNumber,\r\n activePageNumber: this.props.numberOfPages\r\n })\r\n\r\n this.props.setSelectedPaginationPage(this.props.componentName, this.props.numberOfPages);\r\n }\r\n\r\n\tcomponentDidMount() {\r\n this.setState({\r\n startingPageNumber: 1,\r\n activePageNumber: 1\r\n })\r\n \r\n this.props.setSelectedPaginationPage(this.props.componentName, 1);\r\n }\r\n\r\n render() {\r\n\r\n let endingNumber = this.state.startingPageNumber + this.props.numberOfVisibleRecords;\r\n if (this.props.numberOfPages < this.props.numberOfVisibleRecords) {\r\n endingNumber = this.state.startingPageNumber + this.props.numberOfPages;\r\n } \r\n\r\n let paginationItems = [];\r\n for (let number = this.state.startingPageNumber; number < endingNumber; number++) {\r\n paginationItems.push(\r\n <Pagination.Item key={number} id={number} style={{ borderTop: '3px solid darkGray', borderBottom: '3px solid darkGray' }} onClick={this.handlePageClick} active={number === this.state.activePageNumber}> \r\n {number}\r\n </Pagination.Item>,\r\n );\r\n }\r\n \r\n let firstPagePageLink = <></>\r\n let lastPagePageLink = <></>\r\n\r\n // round corners\r\n let backwardOnePagePageLink = <Pagination.Item key=\"backward1\" id=\"backward1\" style={{ border: '3px solid darkGray', borderTopLeftRadius: '5px', borderBottomLeftRadius: '5px' }} onClick={this.handleBackwardOnePageClick}>Prev</Pagination.Item>\r\n let forwardOnePagePageLink = <Pagination.Item key=\"forward1\" id=\"forward1\" style={{ border: '3px solid darkGray', borderTopRightRadius: '5px', borderBottomRightRadius: '5px' }} onClick={this.handleForwardOnePageClick}>Next</Pagination.Item>\r\n \r\n let backwardTenPagesPageLink = <></>\r\n let forwardTenPagesPageLink = <></>\r\n\r\n if (this.props.numberOfPages > this.props.numberOfVisibleRecords) {\r\n // round corners\r\n firstPagePageLink = <Pagination.Item key=\"first\" id=\"first\" style={{ borderTop: '3px solid darkGray', borderBottom: '3px solid darkGray', borderLeft: '3px solid darkGray', borderTopLeftRadius: '5px', borderBottomLeftRadius: '5px' }} onClick={this.handleFirstPageClick}>First</Pagination.Item>\r\n lastPagePageLink = <Pagination.Item key=\"last\" id=\"last\" style={{ borderTop: '3px solid darkGray', borderBottom: '3px solid darkGray', borderRight: '3px solid darkGray', borderTopRightRadius: '5px', borderBottomRightRadius: '5px' }} onClick={this.handleLastPageClick}>Last</Pagination.Item>\r\n \r\n // change to sharp corners, as they are no longer the rightmost and leftmost page links.\r\n backwardOnePagePageLink = <Pagination.Item key=\"backward1\" id=\"backward1\" style={{ border: '3px solid darkGray' }} onClick={this.handleBackwardOnePageClick}>Prev</Pagination.Item>\r\n forwardOnePagePageLink = <Pagination.Item key=\"forward1\" id=\"forward1\" style={{ border: '3px solid darkGray' }} onClick={this.handleForwardOnePageClick}>Next</Pagination.Item>\r\n \r\n if (this.props.numberOfPages > 30) { // show the \"move 10 pages\" links only if the number of pages is greater than 30\r\n backwardTenPagesPageLink = <Pagination.Item key=\"backward10\" id=\"backward10\" style={{ borderTop: '3px solid darkGray', borderBottom: '3px solid darkGray', borderLeft: '3px solid darkGray' }} onClick={this.handleBackwardTenPagesClick}>-10</Pagination.Item>\r\n forwardTenPagesPageLink = <Pagination.Item key=\"forward10\" id=\"forward10\" style={{ borderTop: '3px solid darkGray', borderBottom: '3px solid darkGray', borderRight: '3px solid darkGray' }} onClick={this.handleForwardTenPagesClick}>+10</Pagination.Item>\r\n }\r\n }\r\n \r\n return (\r\n <>\r\n { this.props.numberOfPages > 1 && // show pagination only if there's more than 1 page\r\n <Pagination size=\"sm\">\r\n {firstPagePageLink}\r\n {backwardTenPagesPageLink}\r\n {backwardOnePagePageLink}\r\n {paginationItems}\r\n {forwardOnePagePageLink}\r\n {forwardTenPagesPageLink}\r\n {lastPagePageLink}\r\n </Pagination>\r\n }\r\n </>\r\n )\r\n }\r\n}\r\n\r\n\r\nexport default connect(null, mapDispatchToProps)(Paginator);","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nimport { Modal, Container, Col, Row, Button, Form, InputGroup, Table } from 'react-bootstrap'\r\nimport Paginator from '../page/Paginator'\r\nimport { getPaginatorHelper } from '../page/PaginatorHelper'\r\nimport Loading from '../modal/Loading';\r\n\r\nimport { arrowAltDownIcon } from \"../../../img/font_awesome/font_awesome\"\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nexport const PlatSeclectionListComponentName = \"PlatSeclectionListComponentName\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n paginationPage: state.platSelectionListPaginationReducer,\r\n allPlatNameList: state.platsReducer.codeDescriptionResultList,\r\n allPlatNumberList: state.platsByNumberReducer.codeDescriptionResultList\r\n };\r\n}\r\n\r\nclass PlatSeclectionList extends React.Component {\r\n state = {\r\n sort: 'platName',\r\n filteredList: this.props.allPlatNameList,\r\n filterText: this.props.filterText? this.props.filterText : '',\r\n loadingStatus: ''\r\n }\r\n\r\n handleReset = () => {\r\n if (this.state.sort === 'platName') {\r\n this.setState({\r\n filteredList: this.props.allPlatNameList,\r\n filterText: '',\r\n });\r\n } else {\r\n this.setState({\r\n filteredList: this.props.allPlatNumberList,\r\n filterText: '',\r\n });\r\n }\r\n }\r\n\r\n handleTextFilter = (filterText) => {\r\n\t\tthis.setState({ filterText: filterText }, function() { this.handleFilter() } )\r\n\t}\r\n\r\n handleFilter = () => { \r\n if (!this.state.filterText || this.state.filterText.trim() === '') {\r\n return;\r\n }\r\n \r\n if (this.state.sort === 'platName') {\r\n let index;\r\n for (index = 0; index < this.props.allPlatNameList.length; index++) {\r\n const description = this.props.allPlatNameList[index].description;\r\n if (description.toUpperCase() >= this.state.filterText.toUpperCase()) {\r\n break;\r\n }\r\n }\r\n const filteredList = this.props.allPlatNameList.slice(index, this.props.allPlatNameList.length);\r\n this.setState({filteredList});\r\n } else {\r\n let index;\r\n for (index = 0; index < this.props.allPlatNumberList.length; index++) {\r\n const code = this.props.allPlatNumberList[index].code.toUpperCase();\r\n const codeNumeric = !isNaN(code);\r\n const filterText = this.state.filterText.toUpperCase(); \r\n const filterTextNumeric = !isNaN(filterText);\r\n // If both the code and the filter text are numeric, compare them numerically.\r\n if (codeNumeric && filterTextNumeric && parseInt(code) >= parseInt(filterText)) {\r\n break;\r\n // If the code is not numeric, such as 123A or A123, and the filter text is numeric, such as 123 or 456.\r\n } else if (!codeNumeric && filterTextNumeric) {\r\n const indexFirstNumber = code.search(/[0-9]/);\r\n // If the code starts with a number, such as 123A.\r\n if (indexFirstNumber === 0) {\r\n // Locate the index of the first non-numeric character.\r\n const indexFirstNonNumber = code.search(/[^0-9]/);\r\n // Substring out leading number. For example, substring 123 from 123A.\r\n const number = code.substring(0, indexFirstNonNumber);\r\n // Compare the substring'd number and the filter text numerically.\r\n if (parseInt(number) >= parseInt(filterText)) {\r\n break;\r\n }\r\n // else the code is something such as A123 or ABC, it's alphanumeric and it's greater than a number, so break.\r\n } else {\r\n break;\r\n }\r\n // if both the code and the filter text are not numeric, compare them non-numerically.\r\n } else if (!codeNumeric && !filterTextNumeric && code >= filterText) {\r\n break;\r\n }\r\n }\r\n const filteredList = this.props.allPlatNumberList.slice(index, this.props.allPlatNumberList.length);\r\n this.setState({filteredList});\r\n }\r\n }\r\n\r\n handleCloseClick = () => {\r\n this.props.onHide();\r\n }\r\n\r\n handleRowClick = (event) => {\r\n this.props.onHide(event.target.closest(\"tr\").id, event.target.closest(\"tr\").getAttribute(\"name\"));\r\n }\r\n\r\n handleChange = (event) => {\r\n event.preventDefault();\r\n this.setState({\r\n filterText: event.target.value\r\n })\r\n }\r\n\r\n handleSortChange = (event) => {\r\n event.preventDefault();\r\n if (this.state.sort === 'platName') {\r\n this.setState({\r\n sort: 'platNumber',\r\n filteredList: this.props.allPlatNumberList,\r\n filterText: ''\r\n })\r\n } else {\r\n this.setState({\r\n sort: 'platName',\r\n filteredList: this.props.allPlatNameList,\r\n filterText: ''\r\n })\r\n }\r\n }\r\n \r\n showLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n // 13 is Enter. \r\n if (event.type === 'keyPress' && event.keyCode !== 13) {\r\n const entry = String.fromCharCode(event.keyCode);\r\n this.setState({\r\n filterText: this.state.filterText + entry\r\n })\r\n\r\n return;\r\n }\r\n this.handleTextFilter(this.state.filterText);\r\n }\r\n\r\n componentDidMount() {\r\n this.handleFilter();\r\n\t}\r\n\r\n render() {\r\n let filteredList = this.state.filteredList;\r\n if (!filteredList) {\r\n return <></>\r\n }\r\n\r\n const numberOfVisibleRecords = 10;\r\n let numberOfPages = Math.ceil(filteredList.length / numberOfVisibleRecords);\r\n let paginationHelper = getPaginatorHelper(this.props.paginationPage, filteredList, numberOfVisibleRecords);\r\n \r\n return (\r\n <>\r\n <Modal show={this.props.showModal} aria-labelledby=\"contained-modal-title-vcenter\" dialogClassName=\"modal-width\" >\r\n <Modal.Header style={{ borderBottom: '2px solid #3674AB' }} >\r\n <Modal.Title id=\"contained-modal-title-vcenter\" style={{color: '#3674AB'}}>\r\n Click row to select plat:\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"show-grid\" style={{paddingTop: 0, paddingBottom: 0}}>\r\n <Col style={{ paddingLeft: 0, paddingRight: 0 }}>\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, marginRight: 2, marginTop: 2 }}>\r\n <Row>\r\n <Col md={4} >\r\n <span>Sort list by:</span>\r\n { \r\n this.state.sort === 'platName' &&\r\n <Form.Control id='sort' as='select' onChange={this.handleSortChange} >\r\n <option value=\"platName\" selected>Plat Name</option>\r\n <option value=\"platNumber\">Plat Number</option>\r\n </Form.Control>\r\n }\r\n { \r\n this.state.sort === 'platNumber' &&\r\n <Form.Control id='sort' as='select' onChange={this.handleSortChange} >\r\n <option value=\"platName\">Plat Name</option>\r\n <option value=\"platNumber\" selected>Plat Number</option>\r\n </Form.Control>\r\n }\r\n </Col>\r\n </Row>\r\n </Container>\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, marginRight: 2, marginTop: 2 }}>\r\n <Row>\r\n <Col>Position list to:</Col>\r\n </Row>\r\n <Row>\r\n <Col>\r\n <Form onSubmit={this.handleSubmit}>\r\n <InputGroup>\r\n <Form.Control onChange={this.handleChange} type='text' value={this.state.filterText} />\r\n <InputGroup.Append>\r\n <Button style={{ color: \"white\" }} type=\"submit\" >{arrowAltDownIcon}</Button>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Form>\r\n </Col>\r\n <Col>\r\n <Button variant=\"secondary\" onClick={this.handleReset} >Reset</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, marginRight: 2, marginTop: 2, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n\r\n <Table className=\"table table-striped table-hover\">\r\n <thead>\r\n <tr>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{width: '80%'}}>Name</th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{width: '20%'}}>Number</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {\r\n paginationHelper.currentPageRecordList.map((record) => {\r\n return (\r\n <tr style={{ cursor: \"pointer\" }} id={record.code} name={record.description} onClick={this.handleRowClick} >\r\n <td className=\"table-td-xs\" style={{width: '80%'}}>{record.description}</td>\r\n <td className=\"table-td-xs\" style={{width: '20%'}}>{record.code}</td>\r\n </tr>\r\n )\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n </Container>\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, marginRight: 2, marginTop: 2 }}>\r\n <Row>\r\n <Col><Paginator style={{ justifyContent: 'center' }} componentName={PlatSeclectionListComponentName} numberOfVisibleRecords={numberOfVisibleRecords} numberOfPages={numberOfPages} ></Paginator></Col>\r\n </Row>\r\n <Row>\r\n <Col>Displaying Results: {paginationHelper.currentPageStartingRecordNumber}-{paginationHelper.currentPageEndingRecordNumber} of {filteredList.length}</Col>\r\n </Row>\r\n </Container>\r\n </Col>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button onClick={this.handleCloseClick}>Close</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(PlatSeclectionList);\r\n","export const validateCharacters = (errors, text, fieldName) => {\r\n if (text.includes(\"%\")) {\r\n errors[fieldName] = \"Invalid characters.\";\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport const validateLength = (errors, text, fieldName, minLength) => {\r\n if (text.trim().length < minLength) {\r\n errors[fieldName] = minLength + \" characters minimum.\";\r\n return false;\r\n }\r\n return true;\r\n}","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport PlatSelectionList from \"../../common/selection/PlatSelectionList\";\r\nimport { loadDocuments, setSelectedSearchType, SearchByLegalDescriptionKey, SearchByLegalDescriptionUrl } from \"../../../redux/actions/searchActions\";\r\nimport { validateCharacters } from \"../../../utils/FieldValidation\";\r\nimport { validateDates } from \"../../../utils/DateValidation\";\r\nimport { LOADING_STATUES, DIRECTION_OPTIONS } from \"../../constants/constants\";\r\n\r\nimport moment from 'moment';\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst componentName = SearchByLegalDescriptionKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByLegalDescription: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByLegalDescriptionUrl)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n let fromRecordedDate = previousSearchKeyValue.fromRecordedDate;\r\n if (!fromRecordedDate && state.countyConfigNotableDatesReducer.showNotableDates === true) {\r\n fromRecordedDate = state.landlinkConfigReducer.abstractIndexBeginDate;\r\n } \r\n \r\n if (!fromRecordedDate) {\r\n fromRecordedDate = moment('01/01/1900').format('L');\r\n }\r\n\r\n let toRecordedDate = previousSearchKeyValue.toRecordedDate;\r\n if (!toRecordedDate && state.countyConfigNotableDatesReducer.useVerificationDate === true) {\r\n toRecordedDate = state.landlinkConfigReducer.abstractVerifiedDate;\r\n }\r\n \r\n if (!toRecordedDate) {\r\n toRecordedDate = moment().format('L');\r\n }\r\n\r\n return {\r\n notableDates: state.notableDatesReducer,\r\n showNotableDates: state.countyConfigNotableDatesReducer.showNotableDates,\r\n useVerificationDate: state.countyConfigNotableDatesReducer.useVerificationDate,\r\n abstractIndexBeginDate: state.landlinkConfigReducer.abstractIndexBeginDate,\r\n abstractVerifiedDate: state.landlinkConfigReducer.abstractVerifiedDate,\r\n isPropertyCode: state.landlinkConfigReducer.propertyCode,\r\n allOnlySearch: state.countyConfigSearch2Reducer.allOnlySearch,\r\n documentType: previousSearchKeyValue.documentType ? previousSearchKeyValue.documentType : 'ALL',\r\n documentTypes: state.documentTypesReducer.codeDescriptionResultList,\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n instrumentGroups: state.instrumentGroupsReducer.codeDescriptionResultList,\r\n fromRecordedDate,\r\n toRecordedDate,\r\n instrumentGroup: previousSearchKeyValue.instrumentGroup ? previousSearchKeyValue.instrumentGroup : \"ALL\",\r\n legalType: previousSearchKeyValue.legalType ? previousSearchKeyValue.legalType : 'LB',\r\n searchMethod: previousSearchKeyValue.searchMethod ? previousSearchKeyValue.searchMethod : 'CONTAINS',\r\n section: previousSearchKeyValue.section ? previousSearchKeyValue.section : null,\r\n township: previousSearchKeyValue.township ? previousSearchKeyValue.township : null,\r\n range: previousSearchKeyValue.range ? previousSearchKeyValue.range : null,\r\n base: previousSearchKeyValue.base ? previousSearchKeyValue.base : null,\r\n meridian: previousSearchKeyValue.meridian ? previousSearchKeyValue.meridian : null,\r\n qqqq: previousSearchKeyValue.qqqq ? previousSearchKeyValue.qqqq : null,\r\n qqq: previousSearchKeyValue.qqq ? previousSearchKeyValue.qqq : null,\r\n qq: previousSearchKeyValue.qq ? previousSearchKeyValue.qq : null,\r\n q: previousSearchKeyValue.q ? previousSearchKeyValue.q : null,\r\n municipality: previousSearchKeyValue.municipality ? previousSearchKeyValue.municipality : null,\r\n otherLotLb: previousSearchKeyValue.otherLotLb ? previousSearchKeyValue.otherLotLb : null,\r\n otherLotMb: previousSearchKeyValue.otherLotMb ? previousSearchKeyValue.otherLotMb : null,\r\n otherLotCodeLb: previousSearchKeyValue.otherLotCodeLb ? previousSearchKeyValue.otherLotCodeLb : null,\r\n otherLotCodeMb: previousSearchKeyValue.otherLotCodeMb ? previousSearchKeyValue.otherLotCodeMb : null,\r\n lot: previousSearchKeyValue.lot ? previousSearchKeyValue.lot : null,\r\n sublot: previousSearchKeyValue.sublot ? previousSearchKeyValue.sublot : null,\r\n block: previousSearchKeyValue.block ? previousSearchKeyValue.block : null,\r\n plat: previousSearchKeyValue.plat ? previousSearchKeyValue.plat : null,\r\n platNumber: previousSearchKeyValue.plat ? previousSearchKeyValue.plat : null,\r\n platName: previousSearchKeyValue.platName ? previousSearchKeyValue.platName : null,\r\n building: previousSearchKeyValue.building ? previousSearchKeyValue.building : null,\r\n unit: previousSearchKeyValue.unit ? previousSearchKeyValue.unit : null,\r\n garage: previousSearchKeyValue.garage ? previousSearchKeyValue.garage : null,\r\n grantorGranteeLastNameLb: previousSearchKeyValue.grantorGranteeLastNameLb ? previousSearchKeyValue.grantorGranteeLastNameLb : null,\r\n grantorGranteeLastNameMb: previousSearchKeyValue.grantorGranteeLastNameMb ? previousSearchKeyValue.grantorGranteeLastNameMb : null,\r\n grantorGranteeFirstNameLb: previousSearchKeyValue.grantorGranteeFirstNameLb ? previousSearchKeyValue.grantorGranteeFirstNameLb : null,\r\n grantorGranteeFirstNameMb: previousSearchKeyValue.grantorGranteeFirstNameMb ? previousSearchKeyValue.grantorGranteeFirstNameMb : null,\r\n grantorGranteeMiddleInitialLb: previousSearchKeyValue.grantorGranteeMiddleInitialLb ? previousSearchKeyValue.grantorGranteeMiddleInitialLb : null,\r\n grantorGranteeMiddleInitialMb: previousSearchKeyValue.grantorGranteeMiddleInitialMb ? previousSearchKeyValue.grantorGranteeMiddleInitialMb : null,\r\n otherLotCodes: state.otherLotCodesReducer.codeDescriptionResultList,\r\n isQQQQ: state.landlinkConfigReducer.qqqq,\r\n isQQQ: state.landlinkConfigReducer.qqq,\r\n isBaseline: state.landlinkConfigReducer.baseline,\r\n isMunicipality: state.landlinkConfigReducer.municipality,\r\n isMeridian: state.landlinkConfigReducer.meridian,\r\n isMbOtherLot: state.landlinkConfigReducer.mbOtherLot,\r\n isSublot: state.landlinkConfigReducer.sublot,\r\n allPlatList: state.platsReducer.codeDescriptionResultList,\r\n allPlatNameList: state.platNamesReducer.codeDescriptionResultList,\r\n allPlatNumberList: state.platNumbersReducer.codeDescriptionResultList\r\n };\r\n}\r\n\r\nclass SearchByLegalDescription extends Component {\r\n state = {\r\n documentType: this.props.documentType,\r\n fromRecordedDate: this.props.fromRecordedDate,\r\n toRecordedDate: this.props.toRecordedDate,\r\n legalType: this.props.legalType,\r\n searchMethod: this.props.searchMethod,\r\n section: this.props.section,\r\n township: this.props.township,\r\n range: this.props.range,\r\n base: this.props.base,\r\n meridian: this.props.meridian,\r\n qqqq: this.props.qqqq,\r\n qqq: this.props.qqq,\r\n qq: this.props.qq,\r\n q: this.props.q,\r\n municipality: this.props.municipality,\r\n otherLotMb: this.props.otherLotMb,\r\n otherLotLb: this.props.otherLotLb,\r\n otherLotCodeMb: this.props.otherLotCodeMb,\r\n otherLotCodeLb: this.props.otherLotCodeLb,\r\n lot: this.props.lot,\r\n sublot: this.props.sublot,\r\n block: this.props.block,\r\n plat: this.props.plat,\r\n platName: this.props.platName,\r\n platNumber: this.props.platNumber,\r\n building: this.props.building,\r\n unit: this.props.unit,\r\n garage: this.props.garage,\r\n instrumentGroup: this.props.instrumentGroup,\r\n grantorGranteeLastNameLb: this.props.grantorGranteeLastNameLb,\r\n grantorGranteeLastNameMb: this.props.grantorGranteeLastNameMb,\r\n grantorGranteeFirstNameLb: this.props.grantorGranteeFirstNameLb,\r\n grantorGranteeFirstNameMb: this.props.grantorGranteeFirstNameMb,\r\n grantorGranteeMiddleInitialLb: this.props.grantorGranteeMiddleInitialLb,\r\n grantorGranteeMiddleInitialMb: this.props.grantorGranteeMiddleInitialMb,\r\n\r\n showPlatNumberDropdown: false,\r\n platNumberFilteredList: this.props.allPlatNumberList,\r\n showPlatNameDropdown: false,\r\n platNameFilteredList: this.props.allPlatNameList,\r\n showPlatList: false,\r\n\r\n loadingStatus: \"\",\r\n submitMessage: '',\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n\r\n let targetValue = event.target.value; \r\n if ((event.target.id !== 'platName' && event.target.id !== 'platNumber') || !this.state.plat) {\r\n this.setState({\r\n errors: {},\r\n submitMessage: '',\r\n [event.target.id]: targetValue\r\n })\r\n }\r\n \r\n if (event.target.id === 'platNameSelect') {\r\n let filteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == targetValue;\r\n });\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n platNumber: targetValue,\r\n platName: filteredList[0].description,\r\n // platFound: true,\r\n plat: targetValue\r\n })\r\n } else if (event.target.id === 'platName' && !this.state.plat) {\r\n let filteredList = this.props.allPlatNameList.filter(function (plat) {\r\n return plat.description.toUpperCase().startsWith(targetValue.toUpperCase())\r\n });\r\n\r\n if (filteredList.length === 0) {\r\n let errors = {};\r\n errors[\"platName\"] = \"No matching plat found.\";\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat: '',\r\n errors: errors\r\n })\r\n } else if (filteredList.length === 1) {\r\n let namefilteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == filteredList[0].code;\r\n });\r\n this.setState({\r\n platNumber: filteredList[0].code,\r\n platName: namefilteredList[0].description,\r\n platNameFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n // platFound: true,\r\n plat: filteredList[0].code\r\n })\r\n } else if (targetValue.length >= 2) {\r\n filteredList = [{code: \"-1\", description: \"(Click here to select a plat)\"}].concat(filteredList);\r\n \r\n this.setState({\r\n platNameFilteredList: filteredList,\r\n showPlatNameDropdown: true,\r\n showPlatNumberDropdown: false,\r\n plat:''\r\n })\r\n } else if (targetValue.length < 2) {\r\n this.setState({\r\n platNameFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat:''\r\n })\r\n }\r\n } else if (event.target.id === 'platNumberSelect') {\r\n let filteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == targetValue;\r\n });\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n platNumber: targetValue,\r\n platName: filteredList[0].description,\r\n // platFound: true,\r\n plat: targetValue\r\n })\r\n } else if (event.target.id === 'platNumber' && !this.state.plat) {\r\n let filteredList = this.props.allPlatNumberList.filter(function (plat) {\r\n return plat.code.toUpperCase().startsWith(targetValue.toUpperCase())\r\n });\r\n\r\n if (filteredList.length === 0) {\r\n let errors = {};\r\n errors[\"platNumber\"] = \"No matching plat found.\";\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat:'',\r\n errors: errors\r\n })\r\n } else if (filteredList.length === 1) {\r\n let namefilteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == filteredList[0].code;\r\n });\r\n this.setState({\r\n platNumber: filteredList[0].code,\r\n platName: namefilteredList[0].description,\r\n platNumberFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat: filteredList[0].code\r\n })\r\n } else if (targetValue.length >= 2) {\r\n filteredList = [{code: \"-1\", description: \"(Click here to select a plat)\"}].concat(filteredList);\r\n \r\n this.setState({\r\n platNumberFilteredList: filteredList,\r\n showPlatNumberDropdown: true,\r\n showPlatNameDropdown: false,\r\n plat:''\r\n })\r\n } else if (targetValue.length < 2) {\r\n this.setState({\r\n platNumberFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat:''\r\n })\r\n }\r\n }\r\n\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { platNameFilteredList, platNumberFilteredList, loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByLegalDescription(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation = () => {\r\n let errors = {};\r\n\r\n if (this.state.legalType === 'LB') {\r\n if (!this.state.plat) {\r\n errors[\"platNumber\"] = \"A valid plat required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.grantorGranteeLastNameLb && this.state.grantorGranteeFirstNameLb) {\r\n errors[\"grantorGranteeLastNameLb\"] = \"Required if First Name entered.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.grantorGranteeLastNameLb && this.state.grantorGranteeMiddleInitialLb) {\r\n errors[\"grantorGranteeLastNameLb\"] = \"Required if MI entered.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.grantorGranteeFirstNameLb && this.state.grantorGranteeMiddleInitialLb) {\r\n errors[\"grantorGranteeFirstNameLb\"] = \"Required if MI entered.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n } else {\r\n if (!this.state.grantorGranteeLastNameMb && this.state.grantorGranteeFirstNameMb) {\r\n errors[\"grantorGranteeLastNameMb\"] = \"Required if First Name entered.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.grantorGranteeLastNameMb && this.state.grantorGranteeMiddleInitialMb) {\r\n errors[\"grantorGranteeLastNameMb\"] = \"Required if MI entered.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.grantorGranteeFirstNameMb && this.state.grantorGranteeMiddleInitialMb) {\r\n errors[\"grantorGranteeFirstNameMb\"] = \"Required if MI entered.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (this.state.section && this.state.section.search(/^[0-9]+$/) === -1) {\r\n errors[\"section\"] = \"Numbers only.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (this.state.township && this.state.township.search(/^[0-9]+$/) === -1) {\r\n errors[\"township\"] = \"Numbers only.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (this.state.range && this.state.range.search(/^[0-9]+$/) === -1) {\r\n errors[\"range\"] = \"Numbers only.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n } \r\n }\r\n\r\n let formIsValid = validateDates(errors, this.state.fromRecordedDate, 'fromRecordedDate', this.state.toRecordedDate, 'toRecordedDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n\r\n let fromRecordedDate = moment('01/01/1900').format('L');\r\n if (this.props.showNotableDates === true) {\r\n fromRecordedDate = this.props.abstractIndexBeginDate;\r\n } \r\n \r\n let toRecordedDate = moment().format('L');\r\n if (this.props.useVerificationDate === true) {\r\n toRecordedDate = this.props.abstractVerifiedDate;\r\n }\r\n\r\n this.setState({\r\n documentType: 'ALL',\r\n fromRecordedDate,\r\n toRecordedDate,\r\n section: '',\r\n township: '',\r\n range: '',\r\n base: '',\r\n meridian: '',\r\n qqqq: '',\r\n qqq: '',\r\n qq: '',\r\n q: '',\r\n municipality: '',\r\n otherLotMb: '',\r\n otherLotLb: '',\r\n otherLotCodeMb: '',\r\n otherLotCodeLb: '',\r\n lot: '',\r\n sublot: '',\r\n block: '',\r\n plat: '',\r\n platNumber: '',\r\n platName: '',\r\n showPlatNumberDropdown: false,\r\n platNumberFilteredList: this.props.allPlatNumberList,\r\n showPlatNameDropdown: false,\r\n platNameFilteredList: this.props.allPlatNameList,\r\n showPlatList: false,\r\n building: '',\r\n unit: '',\r\n garage: '',\r\n instrumentGroup: 'ALL',\r\n grantorGranteeLastNameLb: '',\r\n grantorGranteeLastNameMb: '',\r\n grantorGranteeFirstNameLb: '',\r\n grantorGranteeFirstNameMb: '',\r\n grantorGranteeMiddleInitialLb: '',\r\n grantorGranteeMiddleInitialMb: '',\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n handleDatePickerChangeFromRecordedDate = (date) => {\r\n this.setState({\r\n fromRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToRecordedDate = (date) => {\r\n this.setState({\r\n toRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handlePlatLookup = () => {\r\n this.setState({\r\n showPlatList: true\r\n });\r\n }\r\n\r\n handlePlatReset = () => {\r\n this.setState({\r\n plat: '',\r\n platName: '',\r\n platNumber: '',\r\n showPlatNumberDropdown: false,\r\n platNumberFilteredList: this.props.allPlatNumberList,\r\n showPlatNameDropdown: false,\r\n platNameFilteredList: this.props.allPlatNameList,\r\n showPlatList: false,\r\n errors: {}\r\n });\r\n }\r\n\r\n handleClosePlatLookup = (selectedId, selectedName) => {\r\n \r\n this.setState({\r\n errors: {},\r\n showPlatList: false\r\n })\r\n\r\n if (selectedId) {\r\n this.setState({\r\n plat: selectedId,\r\n platNumber: selectedId,\r\n platName: selectedName\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n var hideBaseMeridianMunicipalityRow = this.state.legalType !== 'MB' || (this.props.isBaseline === false && this.props.isMunicipality === false && this.props.isMeridian === false)\r\n\r\n let formGroupRows = [\r\n {\r\n heading: 'Legal Description',\r\n formGroups: [{ id: 'legalType', label: 'Legal Type', fieldType: 'select', primaryCriteria: true, value: this.state.legalType, options: [{ code: 'LB', description: 'Lots & Blocks' }, { code: 'MB', description: 'Metes & Bounds' }] },\r\n { id: 'searchMethod', label: '', fieldType: 'select', primaryCriteria: true, value: this.state.searchMethod, options: [{ code: 'CONTAINS', description: 'Contains' }, { code: 'EXACT', description: 'Matches Exactly' }] }]\r\n },\r\n {\r\n formGroups: [{ id: 'section', label: 'Section', fieldType: 'text', hideRow: this.state.legalType !== 'MB', value: this.state.section, error: this.state.errors['section'] },\r\n { id: 'township', label: 'Township', fieldType: 'text', primaryCriteria: true, required: this.state.legalType === 'MB', value: this.state.township, error: this.state.errors['township'] },\r\n { id: 'range', label: 'Range', fieldType: 'text', primaryCriteria: true, required: this.state.legalType === 'MB', value: this.state.range, error: this.state.errors['range'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'qqqq', label: 'QQQQ', fieldType: 'select', options: DIRECTION_OPTIONS, hideRow: this.state.legalType !== 'MB', hideField: this.props.isQQQQ === false, value: this.state.qqqq },\r\n { id: 'qqq', label: 'QQQ', fieldType: 'select', options: DIRECTION_OPTIONS, hideField: this.props.isQQQ === false, value: this.state.qqq },\r\n { id: 'qq', label: 'QQ', fieldType: 'select', options: DIRECTION_OPTIONS, value: this.state.qq },\r\n { id: 'q', label: 'Q', fieldType: 'select', options: DIRECTION_OPTIONS, value: this.state.q }]\r\n },\r\n {\r\n formGroups: [{ id: 'base', label: 'Base', fieldType: 'text', hideRow: hideBaseMeridianMunicipalityRow, hideField: this.props.isBaseline === false, value: this.state.base },\r\n { id: 'meridian', label: 'Meridian', fieldType: 'text', hideField: this.props.isMeridian === false, value: this.state.meridian },\r\n { id: 'municipality', label: 'Municipality', fieldType: 'text', hideField: this.props.isMunicipality === false, value: this.state.municipality }]\r\n },\r\n {\r\n formGroups: [\r\n { id: 'platNumber', label: 'Plat Number', primaryCriteria: true, options: this.state.platNumberFilteredList, style: {minWidth: 100}, fieldType: 'plat', required: this.state.legalType === 'LB', hideRow: this.state.legalType === 'MB', hideSelect: this.state.showPlatNumberDropdown === false, value: this.state.platNumber, error: this.state.errors['platNumber'] },\r\n { id: 'platName', label: 'Plat Name', primaryCriteria: true, options: this.state.platNameFilteredList, style: {minWidth: 300}, fieldType: 'plat', required: this.state.legalType === 'LB', hideRow: this.state.legalType === 'MB', hideSelect: this.state.showPlatNameDropdown === false, value: this.state.platName, error: this.state.errors['platName'] },\r\n { id: 'platResetButton', label: 'Reset', fieldType: 'reset', onClick: this.handlePlatReset },\r\n { id: 'platLookupButton', fieldType: 'lookupWithLabel', style: {marginLeft: 8}, label: 'Full List', onClick: this.handlePlatLookup }\r\n ]\r\n },\r\n {\r\n formGroups: [{ id: 'lot', label: 'Lot', fieldType: 'text', hideRow: this.state.legalType === 'MB', hideField: this.state.legalType === 'MB', value: this.state.lot },\r\n { id: 'block', label: 'Block', fieldType: 'text', hideField: this.state.legalType === 'MB', value: this.state.block },\r\n { id: 'sublot', label: 'Sublot', fieldType: 'text', hideField: this.state.legalType === 'MB' || this.props.isSublot === false, value: this.state.sublot }]\r\n },\r\n {\r\n formGroups: [{ id: 'otherLotCodeLb', label: 'Other Lot Type', fieldType: 'select', hideRow: this.state.legalType === 'MB' || this.props.isMbOtherLot === false, options: this.props.otherLotCodes, value: this.state.otherLotCodeLb },\r\n { id: 'otherLotLb', label: 'Other Lot', fieldType: 'text', value: this.state.otherLotLb }]\r\n },\r\n {\r\n formGroups: [{ id: 'otherLotCodeMb', label: 'Other Lot Type', fieldType: 'select', hideRow: this.state.legalType !== 'MB' || this.props.isMbOtherLot === false, options: this.props.otherLotCodes, value: this.state.otherLotCodeMb },\r\n { id: 'otherLotMb', label: 'Other Lot', fieldType: 'text', value: this.state.otherLotMb }]\r\n },\r\n {\r\n formGroups: [{ id: 'building', label: 'Building', fieldType: 'text', hideRow: this.state.legalType === 'MB', value: this.state.building },\r\n { id: 'unit', label: 'Unit', fieldType: 'text', value: this.state.unit },\r\n { id: 'garage', label: 'Garage', fieldType: 'text', value: this.state.garage }]\r\n }\r\n ]\r\n\r\n if (this.props.isPropertyCode === true && this.props.allOnlySearch !== true && this.props.allOnlySearch !== 'true') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'documentType', label: 'Document Type', fieldType: 'select', value: this.state.documentType, options: this.props.documentTypes } , { id: 'instrumentGroup', label: 'Instrument Group', fieldType: 'select', options: this.props.instrumentGroups, value: this.state.instrumentGroup }]\r\n });\r\n } else { \r\n formGroupRows.push({\r\n formGroups: [{ id: 'instrumentGroup', label: 'Instrument Group', fieldType: 'select', options: this.props.instrumentGroups, value: this.state.instrumentGroup }]\r\n });\r\n }\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'fromRecordedDate', label: 'From Date', fieldType: 'date', value: this.state.fromRecordedDate, handleDatePickerChange: this.handleDatePickerChangeFromRecordedDate, error: this.state.errors['fromRecordedDate'] },\r\n { id: 'toRecordedDate', label: 'To Date', fieldType: 'date', value: this.state.toRecordedDate, handleDatePickerChange: this.handleDatePickerChangeToRecordedDate, error: this.state.errors['toRecordedDate'] }]\r\n });\r\n\r\n formGroupRows.push({\r\n heading: 'Grantor/Grantee (Optional)',\r\n formGroups: [{ id: 'grantorGranteeLastNameLb', label: 'Business or Last Name', fieldType: 'text', hideRow: this.state.legalType === 'MB', value: this.state.grantorGranteeLastNameLb, error: this.state.errors['grantorGranteeLastNameLb'] },\r\n { id: 'grantorGranteeFirstNameLb', label: 'First Name', fieldType: 'text', value: this.state.grantorGranteeFirstNameLb, error: this.state.errors['grantorGranteeFirstNameLb'] },\r\n { id: 'grantorGranteeMiddleInitialLb', label: 'Middle Initial', fieldType: 'text', maxLength: 1, value: this.state.grantorGranteeMiddleInitialLb, error: this.state.errors['grantorGranteeMiddleInitialLb'] }]\r\n });\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'grantorGranteeLastNameMb', label: 'Business or Last Name', fieldType: 'text', hideRow: this.state.legalType !== 'MB', value: this.state.grantorGranteeLastNameMb, error: this.state.errors['grantorGranteeLastNameMb'] },\r\n { id: 'grantorGranteeFirstNameMb', label: 'First Name', fieldType: 'text', value: this.state.grantorGranteeFirstNameMb, error: this.state.errors['grantorGranteeFirstNameMb'] },\r\n { id: 'grantorGranteeMiddleInitialMb', label: 'Middle Initial', fieldType: 'text', maxLength: 1, value: this.state.grantorGranteeMiddleInitialMb, error: this.state.errors['grantorGranteeMiddleInitialMb'] }]\r\n });\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Search by Legal Description\",\r\n autoComplete: false,\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n formGroupRows: formGroupRows,\r\n formRightArea: <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />,\r\n \r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n <PlatSelectionList showModal={this.state.showPlatList} onHide={(selectedId, selectedName) => this.handleClosePlatLookup(selectedId, selectedName)} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchByLegalDescription);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { loadDocuments, setSelectedSearchType, SearchByNameKey } from \"../../../redux/actions/searchActions\";\r\nimport { validateCharacters, validateLength } from \"../../../utils/FieldValidation\";\r\nimport { validateDates } from \"../../../utils/DateValidation\";\r\n\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport translations from \"../../../config/translation/search_by_name_translations.json\";\r\nimport moment from 'moment';\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst componentName = SearchByNameKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByName: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, 'search/searchByName')),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n let fromRecordedDate = previousSearchKeyValue.fromRecordedDate;\r\n if (!fromRecordedDate && state.countyConfigNotableDatesReducer.showNotableDates === true) {\r\n fromRecordedDate = state.landlinkConfigReducer.abstractIndexBeginDate;\r\n } \r\n \r\n if (!fromRecordedDate) {\r\n fromRecordedDate = moment('01/01/1900').format('L');\r\n }\r\n\r\n let toRecordedDate = previousSearchKeyValue.toRecordedDate;\r\n if (!toRecordedDate && state.countyConfigNotableDatesReducer.useVerificationDate === true) {\r\n toRecordedDate = state.landlinkConfigReducer.abstractVerifiedDate;\r\n }\r\n \r\n if (!toRecordedDate) {\r\n toRecordedDate = moment().format('L');\r\n }\r\n\r\n return {\r\n notableDates: state.notableDatesReducer,\r\n showNotableDates: state.countyConfigNotableDatesReducer.showNotableDates,\r\n useVerificationDate: state.countyConfigNotableDatesReducer.useVerificationDate,\r\n abstractIndexBeginDate: state.landlinkConfigReducer.abstractIndexBeginDate,\r\n abstractVerifiedDate: state.landlinkConfigReducer.abstractVerifiedDate,\r\n documentTypes: state.documentTypesReducer.codeDescriptionResultList,\r\n isPropertyCode: state.landlinkConfigReducer.propertyCode,\r\n allOnlySearch: state.countyConfigSearch2Reducer.allOnlySearch,\r\n documentType: previousSearchKeyValue.documentType ? previousSearchKeyValue.documentType : 'ALL',\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n instrumentGroups: state.instrumentGroupsReducer.codeDescriptionResultList,\r\n fromRecordedDate,\r\n toRecordedDate,\r\n instrumentGroup: previousSearchKeyValue.instrumentGroup ? previousSearchKeyValue.instrumentGroup : \"ALL\",\r\n grantorGranteeSearchIn: previousSearchKeyValue.grantorGranteeSearchIn ? previousSearchKeyValue.grantorGranteeSearchIn : \"BOTH\",\r\n grantorGranteeLastName1: previousSearchKeyValue.grantorGranteeLastName1 ? previousSearchKeyValue.grantorGranteeLastName1 : null,\r\n grantorGranteeMiddleInitial1: previousSearchKeyValue.grantorGranteeMiddleInitial1 ? previousSearchKeyValue.grantorGranteeMiddleInitial1 : null,\r\n grantorGranteeFirstName1: previousSearchKeyValue.grantorGranteeFirstName1 ? previousSearchKeyValue.grantorGranteeFirstName1 : null,\r\n andOr: previousSearchKeyValue.andOr ? previousSearchKeyValue.andOr : \"OR\",\r\n grantorGranteeLastName2: previousSearchKeyValue.grantorGranteeLastName2 ? previousSearchKeyValue.grantorGranteeLastName2 : null,\r\n grantorGranteeMiddleInitial2: previousSearchKeyValue.grantorGranteeMiddleInitial2 ? previousSearchKeyValue.grantorGranteeMiddleInitial2 : null,\r\n grantorGranteeFirstName2: previousSearchKeyValue.grantorGranteeFirstName2 ? previousSearchKeyValue.grantorGranteeFirstName2 : null,\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH'\r\n };\r\n}\r\n\r\nclass SearchByName extends Component {\r\n\r\n state = {\r\n fromRecordedDate: this.props.fromRecordedDate,\r\n toRecordedDate: this.props.toRecordedDate,\r\n documentType: this.props.documentType,\r\n instrumentGroup: this.props.instrumentGroup,\r\n grantorGranteeSearchIn: this.props.grantorGranteeSearchIn,\r\n grantorGranteeLastName1: this.props.grantorGranteeLastName1,\r\n grantorGranteeFirstName1: this.props.grantorGranteeFirstName1,\r\n grantorGranteeMiddleInitial1: this.props.grantorGranteeMiddleInitial1,\r\n andOr: this.props.andOr,\r\n grantorGranteeLastName2: this.props.grantorGranteeLastName2,\r\n grantorGranteeFirstName2: this.props.grantorGranteeFirstName2,\r\n grantorGranteeMiddleInitial2: this.props.grantorGranteeMiddleInitial2,\r\n submitMessage: '',\r\n loadingStatus: \"\",\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByName(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n\r\n if (!this.state.grantorGranteeLastName1) {\r\n errors[\"grantorGranteeLastName1\"] = translations[this.props.language].required;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.grantorGranteeFirstName1 && this.state.grantorGranteeMiddleInitial1) {\r\n errors[\"grantorGranteeFirstName1\"] = translations[this.props.language].required_if_mi;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.grantorGranteeLastName2 && this.state.grantorGranteeFirstName2) {\r\n errors[\"grantorGranteeLastName2\"] = translations[this.props.language].required_if_first_name;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.grantorGranteeLastName2 && this.state.grantorGranteeMiddleInitial2) {\r\n errors[\"grantorGranteeLastName2\"] = translations[this.props.language].required_if_mi;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.grantorGranteeFirstName2 && this.state.grantorGranteeMiddleInitial2) {\r\n errors[\"grantorGranteeFirstName2\"] = translations[this.props.language].required_if_mi;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n let formIsValid = validateCharacters(errors, this.state.grantorGranteeLastName1, 'grantorGranteeLastName1');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n formIsValid = validateLength(errors, this.state.grantorGranteeLastName1, 'grantorGranteeLastName1', 2);\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (this.state.grantorGranteeLastName2) {\r\n let formIsValid = validateCharacters(errors, this.state.grantorGranteeLastName2, 'grantorGranteeLastName2');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n formIsValid = validateLength(errors, this.state.grantorGranteeLastName2, 'grantorGranteeLastName2', 2);\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n }\r\n\r\n formIsValid = validateDates(errors, this.state.fromRecordedDate, 'fromRecordedDate', this.state.toRecordedDate, 'toRecordedDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n\r\n let fromRecordedDate = moment('01/01/1900').format('L');\r\n if (this.props.showNotableDates === true) {\r\n fromRecordedDate = this.props.abstractIndexBeginDate;\r\n } \r\n \r\n let toRecordedDate = moment().format('L');\r\n if (this.props.useVerificationDate === true) {\r\n toRecordedDate = this.props.abstractVerifiedDate;\r\n }\r\n\r\n this.setState({\r\n fromRecordedDate,\r\n toRecordedDate,\r\n\r\n documentType: 'ALL',\r\n instrumentGroup: 'ALL',\r\n\r\n grantorGranteeSearchIn: 'BOTH',\r\n\r\n grantorGranteeLastName1: '',\r\n grantorGranteeFirstName1: '',\r\n grantorGranteeMiddleInitial1: '',\r\n\r\n andOr: 'OR',\r\n grantorGranteeLastName2: '',\r\n grantorGranteeFirstName2: '',\r\n grantorGranteeMiddleInitial2: '',\r\n\r\n submitMessage: '',\r\n errors: {}\r\n });\r\n }\r\n\r\n handleDatePickerChangeFromRecordedDate = (date) => {\r\n this.setState({\r\n fromRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToRecordedDate = (date) => {\r\n this.setState({\r\n toRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n render() {\r\n\r\n let formGroupRows = [\r\n {\r\n formGroups: [\r\n {\r\n id: 'grantorGranteeLastName1',\r\n label: translations[this.props.language].business_or_last_name,\r\n fieldType: 'text',\r\n required: true,\r\n primaryCriteria: true,\r\n value: this.state.grantorGranteeLastName1,\r\n error: this.state.errors['grantorGranteeLastName1']\r\n },\r\n {\r\n id: 'grantorGranteeFirstName1',\r\n label: translations[this.props.language].first_name,\r\n fieldType: 'text',\r\n placeholder: '(Optional)',\r\n value: this.state.grantorGranteeFirstName1,\r\n error: this.state.errors['grantorGranteeFirstName1']\r\n },\r\n {\r\n id: 'grantorGranteeMiddleInitial1',\r\n label: translations[this.props.language].middle_initial,\r\n fieldType: 'text',\r\n placeholder: '(Optional)',\r\n maxLength: 1,\r\n value: this.state.grantorGranteeMiddleInitial1,\r\n error: this.state.errors['grantorGranteeMiddleInitial1']\r\n },\r\n {\r\n id: 'andOr',\r\n label: translations[this.props.language].and_or,\r\n fieldType: 'select',\r\n options: [{ code: 'AND', description: translations[this.props.language].and }, { code: 'OR', description: translations[this.props.language].or }],\r\n value: this.state.andOr\r\n }\r\n ]\r\n },\r\n {\r\n formGroups: [{ id: 'grantorGranteeLastName2', label: translations[this.props.language].business_or_last_name, fieldType: 'text', value: this.state.grantorGranteeLastName2, error: this.state.errors['grantorGranteeLastName2'], error: this.state.errors['grantorGranteeLastName2'] },\r\n { id: 'grantorGranteeFirstName2', label: translations[this.props.language].first_name, fieldType: 'text', placeholder: '(Optional)', value: this.state.grantorGranteeFirstName2, error: this.state.errors['grantorGranteeFirstName2'] },\r\n { id: 'grantorGranteeMiddleInitial2', label: translations[this.props.language].middle_initial, fieldType: 'text', maxLength: 1, placeholder: '(Optional)', value: this.state.grantorGranteeMiddleInitial2, error: this.state.errors['grantorGranteeMiddleInitial2'] }, { fieldType: 'spaceHolder' }]\r\n },\r\n {\r\n formGroups: [\r\n {\r\n id: 'grantorGranteeSearchIn',\r\n label: translations[this.props.language].search_in,\r\n fieldType: 'select',\r\n options: [{ code: 'BOTH', description: translations[this.props.language].both_grantors_grantees }, { code: 'GRANTORS', description: translations[this.props.language].grantors_only }, { code: 'GRANTEES', description: translations[this.props.language].grantees_only }],\r\n value: this.state.grantorGranteeSearchIn\r\n }\r\n ]\r\n }\r\n ]\r\n\r\n if (this.props.isPropertyCode === true && this.props.allOnlySearch !== true && this.props.allOnlySearch !== 'true') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'documentType', label: translations[this.props.language].document_type, fieldType: 'select', value: this.state.documentType, options: this.props.documentTypes }]\r\n });\r\n }\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'instrumentGroup', label: translations[this.props.language].instrument_group, fieldType: 'select', options: this.props.instrumentGroups, value: this.state.instrumentGroup }]\r\n });\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'fromRecordedDate', label: translations[this.props.language].from_date, fieldType: 'date', value: this.state.fromRecordedDate, handleDatePickerChange: this.handleDatePickerChangeFromRecordedDate, error: this.state.errors['fromRecordedDate'] }]\r\n });\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'toRecordedDate', label: translations[this.props.language].to_date, fieldType: 'date', value: this.state.toRecordedDate, handleDatePickerChange: this.handleDatePickerChangeToRecordedDate, error: this.state.errors['toRecordedDate'] }]\r\n });\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: translations[this.props.language].search_by_name,\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n primaryButtonLabel: translations[this.props.language].submit,\r\n clearButtonLabel: translations[this.props.language].clear,\r\n formGroupRows: formGroupRows,\r\n formRightArea: <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />,\r\n\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchByName);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { loadDocuments, setSelectedSearchType, SearchByParcelIdKey, SearchByParcelIdUrl } from \"../../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport { validateCharacters, validateLength } from \"../../../utils/FieldValidation\";\r\nimport { validateDates } from \"../../../utils/DateValidation\";\r\nimport moment from 'moment';\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst componentName = SearchByParcelIdKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tsetSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n\t\tsearchByParcelId: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByParcelIdUrl)),\r\n\t\tresetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n\t\tresetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n\t\tresetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n\t\tresetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n\tlet previousSearchKeyValue = {};\r\n\tif (ownProps.match.params.searchHistoryNumber) {\r\n\t\tlet searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n\t\tif (searchHistoryIndex >= 0) {\r\n\t\t\tlet searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n\t\t\tif (searchHistory) {\r\n\t\t\t\tsearchHistory.displayCriteria.forEach((criteria) => {\r\n\t\t\t\t\tpreviousSearchKeyValue[criteria.key] = criteria.value;\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\t} else {\r\n\t\tlet searchCriteria = state.searchCriteriaReducer[componentName];\r\n\t\tif (searchCriteria) {\r\n\t\t\tsearchCriteria.forEach((criteria) => {\r\n\t\t\t\tpreviousSearchKeyValue[criteria.key] = criteria.value;\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tlet fromRecordedDate = previousSearchKeyValue.fromRecordedDate;\r\n\tif (!fromRecordedDate && state.countyConfigNotableDatesReducer.showNotableDates === true) {\r\n\t fromRecordedDate = state.landlinkConfigReducer.abstractIndexBeginDate;\r\n\t} \r\n\t\r\n\tif (!fromRecordedDate) {\r\n\t fromRecordedDate = moment('01/01/1900').format('L');\r\n\t}\r\n \r\n\tlet toRecordedDate = previousSearchKeyValue.toRecordedDate;\r\n\tif (!toRecordedDate && state.countyConfigNotableDatesReducer.useVerificationDate === true) {\r\n\t toRecordedDate = state.landlinkConfigReducer.abstractVerifiedDate;\r\n\t}\r\n\t\r\n\tif (!toRecordedDate) {\r\n\t toRecordedDate = moment().format('L');\r\n\t}\r\n\r\n\treturn {\r\n\t\tnotableDates: state.notableDatesReducer,\r\n\t\tshowNotableDates: state.countyConfigNotableDatesReducer.showNotableDates,\r\n\t\tuseVerificationDate: state.countyConfigNotableDatesReducer.useVerificationDate,\r\n\t\tabstractIndexBeginDate: state.landlinkConfigReducer.abstractIndexBeginDate,\r\n\t\tabstractVerifiedDate: state.landlinkConfigReducer.abstractVerifiedDate,\r\n\t\tisPropertyCode: state.landlinkConfigReducer.propertyCode,\r\n\t\tallOnlySearch: state.countyConfigSearch2Reducer.allOnlySearch,\r\n\t\tdocumentTypes: state.documentTypesReducer.codeDescriptionResultList,\r\n\t\tdocumentType: previousSearchKeyValue.documentType ? previousSearchKeyValue.documentType : 'ALL',\r\n\t\tcreditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n\t\tmatchType: previousSearchKeyValue.matchType ? previousSearchKeyValue.matchType : null,\r\n\t\tparcelId: previousSearchKeyValue.parcelId ? previousSearchKeyValue.parcelId : null,\r\n\t\tfromRecordedDate,\r\n\t\ttoRecordedDate\r\n\t};\r\n}\r\n\r\nclass SearchByParcelId extends Component {\r\n\r\n\tstate = {\r\n\t\tparcelId: this.props.parcelId,\r\n\t\tdocumentType: this.props.documentType,\r\n\t\tfromRecordedDate: this.props.fromRecordedDate,\r\n\t\ttoRecordedDate: this.props.toRecordedDate,\r\n\t\tloadingStatus: \"\",\r\n\t\tsubmitMessage: '',\r\n\r\n\t\ttoken: '',\r\n\t\tcreditCardPriceListWindowShow: false,\r\n\t\tcreditCardAuthorizeDotNetWindowShow: false,\r\n\t\tcreditCardPriceListReAuthWindowShow: false,\r\n\r\n\t\terrors: {}\r\n\t}\r\n\r\n\t// Same code used in all searches - BEGIN\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.props.setSelectedSearchType();\r\n\t\tif (this.props.creditCardUser) {\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\r\n\t\t\t\t\tlet result = new AjaxResult(response);\r\n\r\n\t\t\t\t\tif (!result.isOk()) {\r\n\t\t\t\t\t\tresult.handleError();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.setState({ token: result.content().token });\r\n\t\t\t\t\t}\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\thandleError(error, this.props.history);\r\n\t\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\t// fix Warning: Can't perform a React state update on an unmounted component\r\n\t\tthis.setState = (state, callback) => {\r\n\t\t\treturn;\r\n\t\t};\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tthis.setState({\r\n\t\t\t[event.target.id]: event.target.value,\r\n\t\t\tsubmitMessage: '',\r\n\t\t\terrors: {}\r\n\t\t})\r\n\t}\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thideLoading = (message, status, content) => {\r\n\t\tif (content.paymentNeededAgain === true) {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: \"\",\r\n\t\t\t\tsubmitMessage: \"\",\r\n\t\t\t\tcreditCardPriceListReAuthWindowShow: true\r\n\t\t\t})\r\n\t\t} else if (content.paymentNeeded === true) {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: \"\",\r\n\t\t\t\tsubmitMessage: \"\",\r\n\t\t\t\tcreditCardPriceListWindowShow: true\r\n\t\t\t})\r\n\t\t} else if (status === 'ERROR') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: \"\",\r\n\t\t\t\tsubmitMessage: \"\",\r\n\t\t\t\tcreditCardPriceListWindowShow: false,\r\n\t\t\t\tcreditCardPriceListReAuthWindowShow: false,\r\n\t\t\t\tcreditCardAuthorizeDotNetWindowShow: false\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: \"\",\r\n\t\t\t\tsubmitMessage: message,\r\n\t\t\t\tcreditCardPriceListWindowShow: false,\r\n\t\t\t\tcreditCardPriceListReAuthWindowShow: false,\r\n\t\t\t\tcreditCardAuthorizeDotNetWindowShow: false\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\thandleCreditCardAuthorizeDotNetWindowClose = () => {\r\n\t\tthis.setState(\r\n\t\t\t{\r\n\t\t\t\tcreditCardAuthorizeDotNetWindowShow: false\r\n\t\t\t});\r\n\t}\r\n\r\n\thandleCreditCardPriceListClose = () => {\r\n\t\tthis.setState(\r\n\t\t\t{\r\n\t\t\t\tcreditCardPriceListWindowShow: false\r\n\t\t\t});\r\n\t}\r\n\r\n\thandleCreditCardPriceListContinue = () => {\r\n\t\tthis.setState(\r\n\t\t\t{\r\n\t\t\t\tcreditCardAuthorizeDotNetWindowShow: true\r\n\t\t\t});\r\n\t}\r\n\r\n\thandleCreditCardPriceListReAuth = () => {\r\n\t\tthis.setState(\r\n\t\t\t{\r\n\t\t\t\tcreditCardAuthorizeDotNetWindowShow: true\r\n\t\t\t});\r\n\t}\r\n\r\n\thandleCreditCardPriceListReAuthWindowClose = () => {\r\n\t\tthis.setState(\r\n\t\t\t{\r\n\t\t\t\tcreditCardPriceListReAuthWindowShow: false\r\n\t\t\t});\r\n\t}\r\n\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tif (this.handleValidation()) {\r\n\t\t\tif (this.showLoading() === true) {\r\n\t\t\t\tthis.handleAuthorizedSubmit();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Same code used in all searches - END\r\n\r\n\thandleAuthorizedSubmit = () => {\r\n\t\tthis.props.resetSearchSequence();\r\n\t\tthis.props.resetSearchSequenceDocumentNumber();\r\n\t\tthis.props.resetSearchDetail();\r\n\t\tconst { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n\t\tthis.props.searchByParcelId(request, this.props.history, this.hideLoading);\r\n\t}\r\n\r\n\thandleValidation() {\r\n\t\tlet errors = {};\r\n\r\n\t\tif (!this.state.parcelId) {\r\n\t\t\terrors[\"parcelId\"] = \"Required.\";\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tlet formIsValid = validateCharacters(errors, this.state.parcelId, 'parcelId');\r\n\t\tif (!formIsValid) {\r\n\t\t this.setState({ errors: errors });\r\n\t\t return false;\r\n\t\t}\r\n\t\r\n\t\tformIsValid = validateLength(errors, this.state.parcelId, 'parcelId', 2);\r\n\t\tif (!formIsValid) {\r\n\t\t this.setState({ errors: errors });\r\n\t\t return false;\r\n\t\t}\r\n\r\n\t\tformIsValid = validateDates(errors, this.state.fromRecordedDate, 'fromRecordedDate', this.state.toRecordedDate, 'toRecordedDate');\r\n\t\tif (!formIsValid) {\r\n\t\t\tthis.setState({ errors: errors });\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis.setState({ errors: errors });\r\n\t\treturn true;\r\n\t}\r\n\r\n\thandleClear = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.resetSearchCriteria();\r\n\t\t\r\n\t\tlet fromRecordedDate = moment('01/01/1900').format('L');\r\n\t\tif (this.props.showNotableDates === true) {\r\n\t\t fromRecordedDate = this.props.abstractIndexBeginDate;\r\n\t\t} \r\n\t \r\n\t\tlet toRecordedDate = moment().format('L');\r\n\t\tif (this.props.useVerificationDate === true) {\r\n\t\t toRecordedDate = this.props.abstractVerifiedDate;\r\n\t\t}\r\n\r\n\t\tthis.setState({\r\n\t\t\tdocumentType: 'ALL',\r\n\t\t\tfromRecordedDate,\r\n\t\t\ttoRecordedDate,\r\n\t\t\tsubmitMessage: '',\r\n\t\t\tparcelId: ''\r\n\t\t})\r\n\t}\r\n\r\n\thandleDatePickerChangeFromRecordedDate = (date) => {\r\n\t\tthis.setState({\r\n\t\t\tfromRecordedDate: moment(date).format('L')\r\n\t\t})\r\n\t}\r\n\r\n\thandleDatePickerChangeToRecordedDate = (date) => {\r\n\t\tthis.setState({\r\n\t\t\ttoRecordedDate: moment(date).format('L')\r\n\t\t})\r\n\t}\r\n\r\n\trender() {\r\n\r\n\t\tlet formGroupRows = [\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'parcelId', label: 'Parcel ID', fieldType: 'text', primaryCriteria: true, required: true, value: this.state.parcelId, error: this.state.errors['parcelId'] }]\r\n\t\t\t}\r\n\t\t]\r\n\r\n\t\tif (this.props.isPropertyCode === true && this.props.allOnlySearch !== true && this.props.allOnlySearch !== 'true') {\r\n \t\tformGroupRows.push({\r\n\t\t\t\tformGroups: [{ id: 'documentType', label: 'Document Type', fieldType: 'select', value: this.state.documentType, options: this.props.documentTypes }]\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tformGroupRows.push({\r\n\t\t\tformGroups: [{ id: 'fromRecordedDate', label: 'From Date', fieldType: 'date', value: this.state.fromRecordedDate, handleDatePickerChange: this.handleDatePickerChangeFromRecordedDate, error: this.state.errors['fromRecordedDate'] }]\r\n\t\t});\r\n\r\n\t\tformGroupRows.push({\r\n\t\t\tformGroups: [{ id: 'toRecordedDate', label: 'To Date', fieldType: 'date', value: this.state.toRecordedDate, handleDatePickerChange: this.handleDatePickerChangeToRecordedDate, error: this.state.errors['toRecordedDate'] }]\r\n\t\t});\r\n\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: componentName,\r\n\t\t\tpageHeading: \"Search by Parcel ID\",\r\n\t\t\tonChange: this.handleChange,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tonClear: this.handleClear,\r\n\t\t\tsuccessIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n\t\t\tloadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n\t\t\tsubmitMessage: this.state.submitMessage,\r\n\t\t\tformGroupRows: formGroupRows,\r\n\t\t\tformRightArea: <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />,\r\n\t\t\t\r\n\t\t\thandleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n\t\t\t// price list window\r\n\t\t\tcreditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n\t\t\thandleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n\t\t\thandleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n\t\t\t// authoriz.net iframe window\r\n\t\t\tcreditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n\t\t\thandleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n\t\t\tauthorizeDotNetToken: this.state.token,\r\n\r\n\t\t\t// re-preauth price list window\r\n\t\t\tcreditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n\t\t\thandleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n\t\t\thandleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<FormTemplate {...formProps} />\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchByParcelId);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { searchByTorrensCertificate, setSelectedSearchType, SearchByTorrensCertificateKey } from \"../../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst componentName = SearchByTorrensCertificateKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByTorrensCertificate: (searchCriteria, history, callback) => dispatch(searchByTorrensCertificate(searchCriteria, history, callback)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n return {\r\n notableDates: state.notableDatesReducer,\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n torrensLabel: state.countyConfigCommonReducer.torrensLabel,\r\n certificateNumber: previousSearchKeyValue.certificateNumber ? previousSearchKeyValue.certificateNumber : null\r\n };\r\n}\r\n\r\nclass SearchByTorrensCertificate extends Component {\r\n\r\n state = {\r\n certificateNumber: this.props.certificateNumber,\r\n loadingStatus: \"\",\r\n submitMessage: '',\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: ''\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByTorrensCertificate(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n this.setState({\r\n submitMessage: '',\r\n certificateNumber: ''\r\n })\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: this.props.torrensLabel + \" Certificate\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n formRightArea: <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'certificateNumber', label: 'Certificate Number', primaryCriteria: true, fieldType: 'text', required: true, value: this.state.certificateNumber }]\r\n }\r\n ],\r\n\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n\r\n return (<FormTemplate {...formProps} />)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchByTorrensCertificate);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { searchByTorrensText, setSelectedSearchType, SearchByTorrensTextKey } from \"../../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst componentName = SearchByTorrensTextKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByTorrensText: (searchCriteria, history, callback) => dispatch(searchByTorrensText(searchCriteria, history, callback)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n return {\r\n notableDates: state.notableDatesReducer,\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n torrensLabel: state.countyConfigCommonReducer.torrensLabel,\r\n text: previousSearchKeyValue.text ? previousSearchKeyValue.text : null,\r\n searchIn: previousSearchKeyValue.searchIn ? previousSearchKeyValue.searchIn : 'ALL'\r\n };\r\n}\r\n\r\nclass SearchByTorrensText extends Component {\r\n\r\n state = {\r\n text: this.props.text,\r\n searchIn: this.props.searchIn,\r\n loadingStatus: \"\",\r\n submitMessage: '',\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n \r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: ''\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByTorrensText(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n this.setState({\r\n text: '',\r\n searchIn: 'ALL',\r\n submitMessage: ''\r\n })\r\n }\r\n\r\n render() {\r\n\r\n let textLabel = 'Text';\r\n if (this.state.searchIn === 'D') {\r\n textLabel = 'Document Number';\r\n } else if (this.state.searchIn === 'A') {\r\n textLabel = 'Text or Document Number';\r\n }\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: this.props.torrensLabel + \" Text\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n formRightArea: <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'text', label: textLabel, fieldType: 'text', primaryCriteria: true, required: true, value: this.state.text }]\r\n },\r\n {\r\n formGroups: [{ id: 'searchIn', label: 'Search In', fieldType: 'select', value: this.state.searchIn, options: [{ code: 'ALL', description: 'All Sections' }, { code: 'LEGAL', description: 'Legal' }, { code: 'DOCUMENT', description: 'Memorial Doc #' }, { code: 'MEMORIAL', description: 'Memorial Text' }, { code: 'RECITAL', description: 'Recital' }] }]\r\n }\r\n ],\r\n\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n\r\n return (<FormTemplate {...formProps} />)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchByTorrensText);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { loadDocuments, setSelectedSearchType, SearchByTractIndexNMIKey, SearchByAddressUrl } from \"../../../redux/actions/searchActions\";\r\nimport { validateDates } from \"../../../utils/DateValidation\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport translations from \"../../../config/translation/search_by_tract_index_nmi_translations.json\";\r\n\r\nimport moment from 'moment';\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\n\r\nconst componentName = SearchByTractIndexNMIKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByAddress: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByAddressUrl)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n // If it was coming from a Recent Search link, there should be a searchHistoryNumber. Use it to look up the search criteria in search history.\r\n // Otherwise, look up the previous search criteria for SearchByAddress.\r\n\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n return {\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n fromRecordedDate: previousSearchKeyValue.fromRecordedDate ? previousSearchKeyValue.fromRecordedDate : moment('01/01/1900').format('L'),\r\n toRecordedDate: previousSearchKeyValue.toRecordedDate ? previousSearchKeyValue.toRecordedDate : moment().format('L'),\r\n island: previousSearchKeyValue.island ? previousSearchKeyValue.island : null,\r\n village: previousSearchKeyValue.village ? previousSearchKeyValue.village : null,\r\n parcelId: previousSearchKeyValue.parcelId ? previousSearchKeyValue.parcelId : null,\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH'\r\n };\r\n}\r\n\r\nclass SearchByTractIndexNMI extends Component {\r\n\r\n state = {\r\n fromRecordedDate: this.props.fromRecordedDate,\r\n toRecordedDate: this.props.toRecordedDate,\r\n island: this.props.island,\r\n village: this.props.village,\r\n parcelId: this.props.parcelId,\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n \r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: \"\",\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByAddress(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n\r\n if (!this.state.island) {\r\n errors[\"island\"] = translations[this.props.language].required;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.village) {\r\n errors[\"village\"] = translations[this.props.language].required;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (this.state.village.length < 3) {\r\n errors[\"village\"] = translations[this.props.language].three_characters_minimum;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n let formIsValid = validateDates(errors, this.state.fromRecordedDate, 'fromRecordedDate', this.state.toRecordedDate, 'toRecordedDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n this.setState({\r\n island: '',\r\n village: '',\r\n parcelId: '',\r\n fromRecordedDate: moment('01/01/1900').format('L'),\r\n toRecordedDate: moment().format('L'),\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n handleDatePickerChangeFromRecordedDate = (date) => {\r\n this.setState({\r\n fromRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToRecordedDate = (date) => {\r\n this.setState({\r\n toRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: translations[this.props.language].search_by_tract_index,\r\n onChange: this.handleChange,\r\n onClear: this.handleClear,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n primaryButtonLabel: translations[this.props.language].submit,\r\n clearButtonLabel: translations[this.props.language].clear,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'island', label: translations[this.props.language].island, fieldType: 'select', primaryCriteria: true, required: true, value: this.state.island, error: this.state.errors['island'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'village', label: translations[this.props.language].village, primaryCriteria: true, fieldType: 'text', value: this.state.village, error: this.state.errors['village'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'parcelId', label: translations[this.props.language].parcel_id, fieldType: 'text', value: this.state.parcelId, error: this.state.errors['parcelId'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'fromRecordedDate', label: translations[this.props.language].from_date, fieldType: 'date', value: this.state.fromRecordedDate, handleDatePickerChange: this.handleDatePickerChangeFromRecordedDate, error: this.state.errors['fromRecordedDate'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'toRecordedDate', label: translations[this.props.language].to_date, fieldType: 'date', value: this.state.toRecordedDate, handleDatePickerChange: this.handleDatePickerChangeToRecordedDate, error: this.state.errors['toRecordedDate'] }]\r\n }\r\n ],\r\n\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n return (\r\n <FormTemplate {...formProps} />\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchByTractIndexNMI);\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport PlatSelectionList from \"../../common/selection/PlatSelectionList\";\r\nimport { loadDocuments, setSelectedSearchType, SpecialSearchPlatKey, SpecialSearchPlatUrl } from \"../../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\n\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\n\r\nconst componentName = SpecialSearchPlatKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByPlat: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SpecialSearchPlatUrl)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n return {\r\n notableDates: state.notableDatesReducer,\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n \r\n plat: previousSearchKeyValue.plat ? previousSearchKeyValue.plat : null,\r\n platNumber: previousSearchKeyValue.plat ? previousSearchKeyValue.plat : null,\r\n platName: previousSearchKeyValue.platName ? previousSearchKeyValue.platName : null,\r\n allPlatList: state.platsReducer.codeDescriptionResultList,\r\n allPlatList: state.platsReducer.codeDescriptionResultList,\r\n allPlatNameList: state.platNamesReducer.codeDescriptionResultList,\r\n allPlatNumberList: state.platNumbersReducer.codeDescriptionResultList\r\n };\r\n}\r\n\r\nclass SpecialSearchPlat extends Component {\r\n\r\n state = {\r\n plat: this.props.plat,\r\n platName: this.props.platName,\r\n platNumber: this.props.platNumber,\r\n\r\n showPlatNumberDropdown: false,\r\n platNumberFilteredList: this.props.allPlatNumberList,\r\n showPlatNameDropdown: false,\r\n platNameFilteredList: this.props.allPlatNameList,\r\n showPlatList: false,\r\n\r\n loadingStatus: \"\",\r\n submitMessage: '',\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n\r\n let targetValue = event.target.value; \r\n if ((event.target.id !== 'platName' && event.target.id !== 'platNumber') || !this.state.plat) {\r\n this.setState({\r\n errors: {},\r\n submitMessage: '',\r\n [event.target.id]: targetValue\r\n })\r\n }\r\n \r\n if (event.target.id === 'platNameSelect') {\r\n let filteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == targetValue;\r\n });\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n platNumber: targetValue,\r\n platName: filteredList[0].description,\r\n // platFound: true,\r\n plat: targetValue\r\n })\r\n } else if (event.target.id === 'platName' && !this.state.plat) {\r\n let filteredList = this.props.allPlatNameList.filter(function (plat) {\r\n return plat.description.toUpperCase().startsWith(targetValue.toUpperCase())\r\n });\r\n\r\n if (filteredList.length === 0) {\r\n let errors = {};\r\n errors[\"platName\"] = \"No matching plat found.\";\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat: '',\r\n errors: errors\r\n })\r\n } else if (filteredList.length === 1) {\r\n let namefilteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == filteredList[0].code;\r\n });\r\n this.setState({\r\n platNumber: filteredList[0].code,\r\n platName: namefilteredList[0].description,\r\n platNameFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n // platFound: true,\r\n plat: filteredList[0].code\r\n })\r\n } else if (targetValue.length >= 2) {\r\n filteredList = [{code: \"-1\", description: \"(Click here to select a plat)\"}].concat(filteredList);\r\n \r\n this.setState({\r\n platNameFilteredList: filteredList,\r\n showPlatNameDropdown: true,\r\n showPlatNumberDropdown: false,\r\n plat:''\r\n })\r\n } else if (targetValue.length < 2) {\r\n this.setState({\r\n platNameFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat:''\r\n })\r\n }\r\n } else if (event.target.id === 'platNumberSelect') {\r\n let filteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == targetValue;\r\n });\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n platNumber: targetValue,\r\n platName: filteredList[0].description,\r\n // platFound: true,\r\n plat: targetValue\r\n })\r\n } else if (event.target.id === 'platNumber' && !this.state.plat) {\r\n let filteredList = this.props.allPlatNumberList.filter(function (plat) {\r\n return plat.code.toUpperCase().startsWith(targetValue.toUpperCase())\r\n });\r\n\r\n if (filteredList.length === 0) {\r\n let errors = {};\r\n errors[\"platNumber\"] = \"No matching plat found.\";\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat:'',\r\n errors: errors\r\n })\r\n } else if (filteredList.length === 1) {\r\n let namefilteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == filteredList[0].code;\r\n });\r\n this.setState({\r\n platNumber: filteredList[0].code,\r\n platName: namefilteredList[0].description,\r\n platNumberFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat: filteredList[0].code\r\n })\r\n } else if (targetValue.length >= 2) {\r\n filteredList = [{code: \"-1\", description: \"(Click here to select a plat)\"}].concat(filteredList);\r\n \r\n this.setState({\r\n platNumberFilteredList: filteredList,\r\n showPlatNumberDropdown: true,\r\n showPlatNameDropdown: false,\r\n plat:''\r\n })\r\n } else if (targetValue.length < 2) {\r\n this.setState({\r\n platNumberFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat:''\r\n })\r\n }\r\n }\r\n\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { platNameFound, platNumber, showPlatList, loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByPlat(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation = () => {\r\n let errors = {};\r\n\r\n if (!this.state.plat) {\r\n errors[\"platNumber\"] = \"A valid plat required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n\r\n this.setState({\r\n plat: '',\r\n platNumber: '',\r\n platName: '',\r\n showPlatNumberDropdown: false,\r\n platNumberFilteredList: this.props.allPlatNumberList,\r\n showPlatNameDropdown: false,\r\n platNameFilteredList: this.props.allPlatNameList,\r\n showPlatList: false,\r\n submitMessage: ''\r\n })\r\n }\r\n\r\n handlePlatLookup = () => {\r\n this.setState({\r\n showPlatList: true\r\n });\r\n }\r\n\r\n handlePlatReset = () => {\r\n this.setState({\r\n plat: '',\r\n platName: '',\r\n platNumber: '',\r\n showPlatNumberDropdown: false,\r\n platNumberFilteredList: this.props.allPlatNumberList,\r\n showPlatNameDropdown: false,\r\n platNameFilteredList: this.props.allPlatNameList,\r\n showPlatList: false,\r\n errors: {}\r\n });\r\n }\r\n\r\n handleClosePlatLookup = (selectedId, selectedName) => {\r\n \r\n this.setState({\r\n errors: {},\r\n showPlatList: false\r\n })\r\n\r\n if (selectedId) {\r\n this.setState({\r\n plat: selectedId,\r\n platNumber: selectedId,\r\n platName: selectedName\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Plat Search\",\r\n autoComplete: false,\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n formRightArea: <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />,\r\n formGroupRows: [\r\n {\r\n formGroups: [\r\n { id: 'platNumber', label: 'Plat Number', primaryCriteria: true, options: this.state.platNumberFilteredList, style: {minWidth: 100}, fieldType: 'plat', required: true, hideSelect: this.state.showPlatNumberDropdown === false, value: this.state.platNumber, error: this.state.errors['platNumber'] },\r\n { id: 'platName', label: 'Plat Name', primaryCriteria: true, options: this.state.platNameFilteredList, style: {minWidth: 300}, fieldType: 'plat', required: true, hideSelect: this.state.showPlatNameDropdown === false, value: this.state.platName, error: this.state.errors['platName'] },\r\n { id: 'platResetButton', label: 'Reset', fieldType: 'reset', onClick: this.handlePlatReset },\r\n { id: 'platLookupButton', fieldType: 'lookupWithLabel', style: {marginLeft: 8}, label: 'Full List', onClick: this.handlePlatLookup }\r\n ]\r\n }\r\n ],\r\n\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n <PlatSelectionList showModal={this.state.showPlatList} onHide={(selectedId, selectedName) => this.handleClosePlatLookup(selectedId, selectedName)} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SpecialSearchPlat);\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { searchByGrantorGranteeBook, setSelectedSearchType, SpecialSearchGrantorGranteeBookKey } from \"../../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport { validateDates } from \"../../../utils/DateValidation\";\r\n\r\nimport moment from 'moment';\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\n\r\nconst componentName = SpecialSearchGrantorGranteeBookKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByGrantorGranteeBook: (searchCriteria, history, callback) => dispatch(searchByGrantorGranteeBook(searchCriteria, history, callback)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n return {\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n grantorGranteeSearchIn: previousSearchKeyValue.grantorGranteeSearchIn ? previousSearchKeyValue.grantorGranteeSearchIn : 'BOTH',\r\n grantorGranteeLastName: previousSearchKeyValue.grantorGranteeLastName ? previousSearchKeyValue.grantorGranteeLastName : null,\r\n fromRecordedDate: previousSearchKeyValue.fromRecordedDate ? previousSearchKeyValue.fromRecordedDate : moment('01/01/1800').format('L'),\r\n toRecordedDate: previousSearchKeyValue.toRecordedDate ? previousSearchKeyValue.toRecordedDate : moment().format('L')\r\n };\r\n}\r\n\r\nclass SpecialSearchGrantorGranteeBook extends Component {\r\n\r\n state = {\r\n fromRecordedDate: this.props.fromRecordedDate,\r\n toRecordedDate: this.props.toRecordedDate,\r\n grantorGranteeSearchIn: this.props.grantorGranteeSearchIn,\r\n grantorGranteeLastName: this.props.grantorGranteeLastName,\r\n loadingStatus: \"\",\r\n submitMessage: '',\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByGrantorGranteeBook(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n\r\n if (!this.state.grantorGranteeLastName) {\r\n errors[\"grantorGranteeLastName\"] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n let formIsValid = validateDates(errors, this.state.fromRecordedDate, 'fromRecordedDate', this.state.toRecordedDate, 'toRecordedDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n\r\n this.setState({\r\n fromRecordedDate: moment('01/01/1800').format('L'),\r\n toRecordedDate: moment().format('L'),\r\n grantorGranteeSearchIn: 'BOTH',\r\n grantorGranteeLastName: '',\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n handleDatePickerChangeFromRecordedDate = (date) => {\r\n this.setState({\r\n fromRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToRecordedDate = (date) => {\r\n this.setState({\r\n toRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Grantor Grantee Book Search\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n formGroupRows: [\r\n {\r\n formGroups: [\r\n {\r\n id: 'grantorGranteeLastName',\r\n label: 'Business or Last Name',\r\n fieldType: 'text',\r\n required: true,\r\n primaryCriteria: true,\r\n value: this.state.grantorGranteeLastName\r\n }\r\n ]\r\n },\r\n {\r\n formGroups: [\r\n {\r\n id: 'grantorGranteeSearchIn',\r\n label: 'Search In',\r\n fieldType: 'select',\r\n options: [{ code: 'BOTH', description: 'Both Grantors & Grantees' }, { code: 'GRANTORS', description: 'Grantors Only' }, { code: 'GRANTEES', description: 'Grantees Only' }],\r\n value: this.state.grantorGranteeSearchIn\r\n }\r\n ]\r\n },\r\n {\r\n formGroups: [{ id: 'fromRecordedDate', label: 'From Date', fieldType: 'date', value: this.state.fromRecordedDate, handleDatePickerChange: this.handleDatePickerChangeFromRecordedDate, error: this.state.errors['fromRecordedDate'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'toRecordedDate', label: 'To Date', fieldType: 'date', value: this.state.toRecordedDate, handleDatePickerChange: this.handleDatePickerChangeToRecordedDate, error: this.state.errors['toRecordedDate'] }]\r\n }\r\n ],\r\n\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n\r\n\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SpecialSearchGrantorGranteeBook);\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { searchByTaxLien, setSelectedSearchType, SpecialSearchTaxLienKey } from \"../../../redux/actions/searchActions\";\r\nimport { validateDates, validateMonthRangeLimit } from \"../../../utils/DateValidation\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nimport moment from 'moment';\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst componentName = SpecialSearchTaxLienKey;\r\n\r\nconst DOCUMENT_NUMBER_SEARCH = 'DOCUMENTNUMBER';\r\nconst LIEN_NUMBER_SEARCH = 'LIENNUMBER';\r\nconst TAXPAYER_SEARCH = 'TAXPAYER';\r\nconst DATE_RANGE_SEARCH = 'DATERANGE'\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByTaxLien: (searchCriteria, history, callback) => dispatch(searchByTaxLien(searchCriteria, history, callback)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n let fromRecordedDate = previousSearchKeyValue.fromRecordedDate;\r\n if (!fromRecordedDate && state.countyConfigNotableDatesReducer.showNotableDates === true) {\r\n fromRecordedDate = state.landlinkConfigReducer.abstractIndexBeginDate;\r\n } \r\n \r\n if (!fromRecordedDate) {\r\n fromRecordedDate = moment('01/01/1900').format('L');\r\n }\r\n\r\n let toRecordedDate = previousSearchKeyValue.toRecordedDate;\r\n if (!toRecordedDate && state.countyConfigNotableDatesReducer.useVerificationDate === true) {\r\n toRecordedDate = state.landlinkConfigReducer.abstractVerifiedDate;\r\n }\r\n \r\n if (!toRecordedDate) {\r\n toRecordedDate = moment().format('L');\r\n }\r\n\r\n return {\r\n notableDates: state.notableDatesReducer,\r\n showNotableDates: state.countyConfigNotableDatesReducer.showNotableDates,\r\n useVerificationDate: state.countyConfigNotableDatesReducer.useVerificationDate,\r\n abstractIndexBeginDate: state.landlinkConfigReducer.abstractIndexBeginDate,\r\n abstractVerifiedDate: state.landlinkConfigReducer.abstractVerifiedDate,\r\n isPropertyCode: state.landlinkConfigReducer.propertyCode,\r\n allOnlySearch: state.countyConfigSearch2Reducer.allOnlySearch,\r\n documentTypes: state.documentTypesReducer.codeDescriptionResultList,\r\n documentType: previousSearchKeyValue.documentType ? previousSearchKeyValue.documentType : 'ALL',\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n currentOrExpired: previousSearchKeyValue.currentOrExpired ? previousSearchKeyValue.currentOrExpired : 'CURRENT',\r\n searchByTaxLienMethod: previousSearchKeyValue.searchByTaxLienMethod ? previousSearchKeyValue.searchByTaxLienMethod : DATE_RANGE_SEARCH,\r\n documentNumber: previousSearchKeyValue.documentNumber ? previousSearchKeyValue.documentNumber : null,\r\n lienNumber: previousSearchKeyValue.lienNumber ? previousSearchKeyValue.lienNumber : null,\r\n taxpayerName: previousSearchKeyValue.taxpayerName ? previousSearchKeyValue.taxpayerName : null,\r\n taxpayerFirstName: previousSearchKeyValue.taxpayerFirstName ? previousSearchKeyValue.taxpayerFirstName : null,\r\n taxpayerMiddleInitial: previousSearchKeyValue.taxpayerMiddleInitial ? previousSearchKeyValue.taxpayerMiddleInitial : null,\r\n fromRecordedDate,\r\n toRecordedDate\r\n };\r\n}\r\n\r\nclass SpecialSearchTaxLien extends Component {\r\n\r\n state = {\r\n searchByTaxLienMethod: this.props.searchByTaxLienMethod,\r\n currentOrExpired: this.props.currentOrExpired,\r\n fromRecordedDate: this.props.fromRecordedDate,\r\n toRecordedDate: this.props.toRecordedDate,\r\n documentType: this.props.documentType,\r\n documentNumber: this.props.documentNumber,\r\n lienNumber: this.props.lienNumber,\r\n taxpayerName: this.props.taxpayerName,\r\n taxpayerFirstName: this.props.taxpayerFirstName,\r\n taxpayerMiddleInitial: this.props.taxpayerMiddleInitial,\r\n loadingStatus: \"\",\r\n submitMessage: '',\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n if (event.target.type === 'radio') {\r\n this.setState({\r\n searchByTaxLienMethod: event.target.id\r\n });\r\n } else {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: '',\r\n errors: {}\r\n });\r\n }\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n // The tax lien search has multiple search \"pages\". \r\n // Reset the search criteria that are not on the current search \"page\", as\r\n // the other \"pages\" may contain dirty data and shouldn't be in the search.\r\n if (this.state.searchByTaxLienMethod === DATE_RANGE_SEARCH) {\r\n this.setState({\r\n documentType: '',\r\n documentNumber: '',\r\n lienNumber: '',\r\n taxpayerName: '',\r\n taxpayerFirstName: '',\r\n taxpayerMiddleInitial: ''\r\n })\r\n } else if (this.state.searchByTaxLienMethod === DOCUMENT_NUMBER_SEARCH) {\r\n this.setState({\r\n fromRecordedDate: moment('01/01/1900').format('L'),\r\n toRecordedDate: moment().format('L'),\r\n lienNumber: '',\r\n taxpayerName: '',\r\n taxpayerFirstName: '',\r\n taxpayerMiddleInitial: ''\r\n })\r\n } else if (this.state.searchByTaxLienMethod === LIEN_NUMBER_SEARCH) {\r\n this.setState({\r\n documentType: '',\r\n fromRecordedDate: moment('01/01/1900').format('L'),\r\n toRecordedDate: moment().format('L'),\r\n documentNumber: '',\r\n taxpayerName: '',\r\n taxpayerFirstName: '',\r\n taxpayerMiddleInitial: ''\r\n })\r\n } else if (this.state.searchByTaxLienMethod === TAXPAYER_SEARCH) {\r\n this.setState({\r\n documentType: '',\r\n fromRecordedDate: moment('01/01/1900').format('L'),\r\n toRecordedDate: moment().format('L'),\r\n documentNumber: '',\r\n lienNumber: ''\r\n })\r\n }\r\n\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByTaxLien(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n\r\n if (this.state.searchByTaxLienMethod === DATE_RANGE_SEARCH) {\r\n let formIsValid = validateDates(errors, this.state.fromRecordedDate, 'fromRecordedDate', this.state.toRecordedDate, 'toRecordedDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n formIsValid = validateMonthRangeLimit(errors, this.state.fromRecordedDate, 'fromRecordedDate', this.state.toRecordedDate, 'toRecordedDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n }\r\n\r\n if (this.state.searchByTaxLienMethod === DOCUMENT_NUMBER_SEARCH) {\r\n if (!this.state.documentNumber) {\r\n errors[\"documentNumber\"] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n }\r\n\r\n if (this.state.searchByTaxLienMethod === LIEN_NUMBER_SEARCH) {\r\n if (!this.state.lienNumber) {\r\n errors[\"lienNumber\"] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n }\r\n \r\n if (this.state.searchByTaxLienMethod === TAXPAYER_SEARCH) {\r\n if (!this.state.taxpayerName) {\r\n errors[\"taxpayerName\"] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.taxpayerName && this.state.taxpayerMiddleInitial) {\r\n errors[\"taxpayerName\"] = \"Required if MI entered.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n if (!this.state.taxpayerFirstName && this.state.taxpayerMiddleInitial) {\r\n errors[\"taxpayerFirstName\"] = \"Required if MI entered.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n if (this.state.searchByTaxLienMethod === DATE_RANGE_SEARCH) {\r\n let fromRecordedDate = moment('01/01/1900').format('L');\r\n if (this.props.showNotableDates === true) {\r\n fromRecordedDate = this.props.abstractIndexBeginDate;\r\n } \r\n \r\n let toRecordedDate = moment().format('L');\r\n if (this.props.useVerificationDate === true) {\r\n toRecordedDate = this.props.abstractVerifiedDate;\r\n }\r\n\r\n this.setState({\r\n currentOrExpired: 'CURRENT',\r\n fromRecordedDate,\r\n toRecordedDate,\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n } else if (this.state.searchByTaxLienMethod === DOCUMENT_NUMBER_SEARCH) {\r\n this.setState({\r\n currentOrExpired: 'CURRENT',\r\n documentType: 'ALL',\r\n documentNumber: '',\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n } else if (this.state.searchByTaxLienMethod === LIEN_NUMBER_SEARCH) {\r\n this.setState({\r\n currentOrExpired: 'CURRENT',\r\n lienNumber: '',\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n } else if (this.state.searchByTaxLienMethod === TAXPAYER_SEARCH) {\r\n this.setState({\r\n currentOrExpired: 'CURRENT',\r\n taxpayerName: '',\r\n taxpayerFirstName: '',\r\n taxpayerMiddleInitial: '',\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n }\r\n\r\n handleDatePickerChangeFromRecordedDate = (date) => {\r\n this.setState({\r\n fromRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToRecordedDate = (date) => {\r\n this.setState({\r\n toRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n render() {\r\n\r\n let formGroupRows = [\r\n {\r\n formGroups: [{ id: 'searchByTaxLienMethod', label: 'Search By', style: { height: 110 }, fieldType: 'radio', primaryCriteria: true, options: [{ code: DATE_RANGE_SEARCH, description: 'Date Range' }, { code: DOCUMENT_NUMBER_SEARCH, description: 'Document Number' }, { code: LIEN_NUMBER_SEARCH, description: 'Lien Number' }, { code: TAXPAYER_SEARCH, description: 'Taxpayer Name' }], value: this.state.searchByTaxLienMethod }]\r\n },\r\n {\r\n formGroups: [{ id: 'fromRecordedDate', label: 'Date', fieldType: 'date', hideRow: this.state.searchByTaxLienMethod !== DATE_RANGE_SEARCH, primaryCriteria: true, value: this.state.fromRecordedDate, handleDatePickerChange: this.handleDatePickerChangeFromRecordedDate, error: this.state.errors['fromRecordedDate'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'toRecordedDate', label: 'To', fieldType: 'date', hideRow: this.state.searchByTaxLienMethod !== DATE_RANGE_SEARCH, primaryCriteria: true, value: this.state.toRecordedDate, handleDatePickerChange: this.handleDatePickerChangeToRecordedDate, error: this.state.errors['toRecordedDate'] }]\r\n }\r\n ]\r\n\r\n if (this.props.isPropertyCode === true && this.props.allOnlySearch !== true && this.props.allOnlySearch !== 'true') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'documentType', label: 'Document Type', fieldType: 'select', hideRow: this.state.searchByTaxLienMethod !== DOCUMENT_NUMBER_SEARCH, value: this.state.documentType, options: this.props.documentTypes }]\r\n });\r\n }\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'documentNumber', label: 'Document Number', fieldType: 'text', primaryCriteria: true, hideRow: this.state.searchByTaxLienMethod !== DOCUMENT_NUMBER_SEARCH, required: true, value: this.state.documentNumber, error: this.state.errors['documentNumber'] }]\r\n });\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'lienNumber', label: 'Lien Number', fieldType: 'text', primaryCriteria: true, hideRow: this.state.searchByTaxLienMethod !== 'LIENNUMBER', required: true, value: this.state.lienNumber, error: this.state.errors['lienNumber'] }]\r\n });\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'taxpayerName', label: 'Name or Business Name (one word min.)', fieldType: 'text', primaryCriteria: true, hideRow: this.state.searchByTaxLienMethod !== TAXPAYER_SEARCH, required: true, value: this.state.taxpayerName, error: this.state.errors['taxpayerName'] }, { id: 'taxpayerFirstName', label: 'First Name', fieldType: 'text', placeholder: '(Optional)', hideRow: this.state.searchBy !== TAXPAYER_SEARCH, value: this.state.taxpayerFirstName, error: this.state.errors['taxpayerFirstName'] }, { id: 'taxpayerMiddleInitial', label: 'MI', fieldType: 'text', placeholder: '(Optional)', hideRow: this.state.searchBy !== TAXPAYER_SEARCH, value: this.state.taxpayerMiddleInitial, error: this.state.errors['taxpayerMiddleInitial'] }]\r\n });\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'currentOrExpired', label: 'Current/Expired', fieldType: 'select', options: [{ code: 'ALL', description: 'All' }, { code: 'CURRENT', description: 'Current' }, { code: 'EXPIRED', description: 'Expired' }], value: this.state.currentOrExpired }]\r\n });\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Tax Lien Search\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n formGroupRows: formGroupRows,\r\n formRightArea: <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />,\r\n\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SpecialSearchTaxLien);","import React, {Component} from 'react';\r\nimport { Modal, Button, Table } from 'react-bootstrap'\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport AjaxResult from \"../../utils/AjaxResult\";\r\nimport AjaxError from \"../../utils/AjaxError\";\r\n\r\nexport default class TaxLinks extends Component {\r\n\r\n state = {\r\n parcelIds: [],\r\n parcelIdLinks: [],\r\n header: 'Links To Tax System'\r\n\t }\r\n\r\n handleCloseClick = () => {\r\n this.props.complete();\r\n this.forceUpdate();\r\n }\r\n\r\n getLink() {\r\n let request = { \r\n id: this.props.docId\r\n };\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"tax/getLinks\", request, { withCredentials: true })\r\n .then((response) => {\r\n let result = new AjaxResult(response);\r\n \r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n let content = result.content();\r\n if (!content.hasOwnProperty('parcelIds')) {\r\n this.handleCloseClick();\r\n alert(result.getErrorMessage());\r\n } else {\r\n this.setState( {\r\n parcelIds: content.parcelIds,\r\n parcelIdLinks: content.parcelIdLinks,\r\n header: content.header\r\n });\r\n }\r\n }\r\n }, (error) => {\r\n let result = new AjaxError(error);\r\n result.handleError();\r\n this.handleCloseClick()\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n if (!this.props.show) return;\r\n this.getLink(); \r\n }\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n // We get here is the IMAGE button is clicked or an internal state change\r\n // occurs.\r\n if (!this.props.show) return;\r\n \r\n // Reload state if hide->show or showing+dockey changed\r\n if (!prevProps.show || (this.props.docId !== prevProps.docId)) {\r\n this.getLink();\r\n }\r\n }\r\n\r\n render() {\r\n\r\n let parcelIds = this.state.parcelIds.map((row, index) => {\r\n let link = this.state.parcelIdLinks[index];\r\n return <tr>\r\n <a href={link} target=\"_blank\" rel=\"noopener noreferrer\">{row}</a>\r\n </tr>\r\n })\r\n\r\n let parcelIdsTable =\r\n <Table striped hover size=\"sm\" >\r\n <thead>\r\n <tr>\r\n Parcel IDs\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {parcelIds}\r\n </tbody>\r\n </Table>\r\n\r\n return (\r\n\r\n <Modal show={this.props.show} onHide={this.handleCloseClick} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n \r\n <Modal.Header closeButton >\r\n <Modal.Title style={{color: '#3674AB'}}>{this.state.header}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{borderTop: '2px solid black', height:'50vh', borderBottom: '2px solid black', overflowY: 'scroll'}}>\r\n {parcelIdsTable}\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Close</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n \r\n )\r\n }\r\n}","import React, {Component} from 'react';\r\nimport { Modal, Button, Table } from 'react-bootstrap'\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport AjaxResult from \"../../utils/AjaxResult\";\r\nimport AjaxError from \"../../utils/AjaxError\";\r\n\r\nexport default class GisLinks extends Component {\r\n\r\n state = {\r\n parcelIds: [],\r\n parcelIdLinks: [],\r\n header: 'Links to GIS System'\r\n\t }\r\n\r\n handleCloseClick = () => {\r\n this.props.complete();\r\n this.forceUpdate();\r\n }\r\n\r\n getLink() {\r\n let request = { \r\n id: this.props.docId\r\n };\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"gis/getLinks\", request, { withCredentials: true })\r\n .then((response) => {\r\n let result = new AjaxResult(response);\r\n \r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n let content = result.content();\r\n if (!content.hasOwnProperty('parcelIds')) {\r\n this.handleCloseClick();\r\n alert(result.getErrorMessage());\r\n } else {\r\n this.setState( {\r\n parcelIds: content.parcelIds,\r\n parcelIdLinks: content.parcelIdLinks,\r\n header: content.header\r\n });\r\n }\r\n }\r\n }, (error) => {\r\n let result = new AjaxError(error);\r\n result.handleError();\r\n this.handleCloseClick()\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n if (!this.props.show) return;\r\n this.getLink(); \r\n }\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n // We get here is the IMAGE button is clicked or an internal state change\r\n // occurs.\r\n if (!this.props.show) return;\r\n \r\n // Reload state if hide->show or showing+dockey changed\r\n if (!prevProps.show || (this.props.docId !== prevProps.docId)) {\r\n this.getLink();\r\n }\r\n }\r\n\r\n render() {\r\n\r\n let parcelIds = this.state.parcelIds.map((row, index) => {\r\n let link = this.state.parcelIdLinks[index];\r\n return <tr>\r\n <a href={link} target=\"_blank\" rel=\"noopener noreferrer\">{row}</a>\r\n </tr>\r\n })\r\n\r\n let parcelIdsTable =\r\n <Table striped hover size=\"sm\" >\r\n <thead>\r\n <tr>\r\n Parcel IDs\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {parcelIds}\r\n </tbody>\r\n </Table>\r\n\r\n return (\r\n\r\n <Modal show={this.props.show} onHide={this.handleCloseClick} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n \r\n <Modal.Header closeButton >\r\n <Modal.Title style={{color: '#3674AB'}}>{this.state.header}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{borderTop: '2px solid black', height:'50vh', borderBottom: '2px solid black', overflowY: 'scroll'}}>\r\n {parcelIdsTable}\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={this.handleCloseClick}>Close</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n \r\n )\r\n }\r\n}","import React, { Component } from \"react\"\r\nimport { Modal, Container, Row, Col, Button } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\n\r\nimport PageBanner from \"../../common/page/PageBanner\";\r\nimport CountyNotes from \"../../common/page/CountyNotes\";\r\n\r\nimport SelectField from \"../../common/form/SelectField\";\r\n\r\nimport SearchResultsDetails from \"./SearchResultsDetails\";\r\nimport SearchResultsTable from \"./SearchResultsTable\";\r\n\r\nimport { loadDocuments, displayDetails, displayTaxLienDetails, searchByTaxLien, setSelectedSearchType, SpecialSearchTaxLienKey } from \"../../../redux/actions/searchActions\";\r\n\r\nimport { caretSquareDownIcon, caretSquareUpIcon, infoSmallIcon, fileDownloadSmallIcon, backwardSmallIcon, minusIcon, filterIcon } from \"../../../img/font_awesome/font_awesome\"\r\n\r\nimport { searchResultsSort, searchResultsPrint, getSearchResultById } from \"../../../redux/actions/searchActions\";\r\nimport Thumbnails from \"../../image/Thumbnails\";\r\nimport TaxLinks from \"../../external/TaxLinks\";\r\nimport GisLinks from \"../../external/GisLinks\";\r\nimport Alert from '../../common/modal/Alert';\r\nimport { refreshUsageBalance, refreshUsageBalanceFromContent } from \"../../../redux/actions/otherLandLinkActions\";\r\n\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nimport Loading from '../../common/modal/Loading';\r\n\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\n// Child state actions.\r\nconst ALERT_MESSAGE = 'MESSAGE';\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n refreshUsageBalanceFromContent: (content) => dispatch(refreshUsageBalanceFromContent(content)),\r\n refreshUsageBalance: (userId) => dispatch(refreshUsageBalance(userId)),\r\n searchResultsSort: (sort, currentSearch, history, callback) => dispatch(searchResultsSort(sort, currentSearch, history, callback)),\r\n filteredResultsSort: (sortKey, sortDirection) => dispatch({ type: 'SORT_FILTERED_DOCUMENTS', sortKey, sortDirection }),\r\n setSearchResultsSort: (sortKey, sortDirection) => dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_SORT', sort: {sortKey, sortDirection }}),\r\n \r\n searchResultsPrint: (sort, currentSearch, history, callback) => dispatch(searchResultsPrint(sort, currentSearch, history, callback)),\r\n loadDocuments: (searchCriteria, history, link, callback) => dispatch(loadDocuments(searchCriteria, history, callback, link)),\r\n searchByTaxLien: (searchCriteria, history, callback) => dispatch(searchByTaxLien(searchCriteria, history, callback)),\r\n selectDetail: (id, sourcedDocKey, callback) => dispatch(displayDetails(id, sourcedDocKey, callback)),\r\n selectTaxLienDetails: (id, sourcedDocKey, callback) => dispatch(displayTaxLienDetails(id, sourcedDocKey, callback)),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n rewindSearch: () => dispatch({ type: 'REWIND_SEARCH_SEQUENCE'}),\r\n paginate: (pageNumber) => dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_PAGE', pageNumber }),\r\n setSelectedSearchType: (searchType) => dispatch(setSelectedSearchType(searchType)),\r\n showFilteredResults: (searchResults) => dispatch({ type: 'SHOW_FILTERED_SEARCH_RESULTS', searchResults }), // This is the search results table\r\n applySearchResultsFilter: (applyFilter) => dispatch({ type: 'APPLY_SEARCH_RESULTS_FILTER', applyFilter}),\r\n resetRead: () => dispatch({ type: 'RESET_READ'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n searchResults: state.searchResultsReducer,\r\n searchResultsDetails: state.searchDetailsReducer,\r\n bookLabel: state.countyConfigCommonReducer.bookLabel,\r\n showDownloadResultsButton: state.countyConfigSearch2Reducer.downloadResults,\r\n sideNavigationOpen: state.sideNavigationReducer,\r\n currentSearch: state.searchHistoryReducer.searchHistoryList[0],\r\n currentUser: state.currentUserReducer,\r\n pageNumber: state.searchResultsPaginationReducer,\r\n tableLoading: state.searchResultsTableLoadingReducer,\r\n sortKey: state.searchResultsSortReducer.sortKey,\r\n sortDirection: state.searchResultsSortReducer.sortDirection,\r\n notableDates: state.notableDatesReducer,\r\n searchSequence: state.searchSequenceStartedReducer,\r\n searchSequenceSelectedDocumentId: state.searchResultsTableSelectedRowReducer,\r\n filteredDocuments: state.searchResultsFilterReducer, \r\n filterApplied: state.searchResultsFilterAppliedFilter,\r\n searchResultsVisited: state.searchResultsVisitedReducer \r\n };\r\n}\r\n\r\n// This is a big class.\r\n// Here are some common search points:\r\n// image window preview ok\r\n// image window accepted charges\r\n// image window ask for buy options\r\n\r\nclass SearchResults extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.version = 0;\r\n\r\n this.state = {\r\n // filterApplied: false,\r\n searchResultsSort: 'docNumber', // Date is the default sort\r\n searchResultsSortDirection: 'ASC',\r\n imagingWindows: this.createImagingWindowsWindowState('', false),\r\n taxLinks: this.createTaxLinksWindowState('', false),\r\n gisLinks: this.createGisLinksWindowState('', false),\r\n showNotableDatesModal: false,\r\n notableDatesLeft: 600,\r\n notableDates: {},\r\n alertWindow: {\r\n callback: null,\r\n message: '',\r\n show: false,\r\n type: ''\r\n },\r\n loadingStatus: \"\"\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState(\r\n {\r\n searchResultsSort: event.target.value\r\n },\r\n function() { // callback function after the state is set\r\n this.handleSort();\r\n }\r\n )\r\n }\r\n\r\n handleClick = () => {\r\n this.setState(\r\n {\r\n searchResultsSortDirection: this.state.searchResultsSortDirection === 'ASC'? 'DESC' : 'ASC'\r\n },\r\n function() { // callback function after the state is set\r\n this.handleSort();\r\n }\r\n )\r\n }\r\n\r\n handleSort = () => {\r\n if (this.props.filterApplied === true) {\r\n this.props.filteredResultsSort(this.state.searchResultsSort, this.state.searchResultsSortDirection);\r\n this.props.setSearchResultsSort(this.state.searchResultsSort, this.state.searchResultsSortDirection);\r\n } else if (this.showLoading() === true) {\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: this.props.pageNumber });\r\n\t\t this.props.searchResultsSort(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n\t}\r\n\r\n addShowLoading = (newState) => {\r\n newState.loadingStatus = LOADING_STATUES.LOADING;\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n // May return null if not found.\r\n getSelectedSearchResult = () => {\r\n if (!this.props.searchResults || (this.props.searchResultsDetails === 0)) {\r\n return null;\r\n }\r\n\r\n let searchResult = this.props.searchResults.searchResultList.find((searchResult) => {\r\n return this.props.searchResultsDetails == searchResult.docId;\r\n });\r\n\r\n return searchResult;\r\n }\r\n\r\n // Can return null.\r\n getSelectedSearchResultInfo = () => {\r\n let searchResult = this.getSelectedSearchResult();\r\n return this.getSelectedSearchResultInfo2(searchResult);\r\n }\r\n \r\n getSelectedSearchResultInfo2 = (searchResult) => {\r\n if (!searchResult) {\r\n return null;\r\n }\r\n\r\n\t\tlet info = { \r\n sourcedDocKey: searchResult.sourcedDocKey,\r\n instrumentCode: searchResult.instrumentCode\r\n };\r\n\r\n return info;\r\n }\r\n\r\n handleImageClick = () => {\r\n let info = this.getSelectedSearchResultInfo();\r\n\r\n if (!info) {\r\n alert(\"Select a document.\");\r\n return; \r\n }\r\n\r\n this.setState( {\r\n imagingWindows: this.createImagingWindowsWindowState(info, true)\r\n } );\r\n }\r\n\r\n handleImageComplete = () => {\r\n this.setState( {\r\n imagingWindows: this.createImagingWindowsWindowState(null, false)\r\n } );\r\n }\r\n\r\n handleTaxClick = () => {\r\n if (this.props.searchResultsDetails === 0) {\r\n alert(\"Select a document.\");\r\n return; \r\n }\r\n \r\n this.setState( {\r\n taxLinks: this.createTaxLinksWindowState(this.props.searchResultsDetails, true)\r\n } );\r\n }\r\n\r\n hideTaxLinks = () => {\r\n this.setState( {\r\n taxLinks: this.createTaxLinksWindowState(null, false)\r\n } );\r\n }\r\n\r\n handleGisClick = () => {\r\n if (this.props.searchResultsDetails === 0) {\r\n alert(\"Select a document.\");\r\n return; \r\n }\r\n \r\n this.setState( {\r\n gisLinks: this.createGisLinksWindowState(this.props.searchResultsDetails, true)\r\n } );\r\n }\r\n\r\n hideGisLinks = () => {\r\n this.setState( {\r\n gisLinks: this.createGisLinksWindowState(null, false)\r\n } );\r\n }\r\n\r\n createImagingWindowsWindowState = (searchResult, show) => {\r\n return {\r\n sourcedDocKey: searchResult ? searchResult.sourcedDocKey : {},\r\n instCode: searchResult ? searchResult.instrumentCode : '',\r\n show: show\r\n }\r\n }\r\n\r\n createTaxLinksWindowState = (selectedDocId, show) => {\r\n return {\r\n docId: selectedDocId ? selectedDocId : '',\r\n show: show\r\n }\r\n }\r\n\r\n createGisLinksWindowState = (selectedDocId, show) => {\r\n return {\r\n docId: selectedDocId ? selectedDocId : '',\r\n show: show\r\n }\r\n }\r\n \r\n createAlertWindowParams = (show, message, callback, type) => {\r\n if (show) {\r\n return {\r\n callback: callback,\r\n message: message,\r\n show: show,\r\n type: type ? type : ALERT_MESSAGE\r\n };\r\n } else {\r\n return {\r\n callback: null,\r\n message: '',\r\n show: show,\r\n type: ALERT_MESSAGE\r\n };\r\n }\r\n }\r\n\r\n addAlert = (state, alertWindowParams) => {\r\n\t\tstate.alertWindow = alertWindowParams;\r\n }\r\n\t\r\n showAlert = (alertWindowParams) => {\r\n\t\tthis.setState({\r\n\t\t alertWindow: alertWindowParams\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n // After the alert is confirmed, close the alert and pay for the order.\r\n let callback = this.state.alertWindow.callback;\r\n let params = this.createAlertWindowParams(false);\r\n\t\tthis.setState({\r\n\t\t\t alertWindow: params\r\n\t\t },\r\n () => { if (callback) callback(); }\r\n );\r\n\t}\r\n\r\n printResults = (event) => {\r\n event.preventDefault();\r\n if (this.showLoading() === true) {\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: -1 });\r\n\t\t this.props.searchResultsPrint(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n }\r\n \r\n showOriginalResultList = (event) => {\r\n event.preventDefault();\r\n\r\n let request = {}\r\n this.props.searchSequence.displayCriteria.forEach((criteria) => {\r\n request[criteria.key] = criteria.value;\r\n })\r\n \r\n request.updateHistory = true;\r\n request.sortKey = this.props.searchSequence.sortKey; \r\n request.sortDirection = this.props.searchSequence.sortDirection; \r\n \r\n if (this.showLoading() === true) {\r\n if (this.props.searchSequence.pageNumber > 1) {\r\n request.pageNumber = this.props.searchSequence.pageNumber;\r\n this.props.paginate(request.pageNumber);\r\n }\r\n\r\n this.props.resetSearchSequence();\r\n this.props.rewindSearch();\r\n if (this.props.searchSequence.link === 'search/searchByTaxLien') {\r\n this.props.setSelectedSearchType(SpecialSearchTaxLienKey);\r\n this.props.searchByTaxLien(request, this.props.history, this.selectTaxLienDetails);\r\n } else {\r\n this.props.setSelectedSearchType(this.props.searchSequence.type);\r\n this.props.loadDocuments(request, this.props.history, this.props.searchSequence.link, this.selectDetail);\r\n }\r\n }\r\n }\r\n\r\n selectDetail = () => {\r\n let searchResult = getSearchResultById(this, this.props.searchSequenceSelectedDocumentId);\r\n\r\n this.props.selectDetail(this.props.searchSequenceSelectedDocumentId, searchResult.sourcedDocKey, this.hideLoading);\r\n }\r\n\r\n selectTaxLienDetails = () => {\r\n let searchResult = getSearchResultById(this, this.props.searchSequenceSelectedDocumentId);\r\n \r\n this.props.selectTaxLienDetails(this.props.searchSequenceSelectedDocumentId, searchResult.sourcedDocKey, this.hideLoading);\r\n }\r\n\r\n showNotableDates = (event) => {\r\n event.preventDefault();\r\n let notableDatesLeft = Math.ceil(event.clientX / 3);\r\n this.setState({notableDatesLeft, showNotableDatesModal : true});\r\n }\r\n\r\n hideNotableDates = (event) => {\r\n event.preventDefault();\r\n this.setState({showNotableDatesModal : false});\r\n }\r\n\r\n handleApplyFilter = (event) => { \r\n event.preventDefault(); \r\n if (this.props.filterApplied === false) {\r\n this.props.applySearchResultsFilter(true);\r\n this.props.showFilteredResults(this.props.filteredDocuments);\r\n this.props.paginate(1);\r\n } else if (this.showLoading() === true) {\r\n this.props.applySearchResultsFilter(false);\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: this.props.pageNumber });\r\n\t\t this.props.searchResultsSort(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n }\r\n\r\n handleResetRead = (event) => { \r\n event.preventDefault(); \r\n this.props.resetRead(); \r\n }\r\n \r\n componentDidMount() {\r\n this.props.resetRead(); \r\n }\r\n\r\n render() {\r\n \r\n let formTemplateMarginLeft = 60\r\n if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n }\r\n\r\n let buttonIcon = caretSquareDownIcon;\r\n if (this.state.searchResultsSortDirection === 'ASC') {\r\n buttonIcon = caretSquareUpIcon;\r\n }\r\n\r\n let sortOptions = [{ code: \"docNumber\", description: \"Document Number\"}, {code: \"instrument\", description: \"Instrument\"}, {code: \"recordedDate\", description: \"Recorded Date\"}, { code: \"book\", description: this.props.bookLabel }];\r\n\t\tsortOptions.sort((a, b) => \r\n\t\t\t{ \r\n\t\t\t\tif (a.description > b.description) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t \t} else if (a.description < b.description) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t \t}\r\n\t\t\t \treturn 0;\r\n\t\t\t}\r\n\t\t)\r\n\r\n let sortByFormGroup = { layout: 'horizontal', id: 'searchResutlsSort', label: 'Sort by', fieldType: 'select', value: this.props.sortKey, size: \"sm\", options: sortOptions }\r\n \r\n let currentSearchLongDescription = this.props.currentSearch ? this.props.currentSearch.longDescription : \"\"\r\n let currentSearchCriteria = this.props.currentSearch ? this.props.currentSearch.displayCriteria : []\r\n let selectButton = <Button variant=\"primary\" size=\"sm\" onClick={this.handleClick} disabled={this.props.tableLoading}> {buttonIcon} </Button>\r\n\r\n let pageButtons = [];\r\n if (this.props.searchSequence !== null) {\r\n pageButtons.push({ label: 'Back to Search Results', icon:backwardSmallIcon, onClickAction: this.showOriginalResultList, className: 'btn btn-secondary btn-sm' });\r\n }\r\n pageButtons.push({ label: 'Notable Dates', icon:infoSmallIcon, onClickAction: this.showNotableDates, className: 'btn btn-secondary btn-sm' });\r\n\r\n let filter = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleApplyFilter}>{filterIcon} Filter Selections</Button>\r\n if (this.props.filterApplied === true) {\r\n filter = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleApplyFilter}>{minusIcon} Remove Filter</Button>\r\n }\r\n\r\n let read = <></>\r\n if (this.props.searchResultsVisited instanceof Set && this.props.searchResultsVisited.size > 0) {\r\n read = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleResetRead}>{minusIcon} Reset Read</Button>\r\n }\r\n\r\n return (\r\n <div style={{ marginTop: 4, marginLeft: formTemplateMarginLeft, marginRight: 20, marginBottom: 4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }} >\r\n <CountyNotes />\r\n <PageBanner pageHeading={currentSearchLongDescription} searchCriteria={currentSearchCriteria} buttons={pageButtons} />\r\n <Container fluid=\"true\" >\r\n <Row style={{marginRight: 1}}>\r\n <Col lg={7} style={{paddingRight: 0}}>\r\n <div>\r\n { filter } \r\n {read} \r\n {\r\n this.props.showDownloadResultsButton &&\r\n <div className=\"form-inline search-results-sort-dropdown\"> <Button variant=\"secondary\" size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.printResults} >{fileDownloadSmallIcon} Download</Button></div>\r\n }\r\n <SelectField size=\"sm\" formGroup={sortByFormGroup} selectButton={selectButton} onChange={this.handleChange} disabled={this.props.tableLoading}/>\r\n </div>\r\n <SearchResultsTable/>\r\n </Col>\r\n \r\n <Col lg={5} style={{paddingTop: 2, paddingBottom: 4}}>\r\n <SearchResultsDetails handleImageClick={this.handleImageClick} \r\n handleTaxClick={this.handleTaxClick} \r\n handleGisClick={this.handleGisClick} \r\n history={this.props.history}\r\n getSelectedSearchResultInfo={this.getSelectedSearchResultInfo2} />\r\n </Col>\r\n </Row>\r\n </Container>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <Thumbnails show={this.state.imagingWindows.show} \r\n sourcedDocKey={this.state.imagingWindows.sourcedDocKey} \r\n instCode={this.state.imagingWindows.instCode} \r\n complete={this.handleImageComplete} />\r\n <TaxLinks show = {this.state.taxLinks.show}\r\n docId={this.state.taxLinks.docId}\r\n complete={this.hideTaxLinks} />\r\n <GisLinks show = {this.state.gisLinks.show}\r\n docId={this.state.gisLinks.docId}\r\n complete={this.hideGisLinks} />\r\n <Alert show={this.state.alertWindow.show} hideAlert={this.hideAlert} message={this.state.alertWindow.message} type={this.state.alertWindow.type} />\r\n \r\n <Modal show={this.state.showNotableDatesModal} onHide={this.hideNotableDates} style={{ left: this.state.notableDatesLeft, top: 0}} aria-labelledby=\"contained-modal-title-vcenter\" centered >\r\n <Modal.Body style={{ background: '#3674AB', color: 'white', padding: 0 }}>\r\n <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={this.hideNotableDates}>Close</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n \r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SearchResults);","import React, { Component } from \"react\"\r\nimport { Container, Col, Row, Table, Button } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\nimport SearchResultsDetailsNoResults from './SearchResultsDetailsNoResults'\r\nimport Paginator from '../../common/page/Paginator'\r\nimport { getPaginatorHelper } from '../../common/page/PaginatorHelper'\r\nimport Loading from '../../common/modal/Loading';\r\nimport LegalDetails from './LegalDetails';\r\nimport moment from 'moment';\r\nimport Thumbnails from \"../../image/Thumbnails\";\r\n\r\nexport const SearchResultsDetailsLegalDescriptionsComponetName = 'SearchResultsDetailsLegalDescriptions';\r\n\r\nconst mapStateToProps = state => {\r\n\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[0];\r\n\r\n let fromRecordedDate;\r\n let toRecordedDate;\r\n if (searchHistory && searchHistory.displayCriteria) {\r\n const fromRecordedDateCriteria = searchHistory.displayCriteria.filter(criteria => {\r\n return criteria.key === 'fromRecordedDate'\r\n })\r\n\r\n if (Array.isArray(fromRecordedDateCriteria) && fromRecordedDateCriteria.length > 0) {\r\n fromRecordedDate = fromRecordedDateCriteria[0].value;\r\n }\r\n\r\n const toRecordedDateCriteria = searchHistory.displayCriteria.filter(criteria => {\r\n return criteria.key === 'toRecordedDate'\r\n })\r\n if (Array.isArray(toRecordedDateCriteria) && toRecordedDateCriteria.length > 0) {\r\n toRecordedDate = toRecordedDateCriteria[0].value;\r\n }\r\n }\r\n\r\n return { \r\n searchResults: state.searchResultsReducer,\r\n searchResultsDetails: state.searchDetailsTractBookReducer,\r\n \r\n paginationPageLegalDescriptions: state.searchDetailsLegalDescriptionsPaginationReducer,\r\n // If the recorded dates from the original search are available, use them in the Grantor/Grantee link searches.\r\n fromRecordedDate: fromRecordedDate ? fromRecordedDate : moment('01/01/1900').format('L'),\r\n toRecordedDate: toRecordedDate ? toRecordedDate : moment().format('L'),\r\n currentUser: state.currentUserReducer\r\n };\r\n}\r\n\r\nclass TractBookSearchResultsDetails extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n imagingWindows: this.createImagingWindowsWindowState('', false),\r\n loadingStatus: \"\",\r\n showLegalDetails: false\r\n };\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n }\r\n \r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n \r\n showLegalDetails = (event) => {\r\n event.preventDefault();\r\n this.setState({\r\n showLegalDetails: true\r\n })\r\n }\r\n\r\n hideLegalDetails = () => {\r\n this.setState({\r\n showLegalDetails: false\r\n })\r\n }\r\n\r\n // May return null if not found.\r\n getSelectedSearchResult = () => {\r\n if (!this.props.searchResults || (this.props.searchResultsDetails === 0)) {\r\n return null;\r\n }\r\n\r\n let searchResult = this.props.searchResults.searchResultList.find((searchResult) => {\r\n return this.props.searchResultsDetails == searchResult.docId;\r\n });\r\n\r\n return searchResult;\r\n }\r\n\r\n // Can return null.\r\n getSelectedSearchResultInfo = () => {\r\n let searchResult = this.getSelectedSearchResult();\r\n\r\n if (!searchResult) {\r\n return null;\r\n }\r\n\r\n\t\tlet info = { \r\n sourcedDocKey: searchResult.sourcedDocKey,\r\n instrumentCode: '' // there is none for this doc type\r\n };\r\n\r\n return info;\r\n }\r\n\r\n handleImageClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n \r\n let info = this.getSelectedSearchResultInfo();\r\n\r\n if (!info) {\r\n alert(\"Select a document.\");\r\n return; \r\n }\r\n\r\n this.setState( {\r\n imagingWindows: this.createImagingWindowsWindowState(info, true)\r\n } );\r\n }\r\n\r\n handleImageComplete = () => {\r\n this.setState( {\r\n imagingWindows: this.createImagingWindowsWindowState(null, false)\r\n } );\r\n }\r\n\r\n createImagingWindowsWindowState = (searchResult, show) => {\r\n return {\r\n sourcedDocKey: searchResult ? searchResult.sourcedDocKey : {},\r\n instCode: searchResult ? searchResult.instrumentCode : '',\r\n show: show\r\n }\r\n }\r\n\r\n render() {\r\n const numberOfVisibleRecords = 10;\r\n\r\n let selectedSearchResult = this.getSelectedSearchResult();\r\n\r\n if (!selectedSearchResult) {\r\n return (<SearchResultsDetailsNoResults />)\r\n }\r\n\r\n let { docId, instrumentDescription, recordedDateTime, legalSearchResults, } = selectedSearchResult;\r\n let docNumber = selectedSearchResult.sourcedDocKey.docKeyNumber;\r\n let numberOfLegalSearchResultsPages = Math.ceil ( legalSearchResults.length / numberOfVisibleRecords );\r\n let paginationHelperLegalDescriptions = getPaginatorHelper(this.props.paginationPageLegalDescriptions, legalSearchResults, numberOfVisibleRecords);\r\n let imageKeyType = selectedSearchResult.sourcedDocKey.imageKeyType;\r\n\r\n return (\r\n <>\r\n <Col style={{ paddingLeft: 0, marginRight: 0, boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }} >\r\n <Container key={this.props.searchResultsDetails} style={{ paddingLeft: 10, paddingTop: 10, paddingRight: 0, marginRight: 0 }} fluid=\"true\">\r\n <Row >\r\n <Col>\r\n <h5>\r\n <span><strong>{instrumentDescription}</strong> </span>\r\n <span style={{float: 'right'}}>\r\n {\r\n this.props.currentUser.accountDocTypes[imageKeyType].imageRetrieval &&\r\n <Button variant=\"primary\" size=\"sm\" onClick={this.handleImageClick} >Image</Button>\r\n }\r\n </span>\r\n </h5>\r\n </Col>\r\n\r\n </Row>\r\n <hr style={{ background: 'black', marginTop: 2, marginBottom: 2 }}></hr>\r\n \r\n <div>\r\n <div><strong>ID: </strong>{docNumber} </div>\r\n <div><strong>Recorded Date and Time: </strong>{recordedDateTime} </div>\r\n \r\n <Table striped bordered hover variant=\"dark\" size=\"sm\" style={{marginBottom: 0, marginTop: 10}}>\r\n <thead><tr><th scope=\"col\">Legal Description <Button style={{fontSize: '0.7em', fontWeight: 'bold', paddingTop: 0, paddingBottom: 1}} variant=\"primary\" onClick={this.showLegalDetails} >Details</Button> </th></tr></thead>\r\n <tbody>\r\n {\r\n paginationHelperLegalDescriptions.currentPageRecordList.map(legalDescription => {\r\n return <tr id={legalDescription.docId}>\r\n <td className=\"table-td-xs\">\r\n {legalDescription.description}\r\n </td>\r\n </tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n <Row>\r\n <Col><Paginator style={{marginBottom:0}} componentName={SearchResultsDetailsLegalDescriptionsComponetName} numberOfPages={numberOfLegalSearchResultsPages} numberOfVisibleRecords={numberOfVisibleRecords} ></Paginator></Col>\r\n </Row>\r\n \r\n <div style={{marginTop:10}}> </div>\r\n </div>\r\n </Container>\r\n </Col>\r\n <Loading loadingIndicator={this.state.loadingStatus === 'LOADING'} />\r\n <LegalDetails show={this.state.showLegalDetails} hideLegalDetails={this.hideLegalDetails} title={docNumber} key={docId} docId={docId} />\r\n <Thumbnails show={this.state.imagingWindows.show} \r\n sourcedDocKey={this.state.imagingWindows.sourcedDocKey} \r\n instCode={this.state.imagingWindows.instCode} \r\n complete={this.handleImageComplete} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(TractBookSearchResultsDetails);","import React, { Component } from \"react\"\r\nimport { Container, Col, Row, Table, FormCheck } from 'react-bootstrap'\r\n\r\nimport { connect } from \"react-redux\";\r\n\r\nimport { displayTractBookDetails, getSearchResultById } from '../../../redux/actions/searchActions'\r\nimport SearchPaginator from '../../common/page/SearchPaginator'\r\nimport {getPaginatorHelper} from '../../common/page/PaginatorHelper'\r\nimport Loading from '../../common/modal/Loading';\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nconst componentName = 'SearchResultsTable';\r\n\r\nconst mapStateToProps = state => {\r\n\r\n return {\r\n searchResults: state.searchResultsReducer,\r\n paginationPage: state.searchResultsPaginationReducer,\r\n searchResultsSort: state.searchResultsSortReducer, \r\n filterApplied: state.searchResultsFilterAppliedFilter,\r\n searchResultsFilter: state.searchResultsFilterTractBookReducer,\r\n searchResultsVisited: state.searchResultsVisitedReducer\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n select: (id, sourcedDocKey, callback) => {\r\n if (id) {\r\n dispatch(displayTractBookDetails(id, sourcedDocKey, callback))\r\n }\r\n }, // For some reason, id can be null sometimes, so checking to see if id has a value.\r\n filterResults: (document, sortKey, sortDirection, callback) => dispatch({ type: 'FILTER_TRACT_BOOK_ID', document, sortKey, sortDirection }, callback())\r\n }\r\n}\r\n\r\nclass TractBookSearchResultsTable extends Component {\r\n state = {\r\n selectedId: null,\r\n loadingStatus: ''\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === '') {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n }\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n handleRowClick = (event) => {\r\n const clickedId = event.target.closest(\"tr\").id; // find the closest parent tr\r\n\r\n if (this.showLoading() === true) {\r\n this.setState({ selectedId: clickedId });\r\n\r\n let searchResult = getSearchResultById(this, clickedId);\r\n\r\n this.props.select(clickedId, searchResult.sourcedDocKey, this.hideLoading);\r\n }\r\n }\r\n\r\n handleCheckFilterLimit = () => {\r\n if (this.props.searchResultsFilter.totalRecordCount >= 100) {\r\n this.setState(\r\n {\r\n showAlert: true,\r\n alertMessage: 'You have reached the limit of selecting up to 100 records.'\r\n });\r\n }\r\n }\r\n\r\n handleCheckClick = (event) => {\r\n const clickedId = event.target.closest(\"tr\").id; // find the closest parent tr\r\n this.props.searchResults.searchResultList.map((searchResult) => {\r\n if (searchResult.docId == clickedId) {\r\n this.props.filterResults(searchResult, this.props.searchResultsSort.sortKey, this.props.searchResultsSort.sortDirection, this.handleCheckFilterLimit);\r\n }\r\n });\r\n }\r\n\r\n checkSelected = (id) => {\r\n for (const element of this.props.searchResultsFilter.searchResultList) {\r\n if (element.docId == id) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n render() {\r\n\r\n let filteredList = this.props.searchResults.searchResultList;\r\n const numberOfVisibleRecords = 100;\r\n let numberOfPages = Math.ceil ( filteredList.length / numberOfVisibleRecords );\r\n\t\tlet paginationHelper = getPaginatorHelper(this.props.paginationPage, filteredList, numberOfVisibleRecords);\r\n\r\n let displayResults = paginationHelper.currentPageStartingRecordNumber === paginationHelper.currentPageEndingRecordNumber ? \r\n paginationHelper.currentPageStartingRecordNumber :\r\n paginationHelper.currentPageStartingRecordNumber + \"-\" + paginationHelper.currentPageEndingRecordNumber;\r\n\r\n return (\r\n <>\r\n \r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, paddingBottom: 50}}>\r\n <Table responsive striped bordered hover size=\"sm\" style={{ maxHeight: 600, overflowY: 'auto', display: 'inline-block'}} >\r\n <thead style={{ display: 'table', width: '100%', tableLayout: 'fixed'}}>\r\n <tr>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '4%' }}></th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '18%' }}>Tract Book ID<br />Recorded Date</th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '78%' }}>Legal<br /> </th>\r\n </tr>\r\n </thead>\r\n <tbody key={this.props.paginationPage} style={{ display: 'table', width: '100%', tableLayout: 'fixed', cursor: \"pointer\"}} >\r\n {\r\n paginationHelper.currentPageRecordList.map((searchResult) => {\r\n const legalDescriptionsBadge = searchResult.legalSearchResults && searchResult.legalSearchResults.length > 1 ? \"more\" : \"\";\r\n const legalDescriptionOne = searchResult.legalSearchResults && searchResult.legalSearchResults.length > 0 && searchResult.legalSearchResults[0] ? searchResult.legalSearchResults[0].description : '';\r\n\r\n let selectedClass = this.state.selectedId == searchResult.docId ? \"table-active\" : \"\"; // highlight the selected row\r\n const selected = this.checkSelected(searchResult.docId);\r\n \r\n let cursorStyle = {cursor: 'wait' };\r\n if (searchResult.docId) {\r\n cursorStyle = { cursor: 'pointer' }\r\n }\r\n \r\n let badgeClass = 'badge-light';\r\n if (this.props.searchResultsVisited instanceof Set && this.props.searchResultsVisited.has(searchResult.docId+\"\")) {\r\n cursorStyle = {...cursorStyle, ...{color: 'darkgray'}} \r\n badgeClass = 'badge-info';\r\n }\r\n \r\n return (\r\n <tr className={selectedClass} style={cursorStyle} id={searchResult.docId} name={searchResult.sourcedDocKey.docKeyNumber} onClick={this.handleRowClick}>\r\n { \r\n selected &&\r\n <td className=\"table-td-xs\" style={{ width: '4%' }} ><FormCheck onChange={this.handleCheckClick} checked={true} disabled={this.props.filterApplied}></FormCheck></td>\r\n }\r\n { \r\n !selected &&\r\n <td className=\"table-td-xs\" style={{ width: '4%' }} ><FormCheck onChange={this.handleCheckClick} checked={false} disabled={this.props.filterApplied}></FormCheck></td>\r\n }\r\n <td className=\"table-td-xs\" style={{ width: '18%' }} ><strong>{searchResult.sourcedDocKey.docKeyNumber}</strong><br />{searchResult.recordedDate}<br/></td>\r\n <td className=\"table-td-xs\" style={{ width: '78%' }} >{legalDescriptionOne} <span className='badge badge-light'>{legalDescriptionsBadge}</span></td>\r\n </tr>\r\n )\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n <Row>\r\n <Col style={{ marginLeft: 4}} ><SearchPaginator style={{justifyContent: 'center'}} componentName={componentName} numberOfVisibleRecords={numberOfVisibleRecords} numberOfPages={numberOfPages} ></SearchPaginator></Col>\r\n\t\t\t\t\t</Row>\r\n <Row>\r\n <Col style={{ marginLeft: 4}} >Displaying Results: {displayResults} of {filteredList.length}</Col>\r\n </Row>\r\n </Container>\r\n \r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TractBookSearchResultsTable);","import React, { Component } from \"react\"\r\nimport { Container, Row, Col, Button } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\n\r\nimport PageBanner from \"../../common/page/PageBanner\";\r\nimport CountyNotes from \"../../common/page/CountyNotes\";\r\n\r\nimport SelectField from \"../../common/form/SelectField\";\r\n\r\nimport TractBookSearchResultsDetails from \"./TractBookSearchResultsDetails\";\r\nimport TractBookSearchResultsTable from \"./TractBookSearchResultsTable\";\r\n\r\nimport { caretSquareDownIcon, caretSquareUpIcon, minusIcon, filterIcon } from \"../../../img/font_awesome/font_awesome\"\r\n\r\nimport { searchResultsSort } from \"../../../redux/actions/searchActions\";\r\n\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport Loading from '../../common/modal/Loading';\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n searchResultsSort: (sort, currentSearch, history, callback) => dispatch(searchResultsSort(sort, currentSearch, history, callback)),\r\n filteredResultsSort: (sortKey, sortDirection) => dispatch({ type: 'SORT_FILTERED_TRACT_BOOK', sortKey, sortDirection }),\r\n setSearchResultsSort: (sortKey, sortDirection) => dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_SORT', sort: {sortKey, sortDirection }}),\r\n\r\n paginate: (pageNumber) => dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_PAGE', pageNumber }),\r\n showFilteredResults: (searchResults) => dispatch({ type: 'SHOW_FILTERED_SEARCH_RESULTS', searchResults }), // This is the search results table\r\n applySearchResultsFilter: (applyFilter) => dispatch({ type: 'APPLY_SEARCH_RESULTS_FILTER', applyFilter}),\r\n resetRead: () => dispatch({ type: 'RESET_READ'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer,\r\n currentSearch: state.searchHistoryReducer.searchHistoryList[0],\r\n searchResults: state.searchResultsReducer,\r\n pageNumber: state.searchResultsPaginationReducer,\r\n filteredDocuments: state.searchResultsFilterTractBookReducer, \r\n filterApplied: state.searchResultsFilterAppliedFilter,\r\n searchResultsVisited: state.searchResultsVisitedReducer,\r\n searchResultsVisitedApplied: state.searchResultsVisitedAppliedReducer \r\n };\r\n}\r\n\r\nclass TractBookSearchResults extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n searchResultsSort: 'docNumber', \r\n searchResultsSortDirection: 'ASC',\r\n loadingStatus: \"\"\r\n } \r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState(\r\n {\r\n searchResultsSort: event.target.value\r\n },\r\n function() { // callback function after the state is set\r\n this.handleSort();\r\n }\r\n )\r\n }\r\n\r\n handleClick = () => {\r\n this.setState(\r\n {\r\n searchResultsSortDirection: this.state.searchResultsSortDirection === 'ASC'? 'DESC' : 'ASC'\r\n },\r\n function() { // callback function after the state is set\r\n this.handleSort();\r\n }\r\n )\r\n }\r\n \r\n handleSort = () => {\r\n if (this.props.filterApplied === true) {\r\n this.props.filteredResultsSort(this.state.searchResultsSort, this.state.searchResultsSortDirection);\r\n this.props.setSearchResultsSort(this.state.searchResultsSort, this.state.searchResultsSortDirection);\r\n } else if (this.showLoading() === true) {\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: this.props.pageNumber });\r\n\t\t this.props.searchResultsSort(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n\t}\r\n\r\n handleApplyFilter = (event) => { \r\n if (this.props.filterApplied === false) {\r\n this.props.applySearchResultsFilter(true);\r\n this.props.showFilteredResults(this.props.filteredDocuments);\r\n this.props.paginate(1);\r\n } else if (this.showLoading() === true) {\r\n this.props.applySearchResultsFilter(false);\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: this.props.pageNumber });\r\n\t\t this.props.searchResultsSort(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n }\r\n\r\n handleResetRead = (event) => { \r\n event.preventDefault(); \r\n this.props.resetRead(); \r\n }\r\n\r\n componentDidMount() {\r\n this.props.resetRead(); \r\n }\r\n\r\n render() {\r\n let formTemplateMarginLeft = 60;\r\n if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270;\r\n }\r\n\r\n let buttonIcon = caretSquareDownIcon;\r\n if (this.state.searchResultsSortDirection === 'ASC') {\r\n buttonIcon = caretSquareUpIcon;\r\n }\r\n\r\n let sortByFormGroup = { layout: 'horizontal', id: 'searchResutlsSort', label: 'Sort by', fieldType: 'select', value: \"N\", size: \"sm\", options: [{ code: \"docNumber\", description: \"Tract Book ID\"}, {code: \"recordedDate\", description: \"Recorded Date\"}] }\r\n\r\n let currentSearchLongDescription = this.props.currentSearch ? this.props.currentSearch.longDescription : \"\"\r\n let currentSearchCriteria = this.props.currentSearch ? this.props.currentSearch.displayCriteria : []\r\n let selectButton = <Button variant=\"primary\" size=\"sm\" onClick={this.handleClick}> {buttonIcon} </Button>\r\n\r\n let filter = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleApplyFilter}>{filterIcon} Filter Selections</Button>\r\n if (this.props.filterApplied === true) {\r\n filter = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleApplyFilter}>{minusIcon} Remove Filter</Button>\r\n }\r\n\r\n let read = <></>\r\n if (this.props.searchResultsVisitedApplied === true) {\r\n read = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleResetRead}>{minusIcon} Reset Read</Button>\r\n }\r\n\r\n return (\r\n <div style={{ marginTop: 4, marginLeft: formTemplateMarginLeft, marginRight: 20, marginBottom: 4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }} >\r\n <CountyNotes />\r\n <PageBanner pageHeading={currentSearchLongDescription} searchCriteria={currentSearchCriteria} />\r\n\r\n <Container fluid=\"true\" >\r\n <Row style={{marginRight: 1}}>\r\n <Col lg={7} style={{paddingRight: 0}}>\r\n { filter }\r\n {read} \r\n <SelectField size=\"sm\" formGroup={sortByFormGroup} selectButton={selectButton} onChange={this.handleChange} />\r\n <TractBookSearchResultsTable />\r\n </Col>\r\n\r\n <Col lg={5} style={{paddingTop: 2, paddingBottom: 4}}>\r\n <TractBookSearchResultsDetails history={this.props.history}/>\r\n </Col>\r\n </Row>\r\n \r\n </Container>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(TractBookSearchResults);","import React, { Component } from \"react\"\r\nimport { Container, Col, Row, Table, FormCheck } from 'react-bootstrap'\r\n\r\nimport { connect } from \"react-redux\";\r\nimport Loading from '../../common/modal/Loading';\r\nimport { displayTaxLienDetails, getSearchResultById } from '../../../redux/actions/searchActions'\r\nimport SearchPaginator from '../../common/page/SearchPaginator'\r\nimport {getPaginatorHelper} from '../../common/page/PaginatorHelper'\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nimport CreditCardSearchAuthWindow from \"../../../components/common/form/CreditCardSearchAuthWindow\";\r\nimport CreditCardPriceListWindow from \"../../../components/common/form/CreditCardPriceListWindow\";\r\nimport CreditCardPriceListReAuthWindow from \"../../../components/common/form/CreditCardPriceListReAuthWindow\"\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\n\r\nexport const SearchResultsTableComponetName = 'TaxLienSearchResultsTable';\r\n\r\nconst mapStateToProps = state => {\r\n\r\n return {\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n bookLabel: state.countyConfigCommonReducer.bookLabel,\r\n searchResults: state.searchResultsReducer,\r\n paginationPage: state.searchResultsPaginationReducer,\r\n tableLoading: state.searchResultsTableLoadingReducer,\r\n selectedRow: state.searchResultsTableSelectedRowReducer,\r\n rewind: state.searchSequenceRewindReducer,\r\n searchResultsSort: state.searchResultsSortReducer, \r\n filterApplied: state.searchResultsFilterAppliedFilter,\r\n searchResultsFilter: state.searchResultsFilterTaxLiensReducer,\r\n searchResultsVisited: state.searchResultsVisitedReducer\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n select: (id, sourcedDocKey, callback) => {\r\n if (id) {\r\n dispatch(displayTaxLienDetails(id, sourcedDocKey, callback))\r\n }\r\n }, // For some reason, id can be null sometimes, so checking to see if id has a value.\r\n filterResults: (document, sortKey, sortDirection, callback) => dispatch({ type: 'FILTER_TAX_LIEN_ID', document, sortKey, sortDirection }, callback()),\r\n resetRewindSearch: () => dispatch({ type: 'RESET_REWIND_SEARCH_SEQUENCE'})\r\n }\r\n}\r\n\r\nclass TaxLienSearchResultsTable extends Component {\r\n state = {\r\n selectedDocumentId: null,\r\n selectedDocumentName: '',\r\n loadingStatus: '',\r\n\r\n token: null,\r\n\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n \r\n showLoading = () => {\r\n if (this.state.loadingStatus === '') {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\"\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleAuthorizedSubmit = () => {\r\n let searchResult = getSearchResultById(this, this.state.selectedDocumentId);\r\n\r\n this.props.select(this.state.selectedDocumentId, searchResult.sourcedDocKey, this.hideLoading);\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState({creditCardAuthorizeDotNetWindowShow:true});\r\n }\r\n \r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleRowClick = (event) => {\r\n const clickedId = event.target.closest(\"tr\").id; // find the closest parent tr\r\n this.props.resetRewindSearch();\r\n if (this.showLoading() === true) {\r\n const selectedDocumentName = event.target.closest(\"tr\").getAttribute(\"name\");\r\n this.setState({ selectedDocumentId: clickedId, selectedDocumentName });\r\n\r\n let searchResult = getSearchResultById(this, clickedId);\r\n\r\n this.props.select(clickedId, searchResult.sourcedDocKey, this.hideLoading);\r\n }\r\n }\r\n\r\n handleCheckFilterLimit = () => {\r\n if (this.props.searchResultsFilter.totalRecordCount >= 100) {\r\n this.setState(\r\n {\r\n showAlert: true,\r\n alertMessage: 'You have reached the limit of selecting up to 100 records.'\r\n });\r\n }\r\n }\r\n\r\n handleCheckClick = (event) => {\r\n const clickedId = event.target.closest(\"tr\").id; // find the closest parent tr\r\n this.props.searchResults.searchResultList.map((searchResult) => {\r\n if (searchResult.docId == clickedId) {\r\n this.props.filterResults(searchResult, this.props.searchResultsSort.sortKey, this.props.searchResultsSort.sortDirection, this.handleCheckFilterLimit);\r\n }\r\n });\r\n }\r\n\r\n checkSelected = (docId) => {\r\n \r\n for (const element of this.props.searchResultsFilter.searchResultList) {\r\n if (element.docId === docId) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n let loadingLabel = this.props.tableLoading === true ? 'Loading' : \"Displaying\";\r\n // apply any inactive filter and text filter\r\n\t\t// let filteredList = this.props.accounts.filter(accountResult => \r\n // \t(this.state.includeInactive || accountResult.active) && ( !this.state.filterText || accountResult.name.includes(this.state.filterText)))\r\n let filteredList = this.props.searchResults.searchResultList;\r\n const numberOfVisibleRecords = 100;\r\n let numberOfPages = Math.ceil ( filteredList.length / numberOfVisibleRecords );\r\n\t\tlet paginationHelper = getPaginatorHelper(this.props.paginationPage, filteredList, numberOfVisibleRecords);\r\n\r\n let displayResults = paginationHelper.currentPageStartingRecordNumber === paginationHelper.currentPageEndingRecordNumber ? \r\n paginationHelper.currentPageStartingRecordNumber :\r\n paginationHelper.currentPageStartingRecordNumber + \"-\" + paginationHelper.currentPageEndingRecordNumber;\r\n\r\n let truncatedResultWarning = <></>;\r\n if (filteredList.length >= 1000) {\r\n truncatedResultWarning = <span className='badge badge-danger'>Results truncated. If needed, narrow criteria and search again.</span>\r\n }\r\n\r\n // The authorize.net window in CreditCardSearchAuthWindow needs to re-render every time apparently. I tried to use the authorize.net token as the component key, but apparently, \r\n // the token either is too big or has characteers that didn't work out. Therefore, I'm using a random number to force it re-render each time.\r\n const creditCardAuthorizeDotNetWindowKey = Math.ceil(Math.random() * 1000000000) + \"\";\r\n\r\n let selectedDocumentId = 0;\r\n if (this.props.rewind === true) {\r\n selectedDocumentId = this.props.selectedRow;\r\n } else {\r\n selectedDocumentId = this.state.selectedDocumentId;\r\n }\r\n\r\n return (\r\n <>\r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, paddingBottom: 50}}>\r\n <Table responsive striped bordered hover size=\"sm\" style={{ maxHeight: 600, overflowY: 'auto', display: 'inline-block'}} >\r\n <thead style={{ display: 'table', width: '100%', tableLayout: 'fixed'}}>\r\n <tr>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '4%' }}></th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '30%' }}>Instrument<br />Document #</th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '16%' }}>Recorded Date<br />Lien Date</th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '30%' }}>Lien #<br />Taxpayers<br /></th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '20%' }}>Revisions<br />Releases/Revokes</th>\r\n </tr>\r\n </thead>\r\n <tbody key={this.props.paginationPage} style={{ display: 'table', width: '100%', tableLayout: 'fixed', cursor: \"pointer\"}} >\r\n {\r\n paginationHelper.currentPageRecordList.map((searchResult) => {\r\n const selectedClass = selectedDocumentId == searchResult.docId ? \"table-active\" : \"\"; // highlight the selected row\r\n\r\n let taxpayersBadge = searchResult.taxpayerSearchResults && searchResult.taxpayerSearchResults.length > 1 ? \"more\" : \"\";\r\n let taxpayerDisplayName = searchResult.taxpayerSearchResults && searchResult.taxpayerSearchResults.length > 0 && searchResult.taxpayerSearchResults[0] ? searchResult.taxpayerSearchResults[0].name : '';\r\n \r\n let releasesBadge = searchResult.releaseSearchResults && searchResult.releaseSearchResults.length > 1 ? \"more\" : \"\";\r\n let hasReleaseOne = searchResult.releaseSearchResults && searchResult.releaseSearchResults.length > 0 && searchResult.releaseSearchResults[0];\r\n \r\n let releaseReovokeOne = '';\r\n if (hasReleaseOne) {\r\n let releaseOne = '--';\r\n let releaseDocNumber = searchResult.releaseSearchResults[0].releaseDisplayDocNumber;\r\n if (releaseDocNumber && releaseDocNumber !== '') {\r\n releaseOne = releaseDocNumber;\r\n }\r\n\r\n let revokeOne = '--';\r\n let revokeDocNumber = searchResult.releaseSearchResults[0].revokeDisplayDocNumber;\r\n if (revokeDocNumber && revokeDocNumber !== '') {\r\n revokeOne = revokeDocNumber;\r\n }\r\n\r\n releaseReovokeOne = releaseOne + ' / ' + revokeOne; \r\n }\r\n \r\n let revisionsBadge = searchResult.revisionSearchResults && searchResult.revisionSearchResults.length > 1 ? \"more\" : \"\";\r\n let revisionOne = searchResult.revisionSearchResults && searchResult.revisionSearchResults.length > 0 && searchResult.revisionSearchResults[0] ? searchResult.revisionSearchResults[0].displayDocNumber : '';\r\n\r\n const selected = this.checkSelected(searchResult.docId);\r\n\r\n let cursorStyle = {cursor: 'wait' };\r\n if (searchResult.docId) {\r\n cursorStyle = { cursor: 'pointer' }\r\n }\r\n \r\n let badgeClass = 'badge-light';\r\n if (this.props.searchResultsVisited instanceof Set && this.props.searchResultsVisited.has(searchResult.docId+\"\")) {\r\n cursorStyle = {...cursorStyle, ...{color: 'darkgray'}} \r\n badgeClass = 'badge-info';\r\n }\r\n\r\n return (\r\n <tr className={selectedClass} style={cursorStyle} id={searchResult.docId} name={searchResult.displayDocNumber} onClick={this.handleRowClick}>\r\n { \r\n selected &&\r\n <td className=\"table-td-xs\" style={{ width: '4%' }} ><FormCheck onChange={this.handleCheckClick} checked={true} disabled={this.props.filterApplied}></FormCheck></td>\r\n }\r\n { \r\n !selected &&\r\n <td className=\"table-td-xs\" style={{ width: '4%' }} ><FormCheck onChange={this.handleCheckClick} checked={false} disabled={this.props.filterApplied}></FormCheck></td>\r\n }\r\n <td className=\"table-td-xs\" style={{ width: '30%' }} ><strong>{searchResult.instrumentDescription}</strong><br />{searchResult.displayDocNumber ? searchResult.displayDocNumber : 'Loading'}<br/></td>\r\n <td className=\"table-td-xs\" style={{ width: '16%' }}>{searchResult.recordedDate}<br/>{searchResult.lienDate}</td>\r\n <td className=\"table-td-xs\" style={{ width: '30%' }}>{searchResult.lienNumber}<br/>{taxpayerDisplayName} <span className='badge badge-light'>{taxpayersBadge}</span></td>\r\n <td className=\"table-td-xs\" style={{ width: '20%' }}>{revisionOne} <span className='badge badge-light'>{revisionsBadge}</span><br/>{releaseReovokeOne} <span className='badge badge-light'>{releasesBadge}</span></td>\r\n </tr>\r\n )\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n <Row>\r\n <Col style={{ marginLeft: 4}} >{loadingLabel} Results: {displayResults} of {filteredList.length} {truncatedResultWarning}</Col>\r\n </Row>\r\n <Row>\r\n <Col style={{ marginLeft: 4}} ><SearchPaginator style={{ justifyContent: 'center' }} componentName={SearchResultsTableComponetName} numberOfVisibleRecords={numberOfVisibleRecords} numberOfPages={numberOfPages} ></SearchPaginator></Col>\r\n </Row>\r\n </Container>\r\n \r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <CreditCardPriceListWindow show={this.state.creditCardPriceListWindowShow} handleContinueClicked={this.handleCreditCardPriceListContinue} handleCloseClicked={this.handleCreditCardPriceListClose} />\r\n {this.state.creditCardAuthorizeDotNetWindowShow && <CreditCardSearchAuthWindow show={this.state.creditCardAuthorizeDotNetWindowShow} handleAuthorizedSubmit={this.handleAuthorizedSubmit} handleCloseClicked={this.handleCreditCardAuthorizeDotNetWindowClose} token={this.state.token} />}\r\n <CreditCardPriceListReAuthWindow show={this.state.creditCardPriceListReAuthWindowShow} handleContinueClicked={this.handleCreditCardPriceListReAuth} handleCloseClicked={this.handleCreditCardPriceListReAuthWindowClose} />\r\n\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TaxLienSearchResultsTable);","import React, { Component } from \"react\"\r\nimport { Modal, Container, Row, Col, Button } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\n\r\nimport PageBanner from \"../../common/page/PageBanner\";\r\nimport CountyNotes from \"../../common/page/CountyNotes\";\r\n\r\nimport SelectField from \"../../common/form/SelectField\";\r\n\r\nimport TaxLienSearchResultsDetails from \"./TaxLienSearchResultsDetails\";\r\nimport TaxLienSearchResultsTable from \"./TaxLienSearchResultsTable\";\r\n\r\nimport { caretSquareDownIcon, caretSquareUpIcon, infoSmallIcon, backwardSmallIcon, minusIcon, filterIcon, fileDownloadSmallIcon } from \"../../../img/font_awesome/font_awesome\"\r\n\r\nimport { searchResultsSort, displayTaxLienDetails, searchByTaxLien, searchResultsPrint, getSearchResultById } from \"../../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport Loading from '../../common/modal/Loading';\r\n\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n searchResultsSort: (sort, currentSearch, history, callback) => dispatch(searchResultsSort(sort, currentSearch, history, callback)),\r\n filteredResultsSort: (sortKey, sortDirection) => dispatch({ type: 'SORT_FILTERED_TAX_LIENS', sortKey, sortDirection }),\r\n setSearchResultsSort: (sortKey, sortDirection) => dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_SORT', sort: {sortKey, sortDirection }}),\r\n \r\n searchResultsPrint: (sort, currentSearch, history, callback) => dispatch(searchResultsPrint(sort, currentSearch, history, callback)),\r\n searchByTaxLien: (searchCriteria, history, callback) => dispatch(searchByTaxLien(searchCriteria, history, callback)),\r\n selectDetail: (id, sourcedDocKey, callback) => dispatch(displayTaxLienDetails(id, sourcedDocKey, callback)),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n rewindSearch: () => dispatch({ type: 'REWIND_SEARCH_SEQUENCE'}),\r\n paginate: (pageNumber) => dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_PAGE', pageNumber }),\r\n showFilteredResults: (searchResults) => dispatch({ type: 'SHOW_FILTERED_SEARCH_RESULTS', searchResults }), // This is the search results table\r\n applySearchResultsFilter: (applyFilter) => dispatch({ type: 'APPLY_SEARCH_RESULTS_FILTER', applyFilter}),\r\n resetRead: () => dispatch({ type: 'RESET_READ'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n bookLabel: state.countyConfigCommonReducer.bookLabel,\r\n sideNavigationOpen: state.sideNavigationReducer,\r\n currentSearch: state.searchHistoryReducer.searchHistoryList[0],\r\n searchResults: state.searchResultsReducer,\r\n pageNumber: state.searchResultsPaginationReducer,\r\n tableLoading: state.searchResultsTableLoadingReducer,\r\n sortKey: state.searchResultsSortReducer.sortKey,\r\n notableDates: state.notableDatesReducer,\r\n searchSequence: state.searchSequenceStartedReducer,\r\n searchSequenceSelectedDocumentId: state.searchResultsTableSelectedRowReducer,\r\n filteredDocuments: state.searchResultsFilterTaxLiensReducer, \r\n filterApplied: state.searchResultsFilterAppliedFilter,\r\n searchResultsVisited: state.searchResultsVisitedReducer,\r\n searchResultsVisitedApplied: state.searchResultsVisitedAppliedReducer, \r\n showDownloadResultsButton: state.countyConfigSearch2Reducer.downloadResults \r\n };\r\n}\r\n\r\nclass TaxLienSearchResults extends Component {\r\n\r\n state = {\r\n searchResultsSort: 'docNumber', // Date is the default sort\r\n searchResultsSortDirection: 'ASC',\r\n showNotableDatesModal: false,\r\n notableDatesLeft: 600,\r\n notableDates: {},\r\n loadingStatus: \"\"\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState(\r\n {\r\n searchResultsSort: event.target.value\r\n },\r\n function() { // callback function after the state is set\r\n this.handleSort();\r\n }\r\n )\r\n }\r\n\r\n handleClick = () => {\r\n this.setState(\r\n {\r\n searchResultsSortDirection: this.state.searchResultsSortDirection === 'ASC'? 'DESC' : 'ASC'\r\n },\r\n function() { // callback function after the state is set\r\n this.handleSort();\r\n }\r\n )\r\n }\r\n\r\n handleSort = () => {\r\n if (this.props.filterApplied === true) {\r\n this.props.filteredResultsSort(this.state.searchResultsSort, this.state.searchResultsSortDirection);\r\n this.props.setSearchResultsSort(this.state.searchResultsSort, this.state.searchResultsSortDirection);\r\n } else if (this.showLoading() === true) {\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: this.props.pageNumber });\r\n\t\t this.props.searchResultsSort(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n\t}\r\n\r\n printResults = (event) => {\r\n event.preventDefault();\r\n if (this.showLoading() === true) {\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: -1 });\r\n\t\t this.props.searchResultsPrint(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n }\r\n\r\n showOriginalResultList = (event) => {\r\n event.preventDefault();\r\n\r\n let request = {}\r\n this.props.searchSequence.displayCriteria.forEach((criteria) => {\r\n request[criteria.key] = criteria.value;\r\n })\r\n\r\n request.updateHistory = true;\r\n request.sortKey = this.props.searchSequence.sortKey; \r\n request.sortDirection = this.props.searchSequence.sortDirection;\r\n \r\n if (this.showLoading() === true) {\r\n if (this.props.searchSequence.pageNumber > 1) {\r\n request.pageNumber = this.props.searchSequence.pageNumber;\r\n this.props.paginate(request.pageNumber);\r\n }\r\n\r\n this.props.resetSearchSequence();\r\n this.props.rewindSearch();\r\n this.props.searchByTaxLien(request, this.props.history, this.selectDetail); \r\n }\r\n }\r\n\r\n selectDetail = () => {\r\n let searchResult = getSearchResultById(this, this.props.searchSequenceSelectedDocumentId);\r\n\r\n this.props.selectDetail(this.props.searchSequenceSelectedDocumentId, searchResult.sourcedDocKey, this.hideLoading);\r\n }\r\n\r\n showNotableDates = (event) => {\r\n event.preventDefault();\r\n let notableDatesLeft = Math.ceil(event.clientX / 3);\r\n this.setState({notableDatesLeft, showNotableDatesModal : true});\r\n }\r\n\r\n hideNotableDates = (event) => {\r\n event.preventDefault();\r\n this.setState({showNotableDatesModal : false});\r\n }\r\n\r\n handleApplyFilter = (event) => { \r\n event.preventDefault();\r\n if (this.props.filterApplied === false) {\r\n this.props.applySearchResultsFilter(true);\r\n this.props.showFilteredResults(this.props.filteredDocuments);\r\n this.props.paginate(1);\r\n } else if (this.showLoading() === true) {\r\n this.props.applySearchResultsFilter(false);\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: this.props.pageNumber });\r\n\t\t this.props.searchResultsSort(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n }\r\n \r\n handleResetRead = (event) => { \r\n event.preventDefault(); \r\n this.props.resetRead(); \r\n }\r\n\r\n componentDidMount() {\r\n this.props.resetRead(); \r\n }\r\n\r\n render() {\r\n let formTemplateMarginLeft = 60\r\n if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n }\r\n\r\n let buttonIcon = caretSquareDownIcon;\r\n if (this.state.searchResultsSortDirection === 'ASC') {\r\n buttonIcon = caretSquareUpIcon;\r\n }\r\n\r\n let sortOptions = [{ code: \"docNumber\", description: \"Document Number\"}, {code: \"recordedDate\", description: \"Recorded Date\"}, {code: \"lienDate\", description: \"Lien Date\"}, {code: \"lienNumber\", description: \"Lien Number\"}];\r\n\t\tsortOptions.sort((a, b) => \r\n\t\t\t{ \r\n\t\t\t\tif (a.description > b.description) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t \t} else if (a.description < b.description) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t \t}\r\n\t\t\t \treturn 0;\r\n\t\t\t}\r\n\t\t)\r\n\r\n let sortByFormGroup = { layout: 'horizontal', id: 'searchResutlsSort', label: 'Sort by', fieldType: 'select', value: this.props.sortKey, size: \"sm\", options: sortOptions }\r\n \r\n let currentSearchLongDescription = this.props.currentSearch ? this.props.currentSearch.longDescription : \"\"\r\n let currentSearchCriteria = this.props.currentSearch ? this.props.currentSearch.displayCriteria : []\r\n let selectButton = <Button variant=\"primary\" size=\"sm\" onClick={this.handleClick}> {buttonIcon} </Button>\r\n\r\n let pageButtons = [];\r\n if (this.props.searchSequence !== null) {\r\n pageButtons.push({ label: 'Back to Search Results', icon:backwardSmallIcon, onClickAction: this.showOriginalResultList, className: 'btn btn-secondary btn-sm' });\r\n }\r\n pageButtons.push({ label: 'Notable Dates', icon:infoSmallIcon, onClickAction: this.showNotableDates, className: 'btn btn-secondary btn-sm' });\r\n\r\n let filter = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleApplyFilter}>{filterIcon} Filter Selections</Button>\r\n if (this.props.filterApplied === true) {\r\n filter = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleApplyFilter}>{minusIcon} Remove Filter</Button>\r\n }\r\n\r\n // let read = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4, display: 'none'}} onClick={this.handleResetRead}>{minusIcon} Reset Read</Button>\r\n let read = <></>\r\n if (this.props.searchResultsVisitedApplied === true) {\r\n read = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleResetRead}>{minusIcon} Reset Read</Button> \r\n }\r\n\r\n return (\r\n <div style={{ marginTop: 4, marginLeft: formTemplateMarginLeft, marginRight: 20, marginBottom: 4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }} >\r\n <CountyNotes />\r\n <PageBanner pageHeading={currentSearchLongDescription} searchCriteria={currentSearchCriteria} buttons={pageButtons} />\r\n <Container fluid=\"true\" >\r\n <Row style={{marginRight: 1}}>\r\n <Col lg={7} style={{paddingRight: 0}}> \r\n {filter}\r\n {read} \r\n {\r\n this.props.showDownloadResultsButton &&\r\n <div className=\"form-inline search-results-sort-dropdown\"> <Button variant=\"secondary\" size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.printResults} >{fileDownloadSmallIcon} Download</Button></div>\r\n } \r\n <SelectField size=\"sm\" formGroup={sortByFormGroup} selectButton={selectButton} onChange={this.handleChange} disabled={this.props.tableLoading}/>\r\n <TaxLienSearchResultsTable />\r\n </Col>\r\n \r\n <Col lg={5} style={{paddingTop: 2, paddingBottom: 4}}>\r\n <TaxLienSearchResultsDetails history={this.props.history}/>\r\n </Col>\r\n </Row>\r\n </Container>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <Modal show={this.state.showNotableDatesModal} onHide={this.hideNotableDates} style={{ left: this.state.notableDatesLeft, top: 0}} aria-labelledby=\"contained-modal-title-vcenter\" centered >\r\n <Modal.Body style={{ background: '#3674AB', color: 'white', padding: 0 }}>\r\n <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={this.hideNotableDates}>Close</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(TaxLienSearchResults);","import React, { Component } from \"react\"\r\nimport { Container, Col, Table, Button } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\nimport SearchResultsDetailsNoResults from './SearchResultsDetailsNoResults'\r\nimport { searchByTorrensCertificate, selectSearchSequenceRow } from \"../../../redux/actions/searchActions\";\r\nimport Loading from '../../common/modal/Loading'\r\nimport { LOADING_STATUES, SEARCH_RESULTS_SOURCE } from \"../../constants/constants\";\r\nimport Thumbnails from \"../../image/Thumbnails\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n isTorrensUseFileNumbers : state.landlinkConfigReducer.torrensUseFileNumber,\r\n searchResults: state.searchResultsReducer,\r\n searchResultsDetails: state.searchDetailsTorrensCertificateReducer,\r\n currentUser: state.currentUserReducer,\r\n currentSearch: state.searchHistoryReducer.searchHistoryList[0],\r\n currentSort: state.searchResultsSortReducer,\r\n currentPageNumber: state.searchResultsPaginationReducer,\r\n searchSequence: state.searchSequenceStartedReducer,\r\n searchSequenceSelectedDocumentId: state.searchResultsTableSelectedRowReducer \r\n };\r\n}\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n searchByTorrensCertificate: (searchCriteria, history, callback) => dispatch(searchByTorrensCertificate(searchCriteria, history, callback)),\r\n startSearchSequence: (currentSearch) => dispatch({ type: 'START_SEARCH_SEQUENCE', search: currentSearch}),\r\n selectSearchSequenceRow: (id) => dispatch(selectSearchSequenceRow(id))\r\n }\r\n}\r\n\r\nclass TorrensSearchResultsDetails extends Component {\r\n \r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n imagingWindows: this.createImagingWindowsWindowState('', false),\r\n loadingStatus: \"\"\r\n };\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n }\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n handleClick = (event) => {\r\n event.preventDefault();\r\n \r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n \r\n if (!this.props.searchSequence) {\r\n let currentSearchCriteria = this.props.currentSearch;\r\n currentSearchCriteria.pageNumber = this.props.currentPageNumber;\r\n currentSearchCriteria.sortKey = this.props.currentSort.sortKey;\r\n currentSearchCriteria.sortDirection = this.props.currentSort.sortDirection;\r\n this.props.startSearchSequence(currentSearchCriteria); \r\n this.props.selectSearchSequenceRow(this.props.searchResultsDetails);\r\n }\r\n\r\n let searchCriteria = {\r\n certificateNumber: event.target.getAttribute(\"data-certificatenumber\")\r\n }\r\n\r\n this.props.searchByTorrensCertificate(searchCriteria, this.props.history, this.hideLoading);\r\n } \r\n\r\n // May return null if not found.\r\n getSelectedSearchResult = () => {\r\n if (!this.props.searchResults || (this.props.searchResultsDetails === 0)) {\r\n return null;\r\n }\r\n \r\n let searchResult = this.props.searchResults.searchResultList.find((searchResult) => {\r\n return this.props.searchResultsDetails == searchResult.id;\r\n });\r\n \r\n return searchResult;\r\n }\r\n \r\n // Can return null.\r\n getSelectedSearchResultInfo = () => {\r\n let searchResult = this.getSelectedSearchResult();\r\n \r\n if (!searchResult) {\r\n return null;\r\n }\r\n \r\n let info = { \r\n sourcedDocKey: searchResult.sourcedDocKey,\r\n instrumentCode: '' // there is none for this doc type\r\n }; \r\n\r\n return info;\r\n }\r\n \r\n handleImageClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n \r\n let info = this.getSelectedSearchResultInfo();\r\n \r\n if (!info) {\r\n alert(\"Select a certificate.\");\r\n return; \r\n }\r\n \r\n this.setState( {\r\n imagingWindows: this.createImagingWindowsWindowState(info, true)\r\n } );\r\n }\r\n \r\n handleImageComplete = () => {\r\n this.setState( {\r\n imagingWindows: this.createImagingWindowsWindowState(null, false)\r\n } );\r\n }\r\n \r\n createImagingWindowsWindowState = (searchResult, show) => {\r\n return {\r\n sourcedDocKey: searchResult ? searchResult.sourcedDocKey : {},\r\n instCode: searchResult ? searchResult.instrumentCode : '',\r\n show: show\r\n }\r\n }\r\n \r\n \r\n render() {\r\n let selectedSearchResult = this.getSelectedSearchResult();\r\n\r\n if (!selectedSearchResult) {\r\n return (<SearchResultsDetailsNoResults />)\r\n }\r\n\r\n let info = this.getSelectedSearchResultInfo();\r\n let { fileNumber, displayBookAndPage, certifiedDate, shortStatus, cancelledBySearchResults } = selectedSearchResult;\r\n let certificateNumber = info.sourcedDocKey.docKeyNumber;\r\n let imageKeyType = info.sourcedDocKey.imageKeyType;\r\n\r\n return (\r\n <>\r\n <Col style={{ paddingLeft: 0, marginRight: 0, boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }} >\r\n <Container key={this.props.searchResultsDetails} style={{ paddingLeft: 10, paddingTop: 10, paddingRight: 0, paddingBottom: 10, marginRight: 0 }} fluid=\"true\"> \r\n <div>\r\n <h5>\r\n <strong>Torrens </strong> \r\n <span className=\"badge badge-secondary\">{shortStatus}</span>\r\n {\r\n this.props.currentUser.accountDocTypes[imageKeyType].imageRetrieval && \r\n <div style={{ float: 'right' }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={this.handleImageClick} >Certificate</Button>\r\n </div>\r\n }\r\n </h5>\r\n </div>\r\n <hr style={{background: 'black'}}></hr>\r\n <div style={{marginBottom: 0, marginTop: 10}}>\r\n <div><strong>Certificate #: </strong>{certificateNumber}</div>\r\n { \r\n this.props.isTorrensUseFileNumbers === true &&\r\n <div><strong>File #: </strong>{fileNumber}</div>\r\n }\r\n <div><strong>Certified Date: </strong>{certifiedDate}</div>\r\n <div><strong>Book/Page: </strong>{displayBookAndPage}</div>\r\n \r\n {\r\n shortStatus === 'Cancelled' &&\r\n <Table striped bordered hover variant=\"dark\" size=\"sm\"> \r\n <thead><tr><th scope=\"col\">Cancelled By</th></tr></thead>\r\n <tbody>\r\n {\r\n cancelledBySearchResults.map(cancelledBySearchResult => {\r\n return <tr id={cancelledBySearchResult.cancelledByCertificateId}><td><a href='#BogusToRemoveWarning' name=\"searchByTorrensCertificate\" data-certificatenumber={cancelledBySearchResult.cancelledByCertificateNumber} onClick={this.handleClick} style={{ textDecoration: 'none' }} > {cancelledBySearchResult.cancelledByCertificateNumber}</a></td></tr>\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n }\r\n\r\n </div>\r\n </Container>\r\n </Col>\r\n <Loading loadingIndicator={this.state.loadingStatus === 'LOADING'} />\r\n <Thumbnails show={this.state.imagingWindows.show} \r\n sourcedDocKey={this.state.imagingWindows.sourcedDocKey} \r\n instCode={this.state.imagingWindows.instCode} \r\n complete={this.handleImageComplete} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(TorrensSearchResultsDetails);","import React, { Component } from \"react\"\r\nimport { Container, Col, Row, Table, FormCheck } from 'react-bootstrap'\r\n\r\nimport { connect } from \"react-redux\";\r\n\r\nimport { displayTorrensCertificateDetails, getSearchResultById } from '../../../redux/actions/searchActions'\r\nimport SearchPaginator from '../../common/page/SearchPaginator'\r\nimport {getPaginatorHelper} from '../../common/page/PaginatorHelper'\r\nimport Loading from '../../common/modal/Loading';\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\n\r\nconst componentName = 'SearchResultsTable';\r\n\r\nconst mapStateToProps = state => {\r\n\r\n return {\r\n isTorrensUseFileNumbers : state.landlinkConfigReducer.torrensUseFileNumber,\r\n bookLabel: state.countyConfigCommonReducer.bookLabel,\r\n searchResults: state.searchResultsReducer,\r\n paginationPage: state.searchResultsPaginationReducer,\r\n tableLoading: state.searchResultsTableLoadingReducer,\r\n selectedRow: state.searchResultsTableSelectedRowReducer,\r\n rewind: state.searchSequenceRewindReducer, \r\n searchResultsSort: state.searchResultsSortReducer, \r\n filterApplied: state.searchResultsFilterAppliedFilter,\r\n searchResultsFilter: state.searchResultsFilterTorrensReducer,\r\n searchResultsVisited: state.searchResultsVisitedReducer\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n select: (id, sourcedDocKey, callback) => {\r\n if (id) {\r\n dispatch(displayTorrensCertificateDetails(id, sourcedDocKey, callback))\r\n }\r\n }, // For some reason, id can be null sometimes, so checking to see if id has a value.\r\n filterResults: (document, sortKey, sortDirection, callback) => dispatch({ type: 'FILTER_TORRENS_ID', document, sortKey, sortDirection }, callback()),\r\n resetRewindSearch: () => dispatch({ type: 'RESET_REWIND_SEARCH_SEQUENCE'})\r\n }\r\n}\r\n\r\nclass TorrensSearchResultsTable extends Component {\r\n state = {\r\n selectedId: null,\r\n loadingStatus: ''\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === '') {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n }\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n handleRowClick = (event) => {\r\n const clickedId = event.target.closest(\"tr\").id; // find the closest parent tr\r\n this.props.resetRewindSearch();\r\n if (this.showLoading() === true) {\r\n this.setState({ selectedId: clickedId })\r\n\r\n let searchResult = getSearchResultById(this, clickedId, 'id');\r\n\r\n this.props.select(clickedId, searchResult.sourcedDocKey, this.hideLoading);\r\n }\r\n }\r\n\r\n handleCheckFilterLimit = () => {\r\n if (this.props.searchResultsFilter.totalRecordCount >= 100) {\r\n this.setState(\r\n {\r\n showAlert: true,\r\n alertMessage: 'You have reached the limit of selecting up to 100 records.'\r\n });\r\n }\r\n }\r\n\r\n handleCheckClick = (event) => {\r\n const clickedId = event.target.closest(\"tr\").id; // find the closest parent tr\r\n this.props.searchResults.searchResultList.map((searchResult) => {\r\n if (searchResult.id == clickedId) {\r\n this.props.filterResults(searchResult, this.props.searchResultsSort.sortKey, this.props.searchResultsSort.sortDirection, this.handleCheckFilterLimit);\r\n }\r\n });\r\n }\r\n\r\n checkSelected = (id) => {\r\n for (const element of this.props.searchResultsFilter.searchResultList) { \r\n if (element.id == id) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n render() {\r\n let certificateNumberFileNumberHeader = this.props.isTorrensUseFileNumbers === true ? <th className=\"table-td-xs\" scope=\"col\" style={{ width: '34%' }}>Certificate #<br />File #</th> : <th className=\"table-td-xs\" scope=\"col\" style={{ width: '34%' }}>Certificate #<br /> </th> ;\r\n // apply any inactive filter and text filter\r\n\t\t// let filteredList = this.props.accounts.filter(accountResult => \r\n // \t(this.state.includeInactive || accountResult.active) && ( !this.state.filterText || accountResult.name.includes(this.state.filterText)))\r\n let filteredList = this.props.searchResults.searchResultList;\r\n const numberOfVisibleRecords = 100;\r\n let numberOfPages = Math.ceil ( filteredList.length / numberOfVisibleRecords );\r\n\t\tlet paginationHelper = getPaginatorHelper(this.props.paginationPage, filteredList, numberOfVisibleRecords);\r\n\r\n let displayResults = paginationHelper.currentPageStartingRecordNumber === paginationHelper.currentPageEndingRecordNumber ? \r\n paginationHelper.currentPageStartingRecordNumber :\r\n paginationHelper.currentPageStartingRecordNumber + \"-\" + paginationHelper.currentPageEndingRecordNumber;\r\n\r\n let selectedId = 0;\r\n if (this.props.rewind === true) {\r\n selectedId = this.props.selectedRow;\r\n } else {\r\n selectedId = this.state.selectedId;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, paddingBottom: 50}}>\r\n <Table responsive striped bordered hover size=\"sm\" style={{ maxHeight: 600, overflowY: 'auto', display: 'inline-block'}} >\r\n <thead style={{ display: 'table', width: '100%', tableLayout: 'fixed'}}>\r\n <tr>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '4%' }}></th>\r\n {certificateNumberFileNumberHeader}\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '29%' }}>Certified Date<br/> {this.props.bookLabel}/Page</th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '29%' }}>Status<br /> </th>\r\n </tr>\r\n </thead>\r\n <tbody key={this.props.paginationPage} style={{ display: 'table', width: '100%', tableLayout: 'fixed', cursor: \"pointer\"}} >\r\n {\r\n paginationHelper.currentPageRecordList.map((searchResult) => {\r\n let selectedClass = selectedId == searchResult.id ? \"table-active\" : \"\"; // highlight the selected row\r\n\r\n // The status can be Certified, In Progess or Cancelled, but only Cancelled may have more than 1. \r\n const statusBadge = searchResult.cancelledBySearchResults && searchResult.cancelledBySearchResults.length > 1 ? \"more\" : \"\"; \r\n \r\n const selected = this.checkSelected(searchResult.id);\r\n\r\n let cursorStyle = {cursor: 'wait' };\r\n if (searchResult.id) {\r\n cursorStyle = { cursor: 'pointer' }\r\n }\r\n \r\n let badgeClass = 'badge-light';\r\n if (this.props.searchResultsVisited instanceof Set && this.props.searchResultsVisited.has(searchResult.id+\"\")) {\r\n cursorStyle = {...cursorStyle, ...{color: 'darkgray'}} \r\n badgeClass = 'badge-info';\r\n }\r\n\r\n return (\r\n <tr className={selectedClass} style={cursorStyle} id={searchResult.id} name={searchResult.sourcedDocKey.docKeyNumber} onClick={this.handleRowClick}>\r\n { \r\n selected &&\r\n <td className=\"table-td-xs\" style={{ width: '4%' }} ><FormCheck onChange={this.handleCheckClick} checked={true} disabled={this.props.filterApplied}></FormCheck></td>\r\n }\r\n { \r\n !selected &&\r\n <td className=\"table-td-xs\" style={{ width: '4%' }} ><FormCheck onChange={this.handleCheckClick} checked={false} disabled={this.props.filterApplied}></FormCheck></td>\r\n }\r\n <td className=\"table-td-xs\" style={{ width: '34%' }} ><strong>{searchResult.sourcedDocKey.docKeyNumber} <span className='badge {badgeClass}'>{searchResult.shortStatus}</span> </strong><br /> {searchResult.fileNumber} </td>\r\n <td className=\"table-td-xs\" style={{ width: '29%' }} >{searchResult.certifiedDate}<br/>{searchResult.displayBookAndPage}</td>\r\n <td className=\"table-td-xs\" style={{ width: '29%' }} >{searchResult.status} <span className='badge {badgeClass}'>{statusBadge}</span><br/> </td>\r\n </tr>\r\n )\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n <Row>\r\n <Col style={{ marginLeft: 4}} ><SearchPaginator style={{justifyContent: 'center'}} componentName={componentName} numberOfVisibleRecords={numberOfVisibleRecords} numberOfPages={numberOfPages} ></SearchPaginator></Col>\r\n\t\t\t\t\t</Row>\r\n <Row>\r\n <Col style={{ marginLeft: 4}} >Displaying Results: {displayResults} of {filteredList.length}</Col>\r\n </Row>\r\n\r\n </Container>\r\n \r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TorrensSearchResultsTable);","import React, { Component } from \"react\"\r\nimport { Modal, Container, Row, Col, Button } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\n\r\nimport PageBanner from \"../../common/page/PageBanner\";\r\nimport CountyNotes from \"../../common/page/CountyNotes\";\r\n\r\nimport SelectField from \"../../common/form/SelectField\";\r\n\r\nimport TorrensSearchResultsDetails from \"./TorrensSearchResultsDetails\";\r\nimport TorrensSearchResultsTable from \"./TorrensSearchResultsTable\";\r\n\r\nimport { caretSquareDownIcon, caretSquareUpIcon, infoSmallIcon, fileDownloadSmallIcon, backwardSmallIcon, minusIcon, filterIcon } from \"../../../img/font_awesome/font_awesome\"\r\n\r\nimport { searchResultsSort, searchResultsPrint, displayTorrensCertificateDetails, loadDocuments, searchByTorrensCertificate, searchByTorrensText, setSelectedSearchType, displayDetails} from \"../../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport Loading from '../../common/modal/Loading';\r\nimport { SearchByTorrensCertificateKey, getSearchResultById } from \"../../../redux/actions/searchActions\";\r\n\r\nimport NotableDates from '../../home/NotableDates';\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n searchResultsSort: (sort, currentSearch, history, callback) => dispatch(searchResultsSort(sort, currentSearch, history, callback)),\r\n filteredResultsSort: (sortKey, sortDirection) => dispatch({ type: 'SORT_FILTERED_TORRENS', sortKey, sortDirection }),\r\n setSearchResultsSort: (sortKey, sortDirection) => dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_SORT', sort: {sortKey, sortDirection }}),\r\n\r\n searchResultsPrint: (sort, currentSearch, history, callback) => dispatch(searchResultsPrint(sort, currentSearch, history, callback)),\r\n loadDocuments: (searchCriteria, history, link, callback) => dispatch(loadDocuments(searchCriteria, history, callback, link)),\r\n searchByTorrensCertificate: (searchCriteria, history, callback) => dispatch(searchByTorrensCertificate(searchCriteria, history, callback)),\r\n searchByTorrensText: (searchCriteria, history, callback) => dispatch(searchByTorrensText(searchCriteria, history, callback)),\r\n selectTorrensCertificateDetails: (id, sourcedDocKey, callback) => dispatch(displayTorrensCertificateDetails(id, sourcedDocKey, callback)),\r\n selectDetail: (id, sourcedDocKey, callback) => dispatch(displayDetails(id, sourcedDocKey, callback)),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n rewindSearch: () => dispatch({ type: 'REWIND_SEARCH_SEQUENCE'}),\r\n paginate: (pageNumber) => dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_PAGE', pageNumber }),\r\n setSelectedSearchType: (searchType) => dispatch(setSelectedSearchType(searchType)),\r\n showFilteredResults: (searchResults) => dispatch({ type: 'SHOW_FILTERED_SEARCH_RESULTS', searchResults }), // This is the search results table\r\n applySearchResultsFilter: (applyFilter) => dispatch({ type: 'APPLY_SEARCH_RESULTS_FILTER', applyFilter}),\r\n resetRead: () => dispatch({ type: 'RESET_READ'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n bookLabel: state.countyConfigCommonReducer.bookLabel,\r\n sideNavigationOpen: state.sideNavigationReducer,\r\n currentSearch: state.searchHistoryReducer.searchHistoryList[0],\r\n searchResults: state.searchResultsReducer,\r\n pageNumber: state.searchResultsPaginationReducer,\r\n notableDates: state.notableDatesReducer,\r\n searchSequence: state.searchSequenceStartedReducer,\r\n searchSequenceSelectedDocumentId: state.searchResultsTableSelectedRowReducer,\r\n filteredDocuments: state.searchResultsFilterTorrensReducer, \r\n filterApplied: state.searchResultsFilterAppliedFilter,\r\n searchResultsVisited: state.searchResultsVisitedReducer,\r\n searchResultsVisitedApplied: state.searchResultsVisitedAppliedReducer,\r\n showDownloadResultsButton: state.countyConfigSearch2Reducer.downloadResults, \r\n };\r\n}\r\n\r\nclass TorrensSearchResults extends Component {\r\n\r\n state = {\r\n searchResultsSort: 'certificateNumber', \r\n searchResultsSortDirection: 'ASC',\r\n showNotableDatesModal: false,\r\n notableDatesLeft: 600,\r\n notableDates: {},\r\n loadingStatus: \"\"\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState(\r\n {\r\n searchResultsSort: event.target.value\r\n },\r\n function() { // callback function after the state is set\r\n this.handleSort();\r\n }\r\n )\r\n }\r\n\r\n handleClick = () => {\r\n this.setState(\r\n {\r\n searchResultsSortDirection: this.state.searchResultsSortDirection === 'ASC'? 'DESC' : 'ASC'\r\n },\r\n function() { // callback function after the state is set\r\n this.handleSort();\r\n }\r\n )\r\n }\r\n\r\n handleSort = () => {\r\n if (this.props.filterApplied === true) {\r\n this.props.filteredResultsSort(this.state.searchResultsSort, this.state.searchResultsSortDirection);\r\n this.props.setSearchResultsSort(this.state.searchResultsSort, this.state.searchResultsSortDirection);\r\n } else if (this.showLoading() === true) {\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: this.props.pageNumber });\r\n\t\t this.props.searchResultsSort(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n\t}\r\n\r\n printResults = (event) => {\r\n event.preventDefault();\r\n if (this.showLoading() === true) {\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: -1 });\r\n\t\t this.props.searchResultsPrint(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n }\r\n\r\n showOriginalResultList = (event) => {\r\n event.preventDefault();\r\n\r\n let request = {}\r\n this.props.searchSequence.displayCriteria.forEach((criteria) => {\r\n request[criteria.key] = criteria.value;\r\n })\r\n\r\n request.updateHistory = true;\r\n request.sortKey = this.props.searchSequence.sortKey; \r\n request.sortDirection = this.props.searchSequence.sortDirection;\r\n \r\n if (this.showLoading() === true) {\r\n if (this.props.searchSequence.pageNumber > 1) {\r\n request.pageNumber = this.props.searchSequence.pageNumber;\r\n this.props.paginate(request.pageNumber);\r\n }\r\n\r\n this.props.resetSearchSequence();\r\n this.props.rewindSearch();\r\n\r\n if (this.props.searchSequence.link === 'search/searchByTorrensCertificate') {\r\n this.props.setSelectedSearchType(SearchByTorrensCertificateKey);\r\n this.props.searchByTorrensCertificate(request, this.props.history, this.selectTorrensCertificateDetails);\r\n } else if (this.props.searchSequence.link === 'search/searchByTorrensText') {\r\n this.props.setSelectedSearchType(SearchByTorrensCertificateKey);\r\n this.props.searchByTorrensText(request, this.props.history, this.selectTorrensCertificateDetails);\r\n } else {\r\n this.props.setSelectedSearchType(this.props.searchSequence.type);\r\n this.props.loadDocuments(request, this.props.history, this.props.searchSequence.link, this.selectDetail);\r\n }\r\n \r\n }\r\n }\r\n\r\n selectDetail = () => {\r\n let searchResult = getSearchResultById(this, this.props.searchSequenceSelectedDocumentId, 'id');\r\n\r\n this.props.selectDetail(this.props.searchSequenceSelectedDocumentId, searchResult.sourcedDocKey, this.hideLoading);\r\n }\r\n\r\n selectTorrensCertificateDetails = () => { \r\n let searchResult = getSearchResultById(this, this.props.searchSequenceSelectedDocumentId, 'id');\r\n\r\n this.props.selectTorrensCertificateDetails(this.props.searchSequenceSelectedDocumentId, searchResult.sourcedDocKey, this.hideLoading);\r\n } \r\n\r\n showNotableDates = (event) => {\r\n event.preventDefault();\r\n let notableDatesLeft = Math.ceil(event.clientX / 3);\r\n this.setState({notableDatesLeft, showNotableDatesModal : true});\r\n }\r\n\r\n hideNotableDates = (event) => {\r\n event.preventDefault();\r\n this.setState({showNotableDatesModal : false});\r\n }\r\n\r\n handleApplyFilter = (event) => { \r\n if (this.props.filterApplied === false) {\r\n this.props.applySearchResultsFilter(true);\r\n this.props.showFilteredResults(this.props.filteredDocuments);\r\n this.props.paginate(1);\r\n } else if (this.showLoading() === true) {\r\n this.props.applySearchResultsFilter(false);\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: this.props.pageNumber });\r\n\t\t this.props.searchResultsSort(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n }\r\n \r\n handleResetRead = (event) => { \r\n event.preventDefault(); \r\n this.props.resetRead(); \r\n }\r\n\r\n componentDidMount() {\r\n this.props.resetRead(); \r\n }\r\n\r\n render() {\r\n let formTemplateMarginLeft = 60\r\n if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n }\r\n\r\n let buttonIcon = caretSquareDownIcon;\r\n if (this.state.searchResultsSortDirection === 'ASC') {\r\n buttonIcon = caretSquareUpIcon;\r\n }\r\n\r\n let sortOptions = [{ code: \"certificateNumber\", description: \"Certificate Number\"}, {code: \"certifiedDate\", description: \"Certified Date\"}, {code: \"book\", description: this.props.bookLabel}]\r\n sortOptions.sort((a, b) => {\r\n if (a.description > b.description) {\r\n return 1;\r\n } else if (a.description < b.description) {\r\n return -1;\r\n }\r\n return 0;\r\n }\r\n )\r\n\r\n let sortByFormGroup = { layout: 'horizontal', id: 'searchResutlsSort', label: 'Sort by', fieldType: 'select', value: this.props.sortKey, size: \"sm\", options: sortOptions }\r\n \r\n let currentSearchLongDescription = this.props.currentSearch ? this.props.currentSearch.longDescription : \"\"\r\n let currentSearchCriteria = this.props.currentSearch ? this.props.currentSearch.displayCriteria : []\r\n let selectButton = <Button variant=\"primary\" size=\"sm\" onClick={this.handleClick}> {buttonIcon} </Button>\r\n\r\n let pageButtons = [];\r\n if (this.props.searchSequence !== null) {\r\n pageButtons.push({ label: 'Back to Search Results', icon:backwardSmallIcon, onClickAction: this.showOriginalResultList, className: 'btn btn-secondary btn-sm' });\r\n }\r\n pageButtons.push({ label: 'Notable Dates', icon:infoSmallIcon, onClickAction: this.showNotableDates, className: 'btn btn-secondary btn-sm' });\r\n\r\n let filter = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleApplyFilter}>{filterIcon} Filter SELECTIONS</Button>\r\n if (this.props.filterApplied === true) {\r\n filter = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleApplyFilter}>{minusIcon} Remove Filter</Button>\r\n }\r\n\r\n let read = <></>\r\n if (this.props.searchResultsVisitedApplied === true) {\r\n read = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleResetRead}>{minusIcon} Reset READ</Button>\r\n }\r\n\r\n return (\r\n <div style={{ marginTop: 4, marginLeft: formTemplateMarginLeft, marginRight: 20, marginBottom: 4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }} >\r\n <CountyNotes />\r\n <PageBanner pageHeading={currentSearchLongDescription} searchCriteria={currentSearchCriteria} buttons={pageButtons} />\r\n <Container fluid=\"true\" >\r\n <Row style={{marginRight: 1}}>\r\n <Col lg={7} style={{paddingRight: 0}}>\r\n <div>\r\n { filter } \r\n {read} \r\n {\r\n this.props.showDownloadResultsButton && this.props.currentSearch.type === 'searchByTorrensText' &&\r\n <div className=\"form-inline search-results-sort-dropdown\"> <Button variant=\"secondary\" size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.printResults} >{fileDownloadSmallIcon} Download</Button></div>\r\n } \r\n {\r\n this.props.currentSearch && this.props.currentSearch.type === 'searchByTorrensText' &&\r\n <SelectField formGroup={sortByFormGroup} selectButton={selectButton} onChange={this.handleChange} />\r\n }\r\n </div>\r\n <TorrensSearchResultsTable />\r\n </Col>\r\n\r\n <Col lg={5} style={{paddingTop: 2, paddingBottom: 4}}>\r\n <TorrensSearchResultsDetails history={this.props.history} />\r\n </Col>\r\n </Row>\r\n\r\n </Container>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <Modal show={this.state.showNotableDatesModal} onHide={this.hideNotableDates} style={{ left: this.state.notableDatesLeft, top: 0}} aria-labelledby=\"contained-modal-title-vcenter\" centered >\r\n <Modal.Body style={{ background: '#3674AB', color: 'white', padding: 0 }}>\r\n <NotableDates notableDates={this.props.notableDates} cardHeaderClassName='card-header-gray' />\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={this.hideNotableDates}>Close</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(TorrensSearchResults);","import React, { Component } from \"react\"\r\nimport { Container, Col, Button } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\nimport SearchResultsDetailsNoResults from './SearchResultsDetailsNoResults'\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport Loading from '../../common/modal/Loading';\r\nimport Thumbnails from \"../../image/Thumbnails\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n searchResults: state.searchResultsReducer,\r\n searchResultsDetails: state.searchDetailsGrantorGranteeBookReducer,\r\n currentUser: state.currentUserReducer\r\n };\r\n}\r\n\r\nclass GrantorGranteeBookSearchResultsDetails extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n imagingWindows: this.createImagingWindowsWindowState('', false),\r\n loadingStatus: \"\"\r\n };\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n // May return null if not found.\r\n getSelectedSearchResult = () => {\r\n if (!this.props.searchResults || (this.props.searchResultsDetails === 0)) {\r\n return null;\r\n }\r\n\r\n let searchResult = this.props.searchResults.searchResultList.find((searchResult) => {\r\n return this.props.searchResultsDetails == searchResult.sourcedDocKey.docKeyNumber;\r\n });\r\n\r\n return searchResult;\r\n }\r\n\r\n // Can return null.\r\n getSelectedSearchResultInfo = () => {\r\n let searchResult = this.getSelectedSearchResult();\r\n\r\n if (!searchResult) {\r\n return null;\r\n }\r\n\r\n\t\tlet info = { \r\n sourcedDocKey: searchResult.sourcedDocKey,\r\n instrumentCode: '' // there is none for this doc type\r\n };\r\n\r\n return info;\r\n }\r\n\r\n handleImageClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n \r\n let info = this.getSelectedSearchResultInfo();\r\n\r\n if (!info) {\r\n alert(\"Select a document.\");\r\n return; \r\n }\r\n\r\n this.setState( {\r\n imagingWindows: this.createImagingWindowsWindowState(info, true)\r\n } );\r\n }\r\n\r\n handleImageComplete = () => {\r\n this.setState( {\r\n imagingWindows: this.createImagingWindowsWindowState(null, false)\r\n } );\r\n }\r\n\r\n createImagingWindowsWindowState = (searchResult, show) => {\r\n return {\r\n sourcedDocKey: searchResult ? searchResult.sourcedDocKey : {},\r\n instCode: searchResult ? searchResult.instrumentCode : '',\r\n show: show\r\n }\r\n }\r\n \r\n render() {\r\n let selectedSearchResult = this.getSelectedSearchResult();\r\n\r\n if (!selectedSearchResult) {\r\n return (<SearchResultsDetailsNoResults />)\r\n }\r\n\r\n let { type, fromName, toName, fromDate, toDate } = selectedSearchResult;\r\n let imageKeyType = selectedSearchResult.sourcedDocKey.imageKeyType;\r\n\r\n return (\r\n <Col style={{ paddingLeft: 0, marginRight: 0, boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }} >\r\n <Container key={this.props.searchResultsDetails} style={{ paddingLeft: 10, paddingTop: 10, paddingRight: 0, paddingBottom: 10, marginRight: 0 }} fluid=\"true\">\r\n <div>\r\n <h5 >\r\n <strong>{type}</strong>\r\n <span style={{ float: 'right' }}>\r\n {\r\n this.props.currentUser.accountDocTypes[imageKeyType].imageRetrieval &&\r\n <Button variant=\"primary\" size=\"sm\" onClick={this.handleImageClick} >Image</Button>\r\n }\r\n </span>\r\n </h5>\r\n </div>\r\n <hr style={{ background: 'black', marginTop: 2, marginBottom: 2 }}></hr>\r\n <div style={{ marginBottom: 0, marginTop: 10 }} >\r\n <div><strong>Book Reference #: </strong>{selectedSearchResult.sourcedDocKey.docKeyNumber} </div>\r\n <div><strong>Name: </strong>{fromName} - {toName}</div>\r\n <div><strong>Date: </strong>{fromDate} - {toDate}</div>\r\n </div>\r\n </Container>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <Thumbnails show={this.state.imagingWindows.show} \r\n sourcedDocKey={this.state.imagingWindows.sourcedDocKey} \r\n instCode={this.state.imagingWindows.instCode} \r\n complete={this.handleImageComplete} />\r\n </Col>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(GrantorGranteeBookSearchResultsDetails);","import React, { Component } from \"react\"\r\nimport { Container, Col, Row, Table, FormCheck } from 'react-bootstrap'\r\n\r\nimport { connect } from \"react-redux\";\r\n\r\nimport { displayGrantorGranteeBookDetails, getSearchResultById } from '../../../redux/actions/searchActions'\r\nimport SearchPaginator from '../../common/page/SearchPaginator'\r\nimport {getPaginatorHelper} from '../../common/page/PaginatorHelper'\r\nimport Loading from '../../common/modal/Loading';\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nconst componentName = 'SearchResultsTable';\r\n\r\nconst mapStateToProps = state => {\r\n\r\n return {\r\n searchResults: state.searchResultsReducer,\r\n paginationPage: state.searchResultsPaginationReducer, \r\n searchResultsSort: state.searchResultsSortReducer, \r\n filterApplied: state.searchResultsFilterAppliedFilter,\r\n searchResultsFilter: state.searchResultsFilterGrantorGranteeBookReducer,\r\n searchResultsVisited: state.searchResultsVisitedReducer\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n select: (id, sourcedDocKey, callback) => {\r\n if (id) {\r\n dispatch(displayGrantorGranteeBookDetails(id, sourcedDocKey, callback))\r\n }\r\n }, // For some reason, id can be null sometimes, so checking to see if id has a value.\r\n filterResults: (document, sortKey, sortDirection, callback) => dispatch({ type: 'FILTER_GRANTOR_GRANTEE_BOOK_ID', document, sortKey, sortDirection }, callback())\r\n }\r\n}\r\n\r\nclass GrantorGranteeBookSearchResultsTable extends Component {\r\n state = {\r\n selectedId: null,\r\n loadingStatus: ''\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === '') {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n }\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n handleRowClick = (event) => {\r\n const clickedId = event.target.closest(\"tr\").id; // find the closest parent tr\r\n\r\n if (this.showLoading() === true) {\r\n this.setState({ selectedId: clickedId })\r\n\r\n let searchResult = getSearchResultById(this, clickedId, this.extractId);\r\n\r\n this.props.select(clickedId, searchResult.sourcedDocKey, this.hideLoading);\r\n }\r\n }\r\n\r\n extractId = (searchResult) => { return searchResult.sourcedDocKey.docKeyNumber; }\r\n\r\n handleCheckFilterLimit = () => {\r\n if (this.props.searchResultsFilter.totalRecordCount >= 100) {\r\n this.setState(\r\n {\r\n showAlert: true,\r\n alertMessage: 'You have reached the limit of selecting up to 100 records.'\r\n });\r\n }\r\n }\r\n\r\n handleCheckClick = (event) => {\r\n const clickedId = event.target.closest(\"tr\").id; // find the closest parent tr\r\n this.props.searchResults.searchResultList.map((searchResult) => {\r\n if (searchResult.sourcedDocKey.docKeyNumber == clickedId) {\r\n this.props.filterResults(searchResult, this.props.searchResultsSort.sortKey, this.props.searchResultsSort.sortDirection, this.handleCheckFilterLimit);\r\n }\r\n });\r\n }\r\n\r\n checkSelected = (id) => {\r\n for (const element of this.props.searchResultsFilter.searchResultList) {\r\n if (element.id == id) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n render() {\r\n\r\n let filteredList = this.props.searchResults.searchResultList;\r\n const numberOfVisibleRecords = 100;\r\n let numberOfPages = Math.ceil ( filteredList.length / numberOfVisibleRecords );\r\n\t\tlet paginationHelper = getPaginatorHelper(this.props.paginationPage, filteredList, numberOfVisibleRecords);\r\n\r\n let displayResults = paginationHelper.currentPageStartingRecordNumber === paginationHelper.currentPageEndingRecordNumber ? \r\n paginationHelper.currentPageStartingRecordNumber :\r\n paginationHelper.currentPageStartingRecordNumber + \"-\" + paginationHelper.currentPageEndingRecordNumber;\r\n\r\n return (\r\n <>\r\n \r\n <Container fluid=\"true\" style={{ paddingLeft: 0, paddingRight: 0, paddingBottom: 50}}>\r\n <Table responsive striped bordered hover size=\"sm\" style={{ maxHeight: 600, overflowY: 'auto', display: 'inline-block'}} >\r\n <thead style={{ display: 'table', width: '100%', tableLayout: 'fixed'}}>\r\n <tr>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '4%' }}></th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '32%' }}>Book Reference ID<br />Type</th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '32%' }}>From Name<br />To Name</th>\r\n <th className=\"table-td-xs\" scope=\"col\" style={{ width: '32%' }}>From Date<br />To Date</th>\r\n </tr>\r\n </thead>\r\n <tbody key={this.props.paginationPage} style={{ display: 'table', width: '100%', tableLayout: 'fixed', cursor: \"pointer\"}} >\r\n {\r\n paginationHelper.currentPageRecordList.map((searchResult) => {\r\n let selectedClass = this.state.selectedId == searchResult.sourcedDocKey.docKeyNumber ? \"table-active\" : \"\"; // highlight the selected row\r\n const selected = this.checkSelected(searchResult.id);\r\n\r\n let cursorStyle = {cursor: 'wait' };\r\n if (searchResult.id) {\r\n cursorStyle = { cursor: 'pointer' }\r\n }\r\n\r\n let badgeClass = 'badge-light';\r\n if (this.props.searchResultsVisited instanceof Set && this.props.searchResultsVisited.has(searchResult.id+\"\")) {\r\n cursorStyle = {...cursorStyle, ...{color: 'darkgray'}} \r\n badgeClass = 'badge-info';\r\n }\r\n\r\n return (\r\n <tr className={selectedClass} style={cursorStyle} id={searchResult.sourcedDocKey.docKeyNumber} name={searchResult.sourcedDocKey.docKeyNumber} onClick={this.handleRowClick}>\r\n { \r\n selected &&\r\n <td className=\"table-td-xs\" style={{ width: '4%' }} ><FormCheck onChange={this.handleCheckClick} checked={true} disabled={this.props.filterApplied}></FormCheck></td>\r\n }\r\n { \r\n !selected &&\r\n <td className=\"table-td-xs\" style={{ width: '4%' }} ><FormCheck onChange={this.handleCheckClick} checked={false} disabled={this.props.filterApplied}></FormCheck></td>\r\n }\r\n <td className=\"table-td-xs\" style={{ width: '34%' }} ><strong>{searchResult.sourcedDocKey.docKeyNumber}</strong><br /><strong>{searchResult.type}</strong><br/></td>\r\n <td className=\"table-td-xs\" style={{ width: '33%' }} >{searchResult.fromName}<br />{searchResult.toName}<br/></td>\r\n <td className=\"table-td-xs\" style={{ width: '33%' }} >{searchResult.fromDate}<br/>{searchResult.toDate}</td>\r\n </tr>\r\n )\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n <Row>\r\n <Col style={{ marginLeft: 4}} ><SearchPaginator style={{justifyContent: 'center'}} componentName={componentName} numberOfVisibleRecords={numberOfVisibleRecords} numberOfPages={numberOfPages} ></SearchPaginator></Col>\r\n\t\t\t\t\t</Row>\r\n <Row>\r\n <Col style={{ marginLeft: 4}} >Displaying Results: {displayResults} of {filteredList.length}</Col>\r\n </Row>\r\n </Container>\r\n \r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(GrantorGranteeBookSearchResultsTable);","import React, { Component } from \"react\"\r\nimport { Container, Row, Col, Button } from 'react-bootstrap'\r\nimport { connect } from \"react-redux\";\r\n\r\nimport PageBanner from \"../../common/page/PageBanner\";\r\nimport CountyNotes from \"../../common/page/CountyNotes\";\r\n\r\nimport SelectField from \"../../common/form/SelectField\";\r\n\r\nimport GrantorGranteeBookSearchResultsDetails from \"./GrantorGranteeBookSearchResultsDetails\";\r\nimport GrantorGranteeBookSearchResultsTable from \"./GrantorGranteeBookSearchResultsTable\";\r\n\r\nimport { caretSquareDownIcon, caretSquareUpIcon, minusIcon, filterIcon } from \"../../../img/font_awesome/font_awesome\"\r\n\r\nimport { searchResultsSort } from \"../../../redux/actions/searchActions\";\r\n\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport Loading from '../../common/modal/Loading';\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n searchResultsSort: (sort, currentSearch, history, callback) => dispatch(searchResultsSort(sort, currentSearch, history, callback)),\r\n filteredResultsSort: (sortKey, sortDirection) => dispatch({ type: 'SORT_FILTERED_GRANTOR_GRANTEE_BOOK', sortKey, sortDirection }),\r\n setSearchResultsSort: (sortKey, sortDirection) => dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_SORT', sort: {sortKey, sortDirection }}),\r\n\r\n paginate: (pageNumber) => dispatch({ type: 'SET_SELECTED_SEARCH_RESULTS_PAGE', pageNumber }),\r\n showFilteredResults: (searchResults) => dispatch({ type: 'SHOW_FILTERED_SEARCH_RESULTS', searchResults }), // This is the search results table\r\n applySearchResultsFilter: (applyFilter) => dispatch({ type: 'APPLY_SEARCH_RESULTS_FILTER', applyFilter}),\r\n resetRead: () => dispatch({ type: 'RESET_READ'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer,\r\n currentSearch: state.searchHistoryReducer.searchHistoryList[0],\r\n searchResults: state.searchResultsReducer,\r\n pageNumber: state.searchResultsPaginationReducer,\r\n filteredDocuments: state.searchResultsFilterGrantorGranteeBookReducer, \r\n filterApplied: state.searchResultsFilterAppliedFilter,\r\n searchResultsVisited: state.searchResultsVisitedReducer,\r\n searchResultsVisitedApplied: state.searchResultsVisitedAppliedReducer \r\n };\r\n}\r\n\r\nclass GrantorGranteeBookSearchResults extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n searchResultsSort: 'id', // Reference ID is the default sort\r\n searchResultsSortDirection: 'ASC',\r\n loadingStatus: \"\"\r\n } \r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState(\r\n {\r\n searchResultsSort: event.target.value\r\n },\r\n function() { // callback function after the state is set\r\n this.handleSort();\r\n }\r\n )\r\n }\r\n\r\n handleClick = () => {\r\n this.setState(\r\n {\r\n searchResultsSortDirection: this.state.searchResultsSortDirection === 'ASC'? 'DESC' : 'ASC'\r\n },\r\n function() { // callback function after the state is set\r\n this.handleSort();\r\n }\r\n )\r\n }\r\n\r\n handleSort = () => {\r\n if (this.props.filterApplied === true) {\r\n this.props.filteredResultsSort(this.state.searchResultsSort, this.state.searchResultsSortDirection);\r\n this.props.setSearchResultsSort(this.state.searchResultsSort, this.state.searchResultsSortDirection);\r\n } else if (this.showLoading() === true) {\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: this.props.pageNumber });\r\n\t\t this.props.searchResultsSort(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n\t}\r\n\r\n handleApplyFilter = (event) => { \r\n event.preventDefault(); \r\n if (this.props.filterApplied === false) {\r\n this.props.applySearchResultsFilter(true);\r\n this.props.showFilteredResults(this.props.filteredDocuments);\r\n this.props.paginate(1);\r\n } else if (this.showLoading() === true) {\r\n this.props.applySearchResultsFilter(false);\r\n const { loadingStatus, imagingWindows, alertWindow, ...request } = this.state; // remove UI only fields before submitting\r\n const request1 = Object.assign(request, { pageNumber: this.props.pageNumber });\r\n\t\t this.props.searchResultsSort(request1, this.props.currentSearch, this.props.history, this.hideLoading);\r\n }\r\n }\r\n \r\n handleResetRead = (event) => { \r\n event.preventDefault(); \r\n this.props.resetRead(); \r\n }\r\n\r\n componentDidMount() {\r\n this.props.resetRead(); \r\n }\r\n\r\n render() {\r\n let formTemplateMarginLeft = 60;\r\n if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270;\r\n }\r\n\r\n let buttonIcon = caretSquareDownIcon;\r\n if (this.state.searchResultsSortDirection === 'ASC') {\r\n buttonIcon = caretSquareUpIcon;\r\n }\r\n\r\n let sortByFormGroup = { layout: 'horizontal', id: 'searchResutlsSort', label: 'Sort by', fieldType: 'select', value: \"N\", size: \"sm\", options: [{ code: \"id\", description: \"Book Reference ID\"}, {code: \"fromName\", description: \"From Name\"}, {code: \"fromDate\", description: \"From Date\"}] }\r\n\r\n let currentSearchLongDescription = this.props.currentSearch ? this.props.currentSearch.longDescription : \"\"\r\n let currentSearchCriteria = this.props.currentSearch ? this.props.currentSearch.displayCriteria : []\r\n let selectButton = <Button variant=\"primary\" size=\"sm\" onClick={this.handleClick}> {buttonIcon} </Button>\r\n\r\n let filter = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleApplyFilter}>{filterIcon} Filter Selections</Button>\r\n if (this.props.filterApplied === true) {\r\n filter = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleApplyFilter}>{minusIcon} Remove Filter</Button>\r\n }\r\n\r\n let read = <></>\r\n if (this.props.searchResultsVisitedApplied === true) {\r\n read = <Button variant='secondary' size=\"sm\" style={{marginLeft: 2, marginBottom: 4}} onClick={this.handleResetRead}>{minusIcon} Reset Read</Button>\r\n } \r\n\r\n return (\r\n <div style={{ marginTop: 4, marginLeft: formTemplateMarginLeft, marginRight: 20, marginBottom: 4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }} >\r\n <CountyNotes />\r\n <PageBanner pageHeading={currentSearchLongDescription} searchCriteria={currentSearchCriteria} />\r\n\r\n <Container fluid=\"true\" >\r\n <Row style={{marginRight: 1}}>\r\n <Col lg={7} style={{paddingRight: 0}}>\r\n {filter} \r\n {read} \r\n <SelectField size=\"sm\" formGroup={sortByFormGroup} selectButton={selectButton} onChange={this.handleChange} />\r\n <GrantorGranteeBookSearchResultsTable />\r\n </Col>\r\n\r\n <Col lg={5} style={{paddingTop: 2, paddingBottom: 4}}>\r\n <GrantorGranteeBookSearchResultsDetails history={this.props.history}/>\r\n </Col>\r\n </Row>\r\n \r\n </Container>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(GrantorGranteeBookSearchResults);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport { searchByTractBookId, setSelectedSearchType, SpecialSearchTractBookIdKey, SpecialSearchTractBookIdUrl } from \"../../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport translations from \"../../../config/translation/search_by_document_number_translations.json\";\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\n\r\nconst componentName = SpecialSearchTractBookIdKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByTractBookId: (searchCriteria, history, callback) => dispatch(searchByTractBookId(searchCriteria, history, callback)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n return {\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n tractBookId: previousSearchKeyValue.tractBookId ? previousSearchKeyValue.tractBookId : null\r\n };\r\n}\r\n\r\nclass SpecialSearchTractBookId extends Component {\r\n\r\n state = {\r\n tractBookId: this.props.tractBookId,\r\n loadingStatus: \"\",\r\n submitMessage: '',\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByTractBookId(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n\r\n if (!this.state.tractBookId) {\r\n errors[\"tractBookId\"] = translations[this.props.language].required;\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n this.setState({\r\n submitMessage: '',\r\n tractBookId: ''\r\n })\r\n }\r\n\r\n render() {\r\n\r\n let formGroupRows = []\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'tractBookId', label: \"Tract Book ID\", primaryCriteria: true, value: this.state.tractBookId, required: true, fieldType: 'text', error: this.state.errors['tractBookId'] }]\r\n });\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Tract Book Search by ID\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n formGroupRows: formGroupRows,\r\n\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n\r\n return (\r\n <FormTemplate {...formProps} />\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SpecialSearchTractBookId);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../../common/form/FormTemplate\";\r\nimport PlatSelectionList from \"../../common/selection/PlatSelectionList\";\r\nimport { searchByTractBookLegal, setSelectedSearchType, SpecialSearchTractBookLegalKey } from \"../../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES, DIRECTION_OPTIONS } from \"../../constants/constants\";\r\nimport { validateDates } from \"../../../utils/DateValidation\";\r\nimport moment from 'moment';\r\n\r\nimport axios from \"axios\";\r\nimport configData from \"../../../config/config.json\";\r\nimport { handleError } from \"../../../redux/actions/commonStuff\";\r\nimport AjaxResult from \"../../../utils/AjaxResult\";\r\n\r\nconst componentName = SpecialSearchTractBookLegalKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByTractBookLegal: (searchCriteria, history, callback) => dispatch(searchByTractBookLegal(searchCriteria, history, callback)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName }),\r\n resetSearchSequence: () => dispatch({ type: 'RESET_SEARCH_SEQUENCE'}),\r\n resetSearchSequenceDocumentNumber: () => dispatch({ type: 'SEARACH_SEARCH_SEQUENCE_DOCUMENT'}),\r\n resetSearchDetail: () => dispatch({ type: 'RESET_SEARCH_DETAILS'})\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n let previousSearchKeyValue = {};\r\n if (ownProps.match.params.searchHistoryNumber) {\r\n let searchHistoryIndex = ownProps.match.params.searchHistoryNumber - 1;\r\n if (searchHistoryIndex >= 0) {\r\n let searchHistory = state.searchHistoryReducer.searchHistoryList[searchHistoryIndex];\r\n if (searchHistory) {\r\n searchHistory.displayCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n } else {\r\n let searchCriteria = state.searchCriteriaReducer[componentName];\r\n if (searchCriteria) {\r\n searchCriteria.forEach((criteria) => {\r\n previousSearchKeyValue[criteria.key] = criteria.value;\r\n })\r\n }\r\n }\r\n\r\n return {\r\n creditCardUser: state.currentUserReducer.paymentMethod === 'CREDIT_CARD' ? true : false,\r\n legalType: previousSearchKeyValue.legalType ? previousSearchKeyValue.legalType : 'LB',\r\n searchMethod: previousSearchKeyValue.searchMethod ? previousSearchKeyValue.searchMethod : 'CONTAINS',\r\n section: previousSearchKeyValue.section ? previousSearchKeyValue.section : null,\r\n township: previousSearchKeyValue.township ? previousSearchKeyValue.township : null,\r\n range: previousSearchKeyValue.range ? previousSearchKeyValue.range : null,\r\n base: previousSearchKeyValue.base ? previousSearchKeyValue.base : null,\r\n meridian: previousSearchKeyValue.meridian ? previousSearchKeyValue.meridian : null,\r\n qqqq: previousSearchKeyValue.qqqq ? previousSearchKeyValue.qqqq : null,\r\n qqq: previousSearchKeyValue.qqq ? previousSearchKeyValue.qqq : null,\r\n qq: previousSearchKeyValue.qq ? previousSearchKeyValue.qq : null,\r\n q: previousSearchKeyValue.q ? previousSearchKeyValue.q : null,\r\n municipality: previousSearchKeyValue.municipality ? previousSearchKeyValue.municipality : null,\r\n otherLot: previousSearchKeyValue.otherLot ? previousSearchKeyValue.otherLot : null,\r\n lot: previousSearchKeyValue.lot ? previousSearchKeyValue.lot : null,\r\n sublot: previousSearchKeyValue.sublot ? previousSearchKeyValue.sublot : null,\r\n block: previousSearchKeyValue.block ? previousSearchKeyValue.block : null,\r\n plat: previousSearchKeyValue.plat ? previousSearchKeyValue.plat : null,\r\n platNumber: previousSearchKeyValue.plat ? previousSearchKeyValue.plat : null,\r\n platName: previousSearchKeyValue.platName ? previousSearchKeyValue.platName : null,\r\n building: previousSearchKeyValue.building ? previousSearchKeyValue.building : null,\r\n unit: previousSearchKeyValue.unit ? previousSearchKeyValue.unit : null,\r\n garage: previousSearchKeyValue.garage ? previousSearchKeyValue.garage : null,\r\n fromRecordedDate: previousSearchKeyValue.fromRecordedDate ? previousSearchKeyValue.fromRecordedDate : moment('01/01/1800').format('L'),\r\n toRecordedDate: previousSearchKeyValue.toRecordedDate ? previousSearchKeyValue.toRecordedDate : moment().format('L'),\r\n otherLotCodes: state.otherLotCodesReducer.codeDescriptionResultList,\r\n isQQQQ: state.landlinkConfigReducer.qqqq,\r\n isQQQ: state.landlinkConfigReducer.qqq,\r\n isBaseline: state.landlinkConfigReducer.baseline,\r\n isMunicipality: state.landlinkConfigReducer.municipality,\r\n isMeridian: state.landlinkConfigReducer.meridian,\r\n isMbOtherLot: state.landlinkConfigReducer.mbOtherLot,\r\n isSublot: state.landlinkConfigReducer.sublot,\r\n allPlatList: state.platsReducer.codeDescriptionResultList,\r\n allPlatNameList: state.platNamesReducer.codeDescriptionResultList,\r\n allPlatNumberList: state.platNumbersReducer.codeDescriptionResultList\r\n };\r\n}\r\n\r\nclass SpecialSearchTractBookLegal extends Component {\r\n state = {\r\n fromRecordedDate: this.props.fromRecordedDate,\r\n toRecordedDate: this.props.toRecordedDate,\r\n legalType: this.props.legalType,\r\n section: this.props.section,\r\n township: this.props.township,\r\n range: this.props.range,\r\n base: this.props.base,\r\n meridian: this.props.meridian,\r\n qqqq: this.props.qqqq,\r\n qqq: this.props.qqq,\r\n qq: this.props.qq,\r\n q: this.props.q,\r\n municipality: this.props.municipality,\r\n otherLot: this.props.otherLot,\r\n lot: this.props.lot,\r\n sublot: this.props.sublot,\r\n block: this.props.block,\r\n plat: this.props.plat,\r\n platName: this.props.platName,\r\n platNumber: this.props.platNumber,\r\n building: this.props.building,\r\n unit: this.props.unit,\r\n garage: this.props.garage,\r\n loadingStatus: \"\",\r\n submitMessage: '',\r\n\r\n showPlatNumberDropdown: false,\r\n platNumberFilteredList: this.props.allPlatNumberList,\r\n showPlatNameDropdown: false,\r\n platNameFilteredList: this.props.allPlatNameList,\r\n showPlatList: false,\r\n\r\n token: '',\r\n creditCardPriceListWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n\r\n errors: {}\r\n }\r\n\r\n // Same code used in all searches - BEGIN\r\n\r\n componentDidMount() {\r\n this.props.setSelectedSearchType();\r\n if (this.props.creditCardUser) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", {}, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n this.setState({ token: result.content().token });\r\n }\r\n }, (error) => {\r\n handleError(error, this.props.history);\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // fix Warning: Can't perform a React state update on an unmounted component\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n let targetValue = event.target.value;\r\n if ((event.target.id !== 'platName' && event.target.id !== 'platNumber') || !this.state.plat) {\r\n this.setState({\r\n errors: {},\r\n submitMessage: '',\r\n [event.target.id]: targetValue\r\n })\r\n }\r\n\r\n if (event.target.id === 'platNameSelect') {\r\n let filteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == targetValue;\r\n });\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n platNumber: targetValue,\r\n platName: filteredList[0].description,\r\n // platFound: true,\r\n plat: targetValue\r\n })\r\n } else if (event.target.id === 'platName' && !this.state.plat) {\r\n let filteredList = this.props.allPlatNameList.filter(function (plat) {\r\n return plat.description.toUpperCase().startsWith(targetValue.toUpperCase())\r\n });\r\n\r\n if (filteredList.length === 0) {\r\n let errors = {};\r\n errors[\"platName\"] = \"No matching plat found.\";\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat: '',\r\n errors: errors\r\n })\r\n } else if (filteredList.length === 1) {\r\n let namefilteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == filteredList[0].code;\r\n });\r\n this.setState({\r\n platNumber: filteredList[0].code,\r\n platName: namefilteredList[0].description,\r\n platNameFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n // platFound: true,\r\n plat: filteredList[0].code\r\n })\r\n } else if (targetValue.length >= 2) {\r\n filteredList = [{ code: \"-1\", description: \"(Click here to select a plat)\" }].concat(filteredList);\r\n\r\n this.setState({\r\n platNameFilteredList: filteredList,\r\n showPlatNameDropdown: true,\r\n showPlatNumberDropdown: false,\r\n plat: ''\r\n })\r\n } else if (targetValue.length < 2) {\r\n this.setState({\r\n platNameFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat: ''\r\n })\r\n }\r\n } else if (event.target.id === 'platNumberSelect') {\r\n let filteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == targetValue;\r\n });\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n platNumber: targetValue,\r\n platName: filteredList[0].description,\r\n // platFound: true,\r\n plat: targetValue\r\n })\r\n } else if (event.target.id === 'platNumber' && !this.state.plat) {\r\n let filteredList = this.props.allPlatNumberList.filter(function (plat) {\r\n return plat.code.toUpperCase().startsWith(targetValue.toUpperCase())\r\n });\r\n\r\n if (filteredList.length === 0) {\r\n let errors = {};\r\n errors[\"platNumber\"] = \"No matching plat found.\";\r\n this.setState({\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat: '',\r\n errors: errors\r\n })\r\n } else if (filteredList.length === 1) {\r\n let namefilteredList = this.props.allPlatList.filter(function (plat) {\r\n return plat.code == filteredList[0].code;\r\n });\r\n this.setState({\r\n platNumber: filteredList[0].code,\r\n platName: namefilteredList[0].description,\r\n platNumberFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat: filteredList[0].code\r\n })\r\n } else if (targetValue.length >= 2) {\r\n filteredList = [{ code: \"-1\", description: \"(Click here to select a plat)\" }].concat(filteredList);\r\n\r\n this.setState({\r\n platNumberFilteredList: filteredList,\r\n showPlatNumberDropdown: true,\r\n showPlatNameDropdown: false,\r\n plat: ''\r\n })\r\n } else if (targetValue.length < 2) {\r\n this.setState({\r\n platNumberFilteredList: filteredList,\r\n showPlatNameDropdown: false,\r\n showPlatNumberDropdown: false,\r\n plat: ''\r\n })\r\n }\r\n }\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n hideLoading = (message, status, content) => {\r\n if (content.paymentNeededAgain === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListReAuthWindowShow: true\r\n })\r\n } else if (content.paymentNeeded === true) {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: true\r\n })\r\n } else if (status === 'ERROR') {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\",\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message,\r\n creditCardPriceListWindowShow: false,\r\n creditCardPriceListReAuthWindowShow: false,\r\n creditCardAuthorizeDotNetWindowShow: false\r\n })\r\n }\r\n }\r\n\r\n handleCreditCardAuthorizeDotNetWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListWindowShow: false\r\n });\r\n }\r\n\r\n handleCreditCardPriceListContinue = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuth = () => {\r\n this.setState(\r\n {\r\n creditCardAuthorizeDotNetWindowShow: true\r\n });\r\n }\r\n\r\n handleCreditCardPriceListReAuthWindowClose = () => {\r\n this.setState(\r\n {\r\n creditCardPriceListReAuthWindowShow: false\r\n });\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.handleAuthorizedSubmit();\r\n }\r\n }\r\n }\r\n\r\n // Same code used in all searches - END\r\n\r\n handleAuthorizedSubmit = () => {\r\n this.props.resetSearchSequence();\r\n this.props.resetSearchSequenceDocumentNumber();\r\n this.props.resetSearchDetail();\r\n const { platNameFilteredList, platNumberFilteredList, loadingStatus, submitMessage, errors, token, creditCardPriceListWindowShow, creditCardAuthorizeDotNetWindowShow, creditCardPriceListReAuthWindowShow, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.searchByTractBookLegal(request, this.props.history, this.hideLoading);\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n\r\n if (this.state.legalType === 'LB') {\r\n if (!this.state.plat) {\r\n errors[\"platNumber\"] = \"A valid plat required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n }\r\n\r\n let formIsValid = validateDates(errors, this.state.fromRecordedDate, 'fromRecordedDate', this.state.toRecordedDate, 'toRecordedDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetSearchCriteria();\r\n\r\n this.setState({\r\n documentType: 'ALL',\r\n fromRecordedDate: moment('01/01/1800').format('L'),\r\n toRecordedDate: moment().format('L'),\r\n section: '',\r\n township: '',\r\n range: '',\r\n base: '',\r\n meridian: '',\r\n qqqq: '',\r\n qqq: '',\r\n qq: '',\r\n q: '',\r\n municipality: '',\r\n otherLotMb: '',\r\n otherLotLb: '',\r\n otherLotCodeMb: '',\r\n otherLotCodeLb: '',\r\n lot: '',\r\n sublot: '',\r\n block: '',\r\n plat: '',\r\n platNumber: '',\r\n platName: '',\r\n showPlatNumberDropdown: false,\r\n platNumberFilteredList: this.props.allPlatNumberList,\r\n showPlatNameDropdown: false,\r\n platNameFilteredList: this.props.allPlatNameList,\r\n showPlatList: false,\r\n building: '',\r\n unit: '',\r\n garage: '',\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n handleDatePickerChangeFromRecordedDate = (date) => {\r\n this.setState({\r\n fromRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToRecordedDate = (date) => {\r\n this.setState({\r\n toRecordedDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handlePlatLookup = () => {\r\n this.setState({\r\n showPlatList: true\r\n });\r\n }\r\n\r\n handlePlatReset = () => {\r\n this.setState({\r\n plat: '',\r\n platName: '',\r\n platNumber: '',\r\n showPlatNumberDropdown: false,\r\n platNumberFilteredList: this.props.allPlatNumberList,\r\n showPlatNameDropdown: false,\r\n platNameFilteredList: this.props.allPlatNameList,\r\n showPlatList: false,\r\n errors: {}\r\n });\r\n }\r\n\r\n handleClosePlatLookup = (selectedId, selectedName) => {\r\n \r\n this.setState({\r\n errors: {},\r\n showPlatList: false\r\n })\r\n\r\n if (selectedId) {\r\n this.setState({\r\n plat: selectedId,\r\n platNumber: selectedId,\r\n platName: selectedName\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n var hideBaseMeridianMunicipalityRow = this.state.legalType !== 'MB' || (this.props.isBaseline === false && this.props.isMunicipality === false && this.props.isMeridian === false)\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Tract Book Search by Legal\",\r\n autoComplete: false,\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'legalType', label: 'Legal Type', fieldType: 'select', primaryCriteria: true, value: this.state.legalType, options: [{ code: 'LB', description: 'Lots & Blocks' }, { code: 'MB', description: 'Metes & Bounds' }] },\r\n { id: 'searchMethod', label: '', fieldType: 'select', primaryCriteria: true, value: this.state.searchMethod, options: [{ code: 'CONTAINS', description: 'Contains' }, { code: 'EXACT', description: 'Matches Exactly' }] }]\r\n },\r\n {\r\n formGroups: [{ id: 'section', label: 'Section', fieldType: 'text', primaryCriteria: true, hideRow: this.state.legalType !== 'MB', required: this.state.legalType === 'MB', value: this.state.section },\r\n { id: 'township', label: 'Township', fieldType: 'text', primaryCriteria: true, required: this.state.legalType === 'MB', value: this.state.township },\r\n { id: 'range', label: 'Range', fieldType: 'text', primaryCriteria: true, required: this.state.legalType === 'MB', value: this.state.range }]\r\n },\r\n {\r\n formGroups: [{ id: 'qqqq', label: 'QQQQ', fieldType: 'select', options: DIRECTION_OPTIONS, hideRow: this.state.legalType !== 'MB', hideField: this.props.isQQQQ === false, value: this.state.qqqq },\r\n { id: 'qqq', label: 'QQQ', fieldType: 'select', options: DIRECTION_OPTIONS, hideField: this.props.isQQQ === false, value: this.state.qqq },\r\n { id: 'qq', label: 'QQ', fieldType: 'select', options: DIRECTION_OPTIONS, value: this.state.qq },\r\n { id: 'q', label: 'Q', fieldType: 'select', options: DIRECTION_OPTIONS, value: this.state.q }]\r\n },\r\n {\r\n formGroups: [{ id: 'base', label: 'Base', fieldType: 'text', hideRow: hideBaseMeridianMunicipalityRow, hideField: this.props.isBaseline === false, value: this.state.base },\r\n { id: 'meridian', label: 'Meridian', fieldType: 'text', hideField: this.props.isMeridian === false, value: this.state.meridian },\r\n { id: 'municipality', label: 'Municipality', fieldType: 'text', hideField: this.props.isMunicipality === false, value: this.state.municipality }]\r\n },\r\n {\r\n formGroups: [\r\n { id: 'platNumber', label: 'Plat Number', primaryCriteria: true, options: this.state.platNumberFilteredList, style: {minWidth: 100}, fieldType: 'plat', required: this.state.legalType === 'LB', hideRow: this.state.legalType === 'MB', hideSelect: this.state.showPlatNumberDropdown === false, value: this.state.platNumber, error: this.state.errors['platNumber'] },\r\n { id: 'platName', label: 'Plat Name', primaryCriteria: true, options: this.state.platNameFilteredList, style: {minWidth: 300}, fieldType: 'plat', required: this.state.legalType === 'LB', hideRow: this.state.legalType === 'MB', hideSelect: this.state.showPlatNameDropdown === false, value: this.state.platName, error: this.state.errors['platName'] },\r\n { id: 'platResetButton', label: 'Reset', fieldType: 'reset', onClick: this.handlePlatReset },\r\n { id: 'platLookupButton', fieldType: 'lookupWithLabel', style: {marginLeft: 8}, label: 'Full List', onClick: this.handlePlatLookup }\r\n ]\r\n },\r\n {\r\n formGroups: [{ id: 'lot', label: 'Lot', fieldType: 'text', hideRow: this.state.legalType === 'MB', hideField: this.state.legalType === 'MB', value: this.state.lot },\r\n { id: 'block', label: 'Block', fieldType: 'text', hideField: this.state.legalType === 'MB', value: this.state.block },\r\n { id: 'sublot', label: 'Sublot', fieldType: 'text', hideField: this.state.legalType === 'MB' || this.props.isSublot === false, value: this.state.sublot }]\r\n },\r\n {\r\n formGroups: [{ id: 'otherLotCodeLb', label: 'Other Lot Type', fieldType: 'select', hideRow: this.state.legalType === 'MB' || this.props.isMbOtherLot === false, options: this.props.otherLotCodes, value: this.state.otherLotCodeLb },\r\n { id: 'otherLotLb', label: 'Other Lot', fieldType: 'text', value: this.state.otherLotLb }]\r\n },\r\n {\r\n formGroups: [{ id: 'otherLotCodeMb', label: 'Other Lot Type', fieldType: 'select', hideRow: this.state.legalType !== 'MB' || this.props.isMbOtherLot === false, options: this.props.otherLotCodes, value: this.state.otherLotCodeMb },\r\n { id: 'otherLotMb', label: 'Other Lot', fieldType: 'text', value: this.state.otherLotMb }]\r\n },\r\n {\r\n formGroups: [{ id: 'building', label: 'Building', fieldType: 'text', hideRow: this.state.legalType === 'MB', value: this.state.building },\r\n { id: 'unit', label: 'Unit', fieldType: 'text', value: this.state.unit },\r\n { id: 'garage', label: 'Garage', fieldType: 'text', value: this.state.garage }]\r\n },\r\n {\r\n formGroups: [{ id: 'fromRecordedDate', label: 'From Date', fieldType: 'date', value: this.state.fromRecordedDate, handleDatePickerChange: this.handleDatePickerChangeFromRecordedDate, error: this.state.errors['fromRecordedDate'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'toRecordedDate', label: 'To Date', fieldType: 'date', value: this.state.toRecordedDate, handleDatePickerChange: this.handleDatePickerChangeToRecordedDate, error: this.state.errors['toRecordedDate'] }]\r\n }\r\n ],\r\n\r\n handleAuthorizedSubmit: this.handleAuthorizedSubmit,\r\n\r\n // price list window\r\n creditCardPriceListWindowShow: this.state.creditCardPriceListWindowShow,\r\n handleCreditCardPriceListClose: this.handleCreditCardPriceListClose,\r\n handleCreditCardPriceListContinue: this.handleCreditCardPriceListContinue,\r\n\r\n // authoriz.net iframe window\r\n creditCardAuthorizeDotNetWindowShow: this.state.creditCardAuthorizeDotNetWindowShow,\r\n handleCreditCardAuthorizeDotNetWindowClose: this.handleCreditCardAuthorizeDotNetWindowClose,\r\n authorizeDotNetToken: this.state.token,\r\n\r\n // re-preauth price list window\r\n creditCardPriceListReAuthWindowShow: this.state.creditCardPriceListReAuthWindowShow,\r\n handleCreditCardPriceListReAuth: this.handleCreditCardPriceListReAuth,\r\n handleCreditCardPriceListReAuthWindowClose: this.handleCreditCardPriceListReAuthWindowClose\r\n }\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n <PlatSelectionList showModal={this.state.showPlatList} onHide={(selectedId, selectedName) => this.handleClosePlatLookup(selectedId, selectedName)} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(SpecialSearchTractBookLegal);","import React, {Component} from 'react';\r\n\r\n// If there are more than one history link of the same kind, react doesn't recreate the component\r\n// if you click on them consecutively.\r\n// For example, if there are two Grantor Grante Book links in the history and if you click on them \r\n// consecutively, react will reuse the component but the state of the component will not get updated.\r\n// It will do mapStateToProps -> props but it won't do props -> component state. \r\n// This is a workaround to force react to create a SearchHistory component in between. In doing so, \r\n// the Search component will be created anew.\r\nclass SearchHistory extends Component {\r\n\r\n componentDidMount() {\r\n this.props.history.push('/search/' + this.props.match.params.searchType + '/' + this.props.match.params.searchHistoryNumber);\r\n }\r\n\r\n render() {\r\n return (\r\n <>Loading.....</>\r\n )\r\n }\r\n}\r\n\r\nexport default SearchHistory;\r\n","import React from 'react';\r\nimport { Nav, Navbar } from 'react-bootstrap';\r\nimport { Route, Switch } from \"react-router-dom\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport SideNavigationLabel from \"../side/SideNavigationLabel\";\r\nimport SideNavigationToggle from \"../side/SideNavigationToggle\";\r\nimport SideNavigationNavLink from \"../side/SideNavigationNavLink\";\r\nimport SideNavigationNumberedNavLink from \"../side/SideNavigationNumberedNavLink\";\r\n\r\nimport SearchByAddress from \"./searchBy/SearchByAddress\";\r\nimport SearchByBookAndPage from \"./searchBy/SearchByBookAndPage\";\r\nimport SearchByDate from \"./searchBy/SearchByDate\";\r\nimport SearchByDocumentNumber from \"./searchBy/SearchByDocumentNumber\";\r\nimport SearchByLegalDescription from \"./searchBy/SearchByLegalDescription\";\r\nimport SearchByName from \"./searchBy/SearchByName\";\r\nimport SearchByParcelId from \"./searchBy/SearchByParcelId\";\r\nimport SearchByTorrensCertificate from \"./searchBy/SearchByTorrensCertificate\";\r\nimport SearchByTorrensText from \"./searchBy/SearchByTorrensText\";\r\nimport SearchByTractIndexNMI from \"./searchBy/SearchByTractIndexNMI\"\r\n\r\nimport SpecialSearchPlat from \"./searchBy/SpecialSearchPlat\";\r\nimport SpecialSearchGrantorGranteeBook from \"./searchBy/SpecialSearchGrantorGranteeBook\";\r\nimport SpecialSearchTaxLien from \"./searchBy/SpecialSearchTaxLien\";\r\nimport SearchResults from \"./searchResults/SearchResults\";\r\nimport TractBookSearchResults from \"./searchResults/TractBookSearchResults\";\r\nimport TaxLienSearchResults from \"./searchResults/TaxLienSearchResults\";\r\nimport TorrensSearchResults from \"./searchResults/TorrensSearchResults\";\r\nimport GrantorGranteeBookSearchResults from \"./searchResults/GrantorGranteeBookSearchResults\";\r\nimport SpecialSearchTractBookId from './searchBy/SpecialSearchTractBookId';\r\nimport SpecialSearchTractBookLegal from './searchBy/SpecialSearchTractBookLegal';\r\n\r\nimport CommonTop from \"../../components/top/CommonTop\";\r\n\r\nimport SearchHistory from './searchBy/SearchHistory';\r\n\r\nimport { SearchByAddressKey, SearchByBookAndPageKey, SearchByDateKey, SearchByDocumentNumberKey, \r\n\tSearchByLegalDescriptionKey, SearchByNameKey, SearchByParcelIdKey, SearchByTorrensCertificateKey, SearchByTorrensTextKey,\r\n\tSpecialSearchTaxLienKey, SpecialSearchPlatKey, SpecialSearchGrantorGranteeBookKey, SpecialSearchTractBookIdKey, SpecialSearchTractBookLegalKey, SearchByTractIndexNMIKey } from \"../../redux/actions/searchActions\"; \r\n\r\nimport { atlasIcon, atlasActiveIcon, addressIcon, addressActiveIcon, bookIcon, bookActiveIcon, dateIcon, dateActiveIcon,\r\n\t\tdocumentNumberIcon, documentNumberActiveIcon, \r\n\t\tnameIcon, nameActiveIcon, parcelIcon, parcelActiveIcon, platIcon, platActiveIcon,\r\n\t\tlegalIcon, legalActiveIcon, registeredLandIcon, registeredLandActiveIcon, dollarIcon, dollarActiveIcon,\r\n\t\tbookmarkIcon, searchIcon, grantorGranteeBookIcon, grantorGranteeBookActiveIcon } from \"../../img/font_awesome/font_awesome\"\r\n\r\n\r\nimport translations from \"../../config/translation/search_translations.json\"\r\n\r\nconst mapStateToProps = state => {\r\n\treturn {\r\n\t\tcountyConfigSearch: state.countyConfigSearchReducer,\r\n\t\tselectedSearchType: state.searchTypeReducer.selectedSearchType,\r\n\t\ttorrensLabel: state.countyConfigCommonReducer.torrensLabel,\r\n\t\tbookLabel: state.countyConfigCommonReducer.bookLabel,\r\n\t\tisTorrens : state.landlinkConfigReducer.torrens,\r\n\t\tsearchHistoryList: state.searchHistoryReducer.searchHistoryList,\r\n\t\tsearchList: state.currentUserReducer.searchList,\r\n\t\trole: state.currentUserReducer.role,\r\n\t\tlanguage: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH' \r\n\t};\r\n}\r\n\r\nclass Search extends React.Component {\r\n\r\n\trender() {\r\n\r\n\t\t// Search By\r\n\t\tlet searchByProps = {\r\n\t\t\tid: \"searchByNavLink\",\r\n\t\t\timage: searchIcon,\r\n\t\t\tname: translations[this.props.language].search_by + \":\"\r\n\t\t}\r\n\r\n\t\tlet searchByAddressProps = {\r\n\t\t\tid: \"searchByAddressNavLink\",\r\n\t\t\tlink: \"/search/\" + SearchByAddressKey,\r\n\t\t\timage: this.props.selectedSearchType === SearchByAddressKey ? addressActiveIcon: addressIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SearchByAddressKey,\r\n\t\t\tname: \"Address\"\r\n\t\t}\r\n\r\n\t\tlet searchByBookAndPageProps = {\r\n\t\t\tid: \"searchByBookAndPageNavLink\",\r\n\t\t\tlink: \"/search/searchByBookAndPage\",\r\n\t\t\timage: this.props.selectedSearchType === SearchByBookAndPageKey ? bookActiveIcon : bookIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SearchByBookAndPageKey,\r\n\t\t\tname: this.props.language !== 'ENGLISH' ? translations[this.props.language].book_and_page : this.props.bookLabel + \" & Page\"\r\n\t\t}\r\n\r\n\t\tlet searchByDateProps = {\r\n\t\t\tid: \"searchByDateNavLink\",\r\n\t\t\tlink: \"/search/\" + SearchByDateKey,\r\n\t\t\timage: this.props.selectedSearchType === SearchByDateKey ? dateActiveIcon : dateIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SearchByDateKey,\r\n\t\t\tname: translations[this.props.language].date\r\n\t\t}\r\n\r\n\t\tlet searchByDocumentNumberProps = {\r\n\t\t\tid: \"searchByDocumentNumberNavLink\",\r\n\t\t\tlink: \"/search/\" + SearchByDocumentNumberKey,\r\n\t\t\timage: this.props.selectedSearchType === SearchByDocumentNumberKey ? documentNumberActiveIcon : documentNumberIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SearchByDocumentNumberKey,\r\n\t\t\tname: translations[this.props.language].document_number\r\n\t\t}\r\n\r\n\t\tlet searchByNameProps = {\r\n\t\t\tid: \"searchByNameNavLink\",\r\n\t\t\tlink: \"/search/\" + SearchByNameKey,\r\n\t\t\timage: this.props.selectedSearchType === SearchByNameKey ? nameActiveIcon: nameIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SearchByNameKey,\r\n\t\t\tname: translations[this.props.language].name\r\n\t\t}\r\n\r\n\t\tlet searchByLegalDescriptionProps = {\r\n\t\t\tid: \"searchByLegalDescriptionNavLink\",\r\n\t\t\tlink: \"/search/\" + SearchByLegalDescriptionKey,\r\n\t\t\timage: this.props.selectedSearchType === SearchByLegalDescriptionKey ? legalActiveIcon: legalIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SearchByLegalDescriptionKey,\r\n\t\t\tname: \"Legal Description\"\r\n\t\t}\r\n\r\n\t\tlet searchByParcelIdProps = {\r\n\t\t\tid: \"searchByParcelIdNavLink\",\r\n\t\t\tlink: \"/search/\" + SearchByParcelIdKey,\r\n\t\t\timage: this.props.selectedSearchType === SearchByParcelIdKey ? parcelActiveIcon: parcelIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SearchByParcelIdKey,\r\n\t\t\tname: \"Parcel ID\"\r\n\t\t}\r\n\r\n\t\tlet searchByTorrensCertificateProps = {\r\n\t\t\tid: \"searchByTorrensCertificateNavLink\",\r\n\t\t\tlink: \"/search/\" + SearchByTorrensCertificateKey,\r\n\t\t\timage: this.props.selectedSearchType === SearchByTorrensCertificateKey ? registeredLandActiveIcon : registeredLandIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SearchByTorrensCertificateKey,\r\n\t\t\tname: this.props.torrensLabel + \" Certficate\"\r\n\t\t}\r\n\r\n\t\tlet searchByTorrensTextProps = {\r\n\t\t\tid: \"searchByTorrensTextNavLink\",\r\n\t\t\tlink: \"/search/\" + SearchByTorrensTextKey,\r\n\t\t\timage: this.props.selectedSearchType === SearchByTorrensTextKey ? registeredLandActiveIcon : registeredLandIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SearchByTorrensTextKey,\r\n\t\t\tname: this.props.torrensLabel + \" Text\"\r\n\t\t}\r\n\r\n\t\tlet searchByTractIndexNMIProps = {\r\n\t\t\tid: \"searchByTractIndexNMINavLink\",\r\n\t\t\tlink: \"/search/\" + SearchByTractIndexNMIKey,\r\n\t\t\timage: this.props.selectedSearchType === SearchByTractIndexNMIKey ? legalActiveIcon: legalIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SearchByTractIndexNMIKey,\r\n\t\t\tname: translations[this.props.language].tract_index\r\n\t\t}\r\n\r\n\t\tlet searchByList = [];\r\n\t\tif (this.props.countyConfigSearch.searchByAddress && this.props.searchList.includes('searchByAddress')) {\r\n\t\t\tsearchByList.push(searchByAddressProps);\r\n\t\t}\r\n\r\n\t\tif (this.props.countyConfigSearch.searchByBookAndPage && this.props.searchList.includes('searchByBookAndPage')) {\r\n\t\t\tsearchByList.push(searchByBookAndPageProps);\r\n\t\t}\r\n\r\n\t\tif (this.props.countyConfigSearch.searchByDate && this.props.searchList.includes('searchByDate')) {\r\n\t\t\tsearchByList.push(searchByDateProps);\r\n\t\t}\r\n\r\n\t\tif (this.props.countyConfigSearch.searchByDocumentNumber && this.props.searchList.includes('searchByDocumentNumber')) {\r\n\t\t\tsearchByList.push(searchByDocumentNumberProps);\r\n\t\t}\r\n\r\n\t\tif (this.props.countyConfigSearch.searchByName && this.props.searchList.includes('searchByName')) {\r\n\t\t\tsearchByList.push(searchByNameProps);\r\n\t\t}\r\n\r\n\t\tif (this.props.countyConfigSearch.searchByLegalDescription && this.props.searchList.includes('searchByLegalDescription')) {\r\n\t\t\tsearchByList.push(searchByLegalDescriptionProps);\r\n\t\t}\r\n\r\n\t\tif (this.props.countyConfigSearch.searchByParcelId && this.props.searchList.includes('searchByParcelId')) {\r\n\t\t\tsearchByList.push(searchByParcelIdProps);\r\n\t\t}\r\n\t\t\r\n\t\tif (this.props.isTorrens === true && this.props.countyConfigSearch.searchByTorrensCertificate && this.props.searchList.includes('searchByTorrensCertificate')) {\r\n\t\t\tsearchByList.push(searchByTorrensCertificateProps);\r\n\t\t}\r\n\r\n\t\tif (this.props.isTorrens === true && this.props.countyConfigSearch.searchByTorrensText && this.props.searchList.includes('searchByTorrensText')) {\r\n\t\t\tsearchByList.push(searchByTorrensTextProps);\r\n\t\t}\r\n\r\n\t\tif (this.props.countyConfigSearch.searchByTractIndexNMI && this.props.searchList.includes('searchByTractIndexNMI')) {\r\n\t\t\tsearchByList.push(searchByTractIndexNMIProps);\r\n\t\t}\r\n\r\n\t\t// Sort the SearchBy links\r\n\t\tsearchByList.sort((a, b) => \r\n\t\t\t{ \r\n\t\t\t\tif (a.name > b.name) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t \t} else if (a.name < b.name) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t \t}\r\n\t\t\t \treturn 0;\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\t// Special Searches\r\n\t\tlet specialSearchesProps = {\r\n\t\t\tid: \"specialSearchesNavLink\",\r\n\t\t\timage: searchIcon,\r\n\t\t\tname: \"Special Searches:\"\r\n\t\t}\r\n\r\n\t\tlet searchByGrantorGranteeBookProps = {\r\n\t\t\tid: \"searchByGrantorGranteeBookNavLink\",\r\n\t\t\tlink: \"/search/\" + SpecialSearchGrantorGranteeBookKey,\r\n\t\t\timage: this.props.selectedSearchType === SpecialSearchGrantorGranteeBookKey ? grantorGranteeBookActiveIcon : grantorGranteeBookIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SpecialSearchGrantorGranteeBookKey,\r\n\t\t\tname: \"Grantor Grantee Book\"\r\n\t\t}\r\n\r\n\t\tlet searchByPlatProps = {\r\n\t\t\tid: \"searchByPlatNavLink\",\r\n\t\t\tlink: \"/search/\" + SpecialSearchPlatKey,\r\n\t\t\timage: this.props.selectedSearchType === SpecialSearchPlatKey ? platActiveIcon : platIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SpecialSearchPlatKey,\r\n\t\t\tname: \"Plat\"\r\n\t\t}\r\n\r\n\t\tlet searchByTaxLienProps = {\r\n\t\t\tid: \"searchByTaxLienNavLink\",\r\n\t\t\tlink: \"/search/\" + SpecialSearchTaxLienKey,\r\n\t\t\timage: this.props.selectedSearchType === SpecialSearchTaxLienKey ? dollarActiveIcon : dollarIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SpecialSearchTaxLienKey,\r\n\t\t\tname: \"Tax Lien\"\r\n\t\t}\r\n\r\n\t\tlet searchByTractBookIdProps = {\r\n\t\t\tid: \"searchByTractBookIdNavLink\",\r\n\t\t\tlink: \"/search/\" + SpecialSearchTractBookIdKey,\r\n\t\t\timage: this.props.selectedSearchType === SpecialSearchTractBookIdKey ? atlasActiveIcon: atlasIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SpecialSearchTractBookIdKey,\r\n\t\t\tname: \"Tract Book ID\"\r\n\t\t}\r\n\t\t\r\n\t\tlet searchByTractBookLegalProps = {\r\n\t\t\tid: \"searchByTractBookLegalNavLink\",\r\n\t\t\tlink: \"/search/\" + SpecialSearchTractBookLegalKey,\r\n\t\t\timage: this.props.selectedSearchType === SpecialSearchTractBookLegalKey ? atlasActiveIcon: atlasIcon,\r\n\t\t\tselected: this.props.selectedSearchType === SpecialSearchTractBookLegalKey,\r\n\t\t\tname: \"Tract Book Legal\"\r\n\t\t}\r\n\r\n\t\tlet specialSearchesList = []\r\n\r\n\t\tif (this.props.countyConfigSearch.searchByGrantorGranteeBook && this.props.searchList.includes('searchByGrantorGranteeBook')) {\r\n\t\t\tspecialSearchesList.push(searchByGrantorGranteeBookProps);\r\n\t\t}\r\n\r\n\t\tif (this.props.countyConfigSearch.searchByPlat && this.props.searchList.includes('searchByPlat')) {\r\n\t\t\tspecialSearchesList.push(searchByPlatProps);\r\n\t\t}\r\n\t\t\r\n\t\tif (this.props.countyConfigSearch.searchByTaxLien && this.props.searchList.includes('searchByTaxLien')) {\r\n\t\t\tspecialSearchesList.push(searchByTaxLienProps);\r\n\t\t}\r\n\r\n\t\tif (this.props.countyConfigSearch.searchByTractBookId && this.props.searchList.includes('searchByTractBookId')) {\r\n\t\t\tspecialSearchesList.push(searchByTractBookIdProps);\r\n\t\t}\r\n\r\n\t\tif (this.props.countyConfigSearch.searchByTractBookLegal && this.props.searchList.includes('searchByTractBookLegal')) {\r\n\t\t\tspecialSearchesList.push(searchByTractBookLegalProps);\r\n\t\t}\r\n\r\n\t\t// Sort the Special Searches links\r\n\t\tspecialSearchesList.sort((a, b) => \r\n\t\t\t{ \r\n\t\t\t\tif (a.name > b.name) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t \t} else if (a.name < b.name) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t \t}\r\n\t\t\t \treturn 0;\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\t// Recent Searches\r\n\t\tlet recentSearchesProps = {\r\n\t\t\timage: bookmarkIcon,\r\n\t\t\tname: translations[this.props.language].recent_searches + \":\"\r\n\t\t}\r\n\r\n\t\t// Set the /search Route based on the selectedSearchType.\r\n\t\tlet defaultRoute;\r\n\t\tif (\"searchByAddress\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByAddress} />;\r\n\t\t} else if (\"searchByBookAndPage\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByBookAndPage} />;\r\n\t\t} else if(\"searchByDate\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByDate} />;\r\n\t\t} else if (\"searchByDocumentNumber\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByDocumentNumber} />;\r\n\t\t} else if(\"searchByLegalDescription\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByLegalDescription} />;\r\n\t\t} else if (\"searchByName\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByName} />;\r\n\t\t} else if(\"searchByParcelId\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByParcelId} />;\r\n\t\t} else if (\"searchByTorrensCertificate\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByTorrensCertificate} />;\r\n\t\t} else if (\"searchByTorrensText\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByTorrensText} />;\r\n\t\t} else if (\"specialSearchGrantorGranteeBook\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SpecialSearchGrantorGranteeBook} />;\r\n\t\t} else if (\"specialSearchPlat\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SpecialSearchPlat} />;\r\n\t\t} else if(\"specialSearchTaxLien\" === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SpecialSearchTaxLien} />;\r\n\t\t} else if ('specialSearchTractBookId' === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SpecialSearchTractBookId} />;\r\n\t\t} else if ('specialSearchTractBookLegal' === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SpecialSearchTractBookLegal} />;\r\n\t\t} else if ('searchByTractIndexNMI' === this.props.selectedSearchType) {\r\n\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByTractIndexNMI} />;\r\n\t\t}\r\n\r\n\t\tif (!defaultRoute) {\r\n\t\t\tif (\"searchByAddress\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByAddress} />;\r\n\t\t\t} else if (\"searchByBookAndPage\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByBookAndPage} />;\r\n\t\t\t} else if(\"searchByDate\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByDate} />;\r\n\t\t\t} else if (\"searchByDocumentNumber\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByDocumentNumber} />;\r\n\t\t\t} else if(\"searchByLegalDescription\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByLegalDescription} />;\r\n\t\t\t} else if (\"searchByName\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByName} />;\r\n\t\t\t} else if(\"searchByParcelId\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByParcelId} />;\r\n\t\t\t} else if (\"searchByTorrensCertificate\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByTorrensCertificate} />;\r\n\t\t\t} else if (\"searchByTorrensText\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByTorrensText} />;\r\n\t\t\t} else if (\"specialSearchGrantorGranteeBook\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SpecialSearchGrantorGranteeBook} />;\r\n\t\t\t} else if (\"specialSearchPlat\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SpecialSearchPlat} />;\r\n\t\t\t} else if(\"specialSearchTaxLien\" === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SpecialSearchTaxLien} />;\r\n\t\t\t} else if ('specialSearchTractBookId' === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SpecialSearchTractBookId} />;\r\n\t\t\t} else if ('specialSearchTractBookLegal' === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SpecialSearchTractBookLegal} />;\r\n\t\t\t} else if ('searchByTractIndexNMI' === this.props.countyConfigSearch.defaultSearch) {\r\n\t\t\t\tdefaultRoute = <Route path=\"/search\" component={SearchByTractIndexNMI} />;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t\t<div>\r\n\t\t\t\t<CommonTop history={this.props.history} />\r\n\t\t\t\t\r\n\t\t\t\t<div style={{ float: \"left\", minWidth: 38, maxWidth: 280 }}>\r\n\t\t\t\t\t<SideNavigationToggle />\r\n\t\t\t\t\t<Navbar bg=\"light\" style={{ padding: 0, display: \"block\" }}>\r\n\t\t\t\t\t\t<Navbar.Toggle aria-controls=\"basic-navbar-nav\" />\r\n\t\t\t\t\t\t<Nav className=\"flex-column\" style={{ width: '100%', float: \"left\", marginLeft: 2 }}>\r\n\t\t\t\t\t\t\t<Nav.Link eventKey=\"disabled\" disabled style={{ fontWeight: 'bold', background: \"gray\", color: \"black\"}} className='side-nav-header' ><SideNavigationLabel {...searchByProps} /></Nav.Link>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tsearchByList.map((searchBy) => <SideNavigationNavLink {...searchBy} />)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t<Nav.Link eventKey=\"disabled\" disabled className='side-nav-header' style={{ fontWeight: 'bold', background: \"gray\", color: \"black\"}} ><SideNavigationLabel {...specialSearchesProps} /></Nav.Link>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tspecialSearchesList.map((searchBy) => <SideNavigationNavLink {...searchBy} />)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.props.role !== 'GUEST' &&\r\n\t\t\t\t\t\t\t\t<Nav.Link eventKey=\"disabled\" disabled className='side-nav-header' style={{ fontWeight: 'bold', background: \"gray\", color: \"black\"}} ><SideNavigationLabel {...recentSearchesProps} /></Nav.Link>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.props.role !== 'GUEST' &&\r\n\t\t\t\t\t\t\t\tthis.props.searchHistoryList.map((search, index) => {\r\n\t\t\t\t\t\t\t\tsearch.index = index + 1;\r\n\t\t\t\t\t\t\t\treturn (<SideNavigationNumberedNavLink key={\"searchHistory\" + search.index} {...search} />);\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</Nav>\r\n\t\t\t\t\t</Navbar>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div style={{paddingBottom: 4}}>\r\n\t\t\t\t\t<Switch>\r\n\t\t\t\t\t\t{/* Search Resultes routes */}\r\n\t\t\t\t\t\t<Route path=\"/search/SearchResults\" component={SearchResults} />\r\n\t\t\t\t\t\t<Route path=\"/search/TractBookSearchResults\" component={TractBookSearchResults} />\r\n\t\t\t\t\t\t<Route path=\"/search/GrantorGranteeBookSearchResults\" component={GrantorGranteeBookSearchResults} />\r\n\t\t\t\t\t\t<Route path=\"/search/TaxLienSearchResults\" component={TaxLienSearchResults} />\r\n\t\t\t\t\t\t<Route path=\"/search/TorrensSearchResults\" component={TorrensSearchResults} />\r\n\t\t\t\t\t\t<Route path=\"/search/searchHistory/:searchType/:searchHistoryNumber\" component={SearchHistory} />\r\n\r\n\t\t\t\t\t\t{/* Search History routes */}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByAddress && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByAddress/:searchHistoryNumber\" component={SearchByAddress} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByBookAndPage && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByBookAndPage/:searchHistoryNumber\" component={SearchByBookAndPage} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByDate && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByDate/:searchHistoryNumber\" component={SearchByDate} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByDocumentNumber && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByDocumentNumber/:searchHistoryNumber\" component={SearchByDocumentNumber} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByLegalDescription && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByLegalDescription/:searchHistoryNumber\" component={SearchByLegalDescription} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByName && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByName/:searchHistoryNumber\" component={SearchByName} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByParcelId && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByParcelId/:searchHistoryNumber\" component={SearchByParcelId} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTorrensCertificate && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTorrensCertificate/:searchHistoryNumber\" component={SearchByTorrensCertificate} />\r\n\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTorrensText && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTorrensText/:searchHistoryNumber\" component={SearchByTorrensText} />\r\n\t\t\t\t\t\t}\t\t\t\t\t\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByGrantorGranteeBook && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByGrantorGranteeBook/:searchHistoryNumber\" component={SpecialSearchGrantorGranteeBook} />\r\n\t\t\t\t\t\t}\t\t\t\t\t\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByPlat && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByPlat/:searchHistoryNumber\" component={SpecialSearchPlat} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTaxLien && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTaxLien/:searchHistoryNumber\" component={SpecialSearchTaxLien} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTractBookId && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTractBookId/:searchHistoryNumber\" component={SpecialSearchTractBookId} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTractBookLegal && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTractBookLegal/:searchHistoryNumber\" component={SpecialSearchTractBookLegal} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTractIndexNMI && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTractIndexNMI/:searchHistoryNumber\" component={SearchByTractIndexNMI} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\t\t{/* New Searches routes */}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByAddress && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByAddress\" component={SearchByAddress} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByBookAndPage && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByBookAndPage\" component={SearchByBookAndPage} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByDate && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByDate\" component={SearchByDate} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByDocumentNumber && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByDocumentNumber\" component={SearchByDocumentNumber} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByLegalDescription && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByLegalDescription\" component={SearchByLegalDescription} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByName && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByName\" component={SearchByName} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByParcelId && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByParcelId\" component={SearchByParcelId} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTorrensCertificate && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTorrensCertificate\" component={SearchByTorrensCertificate} />\r\n\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTorrensText && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTorrensText\" component={SearchByTorrensText} />\r\n\t\t\t\t\t\t}\t\t\t\t\t\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByGrantorGranteeBook && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByGrantorGranteeBook\" component={SpecialSearchGrantorGranteeBook} />\r\n\t\t\t\t\t\t}\t\t\t\t\t\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByPlat && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByPlat\" component={SpecialSearchPlat} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTaxLien && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTaxLien\" component={SpecialSearchTaxLien} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTractBookId && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTractBookId\" component={SpecialSearchTractBookId} />\r\n\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTractBookLegal && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTractBookLegal\" component={SpecialSearchTractBookLegal} />\r\n\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigSearch.searchByTractIndexNMI && \r\n\t\t\t\t\t\t\t<Route path=\"/search/searchByTractIndexNMI\" component={SearchByTractIndexNMI} />\r\n\t\t\t\t\t\t}\t\r\n\t\t\t\r\n\t\t\t\t\t\t{defaultRoute}\t\t\t\t\t\t\r\n\t\t\t\t\t</Switch>\r\n\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps)(Search);\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { loadDocuments, setSelectedSearchType, SearchByParcelIdKey, SearchByParcelIdUrl } from '../../../redux/actions/searchActions';\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport Alert from '../../common/modal/Alert';\r\nimport Loading from '../../common/modal/Loading';\r\nimport moment from 'moment';\r\n\r\nconst componentName = SearchByParcelIdKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tsetSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n\t\tsearchByParcelId: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByParcelIdUrl)),\r\n\t\tresetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName })\r\n\t}\r\n}\r\n\r\nclass SearchByParcelIdExternal extends Component {\r\n\tstate = {\r\n\t showAlert: false,\r\n\t\talertMessage: 'Could not find requested Parcel ID',\r\n\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t}\r\n\r\n\tsearchCallback = (message, okay, content) => {\r\n\t\tif (message === 'No Records Found.') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tshowAlert: true,\r\n\t\t\t\tloadingStatus: LOADING_STATUES.SUCCESS\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.SUCCESS\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\thideAlert = () => {\r\n\t\tthis.props.history.push('/search');\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.props.setSelectedSearchType();\r\n let parcelIdParam = this.props.match.params.id;\r\n\r\n\t\tlet request = {\t\t\t\r\n\t\t\t fromRecordedDate: moment('01/01/1900').format('L'),\r\n\t\t toRecordedDate: moment().format('L'),\r\n\t\t parcelId: parcelIdParam\r\n\t\t}\r\n\t\tthis.props.searchByParcelId(request, this.props.history, this.searchCallback);\r\n }\r\n\r\n render() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING } />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} type={this.state.alertType} />\r\n\t\t\t</>\r\n\t\t)\r\n\r\n\t}\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(SearchByParcelIdExternal);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { loadDocuments, setSelectedSearchType, SearchByDocumentNumberKey, SearchByDocumentNumberUrl } from '../../../redux/actions/searchActions';\r\nimport { LOADING_STATUES } from \"../../constants/constants\";\r\nimport Alert from '../../common/modal/Alert';\r\nimport Loading from '../../common/modal/Loading';\r\n\r\nconst componentName = SearchByDocumentNumberKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n\treturn {\r\n setSelectedSearchType: () => dispatch(setSelectedSearchType(componentName)),\r\n searchByDocumentNumber: (searchCriteria, history, callback) => dispatch(loadDocuments(searchCriteria, history, callback, SearchByDocumentNumberUrl)),\r\n resetSearchCriteria: () => dispatch({ type: 'RESET_SEARCH_CRITERIA', componentName })\r\n\t}\r\n}\r\n\r\nclass SearchByDocumentNumberExternal extends Component {\r\n\tstate = {\r\n\t showAlert: false,\r\n\t\talertMessage: 'Could not find requested Document Number',\r\n\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t}\r\n\r\n\tsearchCallback = (message, okay, content) => {\r\n\t\tif (message === 'No Records Found.') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tshowAlert: true,\r\n\t\t\t\tloadingStatus: LOADING_STATUES.SUCCESS\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.SUCCESS\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\thideAlert = () => {\r\n\t\tthis.props.history.push('/search');\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.props.setSelectedSearchType();\r\n let documentNumber = this.props.match.params.id;\r\n\r\n\t\tlet request = {\t\t\t\r\n documentType: 'ALL',\r\n\t\t fromDocumentNumber: documentNumber\r\n\t\t}\r\n\t\tthis.props.searchByDocumentNumber(request, this.props.history, this.searchCallback);\r\n }\r\n\r\n render() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING } />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} type={this.state.alertType} />\r\n\t\t\t</>\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(SearchByDocumentNumberExternal);","import React, { Component } from 'react';\r\nimport { Modal, Button, Row, Col, Container } from 'react-bootstrap'\r\n\r\nclass EfileConfirmation extends Component {\r\n\r\n handleYesClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.props.cancelConfirmation();\r\n this.props.proceedConfirmation();\r\n }\r\n\r\n handleNoClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.props.cancelConfirmation();\r\n }\r\n\r\n isNonZeroCharge = (value) => {\r\n return (value !== '') && (value !== '0') && (value !== '0.00');\r\n }\r\n\r\n render() {\r\n const hasDocumentCharge = this.props.firstPageCharge && this.props.firstPageCharge !== '' ? true : false;\r\n const hasAdditionalPagesCharge = this.props.additionalPagesCharge && this.props.additionalPagesCharge !== '' ? true : false;\r\n const hasSurcharge = this.props.surcharge && this.isNonZeroCharge(this.props.surcharge) ? true : false;\r\n const hasTotalCharge = this.props.totalCharge && this.props.totalCharge !== '' ? true : false;\r\n \r\n let documentChargeRow = <></>\r\n if (hasDocumentCharge) {\r\n documentChargeRow = <Row><Col lg={1}></Col><Col lg={5}>Document charge:</Col><Col lg={5} style={{textAlign: 'right'}}>${this.props.firstPageCharge}</Col><Col lg={1}></Col></Row>\r\n }\r\n\r\n let additionalPagesChargeRow = <></>\r\n if (hasAdditionalPagesCharge) {\r\n additionalPagesChargeRow = <Row><Col lg={1}></Col><Col lg={5}>Additional pages:</Col><Col lg={5} style={{textAlign: 'right'}}>${this.props.additionalPagesCharge}</Col><Col lg={1}></Col></Row>\r\n }\r\n\r\n let surchargeRow = <></>\r\n if (hasSurcharge) {\r\n if (this.props.paymentMethod === 'CREDIT_CARD') {\r\n surchargeRow = <Row><Col lg={1}></Col><Col lg={5}>Credit card surcharge:</Col><Col lg={5} style={{textAlign: 'end'}}>${this.props.surcharge}</Col><Col lg={1}></Col></Row>\r\n } else {\r\n surchargeRow = <Row><Col lg={1}></Col><Col lg={5}>Payment surcharge:</Col><Col lg={5} style={{textAlign: 'end'}}>${this.props.surcharge}</Col><Col lg={1}></Col></Row>\r\n }\r\n }\r\n\r\n let totalChargeRow = <></>\r\n if (hasTotalCharge) {\r\n totalChargeRow = <Row style={{fontWeight: 'bold'}}><Col lg={1}></Col><Col lg={5}>Total to be charged:</Col><Col lg={5} style={{textAlign: 'right'}}>${this.props.totalCharge}</Col><Col lg={1}></Col></Row>\r\n }\r\n\r\n let modalTitle = '';\r\n if (this.props.paymentMethod === 'CREDIT_CARD') {\r\n modalTitle = 'Continue to Payment?';\r\n } else {\r\n modalTitle = 'Continue?';\r\n }\r\n\r\n return (\r\n <Modal show={this.props.show} onHide={this.handleNoClick} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton >\r\n <Modal.Title style={{color: '#3674AB'}}>{modalTitle}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black', background: '#3674AB', color: 'white', fontSize: 20}}>\r\n <Container fluid=\"true\" className='h-100'>\r\n <Row><Col lg={1}></Col><Col lg={5}>Number of pages in uploaded file:</Col><Col lg={5} style={{textAlign: 'right'}}>{this.props.numberOfPages}</Col><Col lg={1}></Col></Row>\r\n <Row> </Row>\r\n {documentChargeRow}\r\n {additionalPagesChargeRow}\r\n {surchargeRow}\r\n <Row ><Col lg={1}></Col><Col lg={10} style={{textAlign: 'right'}}><hr style={{borderColor: 'white'}}/></Col><Col lg={1}></Col></Row>\r\n {totalChargeRow}\r\n <Row ><Col lg={1}></Col><Col lg={10} style={{textAlign: 'right'}}><hr style={{borderColor: 'white'}}/></Col><Col lg={1}></Col></Row>\r\n </Container>\r\n \r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"primary\" onClick={this.handleYesClick}>Yes</Button>\r\n <Button variant=\"secondary\" onClick={this.handleNoClick}>No</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n\r\n}\r\n\r\nexport default EfileConfirmation;","import React, { Component } from 'react';\r\nimport { Modal, Button, Row, Col, Container } from 'react-bootstrap'\r\nimport { parse } from 'query-string';\r\nimport {backendLogger} from \"../../logger.js\"\r\n\r\nimport configData from \"../../config/config.json\";\r\n\r\nclass CreditCardEfilePayment extends Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.authFormRef = React.createRef();\r\n this.state = {previousShow: this.props.show};\r\n }\r\n\r\n handleAuthorizeDotNetCancelClicked = () => {\r\n this.props.cancelPayment();\r\n }\r\n\r\n handleAuthorizeDotNetPayClicked = (json) => {\r\n this.props.makePayment(json);\r\n }\r\n\r\n handleCancelClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.props.cancelPayment();\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.show && !this.state.previousShow) {\r\n this.setState( {previousShow: this.props.show} );\r\n this.submitAuthorizeDotNetForm();\r\n \r\n window.AuthorizeNetIFrame = {\r\n onReceiveCommunication: queryStr => {\r\n console.log('received communication: ', queryStr);\r\n \r\n const message = parse(queryStr);\r\n if (this.isValidMessage(message)) {\r\n \r\n switch (message.action) {\r\n case 'transactResponse':\r\n const json = JSON.parse(message.response);\r\n console.log('processing transactRepsponse: ', json);\r\n this.handleAuthorizeDotNetPayClicked(json);\r\n backendLogger.info(\"Recieved called back from iframecommunicator.html: \" + JSON.stringify(json));\r\n break;\r\n \r\n case 'resizeWindow':\r\n break;\r\n \r\n case 'cancel':\r\n this.handleAuthorizeDotNetCancelClicked();\r\n break;\r\n default:\r\n console.log('Unknown message action from authorize.net:[' + message.action + ']')\r\n };\r\n }\r\n },\r\n };\r\n } else if (!this.props.show && this.state.previousShow) {\r\n this.setState( {previousShow: this.props.show} );\r\n\r\n if (window.AuthorizeNetIFrame) {\r\n delete window.AuthorizeNetIFrame;\r\n }\r\n } else {\r\n // Show = previous show, no change\r\n }\r\n }\r\n\r\n submitAuthorizeDotNetForm() {\r\n if (this.authFormRef.current) {\r\n this.authFormRef.current.submit();\r\n }\r\n }\r\n\r\n isValidMessage(o) {\r\n return typeof o === 'object' && o !== null\r\n }\r\n\r\n componentDidMount() {\r\n const script = document.createElement('script');\r\n script.src = configData.AUTHORIZE_ACCEPTJS_URL;\r\n\r\n window.AuthorizeNetIFrameLogging = {\r\n log: logStr => {\r\n backendLogger.info(logStr);\r\n },\r\n };\r\n }\r\n\r\n render() {\r\n return (\r\n <Modal show={this.props.show} onHide={this.handleCancelClick} size='lg' aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton>\r\n <Modal.Title>\r\n Credit Card Payment For E File\r\n </Modal.Title>\r\n </Modal.Header>\r\n\r\n <Modal.Body style={{ background: '#408CC7' }}>\r\n <iframe title='Credit Card Payment for Efile' id=\"load_payment\" name=\"load_payment\" width=\"100%\" height=\"500px\" scrolling=\"yes\" />\r\n <form ref={this.authFormRef} id=\"send_hptoken\" action={configData.AUTHORIZE_PAYMENT_URL} method=\"post\" target=\"load_payment\">\r\n <input type=\"hidden\" name=\"token\" value={this.props.token} />\r\n </form>\r\n </Modal.Body>\r\n <Modal.Footer >\r\n <Container >\r\n <Row style={{ margin: 5 }} >\r\n <Col md='9' className='align-self-end' style={{ textAlign: 'right' }}>\r\n <Button variant=\"secondary\" onClick={this.handleCancelClick}>Cancel</Button>\r\n </Col>\r\n </Row>\r\n </Container>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}\r\n\r\nexport default CreditCardEfilePayment;","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { Container, Row, Col } from 'react-bootstrap'\r\nimport Alert from '../common/modal/Alert';\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport usStates from \"../../config/us_states.json\";\r\nimport translations from \"../../config/translation/efile_translations.json\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\nimport CommonTop from \"../top/CommonTop\";\r\nimport EfileConfirmation from \"./EfileConfirmation\";\r\nimport CreditCardEfilePayment from \"./CreditCardEfilePayment\";\r\nimport moment from 'moment';\r\nimport AjaxResponseHandler from \"../../utils/AjaxResponseHandler\"\r\nimport AjaxResult from \"../../utils/AjaxResult\";\r\nimport {backendLogger} from \"../../logger.js\"\r\nimport { validateUser } from \"../common/function/userValidation.js\";\r\n\r\nconst componentName = \"efile\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n countyStateCode: state.productPropertiesReducer.countyStateCode,\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH',\r\n countyConfigEfile: state.countyConfigEfileReducer\r\n };\r\n}\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n handleLockout: (lockout) => dispatch({ type: 'SET_LOCKOUT_IN_PLACE', lockout }),\r\n updateUsageBalance: (usageBalance) => dispatch({ type: 'UPDATE_CURRENT_USER_USAGE_BALANCE', usageBalance })\r\n }\r\n}\r\n\r\nconst PAYMENT_METHOD_CREDIT_CARD = 'CREDIT_CARD';\r\n\r\nclass Efile extends Component {\r\n\r\n state = {\r\n selectedFile: null,\r\n fileKey: moment(),\r\n efileType: 'LR',\r\n numberOfPages: 0,\r\n audtofillChecked: false,\r\n name: '',\r\n email: '',\r\n city: '',\r\n state: this.props.countyStateCode ? this.props.countyStateCode: 'MP',\r\n zip: '',\r\n address1: '',\r\n address2: '',\r\n submitMessage: '',\r\n uploadedFile: '',\r\n paymentMethod: '',\r\n transactionNumber: '',\r\n imageId: '',\r\n showConfirmationDialog: false,\r\n loadingStatus: '',\r\n firstPageCharge: '',\r\n additionalPagesCharge: '',\r\n surcharge: '',\r\n totalCharge: '',\r\n\r\n userName: '',\r\n userAddress: '',\r\n userCity: '',\r\n userState: '',\r\n userZip: '',\r\n userEmail: '',\r\n\r\n showAlert: false,\r\n\t\talertMessage: \"\",\r\n efileSubmitPending: false, \r\n\r\n acknowledgement: false,\r\n\r\n errors: {}\r\n }\r\n\r\n validate = () => {\r\n if (!this.state.selectedFile) {\r\n this.setState(\r\n { errors: { 'uploadedFile': translations[this.props.language].required } }\r\n );\r\n return false;\r\n }\r\n\r\n let errors = validateUser(this.state, false, false);\r\n\t\tif (errors && Object.keys(errors).length > 0) {\r\n\t\t\tthis.setState({ errors });\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n if (this.props.countyConfigEfile.acknowledgement === true && !this.state.acknowledgement) {\r\n this.setState(\r\n { errors: { 'acknowledgement': 'Please read and select the checkbox to acknowledge.'} }\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.validate()) {\r\n const formData = new FormData();\r\n formData.append(\"image\", this.state.selectedFile);\r\n\r\n const allowedFormats = new Set([\"application/pdf\", \"image/tiff\"]);\r\n\r\n if (!allowedFormats.has(this.state.selectedFile.type)) {\r\n this.setState(\r\n { errors: { 'uploadedFile': translations[this.props.language].invalid_file_format } }\r\n );\r\n return false;\r\n }\r\n\r\n if (this.state.selectedFile.size > 25000000) {\r\n this.setState(\r\n { errors: { 'uploadedFile': translations[this.props.language].exceeds_max_size } }\r\n );\r\n return false;\r\n }\r\n\r\n formData.append('json',\r\n new Blob([JSON.stringify(\r\n {\r\n efileType: this.state.efileType,\r\n numberOfPages: this.state.numberOfPages,\r\n name: this.state.name,\r\n email: this.state.email,\r\n city: this.state.city,\r\n state: this.state.state,\r\n zip: this.state.zip,\r\n address1: this.state.address1,\r\n address2: this.state.address2,\r\n\r\n transactionNumber: this.state.transactionNumber,\r\n imageId: this.state.imageId,\r\n\r\n firstPageCharge: this.state.firstPageCharge,\r\n additionalPagesCharge: this.state.additionalPagesCharge,\r\n surcharge: this.state.surcharge,\r\n totalCharge: this.state.totalCharge\r\n }\r\n )], { type: \"application/json\" }));\r\n\r\n if (this.showLoading() === true) {\r\n axios({ method: \"post\", url: configData.LANDSHARK_SERVER_URL + \"efile/image\", data: formData, headers: { \"Content-Type\": \"multipart/form-data\" }, withCredentials: true })\r\n .then((response) => {\r\n let content = response.data.content;\r\n this.setState(\r\n {\r\n numberOfPages: content.numberOfPages,\r\n firstPageCharge: content.firstPageCharge,\r\n additionalPagesCharge: content.additionalPagesCharge,\r\n paymentMethod: content.paymentMethod,\r\n surcharge: content.surcharge,\r\n totalCharge: content.totalCharge,\r\n imageId: content.imageId,\r\n loadingStatus: \"\"\r\n }, this.showConfirmation);\r\n }, (error) => {\r\n this.setState({ loadingStatus: \"\" }, function() {\r\n AjaxResponseHandler.handleError(error, this.showAlert, this.props.history);\r\n }); \r\n });\r\n }\r\n\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n\t\taxios.get(configData.LANDSHARK_SERVER_URL + \"currentUser/profile\", { withCredentials: true })\r\n\t\t.then(\r\n\t\t\t(response) => {\r\n\t\t\t\tconst content = response.data.content;\r\n\t\t\t\tthis.setState( {\r\n userName: content.firstName + ' ' + content.lastName,\r\n userAddress: content.address,\r\n userCity: content.city,\r\n userState: content.state,\r\n userZip: content.zip,\r\n userEmail: content.email\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t(error) => {\r\n\t\t\t console.log(error);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: \"\"\r\n })\r\n } else {\r\n this.setState({\r\n loadingStatus: \"\",\r\n submitMessage: message\r\n })\r\n }\r\n }\r\n\r\n handleClear = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.setState({\r\n fileKey: moment(),\r\n selectedFile: null,\r\n efileType : 'LR',\r\n numberOfPages: 0,\r\n audtofillChecked: false,\r\n name : '',\r\n email : '',\r\n address1 : '',\r\n address2 : '',\r\n city: '',\r\n state: 'MP',\r\n zip: '',\r\n uploadedFile: '',\r\n submitMessage: '',\r\n transactionNumber: '',\r\n imageId: '',\r\n firstPageCharge: '',\r\n additionalPagesCharge: '',\r\n surcharge: '',\r\n totalCharge: '',\r\n showConfirmationDialog: false,\r\n acknowledgement: false,\r\n \r\n errors: {}\r\n })\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value,\r\n submitMessage: '',\r\n errors: {}\r\n })\r\n }\r\n\r\n showConfirmation = () => {\r\n console.log(\"method: \" + this.state.paymentMethod);\r\n\r\n this.setState({\r\n showConfirmationDialog: true\r\n })\r\n }\r\n\t\r\n\thideConfirmation = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowConfirmationDialog: false\r\n\t\t})\r\n\t}\r\n\r\n hidePaymentPage = () => {\r\n this.setState({\r\n showCreditCardPaymentDialog: false\r\n })\r\n }\r\n\r\n handlePay = () => {\r\n if (this.state.paymentMethod != PAYMENT_METHOD_CREDIT_CARD) {\r\n this.efileSubmit(0);\r\n return;\r\n }\r\n\r\n let me = this;\r\n\r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/efileCapture\", \r\n {amount: this.state.totalCharge}, { withCredentials: true })\r\n .then((response) => {\r\n this.props.handleLockout(response.data.lockout);\r\n let result = new AjaxResult(response);\r\n\r\n this.setState({\r\n efileSubmitPending: false,\r\n showCreditCardPaymentDialog: true,\r\n showConfirmationDialog: false,\r\n authAndCaptureToken: result.content().tokenResults.token\r\n });\r\n }, (error) => {\r\n this.setState({ loadingStatus: \"\" }, function() {\r\n AjaxResponseHandler.handleError(error, this.showAlert, this.props.history);\r\n }); \r\n })\r\n })();\r\n }\r\n\r\n efileSubmit = (transactionId) => {\r\n if (this.showLoading() === true) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"efile/submission\",\r\n {\r\n efileType: this.state.efileType,\r\n numberOfPages: this.state.numberOfPages,\r\n name: this.state.name,\r\n email: this.state.email,\r\n city: this.state.city,\r\n state: this.state.state,\r\n zip: this.state.zip,\r\n address1: this.state.address1,\r\n address2: this.state.address2,\r\n\r\n paymentTransactionId: transactionId,\r\n transactionNumber: this.state.transactionNumber,\r\n imageId: this.state.imageId,\r\n\r\n firstPageCharge: this.state.firstPageCharge,\r\n additionalPagesCharge: this.state.additionalPagesCharge,\r\n surcharge: this.state.surcharge,\r\n totalCharge: this.state.totalCharge\r\n }, { withCredentials: true })\r\n .then((response) => {\r\n this.props.handleLockout(response.data.lockout);\r\n let content = response.data.content;\r\n this.handleClear();\r\n this.setState(\r\n {\r\n efileSubmitPending: false, \r\n loadingStatus: \"\",\r\n transactionNumber: content.transactionNumber\r\n }, this.showAlert(\"Transaction \" + content.transactionNumber + \" was successfully submitted. Check your email for a confirmation.\"));\r\n this.props.updateUsageBalance(content.usageBalance);\r\n }, (error) => {\r\n this.setState({ efileSubmitPending: false, loadingStatus: \"\" }, \r\n function() {\r\n AjaxResponseHandler.handleError(error, this.showAlert, null); \r\n })})\r\n } else {\r\n this.setState( {efileSubmitPending: false});\r\n }\r\n }\r\n\r\n handleComplete = (transactionResponse) => {\r\n let request = transactionResponse;\r\n console.log(request);\r\n\r\n backendLogger.info(\"Attempting to call creditcard/efileAuthAndCaptureResponse with transactionResponse: \" + JSON.stringify(request));\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/efileAuthAndCaptureResponse\", request, { withCredentials: true })\r\n .then((response) => {\r\n console.log('notify server of auth and capture response ', response);\r\n this.props.handleLockout(response.data.lockout);\r\n\r\n this.setState({\r\n showCreditCardPaymentDialog: false,\r\n paymentTransactionId: request.transId\r\n })\r\n }, (error) => {\r\n this.setState({ loadingStatus: \"\", showCreditCardPaymentDialog: false }, this.showAlert(error.message));\r\n })\r\n\r\n this.efileSubmit(transactionResponse.transId);\r\n }\r\n \r\n // On file select (from the pop up)\r\n onFileChange = event => {\r\n this.setState({ selectedFile: event.target.files[0], errors: {} });\r\n }; \r\n\r\n onAutoFillChange = event => {\r\n event.preventDefault();\r\n if (this.state.audtofillChecked && this.state.audtofillChecked === true) {\r\n this.setState({\r\n audtofillChecked: false,\r\n name : '',\r\n email : '',\r\n address1 : '',\r\n address2 : '',\r\n city: '',\r\n state: 'MP',\r\n zip: '',\r\n errors: {}\r\n })\r\n } else {\r\n this.setState({\r\n audtofillChecked: true,\r\n name : this.state.userName,\r\n email : this.state.userEmail,\r\n address1 : this.state.userAddress,\r\n address2 : '',\r\n city: this.state.userCity,\r\n state: this.state.userState,\r\n zip: this.state.userZip,\r\n errors: {}\r\n })\r\n }\r\n }; \r\n \r\n onAcknowledgementChange = event => {\r\n event.preventDefault();\r\n if (this.state.acknowledgement && this.state.acknowledgement === true) {\r\n this.setState({\r\n acknowledgement: false,\r\n errors: {}\r\n })\r\n } else {\r\n this.setState({\r\n acknowledgement: true,\r\n errors: {}\r\n })\r\n }\r\n }; \r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n let me = this;\r\n\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t}, function() {\r\n if (me.state.efileSubmitPending) {\r\n me.efileSubmit('');\r\n }\r\n })\r\n\t}\r\n\r\n render() {\r\n\r\n let formGroupRows = [ \r\n {\r\n formGroups: [\r\n { \r\n id: 'efileType', \r\n label: translations[this.props.language].document_type, \r\n fieldType: 'select', \r\n primaryCriteria: true, \r\n options: [{ code: 'LR', description: 'Land Record'}, { code: 'MAP', description: 'Map'}, { code: 'MAR', description: 'Marriage License'}, { code: 'UCC1', description: 'UCC-1'}, { code: 'UCC2', description: 'UCC-2'}],\r\n value: this.state.efileType\r\n }\r\n ]\r\n },\r\n {\r\n formGroups: [{ id: 'uploadedFile', fieldType: 'file', label: translations[this.props.language].document_upload, key: this.state.fileKey, onChange: this.onFileChange, error: this.state.errors['uploadedFile'] }]\r\n },\r\n {\r\n formGroups: [{ fieldType: 'blankrow' }]\r\n },\r\n {\r\n formGroups: [{ id: 'autofill', fieldType: 'checkbox', label: translations[this.props.language].use_profile, onChange: this.onAutoFillChange, checked: this.state.audtofillChecked, error: this.state.errors['audtofill'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'name', label: translations[this.props.language].name, fieldType: 'text', value: this.state.name, required: true, error: this.state.errors['name'] },\r\n { id: 'email', label: translations[this.props.language].email, fieldType: 'email', value: this.state.email, required: true, error: this.state.errors['email'] } ]\r\n },\r\n {\r\n formGroups: [{ id: 'address1', label: translations[this.props.language].address1, fieldType: 'text', required: true, value: this.state.address1, error: this.state.errors['address1'] }, \r\n { id: 'address2', label: translations[this.props.language].address2, fieldType: 'text', placeholder: '(Optional)', value: this.state.address2, error: this.state.errors['address2'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'city', label: translations[this.props.language].city, fieldType: 'text', value: this.state.city, required: true, error: this.state.errors['city'] }, \r\n { id: 'state', label: translations[this.props.language].state, fieldType: 'select', value: this.state.state, options: usStates, required: true }, \r\n { id: 'zip', label: translations[this.props.language].zip, fieldType: 'zip', style: {maxWidth: 80}, required: true, maxLength: 5, value: this.state.zip, error: this.state.errors['zip'] }]\r\n }\r\n ]\r\n\r\n if (this.props.countyConfigEfile.acknowledgement === true) {\r\n formGroupRows.push({\r\n formGroups: [{ fieldType: 'blankrow' }] \r\n });\r\n // When Turnkey has the new translation file, we will need to check for the Languages Config setting. If Language Config is true, use the translation file for the acknowledgement statement.\r\n formGroupRows.push({\r\n formGroups: [{ id: 'acknowledgement', fieldType: 'checkbox', label: this.props.countyConfigEfile.acknowledgementStatement, onChange: this.onAcknowledgementChange, checked: this.state.acknowledgement, error: this.state.errors['acknowledgement'] }]\r\n });\r\n }\r\n \r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: translations[this.props.language].e_file,\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n formOnly: true,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n submitMessage: this.state.submitMessage,\r\n formGroupRows: formGroupRows\r\n }\r\n\r\n return <>\r\n <CommonTop history={this.props.history} />\r\n <div style={{ marginTop: 0 }}>\r\n\t\t\t\t\t<Container>\r\n\t\t\t\t\t\t<Row >\r\n\t\t\t\t\t\t\t<Col style={{ paddingLeft: 0, paddingRight: 0, paddingBottom: 0, marginTop: 0 }}>\r\n\t\t\t\t\t\t\t\t <FormTemplate {...formProps} />\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t</Container>\r\n\t\t\t\t</div>\r\n <EfileConfirmation \r\n show={this.state.showConfirmationDialog} \r\n cancelConfirmation={this.hideConfirmation} proceedConfirmation={this.handlePay} \r\n firstPageCharge={this.state.firstPageCharge} \r\n additionalPagesCharge={this.state.additionalPagesCharge} \r\n paymentMethod={this.state.paymentMethod}\r\n surcharge={this.state.surcharge} \r\n totalCharge={this.state.totalCharge} \r\n numberOfPages={this.state.numberOfPages} />\r\n <CreditCardEfilePayment\r\n show={this.state.showCreditCardPaymentDialog} token={this.state.authAndCaptureToken}\r\n cancelPayment={this.hidePaymentPage} makePayment={this.handleComplete} />\r\n <Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n </>\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(Efile);\r\n","import axios from \"axios\";\r\nimport { saveAs } from 'file-saver';\r\nimport configData from \"../../config/config.json\";\r\nimport { handleBlobError, handleCallBack } from \"./commonStuff\";\r\n\r\nexport const ReportStatementKey = \"statementReport\";\r\nexport const ReportAccountAuditKey = \"auditAccountsReport\";\r\nexport const ReportUserAuditKey = \"auditUsersReport\";\r\nexport const ReportAccountTypeKey = \"accountTypeReport\";\r\n\r\nexport const setSelectedReportType = (selectedReportType) => {\r\n return {\r\n type: 'SET_SELECTED_REPORT_TYPE',\r\n selectedReportType\r\n }\r\n}\r\n\r\nconst handleReportResults = (dispatch, reportCriteria, reportType) => {\r\n dispatch({ type: 'UPDATE_REPORT_CRITERIA', reportCriteria, reportType }); \r\n};\r\n\r\n// Statement Report - PDF\r\nexport const reportStatement = (reportCriteria, history, callback) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"report/statementReport\", reportCriteria, { responseType: 'blob', withCredentials: true })\r\n .then((response) => {\r\n handleReportResults(dispatch, reportCriteria, ReportStatementKey);\r\n let blob = new Blob([response.data], { type: 'application/pdf' });\r\n saveAs(blob, 'StatementReport.pdf');\r\n handleCallBack(callback);\r\n }, (error) => {\r\n handleBlobError(error, history, callback);\r\n });\r\n};\r\n\r\n// Statement Report - Excel\r\nexport const exportStatement = (reportCriteria, history, callback) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"report/statementExport\", reportCriteria, { responseType: 'arraybuffer', withCredentials: true })\r\n .then((response) => {\r\n handleReportResults(dispatch, reportCriteria, ReportStatementKey);\r\n let blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n saveAs(blob, 'StatementReportExport.xlsx');\r\n handleCallBack(callback);\r\n }, (error) => {\r\n handleBlobError(error, history, callback);\r\n });\r\n};\r\n\r\n// User Report - PDF\r\nexport const reportUser = (reportCriteria, history, callback) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"report/userReport\", reportCriteria, { responseType: 'blob', withCredentials: true })\r\n .then((response) => {\r\n handleReportResults(dispatch, reportCriteria, ReportUserAuditKey);\r\n let blob = new Blob([response.data], { type: 'application/pdf' });\r\n saveAs(blob, 'UserReport.pdf');\r\n handleCallBack(callback);\r\n }, (error) => {\r\n handleBlobError(error, history, callback);\r\n });\r\n};\r\n\r\n// User Report - Excel\r\nexport const exportUser = (reportCriteria, history, callback) => async dispatch => {\r\n dispatch({ type: 'LOADING', data: true }); \r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"report/userExport\", reportCriteria, { responseType: 'arraybuffer', withCredentials: true })\r\n .then((response) => {\r\n handleReportResults(dispatch, reportCriteria, ReportUserAuditKey);\r\n let blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n saveAs(blob, 'UserReportExport.xlsx');\r\n handleCallBack(callback); \r\n }, (error) => {\r\n handleBlobError(error, history, callback);\r\n });\r\n};\r\n\r\n// Account Report - PDF\r\nexport const reportAccount = (reportCriteria, history, callback) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"report/accountReport\", reportCriteria, { responseType: 'blob', withCredentials: true })\r\n .then((response) => {\r\n handleReportResults(dispatch, reportCriteria, ReportAccountAuditKey);\r\n let blob = new Blob([response.data], { type: 'application/pdf' });\r\n saveAs(blob, 'AccountReport.pdf');\r\n handleCallBack(callback);\r\n }, (error) => {\r\n handleBlobError(error, history, callback);\r\n });\r\n};\r\n\r\n// Account Report - Excel\r\nexport const exportAccount = (reportCriteria, history, callback) => async dispatch => {\r\n \r\n dispatch({ type: 'LOADING', data: true }); \r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"report/accountExport\", reportCriteria, { responseType: 'arraybuffer', withCredentials: true })\r\n .then((response) => {\r\n handleReportResults(dispatch, reportCriteria, ReportAccountAuditKey);\r\n let blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n saveAs(blob, 'AccountReport.xlsx');\r\n handleCallBack(callback);\r\n }, (error) => {\r\n handleBlobError(error, history, callback);\r\n });\r\n};\r\n\r\n// Account Type Report - PDF\r\nexport const reportAccountType = (reportCriteria, history, callback) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"report/accountTypeReport\", reportCriteria, { responseType: 'blob', withCredentials: true })\r\n .then((response) => {\r\n handleReportResults(dispatch, reportCriteria, ReportAccountTypeKey);\r\n let blob = new Blob([response.data], { type: 'application/pdf' });\r\n saveAs(blob, 'AccountTypeReport.pdf');\r\n handleCallBack(callback);\r\n }, (error) => {\r\n handleBlobError(error, history, callback);\r\n });\r\n};","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport moment from 'moment';\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { reportUser, exportUser, setSelectedReportType, ReportUserAuditKey } from \"../../redux/actions/reportActions\";\r\nimport { amPmOptions, hourOptions, minuteOptions, validateDateTimes, validateYearRangeLimit } from \"../../utils/DateValidation\";\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\nimport AccountSelectionList from \"../common/selection/AccountSelectionList\";\r\nimport UserSelectionList from \"../common/selection/UserSelectionList\";\r\n\r\nconst componentName = ReportUserAuditKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedReportType: () => dispatch(setSelectedReportType(componentName)),\r\n reportUser: (searchCriteria, history, callback) => dispatch(reportUser(searchCriteria, history, callback)),\r\n exportUser: (searchCriteria, history, callback) => dispatch(exportUser(searchCriteria, history, callback)),\r\n resetReportCriteria: () => dispatch({ type: 'RESET_REPORT_CRITERIA', componentName })\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n let reportByCriteria = state.reportCriteriaReducer[componentName];\r\n\r\n let fromDate = reportByCriteria['fromDate'] ? reportByCriteria['fromDate'] : moment().format('L');\r\n let toDate = reportByCriteria['toDate'] ? reportByCriteria['toDate'] : moment().format('L');\r\n let fromHour = reportByCriteria['fromHour'] ? reportByCriteria['fromHour'] : '12';\r\n let fromMinute = reportByCriteria['fromMinute'] ? reportByCriteria['fromMinute'] : '0';\r\n let fromAmPm = reportByCriteria['fromAmPm'] ? reportByCriteria['fromAmPm'] : 'am';\r\n let toHour = reportByCriteria['toHour'] ? reportByCriteria['toHour'] : '11';\r\n let toMinute = reportByCriteria['toMinute'] ? reportByCriteria['toMinute'] : '59';\r\n let toAmPm = reportByCriteria['toAmPm'] ? reportByCriteria['toAmPm'] : 'pm';\r\n\r\n let accountName = reportByCriteria['accountName'] ? reportByCriteria['accountName'] : '';\r\n let username = reportByCriteria['username'] ? reportByCriteria['username'] : '';\r\n let statementNumber = reportByCriteria['statementNumber'] ? reportByCriteria['statementNumber'] : '';\r\n\r\n let transactionType = reportByCriteria['transactionType'] ? reportByCriteria['transactionType'] : 'all';\r\n let logInformation = reportByCriteria['logInformation'] ? reportByCriteria['logInformation'] : 'all';\r\n\r\n let dataSource = reportByCriteria['dataSource'] ? reportByCriteria['dataSource'] : 'FIVE';\r\n let summaryMode = reportByCriteria['summaryMode'] ? reportByCriteria['summaryMode'] : false;\r\n\r\n return {\r\n fromDate,\r\n fromHour,\r\n fromMinute,\r\n fromAmPm,\r\n toDate,\r\n toHour,\r\n toMinute,\r\n toAmPm,\r\n accountName,\r\n username,\r\n statementNumber,\r\n dataSource,\r\n summaryMode,\r\n \r\n logTypes: state.auditLogTypesReducer.codeDescriptionResultList,\r\n logTypesAll: state.auditLogTypesAllReducer.codeDescriptionResultList,\r\n transactionType,\r\n transactionTypes: state.auditTransactionTypesReducer.codeDescriptionResultList,\r\n transactionTypesAll: state.auditTransactionTypesAllReducer.codeDescriptionResultList,\r\n dataSourceTypes: state.dataSourceTypesReducer.codeDescriptionResultList,\r\n logInformation,\r\n role: state.currentUserReducer.role\r\n };\r\n}\r\n\r\nclass UserReport extends Component {\r\n\r\n state = {\r\n fromDate: this.props.fromDate,\r\n toDate: this.props.toDate,\r\n fromHour: this.props.fromHour,\r\n fromMinute: this.props.fromMinute,\r\n fromAmPm: this.props.fromAmPm,\r\n toHour: this.props.toHour,\r\n toMinute: this.props.toMinute,\r\n toAmPm: this.props.toAmPm,\r\n\r\n accountName: this.props.accountName,\r\n username: this.props.username,\r\n statementNumber: this.props.statementNumber,\r\n dataSource: this.props.dataSource,\r\n\r\n summaryMode: this.props.summaryMode,\r\n\r\n transactionType: this.props.transactionType,\r\n logInformation: this.props.logInformation,\r\n\r\n showAccountList: false,\r\n showUserList: false,\r\n\r\n loadingStatus: \"\",\r\n errors: {}\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n const { loadingStatus, errors, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.reportUser(request, this.props.history, this.hideLoading);\r\n }\r\n }\r\n }\r\n\r\n handleExport = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.props.exportUser(this.state, this.props.history, this.hideLoading);\r\n }\r\n }\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetReportCriteria();\r\n this.setState({\r\n fromDate: moment().format('L'),\r\n toDate: moment().format('L'),\r\n fromHour: '12',\r\n fromMinute: '0',\r\n fromAmPm: 'am',\r\n toHour: '11',\r\n toMinute: '59',\r\n toAmPm: 'pm',\r\n\r\n accountName: '',\r\n username: '',\r\n statementNumber: '',\r\n dataSource: 'FIVE',\r\n\r\n summaryMode: false,\r\n\r\n transactionType: 'all',\r\n logInformation: 'all',\r\n\r\n showAccountList: false,\r\n showUserList: false,\r\n\r\n loadingStatus: \"\",\r\n errors: {}\r\n })\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n if (!this.state.fromDate) {\r\n errors['fromDate'] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n let formIsValid = validateDateTimes(errors, this.state.fromDate, this.state.fromHour, this.state.fromMinute, this.state.fromAmPm, 'fromDate', this.state.toDate, this.state.toHour, this.state.toMinute, this.state.toAmPm, 'toDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n \r\n formIsValid = validateYearRangeLimit(errors, this.state.fromDate, 'fromDate', this.state.toDate, 'toDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleChange = (event) => {\r\n event.preventDefault();\r\n this.setState({\r\n [event.target.id]: event.target.value\r\n })\r\n }\r\n\r\n onSummarayChange = event => {\r\n event.preventDefault();\r\n if (this.state.summaryMode && this.state.summaryMode === true) {\r\n this.setState({\r\n summaryMode: false,\r\n errors: {}\r\n })\r\n } else {\r\n this.setState({\r\n summaryMode: true,\r\n errors: {}\r\n })\r\n }\r\n }; \r\n\r\n handleDatePickerChangeFromDate = (date) => {\r\n this.setState({\r\n fromDate : moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToDate = (date) => {\r\n this.setState({\r\n toDate : moment(date).format('L')\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n }\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n \r\n handleAccountLookup = () => {\r\n this.setState( {\r\n showAccountList : true\r\n });\r\n }\r\n\r\n handleCloseAccountLookup = (selectedId, selectedName) => {\r\n this.setState({\r\n showAccountList: false,\r\n accountId: selectedId,\r\n accountName: selectedName\r\n })\r\n }\r\n \r\n handleUserLookup = () => {\r\n this.setState( {\r\n showUserList : true\r\n });\r\n }\r\n\r\n handleCloseUserLookup = (selectedId, selectedName) => {\r\n this.setState({\r\n showUserList: false,\r\n userId: selectedId,\r\n username: selectedName\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedReportType();\r\n }\r\n\r\n render() {\r\n\r\n let logTypes = this.props.logTypes;\r\n let transactionTypes = this.props.transactionTypes;\r\n if (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') {\r\n logTypes = this.props.logTypesAll;\r\n transactionTypes = this.props.transactionTypesAll;\r\n }\r\n \r\n let formGroupRows = [\r\n {\r\n formGroups: [{ id: 'fromDate', label: 'From Date', fieldType: 'date', value: this.state.fromDate, handleDatePickerChange: this.handleDatePickerChangeFromDate, error: this.state.errors['fromDate'] },\r\n { id: 'fromHour', label: '', fieldType: 'select', options: hourOptions, value: this.state.fromHour },\r\n { id: 'fromMinute', label: '', fieldType: 'minute', options: minuteOptions, value: this.state.fromMinute },\r\n { id: 'fromAmPm', label: '', fieldType: 'select', options: amPmOptions, value: this.state.fromAmPm }]\r\n },\r\n {\r\n formGroups: [{ id: 'toDate', label: 'To Date', fieldType: 'date', value: this.state.toDate, handleDatePickerChange: this.handleDatePickerChangeToDate, error: this.state.errors['toDate'] },\r\n { id: 'toHour', label: '', fieldType: 'select', options: hourOptions, value: this.state.toHour },\r\n { id: 'toMinute', label: '', fieldType: 'minute', options: minuteOptions, value: this.state.toMinute },\r\n { id: 'toAmPm', label: '', fieldType: 'select', options: amPmOptions, value: this.state.toAmPm }]\r\n }]\r\n\r\n if (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'accountName', label: 'Account Name', fieldType: 'text', value: this.state.accountName },\r\n { id: 'accountLookupButton', fieldType: 'lookup', onClick: this.handleAccountLookup }]\r\n });\r\n }\r\n \r\n formGroupRows.push({\r\n formGroups: [{ id: 'username', label: 'Username', fieldType: 'text', value: this.state.username },\r\n { id: 'userLookupButton', fieldType: 'lookup', onClick: this.handleUserLookup }]\r\n });\r\n formGroupRows.push({\r\n formGroups: [{ id: 'statementNumber', label: 'Statement Number', fieldType: 'text', value: this.state.statementNumber }]\r\n });\r\n formGroupRows.push({\r\n formGroups: [{ id: 'logInformation', label: 'Log Type', fieldType: 'select', options: logTypes, value: this.state.logInformation }]\r\n });\r\n formGroupRows.push({\r\n formGroups: [{ id: 'transactionType', label: 'Transaction Type', fieldType: 'select', options: transactionTypes, value: this.state.transactionType }]\r\n });\r\n\r\n if (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'dataSource', label: 'Data Source', fieldType: 'select', options: this.props.dataSourceTypes, value: this.state.dataSource }]\r\n });\r\n }\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'summaryMode', label: 'Run in Summary Mode', fieldType: 'checkbox', onChange: this.onSummarayChange, checked: this.state.summaryMode }]\r\n });\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Audit Report - User\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onSeconaryClick: this.handleExport,\r\n onClear: this.handleClear,\r\n primaryButtonLabel: \"PDF\",\r\n secondaryButtonLabel: \"Excel\",\r\n clearButtonLabel: \"Clear\",\r\n secondaryButtonBlue: true,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n formGroupRows: formGroupRows\r\n }\r\n\r\n return <>\r\n <FormTemplate {...formProps} />\r\n <AccountSelectionList showModal={this.state.showAccountList} codeDescriptionResults={this.props.accounts} onHide={(selectedId, selectedName) => this.handleCloseAccountLookup(selectedId, selectedName)} />\r\n <UserSelectionList showModal={this.state.showUserList} codeDescriptionResults={this.props.users} onHide={(selectedId, selectedName) => this.handleCloseUserLookup(selectedId, selectedName)} /> \r\n </>\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(UserReport);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport moment from 'moment';\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { reportAccount, exportAccount, setSelectedReportType, ReportAccountAuditKey } from \"../../redux/actions/reportActions\";\r\nimport { amPmOptions, hourOptions, minuteOptions, validateDateTimes, validateYearRangeLimit } from \"../../utils/DateValidation\";\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\nimport AccountSelectionList from \"../common/selection/AccountSelectionList\";\r\n\r\nconst componentName = ReportAccountAuditKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedReportType: () => dispatch(setSelectedReportType(componentName)),\r\n reportAccount: (searchCriteria, history, callback) => dispatch(reportAccount(searchCriteria, history, callback)),\r\n exportAccount: (searchCriteria, history, callback) => dispatch(exportAccount(searchCriteria, history, callback)),\r\n resetReportCriteria: () => dispatch({ type: 'RESET_REPORT_CRITERIA', componentName })\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n let reportByCriteria = state.reportCriteriaReducer[componentName];\r\n \r\n let fromDate = reportByCriteria['fromDate'] ? reportByCriteria['fromDate'] : moment().format('L');\r\n let toDate = reportByCriteria['toDate'] ? reportByCriteria['toDate'] : moment().format('L');\r\n let fromHour = reportByCriteria['fromHour'] ? reportByCriteria['fromHour'] : '12';\r\n let fromMinute = reportByCriteria['fromMinute'] ? reportByCriteria['fromMinute'] : '0';\r\n let fromAmPm = reportByCriteria['fromAmPm'] ? reportByCriteria['fromAmPm'] : 'am';\r\n let toHour = reportByCriteria['toHour'] ? reportByCriteria['toHour'] : '11';\r\n let toMinute = reportByCriteria['toMinute'] ? reportByCriteria['toMinute'] : '59';\r\n let toAmPm = reportByCriteria['toAmPm'] ? reportByCriteria['toAmPm'] : 'pm';\r\n let orderBy = reportByCriteria['orderBy'] ? reportByCriteria['orderBy'] : 'username';\r\n let dataSource = reportByCriteria['dataSource'] ? reportByCriteria['dataSource'] : 'FIVE';\r\n let summaryMode = reportByCriteria['summaryMode'] ? reportByCriteria['summaryMode'] : false;\r\n\r\n let accountName = reportByCriteria['accountName'] ? reportByCriteria['accountName'] : '';\r\n let statementNumber = reportByCriteria['statementNumber'] ? reportByCriteria['statementNumber'] : '';\r\n\r\n let transactionType = reportByCriteria['transactionType'] ? reportByCriteria['transactionType'] : 'all';\r\n let logInformation = reportByCriteria['logInformation'] ? reportByCriteria['logInformation'] : 'all';\r\n\r\n return {\r\n fromDate,\r\n fromHour,\r\n fromMinute,\r\n fromAmPm,\r\n toDate,\r\n toHour,\r\n toMinute,\r\n toAmPm,\r\n\r\n accountName,\r\n statementNumber,\r\n logTypes: state.auditLogTypesReducer.codeDescriptionResultList,\r\n logTypesAll: state.auditLogTypesAllReducer.codeDescriptionResultList,\r\n transactionTypes: state.auditTransactionTypesReducer.codeDescriptionResultList,\r\n transactionTypesAll: state.auditTransactionTypesAllReducer.codeDescriptionResultList,\r\n dataSourceTypes: state.dataSourceTypesReducer.codeDescriptionResultList,\r\n transactionType,\r\n logInformation,\r\n\r\n orderBy,\r\n dataSource,\r\n summaryMode,\r\n \r\n role: state.currentUserReducer.role\r\n };\r\n}\r\n\r\nclass AccountReport extends Component {\r\n\r\n state = {\r\n fromDate: this.props.fromDate,\r\n toDate: this.props.toDate,\r\n fromHour: this.props.fromHour,\r\n fromMinute: this.props.fromMinute,\r\n fromAmPm: this.props.fromAmPm,\r\n toHour: this.props.toHour,\r\n toMinute: this.props.toMinute,\r\n toAmPm: this.props.toAmPm,\r\n\r\n accountName: this.props.accountName,\r\n statementNumber: this.props.statementNumber,\r\n transactionType: this.props.transactionType,\r\n logInformation: this.props.logInformation,\r\n \r\n orderBy: this.props.orderBy,\r\n\r\n dataSource: this.props.dataSource,\r\n summaryMode: this.props.summaryMode,\r\n\r\n showAccountList: false,\r\n \r\n loadingStatus: \"\",\r\n errors: {}\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n const { loadingStatus, errors, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.reportAccount(request, this.props.history, this.hideLoading );\r\n }\r\n }\r\n }\r\n\r\n handleExport = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.props.exportAccount(this.state, this.props.history, this.hideLoading );\r\n }\r\n }\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetReportCriteria();\r\n this.setState({\r\n fromDate: moment().format('L'),\r\n toDate: moment().format('L'),\r\n fromHour: '12',\r\n fromMinute: '0',\r\n fromAmPm: 'am',\r\n toHour: '11',\r\n toMinute: '59',\r\n toAmPm: 'pm',\r\n\r\n accountName: '',\r\n statementNumber: '',\r\n transactionType: 'all',\r\n logInformation: 'all',\r\n \r\n orderBy: 'username',\r\n\r\n dataSource: 'FIVE',\r\n summaryMode: false,\r\n\r\n showAccountList: false,\r\n \r\n errors: {}\r\n })\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n if (!this.state.fromDate) {\r\n errors['fromDate'] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n let formIsValid = validateDateTimes(errors, this.state.fromDate, this.state.fromHour, this.state.fromMinute, this.state.fromAmPm, 'fromDate', this.state.toDate, this.state.toHour, this.state.toMinute, this.state.toAmPm, 'toDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n \r\n formIsValid = validateYearRangeLimit(errors, this.state.fromDate, 'fromDate', this.state.toDate, 'toDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleChange = (event) => {\r\n event.preventDefault();\r\n this.setState({\r\n [event.target.id]: event.target.value\r\n })\r\n }\r\n\r\n onSummarayChange = event => {\r\n event.preventDefault();\r\n if (this.state.summaryMode && this.state.summaryMode === true) {\r\n this.setState({\r\n summaryMode: false,\r\n errors: {}\r\n })\r\n } else {\r\n this.setState({\r\n summaryMode: true,\r\n errors: {}\r\n })\r\n }\r\n }; \r\n\r\n handleDatePickerChangeFromDate = (date) => {\r\n this.setState({\r\n fromDate : moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToDate = (date) => {\r\n this.setState({\r\n toDate : moment(date).format('L')\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n }\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n handleAccountLookup = () => {\r\n this.setState( {\r\n showAccountList : true\r\n });\r\n }\r\n\r\n handleCloseAccountLookup = (selectedId, selectedName) => {\r\n this.setState({\r\n showAccountList: false,\r\n accountId: selectedId,\r\n accountName: selectedName\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedReportType();\r\n }\r\n\r\n render() {\r\n\r\n let logTypes = this.props.logTypes;\r\n let transactionTypes = this.props.transactionTypes;\r\n if (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') {\r\n logTypes = this.props.logTypesAll;\r\n transactionTypes = this.props.transactionTypesAll;\r\n }\r\n\r\n let formGroupRows = [\r\n {\r\n formGroups: [{ id: 'fromDate', label: 'From Date', fieldType: 'date', value: this.state.fromDate, handleDatePickerChange: this.handleDatePickerChangeFromDate, error: this.state.errors['fromDate'] },\r\n { id: 'fromHour', label: '', fieldType: 'select', options: hourOptions, value: this.state.fromHour },\r\n { id: 'fromMinute', label: '',fieldType: 'minute', options: minuteOptions, value: this.state.fromMinute },\r\n { id: 'fromAmPm', label: '', fieldType: 'select', options: amPmOptions, value: this.state.fromAmPm }]\r\n },\r\n {\r\n formGroups: [{ id: 'toDate', label: 'To Date', fieldType: 'date', value: this.state.toDate, handleDatePickerChange: this.handleDatePickerChangeToDate, error: this.state.errors['toDate'] },\r\n { id: 'toHour', label: '', fieldType: 'select', options: hourOptions, value: this.state.toHour },\r\n { id: 'toMinute', label: '', fieldType: 'minute', options: minuteOptions, value: this.state.toMinute },\r\n { id: 'toAmPm', label: '', fieldType: 'select', options: amPmOptions, value: this.state.toAmPm }]\r\n }]\r\n\r\n if (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'accountName', label: 'Account Name', fieldType: 'text', value: this.state.accountName },\r\n { id: 'accountLookupButton', fieldType: 'lookup', onClick: this.handleAccountLookup }]\r\n });\r\n }\r\n \r\n formGroupRows.push({\r\n formGroups: [{ id: 'statementNumber', label: 'Statement Number', fieldType: 'text', value: this.state.statementNumber }]\r\n });\r\n formGroupRows.push({\r\n formGroups: [{ id: 'logInformation', label: 'Log Type', fieldType: 'select', options: logTypes, value: this.state.logInformation }]\r\n });\r\n formGroupRows.push({\r\n formGroups: [{ id: 'transactionType', label: 'Transaction Type', fieldType: 'select', options: transactionTypes, value: this.state.transactionType }]\r\n });\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'orderBy', label: 'Order By', fieldType: 'select', options: [{ code :'timestamp', description: 'Date and Time'}, {code: 'username', description: 'Username'}], value: this.state.orderBy }]\r\n });\r\n\r\n if (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'dataSource', label: 'Data Source', fieldType: 'select', options: this.props.dataSourceTypes, value: this.state.dataSource }]\r\n });\r\n }\r\n\r\n formGroupRows.push({\r\n formGroups: [{ id: 'summaryMode', label: 'Run in Summary Mode', fieldType: 'checkbox', onChange: this.onSummarayChange, checked: this.state.summaryMode }]\r\n });\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Audit Report - Account\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onSeconaryClick: this.handleExport,\r\n onClear: this.handleClear,\r\n primaryButtonLabel: \"PDF\",\r\n secondaryButtonLabel: \"Excel\",\r\n clearButtonLabel: \"Clear\",\r\n secondaryButtonBlue: true,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n formGroupRows: formGroupRows\r\n }\r\n\r\n return <>\r\n <FormTemplate {...formProps} />\r\n <AccountSelectionList showModal={this.state.showAccountList} codeDescriptionResults={this.props.accounts} onHide={(selectedId, selectedName) => this.handleCloseAccountLookup(selectedId, selectedName)} />\r\n </>\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(AccountReport);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport moment from 'moment';\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport AccountSelectionList from \"../common/selection/AccountSelectionList\";\r\nimport UserSelectionList from \"../common/selection/UserSelectionList\";\r\nimport { reportStatement, exportStatement, setSelectedReportType, ReportStatementKey } from \"../../redux/actions/reportActions\";\r\nimport { amPmOptions, hourOptions, minuteOptions, validateDateTimes, validateYearRangeLimit } from \"../../utils/DateValidation\";\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = ReportStatementKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedReportType: () => dispatch(setSelectedReportType(componentName)),\r\n reportStatement: (searchCriteria, history, callback) => dispatch(reportStatement(searchCriteria, history, callback)),\r\n exportStatement: (searchCriteria, history, callback) => dispatch(exportStatement(searchCriteria, history, callback)),\r\n resetReportCriteria: () => dispatch({ type: 'RESET_REPORT_CRITERIA', componentName })\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n let reportByCriteria = state.reportCriteriaReducer[componentName];\r\n\r\n let accountName = reportByCriteria['accountName'] ? reportByCriteria['accountName'] : \"\";\r\n let username = reportByCriteria['username'] ? reportByCriteria['username'] : \"\";\r\n let statementNumber = reportByCriteria['statementNumber'] ? reportByCriteria['statementNumber'] : \"\";\r\n let dataSource = reportByCriteria['dataSource'] ? reportByCriteria['dataSource'] : \"FIVE\";\r\n\r\n let fromDate = reportByCriteria['fromDate'] ? reportByCriteria['fromDate'] : moment().format('L');\r\n let toDate = reportByCriteria['toDate'] ? reportByCriteria['toDate'] : moment().format('L');\r\n let fromHour = reportByCriteria['fromHour'] ? reportByCriteria['fromHour'] : '12';\r\n let fromMinute = reportByCriteria['fromMinute'] ? reportByCriteria['fromMinute'] : '0';\r\n let fromAmPm = reportByCriteria['fromAmPm'] ? reportByCriteria['fromAmPm'] : 'am';\r\n let toHour = reportByCriteria['toHour'] ? reportByCriteria['toHour'] : '11';\r\n let toMinute = reportByCriteria['toMinute'] ? reportByCriteria['toMinute'] : '59';\r\n let toAmPm = reportByCriteria['toAmPm'] ? reportByCriteria['toAmPm'] : 'pm';\r\n\r\n return {\r\n fromDate,\r\n fromHour,\r\n fromMinute,\r\n fromAmPm,\r\n toDate,\r\n toHour,\r\n toMinute,\r\n toAmPm,\r\n\r\n accountName,\r\n username,\r\n statementNumber,\r\n dataSource,\r\n\r\n role: state.currentUserReducer.role,\r\n dataSourceTypes: state.dataSourceTypesReducer.codeDescriptionResultList,\r\n accounts: state.currentUserReducer.allowableAccounts\r\n };\r\n}\r\n\r\nclass StatementReport extends Component {\r\n\r\n state = {\r\n fromDate: this.props.fromDate,\r\n toDate: this.props.toDate,\r\n fromHour: this.props.fromHour,\r\n fromMinute: this.props.fromMinute,\r\n fromAmPm: this.props.fromAmPm,\r\n toHour: this.props.toHour,\r\n toMinute: this.props.toMinute,\r\n toAmPm: this.props.toAmPm,\r\n\r\n accountName: this.props.accountName,\r\n username: this.props.username,\r\n statementNumber: this.props.statementNumber,\r\n dataSource: this.props.dataSource,\r\n\r\n showAccountList: false,\r\n showUserList: false,\r\n\r\n loadingStatus: \"\",\r\n errors: {}\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n const { loadingStatus, errors, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.reportStatement(request, this.props.history, this.hideLoading);\r\n }\r\n }\r\n }\r\n\r\n handleExport = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n this.props.exportStatement(this.state, this.props.history, this.hideLoading);\r\n }\r\n }\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetReportCriteria();\r\n this.setState({\r\n fromDate: moment().format('L'),\r\n toDate: moment().format('L'),\r\n fromHour: '12',\r\n fromMinute: '0',\r\n fromAmPm: 'am',\r\n toHour: '11',\r\n toMinute: '59',\r\n toAmPm: 'pm',\r\n \r\n accountName: '',\r\n username: '',\r\n statementNumber: '',\r\n dataSource: 'FIVE',\r\n \r\n showAccountList: false,\r\n showUserList: false,\r\n \r\n loadingStatus: \"\",\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n }\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n handleAccountLookup = () => {\r\n this.setState( {\r\n showAccountList : true\r\n });\r\n }\r\n\r\n handleCloseAccountLookup = (selectedId, selectedName) => {\r\n this.setState({\r\n showAccountList: false,\r\n accountId: selectedId,\r\n accountName: selectedName\r\n })\r\n }\r\n \r\n handleUserLookup = () => {\r\n this.setState( {\r\n showUserList : true\r\n });\r\n }\r\n\r\n handleCloseUserLookup = (selectedId, selectedName) => {\r\n this.setState({\r\n showUserList: false,\r\n userId: selectedId,\r\n username: selectedName\r\n })\r\n }\r\n\r\n handleValidation() {\r\n let errors = {};\r\n if (!this.state.fromDate) {\r\n errors['fromDate'] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n let formIsValid = validateDateTimes(errors, this.state.fromDate, this.state.fromHour, this.state.fromMinute, this.state.fromAmPm, 'fromDate', this.state.toDate, this.state.toHour, this.state.toMinute, this.state.toAmPm, 'toDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n \r\n formIsValid = validateYearRangeLimit(errors, this.state.fromDate, 'fromDate', this.state.toDate, 'toDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleChange = (event) => {\r\n event.preventDefault();\r\n this.setState({\r\n [event.target.id]: event.target.value\r\n })\r\n }\r\n\r\n handleDatePickerChangeFromDate = (date) => {\r\n this.setState({\r\n fromDate : moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToDate = (date) => {\r\n this.setState({\r\n toDate : moment(date).format('L')\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedReportType();\r\n }\r\n\r\n render() {\r\n\r\n let formGroupRows = [ {\r\n formGroups: [{ id: 'fromDate', label: 'From Date', fieldType: 'date', value: this.state.fromDate, handleDatePickerChange: this.handleDatePickerChangeFromDate, error: this.state.errors['fromDate'] },\r\n { id: 'fromHour', label: '', fieldType: 'select', options: hourOptions, value: this.state.fromHour },\r\n { id: 'fromMinute', label: '',fieldType: 'minute', options: minuteOptions, value: this.state.fromMinute },\r\n { id: 'fromAmPm', label: '', fieldType: 'select', options: amPmOptions, value: this.state.fromAmPm }]\r\n },\r\n {\r\n formGroups: [{ id: 'toDate', label: 'To Date', fieldType: 'date', value: this.state.toDate, handleDatePickerChange: this.handleDatePickerChangeToDate, error: this.state.errors['toDate'] },\r\n { id: 'toHour', label: '', fieldType: 'select', options: hourOptions, value: this.state.toHour },\r\n { id: 'toMinute', label: '', fieldType: 'minute', options: minuteOptions, value: this.state.toMinute },\r\n { id: 'toAmPm', label: '', fieldType: 'select', options: amPmOptions, value: this.state.toAmPm }]\r\n }]\r\n\r\n if (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'accountName', label: 'Account Name', fieldType: 'text', value: this.state.accountName },\r\n { id: 'accountLookupButton', fieldType: 'lookup', onClick: this.handleAccountLookup }]\r\n });\r\n }\r\n \r\n formGroupRows.push({\r\n formGroups: [{ id: 'username', label: 'Username', fieldType: 'text', value: this.state.username },\r\n { id: 'userLookupButton', fieldType: 'lookup', onClick: this.handleUserLookup }]\r\n });\r\n \r\n formGroupRows.push({\r\n formGroups: [{ id: 'statementNumber', label: 'Statement Number', fieldType: 'text', value: this.state.statementNumber }]\r\n });\r\n\r\n if (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'dataSource', label: 'Data Source', fieldType: 'select', options: this.props.dataSourceTypes, value: this.state.dataSource }]\r\n });\r\n }\r\n \r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Statement Report\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onSeconaryClick: this.handleExport,\r\n onClear: this.handleClear,\r\n primaryButtonLabel: \"PDF\",\r\n secondaryButtonLabel: \"Excel\",\r\n clearButtonLabel: \"Clear\",\r\n secondaryButtonBlue: true,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n formGroupRows: formGroupRows\r\n }\r\n\r\n return <>\r\n <FormTemplate {...formProps} />\r\n <AccountSelectionList showModal={this.state.showAccountList} codeDescriptionResults={this.props.accounts} onHide={(selectedId, selectedName) => this.handleCloseAccountLookup(selectedId, selectedName)} />\r\n <UserSelectionList showModal={this.state.showUserList} onHide={(selectedId, selectedName) => this.handleCloseUserLookup(selectedId, selectedName)} /> \r\n </>\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(StatementReport);","import React, {Component} from 'react';\r\nimport moment from 'moment';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { reportAccountType, setSelectedReportType, ReportAccountTypeKey } from \"../../redux/actions/reportActions\";\r\nimport { amPmOptions, hourOptions, minuteOptions, validateDateTimes, validateYearRangeLimit } from \"../../utils/DateValidation\";\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = ReportAccountTypeKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedReportType: () => dispatch(setSelectedReportType(componentName)), \r\n reportAccountType: (searchCriteria, history, callback) => dispatch(reportAccountType(searchCriteria, history, callback)),\r\n resetReportCriteria: () => dispatch({ type: 'RESET_REPORT_CRITERIA', componentName })\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n let reportByCriteria = state.reportCriteriaReducer[componentName];\r\n let transactionType = reportByCriteria['transactionType'] ? reportByCriteria['transactionType'] : 'all';\r\n let fromDate = reportByCriteria['fromDate'] ? reportByCriteria['fromDate'] : moment().format('L');\r\n let toDate = reportByCriteria['toDate'] ? reportByCriteria['toDate'] : moment().format('L');\r\n let fromHour = reportByCriteria['fromHour'] ? reportByCriteria['fromHour'] : '12';\r\n let fromMinute = reportByCriteria['fromMinute'] ? reportByCriteria['fromMinute'] : '0';\r\n let fromAmPm = reportByCriteria['fromAmPm'] ? reportByCriteria['fromAmPm'] : 'am';\r\n let toHour = reportByCriteria['toHour'] ? reportByCriteria['toHour'] : '11';\r\n let toMinute = reportByCriteria['toMinute'] ? reportByCriteria['toMinute'] : '59';\r\n let toAmPm = reportByCriteria['toAmPm'] ? reportByCriteria['toAmPm'] : 'pm';\r\n let dataSource = reportByCriteria['dataSource'] ? reportByCriteria['dataSource'] : \"FIVE\";\r\n\r\n return {\r\n transactionTypes: state.auditTransactionTypesReducer.codeDescriptionResultList,\r\n transactionTypesAll: state.auditTransactionTypesAllReducer.codeDescriptionResultList,\r\n dataSourceTypes: state.dataSourceTypesReducer.codeDescriptionResultList,\r\n transactionType,\r\n fromDate,\r\n fromHour,\r\n fromMinute,\r\n fromAmPm,\r\n toDate,\r\n toHour,\r\n toMinute,\r\n toAmPm,\r\n dataSource,\r\n role: state.currentUserReducer.role\r\n };\r\n}\r\n\r\nclass AccountTypReport extends Component {\r\n\r\n state = {\r\n transactionType: this.props.transactionType,\r\n fromDate: this.props.fromDate,\r\n toDate: this.props.toDate,\r\n fromHour: this.props.fromHour,\r\n fromMinute: this.props.fromMinute,\r\n fromAmPm: this.props.fromAmPm,\r\n toHour: this.props.toHour,\r\n toMinute: this.props.toMinute,\r\n toAmPm: this.props.toAmPm,\r\n dataSource: this.props.dataSource,\r\n\r\n loadingStatus: \"\",\r\n errors: {}\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.handleValidation()) {\r\n if (this.showLoading() === true) {\r\n const { loadingStatus, errors, ...request } = this.state; // remove UI only fields before submitting\r\n this.props.reportAccountType(request, this.props.history, this.hideLoading);\r\n }\r\n }\r\n }\r\n\r\n handleClear = (event) => {\r\n event.preventDefault();\r\n this.props.resetReportCriteria();\r\n this.setState({\r\n transactionType: '',\r\n fromDate: moment().format('L'),\r\n toDate: moment().format('L'),\r\n fromHour: '12',\r\n fromMinute: '0',\r\n fromAmPm: 'am',\r\n toHour: '11',\r\n toMinute: '59',\r\n toAmPm: 'pm',\r\n dataSource: 'FIVE',\r\n \r\n loadingStatus: \"\",\r\n errors: {}\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n if (status === 'ERROR') {\r\n alert(message);\r\n }\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n\r\n handleValidation() {\r\n let errors = {};\r\n if (!this.state.fromDate) {\r\n errors['fromDate'] = \"Required.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n let formIsValid = validateDateTimes(errors, this.state.fromDate, this.state.fromHour, this.state.fromMinute, this.state.fromAmPm, 'fromDate', this.state.toDate, this.state.toHour, this.state.toMinute, this.state.toAmPm, 'toDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n \r\n formIsValid = validateYearRangeLimit(errors, this.state.fromDate, 'fromDate', this.state.toDate, 'toDate');\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n\r\n this.setState({ errors: errors });\r\n return true;\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value\r\n })\r\n }\r\n\r\n handleDatePickerChangeFromDate = (date) => {\r\n this.setState({\r\n fromDate : moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToDate = (date) => {\r\n this.setState({\r\n toDate : moment(date).format('L')\r\n })\r\n }\r\n componentDidMount() {\r\n this.props.setSelectedReportType();\r\n }\r\n\r\n render() {\r\n\r\n let transactionTypes = this.props.transactionTypes;\r\n if (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') {\r\n transactionTypes = this.props.transactionTypesAll;\r\n }\r\n\r\n let formGroupRows = [\r\n {\r\n formGroups: [\r\n { id: 'fromDate', label: 'From Date', fieldType: 'date', value: this.state.fromDate, handleDatePickerChange: this.handleDatePickerChangeFromDate, error: this.state.errors['fromDate'] },\r\n { id: 'fromHour', label: '', fieldType: 'select', options: hourOptions, value: this.state.fromHour },\r\n { id: 'fromMinute', label: '',fieldType: 'minute', options: minuteOptions, value: this.state.fromMinute },\r\n { id: 'fromAmPm', label: '', fieldType: 'select', options: amPmOptions, value: this.state.fromAmPm }]\r\n },\r\n {\r\n formGroups: [\r\n { id: 'toDate', label: 'To Date', fieldType: 'date', value: this.state.toDate, handleDatePickerChange: this.handleDatePickerChangeToDate, error: this.state.errors['toDate'] },\r\n { id: 'toHour', label: '', fieldType: 'select', options: hourOptions, value: this.state.toHour },\r\n { id: 'toMinute', label: '', fieldType: 'minute', options: minuteOptions, value: this.state.toMinute },\r\n { id: 'toAmPm', label: '', fieldType: 'select', options: amPmOptions, value: this.state.toAmPm }]\r\n },\r\n {\r\n formGroups: [{ id: 'transactionType', label: 'Transaction Type', fieldType: 'select', options: transactionTypes, value: this.state.transactionType }]\r\n }\r\n ]\r\n\r\n if (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') {\r\n formGroupRows.push({\r\n formGroups: [{ id: 'dataSource', label: 'Data Source', fieldType: 'select', options: this.props.dataSourceTypes, value: this.state.dataSource }]\r\n });\r\n }\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Account Type Report\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n onClear: this.handleClear,\r\n clearButtonLabel: \"Clear\",\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n formGroupRows: formGroupRows\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(AccountTypReport);","import React from 'react';\r\nimport { Nav, Navbar } from 'react-bootstrap';\r\nimport { Route, Switch } from \"react-router-dom\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport SideNavigationLabel from \"../side/SideNavigationLabel\";\r\nimport SideNavigationToggle from \"../side/SideNavigationToggle\";\r\nimport SideNavigationNavLink from \"../side/SideNavigationNavLink\";\r\n\r\nimport UserReport from \"./UserReport\";\r\nimport AccountReport from \"./AccountReport\";\r\nimport StatementReport from \"./StatementReport\";\r\nimport AccountTypeReport from \"./AccountTypeReport\";\r\n\r\nimport CommonTop from \"../../components/top/CommonTop\";\r\n\r\nimport { ReportAccountTypeKey, ReportAccountAuditKey, ReportUserAuditKey, ReportStatementKey } from \"../../redux/actions/reportActions\";\r\n\r\nimport { accountTypeIcon, accountTypeActiveIcon, accountIcon, accountActiveIcon, statementIcon, statementActiveIcon, userIcon, userActiveIcon, fileIcon } from \"../../img/font_awesome/font_awesome\";\r\n\r\n\r\nconst mapStateToProps = state => {\r\n\treturn {\r\n\t\tcountyConfigReports: state.countyConfigReportsReducer,\r\n\t\tselectedReportType: state.reportTypeReducer.selectedReportType,\r\n\t\trole: state.currentUserReducer.role,\r\n\t};\r\n}\r\n\r\nclass Reports extends React.Component {\r\n\r\n\trender() {\r\n\r\n\t\tlet statementReportsProps = {\r\n\t\t\timage: fileIcon,\r\n\t\t\tname: \"Statement:\"\r\n\t\t}\r\n\r\n\t\tlet statementReportProps = {\r\n\t\t\tid: \"statementReportNavLink\",\r\n\t\t\tlink: \"/reports/StatementReport\",\r\n\t\t\tselected: this.props.selectedReportType === ReportStatementKey,\r\n\t\t\timage: this.props.selectedReportType === ReportStatementKey ? statementActiveIcon: statementIcon,\r\n\t\t\tname: \"Statement\"\r\n\t\t}\r\n\r\n\t\tlet auditReportsProps = {\r\n\t\t\timage: fileIcon,\r\n\t\t\tname: \"Audit Details:\"\r\n\t\t}\r\n\r\n\t\tlet accountReportProps = {\r\n\t\t\tid: \"accountReportNavLink\",\r\n\t\t\tlink: \"/reports/AccountReport\",\r\n\t\t\tselected: this.props.selectedReportType === ReportAccountAuditKey,\r\n\t\t\timage: this.props.selectedReportType === ReportAccountAuditKey ? accountActiveIcon: accountIcon,\r\n\t\t\tname: \"Account\"\r\n\t\t}\r\n\r\n\t\tlet userReportProps = {\r\n\t\t\tid: \"userReportNavLink\",\r\n\t\t\tlink: \"/reports/UserReport\",\r\n\t\t\tselected: this.props.selectedReportType === ReportUserAuditKey,\r\n\t\t\timage: this.props.selectedReportType === ReportUserAuditKey ? userActiveIcon: userIcon,\r\n\t\t\tname: \"User\"\r\n\t\t}\r\n\t\t\r\n\t\tlet summaryReportsProps = {\r\n\t\t\timage: fileIcon,\r\n\t\t\tname: \"Transaction Summary:\"\r\n\t\t}\r\n\r\n\t\tlet accountTypeReportProps = {\r\n\t\t\tid: \"accountTypeReportNavLink\",\r\n\t\t\tlink: \"/reports/AccountTypeReport\",\r\n\t\t\tselected: this.props.selectedReportType === ReportAccountTypeKey,\r\n\t\t\timage: this.props.selectedReportType === ReportAccountTypeKey ? accountTypeActiveIcon: accountTypeIcon,\r\n\t\t\tname: \"Account Type\"\r\n\t\t}\r\n\r\n\t\tlet defaultRoute = <Route path=\"/reports\" component={StatementReport} />;\r\n\t\tif (\"AccountReport\" === this.props.selectedReportType) {\r\n\t\t\tdefaultRoute = <Route path=\"/reports\" component={AccountReport} />;\r\n\t\t} else if (\"AccountTypeReport\" === this.props.selectedReportType) {\r\n\t\t\tdefaultRoute = <Route path=\"/reports\" component={AccountTypeReport} />;\r\n\t\t} else if(\"UserReport\" === this.props.selectedReportType) {\r\n\t\t\tdefaultRoute = <Route path=\"/reports\" component={UserReport} />;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t<div>\r\n\t\t\t\t<CommonTop history={this.props.history} />\r\n\t\t\t\t<div style={{ float: \"left\", minWidth: 38, maxWidth: 280 }}>\r\n\t\t\t\t\t<SideNavigationToggle />\r\n\t\t\t\t\t<Navbar bg=\"light\" style={{ padding: 0, display: \"block\" }}>\r\n\t\t\t\t\t\t<Navbar.Toggle aria-controls=\"basic-navbar-nav\" />\r\n\t\t\t\t\t\t<Nav className=\"flex-column\" style={{ width: '100%', float: \"left\", marginLeft: 2 }}>\t\r\n\t\t\t\t\t\t\t<Nav.Link eventKey=\"disabled\" disabled style={{ fontWeight: 'bold', background: \"gray\", color: \"black\"}} className='side-nav-header' ><SideNavigationLabel {...auditReportsProps} /></Nav.Link>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.props.countyConfigReports.auditAccountsReport && \r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...accountReportProps} />\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.props.countyConfigReports.auditUsersReport && \r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...userReportProps} />\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t<Nav.Link eventKey=\"disabled\" disabled style={{ fontWeight: 'bold', background: \"gray\", color: \"black\"}} className='side-nav-header' ><SideNavigationLabel {...statementReportsProps} /></Nav.Link>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.props.countyConfigReports.statementReport && \r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...statementReportProps} />\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.props.countyConfigReports.accountTypeReport && (this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') && \r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<Nav.Link eventKey=\"disabled\" disabled style={{ fontWeight: 'bold', background: \"gray\", color: \"black\"}} className='side-nav-header' ><SideNavigationLabel {...summaryReportsProps} /></Nav.Link>\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...accountTypeReportProps} />\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</Nav>\r\n\t\t\t\t\t</Navbar>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div style={{paddingBottom: 4}}>\r\n\t\t\t\t\t<Switch>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigReports.accountTypeReport && \r\n\t\t\t\t\t\t\t<Route path=\"/reports/AccountTypeReport\" component={AccountTypeReport} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigReports.auditAccountsReport && \r\n\t\t\t\t\t\t\t<Route path=\"/reports/AccountReport\" component={AccountReport} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigReports.auditUsersReport && \r\n\t\t\t\t\t\t\t<Route path=\"/reports/UserReport\" component={UserReport} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.props.countyConfigReports.statementReport && \r\n\t\t\t\t\t\t\t<Route path=\"/reports/StatementReport\" component={StatementReport} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{defaultRoute}\r\n\t\t\t\t\t</Switch>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps)(Reports);","import React from 'react';\r\n\r\nimport { Modal, Button } from 'react-bootstrap'\r\nimport { questionIcon } from '../../../img/font_awesome/font_awesome'\r\n\r\n\r\nexport default class Confirmation extends React.Component {\r\n handleYesClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.props.cancelConfirmation();\r\n this.props.proceedConfirmation();\r\n }\r\n\r\n handleNoClick = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.props.cancelConfirmation();\r\n }\r\n\r\n render() {\r\n let title = \"\"\r\n\r\n if (this.props.title) {\r\n title = this.props.title;\r\n }\r\n\r\n return (\r\n <Modal show={this.props.show} onHide={this.handleNoClick} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\r\n <Modal.Header closeButton >\r\n <Modal.Title style={{color: '#3674AB'}}>{questionIcon} {title}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body style={{borderTop: '2px solid black', borderBottom: '2px solid black', background: '#3674AB', color: 'white', fontSize: 20}}>\r\n {this.props.question}\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"primary\" onClick={this.handleYesClick}>Yes</Button>\r\n <Button variant=\"secondary\" onClick={this.handleNoClick}>No</Button>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n }\r\n}","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { Container, Row, Col, Table, Button } from 'react-bootstrap'\r\nimport PageBanner from '../common/page/PageBanner'\r\nimport Alert from '../common/modal/Alert';\r\nimport AccountSelectionList from \"../common/selection/AccountSelectionList\";\r\nimport CommonTop from \"../../components/top/CommonTop\";\r\nimport Paginator from '../common/page/Paginator'\r\nimport {getPaginatorHelper} from '../common/page/PaginatorHelper'\r\nimport Loading from '../common/modal/Loading';\r\nimport Confirmation from '../common/modal/Confirmation';\r\nimport configData from \"../../config/config.json\";\r\nimport axios from \"axios\";\r\nimport { saveAs } from 'file-saver';\r\n\r\nimport { UserListComponetName, updateUserListFilters } from '../../redux/actions/userManagerActions';\r\nimport { LOADING_STATUES, ALERT_TYPES } from \"../constants/constants\";\r\n\r\nconst mapStateToProps = state => {\r\n\r\n\treturn {\r\n\t\tpaginationPage: state.usersPaginationReducer,\r\n\t\tuserListFilters: state.userListFiltersReducer,\r\n\t\taccounts: state.currentUserReducer.allowableAccounts,\r\n\t\trole: state.currentUserReducer.role \r\n\t};\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tupdateUserListFilters: (filters) => dispatch(updateUserListFilters(filters)),\r\n\t\tuserListAccountFilter: (accountId, accountName) => dispatch({ type: 'SET_USER_LIST_ACCOUNT_FILTER', accountFilter: {accountId, accountName} })\r\n\r\n\t}\r\n}\r\n\r\nclass UserList extends React.Component {\r\n\r\n\tstate = {\r\n\t\tfilteredList: [],\r\n\t\tselectedId: 0,\r\n\t\tselectedUsername: '',\r\n\t\tstatusType: this.props.userListFilters.statusType ? this.props.userListFilters.statusType : \"ALL\",\r\n\t\tfilterText: this.props.userListFilters.filterText ? this.props.userListFilters.filterText : '',\r\n\t\taccountId: this.props.userListFilters.accountId ? this.props.userListFilters.accountId : '',\r\n\t\taccountName: this.props.userListFilters.accountId ? this.props.userListFilters.accountName : '',\r\n\t\tstatus: '',\r\n\t\tshowDeleteConfirmationDialog: false,\r\n\t\tshowActivateConfirmationDialog: false,\r\n\t\tshowAlert: false,\r\n\t\talertMessage: \"\",\r\n\t\talertType: ALERT_TYPES.OK,\r\n\t\tshowAccountList: false\r\n\t}\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.status === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thandleTextFilter = (filterText) => {\r\n\t\tthis.setState({ filterText: filterText }, function() { this.handleFilter() } )\r\n\t}\r\n\r\n\thandleFinderFilterReset = () => {\r\n\t\tthis.setState({ accountId: 0 }, function() { this.handleFilter() } )\r\n\t}\r\n\t \r\n\thandleCloseAccountLookup = (selectedId, selectedName) => {\r\n\t\tthis.setState({\r\n\t\t showAccountList: false,\r\n\t\t accountId: selectedId,\r\n\t\t accountName: selectedName\r\n\t\t}, function() { this.handleFilter() } );\r\n\t}\r\n\t\r\n\thandleFinderFilterClick = () => {\r\n\t\tthis.setState( {\r\n\t\t\tshowAccountList : true\r\n\t\t });\r\n\t}\r\n\r\n\thandleSelectFilter = (filterSelected) => {\r\n\t\tthis.setState({statusType: filterSelected}, function() {this.handleFilter()});\r\n\t}\r\n\r\n\thandleFilter = () => {\r\n\t\tif (this.showLoading() !== true) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet filters = {filterText: this.state.filterText, statusType: this.state.statusType, accountId: this.state.accountId };\r\n\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"userManager/users\", filters, { withCredentials: true })\r\n\t\t.then((response) => {\r\n\t\t\tthis.setState({filteredList: response.data.content.users, status: '' })\r\n\t\t\tthis.props.updateUserListFilters(filters);\r\n\t\t}, (error) => {\r\n\t\t\tthis.setState({ status: '' }, this.showWarning(error.message));\r\n\t\t});\r\n\t}\r\n\r\n\thandleRowEdit = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/userManager/' + event.target.closest(\"tr\").id);\r\n\t}\r\n\r\n\thandleRowPassword = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/userManager/userPassword/' + event.target.closest(\"tr\").id);\r\n\t}\r\n\r\n\t// Delete methods\r\n\thandleDeleteUser = () => {\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"userManager/userDelete\", { userId: this.state.selectedId, filterText: this.state.filterText, statusType: this.state.statusType, accountId: this.state.accountId }, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({ status: '', filteredList: response.data.content.users }, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({ status: '' }, this.showWarning(error.message));\r\n\t\t\t\t});\r\n\r\n\t\t\tthis.props.history.push('/userManager');\r\n\t\t}\r\n\t}\r\n\r\n\tshowDeleteConfirmation = (event) => {\r\n\t\tlet selectedId = event.target.closest(\"tr\").id;\r\n\t\tlet selectedUsername = event.target.closest(\"tr\").getAttribute(\"name\");\r\n\t\r\n\t\tthis.setState({\r\n\t\t\tselectedId,\r\n\t\t\tselectedUsername,\r\n\t\t\tshowDeleteConfirmationDialog: true\r\n\t\t})\r\n\t}\r\n\r\n\thideDeleteConfirmation = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowDeleteConfirmationDialog: false\r\n\t\t})\r\n\t}\r\n\t// Delete methods - End\r\n\r\n\r\n\t// Activate/deactivate methods\r\n\r\n\thideActivateConfirmation = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowActivateConfirmationDialog: false\r\n\t\t})\r\n\t}\r\n\t\r\n\thandleChangeUserStatus = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tlet userId = event.target.closest(\"tr\").id;\r\n\t\tlet userStatus = event.target.closest(\"tr\").getAttribute(\"userStatus\");\r\n\t\tif (userStatus === 'L') {\r\n\t\t\tthis.setState({ selectedId: userId, activateQuestion: 'User was locked out due to suspicious activties. Continue to activate?', showActivateConfirmationDialog: true })\r\n\t\t} else if (userStatus === 'P') {\r\n\t\t\tthis.setState({ selectedId: userId, activateQuestion: 'User has not completed self registration. Continue to activate?', showActivateConfirmationDialog: true })\r\n\t\t} else {\r\n\t\t\tthis.setState({ selectedId: userId}, () => this.submitUserStatus());\r\n\t\t}\r\n\t}\r\n\t\r\n\tsubmitUserStatus = () => {\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"userManager/userChangeStatusList\", { userId: this.state.selectedId, filterText: this.state.filterText, statusType: this.state.statusType, accountId: this.state.accountId }, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({ status: '', filteredList: response.data.content.users }, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({ status: '' }, this.showWarning(error.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// Activate/deactivate methods - End\r\n\r\n\t// New User\r\n\r\n\topenNewUserEntry = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/userManager/0');\r\n\t}\r\n\r\n\texportData = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"userManager/userExport\", { filterText: this.state.filterText, statusType: this.state.statusType, accountId: this.state.accountId }, { responseType: 'arraybuffer', withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tlet blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n\t\t\t\t\tsaveAs(blob, 'users.xlsx');\r\n\t\t\t\t\tthis.setState({ status: '' })\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({ status: '' }, this.showAlert(error.message));\r\n\t\t\t\t});\t\r\n\t\t}\r\n\t}\r\n\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\r\n\tshowWarning = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t alertType: ALERT_TYPES.WARNING,\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t}\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\",\r\n\t\t\talertType: ALERT_TYPES.OK\r\n\t\t}, this.props.history.push('/userManager'))\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.handleFilter();\r\n\t}\r\n\r\n\trender() {\r\n\t\t\r\n\t\tlet buttons = [{ label: 'New', onClickAction: this.openNewUserEntry }, { label: 'Export', onClickAction: this.exportData, className: 'btn btn-secondary' }]\r\n\r\n\t\tconst selectFilterProps = {\r\n\t\t\tselectFilter: this.handleSelectFilter,\r\n\t\t\toptions: [{code: \"ALL\", description: \"All Users\"}, {code: \"A\", description: \"Active Only\"}, {code: \"I\", description: \"Inactive Only\"}, { code: \"P\", description: \"Pending Only\" }],\r\n\t\t\tselected: this.state.statusType\r\n\t\t}\r\n\r\n\t\tconst textFilterProps = {\r\n\t\t\ttextFilter: this.handleTextFilter,\r\n\t\t\tfilterText: this.state.filterText\r\n\t\t}\r\n\r\n\t\tconst finderFilterProps = {\r\n\t\t\tfinderFilterClick: this.handleFinderFilterClick,\r\n\t\t\tfinderFilterReset: this.handleFinderFilterReset,\r\n\t\t\tname: this.state.accountName,\r\n\t\t\tid: this.state.accountId\r\n\t\t }\r\n\r\n\t\tconst numberOfVisibleRecords = 10;\r\n\t\tlet numberOfPages = Math.ceil ( this.state.filteredList.length / numberOfVisibleRecords );\r\n\t\tlet paginationHelper = getPaginatorHelper(this.props.paginationPage, this.state.filteredList, numberOfVisibleRecords);\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<CommonTop history={this.props.history} />\r\n\t\t\t\t<div style={{ marginRight: 40, marginLeft: 40, marginTop: 4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n\t\t\t\t\t{ \t\r\n\t\t\t\t\t\t(this.props.role === 'TRIMIN' || this.props.role === 'COUNTY') &&\r\n\t\t\t\t\t\t<PageBanner pageHeading='Users' textFilterProps={textFilterProps} selectFilterProps={selectFilterProps} finderFilterProps={finderFilterProps} buttons={buttons} />\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{ \t\r\n\t\t\t\t\t\t(this.props.role !== 'TRIMIN' && this.props.role !== 'COUNTY') &&\r\n\t\t\t\t\t\t<PageBanner pageHeading='Users' textFilterProps={textFilterProps} selectFilterProps={selectFilterProps} buttons={buttons} />\r\n\t\t\t\t\t}\r\n\t\t\t\t\t<Container fluid=\"true\">\r\n\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t<Col style={{ paddingLeft: 0, paddingRight: 0, paddingBottom: 0, marginTop: 20, marginLeft: 20, marginRight: 20, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n\t\t\t\t\t\t\t\t<Table striped hover size=\"sm\" >\r\n\t\t\t\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t\t\t<th style={{width:'20%'}} scope=\"col\">Username</th>\r\n\t\t\t\t\t\t\t\t\t\t\t<th style={{width:'25%'}} scope=\"col\">Name</th>\r\n\t\t\t\t\t\t\t\t\t\t\t<th style={{width:'25%'}} scope=\"col\">Account</th>\r\n\t\t\t\t\t\t\t\t\t\t\t<th style={{width:'10%'}} scope=\"col\">User Type</th>\r\n\t\t\t\t\t\t\t\t\t\t\t<th style={{width:'20%'}} scope=\"col\"></th>\r\n\t\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t\t</thead>\r\n\r\n\t\t\t\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tpaginationHelper.currentPageRecordList.map((userResult) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tlet inactiveBadge = '';\r\n\t\t\t\t\t\t\t\t\t\t\t\tif ( userResult.status === 'I') {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tinactiveBadge = \"inactive\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else if ( userResult.status === 'P') {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tinactiveBadge = \"pending\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else if ( userResult.status === 'L') {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tinactiveBadge = \"locked!\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<tr style={{ cursor: \"pointer\" }} id={userResult.id} name={userResult.username} userStatus={userResult.status} onClick={this.handleRowClick}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<td>{userResult.username}<span className='badge badge-light'>{inactiveBadge}</span></td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<td>{userResult.firstName} {userResult.lastName} </td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<td>{userResult.accountName}</td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<td>{userResult.role}</td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<td style={{ float: 'right' }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" size='sm' onClick={this.handleRowEdit}>Edit</Button> \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"secondary\" size='sm' onClick={this.handleRowPassword}>Password</Button> \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tuserResult.status === 'A' &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<><Button variant=\"danger\" size='sm' onClick={this.handleChangeUserStatus}>Deactivate</Button> </>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tuserResult.status !== 'A' &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<><Button variant=\"secondary\" size='sm' onClick={this.handleChangeUserStatus}> Activate </Button> </>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"danger\" size='sm' onClick={this.showDeleteConfirmation} >Delete</Button>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t<Row> </Row>\r\n\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t<Col style={{marginLeft: 4}}>Displaying Results: {paginationHelper.currentPageStartingRecordNumber}-{paginationHelper.currentPageEndingRecordNumber} of {this.state.filteredList.length}</Col>\r\n\t\t\t\t\t\t\t<Col><Paginator style={{justifyContent: 'center'}} componentName={UserListComponetName} numberOfVisibleRecords={numberOfVisibleRecords} numberOfPages={numberOfPages} ></Paginator></Col>\r\n\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t</Container>\r\n\t\t\t\t</div>\r\n\t\t\t\t<Loading loadingIndicator={this.state.status === LOADING_STATUES.LOADING} />\r\n\t\t\t\t<Confirmation show={this.state.showDeleteConfirmationDialog} cancelConfirmation={this.hideDeleteConfirmation} proceedConfirmation={this.handleDeleteUser} question={'Delete User ' + this.state.selectedUsername+ '?'} />\r\n\t\t\t\t<Confirmation show={this.state.showActivateConfirmationDialog} cancelConfirmation={this.hideActivateConfirmation} proceedConfirmation={this.submitUserStatus} question={this.state.activateQuestion} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} type={this.state.alertType} />\r\n\t\t\t\t<AccountSelectionList showModal={this.state.showAccountList} codeDescriptionResults={this.props.accounts} onHide={(selectedId, selectedName) => this.handleCloseAccountLookup(selectedId, selectedName)} />\r\n\t\t\t</>\r\n\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(UserList);","import React from 'react';\r\nimport axios from \"axios\";\r\nimport { connect } from \"react-redux\";\r\nimport { Container, Row, Col } from 'react-bootstrap'\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport Alert from '../common/modal/Alert';\r\nimport CommonTop from \"../../components/top/CommonTop\";\r\nimport configData from \"../../config/config.json\";\r\nimport usStates from \"../../config/us_states.json\";\r\nimport Loading from '../common/modal/Loading';\r\nimport Confirmation from '../common/modal/Confirmation';\r\nimport { formatPhone, formatInternationalPhone, formatZip } from \"../common/function/formattingUtils.js\";\r\nimport { validateUser, trimUserFields } from \"../common/function/userValidation.js\";\r\nimport {LOADING_STATUES } from \"../constants/constants\";\r\n\r\nconst mapStateToProps = (state) => {\r\n\treturn {\r\n\t\tuserTypes: state.userTypesReducer.codeDescriptionResultList,\r\n\t\tuserListFilters: state.userListFiltersReducer,\r\n\t\tcurrentUser: state.currentUserReducer\r\n\t};\r\n}\r\n\r\nclass UserEntry extends React.Component {\r\n\tstate = {\r\n\t\tid: 0,\r\n\t\tusername: '',\r\n\t\trole: 'USER',\r\n\t\taccountId: '',\r\n\t\taccountName: '',\r\n\t\tfirstName: '',\r\n\t\tlastName: '',\r\n\t\tcompany: '',\r\n\t\taddress: '',\r\n\t\tcity: '',\r\n\t\tstate: '',\r\n\t\tzip: '',\r\n\t\temail: '',\r\n\t\tphoneFormatType: 'STANDARD',\r\n\t\tphoneInternational: '',\r\n\t\tphoneStandard: '',\r\n\t\tstatus: 'A',\r\n\t\tpassword: '',\r\n\t\tpasswordConfirm: '',\r\n\t\tloadingStatus: '',\r\n\t\tshowDeleteConfirmationDialog: false,\r\n\t\tshowActivateConfirmationDialog: false,\r\n\t\tallowableUserTypes: this.props.userTypes,\r\n\t\tallowableAccounts: [],\r\n\t\terrors: {},\r\n\t\tshowAlert: false,\r\n\t\talertMessage: \"\",\r\n\t\talertType: '',\r\n\t\tredirect: false,\r\n\t\tactivateQuestion: 'Continue?'\r\n\t}\r\n\r\n\t// Delete methods\r\n\thandleDeleteUser = () => {\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"userManager/userDelete\", { userId: this.state.id, filterText: this.props.userListFilters.filterText, includeInactive: this.props.userListFilters.includeInactive }, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", redirect: true }, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", redirect: false, alertType: 'WARNING' }, this.showAlert(error.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tshowDeleteConfirmation = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\tshowDeleteConfirmationDialog: true\r\n\t\t})\r\n\t}\r\n\r\n\thideDeleteConfirmation = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowDeleteConfirmationDialog: false\r\n\t\t})\r\n\t}\r\n\t// Delete methods - End\r\n\r\n\thandleChange = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tlet value = event.target.value;\r\n\t\tif (event.target.id === 'phoneStandard') {\r\n\t\t\tvalue = formatPhone(value, this.state.phoneStandard);\r\n\t\t} else if (event.target.id === 'phoneInternational') {\r\n\t\t\tvalue = formatInternationalPhone(value);\r\n\t\t} else if (event.target.id === 'zip') {\r\n\t\t\tvalue = formatZip(value);\r\n\t\t}\r\n\r\n\t\tthis.setState({\r\n\t\t\t[event.target.id]: value,\r\n\t\t\terrors: {}\r\n\t\t})\r\n\t}\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thandleCancel = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/userManager');\r\n\t}\r\n\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage,\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\",\r\n\t\t\talertType: ''\r\n\t\t})\r\n\t\r\n\t\tif (this.state.redirect) {\r\n\t\t\tthis.props.history.push('/userManager');\r\n\t\t}\r\n\t}\r\n\r\n\tvalidateAndSubmit = () => {\r\n\t\tlet errors = validateUser(this.state, this.state.id === 0, this.state.id === 0);\r\n\t\tif (errors && Object.keys(errors).length > 0) {\r\n\t\t\tthis.setState({ errors });\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\tconst { passwordConfirm, loadingStatus, showDeleteConfirmationDialog, showActivateConfirmationDialog,\r\n\t\t\t\t\tallowableUserTypes, allowableAccounts,\r\n\t\t\t\t \tshowAlert, alertMessage, alertType, redirect, activateQuestion, \r\n\t\t\t\t \tphoneInternational, phoneStandard,\r\n\t\t\t\t \t...request } = this.state; // remove UI only fields before submitting\r\n\r\n\t\t\tif (this.state.phoneFormatType === 'INTERNATIONAL') {\r\n\t\t\t\trequest.phone = this.state.phoneInternational;\r\n\t\t\t} else {\r\n\t\t\t\trequest.phone = this.state.phoneStandard;\r\n\t\t\t}\r\n\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"userManager/user\", request, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", redirect: true }, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => { \r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", redirect: false, alertType: 'WARNING' }, this.showAlert(error.response.data.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n handleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tconst trimmedUserFields = trimUserFields(this.state);\r\n\t\tthis.setState({ ...trimmedUserFields }, function () {\r\n\t\t\tthis.validateAndSubmit();\r\n\t\t});\r\n\t}\r\n\r\n\t// Activate/deactivate methods\r\n\r\n\thideActivateConfirmation = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowActivateConfirmationDialog: false\r\n\t\t})\r\n\t}\r\n\r\n\thandleChangeUserStatus = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tif (this.state.status === 'L') { \r\n\t\t\tthis.setState({ activateQuestion: 'User was locked out due to suspicious activties. Continue to activate?', showActivateConfirmationDialog: true })\r\n\t\t} else if (this.state.status === 'P') { \r\n\t\t\tthis.setState({ activateQuestion: 'User has not completed self registration. Continue to activate?', showActivateConfirmationDialog: true })\r\n\t\t} else {\r\n\t\t\tthis.submitUserStatus();\r\n\t\t}\r\n\t}\r\n\r\n\tsubmitUserStatus = () => {\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"userManager/userChangeStatusSingle\", { userId: this.state.id, filterText: this.props.userListFilters.filterText, includeInactive: this.props.userListFilters.includeInactive }, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", status: response.data.content.status }, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", alertType: 'WARNING' }, this.showAlert(error.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// Activate/deactivate methods - End\r\n\r\n\tcomponentDidMount() {\r\n\r\n\t\tthis.setState({\r\n\t\t\tallowableUserTypes: this.props.currentUser.allowableUserTypes,\r\n\t\t\tallowableAccounts: this.props.currentUser.allowableAccounts\r\n\t\t});\r\n\t\t\r\n\t\tthis.setState({\r\n\t\t\taccountId: this.props.currentUser.allowableAccounts[0].code\r\n\t\t});\r\n\t\t \r\n\t\t// new user\r\n\t\tif (this.props.match.params.id === '0') {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\taxios.get(configData.LANDSHARK_SERVER_URL + \"userManager/user/\" + this.props.match.params.id, { withCredentials: true })\r\n\t\t\t.then(\r\n\t\t\t\t(response) => {\r\n\t\t\t\t\tconst content = response.data.content;\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tid: content.id,\r\n\t\t\t\t\t\tusername: content.username,\r\n\t\t\t\t\t\tfirstName: content.firstName,\r\n\t\t\t\t\t\tlastName: content.lastName,\r\n\t\t\t\t\t\taccountId: \"\" + content.accountId, // convert to a string, so it can match to the options in the dropdown\r\n\t\t\t\t\t\taccountName: content.accountName,\r\n\t\t\t\t\t\trole: content.role,\r\n\t\t\t\t\t\tcompany: content.company,\r\n\t\t\t\t\t\tphoneFormatType: content.phoneFormatType,\r\n\t\t\t\t\t\tphoneStandard: content.phoneFormatType === 'STANDARD' ? content.phone: '',\r\n\t\t\t\t\t\tphoneInternational: content.phoneFormatType === 'INTERNATIONAL' ? content.phone: '',\r\n\t\t\t\t\t\taddress: content.address,\r\n\t\t\t\t\t\tcity: content.city,\r\n\t\t\t\t\t\tstate: content.state,\r\n\t\t\t\t\t\tzip: content.zip,\r\n\t\t\t\t\t\temail: content.email,\r\n\t\t\t\t\t\tstatus: content.status,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t},\r\n\t\t\t\t(error) => {\r\n\t\t\t\t\tconsole.log(error);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t}\r\n\r\n\trender() {\r\n\r\n\t\tlet disabledFlag = this.state.status !== 'A' && this.state.id !== 0;\r\n\r\n\t\t// Not disabled, show a dropdown. Otherwise, show a text field.\r\n\t\tlet roleField = {\r\n\t\t\t id: 'role', label: 'User Type', fieldType: 'select', value: this.state.role, primaryCriteria: true, options: this.state.allowableUserTypes \r\n\t\t}\r\n\t\tif (disabledFlag) {\r\n\t\t\troleField = {\r\n\t\t\t\t id: 'role', label: 'User Type', fieldType: 'text', value: this.state.role, disabled: true \r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Not disabled, show a dropdown. Otherwise, show a text field.\r\n\t\tlet accountField = {\r\n\t\t\tformGroups: [{ id: 'accountId', label: 'Account', fieldType: 'select', options: this.state.allowableAccounts, value: this.state.accountId, required: true, primaryCriteria: true, disabled: disabledFlag },\r\n\t\t\t\t\t\troleField]\r\n\t\t}\r\n\t\tif (disabledFlag) {\r\n\t\t\taccountField = {\r\n\t\t\t\tformGroups: [{ id: 'accountName', label: 'Account', fieldType: 'text', value: this.state.accountName, disabled: true }, roleField]\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet formGroupRows = [\r\n\t\t\taccountField,\r\n\t\t\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'firstName', label: 'First Name', fieldType: 'text', value: this.state.firstName, required: true, primaryCriteria: true, disabled: disabledFlag, error: this.state.errors['firstName'] }, { id: 'lastName', label: 'Last Name', fieldType: 'text', value: this.state.lastName, required: true, primaryCriteria: true, disabled: disabledFlag, error: this.state.errors['lastName'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'email', label: 'Email', fieldType: 'email', value: this.state.email, required: true, primaryCriteria: true, disabled: disabledFlag, error: this.state.errors['email'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'company', label: 'Company', fieldType: 'text', value: this.state.company, required: false, disabled: disabledFlag, error: this.state.errors['company'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'address', label: 'Address', fieldType: 'text', value: this.state.address, required: false, disabled: disabledFlag, style: {minWidth: 300}, error: this.state.errors['address'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'city', label: 'City', fieldType: 'text', value: this.state.city, required: false, disabled: disabledFlag, error: this.state.errors['city'] }, { id: 'state', label: 'State', fieldType: 'select', value: this.state.state, options: usStates, required: false, disabled: disabledFlag }, { id: 'zip', label: 'Zip (ex. 55111)', fieldType: 'zip', style: {maxWidth: 80}, value: this.state.zip, required: false, disabled: disabledFlag, error: this.state.errors['zip'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'phoneFormatType', label: 'Phone Format', fieldType: 'select', options: [{ code: \"STANDARD\", description: \"(XXX) XXX-XXXX\" }, { code: \"INTERNATIONAL\", description: \"International\" }], value: this.state.phoneFormatType, required: false, disabled: disabledFlag, error: this.state.errors['phoneFormatType'] },\r\n\t\t\t\t { id: 'phoneStandard', label: 'Phone (ex. (612) 555-1234)', fieldType: 'tel', value: this.state.phoneStandard, required: false, disabled: disabledFlag, hideField: this.state.phoneFormatType !== 'STANDARD', error: this.state.errors['phoneStandard'] },\r\n\t\t\t\t\t\t\t { id: 'phoneInternational', label: 'Phone country code (ex. 8613123456789)', fieldType: 'tel_international', value: this.state.phoneInternational, required: false, disabled: disabledFlag, hideField: this.state.phoneFormatType !== 'INTERNATIONAL', error: this.state.errors['phoneInternational'] } ]\r\n\t\t\t}\r\n\t\t]\r\n\t\t\t\r\n\t\t// If new user, show the User Name and Password fields in the entry form.\r\n\t\tif (this.state.id === 0) {\r\n\t\t\tformGroupRows.splice(0, 0, { formGroups: [{ id: 'password', label: 'Password', fieldType: 'password', value: this.state.password, required: true, error: this.state.errors['password'] }, { id: 'passwordConfirm', label: 'Confirm Password', fieldType: 'password', value: this.state.passwordConfirm, required: true, error: this.state.errors['passwordConfirm'] }] });\r\n\t\t\tformGroupRows.splice(0, 0, { formGroups: [{ id: 'username', label: 'Username', fieldType: 'text', value: this.state.username, required: true, error: this.state.errors['username'] }] });\r\n\t\t}\r\n\r\n\t\tlet changeStatusLabel = 'Activate';\r\n\t\tif (this.state.status === 'A') {\r\n\t\t\tchangeStatusLabel = 'Deactivate';\r\n\t\t}\r\n\r\n\r\n\t\tlet pageButtons = [{ label: changeStatusLabel, onClickAction: this.handleChangeUserStatus, className: 'btn btn-secondary btn-sm' }, { label: 'Delete', onClickAction: this.showDeleteConfirmation, className: 'btn btn-danger btn-sm' }]\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: \"UserEntry\",\r\n\t\t\tpageHeading: \"User (\" + (this.state.id > 0 ? this.state.username + \")\" : 'new*)'), // Existing user, show user id. New user, show [new]\r\n\t\t\tonChange: this.handleChange,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tonCancel: this.handleCancel,\r\n\t\t\tformGroupRows: formGroupRows,\r\n\t\t\tpageButtons: (this.state.id > 0 ? pageButtons : null) // Existing user, show page buttons. New user, don't.\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<CommonTop history={this.props.history} />\r\n\t\t\t\t<div style={{ marginRight: 80, marginLeft: 80, marginTop: 0 }}>\r\n\t\t\t\t\t<Container>\r\n\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t<Col style={{ paddingLeft: 0, paddingRight: 0, paddingBottom: 2, marginTop: 0 }}>\r\n\t\t\t\t\t\t\t\t<FormTemplate {...formProps} />\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t</Container>\r\n\t\t\t\t</div>\r\n\t\t\t\t<Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n\t\t\t\t<Confirmation show={this.state.showDeleteConfirmationDialog} cancelConfirmation={this.hideDeleteConfirmation} proceedConfirmation={this.handleDeleteUser} question={\"Delete user?\"} />\r\n\t\t\t\t<Confirmation show={this.state.showActivateConfirmationDialog} cancelConfirmation={this.hideActivateConfirmation} proceedConfirmation={this.submitUserStatus} question={this.state.activateQuestion} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} type={this.state.alertType} />\r\n\t\t\t</>\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, null)(UserEntry);","import React from 'react';\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport { Container, Row, Col } from 'react-bootstrap'\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport Alert from \"../common/modal/Alert\";\r\nimport CommonTop from \"../top/CommonTop\";\r\nimport { validateUser, trimUserFields } from \"../common/function/userValidation.js\";\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\n\r\nclass UserPassword extends React.Component {\r\n\tstate = {\r\n\t\tid: 0,\r\n\t\tusername: '',\r\n\t\tpassword: '',\r\n\t\tpasswordConfirm: '',\r\n\t\tloadingStatus: '',\r\n\t\tshowAlert: false,\r\n\t\tredirectToUserManager: false,\r\n\t\terrors: {}\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\t[event.target.id]: event.target.value,\r\n\t\t\terrors: {}\r\n\t\t})\r\n\t}\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thandleCancel = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/userManager');\r\n\t}\r\n\r\n\tvalidateAndSubmit = () => {\r\n\t\tlet errors = validateUser(this.state, false);\r\n\t\tif (errors && Object.keys(errors).length > 0) {\r\n\t\t\tconsole.log(errors);\r\n\t\t\tthis.setState({ errors });\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"userManager/userPassword\", this.state, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", redirectToUserManager: true }, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", redirectToUserManager: false }, this.showAlert(error.data.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tconst trimmedUserFields = trimUserFields(this.state);\r\n\t\tthis.setState({ ...trimmedUserFields }, function () {\r\n\t\t\tthis.validateAndSubmit();\r\n\t\t});\r\n\t}\r\n\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t\tif (this.state.redirectToUserManager) {\r\n\t\t\tthis.props.history.push('/userManager');\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\taxios.get(configData.LANDSHARK_SERVER_URL + \"userManager/user/\" + this.props.match.params.id, { withCredentials: true })\r\n\t\t\t.then(\r\n\t\t\t\t(response) => {\r\n\t\t\t\t\tconst content = response.data.content;\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tid: content.id,\r\n\t\t\t\t\t\tusername: content.username,\r\n\t\t\t\t\t\tpassword: content.password,\r\n\t\t\t\t\t\tpasswordConfirm: content.password\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t},\r\n\t\t\t\t(error) => {\r\n\t\t\t\t\tconsole.log(error);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t}\r\n\r\n\trender() {\r\n\t\tlet formGroupRows = [\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'password', label: 'Password', fieldType: 'password', value: this.state.password, required: true, error: this.state.errors['password'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'passwordConfirm', label: 'Confirm Password', fieldType: 'password', value: this.state.passwordConfirm, required: true, error: this.state.errors['passwordConfirm'] }]\r\n\t\t\t}\r\n\t\t]\r\n\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: \"UserPassword\",\r\n\t\t\tpageHeading: \"Reset Password (\" + this.state.username + \")\",\r\n\t\t\tonChange: this.handleChange,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tonCancel: this.handleCancel,\r\n\t\t\tformGroupRows: formGroupRows\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<CommonTop history={this.props.history} />\r\n\t\t\t\t<Container style={{ background: 'white'}}>\r\n\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t<Col style={{ paddingLeft: 0, paddingRight: 0, paddingBottom: 0, marginTop: 0 }}>\r\n\t\t\t\t\t\t\t<FormTemplate {...formProps} />\r\n\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t</Row>\r\n\t\t\t\t</Container>\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n\t\t\t</>\r\n\t\t\t\t)\r\n }\r\n}\r\n\r\nexport default UserPassword;\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { setSelectedControlPanelType, AccountsControlPanelKey, updateAccountListFilters } from \"../../redux/actions/controlPanelActions\";\r\n\r\nimport Alert from '../common/modal/Alert';\r\nimport { Container, Row, Col, Table, Button, Dropdown } from 'react-bootstrap'\r\nimport PageBanner from '../common/page/PageBanner'\r\nimport Paginator from '../common/page/Paginator'\r\nimport { getPaginatorHelper } from '../common/page/PaginatorHelper'\r\nimport Loading from '../common/modal/Loading';\r\nimport Confirmation from '../common/modal/Confirmation';\r\n\r\nimport configData from \"../../config/config.json\"\r\nimport axios from \"axios\";\r\nimport { saveAs } from 'file-saver';\r\n\r\nimport { LOADING_STATUES, ALERT_TYPES } from \"../constants/constants\";\r\n\r\nconst componentName = AccountsControlPanelKey;\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer,\r\n paginationPage: state.accountsPaginationReducer,\r\n countyAdminReload: state.countyConfigFlatFeeOverrideUISettingsReducer.countyAdminReload,\r\n userId: state.currentUserReducer.id,\r\n accountListFilters: state.accountListFiltersReducer\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName)),\r\n updateAccountListFilters: (filters) => dispatch(updateAccountListFilters(filters)),\r\n userListAccountFilter: (accountId, accountName) => dispatch({ type: 'SET_USER_LIST_ACCOUNT_FILTER', accountFilter: {accountId, accountName} }),\r\n updateAccountList: (list) => dispatch({ type: 'LANDSHARK_ACCOUNTS', results: list }) \r\n }\r\n}\r\n\r\nclass Accounts extends Component {\r\n\r\n state = {\r\n filteredList: [],\r\n selectedId: 0,\r\n selectedAccountName: '',\r\n statusType: this.props.accountListFilters.statusType ? this.props.accountListFilters.statusType : 'ALL',\r\n filterText: this.props.accountListFilters.filterText ? this.props.accountListFilters.filterText : '',\r\n status: '',\r\n showDeleteConfirmationDialog: false,\r\n showChangeAccountStatusConfirmationDialog: false,\r\n activateOrDeactivate: '',\r\n showAlert: false,\r\n alertMessage: '',\r\n alertType: ALERT_TYPES.OK\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n handleTextFilter = (filterText) => {\r\n this.setState({ filterText: filterText }, function () { this.handleFilter() })\r\n }\r\n\r\n handleSelectFilter = (filterSelected) => {\r\n this.setState({ statusType: filterSelected }, function () { this.handleFilter() })\r\n }\r\n\r\n handleRedirectToUsers = (event) => {\r\n event.preventDefault();\r\n let selectedAccountId = event.target.closest(\"tr\").id;\r\n let selectedAccountName = event.target.closest(\"tr\").getAttribute(\"name\");\r\n\r\n this.setState({ selectedAccountId, selectedAccountName });\r\n\r\n this.props.history.push('/userManager');\r\n\r\n this.props.userListAccountFilter(selectedAccountId, selectedAccountName);\r\n }\r\n\r\n\r\n handleRowReload = (event) => {\r\n event.preventDefault();\r\n this.props.history.push('/controlPanel/accountReload/' + event.target.closest(\"tr\").id + \"/\" + event.target.closest(\"tr\").getAttribute(\"name\"));\r\n }\r\n\r\n handleTasks = (event) => {\r\n event.preventDefault();\r\n this.props.history.push('/controlPanel/accountTasks/' + event.target.closest(\"tr\").id + \"/\" + event.target.closest(\"tr\").getAttribute(\"name\"));\r\n }\r\n\r\n handleDocTypes = (event) => {\r\n event.preventDefault();\r\n this.props.history.push('/controlPanel/accountDocTypes/' + event.target.closest(\"tr\").id + \"/\" + event.target.closest(\"tr\").getAttribute(\"name\"));\r\n }\r\n\r\n handleRowAccess = (event) => {\r\n event.preventDefault();\r\n this.props.history.push('/controlPanel/accountPageAccess/' + event.target.closest(\"tr\").id + \"/\" + event.target.closest(\"tr\").getAttribute(\"name\"));\r\n }\r\n\r\n handleRowEdit = (event) => {\r\n event.preventDefault();\r\n this.props.history.push('/controlPanel/accounts/' + event.target.closest(\"tr\").id);\r\n }\r\n\r\n // Delete methods\r\n\r\n handleDeleteAccount = () => {\r\n if (this.showLoading() === true) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountDelete\", { accountId: this.state.selectedId, filterText: this.state.filterText, statusType: this.state.statusType }, { withCredentials: true })\r\n .then((response) => {\r\n this.setState({ filteredList: response.data.content.accounts, status: '' }, this.showAlert(response.data.message))\r\n this.props.updateAccountList(response.data.content.accountCodeDescriptionResults);\r\n }, (error) => {\r\n this.setState({ status: '' }, this.showWarning(error.response.data.message));\r\n });\r\n this.props.history.push('/controlPanel/accounts');\r\n }\r\n }\r\n\r\n showDeleteConfirmation = (event) => {\r\n let selectedId = event.target.closest(\"tr\").id;\r\n let selectedAccountName = event.target.closest(\"tr\").getAttribute(\"name\");\r\n this.setState({\r\n selectedId,\r\n selectedAccountName,\r\n showDeleteConfirmationDialog: true\r\n })\r\n }\r\n\r\n hideDeleteConfirmation = () => {\r\n this.setState({\r\n showDeleteConfirmationDialog: false\r\n })\r\n }\r\n\r\n // Delete methods - end\r\n\r\n openNewAccountEntry = (event) => {\r\n event.preventDefault();\r\n this.props.history.push('/controlPanel/accounts/0');\r\n }\r\n\r\n exportData = (event) => {\r\n event.preventDefault();\r\n if (this.showLoading() !== true) {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountExport\", { filterText: this.state.filterText, statusType: this.state.statusType }, { responseType: 'arraybuffer', withCredentials: true })\r\n .then((response) => {\r\n let blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n saveAs(blob, 'accounts.xlsx');\r\n this.setState({ status: '' })\r\n }, (error) => {\r\n console.log(error);\r\n this.setState({ status: '' }, this.showWarning(error.message));\r\n });\r\n }\r\n\r\n // Activate/Deactivate methods\r\n\r\n showChangeAccountStatusConfirmation = (event) => {\r\n let selectedId = event.target.closest(\"tr\").id;\r\n let selectedAccountName = event.target.closest(\"tr\").getAttribute('name');\r\n let activateOrDeactivate = event.target.id;\r\n this.setState({\r\n activateOrDeactivate,\r\n selectedId,\r\n selectedAccountName,\r\n showChangeAccountStatusConfirmationDialog: true\r\n })\r\n }\r\n\r\n hideChangeAccountStatusConfirmation = () => {\r\n this.setState({\r\n showChangeAccountStatusConfirmationDialog: false\r\n })\r\n }\r\n\r\n handleChangeAccountStatus = (event) => {\r\n\r\n if (this.showLoading() === true) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountChangeStatusList\", { accountId: this.state.selectedId, filterText: this.state.filterText, statusType: this.state.statusType }, { withCredentials: true })\r\n .then((response) => {\r\n this.setState({ filteredList: response.data.content.accounts, status: '', activateOrDeactivate: '' }, this.showAlert(response.data.message))\r\n this.props.updateAccountList(response.data.content.accountCodeDescriptionResults);\r\n this.props.history.push('/controlPanel/accounts');\r\n }, (error) => {\r\n this.setState({ status: '', activateOrDeactivate: '' }, this.showWarning(error.message));\r\n this.props.history.push('/controlPanel/accounts');\r\n });\r\n }\r\n }\r\n\r\n // Activate/Deactivate methods - end\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n this.handleFilter();\r\n }\r\n\r\n handleFilter = () => {\r\n if (this.showLoading() !== true) {\r\n return;\r\n }\r\n\r\n let filters = { filterText: this.state.filterText, statusType: this.state.statusType };\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accounts\", filters, { withCredentials: true })\r\n .then((response) => {\r\n this.setState({ filteredList: response.data.content.accounts, status: '' })\r\n this.props.updateAccountListFilters(filters);\r\n }, (error) => {\r\n this.setState({ status: '' }, this.showAlert(error.message));\r\n });\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n this.setState({\r\n showAlert: true,\r\n alertMessage\r\n })\r\n }\r\n\r\n showWarning = (alertMessage) => {\r\n this.setState({\r\n alertType: ALERT_TYPES.WARNING,\r\n showAlert: true,\r\n alertMessage\r\n })\r\n }\r\n\r\n hideAlert = () => {\r\n this.setState({\r\n showAlert: false,\r\n alertMessage: '',\r\n alertType: ALERT_TYPES.OK\r\n })\r\n }\r\n\r\n render() {\r\n\r\n let formTemplateMarginLeft = 60\r\n if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n }\r\n\r\n let buttons = [{ label: 'New', onClickAction: this.openNewAccountEntry }, { label: 'Export', onClickAction: this.exportData, className: 'btn btn-secondary' }]\r\n\r\n const selectFilterProps = {\r\n selectFilter: this.handleSelectFilter,\r\n options: [\r\n { code: \"ALL\", description: \"All Accounts\" }, \r\n { code: \"A\", description: \"Active Only\" }, \r\n { code: \"NB\", description: \"Needs Billing Only\" }, \r\n { code: \"NIR\", description: \"Needs Image Renewal Only\" }, \r\n { code: \"I\", description: \"Inactive Only\" }\r\n ],\r\n selected: this.state.statusType\r\n }\r\n\r\n const textFilterProps = {\r\n textFilter: this.handleTextFilter,\r\n filterText: this.state.filterText\r\n }\r\n\r\n const numberOfVisibleRecords = 10;\r\n let numberOfPages = Math.ceil(this.state.filteredList.length / numberOfVisibleRecords);\r\n let paginationHelper = getPaginatorHelper(this.props.paginationPage, this.state.filteredList, numberOfVisibleRecords);\r\n\r\n return (\r\n\r\n <div style={{ marginTop: 4, marginLeft: formTemplateMarginLeft, marginRight: 20, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n <PageBanner pageHeading='Accounts' textFilterProps={textFilterProps} selectFilterProps={selectFilterProps} buttons={buttons} />\r\n <Container fluid=\"true\">\r\n <Row>\r\n <Col style={{ paddingLeft: 0, paddingRight: 0, paddingBottom: 0, marginTop: 20, marginLeft: 20, marginRight: 20, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n <Table striped hover size=\"sm\" >\r\n <thead>\r\n <tr>\r\n <th style={{ width: '30%' }} scope=\"col\">Account</th>\r\n <th style={{ width: '10%' }} scope=\"col\">Type</th>\r\n <th style={{ width: '15%' }} scope=\"col\">Payment Method</th>\r\n <th style={{ width: '15%' }} scope=\"col\">Monthly Fee ($)</th>\r\n <th style={{ width: '30%' }} scope=\"col\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {\r\n paginationHelper.currentPageRecordList.map((accountResult) => {\r\n let inactiveBadge = accountResult.status === 'A' ? \"\" : \"inactive\";\r\n return (\r\n <tr style={{ cursor: \"pointer\" }} id={accountResult.id} name={accountResult.name} onClick={this.handleRowClick}>\r\n <td>{accountResult.name}<span className='badge badge-light'>{inactiveBadge}</span></td>\r\n <td>{accountResult.accountTypeDescription}</td>\r\n <td>{accountResult.paymentMethodDescription}</td>\r\n <td>{accountResult.monthlyFeeDescription}</td>\r\n \r\n <td style={{ float: 'right' }}>\r\n <><Button variant=\"primary\" size ='sm' onClick={this.handleRowEdit}>Edit</Button></>\r\n \r\n <Dropdown className=\"d-inline mx-1\" style={{margin:0}} >\r\n <Dropdown.Toggle size ='sm' id=\"dropdown-autoclose-true\" variant='secondary' >More</Dropdown.Toggle>\r\n <Dropdown.Menu style={{ border:'2px solid darkgray', padding: 2, minWidth:'8rem'}}>\r\n <Dropdown.Item style={{ paddingLeft: 5, paddingRight: 5, margin:0}} href=\"#\" onClick={this.handleRowAccess}>Access</Dropdown.Item>\r\n <Dropdown.Item style={{paddingLeft: 5, paddingRight: 5}} href=\"#\" onClick={this.handleDocTypes}>Document Types</Dropdown.Item>\r\n {\r\n accountResult.accountType === 'FLAT_FEE' && this.props.countyAdminReload === true &&\r\n <Dropdown.Item style={{paddingLeft: 5, paddingRight: 5}} href=\"#\" onClick={this.handleRowReload}>Reload</Dropdown.Item>\r\n }\r\n <Dropdown.Item style={{paddingLeft: 5, paddingRight: 5}} href=\"#\" onClick={this.handleTasks}>Tasks</Dropdown.Item>\r\n <Dropdown.Item style={{paddingLeft: 5, paddingRight: 5}} href=\"#\" onClick={this.handleRedirectToUsers}>Users({accountResult.userCount})</Dropdown.Item>\r\n </Dropdown.Menu>\r\n </Dropdown>\r\n {\r\n accountResult.status === 'A' &&\r\n <><Button id='Deactivate' variant=\"danger\" size ='sm' onClick={this.showChangeAccountStatusConfirmation}>Deactivate</Button> </>\r\n }\r\n {\r\n accountResult.status !== 'A' &&\r\n <><Button id='Activate' variant=\"secondary\" size ='sm' onClick={this.showChangeAccountStatusConfirmation}> Activate </Button> </>\r\n }\r\n <Button variant=\"danger\" size ='sm' onClick={this.showDeleteConfirmation} >Delete</Button>\r\n\r\n </td>\r\n </tr>\r\n )\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n </Col>\r\n </Row>\r\n <Row> </Row>\r\n <Row>\r\n <Col style={{marginLeft: 4}}>Displaying Results: {paginationHelper.currentPageStartingRecordNumber}-{paginationHelper.currentPageEndingRecordNumber} of {this.state.filteredList.length}</Col>\r\n <Col><Paginator style={{ justifyContent: 'center' }} componentName={componentName} numberOfVisibleRecords={numberOfVisibleRecords} numberOfPages={numberOfPages} ></Paginator></Col>\r\n </Row>\r\n\r\n </Container>\r\n <Loading loadingIndicator={this.state.status === LOADING_STATUES.LOADING} />\r\n <Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} type={this.state.alertType} />\r\n <Confirmation show={this.state.showDeleteConfirmationDialog} cancelConfirmation={this.hideDeleteConfirmation} proceedConfirmation={this.handleDeleteAccount} question={'Delete account ' + this.state.selectedAccountName + ' and users?'} />\r\n <Confirmation show={this.state.showChangeAccountStatusConfirmationDialog} cancelConfirmation={this.hideChangeAccountStatusConfirmation} proceedConfirmation={this.handleChangeAccountStatus} question={this.state.activateOrDeactivate + ' Account ' + this.state.selectedAccountName + \" and users?\"} />\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Accounts);","import React from 'react';\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../common/form/FormTemplate.js\";\r\nimport { Form, Button, Container, Row, Col } from 'react-bootstrap'\r\nimport PageBanner from \"../common/page/PageBanner\";\r\nimport PrimaryButton from \"../common/form/PrimaryButton\";\r\nimport Alert from '../common/modal/Alert.js';\r\nimport { checkIconGreen, spinnerIconGray } from \"../../img/font_awesome/font_awesome\"\r\nimport { setSelectedControlPanelType, AccountsControlPanelKey } from \"../../redux/actions/controlPanelActions.js\";\r\nimport { saveAccount } from \"../../redux/actions/accountActions.js\";\r\nimport Loading from '../common/modal/Loading.js';\r\nimport { LOADING_STATUES, ALERT_TYPES } from \"../constants/constants\";\r\nimport { idText } from 'typescript';\r\n\r\nconst componentName = AccountsControlPanelKey;\r\n\r\nconst mapStateToProps = (state) => {\r\n\treturn {\r\n\t\taccountTypes: state.accountTypesReducer.codeDescriptionResultList,\r\n\t\taccountListFilters: state.accountListFiltersReducer,\r\n\t\tcountyConfigFlatFee: state.countyConfigFlatFeeReducer,\r\n\t\trole: state.currentUserReducer.role,\r\n\t\tcountyConfigBillingSchedule: state.countyConfigBillingScheduleReducer,\r\n\t\tavailableDocumentTypes: state.documentTypesWithBlankReducer.codeDescriptionResultList\r\n\t};\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tsetSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n\t}\r\n}\r\n\r\nconst DEFAULT_IMAGE_CHARGE_METHOD = 'PAGE';\r\n\r\nconst NO_ID = 0;\r\n\r\nclass AccountDocTypes extends React.Component {\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\taccountId: NO_ID,\r\n\t\t\terrors: {},\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\",\r\n\t\t\tredirect: false,\r\n\t\t\tstatus: ''\r\n\t\t};\r\n\r\n\t\tthis.state = { ...this.state, ...this.getStateFromContent(null) };\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tlet value = event.target.value;\r\n\r\n\t\tthis.setState({\r\n\t\t\t[event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value),\r\n\t\t\terrors: {},\r\n\t\t\tstatus: ''\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tgetContainer = () => {\r\n\t\treturn {\r\n\t\t\taccountId: this.state.accountId,\r\n\t\t\taccountDocTypes: this.state.docTypes\r\n\t\t}\r\n\t}\r\n\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif (this.state.status === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountDocTypes\", this.getContainer(), { withCredentials: true })\r\n\t\t\t.then((response) => {\r\n\t\t\t\tconst content = response.data.content;\r\n\t\t\t\tlet newState = {\r\n\t\t\t\t\t...this.getStateFromContent(content),\r\n\t\t\t\t\tstatus: \"SUCCESS\",\r\n\t\t\t\t\tredirect: false\r\n\t\t\t\t};\r\n\r\n\t\t\t\tthis.setState(newState);\r\n\t\t\t}, (error) => {\r\n\t\t\t\tthis.setState({ status: \"\", redirect: false }, this.showAlert(error.message));\r\n\t\t\t});\r\n\t}\r\n\r\n\thandleCancel = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t}\r\n\r\n\tshowLoading = () => {\r\n\t\tif ((this.state.status === \"\") || (this.state.status === \"SUCCESS\")) {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thideLoading = (loadingStatus) => {\r\n\t\tif (loadingStatus === 'ERROR') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: \"\"\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: \"\"\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tcreateDefaultRow = () => {\r\n\t\treturn {\r\n\t\t\taccountId: this.state.accountId,\r\n\t\t\tdocumentType: '',\r\n\t\t\tid: NO_ID,\r\n\t\t\timageChargeMethod: DEFAULT_IMAGE_CHARGE_METHOD,\r\n\t\t\timageRetrieval: true,\r\n\t\t\tpreviewRetrieval: true\r\n\t\t};\r\n\t}\r\n\r\n\thandleMoreRows = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tlet newRows = [];\r\n\r\n\t\tfor (let i = 0; i < 5; ++i) {\r\n\t\t\tnewRows = newRows.concat([this.createDefaultRow()]);\r\n\t\t}\r\n\r\n\t\tthis.setState({\r\n\t\t\tstatus: '',\r\n\t\t\tdocTypes: [...this.state.docTypes, ...newRows]\r\n\t\t});\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tconst targetId = event.target.id;\r\n\t\tconsole.log(targetId);\r\n\t\tlet docTypes = [...this.state.docTypes];\r\n\r\n\t\tif (targetId.includes(\"documentType\")) {\r\n\t\t\tconst index = targetId.replace(\"documentType\", \"\");\r\n\t\t\tlet docType = { ...docTypes[index] };\r\n\t\t\tdocType.documentType = event.target.value;\r\n\t\t\tdocTypes[index] = docType;\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: \"\",\r\n\t\t\t\tdocTypes\r\n\t\t\t});\r\n\t\t} else if (targetId.includes(\"imageChargeMethod\")) {\r\n\t\t\tconst index = targetId.replace(\"imageChargeMethod\", \"\");\r\n\t\t\tlet docType = { ...docTypes[index] };\r\n\t\t\tdocType.imageChargeMethod = event.target.value;\r\n\t\t\tdocTypes[index] = docType;\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: \"\",\r\n\t\t\t\tdocTypes\r\n\t\t\t});\r\n\t\t} else if (targetId.includes(\"imageRetrieval\")) {\r\n\t\t\tconst index = targetId.replace(\"imageRetrieval\", \"\");\r\n\t\t\tlet docType = { ...docTypes[index] };\r\n\t\t\tdocType.imageRetrieval = event.target.value;\r\n\t\t\tdocTypes[index] = docType;\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: \"\",\r\n\t\t\t\tdocTypes\r\n\t\t\t});\r\n\t\t} else if (targetId.includes(\"previewRetrieval\")) {\r\n\t\t\tconst index = targetId.replace(\"previewRetrieval\", \"\");\r\n\t\t\tlet docType = { ...docTypes[index] };\r\n\t\t\tdocType.previewRetrieval = event.target.value;\r\n\t\t\tdocTypes[index] = docType;\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: \"\",\r\n\t\t\t\tdocTypes\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: \"\",\r\n\t\t\t\t[event.target.id]: event.target.value ? event.target.value : 0\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\thandleReorganizeRows = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif (this.state.status === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountDocTypes/organize\", this.getContainer(), { withCredentials: true })\r\n\t\t\t.then((response) => {\r\n\t\t\t\tconst content = response.data.content;\r\n\t\t\t\tlet newState = {\r\n\t\t\t\t\t...this.getStateFromContent(content),\r\n\t\t\t\t\tstatus: \"\",\r\n\t\t\t\t\tredirect: false\r\n\t\t\t\t};\r\n\r\n\t\t\t\tthis.setState(newState);\r\n\t\t\t}, (error) => {\r\n\t\t\t\tthis.setState({ status: \"\", redirect: false }, this.showAlert(error.message));\r\n\t\t\t});\r\n\t}\r\n\r\n\thandleRemoveRow = (event) => {\r\n\t\tlet indexToRemove = event.target.id.replace(\"remove\", \"\");\r\n\t\tindexToRemove = parseInt(indexToRemove);\r\n\t\tlet docTypes = this.state.docTypes;\r\n\t\tdocTypes.splice(indexToRemove, 1);\r\n\t\tthis.setState({\r\n\t\t\tstatus: \"\",\r\n\t\t\tdocTypes: docTypes\r\n\t\t})\r\n\t}\r\n\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: true,\r\n\t\t\talertMessage\r\n\t\t})\r\n\t}\r\n\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: '',\r\n\t\t\talertType: ''\r\n\t\t})\r\n\r\n\t\tif (this.state.redirect) {\r\n\t\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\taxios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountDocTypes/\" + this.props.match.params.id, { withCredentials: true })\r\n\t\t\t.then(\r\n\t\t\t\t(response) => {\r\n\t\t\t\t\tconst content = response.data.content;\r\n\t\t\t\t\tlet newState = this.getStateFromContent(content);\r\n\r\n\t\t\t\t\tthis.setState(newState);\r\n\t\t\t\t},\r\n\t\t\t\t(error) => {\r\n\t\t\t\t\tconsole.log(error);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t}\r\n\r\n\tgetStateFromContent = (content) => {\r\n\t\tif (content === null) {\r\n\t\t\treturn {\r\n\t\t\t\taccountId: NO_ID,\r\n\t\t\t\tdocTypes: [this.createDefaultRow()]\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tlet container = content.accountDocTypesContainer;\r\n\r\n\t\t\treturn {\r\n\t\t\t\tdocTypes: container.accountDocTypes,\r\n\t\t\t\taccountId: container.accountId\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\ttrueFalseOptions = (isTrue) => {\r\n\t\tif (isTrue) {\r\n\t\t\treturn <>\r\n\t\t\t\t<option key=\"true\" selected value=\"true\">Yes</option>\r\n\t\t\t\t<option key=\"false\" value=\"false\">No</option>\r\n\t\t\t</>;\r\n\t\t} else {\r\n\t\t\treturn <>\r\n\t\t\t\t<option key=\"true\" value=\"true\">Yes</option>\r\n\t\t\t\t<option key=\"false\" selected value=\"false\">No</option>\r\n\t\t\t</>;\r\n\t\t}\r\n\t}\r\n\r\n\tchargeMethodOptions = (method) => {\r\n\t\tif (method === 'PAGE') {\r\n\t\t\treturn <>\r\n\t\t\t\t<option key=\"Document\" selected value=\"DOCUMENT\">Document</option>\r\n\t\t\t\t<option key=\"Page\" value=\"PAGE\">Page</option>\r\n\t\t\t</>;\r\n\t\t} else {\r\n\t\t\treturn <>\r\n\t\t\t\t<option key=\"Document\" value=\"DOCUMENT\">Document</option>\r\n\t\t\t\t<option key=\"Page\" selected value=\"PAGE\">Page</option>\r\n\t\t\t</>;\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tlet formTemplateMarginLeft;\r\n\t\tlet formTemplateMarginRight;\r\n\r\n\t\tconsole.log('bxp: sideNavigationOpen: ' + this.props.sideNavigationOpen);\r\n\r\n\t\tif (this.props.formOnly) {\r\n\t\t\tformTemplateMarginLeft = 0\r\n\t\t\tformTemplateMarginRight = 0\r\n\t\t} else {\r\n\t\t\tformTemplateMarginLeft = 270\r\n\t\t\tformTemplateMarginRight = 20\r\n\t\t}\r\n\r\n\t\tlet pageButtons = [{ label: 'Add', onClickAction: this.handleMoreRows, className: 'btn btn-secondary btn-sm' }, { label: 'Organize', onClickAction: this.handleReorganizeRows, className: 'btn btn-secondary btn-sm' }]\r\n\r\n\t\tlet docTypesTable =\r\n\t\t\t<div>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.state.docTypes.map((docType, index) => (\r\n\t\t\t\t\t\t<Form.Row>\r\n\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t<div style={{ display: 'inline-block', marginLeft: 4, minWidth: 300 }}>\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t<Form.Control as='select' id={'documentType' + index} disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} >\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tthis.props.availableDocumentTypes &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tthis.props.availableDocumentTypes.map((option) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (docType.documentType === option.code)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (<option key={option.code} selected value={option.code}>{option.description}</option>)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (<option key={option.code} value={option.code}>{option.description}</option>)\r\n\t\t\t\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</Form.Control>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t<div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t<Form.Control as='select' id={'imageChargeMethod' + index} disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} value={this.state.docTypes[index].imageChargeMethod} style={{ maxWidth: 130 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{this.chargeMethodOptions(this.state.docTypes[index].imageChargeMethod)}\r\n\t\t\t\t\t\t\t\t\t\t</Form.Control>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t<div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t<Form.Control as='select' id={'previewRetrieval' + index} disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} value={this.state.docTypes[index].previewRetrieval} style={{ maxWidth: 130 }} >\r\n\t\t\t\t\t\t\t\t\t\t\t{this.trueFalseOptions(this.state.docTypes[index].previewRetrieval)}\r\n\t\t\t\t\t\t\t\t\t\t</Form.Control>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t<div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t<Form.Control as='select' id={'imageRetrieval' + index} disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} value={this.state.docTypes[index].imageRetrieval} style={{ maxWidth: 130 }} >\r\n\t\t\t\t\t\t\t\t\t\t\t{this.trueFalseOptions(this.state.docTypes[index].imageRetrieval)}\r\n\t\t\t\t\t\t\t\t\t\t</Form.Control>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t(index > -1) &&\r\n\t\t\t\t\t\t\t\t\t<Button id={'remove' + index} variant=\"danger\" size=\"sm\" style={{ margin: 1 }} disabled={this.state.status === LOADING_STATUES.LOADING} onClick={this.handleRemoveRow}>Remove</Button>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Form.Row>\r\n\t\t\t\t\t))\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\r\n\t\treturn (\r\n\t\t\t<div style={{ marginLeft: formTemplateMarginLeft, marginRight: formTemplateMarginRight, marginTop: 4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n\t\t\t\t<PageBanner pageHeading={\"Account Document Type Settings - \" + this.props.match.params.name} buttons={pageButtons} />\r\n\t\t\t\t<Container fluid=\"true\" style={{ paddingLeft: 50, paddingBottom: 50, marginTop: 10, marginLeft: 4, marginRight: 4, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n\t\t\t\t\t<Row> </Row>\r\n\t\t\t\t\t<Form onSubmit={this.handleSubmit}>\r\n\t\t\t\t\t\t<Form.Row>\r\n\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t<div style={{ display: 'inline-block', marginLeft: 4, minWidth: 300 }}>\r\n\t\t\t\t\t\t\t\t\t<div>Document Type:</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t<div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n\t\t\t\t\t\t\t\t\t<div>Charge Method:</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t<div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n\t\t\t\t\t\t\t\t\t<div>Show Preview:</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t\t<div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n\t\t\t\t\t\t\t\t\t<div>Show Image:</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Form.Row>\r\n\t\t\t\t\t\t{docTypesTable}\r\n\t\t\t\t\t\t<Row> </Row>\r\n\t\t\t\t\t\t<PrimaryButton buttonLabel=\"Submit\" disabled={this.state.status === LOADING_STATUES.LOADING} /> \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.state.status === LOADING_STATUES.SUCCESS &&\r\n\t\t\t\t\t\t\t<span style={{ width: 18, verticalAlign: \"bottom\", paddingBottom: 1, display: \"inline-block\" }}>{checkIconGreen}</span>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.state.status === LOADING_STATUES.LOADING &&\r\n\t\t\t\t\t\t\t<span style={{ width: 18, verticalAlign: \"bottom\", marginBottom: 1, display: \"inline-block\" }}>{spinnerIconGray}</span>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</Form>\r\n\t\t\t\t</Container>\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} type={ALERT_TYPES.WARNING} />\r\n\t\t\t</div>\r\n\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AccountDocTypes);\r\n","export const trimAccountFields = (account) => {\r\n let trimmedAccount = {};\r\n\r\n // Account Name\r\n if (account.name) {\r\n let name = account.name.trim();\r\n name = {name};\r\n trimmedAccount = {...trimmedAccount, ...name};\r\n }\r\n\r\n // LandLink Account\r\n if (account.landLinkAccount) {\r\n let landLinkAccount = account.landLinkAccount.trim();\r\n landLinkAccount = {landLinkAccount};\r\n trimmedAccount = {...trimmedAccount, ...landLinkAccount};\r\n }\r\n\r\n // Company\r\n if (account.company) {\r\n let company = account.company.trim();\r\n company = {company};\r\n trimmedAccount = {...trimmedAccount, ...company};\r\n }\r\n\r\n // Address\r\n if (account.address) {\r\n let address = account.address.trim();\r\n address = {address};\r\n trimmedAccount = {...trimmedAccount, ...address};\r\n }\r\n\r\n // City\r\n if (account.city) {\r\n let city = account.city.trim();\r\n city = {city};\r\n trimmedAccount = {...trimmedAccount, ...city};\r\n }\r\n\r\n // Email\r\n if (account.email) {\r\n let email = account.email.trim();\r\n email = {email};\r\n trimmedAccount = {...trimmedAccount, ...email};\r\n }\r\n return trimmedAccount;\r\n}\r\n\r\n// This function is used by different user forms in the app.\r\n// Different forms may or may not contain a certain field. \r\n// For example, you can't change the username on an existing user, so its form doesn't have username.\r\n// Hence, the checks for undefined to make sure the field is in the user object.\r\nexport const validateAccount = (account, validateAccountName = true) => {\r\n let errors = {};\r\n\r\n // First Name\r\n if (validateAccountName && account.name !== undefined) {\r\n if (!account.name) {\r\n errors[\"name\"] = \"Required.\";\r\n return errors;\r\n }\r\n\r\n if (account.name && account.name.length > 60) {\r\n errors[\"name\"] = \"60 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n const landLinkAccount = account.landLinkAccount;\r\n\r\n if(/\\D/.test(landLinkAccount)) {\r\n errors[\"landLinkAccount\"] = \"Numeric Account Number\";\r\n return errors;\r\n }\r\n\r\n // Address\r\n if (account.address !== undefined) {\r\n if (account.address && account.address.length > 50) {\r\n errors[\"address\"] = \"50 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // City\r\n if (account.city !== undefined) {\r\n if (account.city && account.city.length > 50) {\r\n errors[\"city\"] = \"50 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // Zip\r\n if (account.zip && account.zip.length > 0 && account.zip.length < 5) {\r\n errors[\"zip\"] = \"5-digit zip.\";\r\n return errors;\r\n }\r\n\r\n if (account.zip && account.zip.search(/^[0-9]+$/) === -1) {\r\n errors[\"zip\"] = \"Numbers only.\";\r\n return errors;\r\n }\r\n\r\n // Email\r\n if (account.email !== undefined) {\r\n if (account.email && account.email.length > 50) {\r\n errors[\"email\"] = \"50 characters max.\";\r\n return errors;\r\n }\r\n }\r\n\r\n // Phone \r\n if (account.phone && account.phone.length < 14) {\r\n errors[\"phone\"] = \"(XXX) XXX-XXXX\";\r\n return errors;\r\n }\r\n \r\n return errors;\r\n}","import React from 'react';\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport usStates from \"../../config/us_states.json\";\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport Alert from '../common/modal/Alert';\r\nimport { setSelectedControlPanelType, AccountsControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport { saveAccount } from \"../../redux/actions/accountActions\";\r\nimport Loading from '../common/modal/Loading';\r\nimport Confirmation from '../common/modal/Confirmation';\r\nimport { formatPhone, formatZip } from \"../common/function/formattingUtils.js\";\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\nimport { validateAccount, trimAccountFields } from \"../common/function/accountValidation\";\r\n\r\nconst componentName = AccountsControlPanelKey;\r\n\r\nconst mapStateToProps = (state) => {\r\n\treturn {\r\n\t\taccountTypes: state.accountTypesReducer.codeDescriptionResultList,\r\n\t\tpaymentMethodTypesAll: state.paymentMethodTypesAllReducer.codeDescriptionResultList,\r\n\t\tpaymentMethodTypesNonALaCarte: state.paymentMethodTypesNonALaCarteReducer.codeDescriptionResultList,\r\n\t\taccountListFilters: state.accountListFiltersReducer,\r\n\t\tisTorrens : state.landlinkConfigReducer.torrens,\r\n\t\tcountyConfigFlatFee: state.countyConfigFlatFeeReducer,\r\n\t\trole: state.currentUserReducer.role,\r\n\t\tcountyConfigBillingSchedule: state.countyConfigBillingScheduleReducer\r\n\t};\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tsetSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName)),\r\n\t\tsaveAccount: (account, callback) => dispatch(saveAccount(account, callback))\r\n\t}\r\n}\r\n\r\nclass AccountEntry extends React.Component {\r\n\tstate = {\r\n\t\tid: 0,\r\n\t\tname: '',\r\n\t\tflatFeeRateLevel: 0,\r\n\t\tmonthlyFee: 0,\r\n\t\taccountType: 'A_LA_CARTE',\r\n\t\tpaymentMethod: 'ESCROW',\r\n\t\taddress: '',\r\n\t\tcity: '',\r\n\t\tstate: '',\r\n\t\tzip: '',\r\n\t\tphone: '',\r\n\t\temail: '',\t\r\n\t\tstatus: 'A',\r\n\t\tlandLinkAccount: '',\r\n\t\tlastTasks: '',\r\n\t\tpostToLandLink: false,\r\n\t\tcountyConfigFlatFee: {},\r\n\t\tshowDeleteConfirmationDialog: false,\r\n\t\tloadingStatus: '', // Account has another field called status, so I need to call this field loadingStatus.\r\n\t\terrors: {},\r\n\t\tshowAlert: false,\r\n\t\talertMessage: \"\",\r\n\t\tredirect: false,\r\n\t\tuserReload: false\r\n\t }\r\n\r\n\thandleChange = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tlet value = event.target.value;\r\n\t\tif (event.target.id === 'phone') {\r\n\t\t value = formatPhone(value, this.state.phone);\r\n\t\t} else if (event.target.id === 'zip') {\r\n\t\t\tvalue = formatZip(value);\r\n\t\t}\r\n\t\t \r\n\t\tthis.setState({\r\n\t\t\t[event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value),\r\n\t\t\terrors: {}\r\n\t\t})\r\n\r\n\t\tif (this.state.paymentMethod !== 'CREDIT_CARD') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tpostToLandLink: true\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\t\r\n\tshowLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thideLoading = (loadingStatus) => {\r\n\t\tif (loadingStatus === 'ERROR') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: \"\"\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: \"\"\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\thandleCancel = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t}\r\n\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tconst trimmedAccountFields = trimAccountFields(this.state);\t\t\t\r\n\t\tthis.setState({...trimmedAccountFields},\r\n\t\t\tfunction() { \r\n\t\t\t\tthis.validateAndSubmit();\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n\r\n\thandleSaveResult = (redirect, errorFound, message) => {\r\n\t\tlet alertType = errorFound ? 'WARNING': '';\r\n\t\tthis.setState({loadingStatus: \"\", redirect, alertType}, this.showAlert(message))\r\n\t}\r\n\r\n\tvalidateAndSubmit = () => {\r\n\t\tlet errors = validateAccount(this.state, this.state.id === 0);\r\n\t\tif (errors && Object.keys(errors).length > 0) {\r\n\t\t\tthis.setState({ errors });\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\tthis.props.saveAccount(this.state, this.handleSaveResult);\r\n\t\t}\r\n\t}\r\n\r\n\t// Delete methods\r\n\thandleDeleteAccount = () => {\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\tlet request = { \r\n\t\t\t\taccountId: this.state.id, \r\n\t\t\t\tfilterText: this.props.accountListFilters.filterText, \r\n\t\t\t\tincludeInactive: \r\n\t\t\t\tthis.props.accountListFilters.includeInactive \r\n\t\t\t};\r\n\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountDelete\", request, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", redirect: true }, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", redirect: false }, this.showAlert(error.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tshowDeleteConfirmation = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\tshowDeleteConfirmationDialog: true\r\n\t\t})\r\n\t}\r\n\r\n\thideDeleteConfirmation = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowDeleteConfirmationDialog: false\r\n\t\t})\r\n\t}\r\n\r\n\t// Delete methods - End\r\n\thandleChangeAccountStatus = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountChangeStatusSingle\", { accountId: this.state.id, filterText: this.props.accountListFilters.filterText, includeInactive: this.props.accountListFilters.includeInactive }, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", status: response.data.content.status }, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\" }, this.showAlert(error.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.props.setSelectedControlPanelType();\r\n\t\r\n\t\t// new account\r\n\t\tif (this.props.match.params.id === '0') {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\taxios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/account/\" + this.props.match.params.id, { withCredentials: true })\r\n\t\t.then(\r\n\t\t\t(response) => {\r\n\t\t\t\tconst content = response.data.content;\r\n\t\t\t\tlet newState = this.getStateFromContent(content);\r\n\r\n\t\t\t\tthis.setState(newState);\r\n\t\t\t},\r\n\t\t\t(error) => {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tgetStateFromContent = (content) => {\r\n\t\treturn {\r\n\t\t\tid: content.id,\r\n\t\t\tname: content.name,\r\n\t\t\taccountType: content.accountType,\r\n\t\t\tpaymentMethod: content.paymentMethod,\r\n\t\t\tmonthlyFee: content.monthlyFee,\r\n\t\t\taddress: content.address,\r\n\t\t\tcity: content.city,\r\n\t\t\tstate: content.state,\r\n\t\t\tzip: content.zip,\r\n\t\t\tphone: content.phone,\r\n\t\t\temail: content.email,\r\n\t\t\tstatus: content.status,\r\n\t\t\tlandLinkAccount: content.landLinkAccount,\r\n\t\t\tlastTasks: content.lastTasks,\r\n\t\t\tpostToLandLink: content.postToLandLink,\r\n\t\t\tflatFeeRateLevel: content.flatFeeRateLevel,\r\n\t\t\tcountyConfigFlatFee: content.countyConfigFlatFee,\r\n\t\t\tuserReload: content.userReload,\r\n\t\t\talertType: ''\r\n\t\t};\r\n\t}\r\n\r\n\tcreateRateOption = (index, rate) => {\r\n\t\tlet item = 'image';\r\n\r\n\t\tif (rate.unlimitedNumberOfPages) {\r\n\t\t\treturn {code: index, disabled: !rate.option, description: 'Unlimited ' + item + 's for $' + rate.cost};\r\n\t\t} else {\r\n\t\t\tlet itemDescription = (rate.numberOfPages == 1) ? item : item + 's';\r\n\t\t\treturn {code: index, disabled: !rate.option, description: rate.numberOfPages + ' ' + itemDescription + \r\n\t\t\t\t' for $' + rate.cost};\r\n\t\t}\r\n\t}\r\n\r\n\tcreateRateOptions = () => {\r\n\t\tlet flatFeeRates = [{code: 0, description: \"Free\"}];\r\n\r\n\t\tconst countyConfigFlatFee = this.state.countyConfigFlatFee && Object.keys(this.state.countyConfigFlatFee).length > 0 ? this.state.countyConfigFlatFee : this.props.countyConfigFlatFee;\r\n\t\r\n\t\t// County doesn't charge for images, so the only available flat fee option is Free\r\n\t\tif (countyConfigFlatFee.chargingImages === false) {\r\n\t\t\treturn flatFeeRates;\r\n\t\t}\r\n\r\n\t\tif (countyConfigFlatFee.rates) {\r\n\t\t\tfor (let i = 0; i < 5; ++i) {\r\n\t\t\t\tflatFeeRates.push(this.createRateOption(i+1, countyConfigFlatFee.rates[i]));\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn flatFeeRates;\r\n\t}\r\n\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: '',\r\n\t\t\talertType: ''\r\n\t\t})\r\n\t\r\n\t\tif (this.state.redirect) {\r\n\t\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\r\n\t\tlet paymentMethodOptions = this.props.paymentMethodTypesAll;\r\n\t\tif (this.state.accountType !== 'A_LA_CARTE') {\r\n\t\t\tpaymentMethodOptions = this.props.paymentMethodTypesNonALaCarte;\r\n\t\t} \r\n\r\n\t\tlet disabledFlag = this.state.status !== 'A' && this.state.id !== 0;\r\n\r\n\t\t// Not disabled, show a dropdown. Otherwise, show a text field.\r\n\t\tlet accountTypeField = { id: 'accountType', label: 'Account Type', fieldType: 'select', value: this.state.accountType, options: this.props.accountTypes, style: { minWidth: 220 } }\r\n\t\tlet paymentMethodField = { id: 'paymentMethod', label: 'Payment Method', fieldType: 'select', value: this.state.paymentMethod, options: paymentMethodOptions }\r\n\t\tlet userReloadField = { id: 'userReload', label: 'Reload by Account Admin', fieldType: 'select', hideField: (this.state.accountType !== 'FLAT_FEE' || this.state.flatFeeRateLevel === 0 || this.state.flatFeeRateLevel == \"0\" ), value: this.state.userReload }\r\n\t\tlet postToLandLinkField = { id: 'postToLandLink', label: 'Post to LandLink', fieldType: 'select', hideField: this.state.paymentMethod !== 'CREDIT_CARD', value: this.state.postToLandLink}\r\n\t\t\r\n\t\tif (disabledFlag) {\r\n\t\t\taccountTypeField = { id: 'accountType', label: 'Account Type', fieldType: 'text', value: this.state.accountType, disabled:true }\r\n\t\t\tpaymentMethodField = { id: 'paymentMethod', label: 'Payment Method', fieldType: 'text', value: this.state.paymentMethod, disabled:true }\r\n\t\t\tuserReloadField = { id: 'userReload', label: 'Reload by Account Admin', fieldType: 'text', hideField: (this.state.accountType !== 'FLAT_FEE' || this.state.flatFeeRateLevel === 0 || this.state.flatFeeRateLevel == \"0\"), value: this.state.userReload === true ? \"Yes\" : \"No\", disabled:true }\r\n\t\t\tpostToLandLinkField = { id: 'postToLandLink', label: 'Post to LandLink', fieldType: 'text', hideField: this.state.paymentMethod !== 'CREDIT_CARD', value: this.state.postToLandLink === true ? \"Yes\" : \"No\", disabled:true }\r\n\t\t}\r\n\r\n\t\tlet flatFeeRateOptions = this.createRateOptions();\r\n\t\t\r\n\t\tlet landlinkAccountRequired = (this.state.accountType === 'A_LA_CARTE' && this.state.paymentMethod !== 'CREDIT_CARD') \r\n\t\t\t\t\t\t\t|| (this.state.accountType === 'FLAT_FEE' && this.state.flatFeeRateLevel !== \"0\" && this.state.flatFeeRateLevel !== 0) \r\n\t\t\t\t\t\t\t|| (this.state.paymentMethod === 'CREDIT_CARD' && (this.state.postToLandLink === true || this.state.postToLandLink === 'true')) \r\n\t\t\t\t\t\t\t\r\n\t\tlet formGroupRows = [\r\n\t\t\t{\r\n\t\t\t\tformGroups: [accountTypeField,\r\n\t\t\t\t\tpaymentMethodField,\r\n\t\t\t\t\t{ id: 'flatFeeRateLevel', label: 'Monthly Rate', fieldType: 'select', hideField: this.state.accountType !== 'FLAT_FEE', options: flatFeeRateOptions, value: this.state.flatFeeRateLevel },\r\n\t\t\t\t\t{ id: 'monthlyFee', label: 'Monthly Fee', fieldType: 'number', numberType: 'decimal', hideField: this.state.accountType === 'FLAT_FEE', value: this.state.monthlyFee, disabled: disabledFlag },\r\n\t\t\t\t\tuserReloadField]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'landLinkAccount', label: 'LandLink Account #', fieldType: 'text', maxLength: 10, value: this.state.landLinkAccount, required: landlinkAccountRequired, disabled: disabledFlag, error: this.state.errors['landLinkAccount'] },\r\n\t\t\t\t\tpostToLandLinkField]\r\n\t\t\t}]\r\n\r\n\t\tformGroupRows.push(\r\n\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'address', label: 'Address', fieldType: 'text', value: this.state.address, required: false, disabled: disabledFlag, error: this.state.errors['address'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'city', label: 'City', fieldType: 'text', value: this.state.city, required: false, disabled: disabledFlag, error: this.state.errors['city'] },\r\n\t\t\t\t{ id: 'state', label: 'State', fieldType: 'select', value: this.state.state, options: usStates, required: false, disabled: disabledFlag },\r\n\t\t\t\t{ id: 'zip', label: 'Zip (ex. 55111)', fieldType: 'zip', value: this.state.zip, required: false, disabled: disabledFlag, error: this.state.errors['zip'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'phone', label: 'Phone (ex. (612) 555-1234)', fieldType: 'tel', value: this.state.phone, required: false, disabled: disabledFlag, error: this.state.errors['phone'] },\r\n\t\t\t\t{ id: 'email', label: 'Email', fieldType: 'email', value: this.state.email, required: false, disabled: disabledFlag, error: this.state.errors['email'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [\r\n\t\t\t\t\t{ id: 'lastTasks', label: 'Last Tasks', fieldType: 'datetime', value: this.state.lastTasks, required: true, error: this.state.errors['lastTasks'] }\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t)\r\n\r\n\t\t// If new account, show the Account Name in the entry form.\r\n\t\tif (this.state.id === 0) {\r\n\t\t\tformGroupRows.splice(0, 0,\t{formGroups: [{ id: 'name', label: 'Account Name', fieldType: 'text', required: true }]} );\r\n\t\t}\r\n\t\t\r\n\t\tlet changeStatusLabel = 'Activate';\r\n\t\tif (this.state.status === 'A') {\r\n\t\t\tchangeStatusLabel = 'Deactivate';\r\n\t\t}\r\n\r\n\t\tlet pageButtons = [];\r\n\r\n\t\tpageButtons.push( {label:changeStatusLabel, onClickAction: this.handleChangeAccountStatus, className: 'btn btn-secondary btn-sm'} );\r\n\t\tpageButtons.push( {label:'Delete', onClickAction: this.showDeleteConfirmation, className: 'btn btn-danger btn-sm'} );\r\n\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: \"AccountEntry\",\r\n\t\t\tpageHeading: \"Account (\" + (this.state.id ? this.state.name + \")\" : 'new*)'), \r\n\t\t\tonChange: this.handleChange,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tonCancel: this.handleCancel,\r\n\t\t\tformGroupRows: formGroupRows,\r\n\t\t\tloadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n\t\t\tpageButtons: (this.state.id ? pageButtons : null) // Existing account, show page buttons. New account, don't.\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<FormTemplate {...formProps} />\r\n\t\t\t\t<Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING } />\r\n\t\t\t\t<Confirmation show={this.state.showDeleteConfirmationDialog} cancelConfirmation={this.hideDeleteConfirmation} proceedConfirmation={this.handleDeleteAccount} question={\"Delete account and its users?\"} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} type={this.state.alertType} />\r\n\t\t\t</>\r\n\t\t)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AccountEntry);\r\n","import axios from \"axios\";\r\n\r\nimport configData from \"../../config/config.json\";\r\n\r\nexport const saveAccount = (account, callback) => async dispatch => {\r\n\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/account\", account, { withCredentials: true })\r\n .then((response) => {\r\n dispatch({ type: 'LANDSHARK_ACCOUNTS', results: response.data.content }); \r\n callback(true, false, response.data.message);\r\n }, (error) => {\r\n callback(false, true, error.response.data.message); \r\n });\r\n};\r\n\r\n\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, AccountsControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport axios from \"axios\";\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\nimport Alert from '../common/modal/Alert';\r\n\r\nconst componentName = AccountsControlPanelKey;\r\n\r\nconst mapStateToProps = state => {\r\n\treturn {\r\n\t\tsideNavigationOpen: state.sideNavigationReducer\r\n\t};\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tsetSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n\t}\r\n}\r\n\r\nclass AccountReload extends React.Component {\r\n\tstate = {\r\n\t\tid: 0,\r\n\t\timagesRemaining: 0,\r\n\t\tcurrentImagesRemaining: 0,\r\n\t\tloadingStatus: '', \r\n\t\tshowAlert: false,\r\n\t\talertMessage: \"\",\r\n\t\tredirect: false\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tthis.setState({\r\n\t\t\t[event.target.id]: event.target.value ? event.target.value : 0\r\n\t\t})\r\n\t}\r\n\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountFlatFeeUsage\", this.state, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({loadingStatus: \"\", redirect: true}, this.showAlert(response.data.message))\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({loadingStatus: \"\", redirect: false}, this.showAlert(error.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\thandleCancel = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t}\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thideLoading = (message, status) => {\r\n\t\tif (status === 'ERROR') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: \"\"\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: \"\"\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\t\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t\r\n\t\tif (this.state.redirect) {\r\n\t\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t\t}\r\n\t}\r\n\t\r\n\tcomponentDidMount() {\r\n\t\taxios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountFlatFeeUsage/\" + this.props.match.params.id, { withCredentials: true })\r\n\t\t.then(\r\n\t\t (response) => {\r\n\t\t\tconst content = response.data.content;\r\n\t\t\tthis.setState( {\r\n\t\t\t\tid: content.id,\r\n\t\t\t\timagesRemaining: content.imagesRemaining,\r\n\t\t\t\tcurrentImagesRemaining: content.imagesRemaining\r\n\t\t\t});\r\n\t\t\t\r\n\t\t },\r\n\t\t (error) => {\r\n\t\t\tconsole.log(error);\r\n\t\t }\r\n\t\t);\r\n\t }\r\n\r\n\trender() {\t\t\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: \"AccountReload\",\r\n\t\t\tpageHeading: \"Flat Fee Usage Override - \" + this.props.match.params.name , \r\n\t\t\tonChange: this.handleChange,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tonCancel: this.handleCancel,\r\n\t\t\tformGroupRows: [\t\t\t\r\n\t\t\t\t{\r\n\t\t\t\t\tformGroups: [{ id: 'imagesRemaining', label: 'New Balance (Current Balance: ' + this.state.currentImagesRemaining + ')', fieldType: 'number', numberType:'integer', value: this.state.imagesRemaining, required: true }]\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<FormTemplate {...formProps} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n\t\t\t</>\r\n\t\t\t)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AccountReload);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport Alert from '../common/modal/Alert';\r\nimport configData from \"../../config/config.json\";\r\nimport axios from \"axios\";\r\nimport { AccountsControlPanelKey, setSelectedControlPanelType } from \"../../redux/actions/controlPanelActions\";\r\nimport { SearchByAddressKey, SearchByBookAndPageKey, SearchByDateKey, SearchByDocumentNumberKey,\r\n\tSearchByLegalDescriptionKey, SearchByNameKey, SearchByParcelIdKey, SearchByTorrensCertificateKey, SearchByTorrensTextKey, SearchByTractIndexNMIKey,\r\n\tSpecialSearchGrantorGranteeBookKey, SpecialSearchPlatKey, SpecialSearchTaxLienKey, SpecialSearchTractBookIdKey, SpecialSearchTractBookLegalKey } from \"../../redux/actions/searchActions\";\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\n\r\nconst componentName = AccountsControlPanelKey;\r\n\r\nconst mapStateToProps = (state) => {\r\n\treturn {\r\n\t\tsideNavigationOpen: state.sideNavigationReducer\r\n\t};\r\n}\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n\treturn { \r\n\t\tsetSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n\t}\r\n}\r\n \r\nclass AccountPageAccess extends React.Component {\r\n\tstate = {\r\n\t\tid: 0,\r\n\t\tsearchByAddress: false,\r\n\t\tsearchByBookAndPage: false,\r\n\t\tsearchByDate: false,\r\n\t\tsearchByDocumentNumber: false,\r\n\t\tsearchByLegalDescription: false,\r\n\t\tsearchByName: false,\r\n\t\tsearchByParcelId: false,\r\n\t\tsearchByTorrensCertificate: false,\r\n\t\tsearchByTorrensText: false,\r\n\t\tsearchByTractBookId: false,\r\n\t\tsearchByTractBookLegal: false,\r\n\t\tsearchByTractIndexNMI: false,\r\n\t\tsearchByGrantorGranteeBook: false,\r\n\t\tsearchByPlat: false,\r\n\t\tsearchByTaxLien: false,\r\n\t\tloadingStatus: '', // Account has another field called status, so I need to call this field loadingStatus.\r\n\t\tshowAlert: false,\r\n\t\talertMessage: \"\",\r\n\t\tredirect: false\r\n\t }\r\n\r\n\thandleChange = (event) => {\r\n\t\tthis.setState({\r\n\t\t [event.target.id]: event.target.value\r\n\t\t})\r\n\t}\r\n\t\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\tconst { loadingStatus, showAlert, alertMessage, redirect, ...request } = this.state; // remove UI only fields before submitting\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountPageAccess\", request, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({loadingStatus: \"\", redirect: true}, this.showAlert(response.data.message))\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({loadingStatus: \"\", redirect: false}, this.showAlert(error.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\thandleCancel = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\t\r\n\t\taxios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountPageAccess/\" + this.props.match.params.id, { withCredentials: true })\r\n\t\t.then(\r\n\t\t (response) => {\r\n\t\t\tconst content = response.data.content;\r\n\t\t\tthis.setState( {\r\n\t\t\t\tid: content.id,\r\n\t\t\t\tsearchByAddress: content.searchByAddress,\r\n\t\t\t\tsearchByBookAndPage: content.searchByBookAndPage,\r\n\t\t\t\tsearchByDate: content.searchByDate,\r\n\t\t\t\tsearchByDocumentNumber: content.searchByDocumentNumber,\r\n\t\t\t\tsearchByLegalDescription: content.searchByLegalDescription,\r\n\t\t\t\tsearchByName: content.searchByName,\r\n\t\t\t\tsearchByParcelId: content.searchByParcelId,\r\n\t\t\t\tsearchByTorrensCertificate: content.searchByTorrensCertificate,\r\n\t\t\t\tsearchByTorrensText: content.searchByTorrensText,\r\n\t\t\t\tsearchByTractBookId: content.searchByTractBookId,\r\n\t\t\t\tsearchByTractBookLegal: content.searchByTractBookLegal,\r\n\t\t\t\tsearchByTractIndexNMI: content.searchByTractIndexNMI,\r\n\t\t\t\tsearchByGrantorGranteeBook: content.searchByGrantorGranteeBook,\r\n\t\t\t\tsearchByPlat: content.searchByPlat,\r\n\t\t\t\tsearchByTaxLien: content.searchByTaxLien\r\n\t\t\t});\r\n\t\t\t\r\n\t\t },\r\n\t\t (error) => {\r\n\t\t\tconsole.log(error);\r\n\t\t }\r\n\t\t);\r\n\t }\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thideLoading = (message, status) => {\r\n\t\tif (status === 'ERROR') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: \"\"\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: \"\"\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\t\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t\r\n\t\tif (this.state.redirect) {\r\n\t\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\r\n\t\tlet formGroupRows = [\r\n\t\t{\r\n formGroups: [{ id: SearchByAddressKey, label: 'Address', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByAddress === true || this.state.searchByAddress=== 'true' }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByBookAndPageKey, label: 'Book & Page', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByBookAndPage === true || this.state.searchByBookAndPage=== 'true' }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByDateKey, label: 'Date', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByDate === true || this.state.searchByDate=== 'true' } ]\r\n },\r\n {\r\n formGroups: [{ id: SearchByDocumentNumberKey, label: 'Document Number', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByDocumentNumber === true || this.state.searchByDocumentNumber=== 'true' } ]\r\n },\r\n\t\t{\r\n\t\t\tformGroups: [{ id: SpecialSearchGrantorGranteeBookKey, label: 'Grantor Grantee Book', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByGrantorGranteeBook === true || this.state.searchByGrantorGranteeBook === 'true' }]\r\n\t\t},\r\n {\r\n formGroups: [{ id: SearchByLegalDescriptionKey, label: 'Legal Descriptions', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByLegalDescription === true || this.state.searchByLegalDescription=== 'true' } ]\r\n },\r\n {\r\n formGroups: [{ id: SearchByNameKey, label: 'Name', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByName === true || this.state.searchByName=== 'true' }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByParcelIdKey, label: 'Parcel Id', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByParcelId === true || this.state.searchByParcelId=== 'true' }]\r\n },\r\n\t\t{\r\n\t\t\tformGroups: [{ id: SpecialSearchPlatKey, label: 'Plat', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByPlat === true || this.state.searchByPlat === 'true' }]\r\n\t\t},\r\n {\r\n formGroups: [{ id: SpecialSearchTaxLienKey, label: 'Tax Lien', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTaxLien === true || this.state.searchByTaxLien === 'true' }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByTorrensCertificateKey, label: 'Torrens Certificate', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTorrensCertificate === true || this.state.searchByTorrensCertificate=== 'true' }, \r\n\t\t { id: SearchByTorrensTextKey, label: 'Torrens Text', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTorrensText === true || this.state.searchByTorrensText=== 'true' }]\r\n },\r\n\t\t{\r\n\t\t formGroups: [{ id: SpecialSearchTractBookIdKey, label: 'Tract Book Id', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTractBookId === true || this.state.searchByTractBookId === 'true' },\r\n\t\t \t { id: SpecialSearchTractBookLegalKey, label: 'Tract Book Legal', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTractBookLegal === true || this.state.searchByTractBookLegal === 'true' }]\r\n\t\t},\r\n\t\t{\r\n\t\t formGroups: [{ id: SearchByTractIndexNMIKey, label: 'Tract Index(NMI)', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTractIndexNMI === true || this.state.searchByTractIndexNMI === 'true' }]\r\n\t\t}\r\n\t\t]\r\n\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: \"AccountPageAccess\",\r\n\t\t\tpageHeading: \"Access - \" + this.props.match.params.name,\r\n\t\t\tonChange: this.handleChange,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tonCancel: this.handleCancel,\r\n\t\t\tformGroupRows: formGroupRows\r\n\t\t}\t\r\n\r\n\t\treturn (\r\n\t\t<>\r\n\t\t\t<FormTemplate {...formProps} />\r\n\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n\t\t</>\r\n\t\t)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(AccountPageAccess);\r\n","import React from 'react';\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport { connect } from \"react-redux\";\r\nimport FormTemplate from \"../common/form/FormTemplate.js\";\r\nimport Alert from '../common/modal/Alert.js';\r\nimport { setSelectedControlPanelType, AccountsControlPanelKey } from \"../../redux/actions/controlPanelActions.js\";\r\nimport { saveAccount } from \"../../redux/actions/accountActions.js\";\r\nimport Loading from '../common/modal/Loading.js';\r\nimport Confirmation from '../common/modal/Confirmation.js';\r\nimport { LOADING_STATUES } from \"../constants/constants.js\";\r\n\r\nconst componentName = AccountsControlPanelKey;\r\n\r\nconst mapStateToProps = (state) => {\r\n\treturn {\r\n\t\taccountTypes: state.accountTypesReducer.codeDescriptionResultList,\r\n\t\taccountListFilters: state.accountListFiltersReducer,\r\n\t\tcountyConfigFlatFee: state.countyConfigFlatFeeReducer,\r\n\t\trole: state.currentUserReducer.role,\r\n\t\tcountyConfigBillingSchedule: state.countyConfigBillingScheduleReducer\r\n\t};\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tsetSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n\t}\r\n}\r\n\r\nclass AccountTasks extends React.Component {\r\n\tstate = {\r\n\t\tid: 0,\r\n\t\taccountType: 'A_LA_CARTE',\r\n\t\tlastBilled: '',\r\n\t\tlastImageRenewal: '',\r\n\t\tlastTasks: '',\r\n\t\tneedsBilling: false,\r\n\t\tneedsImageRenewal: false, \r\n\t\tshowPrepareToRerunAccountTasksConfirmationDialog: false,\r\n\t\terrors: {},\r\n\t\tshowAlert: false,\r\n\t\talertMessage: \"\",\r\n\t\tredirect: false,\r\n\t\tstatus: ''\r\n\t }\r\n\r\n\thandleBilledNow = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif ((this.state.status === \"\") || (this.state.status === \"SUCCESS\")) {\r\n\t\t\tthis.setState({\r\n\t\t\t status: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountTasksBilledNow\", this.state, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tconst content = response.data.content;\r\n\t\t\t\t\tlet newState = {\r\n\t\t\t\t\t\t...this.getStateFromContent(content),\r\n\t\t\t\t\t\tstatus: \"\",\r\n\t\t\t\t\t\tredirect: false\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tthis.setState(newState, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({status: \"\", redirect: false}, this.showAlert(error.message));\r\n\t\t\t\t});\r\n\t}\r\n\r\n\thandleImageRenewNow = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif ((this.state.status === \"\") || (this.state.status === \"SUCCESS\")) {\r\n\t\t\tthis.setState({\r\n\t\t\t status: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountTasksImageRenewedNow\", this.state, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tconst content = response.data.content;\r\n\t\t\t\t\tlet newState = {\r\n\t\t\t\t\t\t...this.getStateFromContent(content),\r\n\t\t\t\t\t\tstatus: \"\",\r\n\t\t\t\t\t\tredirect: false\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tthis.setState(newState, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({status: \"\", redirect: false}, this.showAlert(error.message));\r\n\t\t\t\t});\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tlet value = event.target.value;\r\n\t\t \r\n\t\tthis.setState({\r\n\t\t\t[event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value),\r\n\t\t\terrors: {},\r\n\t\t\tstatus: ''\r\n\t\t})\r\n\r\n\t}\r\n\t\r\n\tgetAccountId = () => {\r\n\t\treturn { accountId: this.state.id };\r\n\t}\r\n\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif (this.state.status === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t status: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountTasks\", this.state, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tconst content = response.data.content;\r\n\t\t\t\t\tlet newState = {\r\n\t\t\t\t\t\t...this.getStateFromContent(content),\r\n\t\t\t\t\t\tstatus: \"SUCCESS\",\r\n\t\t\t\t\t\tredirect: false\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tthis.setState(newState);\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({status: \"\", redirect: false}, this.showAlert(error.message));\r\n\t\t\t\t});\r\n\t}\r\n\r\n\thandleCancel = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t}\r\n\r\n\tshowLoading = () => {\r\n\t\tif ((this.state.status === \"\") || (this.state.status === \"SUCCESS\")) {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thideLoading = (loadingStatus) => {\r\n\t\tif (loadingStatus === 'ERROR') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: \"\"\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: \"\"\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tshowPrepareToRerunAccountTasksConfirmation = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\tshowPrepareToRerunAccountTasksConfirmationDialog: true\r\n\t\t})\r\n\t}\r\n\r\n\thidePrepareToRerunAccountTasksConfirmation = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowPrepareToRerunAccountTasksConfirmationDialog: false\r\n\t\t})\r\n\t}\r\n\r\n\thandleRunAccountTasks = (event) => {\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/runAccountTasks\", this.getAccountId(), { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tconst content = response.data.content;\r\n\t\t\t\t\tlet newState = {\r\n\t\t\t\t\t\t...this.getStateFromContent(content),\r\n\t\t\t\t\t\tstatus: \"\"\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tthis.setState(newState, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({ status: \"\"}, this.showAlert(error.response.data.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t }\r\n\t\r\n\t handlePrepareToRerunAccountTasks = (event) => {\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/prepareToRerunAccountTasks\", this.getAccountId(), { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tconst content = response.data.content;\r\n\t\t\t\t\tlet newState = {\r\n\t\t\t\t\t\t...this.getStateFromContent(content),\r\n\t\t\t\t\t\tstatus: \"\"\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tthis.setState(newState, this.showAlert(response.data.message));\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({ status: \"\"}, this.showAlert(error.response.data.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t }\r\n\t\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: '',\r\n\t\t\talertType: ''\r\n\t\t})\r\n\t\r\n\t\tif (this.state.redirect) {\r\n\t\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\taxios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/accountTasks/\" + this.props.match.params.id, { withCredentials: true })\r\n\t\t.then(\r\n\t\t\t(response) => {\r\n\t\t\t\tconst content = response.data.content;\r\n\t\t\t\tlet newState = this.getStateFromContent(content);\r\n\r\n\t\t\t\tthis.setState(newState);\r\n\t\t\t},\r\n\t\t\t(error) => {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tgetStateFromContent = (content) => {\r\n\t\treturn {\r\n\t\t\taccountType: content.accountType,\r\n\t\t\tid: content.id,\r\n\t\t\tlastBilled: content.lastBilled,\r\n\t\t\tlastImageRenewal: content.lastImageRenewal,\r\n\t\t\tlastTasks: content.lastTasks,\r\n\t\t\tneedsBilling: content.needsBilling,\r\n\t\t\tneedsImageRenewal: content.needsImageRenewal,\r\n\t\t\tstatus: ''\r\n\t\t};\r\n\t}\r\n\r\n\trender() {\r\n\t\tlet formGroupRows = [];\r\n\r\n\t\tformGroupRows.push(\r\n\t\t\t{\r\n\t\t\t\tformGroups: [\r\n\t\t\t\t\t{ id: 'lastBilled', label: 'Last Billed', fieldType: 'datetime', value: this.state.lastBilled, required: false, error: this.state.errors['lastBilled'] },\r\n\t\t\t\t\t{ id: 'needsBilling', label: 'Needs Billing', fieldType: 'select', value: this.state.needsBilling, required: true },\r\n\t\t\t\t\t{ id: 'billedNow', label: 'Indicate Billed Now', fieldType: 'button', onClick: this.handleBilledNow, hideField: false }\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [\r\n\t\t\t\t\t{ id: 'lastImageRenewal', label: 'Last Image Renewal', fieldType: 'datetime', value: this.state.lastImageRenewal, required: false, error: this.state.errors['lastImageRenewal'] },\r\n\t\t\t\t\t{ id: 'needsImageRenewal', label: 'Needs Image Renewal', fieldType: 'select', value: this.state.needsImageRenewal, required: true },\r\n\t\t\t\t\t{ id: 'imageRenewNow', label: 'Indicate Renewed Now', fieldType: 'button', onClick: this.handleImageRenewNow, hideField: false }\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [\r\n\t\t\t\t\t{ id: 'lastTasks', label: 'Last Tasks', fieldType: 'datetime', value: this.state.lastTasks, required: false, error: this.state.errors['lastTasks'] }\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\tlet secondaryButtons = [];\r\n\r\n\t\tif (this.props.role === 'TRIMIN') {\r\n\t\t\tsecondaryButtons.push( {label:'Prepare to Rerun Account Tasks', onClick: this.showPrepareToRerunAccountTasksConfirmation, className: 'btn btn-secondary btn-sm'} );\r\n\t\t}\r\n\t\r\n\t\tsecondaryButtons.push( {label:'Run Account Tasks', onClick: this.handleRunAccountTasks, className: 'btn btn-secondary btn-sm'} );\r\n\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: \"AccountTasks\",\r\n\t\t\tpageHeading: \"Account Tasks - \" + this.props.match.params.name,\r\n\t\t\tonChange: this.handleChange,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tonCancel: this.handleCancel,\r\n\t\t\tformGroupRows: formGroupRows,\r\n\t\t\tsuccessIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n\t\t\tloadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n\t\t\tsecondaryButtons: secondaryButtons\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<FormTemplate {...formProps} />\r\n\t\t\t\t<Confirmation show={this.state.showPrepareToRerunAccountTasksConfirmationDialog} cancelConfirmation={this.hidePrepareToRerunAccountTasksConfirmation} proceedConfirmation={this.handlePrepareToRerunAccountTasks} question={\"Prepare to rerun account tasks?\"} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} type={this.state.alertType} />\r\n\t\t\t</>\r\n\t\t)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AccountTasks);\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport { Form } from 'react-bootstrap'\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, CreditCardAlternateRatesControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = CreditCardAlternateRatesControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass CreditCardAlternateRates extends Component {\r\n\r\n state = {\r\n applyAlternateRates: false,\r\n searchByAddressCreditCard: \"0.0\",\r\n searchByBookAndPageCreditCard: \"0.0\",\r\n searchByDateCreditCard: \"0.0\",\r\n searchByDocumentNumberCreditCard: \"0.0\",\r\n searchByLegalDescriptionCreditCard: \"0.0\",\r\n searchByNameCreditCard: \"0.0\",\r\n searchByParcelIdCreditCard: \"0.0\",\r\n searchByTorrensCertificateNumberCreditCard: \"0.0\",\r\n searchByTorrensTextCreditCard: \"0.0\",\r\n searchByPlatCreditCard: \"0.0\",\r\n searchByTaxLienCreditCard: \"0.0\",\r\n searchByGrantorGranteeBookCreditCard: \"0.0\",\r\n searchByTractBookCreditCard: \"0.0\",\r\n documentDetailsCreditCard: \"0.0\",\r\n taxLienDetailsCreditCard: \"0.0\",\r\n imageDocumentCreditCard: \"0.0\",\r\n imageFirstPageCreditCard: \"0.0\",\r\n imageAdditionalPagesCreditCard: \"0.0\",\r\n platImagePlatCreditCard: \"0.0\",\r\n platImageFirstPageCreditCard: \"0.0\",\r\n platImageAdditionalPagesCreditCard: \"0.0\",\r\n status: \"\",\r\n message: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n \r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n \r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/creditCard\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n\r\n }\r\n\r\n handleChange = (event) => {\r\n const targetId = event.target.id;\r\n if (targetId.includes(\"documentType\")) {\r\n const index = targetId.replace(\"documentType\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.documentType = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates\r\n });\r\n } else if (targetId.includes(\"instrumentCode\")) {\r\n const index = targetId.replace(\"instrumentCode\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.instrumentCode = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates\r\n });\r\n } else if (targetId.includes(\"documentRate\")) {\r\n const index = targetId.replace(\"documentRate\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.documentRate = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates\r\n });\r\n } else if (targetId.includes(\"firstPageRate\")) {\r\n const index = targetId.replace(\"firstPageRate\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.firstPageRate = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates\r\n });\r\n } else if (targetId.includes(\"additionalPagesRate\")) {\r\n const index = targetId.replace(\"additionalPagesRate\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.additionalPagesRate = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates\r\n });\r\n } else {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/creditCard\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n status : \"\",\r\n applyAlternateRates: content.applyAlternateRates,\r\n searchByAddressCreditCard: content.searchByAddressCreditCard,\r\n searchByBookAndPageCreditCard: content.searchByBookAndPageCreditCard,\r\n searchByDateCreditCard: content.searchByDateCreditCard,\r\n searchByDocumentNumberCreditCard: content.searchByDocumentNumberCreditCard,\r\n searchByLegalDescriptionCreditCard: content.searchByLegalDescriptionCreditCard,\r\n searchByNameCreditCard: content.searchByNameCreditCard,\r\n searchByParcelIdCreditCard: content.searchByParcelIdCreditCard,\r\n searchByTorrensCertificateNumberCreditCard: content.searchByTorrensCertificateNumberCreditCard,\r\n searchByTorrensTextCreditCard: content.searchByTorrensTextCreditCard,\r\n searchByPlatCreditCard: content.searchByPlatCreditCard,\r\n searchByTaxLienCreditCard: content.searchByTaxLienCreditCard,\r\n searchByGrantorGranteeBookCreditCard: content.searchByGrantorGranteeBookCreditCard,\r\n searchByTractBookCreditCard: content.searchByTractBookCreditCard,\r\n\r\n documentDetailsCreditCard: content.documentDetailsCreditCard,\r\n taxLienDetailsCreditCard: content.taxLienDetailsCreditCard,\r\n \r\n imageDocumentCreditCard: content.imageDocumentCreditCard,\r\n imageFirstPageCreditCard: content.imageFirstPageCreditCard,\r\n imageAdditionalPagesCreditCard: content.imageAdditionalPagesCreditCard,\r\n rates: content.rates\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n\r\n let afterRowsContent = <><h5 style={{ textDecoration: 'underline' }}>Special Rates</h5>None</>\r\n\r\n // if (this.state.rates && this.state.rates.length > 0 && this.state.applySpecialRates !== true) {\r\n // afterRowsContent = <><h5 style={{ textDecoration: 'underline' }}>Special Rates</h5>Not Applied</>\r\n // } else \r\n \r\n if (this.state.rates && this.state.rates.length > 0) {\r\n let rateTable =\r\n <div>\r\n {\r\n this.state.rates.map((rate, index) => (\r\n (index > 0) &&\r\n <Form.Row>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <Form.Control disabled type='text' id={'documentType' + index} value={this.state.rates[index].documentType} style={{ maxWidth: 130 }} />\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <Form.Control disabled type='text' id={'instrumentCode' + index} value={this.state.rates[index].instrumentCode} style={{ maxWidth: 130 }} />\r\n </div>\r\n <div> </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n {\r\n this.state.applyAlternateRates !== false &&\r\n <Form.Control type='number' step='0.01' id={'documentRate' + index} onChange={this.handleChange} value={this.state.rates[index].documentRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applyAlternateRates === false &&\r\n <Form.Control type='number' step='0.01' id={'documentRate' + index} disabled value={this.state.rates[index].documentRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n {\r\n this.state.applyAlternateRates !== false &&\r\n <Form.Control type='number' step='0.01' id={'firstPageRate' + index} onChange={this.handleChange} value={this.state.rates[index].firstPageRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applyAlternateRates === false &&\r\n <Form.Control type='number' step='0.01' id={'firstPageRate' + index} disabled value={this.state.rates[index].firstPageRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n {\r\n this.state.applyAlternateRates !== false &&\r\n <Form.Control type='number' step='0.01' id={'additionalPagesRate' + index} onChange={this.handleChange} value={this.state.rates[index].additionalPagesRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applyAlternateRates === false &&\r\n <Form.Control type='number' step='0.01' id={'additionalPagesRate' + index} disabled value={this.state.rates[index].additionalPagesRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n </div>\r\n </Form.Row>\r\n ))\r\n }\r\n </div>\r\n\r\n afterRowsContent =\r\n <>\r\n <h5 style={{ textDecoration: 'underline' }}>Special Rates</h5>\r\n <Form.Row>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <div>Document Type:</div>\r\n <Form.Control id='documentType0' disabled type='text' value={this.state.rates[0].documentType} style={{ maxWidth: 130 }} />\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <div>Instrument Code:</div>\r\n <Form.Control id='instrumentCode0' disabled type='text' value={this.state.rates[0].instrumentCode} style={{ maxWidth: 130 }} />\r\n </div>\r\n <div> </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <div>Document ($):</div>\r\n {\r\n this.state.applyAlternateRates !== false &&\r\n <Form.Control type='number' step='0.01' id='documentRate0' onChange={this.handleChange} value={this.state.rates[0].documentRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applyAlternateRates === false &&\r\n <Form.Control type='number' step='0.01' id='documentRate0' disabled value={this.state.rates[0].documentRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <div>1st Page ($):</div>\r\n {\r\n this.state.applyAlternateRates !== false &&\r\n <Form.Control type='number' step='0.01' id='firstPageRate0' onChange={this.handleChange} value={this.state.rates[0].firstPageRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applyAlternateRates === false &&\r\n <Form.Control type='number' step='0.01' id='firstPageRate0' disabled value={this.state.rates[0].firstPageRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <div>Additional Pages ($):</div>\r\n {\r\n this.state.applyAlternateRates !== false &&\r\n <Form.Control type='number' step='0.01' id='additionalPagesRate0' onChange={this.handleChange} value={this.state.rates[0].additionalPagesRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applyAlternateRates === false &&\r\n <Form.Control type='number' step='0.01' id='additionalPagesRate0' disabled value={this.state.rates[0].additionalPagesRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n </div>\r\n </Form.Row>\r\n {rateTable}\r\n </>\r\n }\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Credit Card Alternate Rates\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n afterRowsContent: afterRowsContent,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'applyAlternateRates', label: 'Apply Alternate Rates', fieldType: 'select', value: this.state.applyAlternateRates }]\r\n },\r\n {\r\n heading: 'Searches',\r\n formGroups: [\r\n { id: 'searchByAddressCreditCard', label: 'Address ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByAddressCreditCard },\r\n { id: 'searchByBookAndPageCreditCard', label: 'Book & Page ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByBookAndPageCreditCard },\r\n { id: 'searchByDateCreditCard', label: 'Date ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByDateCreditCard },\r\n { id: 'searchByDocumentNumberCreditCard', label: 'Document Number ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByDocumentNumberCreditCard },\r\n { id: 'searchByLegalDescriptionCreditCard', label: 'Legal Descriptions ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByLegalDescriptionCreditCard },\r\n { id: 'searchByNameCreditCard', label: 'Name ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByNameCreditCard },\r\n { id: 'searchByParcelIdCreditCard', label: 'Parcel ID ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByParcelIdCreditCard },\r\n { id: 'searchByTorrensCertificateNumberCreditCard', label: 'Torrens Certificate ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByTorrensCertificateNumberCreditCard },\r\n { id: 'searchByTorrensTextCreditCard', label: 'Torrens Text ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByTorrensTextCreditCard },\r\n { id: 'searchByPlatCreditCard', label: 'Plat ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByPlatCreditCard },\r\n { id: 'searchByTaxLienCreditCard', label: 'Tax Lien ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByTaxLienCreditCard },\r\n { id: 'searchByGrantorGranteeBookCreditCard', label: 'Grantor/ee Book ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByGrantorGranteeBookCreditCard },\r\n { id: 'searchByTractBookCreditCard', label: 'Tract Book ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.searchByTractBookCreditCard }\r\n ]\r\n },\r\n {\r\n heading: 'Search Details',\r\n formGroups: [{ id: 'documentDetailsCreditCard', label: 'Document ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.documentDetailsCreditCard },\r\n { id: 'taxLienDetailsCreditCard', label: 'Tax Lien ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.taxLienDetailsCreditCard }]\r\n },\r\n {\r\n heading: 'Document Image',\r\n formGroups: [\r\n { id: 'imageDocumentCreditCard', label: 'Document ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.imageDocumentCreditCard },\r\n { id: 'imageFirstPageCreditCard', label: '1st Page ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.imageFirstPageCreditCard },\r\n { id: 'imageAdditionalPagesCreditCard', label: 'Additional Pages ($)', fieldType: 'number', numberType:'decimal', disableField: this.state.applyAlternateRates === false, value: this.state.imageAdditionalPagesCreditCard }]\r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(CreditCardAlternateRates);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, CreditCardExtraControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = CreditCardExtraControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName)), \r\n }\r\n}\r\n\r\nclass CreditCardExtra extends Component {\r\n\r\n state = {\r\n applySurcharge: false,\r\n surchargeMethod: 'dollars',\r\n surcharge: '0.0',\r\n surchargePercent: '0.0',\r\n maxAmount: '0.0',\r\n postToLandLink: true,\r\n chargeChargeCode: '',\r\n surchargeChargeCode: '',\r\n chargeFeeCode: '',\r\n surchargeFeeCode: '',\r\n status: '',\r\n message: ''\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/creditCardExtra\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n \r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/creditCardExtra\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n applySurcharge: content.applySurcharge,\r\n surchargeMethod: content.surchargeMethod ? content.surchargeMethod : 'dollars',\r\n surcharge: content.surcharge,\r\n surchargePercent: content.surchargePercent,\r\n maxAmount: content.maxAmount,\r\n postToLandLink: content.postToLandLink,\r\n chargeChargeCode: content.chargeChargeCode,\r\n surchargeChargeCode: content.surchargeChargeCode,\r\n chargeFeeCode: content.chargeFeeCode,\r\n surchargeFeeCode: content.surchargeFeeCode,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Credit Card Extra\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n heading: 'LandLink', \r\n formGroups: [{ id: 'postToLandLink', label: 'Post to LandLink', fieldType: 'select', value: this.state.postToLandLink }]\r\n },\r\n {\r\n formGroups: [ { id: 'chargeFeeCode', label: 'Fee Code', fieldType: 'text', disableField: this.state.postToLandLink === false, value: this.state.chargeFeeCode },\r\n { id: 'chargeChargeCode', label: 'Charge Code', fieldType: 'text', disableField: this.state.postToLandLink === false, value: this.state.chargeChargeCode }]\r\n },\r\n {\r\n formGroups: [{ id: 'surchargeFeeCode', label: 'Surcharge Fee Code', fieldType: 'text', disableField: this.state.postToLandLink === false, value: this.state.surchargeFeeCode },\r\n { id: 'surchargeChargeCode', label: 'Surcharge Charge Code', fieldType: 'text', disableField: this.state.postToLandLink === false, value: this.state.surchargeChargeCode }]\r\n },\r\n {\r\n heading: 'Preauthorization Max',\r\n formGroups: [{ id: 'maxAmount', label: 'Max Amount Per Charge ($)', fieldType: 'number', numberType: 'decimal', value: this.state.maxAmount }]\r\n },\r\n {\r\n heading: 'Surcharge',\r\n formGroups: [{ id: 'applySurcharge', label: 'Apply Surcharge', fieldType: 'select', value: this.state.applySurcharge }]\r\n },\r\n {\r\n formGroups: [{ id: 'surchargeMethod', label: 'Dollars or Percent', fieldType: 'select', disableField: this.state.applySurcharge === false, options: [{ code: 'dollars', description: 'Dollars'}, {code: 'percent', description: 'Percent'}], value: this.state.surchargeMethod }]\r\n },\r\n {\r\n formGroups: [{ id: 'surcharge', label: 'Surcharge ($)', fieldType: 'number', numberType: 'decimal', hideRow: this.state.surchargeMethod !== 'dollars', disableField: this.state.applySurcharge === false, value: this.state.surcharge }]\r\n },\r\n {\r\n formGroups: [{ id: 'surchargePercent', label: 'Surcharge (%)', fieldType: 'number', numberType: 'decimal', hideRow: this.state.surchargeMethod !== 'percent', disableField: this.state.applySurcharge === false, value: this.state.surchargePercent}]\r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(CreditCardExtra);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, EscrowControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\nimport AjaxResponseHandler from \"../../utils/AjaxResponseHandler\"\r\n\r\nconst componentName = EscrowControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass Escrow extends Component {\r\n\r\n state = {\r\n applySurcharge: false,\r\n feeCode: \"\",\r\n chargeCode: \"\",\r\n reloadByCreditCard: false,\r\n minReloadAmount: 0.0,\r\n maxReloadAmount: 0.0,\r\n creditCardSurchargeMethod: \"dollars\",\r\n creditCardSurcharge: 0.0,\r\n creditCardSurchargePercent: 0.0,\r\n\r\n status: \"\",\r\n message: \"\",\r\n errors: {}\r\n }\r\n\r\n handleValidation = () => {\r\n let hasFeeCode = this.state.feeCode.trim().length > 0;\r\n let hasChargeCode = this.state.chargeCode.trim().length > 0;\r\n \r\n let errors = {};\r\n if (hasFeeCode && !hasChargeCode) {\r\n errors[\"chargeCode\"] = \"Required with Fee Code.\";\r\n this.setState({ errors });\r\n return false;\r\n } else if (hasChargeCode && !hasFeeCode) {\r\n errors[\"feeCode\"] = \"Required with Charge Code.\";\r\n this.setState({ errors });\r\n return false;\r\n }\r\n\r\n if (this.state.applySurcharge === true || this.state.applySurcharge === 'true') {\r\n if (this.state.creditCardSurchargeMethod === \"dollars\" && this.state.creditCardSurcharge === 0) {\r\n errors[\"creditCardSurcharge\"] = \"Required.\";\r\n this.setState({ errors });\r\n return false;\r\n }\r\n if (this.state.creditCardSurchargeMethod === \"percent\" && this.state.creditCardSurchargePercent === 0) {\r\n errors[\"creditCardSurchargePercent\"] = \"Required.\";\r\n this.setState({ errors });\r\n return false;\r\n }\r\n }\r\n\r\n if (this.state.reloadByCreditCard === true || this.state.reloadByCreditCard === 'true') {\r\n if (this.state.minReloadAmount === 0) {\r\n errors[\"minReloadAmount\"] = \"Required.\";\r\n this.setState({ errors });\r\n return false;\r\n }\r\n if (this.state.maxReloadAmount === 0) {\r\n errors[\"maxReloadAmount\"] = \"Required.\";\r\n this.setState({ errors });\r\n return false;\r\n }\r\n if (parseFloat(this.state.maxReloadAmount) < parseFloat(this.state.minReloadAmount)) {\r\n errors[\"maxReloadAmount\"] = \"Cannot be less than Min $.\";\r\n this.setState({ errors });\r\n return false;\r\n }\r\n }\r\n \r\n return true;\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n if (!this.handleValidation()) {\r\n console.log(this.state);\r\n\r\n return;\r\n }\r\n\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n \r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/escrow\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n \r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n AjaxResponseHandler.handleError(error, null, this.props.history);\r\n this.setState({ \r\n status: \"\"\r\n });\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n\r\n this.setState({\r\n status: \"\",\r\n errors: {},\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n\tcomponentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n \r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/escrow\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n applySurcharge: content.applySurcharge,\r\n feeCode: content.feeCode,\r\n chargeCode: content.chargeCode,\r\n reloadByCreditCard: content.reloadByCreditCard,\r\n minReloadAmount: content.minReloadAmount,\r\n maxReloadAmount: content.maxReloadAmount,\r\n creditCardSurchargeMethod: content.creditCardSurchargeMethod,\r\n creditCardSurcharge: content.creditCardSurcharge,\r\n creditCardSurchargePercent: content.creditCardSurchargePercent,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n AjaxResponseHandler.handleError(error, null, this.props.history);\r\n }\r\n );\r\n }\r\n \r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Escrow\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n heading: 'LandLink',\r\n formGroups: [{ id: 'feeCode', label: 'Fee Code', fieldType: 'text', value: this.state.feeCode, error: this.state.errors['feeCode'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'chargeCode', label: 'Charge Code', fieldType: 'text', value: this.state.chargeCode, error: this.state.errors['chargeCode']}]\r\n },\r\n {\r\n heading: 'Reload from LandShark',\r\n formGroups: [{ id: 'reloadByCreditCard', label: 'Reload by Credit Card', fieldType: 'select', value: this.state.reloadByCreditCard}]\r\n },\r\n {\r\n formGroups: [{ id: 'minReloadAmount', label: 'Min Reload Per Charge ($)', fieldType: 'number', numberType: 'decimal', disableField: this.state.reloadByCreditCard === false, value: this.state.minReloadAmount, error: this.state.errors['minReloadAmount']},\r\n { id: 'maxReloadAmount', label: 'Max Reload Per Charge ($)', fieldType: 'number', numberType: 'decimal', disableField: this.state.reloadByCreditCard === false, value: this.state.maxReloadAmount, error: this.state.errors['maxReloadAmount']}\r\n ]\r\n },\r\n {\r\n heading: 'Reload Surcharge',\r\n formGroups: [{ id: 'applySurcharge', label: 'Apply Surcharge', fieldType: 'select', value: this.state.applySurcharge }]\r\n },\r\n {\r\n formGroups: [{ id: 'creditCardSurchargeMethod', label: 'Dollars or Percent', fieldType: 'select', disableField: this.state.applySurcharge === false, options: [{code: 'dollars', description: 'Dollars'}, {code: 'percent', description: 'Percent'}], value: this.state.creditCardSurchargeMethod }] \r\n },\r\n {\r\n formGroups: [{ id: 'creditCardSurcharge', label: 'Credit Card Surcharge ($)', fieldType: 'number', numberType: 'decimal', hideRow: this.state.creditCardSurchargeMethod !== 'dollars', disableField: this.state.applySurcharge === false, value: this.state.creditCardSurcharge, error: this.state.errors['creditCardSurcharge'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'creditCardSurchargePercent', label: 'Credit Card Surcharge (%)', fieldType: 'number', numberType: 'decimal', hideRow: this.state.creditCardSurchargeMethod !== 'percent', disableField: this.state.applySurcharge === false, value: this.state.creditCardSurchargePercent, error: this.state.errors['creditCardSurchargePercent']}]\r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(Escrow);","export const validateNumberOfImagesCostPair = (errors, unlimited, numberOfImages, numberOfImagesKey, cost, costKey) => {\r\n\r\n if (!unlimited && (!numberOfImages || parseInt(numberOfImages) === 0)) {\r\n errors[numberOfImagesKey] = \"Required.\";\r\n return false;\r\n }\r\n\r\n if (cost === undefined || cost === null || cost === '') {\r\n errors[costKey] = \"Required. Zero is ok.\";\r\n return false;\r\n }\r\n\r\n return true;\r\n};","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, FlatFeeControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport { validateNumberOfImagesCostPair } from \"../../utils/CodeValueValidation\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = FlatFeeControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName)),\r\n }\r\n}\r\n\r\nclass FlatFeeRates extends Component {\r\n state = {\r\n chargingImages: false,\r\n rates: [\r\n {\r\n option: false,\r\n unlimitedNumberOfPages: false,\r\n numberOfPages: \"\",\r\n cost: \"\"\r\n },\r\n {\r\n option: false,\r\n unlimitedNumberOfPages: false,\r\n numberOfPages: \"\",\r\n cost: \"\"\r\n },\r\n {\r\n option: false,\r\n unlimitedNumberOfPages: false,\r\n numberOfPages: \"\",\r\n cost: \"\"\r\n },\r\n {\r\n option: false,\r\n unlimitedNumberOfPages: false,\r\n numberOfPages: \"\",\r\n cost: \"\"\r\n },\r\n {\r\n option: false,\r\n unlimitedNumberOfPages: false,\r\n numberOfPages: \"\",\r\n cost: \"\"\r\n }\r\n ],\r\n status: \"\",\r\n message: \"\",\r\n errors: {}\r\n }\r\n\r\n validateUnimited = () => {\r\n let errors = {};\r\n let unlimitedRowNumber = -1;\r\n for (const index of [0, 1, 2, 3, 4].keys()) {\r\n let currentRowSelected = (this.state.rates[index].option === true || this.state.rates[index].option === 'true');\r\n let currentRowUnlimited = currentRowSelected && (this.state.rates[index].unlimitedNumberOfPages === true || this.state.rates[index].unlimitedNumberOfPages === 'true');\r\n if (unlimitedRowNumber > -1 && currentRowSelected === true) {\r\n errors['unlimitedNumberOfPages' + unlimitedRowNumber] = \"Unlimited should be last.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n } else if (currentRowUnlimited === true) {\r\n unlimitedRowNumber = index;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n \r\n validateRatePairs = () => {\r\n let errors = {};\r\n for (const index of [0, 1, 2, 3, 4].keys()) {\r\n let currentRowSelected = (this.state.rates[index].option === true || this.state.rates[index].option === 'true');\r\n if (currentRowSelected) {\r\n let formIsValid = validateNumberOfImagesCostPair(errors, this.state.rates[index].unlimitedNumberOfPages, this.state.rates[index].numberOfPages, 'numberOfPages' + index, this.state.rates[index].cost, 'cost' + index);\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n handleValidation = () => {\r\n if (!this.validateUnimited()) {\r\n return;\r\n }\r\n \r\n if (!this.validateRatePairs()) {\r\n return;\r\n }\r\n \r\n this.setState({ errors: {} });\r\n return true;\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n if (!this.handleValidation()) {\r\n return;\r\n }\r\n\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n \r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/flatFee\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState({\r\n status: LOADING_STATUES.SUCCESS,\r\n chargingImages: content.chargingImages,\r\n rates: content.rates\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n const targetId = event.target.id;\r\n \r\n if (targetId.includes(\"option\")) {\r\n const index = targetId.replace(\"option\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.option = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates,\r\n errors: {}\r\n });\r\n } else if (targetId.includes(\"unlimitedNumberOfPages\")) {\r\n const index = targetId.replace(\"unlimitedNumberOfPages\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.unlimitedNumberOfPages = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates,\r\n errors: {}\r\n });\r\n } else if (targetId.includes(\"numberOfPages\")) {\r\n const index = targetId.replace(\"numberOfPages\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.numberOfPages = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates,\r\n errors: {}\r\n });\r\n } else if (targetId.includes(\"cost\")) {\r\n const index = targetId.replace(\"cost\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.cost = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates,\r\n errors: {}\r\n });\r\n } else {\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: event.target.value ? event.target.value : 0,\r\n errors: {}\r\n })\r\n }\r\n }\r\n\r\n\tcomponentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/flatFee\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n status : \"\",\r\n chargingImages: content.chargingImages,\r\n rates: content.rates\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n createRateRow = index => {\r\n return (\r\n {\r\n formGroups: [\r\n { id: 'option' + index, label: 'Option ' + (index+1), fieldType: 'select', \r\n disableField: this.state.chargingImages === 'false' || this.state.chargingImages === false, \r\n value: this.state.rates[index] && this.state.rates[index].option ? this.state.rates[index].option : false, \r\n error: this.state.errors['option' + index] \r\n },\r\n {\r\n id: 'unlimitedNumberOfPages' + index, label: 'Unlimited Images', fieldType: 'select',\r\n disableField: this.state.chargingImages === 'false' || this.state.chargingImages === false || this.state.rates[index].option === 'false' || this.state.rates[index].option === false,\r\n value: this.state.rates[index] && this.state.rates[index].unlimitedNumberOfPages ? this.state.rates[index].unlimitedNumberOfPages : false, \r\n error: this.state.errors['unlimitedNumberOfPages' + index]\r\n },\r\n {\r\n id: 'numberOfPages' + index, label: 'Number of images', fieldType: 'number',\r\n disableField: this.state.chargingImages === 'false' || this.state.chargingImages === false || this.state.rates[index].option === 'false' || this.state.rates[index].option === false || this.state.rates[index].unlimitedNumberOfPages === 'true' || this.state.rates[index].unlimitedNumberOfPages === true,\r\n value: this.state.rates[index] ? this.state.rates[index].numberOfPages : \"\", \r\n style: { maxWidth: 155 }, \r\n error: this.state.errors['numberOfPages' + index]\r\n },\r\n {\r\n id: 'cost' + index, label: 'Cost ($)', fieldType: 'number', numberType: 'decimal',\r\n disableField: this.state.chargingImages === 'false' || this.state.chargingImages === false || this.state.rates[index].option === 'false' || this.state.rates[index].option === false,\r\n value: this.state.rates[index] ? this.state.rates[index].cost : \"\", \r\n style: { maxWidth: 155 }, \r\n error: this.state.errors['cost' + index]\r\n }]\r\n }\r\n )\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Flat Fee\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'chargingImages', label: 'Charging for Images', fieldType: 'select', value: this.state.chargingImages, style: {maxWidth: 155} }]\r\n },\r\n this.createRateRow(0),\r\n this.createRateRow(1),\r\n this.createRateRow(2),\r\n this.createRateRow(3),\r\n this.createRateRow(4)\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(FlatFeeRates);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, ALaCarteRatesControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = ALaCarteRatesControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass ALaCarteRates extends Component {\r\n\r\n state = {\r\n searchByAddress: \"0.0\",\r\n searchByBookAndPage: \"0.0\",\r\n searchByDate: \"0.0\",\r\n searchByDocumentNumber: \"0.0\",\r\n searchByLegalDescription: \"0.0\",\r\n searchByName: \"0.0\",\r\n searchByParcelId: \"0.0\",\r\n searchByTorrensCertificateNumber: \"0.0\",\r\n searchByTorrensText: \"0.0\",\r\n searchByPlat: \"0.0\",\r\n searchByTaxLien: \"0.0\",\r\n searchByGrantorGranteeBook: \"0.0\",\r\n searchByTractBook: \"0.0\",\r\n documentDetails: \"0.0\",\r\n taxLienDetails: \"0.0\",\r\n imageDocument: \"0.0\",\r\n imageFirstPage: \"0.0\",\r\n imageAdditionalPages: \"0.0\",\r\n status: \"\",\r\n message: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n \r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/aLaCarte\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: \"SUCCESS\"\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: event.target.value ? event.target.value : 0\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/aLaCarte\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n searchByAddress: content.searchByAddress,\r\n searchByBookAndPage: content.searchByBookAndPage,\r\n searchByDate: content.searchByDate,\r\n searchByDocumentNumber: content.searchByDocumentNumber,\r\n searchByLegalDescription: content.searchByLegalDescription,\r\n searchByName: content.searchByName,\r\n searchByParcelId: content.searchByParcelId,\r\n searchByTorrensCertificateNumber: content.searchByTorrensCertificateNumber,\r\n searchByTorrensText: content.searchByTorrensText,\r\n searchByPlat: content.searchByPlat,\r\n searchByTaxLien: content.searchByTaxLien,\r\n searchByGrantorGranteeBook: content.searchByGrantorGranteeBook,\r\n searchByTractBook: content.searchByTractBook,\r\n documentDetails: content.documentDetails,\r\n taxLienDetails: content.taxLienDetails,\r\n imageDocument: content.imageDocument,\r\n imageFirstPage: content.imageFirstPage,\r\n imageAdditionalPages: content.imageAdditionalPages,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"A La Carte Rates\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n heading: 'Searches',\r\n formGroups: [\r\n { id: 'searchByAddress', label: 'Address ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByAddress },\r\n { id: 'searchByBookAndPage', label: 'Book & Page ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByBookAndPage },\r\n { id: 'searchByDate', label: 'Date ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByDate },\r\n { id: 'searchByDocumentNumber', label: 'Document Number ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByDocumentNumber },\r\n { id: 'searchByLegalDescription', label: 'Legal Descriptions ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByLegalDescription },\r\n { id: 'searchByName', label: 'Name ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByName },\r\n { id: 'searchByParcelId', label: 'Parcel ID ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByParcelId },\r\n { id: 'searchByTorrensCertificateNumber', label: 'Torrens Certificate ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByTorrensCertificateNumber },\r\n { id: 'searchByTorrensText', label: 'Torrens Text ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByTorrensText },\r\n { id: 'searchByPlat', label: 'Plat ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByPlat },\r\n { id: 'searchByTaxLien', label: 'Tax Lien ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByTaxLien },\r\n { id: 'searchByGrantorGranteeBook', label: 'Grantor/ee Book ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByGrantorGranteeBook },\r\n { id: 'searchByTractBook', label: 'Tract Book ($)', fieldType: 'number', numberType:'decimal', value: this.state.searchByTractBook }\r\n ]\r\n },\r\n {\r\n heading: 'Search Details',\r\n formGroups: [\r\n { id: 'documentDetails', label: 'Document ($)', fieldType: 'number', numberType:'decimal', value: this.state.documentDetails },\r\n { id: 'taxLienDetails', label: 'Tax Lien ($)', fieldType: 'number', numberType:'decimal', value: this.state.taxLienDetails }\r\n ]\r\n },\r\n {\r\n heading: 'Document Image',\r\n formGroups: [\r\n { id: 'imageDocument', label: 'Document ($)', fieldType: 'number', numberType:'decimal', value: this.state.imageDocument },\r\n { id: 'imageFirstPage', label: '1st Page ($)', fieldType: 'number', numberType:'decimal', value: this.state.imageFirstPage },\r\n { id: 'imageAdditionalPages', label: 'Additional Pages ($)', fieldType: 'number', numberType:'decimal', value: this.state.imageAdditionalPages }\r\n ]\r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(ALaCarteRates);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport { Form, Container, Row, Button } from 'react-bootstrap'\r\n\r\nimport Alert from '../common/modal/Alert';\r\nimport PageBanner from \"../common/page/PageBanner\";\r\nimport PrimaryButton from \"../common/form/PrimaryButton\";\r\nimport { ALERT_TYPES } from \"../constants/constants\";\r\n\r\nimport { setSelectedControlPanelType, ALaCarteRatesSpecialControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport { checkIconGreen, spinnerIconGray } from \"../../img/font_awesome/font_awesome\"\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\nimport Confirmation from '../common/modal/Confirmation'\r\n\r\nconst componentName = ALaCarteRatesSpecialControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n \r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer,\r\n availableInstrumentCodes: state.instrumentCodesWithBlankReducer.codeDescriptionResultList,\r\n availableDocumentTypes: state.documentTypesWithBlankReducer.codeDescriptionResultList\r\n };\r\n}\r\n\r\nclass ALaCarteRatesSpecial extends Component {\r\n\r\n state = {\r\n applySpecialRates: false,\r\n rates: [\r\n {\r\n documentType: '',\r\n instrumentCode: '',\r\n documentRate: '',\r\n firstPageRate: '',\r\n additionalPagesRate: ''\r\n }\r\n ],\r\n status: \"\",\r\n message: \"\",\r\n showAlert: false,\r\n alertMessage: \"\",\r\n showConfirmation: false\r\n }\r\n\r\n\thandleCloseConfirmation = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowConfirmation: false\r\n\t\t});\r\n\t}\r\n\r\n handleClickSave = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\tshowConfirmation: true\r\n\t\t});\r\n\t}\r\n\r\n validate = () => {\r\n\r\n let allDocumentTypeInstrutmentCodes = [];\r\n let lastRate;\r\n\r\n for (let rate of this.state.rates) {\r\n if (rate.instrumentCode !== '' && rate.documentType === '') {\r\n return \"Each special rate must have a document type if an instrument code is provided.\";\r\n }\r\n\r\n if (rate.documentRate === 0 && rate.firstPageRate === 0 && rate.additionalPagesRate === 0) {\r\n return \"Each special rate must have at least a document or page rate.\";\r\n }\r\n\r\n if (rate.documentType === '0') {\r\n allDocumentTypeInstrutmentCodes.push(rate.instrumentCode);\r\n } else if (rate.documentType !== '' && allDocumentTypeInstrutmentCodes.indexOf(rate.instrumentCode) >= 0) {\r\n return \"Duplicate instrument codes found; a duplicate rate has been defined for All document types.\"\r\n }\r\n \r\n if (!lastRate) {\r\n lastRate = rate;\r\n } else if (rate.instrumentCode === lastRate.instrumentCode && rate.documentType === lastRate.documentType) {\r\n return \"Duplicate document-type instrument-code combinations found.\"\r\n } else {\r\n lastRate = rate;\r\n }\r\n\r\n } \r\n\r\n return null;\r\n }\r\n\r\n handleSubmit = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n \r\n this.handleReorganizeRows();\r\n let message = this.validate();\r\n if (message) {\r\n this.showAlert(message, ALERT_TYPES.WARNING);\r\n return;\r\n }\r\n\r\n\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n console.log(this.state);\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/aLaCarteSpecialRates\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: \"SUCCESS\"\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n\r\n }\r\n\r\n // Add five blank entries\r\n handleMoreRows = (event) => {\r\n event.preventDefault();\r\n\r\n const currentLength = this.state.rates.length;\r\n if (currentLength < 10) { // 100 is the abitrary max length\r\n let blankArray = [\r\n {\r\n documentType: '',\r\n instrumentCode: '',\r\n documentRate: '',\r\n firstPageRate: '',\r\n additionalPagesRate: ''\r\n },\r\n {\r\n documentType: '',\r\n instrumentCode: '',\r\n documentRate: '',\r\n firstPageRate: '',\r\n additionalPagesRate: ''\r\n },\r\n {\r\n documentType: '',\r\n instrumentCode: '',\r\n documentRate: '',\r\n firstPageRate: '',\r\n additionalPagesRate: ''\r\n },\r\n {\r\n documentType: '',\r\n instrumentCode: '',\r\n documentRate: '',\r\n firstPageRate: '',\r\n additionalPagesRate: ''\r\n },\r\n {\r\n documentType: '',\r\n instrumentCode: '',\r\n documentRate: '',\r\n firstPageRate: '',\r\n additionalPagesRate: ''\r\n }\r\n ]; // Five blanks\r\n // If adding the blankArray exceeds 100 in length, shorten the blankArray so that it won't exceed 100.\r\n if ((currentLength + blankArray.length) > 100) { \r\n blankArray.length = 100 - currentLength;\r\n }\r\n\r\n this.setState({\r\n status: '',\r\n rates: [...this.state.rates, ...blankArray]\r\n })\r\n } else {\r\n this.showAlert(\"The rate table has a limit of 100 entries.\");\r\n }\r\n }\r\n\r\n handleChange = (event) => {\r\n const targetId = event.target.id;\r\n console.log(targetId);\r\n if (targetId.includes(\"documentType\")) {\r\n const index = targetId.replace(\"documentType\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.documentType = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates\r\n });\r\n } else if (targetId.includes(\"instrumentCode\")) {\r\n const index = targetId.replace(\"instrumentCode\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.instrumentCode = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates\r\n });\r\n } else if (targetId.includes(\"documentRate\")) {\r\n const index = targetId.replace(\"documentRate\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.documentRate = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates\r\n });\r\n } else if (targetId.includes(\"firstPageRate\")) {\r\n const index = targetId.replace(\"firstPageRate\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.firstPageRate = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates\r\n });\r\n } else if (targetId.includes(\"additionalPagesRate\")) {\r\n const index = targetId.replace(\"additionalPagesRate\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.additionalPagesRate = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates\r\n });\r\n } else {\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: event.target.value ? event.target.value : 0\r\n })\r\n }\r\n }\r\n\r\n handleReorganizeRows = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n let rates = this.state.rates;\r\n rates = rates.filter(rate => (rate.documentType && rate.documentType !== '') || (rate.instrumentCode && rate.instrumentCode !== '')); \r\n rates.sort((rate1, rate2) => ((rate1.documentType > rate2.documentType) ? 1 : (rate1.documentType === rate2.documentType) ? ((rate1.instrumentCode < rate2.instrumentCode) ? 1 : -1) : -1 ));\r\n \r\n if (rates.length === 0) {\r\n rates = [ {\r\n documentType: '',\r\n instrumentCode: '',\r\n documentRate: '',\r\n firstPageRate: '',\r\n additionalPagesRate: ''\r\n }]\r\n }\r\n for (let rate of rates) {\r\n rate.documentRate = rate.documentRate === '' ? 0 : rate.documentRate;\r\n rate.firstPageRate = rate.firstPageRate === '' ? 0 : rate.firstPageRate;\r\n rate.additionalPagesRate = rate.additionalPagesRate === '' ? 0 : rate.additionalPagesRate;\r\n }\r\n\r\n this.setState({\r\n status: '',\r\n rates: rates\r\n })\r\n }\r\n\r\n handleRemoveRow = (event) => {\r\n let indexToRemove = event.target.id.replace(\"remove\", \"\");\r\n indexToRemove = parseInt(indexToRemove);\r\n let rates = this.state.rates;\r\n rates.splice(indexToRemove, 1);\r\n this.setState({\r\n status: \"\",\r\n rates: rates\r\n })\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n this.setState({\r\n showAlert: true,\r\n alertMessage\r\n })\r\n }\r\n\r\n hideAlert = () => {\r\n this.setState({\r\n showAlert: false,\r\n alertMessage: \"\"\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/aLaCarteSpecialRates\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n let rates = content.rates;\r\n if (!rates || rates.length === 0) {\r\n rates = [ {\r\n documentType: '',\r\n instrumentCode: '',\r\n documentRate: '',\r\n firstPageRate: '',\r\n additionalPagesRate: ''\r\n }]\r\n }\r\n this.setState( {\r\n status : \"\",\r\n applySpecialRates: content.applySpecialRates,\r\n rates\r\n });\r\n \r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n let formTemplateMarginLeft = 60\r\n let formTemplateMarginRight = 20\r\n if (this.props.formOnly) {\r\n formTemplateMarginLeft = 0\r\n formTemplateMarginRight = 0\r\n } else if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n }\r\n\r\n let pageButtons = [{ label: 'Add', onClickAction: this.handleMoreRows, className: 'btn btn-secondary btn-sm' }, { label: 'Organize', onClickAction: this.handleReorganizeRows, className: 'btn btn-secondary btn-sm' }]\r\n\r\n let firstDocumentTypeControl =\r\n <Form.Control as='select' id='documentType0' disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} style={{ minWidth: 130 }}>\r\n {\r\n this.props.availableDocumentTypes && // not sure why it can be undefined. not sure why render gets called so many times when refreshing the browser.\r\n this.props.availableDocumentTypes.map((option, description) => {\r\n if (this.state.rates[0].documentType === option.code)\r\n return (<option key={option.code} selected value={option.code}>{option.description}</option>)\r\n else\r\n return (<option key={option.code} value={option.code}>{option.description}</option>)\r\n })\r\n \r\n }\r\n </Form.Control>\r\n\r\n if (this.state.applySpecialRates === false)\r\n firstDocumentTypeControl =\r\n <Form.Control id='documentType0' disabled as='select' onChange={this.handleChange} style={{ minWidth: 130 }}>\r\n {\r\n this.props.availableDocumentTypes && // not sure why it can be undefined. not sure why render gets called so many times when refreshing the browser.\r\n this.props.availableDocumentTypes.map((option, description) => {\r\n if (this.state.rates[0].documentType === option.code)\r\n return (<option key={option.code} selected value={option.code}>{option.description}</option>)\r\n else\r\n return (<option key={option.code} value={option.code}>{option.description}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n\r\n let firstInstrumentCodeFormControl =\r\n <Form.Control as='select' id='instrumentCode0' disabled={this.state.status === LOADING_STATUES.LOADING } onChange={this.handleChange} style={{ minWidth: 130 }}>\r\n {\r\n this.props.availableInstrumentCodes && // not sure why it can be undefined. not sure why render gets called so many times when refreshing the browser.\r\n this.props.availableInstrumentCodes.map((option, description) => {\r\n if (this.state.rates[0].instrumentCode === option.code)\r\n return (<option key={option.code} selected value={option.code}>{option.description}</option>)\r\n else\r\n return (<option key={option.code} value={option.code}>{option.description}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n \r\n if (this.state.applySpecialRates === false)\r\n firstInstrumentCodeFormControl = \r\n <Form.Control as='select' id='instrumentCode0' disabled style={{ minWidth: 130 }}>\r\n {\r\n this.props.availableInstrumentCodes && // not sure why it can be undefined. not sure why render gets called so many times when refreshing the browser.\r\n this.props.availableInstrumentCodes.map((option, description) => {\r\n if (this.state.rates[0].instrumentCode === option.code)\r\n return (<option key={option.code} selected value={option.code}>{option.description}</option>)\r\n else\r\n return (<option key={option.code} value={option.code}>{option.description}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n \r\n\r\n let rateTable =\r\n <div>\r\n {\r\n this.state.rates.map((rate, index) => (\r\n (index > 0) &&\r\n <Form.Row>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n {\r\n this.state.applySpecialRates !== false && \r\n <Form.Control as='select' id={'documentType' + index} disabled={this.state.status === LOADING_STATUES.LOADING } onChange={this.handleChange} style={{ minWidth: 130 }} >\r\n {\r\n this.props.availableDocumentTypes &&\r\n this.props.availableDocumentTypes.map((option) => {\r\n if (rate.documentType === option.code)\r\n return (<option key={option.code} selected value={option.code}>{option.description}</option>)\r\n else\r\n return (<option key={option.code} value={option.code}>{option.description}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n }\r\n { \r\n this.state.applySpecialRates === false && \r\n <Form.Control as='select' id={'documentType' + index} disabled style={{ minWidth: 130 }} >\r\n {\r\n this.props.availableDocumentTypes &&\r\n this.props.availableDocumentTypes.map((option) => {\r\n if (rate.documentType === option.code)\r\n return (<option key={option.code} selected value={option.code}>{option.description}</option>)\r\n else\r\n return (<option key={option.code} value={option.code}>{option.description}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n }\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n {\r\n this.state.applySpecialRates !== false && \r\n <Form.Control as='select' id={'instrumentCode' + index} disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} style={{ minWidth: 130 }} >\r\n {\r\n this.props.availableInstrumentCodes &&\r\n this.props.availableInstrumentCodes.map((option) => {\r\n if (rate.instrumentCode === option.code)\r\n return (<option key={option.code} selected value={option.code}>{option.description}</option>)\r\n else\r\n return (<option key={option.code} value={option.code}>{option.description}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n }\r\n { \r\n this.state.applySpecialRates === false &&\r\n <Form.Control as='select' id={'instrumentCode' + index} disabled style={{ minWidth: 130 }} >\r\n {\r\n this.props.availableInstrumentCodes &&\r\n this.props.availableInstrumentCodes.map((option) => {\r\n if (rate.instrumentCode === option.code)\r\n return (<option key={option.code} selected value={option.code}>{option.description}</option>)\r\n else\r\n return (<option key={option.code} value={option.code}>{option.description}</option>)\r\n })\r\n }\r\n </Form.Control>\r\n }\r\n </div>\r\n <div> </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n {\r\n this.state.applySpecialRates !== false &&\r\n <Form.Control type='number' step='0.01' id={'documentRate' + index} disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} value={this.state.rates[index].documentRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applySpecialRates === false &&\r\n <Form.Control type='number' step='0.01' id={'documentRate' + index} disabled value={this.state.rates[index].documentRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n {\r\n this.state.applySpecialRates !== false &&\r\n <Form.Control type='number' step='0.01' id={'firstPageRate' + index} disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} value={this.state.rates[index].firstPageRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applySpecialRates === false && \r\n <Form.Control type='number' step='0.01' id={'firstPageRate' + index} disabled value={this.state.rates[index].firstPageRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n {\r\n this.state.applySpecialRates !== false &&\r\n <Form.Control type='number' step='0.01' id={'additionalPagesRate' + index} disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} value={this.state.rates[index].additionalPagesRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applySpecialRates === false && \r\n <Form.Control type='number' step='0.01' id={'additionalPagesRate' + index} disabled value={this.state.rates[index].additionalPagesRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n } \r\n </div>\r\n <div> </div>\r\n <Button id={'remove' + index} variant=\"danger\" size=\"sm\" style={{margin:1}} disabled={this.state.status === LOADING_STATUES.LOADING} onClick={this.handleRemoveRow}>Remove</Button>\r\n </Form.Row>\r\n ))\r\n }\r\n </div>\r\n\r\n return (\r\n <div style={{ marginLeft: formTemplateMarginLeft, marginRight: formTemplateMarginRight, marginTop:4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n <PageBanner pageHeading=\"A La Carte Special Rates\" buttons={pageButtons} />\r\n <Container fluid=\"true\" style={{ paddingLeft: 50, paddingBottom: 50, marginTop: 10, marginLeft: 4, marginRight: 4, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n <Row> </Row>\r\n <Form onSubmit={this.handleClickSave}>\r\n <Form.Row>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <div>Apply Special Rates:</div>\r\n <Form.Control id=\"applySpecialRates\" as='select' disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} style={{ maxWidth: 130 }} >\r\n {\r\n this.state.applySpecialRates !== false &&\r\n <option key=\"true\" selected value=\"true\">Yes</option>\r\n }\r\n {\r\n this.state.applySpecialRates !== false &&\r\n <option key=\"false\" value=\"false\">No</option>\r\n }\r\n {\r\n this.state.applySpecialRates === false &&\r\n <option key=\"true\" value=\"true\">Yes</option>\r\n }\r\n {\r\n this.state.applySpecialRates === false &&\r\n <option key=\"false\" selected value=\"false\">No</option>\r\n }\r\n </Form.Control>\r\n </div>\r\n </Form.Row>\r\n <Form.Row>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <div>Document Type:</div>\r\n {firstDocumentTypeControl}\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <div>Instrument Code:</div>\r\n {firstInstrumentCodeFormControl}\r\n </div>\r\n <div> </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <div>Document ($):</div>\r\n {\r\n this.state.applySpecialRates !== false &&\r\n <Form.Control type='number' step='0.01' id='documentRate0' disabled={this.state.status === LOADING_STATUES.LOADING } onChange={this.handleChange} value={this.state.rates[0].documentRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applySpecialRates === false &&\r\n <Form.Control type='number' step='0.01' id='documentRate0' disabled value={this.state.rates[0].documentRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <div>1st Page ($):</div>\r\n {\r\n this.state.applySpecialRates !== false &&\r\n <Form.Control type='number' step='0.01' id='firstPageRate0' disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} value={this.state.rates[0].firstPageRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applySpecialRates === false &&\r\n <Form.Control type='number' step='0.01' id='firstPageRate0' disabled value={this.state.rates[0].firstPageRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n </div>\r\n <div style={{ display: 'inline-block', marginLeft: 4 }}>\r\n <div>Additional Pages ($):</div>\r\n {\r\n this.state.applySpecialRates !== false &&\r\n <Form.Control type='number' step='0.01' id='additionalPagesRate0' disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} value={this.state.rates[0].additionalPagesRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n {\r\n this.state.applySpecialRates === false &&\r\n <Form.Control type='number' step='0.01' id='additionalPagesRate0' disabled value={this.state.rates[0].additionalPagesRate} style={{ maxWidth: 130, textAlign: 'right' }} />\r\n }\r\n </div>\r\n </Form.Row>\r\n {rateTable}\r\n <Row> </Row>\r\n <PrimaryButton buttonLabel=\"Submit\" disabled={this.state.status === LOADING_STATUES.LOADING} /> \r\n { \r\n this.state.status === LOADING_STATUES.SUCCESS &&\r\n <span style={{width:18, verticalAlign: \"bottom\", paddingBottom: 1, display:\"inline-block\"}}>{checkIconGreen}</span>\r\n }\r\n { \r\n this.state.status === LOADING_STATUES.LOADING &&\r\n <span style={{width:18, verticalAlign: \"bottom\", marginBottom: 1, display:\"inline-block\"}}>{spinnerIconGray}</span>\r\n }\r\n </Form>\r\n </Container>\r\n <Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} type={ALERT_TYPES.WARNING}/>\r\n <Confirmation show={this.state.showConfirmation} cancelConfirmation={this.handleCloseConfirmation} proceedConfirmation={this.handleSubmit} question='The special rates for credit card will also be reset. Continue?' />\r\n </div>\r\n\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(ALaCarteRatesSpecial);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, CommonControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\nimport { formatPhone } from \"../common/function/formattingUtils.js\";\r\n\r\nconst componentName = CommonControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName)),\r\n }\r\n}\r\n\r\nclass Common extends Component {\r\n\r\n state = {\r\n appTitle: \"\",\r\n countyName: \"\",\r\n\r\n contactName: \"\",\r\n contactTitle: \"\",\r\n contactPhone: \"\",\r\n contactEmail: \"\",\r\n\r\n bookLabel: \"\",\r\n torrensLabel: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n\r\n event.preventDefault();\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/common\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n\r\n if (event.target.id === 'contactPhone') {\r\n value = formatPhone(value, this.state.contactPhone);\r\n } else {\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n }\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/common\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n appTitle: content.appTitle,\r\n countyName: content.countyName,\r\n contactName: content.contactName,\r\n contactTitle: content.contactTitle,\r\n contactPhone: content.contactPhone,\r\n contactEmail: content.contactEmail,\r\n bookLabel: content.bookLabel,\r\n torrensLabel: content.torrensLabel,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Common\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [ { id: 'countyName', label: 'County Name', fieldType: 'text', required: true, value: this.state.countyName },\r\n { id: 'appTitle', label: 'App Title', fieldType: 'text', required: true, value: this.state.appTitle } ]\r\n },\r\n {\r\n formGroups: [ { id: 'contactName', label: 'Contact Name', fieldType: 'text', required: false, value: this.state.contactName },\r\n { id: 'contactTitle', label: 'Title ', fieldType: 'text', required: false, value: this.state.contactTitle },\r\n { id: 'contactPhone', label: 'Phone (ex. (612) 555-1234)', fieldType: 'tel', required: false, value: this.state.contactPhone },\r\n { id: 'contactEmail', label: 'Email ', fieldType: 'email', required: false, value: this.state.contactEmail } ]\r\n },\r\n {\r\n formGroups: [ { id: 'bookLabel', label: 'Book Label', fieldType: 'text', required: true, value: this.state.bookLabel },\r\n { id: 'torrensLabel', label: 'Torrens Label', fieldType: 'text', required: true, value: this.state.torrensLabel }]\r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(Common);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, EfileControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\n\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\nimport Alert from '../common/modal/Alert';\r\nimport { ALERT_TYPES } from \"../constants/constants\";\r\n\r\nconst componentName = EfileControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass Efile extends Component {\r\n\r\n state = {\r\n efile: false,\r\n efileCountyNote: \"\",\r\n acknowledgement: false,\r\n acknowledgementStatement: \"\",\r\n message:\"\",\r\n showAlert: false,\r\n alertMessage: \"\"\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t}\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n \r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING,\r\n message: \"\"\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/efile\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n message: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n \r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/efile\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n efile: content.efile,\r\n efileCountyNote: content.efileCountyNote,\r\n acknowledgement: content.acknowledgement,\r\n acknowledgementStatement: content.acknowledgementStatement,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n \r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"E File\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n message: this.state.message,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'efile', label: 'E File', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.efile }, { id: 'efileCountyNote', label: 'County Note', fieldType: 'text', value: this.state.efileCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: 'acknowledgement', label: 'Acknowledgement', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.acknowledgement }, { id: 'acknowledgementStatement', label: 'Statement', fieldType: 'text', value: this.state.acknowledgementStatement, lgSize: 10 }]\r\n }\r\n ]\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(Efile);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, LanguagesControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\n\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\nimport Alert from '../common/modal/Alert';\r\n\r\nconst componentName = LanguagesControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass Languages extends Component {\r\n\r\n state = {\r\n languages: false,\r\n message:\"\",\r\n showAlert: false,\r\n alertMessage: \"\"\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t}\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n \r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING,\r\n message: \"\"\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/languages\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n message: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n \r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/languages\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n languages: content.languages,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n \r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Languages\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n message: this.state.message,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'languages', label: 'Languages', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.languages }]\r\n }\r\n ]\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(Languages);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { Form, Container, Row, Col, Button } from 'react-bootstrap'\r\nimport axios from \"axios\";\r\nimport { setSelectedControlPanelType, HomeLatestNewsControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport PageBanner from \"../common/page/PageBanner\";\r\nimport PrimaryButton from \"../common/form/PrimaryButton\";\r\nimport { checkIconGreen, spinnerIconGray } from \"../../img/font_awesome/font_awesome\";\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\n\r\nconst componentName = HomeLatestNewsControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n\r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer\r\n };\r\n}\r\n\r\nclass HomeLatestNews extends Component {\r\n\r\n state = {\r\n paragraphs: [\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n }\r\n ],\r\n status: \"\",\r\n message: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/latestNews\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({\r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n // Add five blank entries\r\n handleMoreRows = (event) => {\r\n event.preventDefault();\r\n\r\n const currentLength = this.state.paragraphs.length;\r\n if (currentLength < 50) { // 50 is the abitrary max length\r\n let blankArray = [\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n }\r\n ]; // Five blanks\r\n // If adding the blankArray exceeds 100 in length, shorten the blankArray so that it won't exceed 100.\r\n if ((currentLength + blankArray.length) > 50) {\r\n blankArray.length = 50 - currentLength;\r\n }\r\n\r\n this.setState({\r\n paragraphs: [...this.state.paragraphs, ...blankArray]\r\n })\r\n } else {\r\n alert(\"There's a limit of 50 paragraphs.\");\r\n }\r\n }\r\n\r\n handleChange = (event) => {\r\n const targetId = event.target.id;\r\n if (targetId.includes(\"heading\")) {\r\n const index = targetId.replace(\"heading\", \"\");\r\n let paragraphs = [...this.state.paragraphs];\r\n let rate = { ...paragraphs[index] };\r\n rate.heading = event.target.value;\r\n paragraphs[index] = rate;\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n } else if (targetId.includes(\"paragraphContent\")) {\r\n const index = targetId.replace(\"paragraphContent\", \"\");\r\n let paragraphs = [...this.state.paragraphs];\r\n let rate = { ...paragraphs[index] };\r\n rate.paragraphContent = event.target.value;\r\n paragraphs[index] = rate;\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n } else {\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: event.target.value ? event.target.value : 0\r\n })\r\n }\r\n }\r\n\r\n handleRemoveRow = (event) => {\r\n let indexToRemove = event.target.id.replace(\"remove\", \"\");\r\n indexToRemove = parseInt(indexToRemove);\r\n let paragraphs = this.state.paragraphs;\r\n paragraphs.splice(indexToRemove, 1);\r\n this.setState({\r\n paragraphs: paragraphs\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/latestNews\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n let paragraphs = content.paragraphs;\r\n if (!paragraphs || paragraphs.length === 0) {\r\n paragraphs = [ {\r\n heading: '',\r\n paragraphContent: ''\r\n }]\r\n }\r\n\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n let formTemplateMarginLeft = 60\r\n let formTemplateMarginRight = 20\r\n if (this.props.formOnly) {\r\n formTemplateMarginLeft = 0\r\n formTemplateMarginRight = 0\r\n } else if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n }\r\n\r\n let pageButtons = [{ label: 'Add', onClickAction: this.handleMoreRows, className: 'btn btn-secondary btn-sm' }]\r\n\r\n let paragraphTable =\r\n <>\r\n {\r\n this.state.paragraphs.map((rate, index) => (\r\n (index > 0) &&\r\n <Row>\r\n <Col xs={3} sm={3} md={3} xl={3} >\r\n <Form.Control type='text' id={'heading' + index} disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[index].heading} style={{ maxWidth: 400}} />\r\n </Col>\r\n <Col xs={6} sm={6} md={7} xl={8} style={{ paddingLeft: 0}}>\r\n <Form.Control type='text' id={'paragraphContent' + index} disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[index].paragraphContent} />\r\n </Col>\r\n \r\n <Col xs={3} sm={3} md={2} xl={1} style={{ paddingLeft: 0}}>\r\n \r\n <Button id={'remove' + index} variant=\"danger\" size=\"sm\" style={{ margin: 1 }} disabled={this.state.status === 'LOADING'} onClick={this.handleRemoveRow}>Remove</Button>\r\n </Col>\r\n </Row>\r\n ))\r\n }\r\n </>\r\n\r\n return (\r\n <div style={{ marginLeft: formTemplateMarginLeft, marginRight: formTemplateMarginRight, marginTop:4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n <PageBanner pageHeading=\"More News\" buttons={pageButtons} />\r\n <Container fluid=\"true\" style={{ paddingLeft: 50, paddingBottom: 50, marginTop: 10, marginLeft:4, marginRight:4, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n <Row> </Row>\r\n <Form onSubmit={this.handleSubmit}>\r\n <Row >\r\n <Col xs={3} sm={3} md={3} xl={3} >\r\n <div>Heading:</div>\r\n <Form.Control type='text' id='heading0' disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[0].heading} style={{ maxWidth: 400 }} />\r\n </Col>\r\n <Col xs={6} sm={6} md={7} xl={8} style={{ paddingLeft: 0}} >\r\n <div>Paragraph:</div>\r\n <Form.Control type='text' id='paragraphContent0' disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[0].paragraphContent} />\r\n </Col>\r\n </Row>\r\n {paragraphTable}\r\n <Row> </Row>\r\n <PrimaryButton buttonLabel=\"Submit\" disabled={this.state.status === 'LOADING'} /> \r\n {\r\n this.state.status === 'SUCCESS' &&\r\n <span style={{ width: 18, verticalAlign: \"bottom\", paddingBottom: 1, display: \"inline-block\" }}>{checkIconGreen}</span>\r\n }\r\n {\r\n this.state.status === 'LOADING' &&\r\n <span style={{ width: 18, verticalAlign: \"bottom\", marginBottom: 1, display: \"inline-block\" }}>{spinnerIconGray}</span>\r\n }\r\n </Form>\r\n </Container>\r\n\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(HomeLatestNews);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { Form, Container, Row, Col, Button } from 'react-bootstrap'\r\nimport axios from \"axios\";\r\nimport { setSelectedControlPanelType, HomeExternalLinksControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport PageBanner from \"../common/page/PageBanner\";\r\nimport PrimaryButton from \"../common/form/PrimaryButton\";\r\nimport { checkIconGreen, spinnerIconGray } from \"../../img/font_awesome/font_awesome\";\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = HomeExternalLinksControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n\r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer\r\n };\r\n}\r\n\r\nclass HomeExternalLinks extends Component {\r\n\r\n state = {\r\n paragraphs: [\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n }\r\n ],\r\n status: \"\",\r\n message: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/externalLinks\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({\r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n // Add five blank entries\r\n handleMoreRows = (event) => {\r\n event.preventDefault();\r\n\r\n const currentLength = this.state.paragraphs.length;\r\n if (currentLength < 50) { // 50 is the abitrary max length\r\n let blankArray = [\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n }\r\n ]; // Five blanks\r\n // If adding the blankArray exceeds 100 in length, shorten the blankArray so that it won't exceed 100.\r\n if ((currentLength + blankArray.length) > 50) {\r\n blankArray.length = 50 - currentLength;\r\n }\r\n\r\n this.setState({\r\n paragraphs: [...this.state.paragraphs, ...blankArray]\r\n })\r\n } else {\r\n alert(\"There's a limit of 50 links.\");\r\n }\r\n }\r\n\r\n handleChange = (event) => {\r\n const targetId = event.target.id;\r\n if (targetId.includes(\"heading\")) {\r\n const index = targetId.replace(\"heading\", \"\");\r\n let paragraphs = [...this.state.paragraphs];\r\n let rate = { ...paragraphs[index] };\r\n rate.heading = event.target.value;\r\n paragraphs[index] = rate;\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n } else if (targetId.includes(\"paragraphContent\")) {\r\n const index = targetId.replace(\"paragraphContent\", \"\");\r\n let paragraphs = [...this.state.paragraphs];\r\n let rate = { ...paragraphs[index] };\r\n rate.paragraphContent = event.target.value;\r\n paragraphs[index] = rate;\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n } else {\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: event.target.value ? event.target.value : 0\r\n })\r\n }\r\n }\r\n\r\n handleRemoveRow = (event) => {\r\n let indexToRemove = event.target.id.replace(\"remove\", \"\");\r\n indexToRemove = parseInt(indexToRemove);\r\n let paragraphs = this.state.paragraphs;\r\n paragraphs.splice(indexToRemove, 1);\r\n this.setState({\r\n paragraphs: paragraphs\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/externalLinks\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n let paragraphs = content.paragraphs;\r\n if (!paragraphs || paragraphs.length === 0) {\r\n paragraphs = [ {\r\n heading: '',\r\n paragraphContent: ''\r\n }]\r\n }\r\n\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n let formTemplateMarginLeft = 60\r\n let formTemplateMarginRight = 20\r\n if (this.props.formOnly) {\r\n formTemplateMarginLeft = 0\r\n formTemplateMarginRight = 0\r\n } else if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n }\r\n\r\n let pageButtons = [{ label: 'Add', onClickAction: this.handleMoreRows, className: 'btn btn-secondary btn-sm' }]\r\n\r\n let paragraphTable =\r\n <>\r\n {\r\n this.state.paragraphs.map((rate, index) => (\r\n (index > 0) &&\r\n <Row>\r\n <Col xs={3} sm={3} md={3} xl={3} >\r\n <Form.Control type='text' id={'heading' + index} disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[index].heading} style={{ maxWidth: 400}} />\r\n </Col>\r\n <Col xs={6} sm={6} md={7} xl={8} style={{ paddingLeft: 0}}>\r\n <Form.Control type='text' id={'paragraphContent' + index} disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[index].paragraphContent} />\r\n </Col>\r\n \r\n <Col xs={3} sm={3} md={2} xl={1} style={{ paddingLeft: 0}}>\r\n \r\n <Button id={'remove' + index} variant=\"danger\" size=\"sm\" style={{ margin: 1 }} disabled={this.state.status === 'LOADING'} onClick={this.handleRemoveRow}>Remove</Button>\r\n </Col>\r\n </Row>\r\n ))\r\n }\r\n </>\r\n\r\n return (\r\n <div style={{ marginLeft: formTemplateMarginLeft, marginRight: formTemplateMarginRight, marginTop:4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n <PageBanner pageHeading=\"More Links\" buttons={pageButtons} />\r\n <Container fluid=\"true\" style={{ paddingLeft: 50, paddingBottom: 50, marginTop: 10, marginLeft: 4, marginRight: 4, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n <Row> </Row>\r\n <Form onSubmit={this.handleSubmit}>\r\n <Row >\r\n <Col xs={3} sm={3} md={3} xl={3} >\r\n <div>Description:</div>\r\n <Form.Control type='text' id='heading0' disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[0].heading} style={{ maxWidth: 400 }} />\r\n </Col>\r\n <Col xs={6} sm={6} md={7} xl={8} style={{ paddingLeft: 0}} >\r\n <div>URL:</div>\r\n <Form.Control type='text' id='paragraphContent0' disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[0].paragraphContent} />\r\n </Col>\r\n </Row>\r\n {paragraphTable}\r\n <Row> </Row>\r\n <PrimaryButton buttonLabel=\"Submit\" disabled={this.state.status === 'LOADING'} /> \r\n {\r\n this.state.status === LOADING_STATUES.SUCCESS &&\r\n <span style={{ width: 18, verticalAlign: \"bottom\", paddingBottom: 1, display: \"inline-block\" }}>{checkIconGreen}</span>\r\n }\r\n {\r\n this.state.status === LOADING_STATUES.LOADING &&\r\n <span style={{ width: 18, verticalAlign: \"bottom\", marginBottom: 1, display: \"inline-block\" }}>{spinnerIconGray}</span>\r\n }\r\n </Form>\r\n </Container>\r\n\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(HomeExternalLinks);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, HomeNotableDatesControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = HomeNotableDatesControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass HomeNotableDates extends Component {\r\n\r\n state = {\r\n showNotableDates: false,\r\n showSeparateIndexes: false,\r\n useVerificationDate: false,\r\n abstractVerified: false,\r\n abstractLegalVerified: false,\r\n abstractPosted: false,\r\n abstractLegalPosted: false,\r\n abstractIndexBegin: false,\r\n abstractImageBegin: false,\r\n abstractImageThru: false,\r\n torrensVerified: false,\r\n torrensLegalVerified: false,\r\n torrensPosted: false,\r\n torrensLegalPosted: false,\r\n torrensIndexBegin: false,\r\n torrensImageBegin: false,\r\n torrensImageThru: false,\r\n torrensCertificateThru: false,\r\n lienVerified: false,\r\n lienPosted: false,\r\n lienIndexBegin: false,\r\n lienImageBegin: false,\r\n lienImageThru: false,\r\n status: \"\",\r\n message: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n\r\n event.preventDefault();\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/notableDates\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/notableDates\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n showNotableDates: content.showNotableDates,\r\n showSeparateIndexes: content.showSeparateIndexes,\r\n useVerificationDate: content.useVerificationDate,\r\n abstractVerified: content.abstractVerified,\r\n abstractLegalVerified: content.abstractLegalVerified,\r\n abstractPosted: content.abstractPosted,\r\n abstractLegalPosted: content.abstractLegalPosted,\r\n abstractIndexBegin: content.abstractIndexBegin,\r\n abstractImageBegin: content.abstractImageBegin,\r\n abstractImageThru: content.abstractImageThru,\r\n torrensVerified: content.torrensVerified,\r\n torrensLegalVerified: content.torrensLegalVerified,\r\n torrensPosted: content.torrensPosted,\r\n torrensLegalPosted: content.torrensLegalPosted,\r\n torrensIndexBegin: content.torrensIndexBegin,\r\n torrensImageBegin: content.torrensImageBegin,\r\n torrensImageThru: content.torrensImageThru,\r\n torrensCertificateThru: content.torrensCertificateThru,\r\n lienVerified: content.lienVerified,\r\n lienPosted: content.lienPosted,\r\n lienIndexBegin: content.lienIndexBegin,\r\n lienImageBegin: content.lienImageBegin,\r\n lienImageThru: content.lienImageThru,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n\r\n let disableLegal = this.state.showSeparateIndexes === false || this.state.showSeparateIndexes === 'false';\r\n\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Home - Notable Dates\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'showNotableDates', label: 'Use Notable Dates', fieldType: 'select', primaryCriteria: true, value: this.state.showNotableDates, style: {minWidth: '11rem'} }]\r\n },\r\n {\r\n formGroups: [{ id: 'showSeparateIndexes', label: 'Show Separate Indexes', fieldType: 'select', value: this.state.showSeparateIndexes, style: {minWidth: '11rem'} }]\r\n },\r\n {\r\n formGroups: [{ id: 'useVerificationDate', label: 'Verified Date as Thru Date', fieldType: 'select', value: this.state.useVerificationDate, style: {minWidth: '11rem'} }]\r\n },\r\n {\r\n formGroups: [{ id: 'abstractIndexBegin', label: 'Abstract Index Begin', fieldType: 'select', primaryCriteria: true, value: this.state.abstractIndexBegin, style: {minWidth: '11rem'} },\r\n { id: 'torrensIndexBegin', label: 'Torrens Index Begin', fieldType: 'select', primaryCriteria: true, value: this.state.torrensIndexBegin, style: {minWidth: '11rem'} },\r\n { id: 'lienIndexBegin', label: 'Lien Index Begin', fieldType: 'select', primaryCriteria: true, value: this.state.lienIndexBegin, style: {minWidth: '11rem'} }]\r\n },\r\n {\r\n formGroups: [{ id: 'abstractPosted', label: 'Indexed', fieldType: 'select', value: this.state.abstractPosted, style: { minWidth: '11rem' } },\r\n { id: 'torrensPosted', label: 'Indexed', fieldType: 'select', value: this.state.torrensPosted, style: { minWidth: '11rem' } },\r\n { id: 'lienPosted', label: 'Indexed', fieldType: 'select', value: this.state.lienPosted, style: { minWidth: '11rem' } }]\r\n },\r\n {\r\n formGroups: [{ id: 'abstractLegalPosted', label: 'Legal Indexed', fieldType: 'select', disableField: disableLegal, value: this.state.abstractLegalPosted, style: { minWidth: '11rem' } },\r\n { id: 'torrensLegalPosted', label: 'Legal Indexed', fieldType: 'select', disableField: disableLegal, value: this.state.torrensLegalPosted, style: { minWidth: '11rem' } },\r\n { id: 'bogus1', label: '', fieldType: 'select', value: '', disableField: true, style: {minWidth: '11rem'} } ]\r\n },\r\n {\r\n formGroups: [{ id: 'abstractVerified', label: 'Verified', fieldType: 'select', value: this.state.abstractVerified, style: {minWidth: '11rem'} }, \r\n { id: 'torrensVerified', label: 'Verified', fieldType: 'select', value: this.state.torrensVerified, style: {minWidth: '11rem'} }, \r\n { id: 'lienVerified', label: 'Verified', fieldType: 'select', value: this.state.lienVerified, style: {minWidth: '11rem'} }]\r\n },\r\n {\r\n formGroups: [{ id: 'abstractLegalVerified', label: 'Legal Verified', fieldType: 'select', disableField: disableLegal, value: this.state.abstractLegalVerified, style: {minWidth: '11rem'} }, \r\n { id: 'torrensLegalVerified', label: 'Legal Verified', fieldType: 'select', disableField: disableLegal, value: this.state.torrensLegalVerified, style: {minWidth: '11rem'} },\r\n { id: 'bogus2', label: '', fieldType: 'select', value: '', disableField: true, style: {minWidth: '11rem'} } ]\r\n },\r\n {\r\n formGroups: [{ id: 'abstractImageBegin', label: 'Image Begin', fieldType: 'select', value: this.state.abstractImageBegin, style: {minWidth: '11rem'} },\r\n { id: 'torrensImageBegin', label: 'Image Begin', fieldType: 'select', value: this.state.torrensImageBegin, style: {minWidth: '11rem'} },\r\n { id: 'lienImageBegin', label: 'Image Begin', fieldType: 'select', value: this.state.lienImageBegin, style: {minWidth: '11rem'} }]\r\n },\r\n {\r\n formGroups: [{ id: 'abstractImageThru', label: 'Image Thru', fieldType: 'select', value: this.state.abstractImageThru, style: {minWidth: '11rem'} },\r\n { id: 'torrensImageThru', label: 'Image Thru', fieldType: 'select', value: this.state.torrensImageThru, style: {minWidth: '11rem'} },\r\n { id: 'lienImageThru', label: 'Image Thru', fieldType: 'select', value: this.state.lienImageThru, style: {minWidth: '11rem'} } ]\r\n }, \r\n {\r\n formGroups: [{ id: 'bogus3', label: '', fieldType: 'select', value: '', disableField: true, style: {minWidth: '11rem'} },\r\n { id: 'torrensCertificateThru', label: 'Certficate Thru', fieldType: 'select', value: this.state.torrensCertificateThru, style: {minWidth: '11rem'} },\r\n { id: 'bogus4', label: '', fieldType: 'select', value: '', disableField: true, style: {minWidth: '11rem'} } ]\r\n }\r\n ] \r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(HomeNotableDates);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, HomeSelectionsControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = HomeSelectionsControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass HomeSelections extends Component {\r\n\r\n state = {\r\n latestNews: false,\r\n latestNewsLoginPage: false,\r\n latestNewsMore: false,\r\n disclaimer: false,\r\n contactUs: false,\r\n links: false,\r\n linksLoginPage: false,\r\n linksMore: false,\r\n loginSlides: false,\r\n notableDates: false,\r\n transactions: false,\r\n status: \"\",\r\n message: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n\r\n event.preventDefault();\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/homeSelections\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/homeSelections\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n latestNews: content.latestNews,\r\n latestNewsLoginPage: content.latestNewsLoginPage,\r\n latestNewsMore: content.latestNewsMore,\r\n disclaimer: content.disclaimer,\r\n contactUs: content.contactUs,\r\n links: content.links,\r\n linksLoginPage: content.linksLoginPage,\r\n linksMore: content.linksMore,\r\n loginSlides: content.loginSlides,\r\n notableDates: content.notableDates,\r\n transactions: content.transactions,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Home - Selections\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'contactUs', label: 'Contact Us Card', fieldType: 'select', value: this.state.contactUs, style: {minWidth: 200} }]\r\n },\r\n {\r\n formGroups: [{ id: 'disclaimer', label: 'Disclaimer Card', fieldType: 'select', value: this.state.disclaimer, style: {minWidth: 200} }]\r\n },\r\n {\r\n formGroups: [{ id: 'disclaimerMessage', fieldType: 'label', hideRow: this.state.disclaimer !== true && this.state.disclaimer !== 'true', value: \"* Make sure there's a link labeled Disclaimer in Login - Links.\" }]\r\n },\r\n {\r\n formGroups: [{ id: 'latestNews', label: 'Latest News Card', fieldType: 'select', value: this.state.latestNews, style: { minWidth: 200 } },\r\n { id: 'latestNewsLoginPage', label: 'Login Page Latest News', fieldType: 'select', value: this.state.latestNewsLoginPage, style: { minWidth: 200 } },\r\n { id: 'latestNewsMore', label: 'More News', fieldType: 'select', value: this.state.latestNewsMore, style: { minWidth: 200 } }]\r\n },\r\n {\r\n formGroups: [{ id: 'links', label: 'Links Card', fieldType: 'select', value: this.state.links, style: { minWidth: 200 } },\r\n { id: 'linksLoginPage', label: 'Login Page Links', fieldType: 'select', value: this.state.linksLoginPage, style: { minWidth: 200 } },\r\n { id: 'linksMore', label: 'More Links', fieldType: 'select', value: this.state.linksMore, style: { minWidth: 200 } }]\r\n },\r\n {\r\n formGroups: [{ id: 'loginSlides', label: 'Login Slide Cards', fieldType: 'select', value: this.state.loginSlides, style: {minWidth: 200} }]\r\n },\r\n {\r\n formGroups: [{ id: 'notableDates', label: 'Notable Dates Card', fieldType: 'select', value: this.state.notableDates, style: {minWidth: 200} }]\r\n },\r\n {\r\n formGroups: [{ id: 'transactions', label: 'Transactions Card', fieldType: 'select', value: this.state.transactions, style: {minWidth: 200} }]\r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(HomeSelections);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { Form, Container, Row, Col, Button } from 'react-bootstrap'\r\nimport axios from \"axios\";\r\nimport { setSelectedControlPanelType, LoginPageLinksControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport PageBanner from \"../common/page/PageBanner\";\r\nimport PrimaryButton from \"../common/form/PrimaryButton\";\r\nimport { arrowDownIcon, arrowUpIcon, checkIconGreen, spinnerIconGray } from \"../../img/font_awesome/font_awesome\";\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = LoginPageLinksControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n\r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer\r\n };\r\n}\r\n\r\nclass LoginPageLinks extends Component {\r\n\r\n state = {\r\n paragraphs: [\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n }\r\n ],\r\n status: \"\",\r\n message: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/loginPageLinks\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({\r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n const targetId = event.target.id;\r\n if (targetId.includes(\"heading\")) {\r\n const index = targetId.replace(\"heading\", \"\");\r\n let paragraphs = [...this.state.paragraphs];\r\n let rate = { ...paragraphs[index] };\r\n rate.heading = event.target.value;\r\n paragraphs[index] = rate;\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n } else if (targetId.includes(\"paragraphContent\")) {\r\n const index = targetId.replace(\"paragraphContent\", \"\");\r\n let paragraphs = [...this.state.paragraphs];\r\n let rate = { ...paragraphs[index] };\r\n rate.paragraphContent = event.target.value;\r\n paragraphs[index] = rate;\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n } else {\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: event.target.value ? event.target.value : 0\r\n })\r\n }\r\n }\r\n\r\n handleUpRow = (event) => {\r\n event.preventDefault();\r\n const clickedId = event.target.closest(\"button\").id; // find the closest parent button\r\n let indexToMoveUp = clickedId.replace(\"up\", \"\");\r\n indexToMoveUp = parseInt(indexToMoveUp);\r\n if (indexToMoveUp === 0) {\r\n alert(\"Already at first row\" );\r\n return;\r\n }\r\n\r\n let paragraphs = this.state.paragraphs;\r\n [paragraphs[indexToMoveUp-1], paragraphs[indexToMoveUp]] = [paragraphs[indexToMoveUp], paragraphs[indexToMoveUp-1]];\r\n \r\n this.setState({\r\n paragraphs: paragraphs\r\n })\r\n }\r\n\r\n handleDownRow = (event) => {\r\n event.preventDefault();\r\n const clickedId = event.target.closest(\"button\").id; // find the closest parent button\r\n let indexToMoveDown = clickedId.replace(\"down\", \"\");\r\n indexToMoveDown = parseInt(indexToMoveDown);\r\n if (indexToMoveDown === 11) {\r\n alert(\"Already at last row\" );\r\n return;\r\n }\r\n\r\n let paragraphs = this.state.paragraphs;\r\n [paragraphs[indexToMoveDown], paragraphs[indexToMoveDown+1]] = [paragraphs[indexToMoveDown+1], paragraphs[indexToMoveDown]];\r\n\r\n this.setState({\r\n paragraphs: paragraphs\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/loginPageLinks\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n let paragraphs = content.paragraphs;\r\n if (!paragraphs ) {\r\n paragraphs = []\r\n }\r\n\r\n while (paragraphs.length < 12) {\r\n paragraphs.push( { heading: '', paragraphContent: '' })\r\n }\r\n\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n let formTemplateMarginLeft = 60\r\n let formTemplateMarginRight = 20\r\n if (this.props.formOnly) {\r\n formTemplateMarginLeft = 0\r\n formTemplateMarginRight = 0\r\n } else if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n }\r\n\r\n let paragraphTable =\r\n <>\r\n {\r\n this.state.paragraphs.map((rate, index) => (\r\n \r\n <Row>\r\n <Col xs={3} sm={3} md={3} xl={3} >\r\n <Form.Control type='text' id={'heading' + index} disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} value={this.state.paragraphs[index].heading} style={{ maxWidth: 400}} />\r\n </Col>\r\n <Col xs={6} sm={6} md={7} xl={8} style={{ paddingLeft: 0}}>\r\n <Form.Control type='text' id={'paragraphContent' + index} disabled={this.state.status === LOADING_STATUES.LOADING} onChange={this.handleChange} value={this.state.paragraphs[index].paragraphContent} />\r\n </Col>\r\n \r\n <Col xs={3} sm={3} md={2} xl={1} style={{ paddingLeft: 0}}>\r\n \r\n <Button id={'up' + index} variant=\"secondary\" size=\"sm\" style={{ margin: 1 }} disabled={this.state.status === LOADING_STATUES.LOADING} onClick={this.handleUpRow}>{arrowUpIcon}</Button>\r\n <Button id={'down' + index} variant=\"secondary\" size=\"sm\" style={{ margin: 1 }} disabled={this.state.status === LOADING_STATUES.LOADING} onClick={this.handleDownRow}>{arrowDownIcon}</Button>\r\n \r\n </Col>\r\n </Row>\r\n ))\r\n }\r\n </>\r\n\r\n return (\r\n <div style={{ marginLeft: formTemplateMarginLeft, marginRight: formTemplateMarginRight, marginTop:4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n <PageBanner pageHeading=\"Login Page Links\" />\r\n <Container fluid=\"true\" style={{ paddingLeft: 50, paddingBottom: 50, marginTop: 10, marginLeft: 4, marginRight: 4, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n <Row>\r\n <Col xs={3} sm={3} md={3} xl={3} >\r\n 1 or 2-word description (ex. Trimin Systems)\r\n </Col>\r\n <Col xs={6} sm={6} md={7} xl={8} style={{ paddingLeft: 0}}>\r\n URL (ex. https://www.trimingov.com/)\r\n </Col>\r\n \r\n <Col xs={3} sm={3} md={2} xl={1} style={{ paddingLeft: 0}} /> \r\n </Row>\r\n <Form onSubmit={this.handleSubmit}>\r\n {paragraphTable}\r\n <Row> </Row>\r\n <PrimaryButton buttonLabel=\"Submit\" disabled={this.state.status === LOADING_STATUES.LOADING} /> \r\n {\r\n this.state.status === LOADING_STATUES.SUCCESS &&\r\n <span style={{ width: 18, verticalAlign: \"bottom\", paddingBottom: 1, display: \"inline-block\" }}>{checkIconGreen}</span>\r\n }\r\n {\r\n this.state.status === LOADING_STATUES.LOADING &&\r\n <span style={{ width: 18, verticalAlign: \"bottom\", marginBottom: 1, display: \"inline-block\" }}>{spinnerIconGray}</span>\r\n }\r\n </Form>\r\n </Container>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(LoginPageLinks);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { Form, Container, Row, Col, Button } from 'react-bootstrap'\r\nimport axios from \"axios\";\r\nimport { setSelectedControlPanelType, LoginPageLatestNewsControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport PageBanner from \"../common/page/PageBanner\";\r\nimport PrimaryButton from \"../common/form/PrimaryButton\";\r\nimport { checkIconGreen, spinnerIconGray } from \"../../img/font_awesome/font_awesome\";\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\n\r\nconst componentName = LoginPageLatestNewsControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n\r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer\r\n };\r\n}\r\n\r\nclass LoginPageLatestNews extends Component {\r\n\r\n state = {\r\n paragraphs: [\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n }\r\n ],\r\n status: \"\",\r\n message: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/loginPageLatestNews\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({\r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n // Add five blank entries\r\n handleMoreRows = (event) => {\r\n event.preventDefault();\r\n\r\n const currentLength = this.state.paragraphs.length;\r\n if (currentLength < 50) { // 50 is the abitrary max length\r\n let blankArray = [\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n },\r\n {\r\n heading: '',\r\n paragraphContent: ''\r\n }\r\n ]; // Five blanks\r\n // If adding the blankArray exceeds 100 in length, shorten the blankArray so that it won't exceed 100.\r\n if ((currentLength + blankArray.length) > 50) {\r\n blankArray.length = 50 - currentLength;\r\n }\r\n\r\n this.setState({\r\n paragraphs: [...this.state.paragraphs, ...blankArray]\r\n })\r\n } else {\r\n alert(\"There's a limit of 50 paragraphs.\");\r\n }\r\n }\r\n\r\n handleChange = (event) => {\r\n const targetId = event.target.id;\r\n if (targetId.includes(\"heading\")) {\r\n const index = targetId.replace(\"heading\", \"\");\r\n let paragraphs = [...this.state.paragraphs];\r\n let rate = { ...paragraphs[index] };\r\n rate.heading = event.target.value;\r\n paragraphs[index] = rate;\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n } else if (targetId.includes(\"paragraphContent\")) {\r\n const index = targetId.replace(\"paragraphContent\", \"\");\r\n let paragraphs = [...this.state.paragraphs];\r\n let rate = { ...paragraphs[index] };\r\n rate.paragraphContent = event.target.value;\r\n paragraphs[index] = rate;\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n } else {\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: event.target.value ? event.target.value : 0\r\n })\r\n }\r\n }\r\n\r\n handleRemoveRow = (event) => {\r\n let indexToRemove = event.target.id.replace(\"remove\", \"\");\r\n indexToRemove = parseInt(indexToRemove);\r\n let paragraphs = this.state.paragraphs;\r\n paragraphs.splice(indexToRemove, 1);\r\n this.setState({\r\n paragraphs: paragraphs\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/loginPageLatestNews\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n let paragraphs = content.paragraphs;\r\n if (!paragraphs || paragraphs.length === 0) {\r\n paragraphs = [ {\r\n heading: '',\r\n paragraphContent: ''\r\n }]\r\n }\r\n\r\n this.setState({\r\n status: \"\",\r\n paragraphs\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n let formTemplateMarginLeft = 60\r\n let formTemplateMarginRight = 20\r\n if (this.props.formOnly) {\r\n formTemplateMarginLeft = 0\r\n formTemplateMarginRight = 0\r\n } else if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n }\r\n\r\n let pageButtons = [{ label: 'Add', onClickAction: this.handleMoreRows, className: 'btn btn-secondary btn-sm' }]\r\n\r\n let paragraphTable =\r\n <>\r\n {\r\n this.state.paragraphs.map((rate, index) => (\r\n (index > 0) &&\r\n <Row>\r\n <Col xs={3} sm={3} md={3} xl={3} >\r\n <Form.Control type='text' id={'heading' + index} disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[index].heading} style={{ maxWidth: 400}} />\r\n </Col>\r\n <Col xs={6} sm={6} md={7} xl={8} style={{ paddingLeft: 0}}>\r\n <Form.Control type='text' id={'paragraphContent' + index} disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[index].paragraphContent} />\r\n </Col>\r\n \r\n <Col xs={3} sm={3} md={2} xl={1} style={{ paddingLeft: 0}}>\r\n \r\n <Button id={'remove' + index} variant=\"danger\" size=\"sm\" style={{ margin: 1 }} disabled={this.state.status === 'LOADING'} onClick={this.handleRemoveRow}>Remove</Button>\r\n </Col>\r\n </Row>\r\n ))\r\n }\r\n </>\r\n\r\n return (\r\n <div style={{ marginLeft: formTemplateMarginLeft, marginRight: formTemplateMarginRight, marginTop:4, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n <PageBanner pageHeading=\"Latest News\" buttons={pageButtons} />\r\n <Container fluid=\"true\" style={{ paddingLeft: 50, paddingBottom: 50, marginTop: 10, marginLeft:4, marginRight:4, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n <Row> </Row>\r\n <Form onSubmit={this.handleSubmit}>\r\n <Row >\r\n <Col xs={3} sm={3} md={3} xl={3} >\r\n <div>Heading:</div>\r\n <Form.Control type='text' id='heading0' disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[0].heading} style={{ maxWidth: 400 }} />\r\n </Col>\r\n <Col xs={6} sm={6} md={7} xl={8} style={{ paddingLeft: 0}} >\r\n <div>Paragraph:</div>\r\n <Form.Control type='text' id='paragraphContent0' disabled={this.state.status === 'LOADING'} onChange={this.handleChange} value={this.state.paragraphs[0].paragraphContent} />\r\n </Col>\r\n </Row>\r\n {paragraphTable}\r\n <Row> </Row>\r\n <PrimaryButton buttonLabel=\"Submit\" disabled={this.state.status === 'LOADING'} /> \r\n {\r\n this.state.status === 'SUCCESS' &&\r\n <span style={{ width: 18, verticalAlign: \"bottom\", paddingBottom: 1, display: \"inline-block\" }}>{checkIconGreen}</span>\r\n }\r\n {\r\n this.state.status === 'LOADING' &&\r\n <span style={{ width: 18, verticalAlign: \"bottom\", marginBottom: 1, display: \"inline-block\" }}>{spinnerIconGray}</span>\r\n }\r\n </Form>\r\n </Container>\r\n\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(LoginPageLatestNews);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, LoginPageSlidesControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = LoginPageSlidesControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass LoginPageSlides extends Component {\r\n\r\n state = {\r\n numberOfSlides: 0,\r\n status: \"\",\r\n message: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n\r\n event.preventDefault();\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/loginPageSlides\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState({ \r\n numberOfSlides: content.numberOfSlides,\r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/loginPageSlides\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n numberOfSlides: content.numberOfSlides,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Login Page - Slides\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'numberOfSlides', label: 'Number Of Slides', fieldType: 'select', options: [{ code: 1, description: \"1\"}, {code : 2, description: \"2\"}, {code : 3, description: \"3\"}, {code : 4, description: \"4\"}, {code : 5, description: \"5\"}, {code : 6, description: \"6\"},], value: this.state.numberOfSlides, style: {minWidth: 200} }]\r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(LoginPageSlides);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, LoginPageRegistrationControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\n\r\nconst componentName = LoginPageRegistrationControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass LoginPageRegistration extends Component {\r\n\r\n state = {\r\n forgotPasswordLink: false,\r\n selfRegistration: false,\r\n emaileExpireIn: 4,\r\n loadingStatus: '',\r\n message: ''\r\n }\r\n\r\n handleSubmit = (event) => {\r\n\r\n event.preventDefault();\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/loginPageRegistration\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState({ \r\n forgotPasswordLink: content.forgotPasswordLink,\r\n selfRegistration: content.selfRegistration,\r\n emaileExpireIn: content.emaileExpireIn,\r\n loadingStatus: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n loadingStatus: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/loginPageRegistration\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n forgotPasswordLink: content.forgotPasswordLink,\r\n selfRegistration: content.selfRegistration,\r\n emaileExpireIn: content.emaileExpireIn,\r\n loadingStatus : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Login Page - Registration & Recovery\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'selfRegistration', label: 'Self Registration', fieldType: 'select', value: this.state.selfRegistration }]\r\n },\r\n {\r\n formGroups: [{ id: 'forgotPasswordLink', label: \"Forgot User/Password Link\", fieldType: 'select', value: this.state.forgotPasswordLink }]\r\n },\r\n {\r\n formGroups: [{ id: 'emaileExpireIn', label: 'Emails expire in (hours)', fieldType: 'number', required: true, value: this.state.emaileExpireIn} ] \r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(LoginPageRegistration);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, SearchControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport { SearchByAddressKey, SearchByBookAndPageKey, SearchByDateKey, SearchByDocumentNumberKey,\r\n SearchByLegalDescriptionKey, SearchByNameKey, SearchByParcelIdKey, SearchByTorrensCertificateKey, SearchByTorrensTextKey,\r\n SpecialSearchGrantorGranteeBookKey, SpecialSearchPlatKey, SpecialSearchTaxLienKey, SpecialSearchTractBookIdKey, SpecialSearchTractBookLegalKey, SearchByTractIndexNMIKey } from \"../../redux/actions/searchActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\nimport Alert from '../common/modal/Alert';\r\nimport { ALERT_TYPES } from \"../constants/constants\";\r\n\r\nconst componentName = SearchControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass Search extends Component {\r\n\r\n state = {\r\n defaultSearch: SearchByDocumentNumberKey,\r\n searchAccess: \"same\",\r\n searchByAddress: false,\r\n searchByAddressCountyNote: \"\",\r\n searchByBookAndPage: false,\r\n searchByBookAndPageCountyNote: \"\",\r\n searchByDate: false,\r\n searchByDateCountyNote: \"\",\r\n searchByDocumentNumber: false,\r\n searchByDocumentNumberCountyNote: \"\",\r\n searchByLegalDescription: false,\r\n searchByLegalDescriptionCountyNote: \"\",\r\n searchByName: false,\r\n searchByNameCountyNote: \"\",\r\n searchByParcelId: false,\r\n searchByParcelIdCountyNote: \"\",\r\n searchByTorrensCertificate: false,\r\n searchByTorrensCertificateCountyNote: \"\",\r\n searchByTorrensText: false,\r\n searchByTorrensTextCountyNote: \"\",\r\n searchByTaxLien: false,\r\n searchByTaxLienCountyNote: \"\",\r\n searchByGrantorGranteeBook: false,\r\n searchByGrantorGranteeBookCountyNote: \"\",\r\n searchByPlat: false,\r\n searchByPlatCountyNote: \"\",\r\n searchByTractBookId: false,\r\n searchByTractBookIdCountyNote: \"\",\r\n searchByTractBookLegal: false,\r\n searchByTractBookLegalCountyNote: \"\",\r\n searchByTractIndexNMI: false,\r\n searchByTractIndexNMICountyNote: \"\",\r\n message:\"\",\r\n showAlert: false,\r\n alertMessage: \"\"\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t}\r\n\r\n validate = () => {\r\n if (this.state.defaultSearch && (this.state[this.state.defaultSearch] === false || this.state[this.state.defaultSearch] === 'false')) {\r\n return \"Your default search needs to be enabled first.\";\r\n }\r\n \r\n return null;\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n let message = this.validate();\r\n if (message) {\r\n this.showAlert(message, ALERT_TYPES.WARNING);\r\n return;\r\n }\r\n\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING,\r\n message: \"\"\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n this.validate();\r\n \r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/search\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS,\r\n message: \"Settings and Users updated\"\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleSave = (event) => {\r\n event.preventDefault();\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING,\r\n message: \"\"\r\n })\r\n } else {\r\n return;\r\n }\r\n \r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/search\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS,\r\n message: \"Settings updated\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n message: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n \r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/search\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n defaultSearch: content.defaultSearch,\r\n searchAccess: content.searchAccess,\r\n searchByAddress: content.searchByAddress,\r\n searchByAddressCountyNote: content.searchByAddressCountyNote,\r\n searchByBookAndPage: content.searchByBookAndPage,\r\n searchByBookAndPageCountyNote: content.searchByBookAndPageCountyNote,\r\n searchByDate: content.searchByDate,\r\n searchByDateCountyNote: content.searchByDateCountyNote,\r\n searchByDocumentNumber: content.searchByDocumentNumber,\r\n searchByDocumentNumberCountyNote: content.searchByDocumentNumberCountyNote,\r\n searchByLegalDescription: content.searchByLegalDescription,\r\n searchByLegalDescriptionCountyNote: content.searchByLegalDescriptionCountyNote,\r\n searchByName: content.searchByName,\r\n searchByNameCountyNote: content.searchByNameCountyNote,\r\n searchByParcelId: content.searchByParcelId,\r\n searchByParcelIdCountyNote: content.searchByParcelIdCountyNote,\r\n searchByTorrensCertificate: content.searchByTorrensCertificate,\r\n searchByTorrensCertificateCountyNote: content.searchByTorrensCertificateCountyNote,\r\n searchByTorrensText: content.searchByTorrensText,\r\n searchByTorrensTextCountyNote: content.searchByTorrensTextCountyNote,\r\n searchByTaxLien: content.searchByTaxLien,\r\n searchByTaxLienCountyNote: content.searchByTaxLienCountyNote,\r\n searchByGrantorGranteeBook: content.searchByGrantorGranteeBook,\r\n searchByGrantorGranteeBookCountyNote: content.searchByGrantorGranteeBookCountyNote,\r\n searchByPlat: content.searchByPlat,\r\n searchByPlatCountyNote: content.searchByPlatCountyNote,\r\n searchByTractBookId: content.searchByTractBookId,\r\n searchByTractBookIdCountyNote: content.searchByTractBookIdCountyNote,\r\n searchByTractBookLegal: content.searchByTractBookLegal,\r\n searchByTractBookLegalCountyNote: content.searchByTractBookLegalCountyNote,\r\n searchByTractIndexNMI: content.searchByTractIndexNMI,\r\n searchByTractIndexNMICountyNote: content.searchByTractIndexNMICountyNote,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n\r\n let searchTypes = [\r\n { code: SearchByAddressKey, description: \"Search by Address\"},\r\n { code: SearchByBookAndPageKey, description: \"Search by Book & Page\"}, \r\n { code: SearchByDateKey, description: \"Search by Date\"},\r\n { code: SearchByDocumentNumberKey, description: \"Search by Document Number\"}, \r\n { code: SearchByLegalDescriptionKey, description: \"Search by Legal Description\"},\r\n { code: SearchByNameKey, description: \"Search by Name\"}, \r\n { code: SearchByParcelIdKey, description: \"Search by Parced ID\"},\r\n { code: SearchByTorrensCertificateKey, description: \"Search by Torrens Certificate\"}, \r\n { code: SearchByTorrensTextKey, description: \"Search by Torrens Text\"}, \r\n { code: SearchByTractIndexNMIKey, description: \"Search by Tract Index(NMI)\"},\r\n { code: SpecialSearchGrantorGranteeBookKey, description: \"Special Search - Grantor Grantee Book\"}, \r\n { code: SpecialSearchPlatKey, description: \"Special Search - Plat\"}, \r\n { code: SpecialSearchTaxLienKey, description: \"Special Search - Tax Lien\"},\r\n { code: SpecialSearchTractBookIdKey, description: \"Special Search - Tract Book Id\"},\r\n { code: SpecialSearchTractBookLegalKey, description: \"Special Search - Tract Book Legal\"}\r\n ];\r\n\r\n \r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Search 1\",\r\n onChange: this.handleChange,\r\n onSeconaryClick: this.state.searchAccess === \"same\" ? null : this.handleSave,\r\n onSubmit: this.handleSubmit,\r\n primaryButtonLabel: this.state.searchAccess === \"same\" ? \"Submit\" : \"Save and Update\",\r\n secondaryButtonLabel: this.state.searchAccess === \"same\" ? null :\"Save Only\",\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n message: this.state.message,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'searchAccess', label: 'Access', fieldType: 'select', value: this.state.searchAccess, options: [{ code: \"configurable\", description: \"Configurable by accounts\"}, {code: \"same\", description: \"Same for All Accounts\"}] }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByAddressKey, label: 'Address', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByAddress === true || this.state.searchByAddress === 'true' }, \r\n { id: SearchByAddressKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByAddressCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByBookAndPageKey, label: 'Book & Page', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByBookAndPage === true || this.state.searchByBookAndPage === 'true' }, \r\n { id: SearchByBookAndPageKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByBookAndPageCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByDateKey, label: 'Date', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByDate === true || this.state.searchByDate === 'true' }, \r\n { id: SearchByDateKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByDateCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByDocumentNumberKey, label: 'Document Number', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByDocumentNumber === true || this.state.searchByDocumentNumber === 'true' }, \r\n { id: SearchByDocumentNumberKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByDocumentNumberCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByLegalDescriptionKey, label: 'Legal Descriptions', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByLegalDescription === true || this.state.searchByLegalDescription === 'true' }, \r\n { id: SearchByLegalDescriptionKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByLegalDescriptionCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByNameKey, label: 'Name', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByName === true || this.state.searchByName === 'true' }, \r\n { id: SearchByNameKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByNameCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByParcelIdKey, label: 'Parcel Id', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByParcelId === true || this.state.searchByParcelId === 'true' }, \r\n { id: SearchByParcelIdKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByParcelIdCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByTorrensCertificateKey, label: 'Torrens Certificate', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTorrensCertificate === true || this.state.searchByTorrensCertificate === 'true' }, \r\n { id: SearchByTorrensCertificateKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByTorrensCertificateCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SearchByTorrensTextKey, label: 'Torrens Text', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTorrensText === true || this.state.searchByTorrensText === 'true' }, \r\n { id: SearchByTorrensTextKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByTorrensTextCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SpecialSearchPlatKey, label: 'Plat', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByPlat === true || this.state.searchByPlat === 'true' }, \r\n { id: SpecialSearchPlatKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByPlatCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SpecialSearchGrantorGranteeBookKey, label: 'Grantor/ee Book', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByGrantorGranteeBook === true || this.state.searchByGrantorGranteeBook === 'true' }, \r\n { id: SpecialSearchGrantorGranteeBookKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByGrantorGranteeBookCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SpecialSearchTaxLienKey, label: 'Tax Lien', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTaxLien === true || this.state.searchByTaxLien === 'true' }, \r\n { id: SpecialSearchTaxLienKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByTaxLienCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SpecialSearchTractBookIdKey, label: 'Tract Book ID', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTractBookId === true || this.state.searchByTractBookId === 'true' },\r\n { id: SpecialSearchTractBookIdKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByTractBookIdCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: SpecialSearchTractBookLegalKey, label: 'Tract Book Legal', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTractBookLegal === true || this.state.searchByTractBookLegal === 'true'},\r\n { id: SpecialSearchTractBookLegalKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByTractBookLegalCountyNote, lgSize: 10 }]\r\n },\r\n \r\n {\r\n formGroups: [{ id: SearchByTractIndexNMIKey, label: 'Tract Index(NMI)', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.searchByTractIndexNMI === true || this.state.searchByTractIndexNMI === 'true' },\r\n { id: SearchByTractIndexNMIKey + 'CountyNote', label: 'County Note', fieldType: 'text', value: this.state.searchByTractIndexNMICountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: 'defaultSearch', label: 'Default Search', fieldType: 'select', value: this.state.defaultSearch, options: searchTypes }]\r\n }\r\n ]\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(Search);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, Search2ControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\n\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\nimport Alert from '../common/modal/Alert';\r\n\r\nconst componentName = Search2ControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName)),\r\n setHelperData: (result) => dispatch({ type: result.name, results: result.baseContent })\r\n }\r\n}\r\n\r\nclass Search2 extends Component {\r\n\r\n state = {\r\n map: false,\r\n tax: false,\r\n allOnlySearch: false,\r\n downloadResults: false,\r\n message:\"\",\r\n showAlert: false,\r\n alertMessage: \"\"\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t}\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n \r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING,\r\n message: \"\"\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/search2\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.props.setHelperData(response.data.content);\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n message: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n \r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/search2\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n map: content.map,\r\n tax: content.tax,\r\n allOnlySearch: content.allOnlySearch,\r\n downloadResults: content.downloadResults,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n \r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Search 2\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n message: this.state.message,\r\n formGroupRows: [\r\n {\r\n heading: 'Search',\r\n formGroups: [{ id: 'allOnlySearch', label: 'All on distinct types', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.allOnlySearch }]\r\n },\r\n {\r\n heading: 'Results',\r\n formGroups: [{ id: 'downloadResults', label: 'Download', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.downloadResults }]\r\n },\r\n {\r\n heading: 'Details',\r\n formGroups: [{ id: 'map', label: 'Map', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.map }]\r\n },\r\n {\r\n formGroups: [{ id: 'tax', label: 'Tax', fieldType: 'select', style: {minWidth: '10rem'}, value: this.state.tax }]\r\n }\r\n ]\r\n }\r\n\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(Search2);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, ReportsControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = ReportsControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass Reports extends Component {\r\n\r\n state = {\r\n statementReport: false,\r\n statementReportCountyNote: \"\",\r\n auditAccountsReport: false,\r\n auditAccountsReportCountyNote: \"\",\r\n auditUsersReport: false,\r\n auditUsersReportCountyNote: \"\",\r\n accountTypeReport: false,\r\n accountTypeReportCountyNote: \"\",\r\n\r\n status: \"\",\r\n message: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/reports\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n \r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/reports\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n statementReport: content.statementReport ? content.statementReport : false,\r\n statementReportCountyNote: content.statementReportCountyNote,\r\n auditAccountsReport: content.auditAccountsReport ? content.auditAccountsReport : false,\r\n auditAccountsReportCountyNote: content.auditAccountsReportCountyNote,\r\n auditUsersReport: content.auditUsersReport ? content.auditUsersReport : false,\r\n auditUsersReportCountyNote: content.auditUsersReportCountyNote,\r\n accountTypeReport: content.accountTypeReport ? content.accountTypeReport : false,\r\n accountTypeReportCountyNote: content.accountTypeReportCountyNote,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Reports\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'auditAccountsReport', label: 'Account', fieldType: 'select', style: {minWidth: 150}, value: this.state.auditAccountsReport, lgSize: 2 }, \r\n { id: 'auditAccountsReportCountyNote', label: 'County Notes', fieldType: 'text', style: {minWidth: 1000}, value: this.state.auditAccountsReportCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: 'auditUsersReport', label: 'User', fieldType: 'select', style: {minWidth: 150}, value: this.state.auditUsersReport, lgSize: 2 }, \r\n { id: 'auditUsersReportCountyNote', label: 'County Notes', fieldType: 'text', style: {minWidth: 1000}, value: this.state.auditUsersReportCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: 'statementReport', label: 'Statement', fieldType: 'select', style: {minWidth: 150}, value: this.state.statementReport, lgSize: 2 }, \r\n { id: 'statementReportCountyNote', label: 'County Notes', fieldType: 'text', style: {minWidth: 1000}, value: this.state.statementReportCountyNote, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: 'accountTypeReport', label: 'Acccount Type', fieldType: 'select', style: {minWidth: 150}, value: this.state.accountTypeReport, lgSize: 2 }, \r\n { id: 'accountTypeReportCountyNote', label: 'County Notes', fieldType: 'text', style: {minWidth: 1000}, value: this.state.accountTypeReportCountyNote, lgSize: 10 }]\r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(Reports);","import React, {Component} from 'react';\r\nimport { Container, Row } from 'react-bootstrap'\r\n\r\nimport PageBanner from \"../common/page/PageBanner\";\r\nimport CountyNotes from \"../common/page/CountyNotes\";\r\nimport { connect } from \"react-redux\";\r\nimport { setSelectedControlPanelType, PerformanceMonitoringControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\n\r\nconst componentName = PerformanceMonitoringControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer\r\n };\r\n}\r\n\r\nclass PerformanceMonitoring extends Component {\r\n\r\n handleClick = (event) => {\r\n event.preventDefault();\r\n\r\n var url = configData.LANDSHARK_SERVER_URL + 'monitoring';\r\n window.open(url, '_blank');\r\n }\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.props.setSelectedControlPanelType();\r\n }\r\n\r\n render() {\r\n let formTemplateMarginLeft = 60\r\n if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n }\r\n\r\n return ( \r\n <div style={{ marginLeft: formTemplateMarginLeft, marginRight: 20, paddingBottom: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n <CountyNotes componentName={this.props.componentName} />\r\n <PageBanner pageHeading='Technical - Performance Monitoring' />\r\n <Container fluid=\"true\" style={{ paddingTop: 30, paddingLeft: 50, paddingBottom: 50, marginTop: 10, marginLeft: 4, marginRight: 4, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n <Row> </Row>\r\n <Row>\r\n <button onClick={this.handleClick} className=\"btn btn-primary\">Perform Performance Monitoring</button>\r\n </Row>\r\n </Container>\r\n\r\n </div>\r\n )\r\n }\r\n\r\n\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(PerformanceMonitoring);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, ReloadConfigurationControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\n\r\nimport moment from 'moment';\r\n\r\nimport configData from \"../../config/config.json\";\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\nimport Loading from '../common/modal/Loading';\r\nimport Alert from '../common/modal/Alert';\r\nimport AjaxResult from \"../../utils/AjaxResult\";\r\nimport AjaxResponseHandler from \"../../utils/AjaxResponseHandler\"\r\n\r\nconst componentName = ReloadConfigurationControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass ReloadConfiguration extends Component {\r\n\r\n state = {\r\n message:\"\",\r\n showAlert: false,\r\n alertMessage: \"\",\r\n loadingStatus: \"\"\r\n }\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n if (this.showLoading() === true) {\r\n let request = {};\r\n let newState = { loadingStatus: ''};\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/reloadConfiguration\", request, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n this.setState(newState);\r\n } else {\r\n this.setState(newState, this.showAlert(response.data.message));\r\n }\r\n },\r\n (error) => {\r\n AjaxResponseHandler.handleError(error, this.showAlert, null);\r\n this.setState(newState);\r\n }\r\n );\r\n\t\t}\r\n\t}\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t}\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t}\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n }\r\n\r\n render() {\r\n \r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Reload Configuration\",\r\n onSubmit: this.handleSubmit,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n message: this.state.message,\r\n formGroupRows: [\r\n ]\r\n }\r\n\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(ReloadConfiguration);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, LandSharkOneAccountsUsersControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\n\r\nimport configData from \"../../config/config.json\";\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\nimport Confirmation from '../common/modal/Confirmation';\r\nimport Loading from '../common/modal/Loading';\r\nimport Alert from '../common/modal/Alert';\r\n\r\nconst componentName = LandSharkOneAccountsUsersControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass LandSharkOneAccountsUsers extends Component {\r\n\r\n state = {\r\n landSharkOneDbAddress: \"\",\r\n landSharkOneDbName: \"\",\r\n landSharkOneDbUsername: \"\",\r\n landSharkOneDbPassword: \"\",\r\n message:\"\",\r\n showAlert: false,\r\n alertMessage: \"\",\r\n showMigrateConfirmationDialog: false,\r\n loadingStatus: \"\",\r\n errors: {}\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t}\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.status === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thandleConfirmMigration = () => {\r\n\r\n if (this.showLoading() === true) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/migrateLandSharkOneAccountsUsers\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: ''\r\n }, this.showAlert(response.data.message));\r\n },\r\n (error) => {\r\n this.setState({ \r\n status: ''\r\n });\r\n }\r\n );\r\n\t\t}\r\n\t}\r\n\r\n\tshowMigrateConfirmation = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\tshowMigrateConfirmationDialog: true\r\n\t\t})\r\n\t}\r\n\r\n\thideMigrateConfirmation = () => {\r\n\t\tthis.setState({\r\n status: '',\r\n\t\t\tshowMigrateConfirmationDialog: false\r\n\t\t})\r\n\t}\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n this.showMigrateConfirmation(event);\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n message: \"\",\r\n errors: {},\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t\r\n\t\tif (this.state.redirect) {\r\n\t\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t\t}\r\n\t}\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n }\r\n\r\n render() {\r\n \r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"LandShark One Migration - ACCOUNTS and USERS\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n message: this.state.message,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'landSharkOneDbAddress', label: 'LS1 DB Address (ex. localhost:1234)', fieldType: 'text', required: true, value: this.state.landSharkOneDbAddress }]\r\n },\r\n {\r\n formGroups: [{ id: 'landSharkOneDbName', label: 'LS1 DB Name (ex. LS)', fieldType: 'text', required: true, value: this.state.landSharkOneDbName }]\r\n },\r\n {\r\n formGroups: [{ id: 'landSharkOneDbUsername', label: 'LS1 DB Username', fieldType: 'text', required: true, value: this.state.landSharkOneDbUsername }]\r\n },\r\n {\r\n formGroups: [{ id: 'landSharkOneDbPassword', label: 'LS1 DB Password', fieldType: 'password', required: true, value: this.state.landSharkOneDbPassword }]\r\n }\r\n ]\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n <Confirmation show={this.state.showMigrateConfirmationDialog} cancelConfirmation={this.hideMigrateConfirmation} proceedConfirmation={this.handleConfirmMigration} question={'Clicking Yes will wipe clean any existing ACCOUNTS and USERS in LS2. Continue?'} />\r\n <Loading loadingIndicator={this.state.status === LOADING_STATUES.LOADING} />\r\n <Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(LandSharkOneAccountsUsers);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, LandSharkOneAuditLogControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\n\r\nimport moment from 'moment';\r\n\r\nimport configData from \"../../config/config.json\";\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\nimport Confirmation from '../common/modal/Confirmation';\r\nimport Loading from '../common/modal/Loading';\r\nimport Alert from '../common/modal/Alert';\r\n\r\nconst componentName = LandSharkOneAuditLogControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass LandSharkOneAuditLog extends Component {\r\n\r\n state = {\r\n landSharkOneDbAddress: \"\",\r\n landSharkOneDbName: \"\",\r\n landSharkOneDbUsername: \"\",\r\n landSharkOneDbPassword: \"\",\r\n fromDate: \"\",\r\n toDate: \"\",\r\n dataType: 'All',\r\n batchSize: 10000,\r\n message:\"\",\r\n showAlert: false,\r\n alertMessage: \"\",\r\n showMigrateConfirmationDialog: false,\r\n loadingStatus: \"\",\r\n errors: {}\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t}\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.status === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thandleConfirmMigration = () => {\r\n\r\n if (this.showLoading() === true) {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/migrateLandSharkOneAuditLog\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: ''\r\n }, this.showAlert(response.data.message));\r\n },\r\n (error) => {\r\n this.setState({ \r\n status: ''\r\n });\r\n }\r\n );\r\n\t\t}\r\n\t}\r\n\r\n\tshowMigrateConfirmation = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\tshowMigrateConfirmationDialog: true\r\n\t\t})\r\n\t}\r\n\r\n\thideMigrateConfirmation = () => {\r\n\t\tthis.setState({\r\n status: '',\r\n\t\t\tshowMigrateConfirmationDialog: false\r\n\t\t})\r\n\t}\r\n\r\n handleDatePickerChangeFromDate = (date) => {\r\n this.setState({\r\n fromDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handleDatePickerChangeToDate = (date) => {\r\n this.setState({\r\n toDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n this.showMigrateConfirmation(event);\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n message: \"\",\r\n errors: {},\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t\r\n\t\tif (this.state.redirect) {\r\n\t\t\tthis.props.history.push('/controlPanel/accounts');\r\n\t\t}\r\n\t}\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n }\r\n\r\n render() {\r\n \r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"LandShark One Migration - AUDIT LOG\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n message: this.state.message,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'landSharkOneDbAddress', label: 'LS1 DB Address (ex. localhost:1234)', fieldType: 'text', required: true, primaryCriteria: true, value: this.state.landSharkOneDbAddress }]\r\n },\r\n {\r\n formGroups: [{ id: 'landSharkOneDbName', label: 'LS1 DB Name (ex. LS)', fieldType: 'text', required: true, primaryCriteria: true, value: this.state.landSharkOneDbName }]\r\n },\r\n {\r\n formGroups: [{ id: 'landSharkOneDbUsername', label: 'LS1 DB Username', fieldType: 'text', required: true, primaryCriteria: true, value: this.state.landSharkOneDbUsername }]\r\n },\r\n {\r\n formGroups: [{ id: 'landSharkOneDbPassword', label: 'LS1 DB Password', fieldType: 'password', required: true, primaryCriteria: true, value: this.state.landSharkOneDbPassword }]\r\n },\r\n {\r\n formGroups: [{ id: 'fromDate', label: \"From Date\", fieldType: 'date', value: this.state.fromDate, handleDatePickerChange: this.handleDatePickerChangeFromDate, error: this.state.errors['fromDate'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'toDate', label: \"To Date\", fieldType: 'date', value: this.state.toDate, handleDatePickerChange: this.handleDatePickerChangeToDate, error: this.state.errors['toDate'] }]\r\n },\r\n {\r\n formGroups: [{ id: 'dataType', label: \"Data Type\", fieldType: 'select', options: [{code: \"all\", description: \"All\"}, {code: \"transactions\", description: \"Transactions Only\"}], value: this.state.dataType }]\r\n },\r\n {\r\n formGroups: [{ id: 'batchSize', label: \"Migration Batch Size\", fieldType: 'number', numberType:'integer', value: this.state.batchSize }]\r\n }\r\n ]\r\n }\r\n\r\n let deleteQuestion = 'Clicking Yes will delete all previously migrated LS1 Audit Log data. Continue?'; \r\n if (this.state.fromDate != '' && this.state.toDate != '') {\r\n deleteQuestion = 'Clicking Yes will delete previously migrated ' + this.state.fromDate + '-' + this.state.toDate + ' LS1 Audit Log data . Continue?'; \r\n } else if (this.state.fromDate != '') {\r\n deleteQuestion = 'Clicking Yes will delete previously migrated LS1 Audit Log data from and include ' + this.state.fromDate + '. Continue?'; \r\n } else if (this.state.toDate != '') {\r\n deleteQuestion = 'Clicking Yes will delete previously migrated LS1 Audit Log data up to and include ' + this.state.toDate + '. Continue?'; \r\n }\r\n\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n <Confirmation show={this.state.showMigrateConfirmationDialog} cancelConfirmation={this.hideMigrateConfirmation} proceedConfirmation={this.handleConfirmMigration} question={deleteQuestion} />\r\n <Loading loadingIndicator={this.state.status === LOADING_STATUES.LOADING} />\r\n <Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(LandSharkOneAuditLog);","import React, {Component} from 'react';\r\n\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { connect } from \"react-redux\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { setSelectedControlPanelType, UserLockoutControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\n\r\nconst componentName = UserLockoutControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass UserLockout extends Component {\r\n\r\n state = {\r\n messageLogin: '',\r\n messageHeadline: '',\r\n lockoutInPlace: false,\r\n status: ''\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n const { status, ...request } = this.state; // remove UI only fields before submitting\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/userLockout\", request, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: value\r\n })\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n\t\tif (status === 'ERROR') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: \"\"\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: \"\"\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n \r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/userLockout\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n lockoutInPlace: content.lockoutInPlace,\r\n messageLogin: content.messageLogin,\r\n messageHeadline: content.messageHeadline,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Lockout - Step 1\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'lockoutInPlace', label: 'System Lockout', fieldType: 'select', value: this.state.lockoutInPlace }]\r\n },\r\n {\r\n formGroups: [{ id: 'messageLogin', label: 'Message - Login Unavailable', fieldType: 'text', required:true, value: this.state.messageLogin, lgSize: 10 }]\r\n },\r\n {\r\n formGroups: [{ id: 'messageHeadline', label: 'Message - Headline', fieldType: 'text', required: true, value: this.state.messageHeadline, lgSize: 10 }]\r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(UserLockout);","import React, { Component } from 'react';\r\nimport { Container, Row } from 'react-bootstrap'\r\n\r\nimport PageBanner from \"../common/page/PageBanner\";\r\nimport CountyNotes from \"../common/page/CountyNotes\";\r\nimport { connect } from \"react-redux\";\r\nimport { setSelectedControlPanelType, UserLockout2ControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\nimport Confirmation from '../common/modal/Confirmation'\r\nimport configData from \"../../config/config.json\";\r\nimport axios from \"axios\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport Alert from '../common/modal/Alert';\r\nimport Loading from '../common/modal/Loading';\r\n\r\nconst componentName = UserLockout2ControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return {\r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n sideNavigationOpen: state.sideNavigationReducer\r\n };\r\n}\r\n\r\nclass UserLockout2 extends Component {\r\n\r\n state = {\r\n showConfirmation: false,\r\n showAlert:false,\r\n alertMessage:'',\r\n loadingStatus: ''\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n handleClick = (event) => {\r\n event.preventDefault();\r\n\r\n this.setState({\r\n showConfirmation: true\r\n });\r\n\r\n }\r\n\r\n handleSubmit = () => {\r\n if (this.showLoading() === true) {\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/endUserSessions\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState( {\r\n loadingStatus : \"\",\r\n showAlert: true,\r\n alertMessage: response.data.message\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n\t\t}\r\n }\r\n\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t}\r\n\r\n handleCloseConfirmation = () => {\r\n this.setState({\r\n showConfirmation: false\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n }\r\n\r\n render() {\r\n let formTemplateMarginLeft = 60\r\n if (this.props.sideNavigationOpen) {\r\n formTemplateMarginLeft = 270\r\n }\r\n\r\n return (\r\n <>\r\n <div style={{ marginLeft: formTemplateMarginLeft, marginRight: 20, paddingBottom: 4, marginTop: 4, borderTop: '1px solid lightGray', boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n <CountyNotes componentName={this.props.componentName} />\r\n <PageBanner pageHeading='Lockout - Step 2' />\r\n <Container fluid=\"true\" style={{ paddingTop: 30, paddingLeft: 50, paddingBottom: 50, marginTop: 10, marginLeft: 4, marginRight: 4, border: '3px solid darkGray', borderRadius: '5px' }}>\r\n <Row> </Row>\r\n <Row><button onClick={this.handleClick} className=\"btn btn-primary\">End User Sessions</button></Row>\r\n </Container>\r\n </div>\r\n <Confirmation show={this.state.showConfirmation} cancelConfirmation={this.handleCloseConfirmation} proceedConfirmation={this.handleSubmit} question='You are about to end all user sessions. Continue?' />\r\n \t<Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n </>\r\n )\r\n }\r\n}\r\nexport default connect(mapStateToProps, matchDispatchToProps)(UserLockout2);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, UserPurgeScheduleControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = UserPurgeScheduleControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass UserPurgeSchedule extends Component {\r\n\r\n state = {\r\n automaticPurge: false,\r\n automaticPurgeAfterDays: \"0\",\r\n status: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n \r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/userPurgeSchedule\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n\tcomponentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/userPurgeSchedule\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n automaticPurge: content.automaticPurge,\r\n automaticPurgeAfterDays: content.automaticPurgeAfterDays,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n \r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"User Admin - Purge Schedule\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'automaticPurge', label: 'Automatic Purge Credit Card Users', fieldType: 'select', value: this.state.automaticPurge, style: {maxWidth: 200} }]\r\n },\r\n {\r\n formGroups: [{ id: 'automaticPurgeAfterDays', label: 'After Inactive for (days)', fieldType: 'number', minValue: 365, disableField: this.state.automaticPurge === false, value: this.state.automaticPurgeAfterDays, style: {maxWidth: 200} }]\r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(UserPurgeSchedule);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, UserPurgeNowControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport Confirmation from '../../components/common/modal/Confirmation';\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\nimport moment from 'moment';\r\n\r\nconst componentName = UserPurgeNowControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass UserPurgeNow extends Component {\r\n\r\n state = {\r\n purgeDate: \"\",\r\n loadingStatus: \"\",\r\n message: \"\"\r\n }\r\n\r\n handleChange = (event) => {\r\n this.setState({\r\n [event.target.id]: event.target.value\r\n })\r\n }\r\n\r\n showLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n // Delete methods\r\n handleDeleteUser = () => {\r\n \r\n if (this.showLoading() === true) {\r\n \r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/userPurgeNow\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n }\r\n\r\n\tshowDeleteConfirmation = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\tshowDeleteConfirmationDialog: true\r\n\t\t})\r\n\t}\r\n\r\n\thideDeleteConfirmation = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowDeleteConfirmationDialog: false\r\n\t\t})\r\n\t}\r\n\t// Delete methods - End\r\n\r\n handleDatePickerChange = (date) => {\r\n this.setState({\r\n purgeDate: moment(date).format('L')\r\n })\r\n }\r\n\r\n\tcomponentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/userPurgeNow\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n purgeDate: content.purgeDate,\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n \r\n }\r\n\r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"User Admin - Purge Now\",\r\n onChange: this.handleChange,\r\n onSubmit: this.showDeleteConfirmation,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'purgeDate', label: 'Credit Card Users last active before', fieldType: 'date', handleDatePickerChange: this.handleDatePickerChange, value: this.state.purgeDate }]\r\n }\r\n ]\r\n }\r\n\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n <Confirmation show={this.state.showDeleteConfirmationDialog} cancelConfirmation={this.hideDeleteConfirmation} proceedConfirmation={this.handleDeleteUser} question={'Delete inactive credit card users?'} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(UserPurgeNow);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, UserAccessControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = UserAccessControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName)),\r\n }\r\n}\r\n\r\nclass UserAccess extends Component {\r\n\r\n state = {\r\n guestUserName: \"\",\r\n limitLoginAttempts: false,\r\n maxloginAttempts: \"0\",\r\n inactivityTimeLimit: false,\r\n inactivityTimeLimitPeriod: 0,\r\n loadingStatus: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n \r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/userAccess\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n loadingStatus: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n loadingStatus: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n\tcomponentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n \r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/userAccess\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n guestUserName: content.guestUserName,\r\n limitLoginAttempts: content.limitLoginAttempts,\r\n maxloginAttempts: content.maxloginAttempts,\r\n inactivityTimeLimit: content.inactivityTimeLimit,\r\n inactivityTimeLimitPeriod: content.inactivityTimeLimitPeriod,\r\n loadingStatus : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n \r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"User Admin - Access\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.loadingStatus === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.loadingStatus === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'guestUserName', label: 'Guest Username', fieldType: 'text', value: this.state.guestUserName} ] \r\n },\r\n {\r\n formGroups: [{ id: 'limitLoginAttempts', label: 'Limit User Login Attempts ', fieldType: 'select', value: this.state.limitLoginAttempts },\r\n { id: 'maxloginAttempts', label: 'Max Login Attempts', fieldType: 'number', disableField: this.state.limitLoginAttempts === false, value: this.state.maxloginAttempts }]\r\n }, \r\n {\r\n formGroups: [{ id: 'inactivityTimeLimit', label: 'Inactivity Time Limit', fieldType: 'select', value: this.state.inactivityTimeLimit },\r\n { id: 'inactivityTimeLimitPeriod', label: 'Minutes', fieldType: 'number', maxValue: 120, disableField: this.state.inactivityTimeLimit === false, value: this.state.inactivityTimeLimitPeriod }]\r\n },\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(UserAccess);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, BillingScheduleControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\nimport Alert from '../common/modal/Alert';\r\nimport Confirmation from '../common/modal/Confirmation';\r\n\r\nconst componentName = BillingScheduleControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass BillingSchedule extends Component {\r\n state = {\r\n automaticBilling: true,\r\n automaticImageRenewal: true,\r\n renewalDay: \"1\",\r\n renewalTime: \"0:00\",\r\n lastRan: '',\r\n\t\tshowAlert: false,\r\n\t\talertMessage: \"\",\r\n status: \"\",\r\n showPrepareToRerunAccountTasksConfirmationDialog: false\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n \r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/billingSchedule\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: \"SUCCESS\"\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n showPrepareToRerunAccountTasksConfirmation = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\tshowPrepareToRerunAccountTasksConfirmationDialog: true\r\n\t\t})\r\n\t}\r\n\r\n\thidePrepareToRerunAccountTasksConfirmation = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowPrepareToRerunAccountTasksConfirmationDialog: false\r\n\t\t})\r\n\t}\r\n\r\n getStateFromContent = (content) => {\r\n return {\r\n automaticBilling: content.automaticBilling,\r\n automaticImageRenewal: content.automaticImageRenewal,\r\n renewalDay: content.renewalDay,\r\n renewalTime: content.renewalTime,\r\n lastRan: content.lastRan,\r\n status : \"\"\r\n };\r\n }\r\n\r\n showAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t}\r\n\r\n handleRunAccountTasks = (event) => {\r\n if ((this.state.status === \"\") || (this.state.status === \"SUCCESS\")) {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/runAccountTasks\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n let newState = this.getStateFromContent(response.data.content);\r\n this.setState(newState, this.showAlert(response.data.message));\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handlePrepareToRerunAccountTasks = (event) => {\r\n if ((this.state.status === \"\") || (this.state.status === \"SUCCESS\")) {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/prepareToRerunAccountTasks\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n let newState = this.getStateFromContent(response.data.content);\r\n this.setState(newState, this.showAlert(response.data.message));\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\tcomponentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/billingSchedule\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n let newState = this.getStateFromContent(response.data.content);\r\n this.setState(newState);\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n \r\n render() {\r\n let formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Schedule\" ,\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'automaticBilling', label: 'Automatic Billing', fieldType: 'select', value: this.state.automaticBilling }]\r\n },\r\n {\r\n formGroups: [{ id: 'automaticImageRenewal', label: 'Automatic Image Renewal', fieldType: 'select', value: this.state.automaticImageRenewal }]\r\n }, {\r\n formGroups: [{ id: 'renewalDay', label: 'Renewal Day of the Month', fieldType: 'select', value: this.state.renewalDay, \r\n options : [{code: \"1\", description: \"1\"}, {code: \"2\", description: \"2\"}, {code: \"3\", description: \"3\"}, \r\n {code: \"4\", description: \"4\"}, {code: \"5\", description: \"5\"}, {code: \"6\", description: \"6\"}, \r\n {code: \"7\", description: \"7\"}, {code: \"8\", description: \"8\"}, {code: \"9\", description: \"9\"}, \r\n {code: \"10\", description: \"10\"}, {code: \"11\", description: \"11\"}, {code: \"12\", description: \"12\"}, \r\n {code: \"13\", description: \"13\"}, {code: \"14\", description: \"14\"}, {code: \"15\", description: \"15\"}, \r\n {code: \"16\", description: \"16\"}, {code: \"17\", description: \"17\"}, {code: \"18\", description: \"18\"}, \r\n {code: \"19\", description: \"19\"}, {code: \"20\", description: \"20\"}, {code: \"21\", description: \"21\"}, \r\n {code: \"22\", description: \"22\"}, {code: \"23\", description: \"23\"}, {code: \"24\", description: \"24\"}, \r\n {code: \"25\", description: \"25\"}, {code: \"26\", description: \"26\"}, {code: \"27\", description: \"27\"}, \r\n {code: \"28\", description: \"28\"}]}]\r\n },\r\n {\r\n formGroups: [{ id: 'renewalTime', label: 'Time of Day to Renew', fieldType: 'text', value: this.state.renewalTime }]\r\n },\r\n {\r\n formGroups: [\r\n { id: 'lastRan', label: 'Last Ran Account Tasks', \r\n fieldType: 'text', value: this.state.lastRan, disabled: true }\r\n ]\r\n }\r\n ]\r\n }\r\n\r\n formProps.secondaryButtons = [\r\n { onClick: this.showPrepareToRerunAccountTasksConfirmation, label: \"Prepare to Rerun Account Tasks\" },\r\n { onClick: this.handleRunAccountTasks, label: \"Run Account Tasks\" }\r\n ]\r\n\r\n return (\r\n <>\r\n <FormTemplate {...formProps} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n\t\t\t\t<Confirmation show={this.state.showPrepareToRerunAccountTasksConfirmationDialog} cancelConfirmation={this.hidePrepareToRerunAccountTasksConfirmation} proceedConfirmation={this.handlePrepareToRerunAccountTasks} question={\"Prepare to rerun account tasks?\"} />\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(BillingSchedule);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, FlatFeeOverrideControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport { validateNumberOfImagesCostPair } from \"../../utils/CodeValueValidation\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst componentName = FlatFeeOverrideControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass FlatFeeOverride extends Component {\r\n\r\n state = {\r\n countyAdminReload: false,\r\n accountAdminReload: false,\r\n rates: [\r\n {\r\n option: false,\r\n unlimitedNumberOfPages: false,\r\n numberOfPages: \"\",\r\n cost: \"\"\r\n },\r\n {\r\n option: false,\r\n unlimitedNumberOfPages: false,\r\n numberOfPages: \"\",\r\n cost: \"\"\r\n },\r\n {\r\n option: false,\r\n unlimitedNumberOfPages: false,\r\n numberOfPages: \"\",\r\n cost: \"\"\r\n },\r\n {\r\n option: false,\r\n unlimitedNumberOfPages: false,\r\n numberOfPages: \"\",\r\n cost: \"\"\r\n },\r\n {\r\n option: false,\r\n unlimitedNumberOfPages: false,\r\n numberOfPages: \"\",\r\n cost: \"\"\r\n }\r\n ],\r\n status: \"\",\r\n message: \"\",\r\n errors: {}\r\n }\r\n\r\n validateUnimited = () => {\r\n let errors = {};\r\n let unlimitedRowNumber = -1;\r\n for (const index of [0, 1, 2, 3, 4].keys()) {\r\n let currentRowSelected = (this.state.rates[index].option === true || this.state.rates[index].option === 'true');\r\n let currentRowUnlimited = currentRowSelected && (this.state.rates[index].unlimitedNumberOfPages === true || this.state.rates[index].unlimitedNumberOfPages === 'true');\r\n if (unlimitedRowNumber > -1 && currentRowSelected === true) {\r\n errors['unlimitedNumberOfPages' + unlimitedRowNumber] = \"Unlimited should be last.\";\r\n this.setState({ errors: errors });\r\n return false;\r\n } else if (currentRowUnlimited === true) {\r\n unlimitedRowNumber = index;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n \r\n validateRatePairs = () => {\r\n let errors = {};\r\n for (const index of [0, 1, 2, 3, 4].keys()) {\r\n let currentRowSelected = (this.state.rates[index].option === true || this.state.rates[index].option === 'true');\r\n if (currentRowSelected) {\r\n let formIsValid = validateNumberOfImagesCostPair(errors, this.state.rates[index].unlimitedNumberOfPages, this.state.rates[index].numberOfPages, 'numberOfPages' + index, this.state.rates[index].cost, 'cost' + index);\r\n if (!formIsValid) {\r\n this.setState({ errors: errors });\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n handleValidation = () => {\r\n if (!this.validateUnimited()) {\r\n return;\r\n }\r\n \r\n if (!this.validateRatePairs()) {\r\n return;\r\n }\r\n \r\n this.setState({ errors: {} });\r\n return true;\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n if (!this.handleValidation()) {\r\n return;\r\n }\r\n\r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/flatFeeOverride\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState({\r\n status: LOADING_STATUES.SUCCESS,\r\n countyAdminReload: content.countyAdminReload,\r\n accountAdminReload: content.accountAdminReload,\r\n rates: content.rates\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n\r\n }\r\n\r\n handleChange = (event) => {\r\n // this.setState({\r\n // [event.target.id]: event.target.value ? event.target.value : 0\r\n // })\r\n const targetId = event.target.id;\r\n if (targetId.includes(\"option\")) {\r\n const index = targetId.replace(\"option\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.option = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates,\r\n errors: {}\r\n });\r\n } else if (targetId.includes(\"unlimitedNumberOfPages\")) {\r\n const index = targetId.replace(\"unlimitedNumberOfPages\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.unlimitedNumberOfPages = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates,\r\n errors: {}\r\n });\r\n } else if (targetId.includes(\"numberOfPages\")) {\r\n const index = targetId.replace(\"numberOfPages\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.numberOfPages = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates,\r\n errors: {}\r\n });\r\n } else if (targetId.includes(\"cost\")) {\r\n const index = targetId.replace(\"cost\", \"\");\r\n let rates = [...this.state.rates];\r\n let rate = { ...rates[index] };\r\n rate.cost = event.target.value;\r\n rates[index] = rate;\r\n this.setState({ \r\n status: \"\",\r\n rates,\r\n errors: {}\r\n });\r\n } else {\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: event.target.value ? event.target.value : 0,\r\n errors: {}\r\n })\r\n }\r\n }\r\n\r\n\tcomponentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/flatFeeOverride\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n status : \"\",\r\n countyAdminReload: content.countyAdminReload,\r\n accountAdminReload: content.accountAdminReload,\r\n rates: content.rates\r\n });\r\n \r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n createRateRow = index => {\r\n return (\r\n {\r\n formGroups: [\r\n { id: 'option' + index, label: 'Option ' + (index+1), fieldType: 'select', \r\n disableField: this.state.accountAdminReload === 'false' || this.state.accountAdminReload === false, \r\n value: this.state.rates[index] && this.state.rates[index].option ? this.state.rates[index].option : false, \r\n error: this.state.errors['option' + index] \r\n },\r\n {\r\n id: 'unlimitedNumberOfPages' + index, label: 'Unlimited Images', fieldType: 'select',\r\n disableField: this.state.accountAdminReload === 'false' || this.state.accountAdminReload === false || this.state.rates[index].option === 'false' || this.state.rates[index].option === false,\r\n value: this.state.rates[index] && this.state.rates[index].unlimitedNumberOfPages ? this.state.rates[index].unlimitedNumberOfPages : false, \r\n error: this.state.errors['unlimitedNumberOfPages' + index]\r\n },\r\n {\r\n id: 'numberOfPages' + index, label: 'Number of images', fieldType: 'number',\r\n disableField: this.state.accountAdminReload === 'false' || this.state.accountAdminReload === false || this.state.rates[index].option === 'false' || this.state.rates[index].option === false || this.state.rates[index].unlimitedNumberOfPages === 'true' || this.state.rates[index].unlimitedNumberOfPages === true,\r\n value: this.state.rates[index] ? this.state.rates[index].numberOfPages : \"\", \r\n style: { maxWidth: 155 }, \r\n error: this.state.errors['numberOfPages' + index]\r\n },\r\n {\r\n id: 'cost' + index, label: 'Cost ($)', fieldType: 'number', numberType: 'decimal',\r\n disableField: this.state.accountAdminReload === 'false' || this.state.accountAdminReload === false || this.state.rates[index].option === 'false' || this.state.rates[index].option === false,\r\n value: this.state.rates[index] ? this.state.rates[index].cost : \"\", \r\n style: { maxWidth: 155 }, \r\n error: this.state.errors['cost' + index]\r\n }]\r\n }\r\n )\r\n }\r\n \r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Flat Fee Usage Override\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'countyAdminReload', label: 'Reload by County Admin', fieldType: 'select', value: this.state.countyAdminReload }]\r\n },\r\n {\r\n formGroups: [{ id: 'accountAdminReload', label: 'Reload by Account Admin', fieldType: 'select', value: this.state.accountAdminReload }]\r\n },\r\n this.createRateRow(0),\r\n this.createRateRow(1),\r\n this.createRateRow(2),\r\n this.createRateRow(3),\r\n this.createRateRow(4)\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(FlatFeeOverride);","import React, {Component} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport { setSelectedControlPanelType, AuditLogPurgeScheduleControlPanelKey } from \"../../redux/actions/controlPanelActions\";\r\nimport configData from \"../../config/config.json\";\r\nimport { handleError } from '../../redux/actions/commonStuff';\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\n\r\nconst componentName = AuditLogPurgeScheduleControlPanelKey;\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n setSelectedControlPanelType: () => dispatch(setSelectedControlPanelType(componentName))\r\n }\r\n}\r\n\r\nclass AuditLogPurgeSchedule extends Component {\r\n\r\n state = {\r\n automaticPurge: false,\r\n automaticPurgeAfterDays: \"0\",\r\n status: \"\"\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n \r\n if (this.state.status === \"\") {\r\n this.setState({\r\n status: LOADING_STATUES.LOADING\r\n })\r\n } else {\r\n return;\r\n }\r\n\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/auditLogPurgeSchedule\", this.state, { withCredentials: true })\r\n .then(\r\n (response) => {\r\n this.setState({ \r\n status: LOADING_STATUES.SUCCESS\r\n });\r\n },\r\n (error) => {\r\n handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n handleChange = (event) => {\r\n let value = event.target.value;\r\n value = value === \"true\" || value === \"false\" ? JSON.parse(event.target.value) : value;\r\n\r\n this.setState({\r\n status: \"\",\r\n [event.target.id]: value ? value : (event.target.type === 'number' ? 0 : value)\r\n })\r\n }\r\n\r\n\tcomponentDidMount() {\r\n this.props.setSelectedControlPanelType();\r\n\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"controlPanel/countyConfig/auditLogPurgeSchedule\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n this.setState( {\r\n automaticPurge: content.automaticPurge,\r\n automaticPurgeAfterDays: content.automaticPurgeAfterDays,\r\n status : \"\"\r\n });\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n \r\n render() {\r\n const formProps = {\r\n componentName: componentName,\r\n pageHeading: \"Audit Log - Purge Schedule\",\r\n onChange: this.handleChange,\r\n onSubmit: this.handleSubmit,\r\n successIndicator: this.state.status === LOADING_STATUES.SUCCESS,\r\n loadingIndicator: this.state.status === LOADING_STATUES.LOADING,\r\n formGroupRows: [\r\n {\r\n formGroups: [{ id: 'automaticPurge', label: 'Automatic Purge Audit Log', fieldType: 'select', value: this.state.automaticPurge, style: {maxWidth: 200} }]\r\n },\r\n {\r\n formGroups: [{ id: 'automaticPurgeAfterDays', label: 'Records older than (days)', fieldType: 'number', minValue: 60, disableField: this.state.automaticPurge === false, value: this.state.automaticPurgeAfterDays, style: {maxWidth: 200} }]\r\n }\r\n ]\r\n }\r\n\r\n return <FormTemplate {...formProps} />\r\n }\r\n}\r\n\r\nexport default connect(null, matchDispatchToProps)(AuditLogPurgeSchedule);","import React from 'react';\r\nimport { Nav, Navbar } from 'react-bootstrap';\r\nimport { Route, Switch } from \"react-router-dom\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport SideNavigationLabel from \"../side/SideNavigationLabel\";\r\nimport SideNavigationToggle from \"../side/SideNavigationToggle\";\r\nimport SideNavigationNavLink from \"../side/SideNavigationNavLink\";\r\n\r\nimport Accounts from \"./Accounts\";\r\nimport AccountDocTypes from \"./AccountDocTypes\"\r\nimport AccountEntry from \"./AccountEntry\";\r\nimport AccountReload from \"./AccountReload\";\r\nimport AccountPageAccess from \"./AccountPageAccess\";\r\nimport AccountTasks from \"./AccountTasks\";\r\nimport CreditCardAlternateRates from \"./CreditCardAlternateRates\";\r\nimport CreditCardExtra from \"./CreditCardExtra\";\r\nimport Escrow from \"./Escrow\";\r\nimport FlatFeeRates from \"./FlatFeeRates\";\r\nimport ALaCarteRates from \"./ALaCarteRates\";\r\nimport ALaCarteRatesSpecial from \"./ALaCarteRatesSpecial\";\r\n\r\nimport Common from \"./Common\";\r\n\r\nimport Efile from \"./Efile\";\r\nimport Languages from \"./Languages\";\r\nimport HomeLatestNews from './HomeLatestNews';\r\nimport HomeExternalLinks from './HomeExternalLinks';\r\nimport HomeNotableDates from \"./HomeNotableDates\";\r\nimport HomeSelections from './HomeSelections';\r\nimport LoginPageLinks from './LoginPageLinks';\r\nimport LoginPageLatestNews from './LoginPageLatestNews';\r\nimport LoginPageSlides from './LoginPageSlides';\r\nimport LoginPageRegistration from './LoginPageRegistration';\r\nimport Search from \"./Search\";\r\nimport Search2 from \"./Search2\";\r\nimport Reports from \"./Reports\";\r\nimport PerformanceMonitoring from \"./PerformanceMonitoring\";\r\nimport ReloadConfiguration from \"./ReloadConfiguration\";\r\nimport LandSharkOneAccountsUsers from \"./LandSharkOneAccountsUsers\";\r\nimport LandSharkOneAuditLog from \"./LandSharkOneAuditLog\";\r\nimport UserLockout from \"./UserLockout\";\r\nimport UserLockout2 from \"./UserLockout2\";\r\nimport UserPurgeSchedule from \"./UserPurgeSchedule\";\r\nimport UserPurgeNow from \"./UserPurgeNow\";\r\nimport UserAccess from \"./UserAccess\";\r\nimport BillingSchedule from './BillingSchedule';\r\nimport FlatFeeOverride from './FlatFeeOverride';\r\nimport AuditLogPurgeSchedule from \"./AuditLogPurgeSchedule\";\r\n\r\nimport CommonTop from \"../../components/top/CommonTop\";\r\n\r\nimport { AccountsControlPanelKey, FlatFeeControlPanelKey, CreditCardAlternateRatesControlPanelKey, CreditCardExtraControlPanelKey, FlatFeeOverrideControlPanelKey, \r\n\tALaCarteRatesControlPanelKey, ALaCarteRatesSpecialControlPanelKey, BillingScheduleControlPanelKey, \r\n\tHomeSelectionsControlPanelKey, HomeNotableDatesControlPanelKey, HomeLatestNewsControlPanelKey, HomeExternalLinksControlPanelKey,\r\n\tSearchControlPanelKey, Search2ControlPanelKey, ReportsControlPanelKey, CommonControlPanelKey, EfileControlPanelKey, EscrowControlPanelKey, LanguagesControlPanelKey, PerformanceMonitoringControlPanelKey,\r\n\tReloadConfigurationControlPanelKey,\r\n\tUserAccessControlPanelKey, UserPurgeScheduleControlPanelKey, UserPurgeNowControlPanelKey, UserLockoutControlPanelKey, UserLockout2ControlPanelKey, LoginPageLatestNewsControlPanelKey, LoginPageLinksControlPanelKey, LoginPageSlidesControlPanelKey, LoginPageRegistrationControlPanelKey,\r\n\tAuditLogPurgeScheduleControlPanelKey, \r\n\tLandSharkOneAccountsUsersControlPanelKey, LandSharkOneAuditLogControlPanelKey} from \"../../redux/actions/controlPanelActions\";\r\n\r\nimport { auditLogPurgeIcon, auditLogPurgeActiveIcon, loginIcon, loginActiveIcon, accountIcon, accountActiveIcon, accountIconBlack, flatFeeIcon, flatFeeActiveIcon, unitRatesIcon, unitRatesActiveIcon,\r\n\t\t creditCardIcon2, creditCardActiveIcon2, escrowReloadIcon, escrowReloadActiveIcon, fileImportIcon, fileImportActiveIcon, languageIcon, languageActiveIcon,\r\n\t \t userIconBlack, fileIcon, fileActiveIcon, fileCodeIcon, dateIcon, dateActiveIcon, dollarIconBlack,\r\n\t\t searchIcon, searchActiveIcon, homeIcon, homeActiveIcon, commonIcon, commonActiveIcon,\r\n\t\t userPurgeIcon, userPurgeActiveIcon, userClockIcon, userClockActiveIcon, userLockIcon, userLockActiveIcon, doorOpenIcon, doorOpenActiveIcon,\r\n\t\t stethoscopeIcon, stethoscopeActiveIcon, cogIconBlack, arrowRightIcon, arrowRightActiveIcon } from \"../../img/font_awesome/font_awesome\"\r\n\r\nconst mapStateToProps = state => {\r\n\treturn {\r\n\t\tselectedControlPanelType: state.controlPanelTypeReducer.selectedControlPanelType,\r\n\t\trole: state.currentUserReducer.role \r\n\t};\r\n}\r\n\r\nclass ControlPanel extends React.Component {\r\n\r\n\trender() {\r\n\r\n\t\tlet accountsHeadingProps = {\r\n\t\t\timage: accountIconBlack,\r\n\t\t\tname: \"Account Admin:\"\r\n\t\t}\r\n\r\n\t\tlet accountsProps = {\r\n\t\t\tid: \"accountsControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/Accounts\",\r\n\t\t\tselected: this.props.selectedControlPanelType === AccountsControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === AccountsControlPanelKey ? accountActiveIcon: accountIcon,\r\n\t\t\tname: \"Accounts\"\r\n\t\t}\r\n\r\n\t\tlet feeStructureHeadingProps = {\r\n\t\t\timage: dollarIconBlack,\r\n\t\t\tname: \"Fee Structure:\"\r\n\t\t}\r\n\r\n\t\tlet creditCardAlternateRatesProps = {\r\n\t\t\tid: \"creditCardAlternateRatesControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/CreditCardAlternateRates\",\r\n\t\t\tselected: this.props.selectedControlPanelType === CreditCardAlternateRatesControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === CreditCardAlternateRatesControlPanelKey ? creditCardActiveIcon2 : creditCardIcon2,\r\n\t\t\tname: \"Credit Card Alternate Rates\"\r\n\t\t}\r\n\r\n\t\tlet creditCardExtraProps = {\r\n\t\t\tid: \"creditCardExtraControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/CreditCardExtra\",\r\n\t\t\tselected: this.props.selectedControlPanelType === CreditCardExtraControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === CreditCardExtraControlPanelKey ? creditCardActiveIcon2 : creditCardIcon2,\r\n\t\t\tname: \"Credit Card Extra\"\r\n\t\t}\r\n\r\n\t\tlet escrowProps = {\r\n\t\t\tid: \"escrowControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/Escrow\",\r\n\t\t\tselected: this.props.selectedControlPanelType === EscrowControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === EscrowControlPanelKey ? escrowReloadActiveIcon : escrowReloadIcon,\r\n\t\t\tname: \"Escrow\"\r\n\t\t}\r\n\r\n\t\tlet flatFeeProps = {\r\n\t\t\tid: \"flatFeeControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/FlatFeeRates\",\r\n\t\t\tselected: this.props.selectedControlPanelType === FlatFeeControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === FlatFeeControlPanelKey ? flatFeeActiveIcon : flatFeeIcon,\r\n\t\t\tname: \"Flat Fee Rates\"\r\n\t\t}\r\n\r\n\t\tlet flatFeeOverrideProps = {\r\n\t\t\tid: \"flatFeeOverrideControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/FlatFeeOverride\",\r\n\t\t\tselected: this.props.selectedControlPanelType === FlatFeeOverrideControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === FlatFeeOverrideControlPanelKey ? flatFeeActiveIcon : flatFeeIcon,\r\n\t\t\tname: \"Flat Fee Usage Override\"\r\n\t\t}\r\n\r\n\t\tlet aLaCarteRatesProps = {\r\n\t\t\tid: \"aLaCarteRatesControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/alacarterates\",\r\n\t\t\tselected: this.props.selectedControlPanelType === ALaCarteRatesControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === ALaCarteRatesControlPanelKey ? unitRatesActiveIcon : unitRatesIcon,\r\n\t\t\tname: \"A La Carte Rates\"\r\n\t\t}\r\n\r\n\t\tlet aLaCarteRatesInstrumentCodeProps = {\r\n\t\t\tid: \"aLaCarteRatesInstrumentCodeControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/alacarteratesspecial\",\r\n\t\t\tselected: this.props.selectedControlPanelType === ALaCarteRatesSpecialControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === ALaCarteRatesSpecialControlPanelKey ? unitRatesActiveIcon : unitRatesIcon,\r\n\t\t\tname: \"A La Carte Special Rates\"\r\n\t\t}\r\n\r\n\t\tlet billingScheduleProps = {\r\n\t\t\tid: \"billingScheduleControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/BillingSchedule\",\r\n\t\t\tselected: this.props.selectedControlPanelType === BillingScheduleControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === BillingScheduleControlPanelKey ? dateActiveIcon : dateIcon,\r\n\t\t\tname: \"Schedule\"\r\n\t\t}\r\n\r\n\t\tlet webPagesProps = {\r\n\t\t\timage: fileCodeIcon,\r\n\t\t\tname: \"Web Pages:\"\r\n\t\t}\r\n\r\n\t\tlet commonProps = {\r\n\t\t\tid: \"commonControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/Common\",\r\n\t\t\tselected: this.props.selectedControlPanelType === CommonControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === CommonControlPanelKey ? commonActiveIcon : commonIcon,\r\n\t\t\tname: \"Common\"\r\n\t\t}\r\n\r\n\t\tlet efileProps = {\r\n\t\t\tid: \"efileControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/Efile\",\r\n\t\t\tselected: this.props.selectedControlPanelType === EfileControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === EfileControlPanelKey ? fileImportActiveIcon : fileImportIcon,\r\n\t\t\tname: \"E File\"\r\n\t\t}\r\n\r\n\t\tlet languagesProps = {\r\n\t\t\tid: \"languagesControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/Languages\",\r\n\t\t\tselected: this.props.selectedControlPanelType === LanguagesControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === LanguagesControlPanelKey ? languageActiveIcon : languageIcon,\r\n\t\t\tname: \"Languages\"\r\n\t\t}\r\n\r\n\t\tlet homeLatestNewsProps = {\r\n\t\t\tid: \"homeLatestNewsControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/HomeLatestNews\",\r\n\t\t\tselected: this.props.selectedControlPanelType === HomeLatestNewsControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === HomeLatestNewsControlPanelKey ? homeActiveIcon : homeIcon,\r\n\t\t\tname: \"Home - More News\"\r\n\t\t}\r\n\r\n\t\tlet homeMoreLinksProps = {\r\n\t\t\tid: \"homeExternalLinksControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/HomeExternalLinks\",\r\n\t\t\tselected: this.props.selectedControlPanelType === HomeExternalLinksControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === HomeExternalLinksControlPanelKey ? homeActiveIcon : homeIcon,\r\n\t\t\tname: \"Home - More Links\"\r\n\t\t}\r\n\r\n\t\tlet homeNotableDatesProps = {\r\n\t\t\tid: \"homeSelectionsControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/HomeNotableDates\",\r\n\t\t\tselected: this.props.selectedControlPanelType === HomeNotableDatesControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === HomeNotableDatesControlPanelKey ? homeActiveIcon : homeIcon,\r\n\t\t\tname: \"Home - Notable Dates\"\r\n\t\t}\r\n\r\n\t\tlet homeSelectionsProps = {\r\n\t\t\tid: \"homeSelectionsControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/HomeSelections\",\r\n\t\t\tselected: this.props.selectedControlPanelType === HomeSelectionsControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === HomeSelectionsControlPanelKey ? homeActiveIcon : homeIcon,\r\n\t\t\tname: \"Home - Selections\"\r\n\t\t}\r\n\r\n\t\tlet loginPageLinksProps = {\r\n\t\t\tid: \"loginPageLinksControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/LoginPageLinks\",\r\n\t\t\tselected: this.props.selectedControlPanelType === LoginPageLinksControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === LoginPageLinksControlPanelKey ? loginActiveIcon : loginIcon,\r\n\t\t\tname: \"Login - Links\"\r\n\t\t}\r\n\r\n\t\tlet loginPageLatestNewsProps = {\r\n\t\t\tid: \"loginPageLatestNewsControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/LoginPageLatestNews\",\r\n\t\t\tselected: this.props.selectedControlPanelType === LoginPageLatestNewsControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === LoginPageLatestNewsControlPanelKey ? loginActiveIcon : loginIcon,\r\n\t\t\tname: \"Login - Latest News\"\r\n\t\t}\r\n\r\n\t\tlet loginPageSlidesProps = {\r\n\t\t\tid: \"loginPageSlidesControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/LoginPageSlides\",\r\n\t\t\tselected: this.props.selectedControlPanelType === LoginPageSlidesControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === LoginPageSlidesControlPanelKey ? loginActiveIcon : loginIcon,\r\n\t\t\tname: \"Login - Slides\"\r\n\t\t}\r\n\r\n\t\tlet loginPageRegistrationProps = {\r\n\t\t\tid: \"loginRegistrationControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/LoginPageRegistration\",\r\n\t\t\tselected: this.props.selectedControlPanelType === LoginPageRegistrationControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === LoginPageRegistrationControlPanelKey ? loginActiveIcon : loginIcon,\r\n\t\t\tname: \"Login - Registration\"\r\n\t\t}\r\n\r\n\t\tlet searchProps = {\r\n\t\t\tid: \"searchControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/Search\",\r\n\t\t\tselected: this.props.selectedControlPanelType === SearchControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === SearchControlPanelKey ? searchActiveIcon : searchIcon,\r\n\t\t\tname: \"Search 1\"\r\n\t\t}\r\n\r\n\t\tlet search2Props = {\r\n\t\t\tid: \"search2ControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/Search2\",\r\n\t\t\tselected: this.props.selectedControlPanelType === Search2ControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === Search2ControlPanelKey ? searchActiveIcon : searchIcon,\r\n\t\t\tname: \"Search 2\"\r\n\t\t}\r\n\r\n\t\tlet reportsProps = {\r\n\t\t\tid: \"reportsControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/Reports\",\r\n\t\t\tselected: this.props.selectedControlPanelType === ReportsControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === ReportsControlPanelKey ? fileActiveIcon : fileIcon,\r\n\t\t\tname: \"Reports\"\r\n\t\t}\r\n\t\t\r\n\t\tlet technicalProps = {\r\n\t\t\timage: cogIconBlack,\r\n\t\t\tname: \"Technical:\"\r\n\t\t}\r\n\r\n\t\tlet performanceMonitoringProps = {\r\n\t\t\tid: \"performanceMonitoringControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/PerformanceMonitoring\",\r\n\t\t\tselected: this.props.selectedControlPanelType === PerformanceMonitoringControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === PerformanceMonitoringControlPanelKey ? stethoscopeActiveIcon : stethoscopeIcon,\r\n\t\t\tname: \"Performance Monitoring\"\r\n\t\t}\r\n\r\n\t\tlet reloadConfigurationProps = {\r\n\t\t\tid: \"reloadConfigurationControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/ReloadConfiguration\",\r\n\t\t\tselected: this.props.selectedControlPanelType === ReloadConfigurationControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === ReloadConfigurationControlPanelKey ? stethoscopeActiveIcon : stethoscopeIcon,\r\n\t\t\tname: \"Reload Configuration\"\r\n\t\t}\r\n\r\n\t\tlet landSharkOneAccountsUsersProps = {\r\n\t\t\tid: \"landSharkOneAccountsUsersControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/LandSharkOneAccountsUsers\",\r\n\t\t\tselected: this.props.selectedControlPanelType === LandSharkOneAccountsUsersControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === LandSharkOneAccountsUsersControlPanelKey ? arrowRightActiveIcon : arrowRightIcon,\r\n\t\t\tname: \"LS1 Accounts & Users\"\r\n\t\t}\r\n\r\n\t\tlet landSharkOneAuditLogProps = {\r\n\t\t\tid: \"landSharkOneAuditLogControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/LandSharkOneAuditLog\",\r\n\t\t\tselected: this.props.selectedControlPanelType === LandSharkOneAuditLogControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === LandSharkOneAuditLogControlPanelKey ? arrowRightActiveIcon : arrowRightIcon,\r\n\t\t\tname: \"LS1 Audit Log\"\r\n\t\t}\r\n\r\n\t\tlet userAdminProps = {\r\n\t\t\timage: userIconBlack,\r\n\t\t\tname: \"User Admin:\"\r\n\t\t}\r\n\r\n\t\tlet userAccessProps = {\r\n\t\t\tid: \"userAccessControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/UserAccess\",\r\n\t\t\tselected: this.props.selectedControlPanelType === UserAccessControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === UserAccessControlPanelKey ? doorOpenActiveIcon : doorOpenIcon,\r\n\t\t\tname: \"Access\"\r\n\t\t}\r\n\r\n\t\tlet userLockoutProps = {\r\n\t\t\tid: \"userLockoutControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/UserLockout\",\r\n\t\t\tselected: this.props.selectedControlPanelType === UserLockoutControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === UserLockoutControlPanelKey ? userLockActiveIcon : userLockIcon,\r\n\t\t\tname: \"Lockout 1\"\r\n\t\t}\r\n\r\n\t\tlet userLockout2Props = {\r\n\t\t\tid: \"userLockout2ControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/UserLockout2\",\r\n\t\t\tselected: this.props.selectedControlPanelType === UserLockout2ControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === UserLockout2ControlPanelKey ? userLockActiveIcon : userLockIcon,\r\n\t\t\tname: \"Lockout 2\"\r\n\t\t}\r\n\r\n\t\tlet userPurgeNowProps = {\r\n\t\t\tid: \"userPurgeNowControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/UserPurgeNow\",\r\n\t\t\tselected: this.props.selectedControlPanelType === UserPurgeNowControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === UserPurgeNowControlPanelKey ? userPurgeActiveIcon : userPurgeIcon,\r\n\t\t\tname: \"Purge Now\"\r\n\t\t}\r\n\r\n\t\tlet userPurgeScheduleProps = {\r\n\t\t\tid: \"userPurgeNowControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/UserPurgeSchedule\",\r\n\t\t\tselected: this.props.selectedControlPanelType === UserPurgeScheduleControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === UserPurgeScheduleControlPanelKey ? userClockActiveIcon : userClockIcon,\r\n\t\t\tname: \"Purge Schedule\"\r\n\t\t}\r\n\r\n\t\tlet auditLogPurgeScheduleProps = {\r\n\t\t\tid: \"auditLogPurgeScheduleControlPanelNavLink\",\r\n\t\t\tlink: \"/controlPanel/AuditLogPurgeSchedule\",\r\n\t\t\tselected: this.props.selectedControlPanelType === AuditLogPurgeScheduleControlPanelKey,\r\n\t\t\timage: this.props.selectedControlPanelType === AuditLogPurgeScheduleControlPanelKey ? auditLogPurgeActiveIcon : auditLogPurgeIcon,\r\n\t\t\tname: \"Audit Log Purge\"\r\n\t\t}\r\n\r\n\t\tlet defaultRoute = <Route path=\"/controlPanel\" component={HomeNotableDates} />;\r\n\r\n\t\tif (ALaCarteRatesControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={ALaCarteRates} />;\r\n\t\t} else if (ALaCarteRatesSpecialControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={ALaCarteRatesSpecial} />;\r\n\t\t} else if (CreditCardAlternateRatesControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={CreditCardAlternateRates} />;\r\n\t\t} else if (CreditCardExtraControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={CreditCardExtra} />;\r\n\t\t} else if (EscrowControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={Escrow} />;\r\n\t\t} else if (FlatFeeControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={FlatFeeRates} />;\r\n\t\t} else if (FlatFeeOverrideControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={FlatFeeOverride} />;\r\n\t\t} else if (AccountsControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={Accounts} />;\r\n\t\t} else if (AuditLogPurgeScheduleControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={AuditLogPurgeSchedule} />;\r\n\t\t} else if (UserAccessControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={UserAccess} />;\r\n\t\t} else if (UserPurgeNowControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={UserPurgeNow} />;\r\n\t\t} else if (UserPurgeScheduleControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={UserPurgeSchedule} />;\r\n\t\t} else if (CommonControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={Common} />;\r\n\t\t} else if (EfileControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={Efile} />;\r\n\t\t} else if (LanguagesControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={Languages} />;\r\n\t\t} else if (LoginPageLinksControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={LoginPageLinks} />;\r\n\t\t} else if (LoginPageLatestNewsControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={LoginPageLatestNews} />;\r\n\t\t} else if (LoginPageSlidesControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={LoginPageSlides} />;\r\n\t\t} else if (LoginPageRegistrationControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={LoginPageRegistration} />;\r\n\t\t} else if (HomeLatestNewsControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={HomeLatestNews} />;\r\n\t\t} else if (HomeExternalLinksControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={HomeExternalLinks} />;\r\n\t\t} else if (HomeSelectionsControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={HomeSelections} />;\r\n\t\t} else if (SearchControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={Search} />;\r\n\t\t} else if (Search2ControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={Search2} />;\r\n\t\t} else if (ReportsControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={Reports} />;\r\n\t\t} else if (UserLockoutControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={UserLockout} />;\r\n\t\t} else if (UserLockout2ControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={UserLockout2} />;\r\n\t\t} else if (PerformanceMonitoringControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={PerformanceMonitoring} />;\r\n\t\t} else if (ReloadConfigurationControlPanelKey === this.props.selectedControlPanelType) {\r\n\t\t\tdefaultRoute = <Route path=\"/controlPanel\" component={ReloadConfiguration} />;\r\n\t\t}\r\n\r\n\t\t\r\n\r\n\t\t\r\n\t\tlet technicalNavLink = '';\r\n\t\tif (this.props.role === 'TRIMIN') {\r\n\t\t\ttechnicalNavLink = <><Nav.Link eventKey=\"disabled\" disabled style={{ fontWeight: 'bold', background: \"gray\", color: \"black\"}} className='side-nav-header' ><SideNavigationLabel {...technicalProps} /></Nav.Link>\r\n\t\t\t<SideNavigationNavLink {...efileProps} />\r\n\t\t\t<SideNavigationNavLink {...landSharkOneAccountsUsersProps} />\r\n\t\t\t<SideNavigationNavLink {...landSharkOneAuditLogProps} />\r\n\t\t\t<SideNavigationNavLink {...languagesProps} />\r\n\t\t\t<SideNavigationNavLink {...performanceMonitoringProps} /> \r\n\t\t\t<SideNavigationNavLink {...reloadConfigurationProps} />\r\n\t\t\t</>\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<CommonTop history={this.props.history} />\r\n\t\t\t\t<div style={{ float: \"left\", minWidth: 38, maxWidth: 280 }}>\r\n\t\t\t\t\t<SideNavigationToggle />\r\n\t\t\t\t\t<Navbar bg=\"light\" style={{ padding: 0, display: \"block\" }}>\r\n\t\t\t\t\t\t<Navbar.Toggle aria-controls=\"basic-navbar-nav\" />\r\n\t\t\t\t\t\t<Nav className=\"flex-column\" style={{ width: '100%', float: \"left\", marginLeft: 2 }}>\r\n\t\t\t\t\t\t\t<Nav.Link eventKey=\"disabled\" disabled style={{ fontWeight: 'bold', background: \"gray\", color: \"black\"}} className='side-nav-header' ><SideNavigationLabel {...feeStructureHeadingProps} /></Nav.Link>\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...aLaCarteRatesProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...aLaCarteRatesInstrumentCodeProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...creditCardAlternateRatesProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...creditCardExtraProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...escrowProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...flatFeeProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...flatFeeOverrideProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...billingScheduleProps} />\r\n\t\t\t\t\t\t\t<Nav.Link eventKey=\"disabled\" disabled style={{ fontWeight: 'bold', background: \"gray\", color: \"black\"}} className='side-nav-header' ><SideNavigationLabel {...accountsHeadingProps} /></Nav.Link>\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...accountsProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...auditLogPurgeScheduleProps} />\r\n\t\t\t\t\t\t\t<Nav.Link eventKey=\"disabled\" disabled style={{ fontWeight: 'bold', background: \"gray\", color: \"black\"}} className='side-nav-header' ><SideNavigationLabel {...userAdminProps} /></Nav.Link>\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...userAccessProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...userLockoutProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...userLockout2Props} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...userPurgeNowProps} />\t\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...userPurgeScheduleProps} />\t\r\n\t\t\t\t\t\t\t<Nav.Link eventKey=\"disabled\" disabled style={{ fontWeight: 'bold', background: \"gray\", color: \"black\"}} className='side-nav-header' ><SideNavigationLabel {...webPagesProps} /></Nav.Link>\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...commonProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...loginPageLinksProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...loginPageLatestNewsProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...loginPageRegistrationProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...loginPageSlidesProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...homeMoreLinksProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...homeLatestNewsProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...homeNotableDatesProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...homeSelectionsProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...searchProps} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...search2Props} />\r\n\t\t\t\t\t\t\t\t<SideNavigationNavLink {...reportsProps} />\t\r\n\t\t\t\t\t\t\t{technicalNavLink}\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t</Nav>\r\n\t\t\t\t\t</Navbar>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div style={{paddingBottom: 4}}>\r\n\t\t\t\t\t<Switch>\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/accountPageAccess/:id/:name\" component={AccountPageAccess} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/accountReload/:id/:name\" component={AccountReload} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/accountDocTypes/:id/:name\" component={AccountDocTypes} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/accountTasks/:id/:name\" component={AccountTasks} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/accounts/:id\" component={AccountEntry} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/accounts\" component={Accounts} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/creditCardExtra\" component={CreditCardExtra} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/creditCardAlternateRates\" component={CreditCardAlternateRates} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/escrow\" component={Escrow} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/billingSchedule\" component={BillingSchedule} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/flatFeeOverride\" component={FlatFeeOverride} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/flatFeeRates\" component={FlatFeeRates} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/alacarteratesspecial\" component={ALaCarteRatesSpecial} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/alacarterates\" component={ALaCarteRates} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/common\" component={Common} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/efile\" component={Efile} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/homeLatestNews\" component={HomeLatestNews} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/homeExternalLinks\" component={HomeExternalLinks} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/homeNotableDates\" component={HomeNotableDates} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/homeSelections\" component={HomeSelections} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/languages\" component={Languages} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/loginPageLinks\" component={LoginPageLinks} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/loginPageLatestNews\" component={LoginPageLatestNews} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/loginPageSlides\" component={LoginPageSlides} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/loginPageRegistration\" component={LoginPageRegistration} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/search2\" component={Search2} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/search\" component={Search} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/reports\" component={Reports} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/performanceMonitoring\" component={PerformanceMonitoring} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/reloadConfiguration\" component={ReloadConfiguration} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/LandSharkOneAccountsUsers\" component={LandSharkOneAccountsUsers} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/LandSharkOneAuditLog\" component={LandSharkOneAuditLog} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/userAccess\" component={UserAccess} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/userLockout2\" component={UserLockout2} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/userLockout\" component={UserLockout} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/userPurgeNow\" component={UserPurgeNow} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/userPurgeSchedule\" component={UserPurgeSchedule} />\r\n\t\t\t\t\t\t<Route path=\"/controlPanel/auditLogPurgeSchedule\" component={AuditLogPurgeSchedule} />\r\n\t\t\t\t\t\t{defaultRoute}\r\n\t\t\t\t\t</Switch>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps)(ControlPanel);","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nimport landshark_logo from '../../img/trimin_landshark_verysmall.png';\r\n\r\nconst mapStateToProps = state => {\r\n\treturn {\r\n\t\tcountyName: state.countyConfigCommonReducer.countyName,\r\n\t\tappTitle: state.countyConfigCommonReducer.appTitle\r\n\t};\r\n}\r\n\r\nclass LoginTop extends React.Component {\r\n\r\n\thandleTriminClick = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\twindow.open(\"https://www.trimingov.com/\");\r\n\t};\r\n\r\n\trender() {\r\n\r\n\t\t// let rightHandSide = '';\r\n\t\t// if (this.props.pathname && this.props.pathname === '/login') {\r\n\t\t// \trightHandSide = <span> New User?<NavLink to='/register'> <button className=\"btn btn-primary\">Register</button></NavLink></span>\r\n\t\t// }\r\n\r\n\t\treturn (\r\n\t\t\t<header className=\"container-fluid\" style={{borderBottom: '3px solid black'}} >\r\n\t\t\t\t<table>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td valign=\"bottom\">\r\n\t\t\t\t\t\t\t\t<table align=\"center\" width=\"100%\">\r\n\t\t\t\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span style={{ color: '#3674AB', fontSize: 36, fontVariant: 'small-caps', fontWeight: 'bold' }}>{this.props.countyName} {this.props.appTitle}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span style={{ fontSize: 20, fontWeight: 500, marginTop: 50 }}> powered by </span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<img border=\"0\" src={landshark_logo} alt=\"Trimin Landshark\" style={{ paddingBottom: 15, cursor: \"pointer\" }} onClick={ this.handleTriminClick} />\r\n\t\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t\t\t\t</table>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t{/* <td valign=\"bottom\" width=\"1%\">\r\n\t\t\t\t\t\t\t\t{rightHandSide}\r\n\t\t\t\t\t\t\t</td> */}\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t</table>\r\n\t\t\t</header>\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps)(LoginTop);","import React from 'react';\r\nimport { Row, Col, Container} from 'react-bootstrap'\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\n\r\nclass LoginPageLinks extends React.Component {\r\n\r\n\tstate = {\r\n\t\tparagraphs: [ ]\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\taxios.get(configData.LANDSHARK_SERVER_URL + \"auth/loginPageLinks\", { withCredentials: true })\r\n\t\t\t.then(\r\n\t\t\t\t(response) => {\r\n\t\t\t\t\tconst content = response.data.content;\r\n\t\t\t\t\tlet paragraphs = content.paragraphs;\r\n\t\t\t\t\tif (!paragraphs || paragraphs.length === 0) {\r\n\t\t\t\t\t\tparagraphs = [{\r\n\t\t\t\t\t\t\theading: '',\r\n\t\t\t\t\t\t\tparagraphContent: ''\r\n\t\t\t\t\t\t}]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tparagraphs\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t\t(error) => {\r\n\t\t\t\t\t// handleError(error, this.props.history);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t}\r\n\r\n\trender() {\r\n\r\n\t\t// no links\r\n\t\tif (!this.state.paragraphs || this.state.paragraphs.length === 0) {\r\n\t\t\treturn (<Row className='align-items-center h-25'/>)\r\n\t\t}\r\n\r\n\t\tconst numberOfLinks = this.state.paragraphs.length;\r\n\r\n\t\t// One link\r\n\t\tif (numberOfLinks === 1) {\r\n\t\t\treturn (\r\n\t\t\t\t<Row className='align-items-center' style={{height: '20%'}} >\r\n\t\t\t\t\t<Col lg={12} className='text-center' style={{ color: 'white'}}>\r\n\t\t\t\t\t\t<a target=\"_blank\" rel=\"noopener noreferrer\" href={this.state.paragraphs[0].paragraphContent} style={{ color: 'white', fontWeight: 'bold' }}>{this.state.paragraphs[0].heading}</a>\r\n\t\t\t\t\t</Col>\r\n\t\t\t\t</Row>\r\n\t\t\t)\r\n\t\t}\r\n\r\n\t\t// Two links\r\n\t\tif (numberOfLinks === 2) {\r\n\t\t\treturn (\r\n\t\t\t\t<Row className='align-items-center' style={{height: '20%'}}>\r\n\t\t\t\t\t<Col lg={6} className='text-center' style={{ borderRight: '3px solid white', color: 'white' }} >\r\n\t\t\t\t\t\t<a target=\"_blank\" rel=\"noopener noreferrer\" href={this.state.paragraphs[0].paragraphContent} style={{ color: 'white', fontWeight: 'bold' }}>{this.state.paragraphs[0].heading}</a>\r\n\t\t\t\t\t</Col>\r\n\t\t\t\t\t<Col lg={6} className='text-center'>\r\n\t\t\t\t\t\t<a target=\"_blank\" rel=\"noopener noreferrer\" href={this.state.paragraphs[1].paragraphContent} style={{ color: 'white', fontWeight: 'bold' }}>{this.state.paragraphs[1].heading}</a>\r\n\t\t\t\t\t</Col>\r\n\t\t\t\t</Row>\r\n\t\t\t)\r\n\t\t}\r\n\r\n\t\t// The LoginPageLinks.js in the control panel allows up to 12 links.\r\n\t\t// The rest of the code assumes there's a max of 12 links. \r\n\t\tconst numberOfRows = numberOfLinks > 6 ? 2 : 1;\r\n\t\tconst numberOfRowOneLinks = Math.ceil(numberOfLinks / numberOfRows);\r\n\t\tconst columnSize = Math.floor(12 / numberOfRowOneLinks);\r\n\t\tlet rowOnefiller = <></>\r\n\t\t// 12 is not divisble by 5, so add a filler and treat it like there are six links\r\n\t\tif (numberOfRowOneLinks === 5) {\r\n\t\t\trowOnefiller = <Col lg={columnSize} className='text-center' style={{ borderRight: '3px solid white', color: 'white' }} ></Col>\r\n\t\t}\r\n\r\n\t\tconst numberOfRowTwoLinks = numberOfLinks - numberOfRowOneLinks;\r\n\t\tlet rowTwofiller = <></>\r\n\t\t// If row one more links than row two, row two needs to add a filler to line up with row one.\r\n\t\t// If row one has only 5 links, it means it uses a filler, so row two need to add a filler to line up with row one.\r\n\t\tif (numberOfRowOneLinks > numberOfRowTwoLinks || numberOfRowOneLinks === 5) { \r\n\t\t\trowTwofiller = <Col lg={columnSize} className='text-center' style={{ borderRight: '3px solid white', color: 'white' }} ></Col>\r\n\t\t}\r\n\r\n\t\tlet rowOneLinks = [];\r\n\t\tfor (let index = 0; index < numberOfRowOneLinks; index++) {\r\n\t\t\trowOneLinks.push(\r\n\t\t\t\t<Col lg={columnSize} className='text-center' style={{ borderRight: '3px solid white', color: 'white' }} >\r\n\t\t\t\t\t<a target=\"_blank\" rel=\"noopener noreferrer\" href={this.state.paragraphs[index].paragraphContent} style={{ color: 'white', fontWeight: 'bold' }}>{this.state.paragraphs[index].heading}</a>\r\n\t\t\t\t</Col>\r\n\t\t\t);\r\n \t\t}\r\n\r\n\t\t// Row Two\r\n\t\tlet rowTwoLinks = [];\r\n\t\tif (numberOfRows > 1) {\r\n\t\t\tfor (let index = numberOfRowOneLinks; index < numberOfLinks; index++) {\r\n\t\t\t\trowTwoLinks.push(\r\n\t\t\t\t\t<Col lg={columnSize} className='text-center' style={{ borderRight: '3px solid white', color: 'white' }} >\r\n\t\t\t\t\t\t<a target=\"_blank\" rel=\"noopener noreferrer\" href={this.state.paragraphs[index].paragraphContent} style={{ color: 'white', fontWeight: 'bold' }}>{this.state.paragraphs[index].heading}</a>\r\n\t\t\t\t\t</Col>\r\n\t\t\t\t);\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t<Row className='align-items-center' style={{height: '15%'}} >\r\n\t\t\t\t<Col lg='12' >\r\n\t\t\t\t <Container fluid=\"true\" > \r\n\t\t\t\t\t <Row style={{marginBottom:10}}> \r\n\t\t\t\t\t\t{rowOnefiller}\r\n\t\t\t\t\t\t{rowOneLinks}\r\n\t\t\t\t\t</Row> \r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tnumberOfRows > 1 &&\r\n\t\t\t\t\t \t<Row>\r\n\t\t\t\t\t\t\t{rowTwofiller}\r\n\t\t\t\t\t\t\t{rowTwoLinks}\r\n\t\t\t\t\t\t</Row> \r\n\t\t\t\t\t}\r\n\t\t\t\t </Container>\r\n\t\t\t\t </Col>\r\n\t\t\t</Row>\t\t\t\r\n\t\t\t</>\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default LoginPageLinks;","import React from 'react';\r\nimport { Carousel } from 'react-bootstrap'\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\n\r\nclass LoginPageSlides extends React.Component {\r\n\r\n\tstate = {\r\n\t\tnumberOfSlides: 0\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\taxios.get(configData.LANDSHARK_SERVER_URL + \"auth/loginPageSlides\", { withCredentials: true })\r\n\t\t\t.then(\r\n\t\t\t\t(response) => {\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tnumberOfSlides: response.data.content.numberOfSlides\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t\t(error) => {\r\n\t\t\t\t\t// handleError(error, this.props.history);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst slide1 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/one.jpg\";\r\n\t\tconst slide2 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/two.jpg\";\r\n\t\tconst slide3 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/three.jpg\";\r\n\t\tconst slide4 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/four.jpg\";\r\n\t\tconst slide5 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/five.jpg\";\r\n\t\tconst slide6 = configData.BROWSER_ROUTER_BASENAME + \"/counties/\" + configData.COUNTY_DIRECTORY + \"/six.jpg\";\r\n\r\n\t\tif (!this.state.numberOfSlides || this.state.numberOfSlides <= 1) {\r\n\t\t\treturn (\r\n\t\t\t\t<Carousel style={{ boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }} autoPlay={false} controls={false} indicators={false} >\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.state.numberOfSlides === 1 &&\r\n\t\t\t\t\t\t<Carousel.Item>\r\n\t\t\t\t\t\t\t<img border=\"0\" src={slide1} alt=\"ONE\" class=\"img-fluid\" />\r\n\t\t\t\t\t\t</Carousel.Item>\r\n\t\t\t\t\t}\r\n\t\t\t\t</Carousel>\r\n\t\t\t)\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<Carousel style={{boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\"}} autoPlay={true} controls={true} indicators={true} interval={30000} >\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.state.numberOfSlides >= 1 &&\r\n\t\t\t\t\t\t<Carousel.Item>\r\n\t\t\t\t\t\t\t<img border=\"0\" src={slide1} alt=\"ONE\" class=\"img-fluid\" />\r\n\t\t\t\t\t\t</Carousel.Item>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.state.numberOfSlides >= 2 &&\r\n\t\t\t\t\t\t<Carousel.Item>\r\n\t\t\t\t\t\t\t<img border=\"0\" src={slide2} alt=\"TWO\" class=\"img-fluid\" />\r\n\t\t\t\t\t\t</Carousel.Item>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.state.numberOfSlides >= 3 &&\r\n\t\t\t\t\t\t<Carousel.Item>\r\n\t\t\t\t\t\t\t<img border=\"0\" src={slide3} alt=\"THREE\" class=\"img-fluid\" />\r\n\t\t\t\t\t\t</Carousel.Item>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.state.numberOfSlides >= 4 &&\r\n\t\t\t\t\t\t<Carousel.Item>\r\n\t\t\t\t\t\t\t<img border=\"0\" src={slide4} alt=\"FOUR\" class=\"img-fluid\" />\r\n\t\t\t\t\t\t</Carousel.Item>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.state.numberOfSlides >= 5 &&\r\n\t\t\t\t\t\t<Carousel.Item>\r\n\t\t\t\t\t\t\t<img border=\"0\" src={slide5} alt=\"FIVE\" class=\"img-fluid\" />\r\n\t\t\t\t\t\t</Carousel.Item>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.state.numberOfSlides >= 6 &&\r\n\t\t\t\t\t\t<Carousel.Item>\r\n\t\t\t\t\t\t\t<img border=\"0\" src={slide6} alt=\"SIX\" class=\"img-fluid\" />\r\n\t\t\t\t\t\t</Carousel.Item>\r\n\t\t\t\t\t}\r\n\t\t\t\t</Carousel>\r\n\t\t\t</>\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default LoginPageSlides;","import React, { Component } from 'react';\r\nimport { Card } from 'react-bootstrap'\r\nimport moment from 'moment';\r\nimport { paperPlaneIcon } from '../../img/font_awesome/font_awesome';\r\nimport translations from \"../../config/translation/home_translations.json\"\r\nimport { connect } from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n language: state.currentUserReducer.language ? state.currentUserReducer.language : 'ENGLISH',\r\n };\r\n}\r\n\r\nclass LoginPageLatestNews extends Component {\r\n state = {\r\n paragraphs: []\r\n }\r\n\r\n componentDidMount() {\r\n axios.get(configData.LANDSHARK_SERVER_URL + \"auth/loginPageLatestNews\", { withCredentials: true })\r\n .then(\r\n (response) => {\r\n const content = response.data.content;\r\n let paragraphs = content.paragraphs;\r\n this.setState({\r\n paragraphs\r\n });\r\n },\r\n (error) => {\r\n // handleError(error, this.props.history);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n var now = moment();\r\n var date = now.format(\"MMMM D, yyyy\");\r\n\r\n if (!this.state.paragraphs || this.state.paragraphs.length === 0) {\r\n return <></>\r\n }\r\n\r\n let newsItems = [];\r\n this.state.paragraphs.forEach((newsItem, index) => {\r\n newsItems.push(<li><span style={{ fontWeight: 'bold' }}>{newsItem.heading}</span> {newsItem.paragraphContent}</li>)\r\n })\r\n\r\n return (\r\n <div style={{ marginLeft: 10, boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\" }}>\r\n <Card style={{ maxHeight: 150 }}>\r\n <Card.Header>\r\n {paperPlaneIcon} {translations[this.props.language].latest_news} - {date}\r\n </Card.Header>\r\n <Card.Body style={{ maxHeight: 150, paddingTop: 0, paddingLeft: 0, paddingRight: 0, paddingBottom: 0 }}>\r\n <Card.Text style={{ maxHeight: 150, paddingTop: 0, paddingLeft: 0, paddingRight: 0, paddingBottom: 0 }}>\r\n <ul className='list-card' style={{ maxHeight: 100, listStyle: 'none', paddingLeft: 0, marginLeft: 20 }} > \r\n {newsItems}\r\n </ul>\r\n </Card.Text>\r\n </Card.Body>\r\n </Card>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(LoginPageLatestNews);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { copyrightIcon } from \"../../img/font_awesome/font_awesome\"\r\nimport landshark_logo from '../../img/trimin_landshark_verysmall.png';\r\nimport packageJson from '../../../package.json';\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n serverProductVersions: state.serverProductVersionsReducer.combinedVersion\r\n };\r\n}\r\n\r\nclass Footer extends React.Component {\r\n\r\n handleTriminClick = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\twindow.open(\"https://www.trimingov.com/\");\r\n\t};\r\n\r\n\trender() {\r\n\t\tlet newDate = new Date()\r\n\t\tlet year = newDate.getFullYear();\r\n\r\n\t\tif (year > 2022) { // If the current year is 2021, show only 2021. Otherwise, show a range of 2021-currrent year.\r\n\t\t\tyear = '2022-' + year;\r\n\t\t}\r\n\r\n return (\r\n <footer style={{ borderTop: '3px solid black' }}>\r\n <div style={{ marginLeft: 10, marginRight: 10, marginTop: 15 }}>\r\n <div>\r\n <img border=\"0\" src={landshark_logo} alt=\"Trimin Landshark\" style={{ paddingBottom: 5, cursor: \"pointer\" }} onClick={this.handleTriminClick} />\r\n <span style={{ marginLeft: 5, verticalAlign: 'bottom' }}>v{packageJson.version}u{this.props.serverProductVersions}</span>\r\n <br />Designed, engineered and supported in St Paul, MN. Part of the land record managment software suite by TriMin Systems. \r\n </div>\r\n <div>{copyrightIcon} {year} TriMin Systems Inc. All Rights Reserved.</div>\r\n </div>\r\n </footer>\r\n )\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps)(Footer);\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nimport { Form, Row, Col, Container } from 'react-bootstrap'\r\nimport TextField from \"../common/form/TextField\";\r\nimport PrimaryButton from '../common/form/PrimaryButton';\r\nimport LoginTop from \"../../components/top/LoginTop\";\r\nimport { login } from \"../../redux/actions/loginActions\";\r\nimport LoginPageLinks from './LoginPageLinks';\r\nimport LoginPageSlides from './LoginPageSlides';\r\nimport LoginPageLatestNews from './LoginPageLatestNews';\r\nimport { NavLink } from \"react-router-dom\";\r\nimport SelectField from '../common/form/SelectField';\r\nimport Footer from '../bottom/Footer'\r\n\r\nconst mapStateToProps = state => {\r\n\treturn {\r\n\t\tdefaultSearch: state.countyConfigSearchReducer.defaultSearch,\r\n\t\tloginRegistration: state.countyConfigLoginRegistrationReducer,\r\n\t\tlanguages: state.countyConfigLanguagesReducer\r\n\t};\r\n}\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tlogin: (credential, defaultSearch, history, callback) => dispatch(login(credential, defaultSearch, history, callback))\r\n\t}\r\n}\r\n\r\nclass Login extends Component {\r\n\tstate = {\r\n\t\tusername: \"\",\r\n\t\tpassword: \"\",\r\n\t\tlanguage: \"ENGLISH\",\r\n\t\terror: \"\",\r\n\t\tloading: false\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tthis.setState({\r\n\t\t\terror: \"\",\r\n\t\t\t[event.target.id]: event.target.value\r\n\t\t})\r\n\t}\r\n\r\n\thandleCallback = (status) => {\r\n\t\tthis.setState({\r\n\t\t\terror: \"\",\r\n\t\t\tloading: false\r\n\t\t})\r\n\t\tif (status.error) {\r\n\t\t\tthis.setState({\r\n\t\t\t\terror: status.message,\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.setState({\r\n\t\t\tloading: true\r\n\t\t})\r\n\t\tthis.props.login(this.state, this.props.defaultSearch, this.props.history, this.handleCallback);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst languageOptions = [{ code: \"BENGALI\", description: \"Bengali\" }, \r\n\t\t\t\t\t\t\t\t { code: \"CAROLINIAN\", description: \"Carolinian\" }, \r\n\t\t\t\t\t\t\t { code: \"CHAMORRO\", description: \"Chamorro\" },\r\n\t\t\t\t\t\t\t\t { code: \"CHINESE\", description: \"ä¸æ–‡\" }, \r\n\t\t\t\t\t\t\t\t { code: \"CHUUKESE\", description: \"Chuukese\" }, \r\n\t\t\t\t\t\t\t\t { code: \"ENGLISH\", description: \"English\" }, \r\n\t\t\t\t\t\t\t\t { code: \"JAPANESE\", description: \"日本語\" }, \r\n\t\t\t\t\t\t\t\t { code: \"KOREAN\", description: \" í•œêµì–´\" },\r\n\t\t\t\t\t\t\t\t { code: \"PALAUAN\", description: \"Palauan\" },\r\n\t\t\t\t\t\t\t\t { code: \"POHNPEIAN\", description: \"Pohnpeian\" },\r\n\t\t\t\t\t\t\t\t { code: \"RUSSIAN\", description: \"РуÑÑкий\" },\r\n\t\t\t\t\t\t\t\t { code: \"TAGALOG\", description: \"Tagalog\" },\r\n\t\t\t\t\t\t\t\t { code: \"THAI\", description: \"ไทย\" },\r\n\t\t\t\t\t\t\t\t { code: \"TURKISH\", description: \"Türkçe\" }];\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<LoginTop pathname={this.props.location.pathname} />\r\n\t\t\t\t<section >\r\n\t\t\t\t\t<Container fluid=\"true\" className='h-100'>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t<Row className='align-items-center' style={{ height: '85%', marginLeft: 10, marginRight:10, paddingLeft: 13}} >\r\n\t\t\t\t\t\t\t<Col lg={8} >\r\n\t\t\t\t\t\t\t\t<LoginPageSlides />\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t<Col lg={4} >\r\n\t\t\t\t\t\t\t<Row style={{marginBottom: 30}}>\r\n\t\t\t\t\t\t\t\t<LoginPageLatestNews />\r\n\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t<Form onSubmit={this.handleSubmit} style={{ background: 'gray', color: 'white', border: '3px solid darkGray', marginLeft:10, marginRight: 0, paddingTop: 30, paddingBottom: 30, paddingLeft: 20, paddingRight: 20, boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, 0.55), 0 6px 20px 0 rgba(0, 0, 0, 0.54)\"}} >\r\n\t\t\t\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t\t\t\t<Col lg={12}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Form.Group controlId={'username'}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TextField formGroup={{ label: 'Username', primaryCriteria: true, fieldType: 'text', required: true, style: {width: '100%'} }} onChange={this.handleChange} />\r\n\t\t\t\t\t\t\t\t\t\t\t</Form.Group>\r\n\t\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t\t\t\t<Col lg={12}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Form.Group controlId={'password'}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TextField formGroup={{ label: 'Password', primaryCriteria: true, fieldType: 'password', required: true }} onChange={this.handleChange} />\r\n\t\t\t\t\t\t\t\t\t\t\t</Form.Group>\r\n\t\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t\t</Row>\r\n\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tthis.props.languages.languages === true &&\r\n\t\t\t\t\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t\t\t\t\t<Col className='float-left' lg={12}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<SelectField formGroup={{ id: 'language', label: 'Language', fieldType: 'select', value: 'ENGLISH', options: languageOptions }} onChange={this.handleChange} />\r\n\t\t\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<Row className='align-items-center'>\r\n\t\t\t\t\t\t\t\t\t\t<Col lg={3} className='text-center' >\r\n\t\t\t\t\t\t\t\t\t\t\t<PrimaryButton buttonLabel={'Log In'} />\r\n\t\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tthis.props.loginRegistration.forgotPasswordLink === true &&\r\n\t\t\t\t\t\t\t\t\t\t\t<Col lg={3} className='text-center' >\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span><NavLink to='/forgotUsername' style={{ color: 'white' }}>Forgot Username?</NavLink></span>\r\n\t\t\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tthis.props.loginRegistration.forgotPasswordLink === true &&\r\n\t\t\t\t\t\t\t\t\t\t\t<Col lg={3} className='text-center' >\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span><NavLink to='/forgotPassword' style={{ color: 'white' }}>Forgot Password? </NavLink></span>\r\n\t\t\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tthis.props.loginRegistration.selfRegistration === true &&\r\n\t\t\t\t\t\t\t\t\t\t\t<Col lg={3} className='text-center' >\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span><NavLink to='/register' style={{ color: 'white' }}>New User?</NavLink></span>\r\n\t\t\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tthis.state.error &&\r\n\t\t\t\t\t\t\t\t\t\t<Row className='align-items-center'>\r\n\t\t\t\t\t\t\t\t\t\t\t<Col lg={1} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Col lg={10} className='text-center' style={{ fontWeight: 'bold', paddingTop: 10, paddingBottom: 10, marginTop: 10, background: 'lightgray', border: '3px solid red', color: 'red' }} >\r\n\t\t\t\t\t\t\t\t\t\t\t\t{this.state.error}\r\n\t\t\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t\t\t\t<Col lg={1} />\r\n\t\t\t\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tthis.state.loading &&\r\n\t\t\t\t\t\t\t\t\t\t<Row className='align-items-center'>\r\n\t\t\t\t\t\t\t\t\t\t\t<Col lg={1} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Col lg={10} className='text-center' style={{ fontWeight: 'bold', paddingTop: 10, paddingBottom: 10, marginTop: 10, background: 'lightgray', border: '3px solid #3674AB', color: '#3674AB' }} >\r\n\t\t\t\t\t\t\t\t\t\t\t\tLogging in...\r\n\t\t\t\t\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\t\t\t\t<Col lg={1} />\r\n\t\t\t\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</Form>\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t<LoginPageLinks />\r\n\t\t\t\t\t</Container>\r\n\t\t\t\t</section>\r\n\t\t\t\t<Footer />\r\n\t\t\t</>\r\n\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(Login);","import React from 'react';\r\nimport { Container, Row, Col } from 'react-bootstrap'\r\nimport Alert from '../common/modal/Alert';\r\nimport Loading from '../common/modal/Loading';\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport LoginTop from \"../../components/top/LoginTop\";\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport usStates from \"../../config/us_states_no_blank_entry.json\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport { formatPhone, formatInternationalPhone, formatZip } from \"../common/function/formattingUtils.js\";\r\nimport { validateUser, trimUserFields } from \"../common/function/userValidation.js\";\r\nimport Footer from '../bottom/Footer'\r\nimport { LOADING_STATUES } from \"../../components/constants/constants\";\r\n\r\nconst mapStateToProps = (state) => {\r\n\treturn {\r\n\t\tcountyStateCode: state.productPropertiesReducer.countyStateCode\r\n\t};\r\n}\r\n\r\nclass Register extends React.Component {\r\n\tstate = {\r\n\t\tusername: \"\",\r\n\t\tfirstName: \"\",\r\n\t\tlastName: \"\",\r\n\t\tcompany: \"\",\r\n\t\taddress: \"\",\r\n\t\tcity: \"\",\r\n\t\tstate: this.props.countyStateCode,\r\n\t\tzip: \"\",\r\n\t\temail: \"\",\r\n\t\tphoneFormatType: 'STANDARD',\r\n\t\tphoneInternational: '',\r\n\t\tphoneStandard: '',\r\n\t\tpassword: \"\",\r\n\t\tpasswordConfirm: \"\",\r\n\t\tshowAlert: false,\r\n\t\talertMessage: \"\",\r\n\t\tstatus: \"\",\r\n\t\terrors: {},\r\n\t\tredirectToLogin: false\r\n\t }\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.status === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tstatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\r\n\t\tlet value = event.target.value;\r\n\t\tif (event.target.id === 'phoneStandard') {\r\n\t\t \tvalue = formatPhone(value, this.state.phone);\r\n\t\t} else if (event.target.id === 'phoneInternational') {\r\n\t\t\tvalue = formatInternationalPhone(value);\r\n\t\t} else if (event.target.id === 'zip') {\r\n\t\t\tvalue = formatZip(value);\r\n\t\t}\r\n\r\n\t\tthis.setState({\r\n\t\t [event.target.id]: value,\r\n\t\t errors: {}\r\n\t\t})\r\n\t}\r\n\t\r\n\tvalidateAndSubmit = () => {\r\n\t\tlet errors = validateUser(this.state);\r\n\t\tif (errors && Object.keys(errors).length > 0) {\r\n\t\t\tthis.setState({errors});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.showLoading() === true) {\r\n\r\n\t\t\tconst { passwordConfirm, status, \t\t\r\n\t\t\t\t showAlert, alertMessage, redirectToLogin, errors, \r\n\t\t\t\t phoneInternational, phoneStandard,\r\n\t\t\t\t ...request } = this.state; // remove UI only fields before submitting\r\n\r\n\t\t\tif (this.state.phoneFormatType === 'INTERNATIONAL') {\r\n\t\t\t\trequest.phone = this.state.phoneInternational;\r\n\t\t\t} else {\r\n\t\t\t\trequest.phone = this.state.phoneStandard;\r\n\t\t\t}\r\n\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"auth/signUp\", request, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({status: \"\", redirectToLogin: true}, this.showAlert(\"We've emailed you a link. Please follow the link to complete your registration.\")); \r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({status: \"\", redirectToLogin: false}, this.showAlert(error.response.data.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tconst trimmedUserFields = trimUserFields(this.state);\r\n\t\tthis.setState({ ...trimmedUserFields }, function () {\r\n\t\t\tthis.validateAndSubmit();\r\n\t\t});\r\n\t}\r\n\t\r\n\thandleCancel = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/login');\r\n\t}\r\n\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t\tif (this.state.redirectToLogin) {\r\n\t\t\tthis.props.history.push('/login');\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tlet formGroupRows = [\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'username', label: 'Username', fieldType: 'text', value: this.state.username, required: true, primaryCriteria: true, error: this.state.errors['username'] }, { id: 'email', label: 'Email', fieldType: 'email', value: this.state.email, required: true, primaryCriteria: true, error: this.state.errors['email'] }]\r\n\t\t \t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'password', label: 'Password', fieldType: 'password', value: this.state.password, required: true, primaryCriteria: true, error: this.state.errors['password'] }, { id: 'passwordConfirm', label: 'Confirm Password', fieldType: 'password', value: this.state.passwordConfirm, required: true, primaryCriteria: true, error: this.state.errors['passwordConfirm'] }]\r\n\t\t\t},\t\t\t\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'firstName', label: 'First Name', fieldType: 'text', value: this.state.firstName, required: true, primaryCriteria: true }, { id: 'lastName', label: 'Last Name', fieldType: 'text', value: this.state.lastName, required: true, primaryCriteria: true }]\r\n\t\t \t},\r\n\t\t\t{\r\n\t\t\t \tformGroups: [{ id: 'company', label: 'Company', fieldType: 'text', value: this.state.company, required: false, error: this.state.errors['company'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t \tformGroups: [{ id: 'address', label: 'Address', fieldType: 'text', value: this.state.address, required: true, style: {minWidth: 400}, error: this.state.errors['address'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t \tformGroups: [{ id: 'city', label: 'City', fieldType: 'text', value: this.state.city, required: true, error: this.state.errors['city'] }, { id: 'state', label: 'State', fieldType: 'select', required: true, value: this.state.state, options: usStates, error: this.state.errors['state'] }, { id: 'zip', label: 'Zip (ex. 55111)', fieldType: 'zip', value: this.state.zip, required: true, style: {maxWidth: 100, marginRight: 10}, error: this.state.errors['zip'] }]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'phoneFormatType', label: 'Phone Format', fieldType: 'select', options: [{ code: \"STANDARD\", description: \"(XXX) XXX-XXXX\" }, { code: \"INTERNATIONAL\", description: \"International\" }], value: this.state.phoneFormatType, required: true, error: this.state.errors['phoneFormatType'] },\r\n\t\t\t\t { id: 'phoneStandard', label: 'Phone (ex. (612) 555-1234)', fieldType: 'tel', value: this.state.phoneStandard, required: true, hideField: this.state.phoneFormatType !== 'STANDARD', error: this.state.errors['phoneStandard'] },\r\n\t\t\t\t\t\t\t { id: 'phoneInternational', label: 'Phone with country code (ex. 8613123456789)', fieldType: 'tel_international', value: this.state.phoneInternational, required: true, hideField: this.state.phoneFormatType !== 'INTERNATIONAL', error: this.state.errors['phoneInternational'] } ]\r\n\t\t\t}\r\n\t\t]\r\n\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: \"UserRegistration\",\r\n\t\t\tpageHeading: \"User Registration\",\r\n\t\t\tonChange: this.handleChange,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tonCancel: this.handleCancel,\r\n\t\t\tformGroupRows: formGroupRows,\r\n\t\t\tformOnly: true\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n <LoginTop />\r\n\t\t\t\t<section className=\"cn container-fluid\" style={{background: '#3674AB' }}>\r\n\t\t\t\t<div style={{background: 'white', border: 'solid 3px black', borderRadius: 5, paddingBottom: 10, paddingLeft: 10, paddingRight: 10}}>\r\n\t\t\t\t\t<Container fluid=\"true\" >\r\n\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t<FormTemplate {...formProps} />\r\n\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t</Container>\r\n\t\t\t\t</div>\r\n\t\t\t\t</section>\r\n\t\t\t\t<Footer />\r\n\t\t\t\t<Loading loadingIndicator={this.state.status === LOADING_STATUES.LOADING} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n\t\t\t</>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(Register); ","import React from 'react';\r\nimport { Container, Row, Col } from 'react-bootstrap'\r\nimport Alert from '../common/modal/Alert';\r\nimport Loading from '../common/modal/Loading';\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport LoginTop from \"../top/LoginTop\";\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport Footer from '../bottom/Footer'\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\n\r\nclass ForgotUsername extends React.Component {\r\n\tstate = {\r\n\t\temail: \"\",\r\n\t\tshowAlert: false,\r\n\t\talertMessage: \"\",\r\n\t\tloadingStatus: \"\",\r\n\t\terrors: {},\r\n\t\tredirectToLogin: false\r\n\t }\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\r\n\t\tlet value = event.target.value;\r\n\t\tthis.setState({\r\n\t\t [event.target.id]: value,\r\n\t\t errors: {}\r\n\t\t})\r\n\t}\r\n\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\tlet { showAlert, alertMessage, loadingStatus, errors, redirectToLogin, ...request } = this.state; // remove UI only fields before submitting\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"auth/forgotUsername\", request, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({loadingStatus: \"\", redirectToLogin: true}, this.showAlert(response.data.message)); \r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({ loadingStatus: \"\", redirectToLogin: false }, this.showAlert(error.response.data.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\thandleCancel = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/login');\r\n\t}\r\n\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t\tif (this.state.redirectToLogin) {\r\n\t\t\tthis.props.history.push('/login');\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tlet formGroupRows = [\r\n\t\t\t{\r\n\t\t\t\tformGroups: [ { id: 'email', label: 'Email', fieldType: 'email', value: this.state.email, style: {minWidth: 250}, required: true, primaryCriteria: true, error: this.state.errors['email'] }]\r\n\t\t \t}\r\n\r\n\t\t]\r\n\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: \"ForgotUsername\",\r\n\t\t\tpageHeading: \"Forgot Username? Enter your registered email.\",\r\n\t\t\tonChange: this.handleChange,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tonCancel: this.handleCancel,\r\n\t\t\tprimaryButtonLabel: \"Send Email\",\r\n\t\t\tformGroupRows: formGroupRows,\r\n\t\t\tformOnly: true\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n <LoginTop />\r\n\t\t\t\t<section className=\"cn container-fluid\" style={{background: '#3674AB' }}>\r\n\t\t\t\t<div style={{background: 'white'}}>\r\n\t\t\t\t\t<Container fluid=\"true\" >\r\n\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t<FormTemplate {...formProps} />\r\n\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t</Container>\r\n\t\t\t\t</div>\r\n\t\t\t\t</section>\r\n\t\t\t\t<Footer />\r\n\t\t\t\t<Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n\t\t\t</>\r\n )\r\n }\r\n}\r\n\r\nexport default ForgotUsername;","import React from 'react';\r\nimport { Container, Row, Col } from 'react-bootstrap'\r\nimport Alert from '../common/modal/Alert';\r\nimport Loading from '../common/modal/Loading';\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport LoginTop from \"../top/LoginTop\";\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport Footer from '../bottom/Footer'\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\n\r\nclass ForgotPassword extends React.Component {\r\n\tstate = {\r\n\t\tusername: \"\",\r\n\t\temail: \"\",\r\n\t\tshowAlert: false,\r\n\t\talertMessage: \"\",\r\n\t\tloadingStatus: \"\",\r\n\t\terrors: {},\r\n\t\tredirectToLogin: false\r\n\t }\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\r\n\t\tlet value = event.target.value;\r\n\t\tthis.setState({\r\n\t\t [event.target.id]: value,\r\n\t\t errors: {}\r\n\t\t})\r\n\t}\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\tlet { loadingStatus, errors, showAlert, alertMessage, redirectToLogin, ...request } = this.state; // remove UI only fields before submitting\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"auth/forgotPassword\", request, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({loadingStatus: \"\", redirectToLogin: true}, this.showAlert(response.data.message)); \r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\tthis.setState({loadingStatus: \"\", redirectToLogin: false}, this.showAlert(error.response.data.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\thandleCancel = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/login');\r\n\t}\r\n\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t\tif (this.state.redirectToLogin) {\r\n\t\t\tthis.props.history.push('/login');\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tlet formGroupRows = [\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'username', label: 'Username', fieldType: 'text', value: this.state.username, style: {minWidth: 300}, required: true, primaryCriteria: true, error: this.state.errors['username'] } ]\r\n\t\t \t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [ { id: 'email', label: 'Email', fieldType: 'email', value: this.state.email, style: {minWidth: 300}, required: true, primaryCriteria: true, error: this.state.errors['email'] }]\r\n\t\t \t}\r\n\t\t]\r\n\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: \"ForgotPassword\",\r\n\t\t\tpageHeading: \"Forgot Password? Enter your username and registered email.\",\r\n\t\t\tonChange: this.handleChange,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tonCancel: this.handleCancel,\r\n\t\t\tprimaryButtonLabel: \"Send Email\",\r\n\t\t\tformGroupRows: formGroupRows,\r\n\t\t\tformOnly: true\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n <LoginTop />\r\n\t\t\t\t<section className=\"cn container-fluid\" style={{background: '#3674AB' }}>\r\n\t\t\t\t<div style={{background: 'white'}}>\r\n\t\t\t\t\t<Container fluid=\"true\" >\r\n\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t<FormTemplate {...formProps} />\r\n\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t</Container>\r\n\t\t\t\t</div>\r\n\t\t\t\t</section>\r\n\t\t\t\t<Footer />\r\n\t\t\t\t<Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n\t\t\t</>\r\n )\r\n }\r\n}\r\n\r\nexport default ForgotPassword;","import React from 'react';\r\nimport { Container, Row, Col } from 'react-bootstrap'\r\nimport Alert from '../common/modal/Alert';\r\nimport Loading from '../common/modal/Loading';\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport LoginTop from \"../top/LoginTop\";\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport Footer from '../bottom/Footer'\r\nimport { trimUserFields, validatePassword } from \"../common/function/userValidation.js\";\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\n\r\nclass PasswordReset extends React.Component {\r\n\tstate = {\r\n\t\tpassword: \"\",\r\n\t\tpasswordConfirm: \"\",\r\n\t\tshowAlert: false,\r\n\t\talertMessage: \"\",\r\n\t\tloadingStatus: \"\",\r\n\t\terrors: {},\r\n\t\tredirectToLogin: false\r\n\t }\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thandleChange = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\r\n\t\tlet value = event.target.value;\r\n\t\tthis.setState({\r\n\t\t [event.target.id]: value,\r\n\t\t errors: {}\r\n\t\t})\r\n\t}\r\n\t\r\n\tvalidateAndSubmit = () => {\r\n\t\t// need to validate same passwords\r\n\r\n\t\tlet errors = validatePassword(this.state);\r\n\t\tif (errors && Object.keys(errors).length > 0) {\r\n\t\t\tthis.setState({errors});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.showLoading() === true) {\r\n\t\t\tlet { loadingStatus, errors, alertMessage, redirectToLogin, showAlert, passwordConfirm, ...request } = this.state; // remove UI only fields before submitting\r\n\t\t\tvar ticket = {ticket: this.props.match.params.ticket};\r\n\t\t\trequest = {...request, ...ticket};\r\n\t\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"auth/resetPassword\", request, { withCredentials: true })\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tthis.setState({status: \"\", redirectToLogin: true}, this.showAlert(\"Password updated. You may now log in.\")); \r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\t this.setState({status: \"\", redirectToLogin: false}, this.showAlert(error.response.data.message));\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tconst trimmedUserFields = trimUserFields(this.state);\r\n\t\tthis.setState({ ...trimmedUserFields }, function () {\r\n\t\t\tthis.validateAndSubmit();\r\n\t\t});\r\n\t}\r\n\t\r\n\thandleCancel = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/login');\r\n\t}\r\n\r\n\tshowAlert = (alertMessage) => {\r\n\t\tthis.setState({\r\n\t\t showAlert: true,\r\n\t\t alertMessage\r\n\t\t})\r\n\t }\r\n\t\r\n\thideAlert = () => {\r\n\t\tthis.setState({\r\n\t\t\tshowAlert: false,\r\n\t\t\talertMessage: \"\"\r\n\t\t})\r\n\t\tif (this.state.redirectToLogin) {\r\n\t\t\tthis.props.history.push('/login');\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tlet formGroupRows = [\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'password', label: 'New Password', fieldType: 'password', value: this.state.password, required: true, primaryCriteria: true, error: this.state.errors['password'] } ]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tformGroups: [ { id: 'passwordConfirm', label: 'Confirm Password', fieldType: 'password', value: this.state.passwordConfirm, required: true, primaryCriteria: true, error: this.state.errors['passwordConfirm'] }]\r\n\t\t\t}\r\n\t\t]\r\n\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: \"PasswordReset\",\r\n\t\t\tpageHeading: \"Create a new password\",\r\n\t\t\tonChange: this.handleChange,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tonCancel: this.handleCancel,\r\n\t\t\tformGroupRows: formGroupRows,\r\n\t\t\tformOnly: true\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n <LoginTop />\r\n\t\t\t\t<section className=\"cn container-fluid\" style={{background: '#3674AB' }}>\r\n\t\t\t\t<div style={{background: 'white', paddingBottom: 10, paddingLeft: 10, paddingRight: 10}}>\r\n\t\t\t\t\t<Container fluid=\"true\" >\r\n\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t<FormTemplate {...formProps} />\r\n\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t</Container>\r\n\t\t\t\t</div>\r\n\t\t\t\t</section>\r\n\t\t\t\t<Footer />\r\n\t\t\t\t<Loading loadingIndicator={this.state.status === LOADING_STATUES.LOADING} />\r\n\t\t\t\t<Alert show={this.state.showAlert} hideAlert={this.hideAlert} message={this.state.alertMessage} />\r\n\t\t\t</>\r\n )\r\n }\r\n}\r\n\r\nexport default PasswordReset;","import React from 'react';\r\nimport { Container, Row, Col } from 'react-bootstrap'\r\n\r\nimport Loading from '../common/modal/Loading';\r\nimport FormTemplate from \"../common/form/FormTemplate\";\r\nimport LoginTop from \"../top/LoginTop\";\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport Footer from '../bottom/Footer'\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\n\r\nclass CompleteRegistration extends React.Component {\r\n\tstate = {\r\n\t\tpageHeading: 'Registration Incomplete',\r\n\t\tusernameLine: '',\r\n\t\twelcomeLine: '',\r\n\t\tcompleteMessage: '',\r\n\t\tloadingStatus: \"\",\r\n\t\terrors: {},\r\n\t\tredirectToLogin: false\r\n\t }\r\n\r\n\tshowLoading = () => {\r\n\t\tif (this.state.loadingStatus === \"\") {\r\n\t\t\tthis.setState({\r\n\t\t\t\tloadingStatus: LOADING_STATUES.LOADING\r\n\t\t\t})\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tvar ticket = { ticket: this.props.match.params.ticket };\r\n\r\n\t\taxios.post(configData.LANDSHARK_SERVER_URL + \"auth/completeRegistration\", ticket, { withCredentials: true })\r\n\t\t\t.then((response) => {\r\n\t\t\t\tthis.setState({ pageHeading: 'Registration Complete', welcomeLine: 'Welcome, ' + response.data.content.fullName, usernameLine: 'Username: ' + response.data.content.username, completeMessage: 'You may continue to log in.' });\r\n\t\t\t}, (error) => {\r\n\t\t\t\tthis.setState({status: \"\", redirectToLogin: false, completeMessage: error.response.data.message});\r\n\t\t\t});\r\n\t}\r\n\r\n\thandleSubmit = (event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.props.history.push('/login');\r\n\t}\r\n\r\n\trender() {\r\n\r\n\t\tlet formGroupRows = [\r\n\t\t\t{\r\n\t\t\t\tformGroups: [{ id: 'label1', fieldType: 'label', value: this.state.welcomeLine }]\r\n\t\t\t },\r\n\t\t\t {\r\n\t\t\t\tformGroups: [{ id: 'label2', fieldType: 'label', value: this.state.usernameLine }]\r\n\t\t\t },\r\n\t\t\t {\r\n\t\t\t\tformGroups: [{ id: 'label3', fieldType: 'label', value: this.state.completeMessage }]\r\n\t\t\t }\r\n\t\t]\r\n\r\n\t\tconst formProps = {\r\n\t\t\tcomponentName: \"CompleteRegistration\",\r\n\t\t\tpageHeading: this.state.pageHeading,\r\n\t\t\tonSubmit: this.handleSubmit,\r\n\t\t\tprimaryButtonLabel: \"Continue\",\r\n\t\t\tformGroupRows: formGroupRows,\r\n\t\t\tformOnly: true\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n <LoginTop />\r\n\t\t\t\t<section className=\"cn container-fluid\" style={{background: '#3674AB' }}>\r\n\t\t\t\t<div style={{background: 'white', border: 'solid 3px black', borderRadius: 5, paddingBottom: 10, paddingLeft: 10, paddingRight: 5}}>\r\n\t\t\t\t\t<Container fluid=\"true\" >\r\n\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t<Col>\r\n\t\t\t\t\t\t\t<FormTemplate {...formProps} />\r\n\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Row> \r\n\t\t\t\t\t</Container>\r\n\t\t\t\t</div>\r\n\t\t\t\t</section>\r\n\t\t\t\t<Footer />\r\n\t\t\t\t<Loading loadingIndicator={this.state.status === LOADING_STATUES.LOADING} />\r\n\t\t\t</>\r\n )\r\n }\r\n}\r\n\r\nexport default CompleteRegistration;","import React from 'react';\r\nimport { Route, Redirect } from 'react-router-dom';\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport AjaxResult from \"../../utils/AjaxResult\";\r\n\r\n//https://stackoverflow.com/questions/46162278/authenticate-async-with-react-router-v4\r\n\r\nclass PrivateRoute extends React.Component {\r\n \r\n state = {\r\n loading: true,\r\n isAuthenticated: false,\r\n }\r\n\r\n componentDidMount() {\r\n this.isLoggedIn().then((isAuthenticated) => {\r\n this.setState({\r\n loading: false,\r\n isAuthenticated,\r\n });\r\n });\r\n }\r\n\r\n isLoggedIn() {\r\n //Check if logged in\r\n return axios.get(configData.LANDSHARK_SERVER_URL + \"currentUser/loginStatus\", { withCredentials: true })\r\n .then((response) => {\r\n let result = new AjaxResult(response);\r\n \r\n if (result.isOk()) {\r\n return true;\r\n } \r\n return false\r\n }, (error) => {\r\n // Nothing we can do with the error. Just assume they aren't logged in.\r\n return false;\r\n });\r\n }\r\n\r\n render() {\r\n const { component: Component, ...rest } = this.props;\r\n if (this.state.loading) {\r\n return <div>LOADING</div>;\r\n } else {\r\n return ( <Route {...rest} render={props =>this.state.isAuthenticated ? (\r\n <Component {...props} />\r\n ) : (\r\n this.state.loading ? (\r\n <div>LOADING</div>\r\n ) : (\r\n <Redirect to={{ pathname: '/login', state: { from: this.props.location } }} />\r\n )\r\n )}\r\n />)\r\n }\r\n } \r\n}\r\n\r\nexport { PrivateRoute };","import React, { Component } from \"react\";\nimport { Route, HashRouter, Switch } from \"react-router-dom\";\n\nimport Home from \"./components/home/Home\";\nimport Search from \"./components/search/Search\";\nimport SearchByParcelIdExternal from \"./components/search/searchBy/SearchByParcelIdExternal\";\nimport SearchByDocumentNumberExternal from \"./components/search/searchBy/SearchByDocumentNumberExternal\";\nimport Efile from \"./components/efile/Efile\";\nimport Reports from \"./components/reports/Reports\";\nimport UserList from \"./components/userManager/UserList\";\nimport UserEntry from \"./components/userManager/UserEntry\";\nimport UserPassword from \"./components/userManager/UserPassword\";\nimport ControlPanel from \"./components/controlPanel/ControlPanel\";\n\nimport Login from \"./components/auth/Login\";\nimport Register from \"./components/auth/Register\";\nimport ForgotUsername from \"./components/auth/ForgotUsername\";\nimport ForgotPassword from \"./components/auth/ForgotPassword\";\nimport PasswordReset from \"./components/auth/PasswordReset\";\nimport CompleteRegistration from \"./components/auth/CompleteRegistration\";\nimport configData from \"./config/config.json\";\nimport {PrivateRoute} from \"./components/auth/PrivateRoute.js\";\n\nconst PREFIX = 'App: ';\n\nexport default class App extends Component {\n constructor(props) {\n super(props);\n\n console.log(PREFIX + \"constructed with props\", props);\n }\n\n render() {\n return (\n <HashRouter>\n <div className=\"App\">\n <div style={{maxWidth:2000, margin:'0 auto'}} className=\"content\">\n <Switch>\n <Route exact path=\"/\" component={Login} />\n <Route path=\"/login\" component={Login} />\n <Route path=\"/home\" component={Home} />\n <Route path=\"/register\" component={Register} />\n <Route path=\"/passwordReset/:ticket\" component={PasswordReset} />\n <Route path=\"/CompleteRegistration/:ticket\" component={CompleteRegistration} />\n <Route path=\"/forgotUsername\" component={ForgotUsername} />\n <Route path=\"/forgotPassword\" component={ForgotPassword} />\n <Route path=\"/efile\" component={Efile} />\n <PrivateRoute path=\"/search\" component={Search} />\n <PrivateRoute path=\"/externalsearch/parcelid/:id\" component={SearchByParcelIdExternal} />\n <PrivateRoute path=\"/externalsearch/documentnumber/:id\" component={SearchByDocumentNumberExternal} />\n <PrivateRoute path=\"/reports\" component={Reports} />\n <PrivateRoute path=\"/userManager/UserPassword/:id\" component={UserPassword} /> \n <PrivateRoute path=\"/userManager/:id\" component={UserEntry} />\n <PrivateRoute path=\"/userManager\" component={UserList} />\n <PrivateRoute path=\"/controlPanel\" component={ControlPanel} />\n <Route path='/external' component={(props) => {\n let url =configData.LANDSHARK_SERVER_URL + \n props.location.pathname.substring(1);\n console.log('redirecting to: ' + url);\n window.location.href = url;\n return null;\n }} />\n </Switch>\n </div>\n </div>\n </HashRouter >\n\n );\n }\n}\n\n","const initialState = { }\r\n\r\nconst imageContentReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'UPDATE_IMAGE_CONTENT':\r\n return action.content;\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default imageContentReducer;","const initialState = {\r\n lockoutInPlace: false,\r\n\tmessageLogin: \"\",\r\n\tmessageHeadline: \"\"\r\n};\r\n\r\nconst countyConfigUserLockoutReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_LOCKOUT_IN_PLACE':\r\n return action.lockout;\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default countyConfigUserLockoutReducer;","const countyConfigUserPurgeNowReducer = (state, action) => {\r\n switch (action.type) {\r\n case 'SET_USER_PURGE_NOW':\r\n return action.data;\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport default countyConfigUserPurgeNowReducer;","\r\nimport countyConfigUserLockoutReducer from \"./countyConfigUserLockoutReducer\"\r\nimport countyConfigUserPurgeNowReducer from \"./countyConfigUserPurgeNowReducer\"\r\n\r\nconst initialState = {\r\n userPurgeNow: { \"purgeDate\": \"01/05/2020\" },\r\n userLockout: {\"lockoutInPlace\": false}\r\n}\r\n\r\nconst countyConfigReducer = (state = initialState, action) => {\r\n \r\n switch (action.type) {\r\n case 'SET_USER_LOCKOUT':\r\n return {...state, userAccess: countyConfigUserLockoutReducer(state.userLockout, action)}\r\n \r\n case 'SET_USER_PURGE_NOW':\r\n return {...state, userPurgeNow: countyConfigUserPurgeNowReducer(state.userPurgeNow, action)}\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default countyConfigReducer;","const auditLogTypesAllReducer = (state = [{code: \"all\", description: \"All\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_AUDIT_LOG_TYPES_ALL':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default auditLogTypesAllReducer;","const auditTransactionTypesAllReducer = (state = [{code: \"all\", description: \"All\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_TRANSACTION_LOG_TYPES_ALL':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default auditTransactionTypesAllReducer;","const auditLogTypesReducer = (state = [{code: \"all\", description: \"All\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_AUDIT_LOG_TYPES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default auditLogTypesReducer;","const auditTransactionTypesReducer = (state = [{code: \"all\", description: \"All\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_TRANSACTION_LOG_TYPES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default auditTransactionTypesReducer;\r\n\r\n","const accountTypesReducer = (state = [], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_ACCOUNT_TYPES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default accountTypesReducer;","const bookTypesReducer = (state = [{code: \"ALL\", description: \"All\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_BOOK_TYPES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default bookTypesReducer;","const documentTypesReducer = (state = [{code: \"ALL\", description: \"All\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_DOCUMENT_TYPES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default documentTypesReducer;","const documentTypesWithBlankReducer = (state = [{code: \"\", description: \"\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_DOCUMENT_TYPES_WITH_BLANKS':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default documentTypesWithBlankReducer;","const instrumentCodesReducer = (state = [{code: \"ALL\", description: \"All\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_INSTRUMENT_CODES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default instrumentCodesReducer;"," const instrumentCodesWithBlankReducer = (state = [{code: \"\", description: \"\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_INSTRUMENT_CODES_WITH_BLANKS':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default instrumentCodesWithBlankReducer;","const instrumentGroupsReducer = (state = [{code: \"ALL\", description: \"All\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_INSTRUMENT_GROUPS':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default instrumentGroupsReducer;"," const otherLotCodesReducer = (state = [{code: \"\", description: \"\"}, {code: \"ALL\", description: \"All\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_OTHER_LOT_CODES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default otherLotCodesReducer;","\r\n const paymentMethodTypesAllReducer = (state = [], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_PAYMENT_METHOD_TYPES_ALL':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default paymentMethodTypesAllReducer;","\r\nconst paymentMethodTypesNonALaCarteReducer = (state = [], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_PAYMENT_METHOD_TYPES_NON_A_LA_CARTE':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default paymentMethodTypesNonALaCarteReducer;","\r\nconst platsReducer = (state = [{code: \"ALL\", description: \"All\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_PLATS':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default platsReducer;","\r\nconst platsByNumberReducer = (state = [{code: \"ALL\", description: \"All\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_PLATS_SORTED_BY_NUMBER':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default platsByNumberReducer;","\r\nconst platNamesReducer = (state = [{code: \"-1\", description: \"(Select from list)\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_PLAT_NAMES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default platNamesReducer;","\r\nconst platNumbersReducer = (state = [{code: \"-1\", description: \"(Select from list)\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_PLAT_NUMBERS':\r\n // return [{code: \"-1\", description: \"(Select from list)\"}].concat(action.results);\r\n\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default platNumbersReducer;","\r\nconst userTypesReducer = (state = [], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_USER_TYPES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default userTypesReducer;","const dataSourceTypesReducer = (state = [], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_DATA_SOURCE_TYPES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default dataSourceTypesReducer;\r\n\r\n","const landlinkConfigReducer = (state = [{code: \"IS_QQQ_SECTION\", description: \"false\"}, {code: \"IS_QQQQ_SECTION\", description: \"false\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDLINK_COUNTY_CONFIG':\r\n \r\n \r\n // action.results.forEach((countyConfigResult) => temparray.push() );\r\n\r\n // return temparray;\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default landlinkConfigReducer;","const countyConfigBillingScheduleReducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_BILLING_SCHEDULE':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigBillingScheduleReducer;","const countyConfigFlatFeeReducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_FLAT_FEE':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigFlatFeeReducer;","const countyConfigFlatFeeOverrideUISettingsReducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_FLAT_FEE_OVERRIDE_UI_SETTINGS':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigFlatFeeOverrideUISettingsReducer;","const countyConfigReportsReducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_REPORTS':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigReportsReducer;","const countyConfigEfileReducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_EFILE':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigEfileReducer;","const countyConfigEscrowReducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_ESCROW':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigEscrowReducer;","const countyConfigCreditCardExtraReducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_CREDIT_CARD_EXTRA':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigCreditCardExtraReducer;","const countyConfigLanguagesReducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_LANGUAGES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigLanguagesReducer;","const countyConfigNotableDatesReducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_NOTABLE_DATES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigNotableDatesReducer;","const countyConfigSearchReducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_SEARCH':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigSearchReducer;","const countyConfigSearch2Reducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_SEARCH2':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigSearch2Reducer;","const countyConfigCommonReducer = (state = [{appTitle: \"Land Record Portal\", countyName: \"\", bookLabel: \"Book\", torrensLabel: \"Torrens\"}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_COMMON':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigCommonReducer;","const countyConfigUserAccessReducer = (state = [{}], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_USER_ACCESS':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigUserAccessReducer;","const countyConfigLoginRegistrationReducer = (state = [], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_COUNTY_CONFIG_LOGIN_REGISTRATION':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default countyConfigLoginRegistrationReducer;","const productPropertiesReducer = (state = [], action) => {\r\n switch (action.type) {\r\n case 'LANDSHARK_PRODUCT_PROPERTIES':\r\n return action.results;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default productPropertiesReducer;","\r\nconst initialState = { \r\n \"userId\": \"\",\r\n \"username\": \"\",\r\n \"usageBalance\" : \"\",\r\n \"searchHistoryList\": null,\r\n \"tabList\": null,\r\n \"searchList\": null,\r\n \"language\": \"ENGLISH\"\r\n};\r\n\r\nconst currentUserReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'UPDATE_CURRENT_USER':\r\n return action.currentUser;\r\n case 'UPDATE_CURRENT_USER_USAGE_BALANCE':\r\n return { ...state, usageBalance: action.usageBalance }\r\n case 'LANDSHARK_ACCOUNTS':\r\n return { ...state, allowableAccounts: action.results.codeDescriptionResultList }\r\n case 'LOGOUT_USER':\r\n return { \r\n \"userId\": \"\",\r\n \"username\": \"\",\r\n \"usageBalance\" : \"\",\r\n \"searchHistoryList\": null,\r\n \"tabList\": null,\r\n \"searchList\": null,\r\n \"language\": \"ENGLISH\"\r\n };\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default currentUserReducer;","const initialState = {\r\n statementReport: {},\r\n auditAccountsReport: {},\r\n auditUsersReport: {},\r\n accountTypeReport: {}\r\n}\r\n\r\nconst reportCriteriaReducer = (state = initialState, action) => {\r\n \r\n switch (action.type) {\r\n case 'UPDATE_REPORT_CRITERIA':\r\n let reportType = action.reportType;\r\n state[reportType] = action.reportCriteria;\r\n return state;\r\n case 'RESET_REPORT_CRITERIA':\r\n state[action.componentName] = {};\r\n return state;\r\n case 'LOGOUT_USER':\r\n return {\r\n statementReport: {},\r\n auditAccountsReport: {},\r\n auditUsersReport: {},\r\n accountTypeReport: {}\r\n };\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default reportCriteriaReducer;\r\n\r\n\r\n\r\n\r\n","const initialState = {\r\n searchByAddress: null,\r\n searchByBookAndPage: null,\r\n searchByDate: null,\r\n searchByDocumentNumber: null,\r\n searchByGrantorGranteeBook: null,\r\n searchByLegalDescription: null,\r\n searchByName: null,\r\n searchByParcelId: null,\r\n searchByPlat: null,\r\n searchByTaxLien: null,\r\n searchByTorrensCertificate: null,\r\n searchByTorrensText: null,\r\n searchByTractBookId: null,\r\n searchByTractBookLegal: null,\r\n searchByTractIndexNMI: null\r\n}\r\n\r\nconst searchCriteriaReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'UPDATE_SEARCH_CRITERIA':\r\n let type = action.newHistory.type;\r\n state[type] = action.newHistory.displayCriteria;\r\n return state;\r\n case 'RESET_SEARCH_CRITERIA':\r\n state[action.componentName] = null;\r\n return state;\r\n case 'LOGOUT_USER':\r\n return {\r\n searchByAddress: null,\r\n searchByBookAndPage: null,\r\n searchByDate: null,\r\n searchByDocumentNumber: null,\r\n searchByGrantorGranteeBook: null,\r\n searchByLegalDescription: null,\r\n searchByName: null,\r\n searchByParcelId: null,\r\n searchByPlat: null,\r\n searchByTaxLien: null,\r\n searchByTorrensCertificate: null,\r\n searchByTorrensText: null,\r\n searchByTractBookId: null,\r\n searchByTractBookLegal: null,\r\n searchByTractIndexNMI: null\r\n };\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default searchCriteriaReducer;\r\n","const initialState = {\r\n \"searchHistoryList\": []\r\n};\r\n\r\nconst searchHistoryReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'UPDATE_SEARCH_HISTORY':\r\n return action.historyResults;\r\n case 'LOGOUT_USER':\r\n return {\r\n \"searchHistoryList\": []\r\n };\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default searchHistoryReducer;","\r\nconst initialState = 0;\r\n\r\nconst searchDetailsReducer = (state = initialState, action) => {\r\n \r\n if (action.type === 'DISPLAY_DETAILS') {\r\n return action.id;\r\n }\r\n\r\n if (action.type === 'UPDATE_SEARCH_RESULTS' || action.type === 'UPDATE_PAGINATED_SEARCH_RESULTS' || action.type === 'APPLY_SEARCH_RESULTS_FILTER') {\r\n return 0;\r\n }\r\n\r\n if (action.type === 'RESET_SEARCH_DETAILS') {\r\n return 0;\r\n }\r\n \r\n return state;\r\n};\r\nexport default searchDetailsReducer;","\r\nconst initialState = 0;\r\n\r\nconst searchDetailsGrantorGranteeBookReducer = (state = initialState, action) => {\r\n \r\n if (action.type === 'DISPLAY_GRANTOR_GRANTEE_BOOK_SEARCH_DETAILS') {\r\n return action.id;\r\n }\r\n\r\n if (action.type === 'UPDATE_SEARCH_RESULTS') {\r\n return 0;\r\n }\r\n\r\n if (action.type === 'RESET_SEARCH_DETAILS') {\r\n return 0;\r\n }\r\n \r\n return state;\r\n};\r\nexport default searchDetailsGrantorGranteeBookReducer;","\r\nconst initialState = 0;\r\n\r\nconst searchDetailsTaxLienReducer = (state = initialState, action) => {\r\n \r\n if (action.type === 'DISPLAY_TAX_LIEN_SEARCH_DETAILS') {\r\n return action.id;\r\n }\r\n\r\n if (action.type === 'UPDATE_SEARCH_RESULTS') {\r\n return 0;\r\n }\r\n\r\n if (action.type === 'RESET_SEARCH_DETAILS') {\r\n return 0;\r\n }\r\n \r\n return state;\r\n};\r\nexport default searchDetailsTaxLienReducer;","\r\nconst initialState = 0;\r\n\r\nconst searchDetailsTorrensCertificateReducer = (state = initialState, action) => {\r\n \r\n if (action.type === 'DISPLAY_TORRENS_CERTIFICATE_SEARCH_DETAILS') {\r\n return action.id;\r\n }\r\n\r\n if (action.type === 'UPDATE_SEARCH_RESULTS') {\r\n return 0;\r\n }\r\n\r\n if (action.type === 'RESET_SEARCH_DETAILS') {\r\n return 0;\r\n }\r\n \r\n return state;\r\n};\r\nexport default searchDetailsTorrensCertificateReducer;","\r\nconst initialState = 0;\r\n\r\nconst searchDetailsTractBookReducer = (state = initialState, action) => {\r\n \r\n if (action.type === 'DISPLAY_TRACT_BOOK_SEARCH_DETAILS') {\r\n return action.id;\r\n }\r\n\r\n if (action.type === 'UPDATE_SEARCH_RESULTS') {\r\n return 0;\r\n }\r\n\r\n if (action.type === 'RESET_SEARCH_DETAILS') {\r\n return 0;\r\n }\r\n \r\n return state;\r\n};\r\nexport default searchDetailsTractBookReducer;","const initialState = 1;\r\n\r\nconst searchDetailsGrantorGranteePaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_DETAILS_GRANTORS_GRANTEES_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1;\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchDetailsGrantorGranteePaginationReducer;","const initialState = 1;\r\n\r\nconst searchDetailsLegalDescriptionsPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_DETAILS_LEGAL_DESCRIPTIONS_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1;\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchDetailsLegalDescriptionsPaginationReducer;","const initialState = 1;\r\n\r\nconst searchDetailsReferenceDocumentsPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_DETAILS_REFERENCE_DOCUMENTS_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1; \r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchDetailsReferenceDocumentsPaginationReducer;","const initialState = 1;\r\n\r\nconst searchDetailsTorrensCertificatesPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_DETAILS_TORRENS_CERTIFICATES_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1; \r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchDetailsTorrensCertificatesPaginationReducer;","const initialState = 1;\r\n\r\nconst searchDetailsTaxpayersPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_DETAILS_TAXPAYERS_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1; \r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\n\r\nexport default searchDetailsTaxpayersPaginationReducer;","const initialState = 1;\r\n\r\nconst searchDetailsReleasesPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_DETAILS_RELEASES_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1; \r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\n\r\nexport default searchDetailsReleasesPaginationReducer;","const initialState = 1;\r\n\r\nconst searchDetailsRevisionsPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_DETAILS_REVISIONS_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1; \r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\n\r\nexport default searchDetailsRevisionsPaginationReducer;","const initialState = null;\r\n\r\nconst seachSequenceStartedReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'RESET_SEARCH_SEQUENCE':\r\n return initialState;\r\n case 'START_SEARCH_SEQUENCE':\r\n return action.search;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default seachSequenceStartedReducer;","const initialState = false;\r\n\r\nconst searchSequenceRewindReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'REWIND_SEARCH_SEQUENCE':\r\n return true;\r\n case 'RESET_REWIND_SEARCH_SEQUENCE':\r\n return false;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default searchSequenceRewindReducer;","const initialState = 0;\r\n\r\nconst searchResultsTableSelectedRowReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SEARACH_SEARCH_SEQUENCE_DOCUMENT':\r\n return initialState;\r\n case 'SELECT_TABLE_ROW':\r\n return action.id;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default searchResultsTableSelectedRowReducer;","const searchResultsFilterAppliedFilter = (state = false, action) => {\r\n if (action.type === \"APPLY_SEARCH_RESULTS_FILTER\") {\r\n state = action.applyFilter;\r\n } else if (action.type === 'UPDATE_SEARCH_RESULTS' || action.type === 'LOGOUT_USER') {\r\n state = false;\r\n }\r\n return state;\r\n}\r\n\r\nexport default searchResultsFilterAppliedFilter;","const initialState = { \r\n \"timestamp\":0,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[]\r\n};\r\n\r\nconst searchResultsReducer = (state = initialState, action) => {\r\n\r\n switch (action.type) {\r\n case 'SHOW_FILTERED_SEARCH_RESULTS':\r\n return action.searchResults;\r\n case 'UPDATE_SEARCH_RESULTS':\r\n case 'UPDATE_PAGINATED_SEARCH_RESULTS':\r\n return action.searchResults;\r\n case 'UPDATE_TABLE_BATCH_RESULTS':\r\n let object = state;\r\n // Make sure the batch of results coming in belongs to the current results set by checking the timestamps.\r\n let timestamp = action.searchResults.timestamp;\r\n if (object.timestamp === timestamp) {\r\n let array = object.searchResultList;\r\n let batch = action.searchResults.batch;\r\n let beginningIndex = (batch - 1) * 25;\r\n Array.prototype.splice.apply(array, [beginningIndex, action.searchResults.searchResultList.length].concat(action.searchResults.searchResultList));\r\n object.searchResultList = array;\r\n }\r\n return object;\r\n case 'LOGOUT_USER':\r\n return {\r\n \"timestamp\":0,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[] \r\n }\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchResultsReducer;","const initialState = {sortKey: 'docNumber', sortDirection: 'ASC'};\r\n\r\nconst searchResultsSortReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_SEARCH_RESULTS_SORT':\r\n return action.sort;\r\n case 'LOGOUT_USER':\r\n return {sortKey: 'docNumber', sortDirection: 'ASC'};\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchResultsSortReducer;","const initialState = false;\r\n\r\nconst searchResultsTableLoadingReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_TABLE_LOADING':\r\n return action.tableLoading;\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchResultsTableLoadingReducer;","const initialState = { \r\n \"timestamp\":0,\r\n \"batch\":1,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[]\r\n};\r\n\r\nconst searchResultsFilterReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'FILTER_DOCUMENT_ID':\r\n const document = action.document; \r\n \r\n let index = -1;\r\n for (let i = 0; i < state[\"searchResultList\"].length; i++) {\r\n if (document.docId == state.searchResultList[i].docId) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (index > -1) { // if found, remove the document\r\n state.searchResultList.splice(index, 1); \r\n state.totalRecordCount -= 1\r\n } else if (state.totalRecordCount < 100) { // if not found, insert the document\r\n state.searchResultList.push(document);\r\n if (action.sortKey === 'docNumber') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.docNumber > document2.docNumber) ? 1 : ((document2.docNumber > document1.docNumber) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.docNumber > document1.docNumber) ? 1 : ((document1.docNumber > document2.docNumber) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'book') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.book > document2.book) ? 1 : ((document2.book > document1.book) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.book > document1.book) ? 1 : ((document1.book > document2.book) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'instrument') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.instrumentCode > document2.instrumentCode) ? 1 : ((document2.instrumentCode > document1.instrumentCode) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.instrumentCode > document1.instrumentCode) ? 1 : ((document1.instrumentCode > document2.instrumentCode) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'recordedDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.recordedDateComparing > document2.recordedDateComparing) ? 1 : ((document2.recordedDateComparing > document1.recordedDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.recordedDateComparing > document1.recordedDateComparing) ? 1 : ((document1.recordedDateComparing > document2.recordedDateComparing) ? -1 : 0))\r\n }\r\n }\r\n state.totalRecordCount += 1\r\n } \r\n state.timestamp += 1;\r\n return state;\r\n \r\n case 'SORT_FILTERED_DOCUMENTS':\r\n if (action.sortKey === 'docNumber') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.docNumber > document2.docNumber) ? 1 : ((document2.docNumber > document1.docNumber) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.docNumber > document1.docNumber) ? 1 : ((document1.docNumber > document2.docNumber) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'book') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.book > document2.book) ? 1 : ((document2.book > document1.book) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.book > document1.book) ? 1 : ((document1.book > document2.book) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'instrument') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.instrumentCode > document2.instrumentCode) ? 1 : ((document2.instrumentCode > document1.instrumentCode) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.instrumentCode > document1.instrumentCode) ? 1 : ((document1.instrumentCode > document2.instrumentCode) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'recordedDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.recordedDateComparing > document2.recordedDateComparing) ? 1 : ((document2.recordedDateComparing > document1.recordedDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.recordedDateComparing > document1.recordedDateComparing) ? 1 : ((document1.recordedDateComparing > document2.recordedDateComparing) ? -1 : 0))\r\n }\r\n }\r\n return state;\r\n \r\n case 'UPDATE_SEARCH_RESULTS': \r\n case 'LOGOUT_USER':\r\n return {\r\n \"timestamp\":0,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[] \r\n }\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchResultsFilterReducer;","const initialState = { \r\n \"timestamp\":0,\r\n \"batch\":1,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[]\r\n};\r\n\r\nconst searchResultsFilterGrantorGranteeBookReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'FILTER_GRANTOR_GRANTEE_BOOK_ID':\r\n const document = action.document; \r\n let index = -1;\r\n for (let i = 0; i < state[\"searchResultList\"].length; i++) {\r\n if (document.id == state.searchResultList[i].id) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n \r\n if (index > -1) { // if found, remove the document\r\n state.searchResultList.splice(index, 1); \r\n state.totalRecordCount -= 1\r\n } else if (state.totalRecordCount < 100) { // if not found, insert the document\r\n state.searchResultList.push(document);\r\n if (action.sortKey === 'id') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.id > document2.id) ? 1 : ((document2.id > document1.id) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.id > document1.id) ? 1 : ((document1.id > document2.id) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'fromName') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.fromName > document2.fromName) ? 1 : ((document2.fromName > document1.fromName) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.fromName > document1.fromName) ? 1 : ((document1.fromName > document2.fromName) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'fromDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.fromDateComparing > document2.fromDateComparing) ? 1 : ((document2.fromDateComparing > document1.fromDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.fromDateComparing > document1.fromDateComparing) ? 1 : ((document1.fromDateComparing > document2.fromDateComparing) ? -1 : 0))\r\n }\r\n }\r\n state.totalRecordCount += 1\r\n } \r\n state.timestamp += 1;\r\n return state;\r\n \r\n case 'SORT_FILTERED_GRANTOR_GRANTEE_BOOK':\r\n if (action.sortKey === 'id') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.id > document2.id) ? 1 : ((document2.id > document1.id) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.id > document1.id) ? 1 : ((document1.id > document2.id) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'fromName') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.fromName > document2.fromName) ? 1 : ((document2.fromName > document1.fromName) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.fromName > document1.fromName) ? 1 : ((document1.fromName > document2.fromName) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'fromDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.fromDateComparing > document2.fromDateComparing) ? 1 : ((document2.fromDateComparing > document1.fromDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.fromDateComparing > document1.fromDateComparing) ? 1 : ((document1.fromDateComparing > document2.fromDateComparing) ? -1 : 0))\r\n }\r\n }\r\n return state;\r\n \r\n case 'UPDATE_SEARCH_RESULTS': \r\n case 'LOGOUT_USER':\r\n return {\r\n \"timestamp\":0,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[] \r\n }\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchResultsFilterGrantorGranteeBookReducer;","const initialState = { \r\n \"timestamp\":0,\r\n \"batch\":1,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[]\r\n};\r\n\r\nconst searchResultsFilterTaxLiensReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'FILTER_TAX_LIEN_ID':\r\n const document = action.document; \r\n let index = -1;\r\n for (let i = 0; i < state[\"searchResultList\"].length; i++) {\r\n if (document.docId == state.searchResultList[i].docId) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (index > -1) { // if found, remove the document\r\n state.searchResultList.splice(index, 1); \r\n state.totalRecordCount -= 1\r\n } else if (state.totalRecordCount < 100) { // if not found, insert the document\r\n state.searchResultList.push(document);\r\n if (action.sortKey === 'docNumber') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.docNumber > document2.docNumber) ? 1 : ((document2.docNumber > document1.docNumber) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.docNumber > document1.docNumber) ? 1 : ((document1.docNumber > document2.docNumber) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'recordedDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.recordedDateComparing > document2.recordedDateComparing) ? 1 : ((document2.recordedDateComparing > document1.recordedDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.recordedDateComparing > document1.recordedDateComparing) ? 1 : ((document1.recordedDateComparing > document2.recordedDateComparing) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'lienDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.lienDateComparing > document2.lienDateComparing) ? 1 : ((document2.lienDateComparing > document1.lienDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.lienDateComparing > document1.lienDateComparing) ? 1 : ((document1.lienDateComparing > document2.lienDateComparing) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'lienNumber') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.lienNumber > document2.lienNumber) ? 1 : ((document2.lienNumber > document1.lienNumber) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.lienNumber > document1.lienNumber) ? 1 : ((document1.lienNumber > document2.lienNumber) ? -1 : 0))\r\n }\r\n }\r\n state.totalRecordCount += 1\r\n } \r\n state.timestamp += 1;\r\n return state;\r\n \r\n case 'SORT_FILTERED_TAX_LIENS':\r\n if (action.sortKey === 'docNumber') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.docNumber > document2.docNumber) ? 1 : ((document2.docNumber > document1.docNumber) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.docNumber > document1.docNumber) ? 1 : ((document1.docNumber > document2.docNumber) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'recordedDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.recordedDateComparing > document2.recordedDateComparing) ? 1 : ((document2.recordedDateComparing > document1.recordedDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.recordedDateComparing > document1.recordedDateComparing) ? 1 : ((document1.recordedDateComparing > document2.recordedDateComparing) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'lienDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.lienDateComparing > document2.lienDateComparing) ? 1 : ((document2.lienDateComparing > document1.lienDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.lienDateComparing > document1.lienDateComparing) ? 1 : ((document1.lienDateComparing > document2.lienDateComparing) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'lienNumber') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.lienNumber > document2.lienNumber) ? 1 : ((document2.lienNumber > document1.lienNumber) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.lienNumber > document1.lienNumber) ? 1 : ((document1.lienNumber > document2.lienNumber) ? -1 : 0))\r\n }\r\n }\r\n return state;\r\n \r\n case 'UPDATE_SEARCH_RESULTS': \r\n case 'LOGOUT_USER':\r\n return {\r\n \"timestamp\":0,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[] \r\n }\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchResultsFilterTaxLiensReducer;","const initialState = { \r\n \"timestamp\":0,\r\n \"batch\":1,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[]\r\n};\r\n\r\nconst searchResultsFilterTorrensReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'FILTER_TORRENS_ID':\r\n const document = action.document; \r\n \r\n let index = -1;\r\n for (let i = 0; i < state[\"searchResultList\"].length; i++) {\r\n if (document.id == state.searchResultList[i].id) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (index > -1) { // if found, remove the document\r\n state.searchResultList.splice(index, 1); \r\n state.totalRecordCount -= 1\r\n } else if (state.totalRecordCount < 100) { // if not found, insert the document\r\n state.searchResultList.push(document);\r\n if (action.sortKey === 'book') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.book > document2.book) ? 1 : ((document2.book > document1.book) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.book > document1.book) ? 1 : ((document1.book > document2.book) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'certificateNumber') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.certificateNumber > document2.certificateNumber) ? 1 : ((document2.certificateNumber > document1.certificateNumber) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.certificateNumber > document1.certificateNumber) ? 1 : ((document1.certificateNumber > document2.certificateNumber) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'certifiedDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.certifiedDateComparing > document2.certifiedDateComparing) ? 1 : ((document2.certifiedDateComparing > document1.certifiedDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.certifiedDateComparing > document1.certifiedDateComparing) ? 1 : ((document1.certifiedDateComparing > document2.certifiedDateComparing) ? -1 : 0))\r\n }\r\n }\r\n state.totalRecordCount += 1\r\n } \r\n state.timestamp += 1;\r\n return state;\r\n \r\n case 'SORT_FILTERED_TORRENS':\r\n if (action.sortKey === 'book') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.book > document2.book) ? 1 : ((document2.book > document1.book) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.book > document1.book) ? 1 : ((document1.book > document2.book) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'certificateNumber') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.certificateNumber > document2.certificateNumber) ? 1 : ((document2.certificateNumber > document1.certificateNumber) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.certificateNumber > document1.certificateNumber) ? 1 : ((document1.certificateNumber > document2.certificateNumber) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'certifiedDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.certifiedDateComparing > document2.certifiedDateComparing) ? 1 : ((document2.certifiedDateComparing > document1.certifiedDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.certifiedDateComparing > document1.certifiedDateComparing) ? 1 : ((document1.certifiedDateComparing > document2.certifiedDateComparing) ? -1 : 0))\r\n }\r\n }\r\n return state;\r\n \r\n case 'UPDATE_SEARCH_RESULTS': \r\n case 'LOGOUT_USER':\r\n return {\r\n \"timestamp\":0,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[] \r\n }\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchResultsFilterTorrensReducer;","const initialState = { \r\n \"timestamp\":0,\r\n \"batch\":1,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[]\r\n};\r\n\r\nconst searchResultsFilterTractBookReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'FILTER_TRACT_BOOK_ID':\r\n const document = action.document; \r\n let index = -1;\r\n for (let i = 0; i < state[\"searchResultList\"].length; i++) {\r\n if (document.docId == state.searchResultList[i].docId) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (index > -1) { // if found, remove the document\r\n state.searchResultList.splice(index, 1); \r\n state.totalRecordCount -= 1\r\n } else if (state.totalRecordCount < 100) { // if not found, insert the document\r\n state.searchResultList.push(document);\r\n if (action.sortKey === 'docNumber') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.docId > document2.docId) ? 1 : ((document2.docId > document1.docId) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.docId > document1.docId) ? 1 : ((document1.docId > document2.docId) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'recordedDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.recordedDateComparing > document2.recordedDateComparing) ? 1 : ((document2.recordedDateComparing > document1.recordedDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.recordedDateComparing > document1.recordedDateComparing) ? 1 : ((document1.recordedDateComparing > document2.recordedDateComparing) ? -1 : 0))\r\n }\r\n }\r\n state.totalRecordCount += 1\r\n } \r\n state.timestamp += 1;\r\n return state;\r\n \r\n case 'SORT_FILTERED_TRACT_BOOK':\r\n if (action.sortKey === 'docNumber') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.docId > document2.docId) ? 1 : ((document2.docId > document1.docId) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.docId > document1.docId) ? 1 : ((document1.docId > document2.docId) ? -1 : 0))\r\n }\r\n } else if (action.sortKey === 'recordedDate') {\r\n if (action.sortDirection === 'ASC') {\r\n state.searchResultList.sort((document1, document2) => (document1.recordedDateComparing > document2.recordedDateComparing) ? 1 : ((document2.recordedDateComparing > document1.recordedDateComparing) ? -1 : 0))\r\n } else {\r\n state.searchResultList.sort((document1, document2) => (document2.recordedDateComparing > document1.recordedDateComparing) ? 1 : ((document1.recordedDateComparing > document2.recordedDateComparing) ? -1 : 0))\r\n }\r\n }\r\n return state;\r\n \r\n case 'UPDATE_SEARCH_RESULTS': \r\n case 'LOGOUT_USER':\r\n return {\r\n \"timestamp\":0,\r\n \"totalRecordCount\":0,\r\n \"currentRecordCount\":0,\r\n \"searchResultList\":[] \r\n }\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchResultsFilterTractBookReducer;","const initialState = new Set();\r\n\r\nconst searchResultsVisitedReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'VISITED':\r\n const id = action.id; \r\n if (state instanceof Set !== true) {\r\n state = new Set();\r\n }\r\n state.add(id); \r\n return state;\r\n case 'RESET_READ':\r\n case 'UPDATE_SEARCH_RESULTS': \r\n case 'LOGOUT_USER':\r\n return new Set();\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchResultsVisitedReducer;","const searchResultsVisitedAppliedReducer = (state = false, action) => {\r\n\r\n if (action.type === \"VISITED\") {\r\n state = true;\r\n } else if (action.type === 'RESET_READ' || action.type === 'UPDATE_SEARCH_RESULTS' || action.type === 'LOGOUT_USER') {\r\n state = false;\r\n } \r\n return state;\r\n}\r\n\r\nexport default searchResultsVisitedAppliedReducer;","const initialState = { \r\n includeInactive: false,\r\n\tfilterText: ''\r\n}\r\n\r\nconst accountListFiltersReducer = (state = initialState, action) => {\r\n\r\n switch (action.type) {\r\n case 'SET_ACCOUNT_LIST_FILTERS':\r\n return {\r\n ...state,\r\n statusType: action.filters.statusType,\r\n filterText: action.filters.filterText\r\n }\r\n case 'LOGOUT_USER':\r\n return {\r\n statusType: 'ALL',\r\n filterText: ''\r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};\r\nexport default accountListFiltersReducer;","const initialState = { \r\n statusType: 'ALL',\r\n\tfilterText: '',\r\n accountId: '',\r\n accountName: ''\r\n}\r\n\r\nconst userListFiltersReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_USER_LIST_FILTERS':\r\n return {\r\n ...state,\r\n statusType: action.filters.statusType,\r\n filterText: action.filters.filterText,\r\n accountId: action.filters.accountId\r\n }\r\n case 'SET_USER_LIST_ACCOUNT_FILTER':\r\n return {\r\n ...state,\r\n accountId: action.accountFilter.accountId,\r\n accountName: action.accountFilter.accountName\r\n }\r\n case 'LOGOUT_USER':\r\n return {\r\n statusType: 'ALL',\r\n filterText: ''\r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};\r\nexport default userListFiltersReducer;","const initialState = 1;\r\n\r\nconst accountsPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_ACCOUNTS_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1;\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default accountsPaginationReducer;","const initialState = 1;\r\n\r\nconst accountSelectionListPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_ACCOUNT_SELECTION_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1;\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default accountSelectionListPaginationReducer;","const initialState = 1;\r\n\r\nconst platSelectionListPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_PLAT_SELECTION_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1;\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default platSelectionListPaginationReducer;","const initialState = 1;\r\n\r\nconst searchResultsPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_SEARCH_RESULTS_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1;\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchResultsPaginationReducer;","const initialState = [];\r\n\r\nconst searchResultsPageVisitedReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_SEARCH_RESULTS_PAGE':\r\n state.push(action.pageNumber);\r\n state.sort();\r\n return [...new Set(state)];\r\n case 'UPDATE_SEARCH_HISTORY':\r\n return [1];\r\n case 'SET_SELECTED_SEARCH_RESULTS_SORT':\r\n return [];\r\n case 'LOGOUT_USER':\r\n return [];\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default searchResultsPageVisitedReducer;","const initialState = 1;\r\n\r\nconst userSelectionListPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_USER_SELECTION_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1;\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default userSelectionListPaginationReducer;","const initialState = 1;\r\n\r\nconst usersPaginationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_USERS_PAGE':\r\n return action.pageNumber;\r\n case 'LOGOUT_USER':\r\n return 1;\r\n default:\r\n break;\r\n }\r\n return state;\r\n};\r\nexport default usersPaginationReducer;","const searchTypeReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_SEARCH_TYPE':\r\n return { selectedSearchType: action.selectedSearchType }\r\n default:\r\n return state;\r\n }\r\n \r\n};\r\nexport default searchTypeReducer;","import { ReportStatementKey } from \"../actions/reportActions\";\r\n\r\nconst initialState = { \r\n selectedReportType : ReportStatementKey\r\n}\r\n\r\nconst reportTypeReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_REPORT_TYPE':\r\n return {\r\n selectedReportType: action.selectedReportType \r\n }\r\n default:\r\n return state;\r\n }\r\n \r\n};\r\nexport default reportTypeReducer;","import { HomeNotableDatesControlPanelKey } from \"../actions/controlPanelActions\";\r\n\r\nconst initialState = { \r\n selectedControlPanelType : HomeNotableDatesControlPanelKey\r\n}\r\n\r\nconst controlPanelTypeReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_CONTROL_PANEL_TYPE':\r\n return {\r\n selectedControlPanelType: action.selectedControlPanelType \r\n }\r\n default:\r\n return state;\r\n }\r\n \r\n};\r\nexport default controlPanelTypeReducer;","const sideNavigationReducer = (state = true, action) => {\r\n if (action.type === \"TOGGLE_SIDE_NAVIGATION\") {\r\n if (state === true)\r\n state = false;\r\n else\r\n state = true;\r\n } else if (action.type === 'LOGOUT_USER') {\r\n state = true;\r\n }\r\n return state;\r\n}\r\n\r\nexport default sideNavigationReducer;","\r\n\r\n\r\nconst serverProductVersionsReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case 'SERVER_PRODUCT_VERSIONS':\r\n return action.result;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default serverProductVersionsReducer;","const notableDatesReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case 'LOAD_NOTABLE_DATES':\r\n return action.result;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport default notableDatesReducer;","import { combineReducers } from \"redux\";\r\n\r\nimport imageContentReducer from \"./imageContentReducer\"; // ??\r\nimport countyConfigReducer from \"./countyConfigReducer\"; // ??\r\n\r\n// Object Types\r\nimport auditLogTypesAllReducer from \"./auditLogTypesAllReducer\";\r\nimport auditTransactionTypesAllReducer from \"./auditTransactionTypesAllReducer\";\r\nimport auditLogTypesReducer from \"./auditLogTypesReducer\";\r\nimport auditTransactionTypesReducer from \"./auditTransactionTypesReducer\";\r\nimport accountTypesReducer from \"./accountTypesReducer\";\r\nimport bookTypesReducer from \"./bookTypesReducer\";\r\nimport documentTypesReducer from \"./documentTypesReducer\";\r\nimport documentTypesWithBlankReducer from \"./documentTypesWithBlankReducer\";\r\nimport instrumentCodesReducer from \"./instrumentCodesReducer\";\r\nimport instrumentCodesWithBlankReducer from \"./instrumentCodesWithBlankReducer\";\r\nimport instrumentGroupsReducer from \"./instrumentGroupsReducer\";\r\nimport otherLotCodesReducer from \"./otherLotCodesReducer\";\r\nimport paymentMethodTypesAllReducer from \"./paymentMethodTypesAllReducer\";\r\nimport paymentMethodTypesNonALaCarteReducer from \"./paymentMethodTypesNonALaCarteReducer\";\r\nimport platsReducer from \"./platsReducer\";\r\nimport platsByNumberReducer from \"./platsByNumberReducer\";\r\nimport platNamesReducer from \"./platNamesReducer\";\r\nimport platNumbersReducer from \"./platNumbersReducer\";\r\nimport userTypesReducer from \"./userTypesReducer\";\r\nimport dataSourceTypesReducer from \"./dataSourceTypesReducer\";\r\n\r\n// LL County Config\r\nimport landlinkConfigReducer from './landlinkConfigReducer';\r\n\r\n// LS County Config\r\nimport countyConfigBillingScheduleReducer from \"./countyConfigBillingScheduleReducer\";\r\nimport countyConfigFlatFeeReducer from \"./countyConfigFlatFeeReducer\";\r\nimport countyConfigFlatFeeOverrideUISettingsReducer from \"./countyConfigFlatFeeOverrideUISettingsReducer\";\r\nimport countyConfigReportsReducer from \"./countyConfigReportsReducer\"; \r\nimport countyConfigEfileReducer from \"./countyConfigEfileReducer\"; \r\nimport countyConfigEscrowReducer from \"./countyConfigEscrowReducer\"; \r\nimport countyConfigCreditCardExtraReducer from \"./countyConfigCreditCardExtraReducer\"; \r\nimport countyConfigLanguagesReducer from \"./countyConfigLanguagesReducer\"; \r\nimport countyConfigNotableDatesReducer from \"./countyConfigNotableDatesReducer\"; \r\nimport countyConfigSearchReducer from \"./countyConfigSearchReducer\"; \r\nimport countyConfigSearch2Reducer from \"./countyConfigSearch2Reducer\"; \r\nimport countyConfigCommonReducer from \"./countyConfigCommonReducer\";\r\nimport countyConfigUserAccessReducer from \"./countyConfigUserAccessReducer\";\r\nimport countyConfigLoginRegistrationReducer from \"./countyConfigLoginRegistrationReducer\";\r\n\r\n// As defined in LS Server product.propertes\r\nimport productPropertiesReducer from \"./productPropertiesReducer\";\r\n\r\n// LS Lockout\r\nimport countyConfigUserLockoutReducer from \"./countyConfigUserLockoutReducer\";\r\n\r\n// Current User\r\nimport currentUserReducer from \"./currentUserReducer\";\r\n\r\n// Criteria\r\nimport reportCriteriaReducer from \"./reportCriteriaReducer\";\r\nimport searchCriteriaReducer from \"./searchCriteriaReducer\";\r\n\r\n// History\r\nimport searchHistoryReducer from \"./searchHistoryReducer\";\r\n\r\n// Search Results and Details\r\nimport searchDetailsReducer from \"./searchDetailsReducer\";\r\nimport searchDetailsGrantorGranteeBookReducer from \"./searchDetailsGrantorGranteeBookReducer\";\r\nimport searchDetailsTaxLienReducer from \"./searchDetailsTaxLienReducer\";\r\nimport searchDetailsTorrensCertificateReducer from \"./searchDetailsTorrensCertificateReducer\";\r\nimport searchDetailsTractBookReducer from \"./searchDetailsTractBookReducer\";\r\n\r\nimport searchDetailsGrantorsGranteesPaginationReducer from './searchDetailsGrantorsGranteesPaginationReducer';\r\nimport searchDetailsLegalDescriptionsPaginationReducer from './searchDetailsLegalDescriptionsPaginationReducer';\r\nimport searchDetailsReferenceDocumentsPaginationReducer from './searchDetailsReferenceDocumentsPaginationReducer';\r\nimport searchDetailsTorrensCertificatesPaginationReducer from './searchDetailsTorrensCertificatesPaginationReducer'\r\nimport searchDetailsTaxpayersPaginationReducer from './searchDetailsTaxpayersPaginationReducer'\r\nimport searchDetailsReleasesPaginationReducer from './searchDetailsReleasesPaginationReducer'\r\nimport searchDetailsRevisionsPaginationReducer from './searchDetailsRevisionsPaginationReducer'\r\nimport searchSequenceStartedReducer from \"./searchSequenceStartedReducer\"\r\nimport searchSequenceRewindReducer from \"./searchSequenceRewindReducer\"\r\nimport searchResultsTableSelectedRowReducer from \"./searchResultsTableSelectedRowReducer\"\r\nimport searchResultsFilterAppliedFilter from './searchResultsFilterAppliedFilter'\r\n\r\nimport searchResultsReducer from \"./searchResultsReducer\"; \r\n\r\nimport searchResultsSortReducer from './searchResultsSortReducer';\r\n\r\nimport searchResultsTableLoadingReducer from './searchResultsTableLoadingReducer';\r\n\r\nimport searchResultsFilterReducer from './searchResultsFilterReducer';\r\nimport searchResultsFilterGrantorGranteeBookReducer from './searchResultsFilterGrantorGranteeBookReducer';\r\nimport searchResultsFilterTaxLiensReducer from './searchResultsFilterTaxLiensReducer';\r\nimport searchResultsFilterTorrensReducer from './searchResultsFilterTorrensReducer';\r\nimport searchResultsFilterTractBookReducer from './searchResultsFilterTractBookReducer';\r\n\r\nimport searchResultsVisitedReducer from './searchResultsVisitedReducer';\r\nimport searchResultsVisitedAppliedReducer from './searchResultsVisitedAppliedReducer';\r\n\r\n// Account and User Lists\r\nimport accountListFiltersReducer from './accountListFiltersReducer';\r\nimport userListFiltersReducer from './userListFiltersReducer';\r\n\r\n// Paginators\r\nimport accountsPaginationReducer from './accountsPaginationReducer';\r\nimport accountSelectionListPaginationReducer from './accountSelectionListPaginationReducer';\r\nimport platSelectionListPaginationReducer from './platSelectionListPaginationReducer'\r\nimport searchResultsPaginationReducer from './searchResultsPaginationReducer';\r\nimport searchResultsPageVisitedReducer from './searchResultsPageVisitedReducer';\r\nimport userSelectionListPaginationReducer from './userSelectionListPaginationReducer';\r\nimport usersPaginationReducer from './usersPaginationReducer';\r\n\r\n// Search page, Report page and Control Panel page selections\r\nimport searchTypeReducer from \"./searchTypeReducer\";\r\nimport reportTypeReducer from \"./reportTypeReducer\";\r\nimport controlPanelTypeReducer from \"./controlPanelTypeReducer\";\r\n\r\n// Side Navigation\r\nimport sideNavigationReducer from \"./sideNavigationReducer\";\r\n\r\n// Server Product Versions\r\nimport serverProductVersionsReducer from \"./serverProductVersionsReducer\";\r\n\r\n// Notable Dates\r\nimport notableDatesReducer from \"./notableDatesReducer\";\r\n\r\nconst appReducer = combineReducers({\r\n\r\n\tcountyConfigReducer, // ??\r\n\timageContentReducer, // ??\r\n\t\r\n\t// Object Types\r\n\tauditLogTypesReducer,\r\n\tauditLogTypesAllReducer,\r\n\tauditTransactionTypesReducer,\r\n\tauditTransactionTypesAllReducer,\r\n\taccountTypesReducer,\r\n\tbookTypesReducer,\r\n\tdocumentTypesReducer,\r\n\tdocumentTypesWithBlankReducer,\r\n\tinstrumentCodesReducer,\r\n\tinstrumentCodesWithBlankReducer,\r\n\tinstrumentGroupsReducer,\r\n\totherLotCodesReducer,\r\n\tpaymentMethodTypesAllReducer,\r\n\tpaymentMethodTypesNonALaCarteReducer,\r\n\tplatsReducer,\r\n\tplatsByNumberReducer,\r\n\tplatNamesReducer,\r\n\tplatNumbersReducer,\r\n\tuserTypesReducer,\r\n\tdataSourceTypesReducer,\r\n\r\n\t// LL County Config\r\n\tlandlinkConfigReducer,\r\n\t\r\n\t// LS Control Panel\r\n\tcountyConfigBillingScheduleReducer,\r\n\tcountyConfigCommonReducer,\r\n\tcountyConfigCreditCardExtraReducer,\r\n\tcountyConfigEfileReducer,\r\n\tcountyConfigEscrowReducer,\r\n\tcountyConfigFlatFeeReducer,\r\n\tcountyConfigFlatFeeOverrideUISettingsReducer,\r\n\tcountyConfigLanguagesReducer,\r\n\tcountyConfigNotableDatesReducer,\r\n\tcountyConfigSearchReducer,\r\n\tcountyConfigSearch2Reducer,\r\n\tcountyConfigReportsReducer,\r\n\tcountyConfigUserAccessReducer,\r\n\tcountyConfigLoginRegistrationReducer,\r\n\r\n\t// LS Server product.properties\r\n\tproductPropertiesReducer,\r\n\r\n\t// LS Lockout\r\n\tcountyConfigUserLockoutReducer,\r\n\r\n\t// Current User\r\n\tcurrentUserReducer,\r\n\r\n\t// Criteria\r\n\tsearchCriteriaReducer,\r\n\treportCriteriaReducer,\r\n\r\n\t// History\r\n\tsearchHistoryReducer,\r\n\r\n\t// Search Results and Details\r\n\tsearchDetailsReducer,\r\n\tsearchDetailsGrantorGranteeBookReducer,\r\n\tsearchDetailsTaxLienReducer,\r\n\tsearchDetailsTorrensCertificateReducer,\r\n\tsearchDetailsTractBookReducer,\r\n\tsearchDetailsGrantorsGranteesPaginationReducer,\r\n\tsearchDetailsLegalDescriptionsPaginationReducer,\r\n\tsearchDetailsReferenceDocumentsPaginationReducer,\r\n\tsearchDetailsTorrensCertificatesPaginationReducer,\r\n\tsearchDetailsTaxpayersPaginationReducer,\r\n\tsearchDetailsReleasesPaginationReducer,\r\n\tsearchDetailsRevisionsPaginationReducer,\r\n\tsearchResultsReducer,\r\n\tsearchResultsPaginationReducer,\r\n\tsearchResultsSortReducer,\r\n\tsearchResultsTableLoadingReducer,\r\n\tsearchSequenceStartedReducer,\r\n\tsearchResultsTableSelectedRowReducer,\r\n\tsearchSequenceRewindReducer,\r\n\r\n\tsearchResultsPageVisitedReducer,\r\n\r\n\tsearchResultsFilterReducer,\r\n\tsearchResultsFilterGrantorGranteeBookReducer,\r\n\tsearchResultsFilterTaxLiensReducer,\r\n\tsearchResultsFilterTorrensReducer,\r\n\tsearchResultsFilterTractBookReducer,\r\n\tsearchResultsFilterAppliedFilter,\r\n\r\n\tsearchResultsVisitedReducer,\r\n\tsearchResultsVisitedAppliedReducer,\r\n\r\n\t// Account and User Selectors\r\n\taccountListFiltersReducer,\r\n\tuserListFiltersReducer,\r\n\r\n\t// Account, Plat and User Lists\r\n\taccountsPaginationReducer,\r\n\taccountSelectionListPaginationReducer,\r\n\tplatSelectionListPaginationReducer,\r\n\tuserSelectionListPaginationReducer,\r\n\tusersPaginationReducer,\r\n\r\n\t// Search page, Report page and Control Panel page selections\r\n\tcontrolPanelTypeReducer,\r\n\treportTypeReducer,\r\n\tsearchTypeReducer,\r\n\r\n\t// Side Navigation\r\n\tsideNavigationReducer,\r\n\r\n\t// Server Product Versions\r\n\tserverProductVersionsReducer,\r\n\r\n\t// Notable Dates\r\n\tnotableDatesReducer\r\n\r\n});\r\n\r\nconst rootReducer = (state, action) => {\r\n\tif (action.type === 'USER_LOGOUT') { // LOGOUT_USER\r\n\t\treturn appReducer(undefined, action)\r\n\t}\r\n\treturn appReducer(state, action)\r\n}\r\n\r\nexport default rootReducer;","// 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://bit.ly/CRA-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\nexport function register(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://bit.ly/CRA-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, 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://bit.ly/CRA-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's 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, 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.then(registration => {\n registration.unregister();\n });\n }\n}\n","import axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport AjaxResponseHandler from \"../../utils/AjaxResponseHandler\"\r\n\r\nconst handleLandSharkConfigResults = (dispatch, results) => {\r\n results.namedContentResultList.forEach((result) => {\r\n dispatch({ type: result.name, results: result.baseContent });\r\n });\r\n};\r\n\r\nexport const getLandSharkConfig = () => async dispatch => {\r\n await axios.get(configData.LANDSHARK_SERVER_URL + \"helperdata/landshark\")\r\n .then(\r\n (response) => { handleLandSharkConfigResults(dispatch, response.data.content); },\r\n (error) => { console.log(error); }\r\n );\r\n};\r\n\r\nexport const getNotableDates = () => async dispatch => {\r\n await axios.get(configData.LANDSHARK_SERVER_URL + \"helperdata/notableDates\")\r\n .then(\r\n (response) => {dispatch({type: 'LOAD_NOTABLE_DATES' , result: response.data.content}) },\r\n (error) => { console.log(error); }\r\n );\r\n};\r\n\r\nexport const getServerProductVersions = () => async dispatch => {\r\n await axios.get(configData.LANDSHARK_SERVER_URL + \"helperdata/productVersions\")\r\n .then(\r\n (response) => {dispatch({type: 'SERVER_PRODUCT_VERSIONS' , result: response.data.content}) },\r\n (error) => { console.log(error); }\r\n );\r\n};\r\n\r\nconst handleLandSharkConfigCodeDescriptionResults = (dispatch, results) => {\r\n results.namedCodeDescriptionResultList.forEach((result) => {\r\n dispatch({ type: result.name, results: result.codeDescriptionResults })\r\n }\r\n );\r\n};\r\n\r\nexport const bootstrap = (afterFunction) => {\r\n let request = {};\r\n\r\n // Form the URL from the current page URL.\r\n console.log('bootstrapping');\r\n console.log(\"PUBLIC_URL [\" + window.trimin.PUBLIC_URL + \"]\");\r\n\r\n let url = window.trimin.PUBLIC_URL + \"/landsharkui/product.json\";\r\n\r\n console.log(\"loading configuration from \" + url);\r\n\r\n return (axios.get(url, request, { withCredentials: true })\r\n .then((response) => {\r\n const content = response.data;\r\n\r\n console.log(\"configuration:\");\r\n console.log(content);\r\n\r\n configData.COUNTY_DIRECTORY = content.COUNTY_DIRECTORY;\r\n configData.BROWSER_ROUTER_BASENAME = content.BROWSER_ROUTER_BASENAME;\r\n configData.LANDSHARK_SERVER_URL = content.LANDSHARK_SERVER_URL;\r\n configData.AUTHORIZE_PAYMENT_URL = content.AUTHORIZE_PAYMENT_URL;\r\n configData.AUTHORIZE_ACCEPTJS_URL = content.AUTHORIZE_ACCEPTJS_URL;\r\n \r\n\r\n console.log(\"final configuration\");\r\n console.log(configData);\r\n\r\n if (afterFunction) afterFunction();\r\n }, (error) => {\r\n AjaxResponseHandler.handleError(error, AjaxResponseHandler.consoleLogHandler);\r\n\r\n console.log(\"**********************************\");\r\n console.log(\"**** CANNOT LOAD CONFIGURATION ***\");\r\n console.log(\"**********************************\");\r\n\r\n if (afterFunction) afterFunction();\r\n })\r\n );\r\n}\r\n\r\nexport const getLandSharkCodeDescriptionConfig = () => async dispatch => {\r\n await axios.get(configData.LANDSHARK_SERVER_URL + \"helperdata/landsharkcodedescription\")\r\n .then(\r\n (response) => { handleLandSharkConfigCodeDescriptionResults(dispatch, response.data.content); },\r\n (error) => { console.log(error); }\r\n );\r\n};\r\n\r\nconst handleLandLinkConfigResults = (dispatch, results) => {\r\n results.namedCodeDescriptionResultList.forEach((result) => {\r\n\r\n if (result.name === 'LANDLINK_COUNTY_CONFIG') {\r\n // See the list in HelperDataCountyConfigServiceImpl.java in LandLink.\r\n dispatch({ type: result.name, results: result.codeDescriptionResults })\r\n // result.codeDescriptionResults.codeDescriptionResultList.forEach((countyConfigResult) => dispatch({ type: countyConfigResult.code, result: countyConfigResult }));\r\n } else if (result.name === 'LANDLINK_BOOK_TYPES' ||\r\n result.name === 'LANDLINK_DOCUMENT_TYPES' ||\r\n result.name === 'LANDLINK_DOCUMENT_TYPES_WITH_BLANKS' ||\r\n result.name === 'LANDLINK_INSTRUMENT_CODES' ||\r\n result.name === 'LANDLINK_INSTRUMENT_CODES_WITH_BLANKS' ||\r\n result.name === 'LANDLINK_INSTRUMENT_GROUPS' ||\r\n result.name === 'LANDLINK_OTHER_LOT_CODES' ||\r\n result.name === 'LANDLINK_PLATS' || result.name === 'LANDLINK_PLATS_SORTED_BY_NUMBER' || result.name === 'LANDLINK_PLAT_NAMES' || result.name === 'LANDLINK_PLAT_NUMBERS') {\r\n dispatch({ type: result.name, results: result.codeDescriptionResults })\r\n }\r\n }\r\n );\r\n};\r\n\r\nexport const getLandLinkConfig = () => async dispatch => {\r\n await axios.get(configData.LANDSHARK_SERVER_URL + \"helperdata/landlink\")\r\n .then(\r\n (response) => { handleLandLinkConfigResults(dispatch, response.data.content); },\r\n (error) => { console.log(error); }\r\n );\r\n};\r\n\r\nconst handlePlatResults = (dispatch, results) => {\r\n dispatch({ type: 'LOAD_PLAT_RESULTS', results });\r\n};\r\n\r\nexport const getPlatList = () => async dispatch => {\r\n await axios.get(configData.LANDSHARK_SERVER_URL + \"helperdata/plats\")\r\n .then(\r\n (response) => { handlePlatResults(dispatch, response.data.content); },\r\n (error) => { console.log(error); }\r\n );\r\n};\r\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport { Provider } from 'react-redux';\nimport store from \"./redux/store/index\";\n\nimport * as serviceWorker from './serviceWorker';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport packageJson from '../package.json';\n\nimport { bootstrap, getLandLinkConfig, getLandSharkConfig, getLandSharkCodeDescriptionConfig, getServerProductVersions, getNotableDates } from './redux/actions/helperActions'\n\n// This MUST come first.\nbootstrap( function() {\n console.log('bootstrap complete for homepage [' + (packageJson.homepage ? packageJson.homepage : '') +\n '] version [' + packageJson.version + ']');\n \n store.dispatch(getLandLinkConfig());\n store.dispatch(getLandSharkConfig());\n store.dispatch(getLandSharkCodeDescriptionConfig());\n store.dispatch(getServerProductVersions());\n store.dispatch(getNotableDates());\n \n ReactDOM.render(<Provider store={store}><App /></Provider>, document.getElementById('root'));\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://bit.ly/CRA-PWA\n serviceWorker.unregister();\n});\n\n","import winston from 'winston';\r\nimport configData from \"./config/config.json\";\r\n\r\nconst lsUrl = new URL(configData.LANDSHARK_SERVER_URL);\r\nexport const backendLogger = winston.createLogger({\r\n transports: [\r\n new winston.transports.Http({ host: lsUrl.hostname,\r\n port: lsUrl.port,\r\n path: lsUrl.pathname + 'logReact',\r\n ssl: lsUrl.protocol == \"https:\" ? true : false})\r\n ]\r\n});\r\n\r\n","import axios from \"axios\";\r\n\r\nimport configData from \"../../config/config.json\";\r\n\r\nexport const refreshUsageBalance = (userId) => async dispatch => {\r\n await axios.post(configData.LANDSHARK_SERVER_URL + \"currentUser/usageBalance\", userId, { withCredentials: true })\r\n .then((response) => {\r\n dispatch({ type: 'UPDATE_CURRENT_USER_USAGE_BALANCE', usageBalance: response.data.content.usageBalance });\r\n }, (error) => {\r\n alert(\"Cannot refresh usage balance\");\r\n // handleError(error, history);\r\n });\r\n};\r\n\r\nexport const refreshUsageBalanceFromContent = (content) => async dispatch => {\r\n dispatch({ type: 'UPDATE_CURRENT_USER_USAGE_BALANCE', usageBalance: content.usageBalance });\r\n};","// Usage from https://github.com/axios/axios#handling-errors\r\n// Should be invoked from the axios error function.\r\nclass AjaxError {\r\n // Pass the parameter from the error function.\r\n constructor(error) {\r\n this.error = error;\r\n }\r\n\r\n // Handle an error by notifying the user.\r\n // It's presumed an error has occurred.\r\n handleError = () => {\r\n let msg = this.getErrorMessage();\r\n\r\n alert(msg);\r\n console.log(msg);\r\n }\r\n\r\n // A message is always returned.\r\n getErrorMessage = () => {\r\n return 'Error: ' + this.getRawErrorMessage();\r\n }\r\n\r\n getRawErrorMessage = () => {\r\n let msg;\r\n\r\n if (this.error.response && this.error.response.data && this.error.response.data.message) {\r\n // The request was made and the server responded with a status code\r\n // that falls out of the range of 2xx\r\n msg = this.error.response.data.message;\r\n } else if (this.error.request) {\r\n // The request was made but no response was received\r\n // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\r\n // http.ClientRequest in node.js\r\n msg = 'An unexpected error 101 has occurred.';\r\n } else {\r\n msg = 'An unexpected error 102 has occurred.';\r\n }\r\n\r\n return msg;\r\n }\r\n\r\n toString = (obj) => {\r\n if (JSON.stringify) {\r\n return JSON.stringify(obj);\r\n } else {\r\n return obj;\r\n }\r\n }\r\n}\r\n\r\nexport default AjaxError;\r\n","import React, { Component } from \"react\"\r\nimport { connect } from \"react-redux\";\r\n\r\nimport PreviewWindow from \"../search/PreviewWindow\";\r\nimport ImageConfirmOrderWindow from \"../search/ImageConfirmOrderWindow\";\r\nimport EscrowAddonWindow from \"../search/EscrowAddonWindow\"\r\nimport FlatFeeAddon from \"../image/FlatFeeAddon\"\r\nimport CreditCardAuthWindow from \"../search/CreditCardAuthWindow\";\r\nimport CreditCardImmediateChargeWindow from \"../creditcard/CreditCardImmediateChargeWindow\";\r\nimport axios from \"axios\";\r\nimport configData from \"../../config/config.json\";\r\nimport Alert from '../common/modal/Alert'\r\nimport AjaxResult from \"../../utils/AjaxResult\";\r\nimport AjaxResponseHandler from \"../../utils/AjaxResponseHandler\"\r\n\r\nimport { LOADING_STATUES } from \"../constants/constants\";\r\nimport Loading from '../common/modal/Loading';\r\nimport { saveAs } from 'file-saver';\r\nimport { backendLogger } from \"../../logger.js\"\r\nimport { refreshUsageBalance, refreshUsageBalanceFromContent } from \"../../redux/actions/otherLandLinkActions\";\r\n\r\n// Child state actions.\r\nconst ACTION_SHOW = 'show';\r\nconst ACTION_UPDATE = '';\r\n\r\nconst ALERT_MESSAGE = 'MESSAGE';\r\nconst ALERT_WARNING = 'WARNING';\r\n\r\nconst PREFIX = 'Thumbnails: ';\r\n\r\nconst matchDispatchToProps = (dispatch) => {\r\n return { \r\n refreshUsageBalanceFromContent: (content) => dispatch(refreshUsageBalanceFromContent(content)),\r\n refreshUsageBalance: (userId) => dispatch(refreshUsageBalance(userId))\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n currentUserId: state.currentUserReducer.userId,\r\n };\r\n}\r\n\r\n// This class deals with displaying an image.\r\n// This starts off with the rendering of thumbnails and moves thru\r\n// the image window workflow in order to arrive at the final image.\r\n//\r\n// The current implementation assumes the component will come thru\r\n// as show=false and will be updated later.\r\n\r\n// Props:\r\n// - show: boolean if the window should show\r\n// - sourcedDocKey: the document key object\r\n// - instCode: the instrument code of the document\r\n// - complete(): notification that the component has completed\r\nclass Thumbnails extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.imageState = null;\r\n this.version = 0;\r\n\r\n this.state = {\r\n confirmOrderWindow: {\r\n show: false,\r\n feeSchedule: {\r\n alreadyPurchasedMessage: null,\r\n beginningBalance: { description: '', value: ''},\r\n endingBalance: { description: '', value: ''},\r\n insufficientBalance: false,\r\n insufficientBalanceMessage: null,\r\n multipleItemPurchase: null,\r\n purchaseMessage: null,\r\n noPurchasingOptionsAvailableMessage: null,\r\n singleItemPurchase: null\r\n },\r\n imageState: {\r\n purchaseOptions: {\r\n \r\n }\r\n }\r\n },\r\n escrowAddonWindow : this.createEscrowAddonWindowState(ACTION_UPDATE, null, false),\r\n flatFeeAddonWindow : this.createFlatFeeAddonWindowState(false),\r\n creditCardAuthWindow : this.createCreditCardAuthWindowState(ACTION_UPDATE, null, false),\r\n previewWindow : this.createPreviewWindowState(ACTION_UPDATE, null, false),\r\n\r\n alertWindow: {\r\n callback: null,\r\n message: '',\r\n show: false,\r\n type: ''\r\n },\r\n loadingStatus: \"\",\r\n authAndCaptureToken: '',\r\n showCreditCardEscrowRechargeWindow: false\r\n };\r\n }\r\n\r\n addShowLoading = (newState) => {\r\n newState.loadingStatus = LOADING_STATUES.LOADING;\r\n }\r\n\r\n showLoading = () => {\r\n if (this.state.loadingStatus === \"\") {\r\n this.setState({\r\n loadingStatus: LOADING_STATUES.LOADING\r\n })\r\n return true;\r\n } \r\n return false;\r\n }\r\n\r\n hideLoading = (message, status) => {\r\n this.setState({\r\n loadingStatus: \"\"\r\n })\r\n }\r\n\r\n loadThumbnails = () => {\r\n console.log(PREFIX + this.props.sourcedDocKey + ': loading thumbnails');\r\n this.setState({loadingStatus: LOADING_STATUES.LOADING });\r\n\r\n let request = { \r\n sourcedDocKey: this.props.sourcedDocKey\r\n };\r\n \r\n let me = this;\r\n let newState = {loadingStatus: ''};\r\n\r\n (async () => {\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"imaging/getThumbnails\", request, { withCredentials: true })\r\n .then((response) => {\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n me.setState(newState, function() {\r\n me.props.complete();\r\n });\r\n } else {\r\n // Show previews\r\n newState.previewWindow = me.createPreviewWindowState(ACTION_UPDATE, result.content(), true);\r\n me.setState(newState);\r\n }\r\n }, (error) => {\r\n AjaxResponseHandler.handleError(error, me.showAlertText, null);\r\n me.setState(newState, function() {\r\n me.props.complete();\r\n });\r\n })\r\n })();\r\n }\r\n\r\n componentDidMount = () => {\r\n if (!this.props.show) return;\r\n this.loadThumbnails();\r\n }\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n // We get here if the IMAGE button is clicked or an internal state change\r\n // occurs.\r\n if (!this.props.show) return;\r\n \r\n // Reload state if hide->show or showing+dockey changed\r\n if (!prevProps.show || (this.props.sourcedDocKey.docKey !== prevProps.sourcedDocKey.docKey)) {\r\n this.loadThumbnails();\r\n }\r\n }\r\n\r\n cancelImageState = (func) => {\r\n if (!this.imageState) return;\r\n\r\n let me = this;\r\n let request = this.createImageStateReference();\r\n \r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"imaging/cancelImageState\", request, { withCredentials: true })\r\n .then((response) => {\r\n \r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n me.imageState = null;\r\n func();\r\n }\r\n }, (error) => {\r\n AjaxResponseHandler.handleError(error, me.showAlertText, null);\r\n me.hideLoading();\r\n })\r\n })();\r\n }\r\n\r\n confirmOrderWindowCallbackBackClicked = (state) => {\r\n // We want the preview window to show with the same state.\r\n let me = this;\r\n\r\n function after() {\r\n let newState = {};\r\n \r\n me.addShowConfirmOrderWindow(newState, false);\r\n me.addShowPreviewWindow(newState, true);\r\n me.updateState(newState);\r\n }\r\n\r\n this.cancelImageState(after);\r\n }\r\n\r\n confirmOrderWindowCallbackCloseClicked = (state) => {\r\n // Close the confirm window.\r\n let me = this;\r\n\r\n function after() {\r\n let newState = {};\r\n \r\n me.addShowConfirmOrderWindow(newState, false);\r\n me.setState(newState, function() {\r\n this.props.complete(); \r\n });\r\n }\r\n\r\n this.cancelImageState(after);\r\n }\r\n\r\n confirmOrderWindowCallbackBuyOptionsClicked = (state) => {\r\n // image window ask for buy options\r\n // 'state' param isn't used.\r\n \r\n if (this.imageState.purchaseOptions.flatFeeOptions) {\r\n let newState = {};\r\n \r\n this.addShowConfirmOrderWindow(newState, false);\r\n newState.flatFeeAddonWindow = this.createFlatFeeAddonWindowState(true);\r\n this.updateState(newState);\r\n\r\n // The state has been updated by the previous line.\r\n } else if (this.imageState.purchaseOptions.escrowOptions) {\r\n let newState = {};\r\n let content = {\r\n imageState: this.imageState\r\n };\r\n \r\n this.addShowConfirmOrderWindow(newState, false);\r\n newState.escrowAddonWindow = this.createEscrowAddonWindowState(ACTION_UPDATE, content, true);\r\n this.updateState(newState);\r\n\r\n // The state has been updated by the previous line.\r\n } else if (this.imageState.purchaseOptions.creditCardOptions) {\r\n let newState = {};\r\n let content = {\r\n imageState: this.imageState\r\n };\r\n \r\n this.addShowConfirmOrderWindow(newState, false);\r\n this.creditCardAuthWindowShow(newState, content);\r\n this.updateState(newState);\r\n // The state has been updated by the previous line.\r\n } else {\r\n alert('Buy options are not supported.');\r\n return;\r\n }\r\n\r\n }\r\n\r\n confirmOrderWindowCallbackContinueClicked = (state) => {\r\n this.setState({loadingStatus: LOADING_STATUES.LOADING }, function() {\r\n this.confirmOrderWindowCallbackContinueClicked2(); \r\n });\r\n }\r\n\r\n confirmOrderWindowCallbackContinueClicked2 = (state) => {\r\n // image window accepted charges\r\n // 'state' param isn't used.\r\n \r\n // Complete the payment.\r\n let me = this;\r\n let request = this.createImageStateReference();\r\n\r\n // No content returned, just ok or not.\r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"imaging/payDownloadOrder\", request, { withCredentials: true })\r\n .then((response) => {\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n me.hideLoading();\r\n } else if (result.content().status === 'PAID') {\r\n this.props.refreshUsageBalanceFromContent(result.content().usageBalanceResult);\r\n\r\n // Close the confirm window, put up the image window.\r\n let newState = {};\r\n\r\n me.addShowConfirmOrderWindow(newState, false);\r\n me.imageWindowShow(newState);\r\n\r\n // The state has been updated by the previous line.\r\n // Chris bxp alert(result.content().usageBalanceResult.usageBalance);\r\n } else {\r\n me.showAlert(\r\n me.createAlertWindowParams(true, 'There are insufficient funds.', \r\n function() {\r\n me.recomputeDownloadOrder();\r\n }, ALERT_WARNING));\r\n }\r\n }, (error) => {\r\n AjaxResponseHandler.handleError(error, me.showAlertText, null);\r\n me.hideLoading();\r\n })\r\n })();\r\n }\r\n\r\n createCreditCardAuthWindowState = (action, content, show) => {\r\n content = content || {};\r\n\r\n let newState = {\r\n action: action,\r\n message: content.flatFeeMessage,\r\n show: show,\r\n token: content.token,\r\n version: ++this.version,\r\n event: {\r\n backClicked: this.creditCardAuthWindowCallbackBackClicked,\r\n closeClicked: this.creditCardAuthWindowCallbackCloseClicked,\r\n payClicked: this.creditCardAuthWindowCallbackPayClicked,\r\n }\r\n }\r\n\r\n return newState;\r\n }\r\n\r\n creditCardAuthWindowCallbackBackClicked = (state) => {\r\n console.log(PREFIX + 'creditCardAuthWindowCallbackBackClicked');\r\n\r\n // We want the preview window to show with the same state.\r\n let newState = {};\r\n \r\n this.addShowCreditCardAuthWindow(newState, false);\r\n this.addShowConfirmOrderWindow(newState, true);\r\n this.updateState(newState);\r\n }\r\n\r\n creditCardAuthWindowCallbackPayClicked = (authTrans) => {\r\n let request = authTrans;\r\n let me = this;\r\n\r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorizationResponse\", request, { withCredentials: true })\r\n .then((response) => {\r\n console.log(PREFIX + 'notify server of authorization response ', response);\r\n \r\n let result = new AjaxResult(response);\r\n \r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n\r\n if (result.content().authorizationOkay) {\r\n // Close the confirm window, put up the image window.\r\n let newState = {};\r\n\r\n me.addShowCreditCardAuthWindow(newState, false);\r\n me.addAlert(newState, me.createAlertWindowParams(true, 'Authorization successful', me.confirmOrderWindowCallbackContinueClicked, ALERT_MESSAGE));\r\n me.updateState(newState);\r\n } else {\r\n let newState = {};\r\n me.addShowCreditCardAuthWindow(newState, false);\r\n alert('Failed to process credit card authorization from Authorize.net. Note, you will ' +\r\n 'not be charged. Please contact the county or TriMin support for assitance');\r\n }\r\n }\r\n }, (error) => {\r\n let newState = {};\r\n me.addShowCreditCardAuthWindow(newState, false);\r\n\r\n AjaxResponseHandler.handleError(error, me.showAlertText, null);\r\n me.hideLoading();\r\n })\r\n })();\r\n }\r\n\r\n creditCardAuthWindowCallbackCloseClicked = (state) => {\r\n console.log(PREFIX + 'creditCardAuthWindowCallbackCloseClicked');\r\n\r\n // Close the window.\r\n let newState = {};\r\n\r\n this.addShowCreditCardAuthWindow(newState, false);\r\n this.setState(newState, function() {\r\n this.props.complete(); \r\n });\r\n }\r\n\r\n creditCardExceedingPreauthWindowCallbackContinueClicked = (state) => {\r\n let newState = {};\r\n this.addShowConfirmOrderWindow(newState, false);\r\n this.creditCardAuthWindowShow(newState, {});\r\n\r\n this.updateState(newState);\r\n\r\n }\r\n\r\n createEscrowAddonWindowState = (action, content, show) => {\r\n content = content || {};\r\n\r\n let newState = {\r\n action: action,\r\n imageState: content.imageState,\r\n show: show,\r\n version: ++this.version,\r\n event: {\r\n backClicked: this.escrowAddonWindowCallbackBackClicked,\r\n buyClicked: this.escrowAddonWindowCallbackBuyClicked,\r\n closeClicked: this.escrowAddonWindowCallbackCloseClicked\r\n }\r\n }\r\n\r\n return newState;\r\n }\r\n\r\n escrowAddonWindowCallbackBackClicked = (state) => {\r\n\r\n // We want the preview window to show with the same state.\r\n let newState = {};\r\n\r\n this.addShowEscrowAddonWindow(newState, false);\r\n this.addShowConfirmOrderWindow(newState, true);\r\n this.updateState(newState);\r\n }\r\n\r\n escrowAddonWindowCallbackBuyClicked = (state) => {\r\n let me = this;\r\n let newState = {};\r\n this.addShowEscrowAddonWindow(newState, false);\r\n this.updateState(newState);\r\n\r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"escrowDeposit/initiateDeposit\", \r\n {amount: state.deposit}, { withCredentials: true })\r\n .then((response) => {\r\n let result = new AjaxResult(response);\r\n\r\n this.setState({\r\n showCreditCardEscrowRechargeWindow: true,\r\n authAndCaptureToken: result.content().tokenResults.token\r\n });\r\n }, (error) => {\r\n this.setState({ loadingStatus: \"\" }, function() {\r\n AjaxResponseHandler.handleError(error, me.showAlertText, me.props.history);\r\n }); \r\n })\r\n })();\r\n }\r\n\r\n escrowAddonWindowCallbackCloseClicked = (state) => {\r\n \r\n // Close the window.\r\n let newState = {};\r\n\r\n this.addShowEscrowAddonWindow(newState, false);\r\n this.setState(newState, function() {\r\n this.props.complete(); \r\n });\r\n}\r\n\r\n createFlatFeeAddonWindowState = (show) => {\r\n let newState = {\r\n show: show,\r\n imageStateReference: { imageState: this.imageState }\r\n };\r\n \r\n return newState;\r\n }\r\n\r\n flatFeeAddonWindowCallbackCompleted = () => {\r\n // Close the window.\r\n let newState = {};\r\n\r\n this.addShowFlatFeeAddonWindow(newState, false);\r\n this.setState(newState, function() {\r\n this.confirmOrderWindowCallbackContinueClicked(); \r\n });\r\n }\r\n\r\n flatFeeAddonWindowCallbackBackClicked = () => {\r\n\r\n // We want the preview window to show with the same state.\r\n let newState = {};\r\n \r\n this.addShowFlatFeeAddonWindow(newState, false);\r\n this.addShowConfirmOrderWindow(newState, true);\r\n this.updateState(newState);\r\n }\r\n\r\n flatFeeAddonWindowCallbackCloseClicked = () => {\r\n // Close the window.\r\n let newState = {};\r\n\r\n this.addShowFlatFeeAddonWindow(newState, false);\r\n this.setState(newState, function() {\r\n this.props.complete(); \r\n });\r\n }\r\n\r\n addImageStateReference = (obj) => {\r\n obj.imageStateReference = this.createImageStateReference();\r\n return obj;\r\n }\r\n\r\n createImageStateReference = () => {\r\n let request = {\r\n imageStateGuid: this.imageState.guid\r\n };\r\n\r\n return request;\r\n }\r\n\r\n createPreviewWindowState = (action, content, show) => {\r\n return {\r\n action: action,\r\n content: content,\r\n instrumentCode: this.props.instCode,\r\n show: show,\r\n version: ++this.version\r\n }\r\n }\r\n\r\n previewWindowCallbackDownloadClicked = (state) => {\r\n // image window preview ok\r\n \r\n // I could just pass the incoming state as the request, however that\r\n // would mean the caller would know what we wanted the state for,\r\n // which would be a leaky abstraction.\r\n let request = {\r\n sourcedDocKey: state.sourcedDocKey,\r\n instrumentCode: state.instrumentCode,\r\n pagesSelected: state.pagesSelected,\r\n pageSelectionMethod: state.pageSelectionMethod,\r\n pageCount: state.pageCount\r\n };\r\n\r\n this.computeDownloadOrder(request, 'computeDownloadOrder');\r\n }\r\n \r\n recomputeDownloadOrder = () => {\r\n let request = this.createImageStateReference();\r\n\r\n this.computeDownloadOrder(request, 'recomputeDownloadOrder');\r\n }\r\n\r\n computeDownloadOrder = (request, action) => {\r\n // image window preview ok\r\n \r\n // Create new state, close the preview window as the default.\r\n let me = this;\r\n\r\n // Get the order details.\r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"imaging/\" + action, request, { withCredentials: true })\r\n .then((response) => {\r\n \r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n // Open the confirmation window.\r\n let newState = {};\r\n\r\n me.addShowPreviewWindow(newState, false);\r\n newState.confirmOrderWindow = {\r\n feeSchedule: result.content().feeSchedule,\r\n imageState: result.content().imageState,\r\n show: true\r\n };\r\n\r\n // Save some info for paying a confirmed payment.\r\n me.imageState = result.content().imageState;\r\n me.updateState(newState);\r\n }\r\n }, (error) => {\r\n AjaxResponseHandler.handleError(error, me.showAlertText, null);\r\n me.hideLoading();\r\n })\r\n })();\r\n }\r\n\r\n previewWindowCallbackCloseClicked = (state) => {\r\n let newState = {};\r\n\r\n this.addShowPreviewWindow(newState, false);\r\n this.setState(newState, function() {\r\n this.props.complete(); \r\n });\r\n }\r\n\r\n // Show the escrow add on window.\r\n // Provided in case escrow obtains any further options\r\n // other than a static window with none.\r\n escrowAddOnWindowShow = (newState, content) => {\r\n newState.escrowAddonWindow = this.createEscrowAddonWindowState(ACTION_UPDATE, content, true);\r\n this.updateState(newState);\r\n }\r\n\r\n // Show the credit card authorization window.\r\n creditCardAuthWindowShow = (newState, content) => {\r\n // Get the window options.\r\n let me = this;\r\n let request = {};\r\n\r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"creditcard/authorize\", request, { withCredentials: true })\r\n .then((response) => {\r\n console.log(PREFIX + 'authorize response', response);\r\n\r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n } else {\r\n content.token = result.content().token;\r\n newState.creditCardAuthWindow = me.createCreditCardAuthWindowState(ACTION_UPDATE, content, true);\r\n me.updateState(newState);\r\n }\r\n }, (error) => {\r\n AjaxResponseHandler.handleError(error, me.showAlertText, null);\r\n me.hideLoading();\r\n })\r\n })();\r\n }\r\n\r\n // Escrow Reacharge Window methods:\r\n hideEscrowPaymentPage = () => {\r\n this.setState({\r\n showCreditCardEscrowRechargeWindow: false\r\n })\r\n }\r\n\r\n handleEscrowPaymentComplete = (transactionResponse) => {\r\n let request = transactionResponse;\r\n let me = this;\r\n\r\n console.log(request);\r\n \r\n backendLogger.info(\"Attempting to call escrowDeposit/completeDeposit with transactionResponse: \" + JSON.stringify(request));\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"escrowDeposit/completeDeposit\", request, { withCredentials: true })\r\n .then((response) => {\r\n this.props.refreshUsageBalance({userId: this.props.currentUserId});\r\n \r\n this.setState({\r\n showCreditCardEscrowRechargeWindow: false,\r\n })\r\n }, (error) => {\r\n console.log(\"Error adding to escrow\");\r\n this.setState({ loadingStatus: \"\", showCreditCardEscrowRechargeWindow: false }, function() {\r\n AjaxResponseHandler.handleError(error, me.showAlertText, null);\r\n }); \r\n })\r\n }\r\n\r\n // Show the image window.\r\n imageWindowShow = (newState) => {\r\n this.addShowLoading(newState);\r\n \r\n let me = this;\r\n this.setState(newState, function() {\r\n me.props.complete();\r\n me.imageWindowShowStep2( {} );\r\n });\r\n }\r\n\r\n imageWindowShowStep2 = (newState) => {\r\n let me = this;\r\n let request = this.createImageStateReference();\r\n\r\n (async () => {\r\n await\r\n axios.post(configData.LANDSHARK_SERVER_URL + \"imaging/getImage\", request, { withCredentials: true })\r\n .then((response) => {\r\n \r\n let result = new AjaxResult(response);\r\n\r\n if (!result.isOk()) {\r\n result.handleError();\r\n me.hideLoading();\r\n } else if (!result.content().preview) {\r\n // bxp is this test even necessary ?\r\n // deprecated -- const byteCharacters = atob(result.content().pdf);\r\n const byteCharacters = Buffer.from(result.content().pdf, 'base64').toString('binary');\r\n const byteArrays = [];\r\n\r\n for (let offset = 0; offset < byteCharacters.length; offset += 512) {\r\n const slice = byteCharacters.slice(offset, offset + 512);\r\n const byteNumbers = new Array(slice.length);\r\n\r\n for (let i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n const byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n const blob = new Blob(byteArrays, { type: 'application/pdf' });\r\n \r\n let fileName = result.content().header.uiSaveAsImageName;\r\n let suffix = 'pdf';\r\n\r\n if (!fileName) {\r\n fileName = 'image' + '.' + suffix;\r\n }\r\n\r\n fileName = fileName.replace('%%SUFFIX%%', suffix);\r\n\r\n me.updateState(newState);\r\n saveAs(blob, fileName);\r\n me.hideLoading();\r\n } else {\r\n alert('There is no content to show');\r\n me.updateState(newState);\r\n }\r\n\r\n // It's ok to leave this.imageState set on the rare chance there is a\r\n // problem displaying the image.\r\n }, (error) => {\r\n AjaxResponseHandler.handleError(error, me.showAlertText, null);\r\n me.hideLoading();\r\n })\r\n })();\r\n\r\n }\r\n \r\n addShowConfirmOrderWindow = (state, show) => {\r\n state.confirmOrderWindow = { ...this.state.confirmOrderWindow, show: show};\r\n }\r\n\r\n addShowEscrowAddonWindow = (state, show) => {\r\n state.escrowAddonWindow = this.createEscrowAddonWindowState(ACTION_SHOW, null, show);\r\n }\r\n\r\n addShowFlatFeeAddonWindow = (state, show) => {\r\n state.flatFeeAddonWindow = this.createFlatFeeAddonWindowState(show);\r\n }\r\n\r\n addShowCreditCardAuthWindow = (state, show) => {\r\n state.creditCardAuthWindow = this.createCreditCardAuthWindowState(ACTION_SHOW, null, show);\r\n }\r\n\r\n addShowPreviewWindow = (state, show) => {\r\n state.previewWindow = this.createPreviewWindowState(ACTION_SHOW, null, show);\r\n }\r\n\r\n updateState = (newState) => {\r\n this.setState(newState);\r\n }\r\n \r\n createAlertWindowParams = (show, message, callback, type) => {\r\n if (show) {\r\n return {\r\n callback: callback,\r\n message: message,\r\n show: show,\r\n type: type ? type : ALERT_MESSAGE\r\n };\r\n } else {\r\n return {\r\n callback: null,\r\n message: '',\r\n show: show,\r\n type: ALERT_MESSAGE\r\n };\r\n }\r\n }\r\n\r\n addAlert = (state, alertWindowParams) => {\r\n\t\tstate.alertWindow = alertWindowParams;\r\n }\r\n\t\r\n showAlert = (alertWindowParams) => {\r\n\t\tthis.setState({\r\n\t\t alertWindow: alertWindowParams\r\n\t\t})\r\n\t }\r\n\t\r\n showAlertText = (msg) => {\r\n this.showAlert(this.createAlertWindowParams(true, msg, null, ALERT_MESSAGE));\r\n }\r\n\r\n\thideAlert = () => {\r\n // After the alert is confirmed, close the alert and pay for the order.\r\n let callback = this.state.alertWindow.callback;\r\n let params = this.createAlertWindowParams(false);\r\n\t\tthis.setState({\r\n\t\t\t alertWindow: params\r\n\t\t },\r\n () => { if (callback) callback(); }\r\n );\r\n\t}\r\n\r\n render() {\r\n if (true) {\r\n console.log(\"BEGIN thumbnails ###################################\");\r\n console.log(\"preview: \" + this.state.previewWindow.show)\r\n console.log(\"confirm: \" + this.state.confirmOrderWindow.show)\r\n console.log(\"flat fee add on: \" + this.state.flatFeeAddonWindow.show)\r\n console.log(\"END thumbnails ###################################\");\r\n }\r\n\r\n return (\r\n <>\r\n <Loading loadingIndicator={this.state.loadingStatus === LOADING_STATUES.LOADING} />\r\n <PreviewWindow previewWindow={this.state.previewWindow} \r\n sourcedDocKey={this.props.sourcedDocKey} \r\n instCode={this.props.instCode} \r\n closeClicked={this.previewWindowCallbackCloseClicked} \r\n downloadClicked={this.previewWindowCallbackDownloadClicked} />\r\n <ImageConfirmOrderWindow \r\n show={this.state.confirmOrderWindow.show} \r\n feeSchedule={this.state.confirmOrderWindow.feeSchedule} \r\n imageState={this.state.confirmOrderWindow.imageState} \r\n backClicked={this.confirmOrderWindowCallbackBackClicked}\r\n buyOptionsClicked={this.confirmOrderWindowCallbackBuyOptionsClicked}\r\n closeClicked={this.confirmOrderWindowCallbackCloseClicked}\r\n continueClicked={this.confirmOrderWindowCallbackContinueClicked}\r\n reauthClicked={this.creditCardExceedingPreauthWindowCallbackContinueClicked} />\r\n <FlatFeeAddon\r\n show={this.state.flatFeeAddonWindow.show}\r\n imageStateReference={this.state.flatFeeAddonWindow.imageStateReference}\r\n backClicked={this.flatFeeAddonWindowCallbackBackClicked}\r\n completed={this.flatFeeAddonWindowCallbackCompleted}\r\n closeClicked={this.flatFeeAddonWindowCallbackCloseClicked} />\r\n <CreditCardAuthWindow creditCardAuthWindow={this.state.creditCardAuthWindow} />\r\n <EscrowAddonWindow escrowAddonWindow={this.state.escrowAddonWindow} />\r\n <CreditCardImmediateChargeWindow show={this.state.showCreditCardEscrowRechargeWindow} token={this.state.authAndCaptureToken}\r\n cancelPayment={this.hideEscrowPaymentPage} makePayment={this.handleEscrowPaymentComplete} title='Escrow Deposit - Credit Card Authorization' />\r\n <Alert show={this.state.alertWindow.show} hideAlert={this.hideAlert} message={this.state.alertWindow.message} type={this.state.alertWindow.type} />\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, matchDispatchToProps)(Thumbnails);"],"sourceRoot":""}